第七章:一麵·技術麵試
作者:空天自碧      更新:2020-09-24 22:16      字數:2521
  比約定的麵試時間提前了二十分鍾,周天白來到望京科技園,他在樓下轉了會,十分鍾過後,他敲開了公司的門。

  接待他的前台小妹把他帶到了一間空曠的會議室,在辦公區旁邊,他隨意撇了眼看下,工位大約七八十個個,分為三個區,員工看著都挺年輕,看上去都挺認真工作。

  前台小妹給他倒了一杯水放下一張麵試職位表和一隻筆之後就離開了。

  大概十分鍾之後,一位中年男人進來了,周天白站起來微笑,來人點點頭:“坐下吧,我是今天的麵試官王越,技術部負責人。”

  周天白把剛才從包裏拿出的簡曆雙手雙手遞給了麵試官:“你好,王總,我是今天來應聘貴司軟件開發的周天白,這是我的簡曆。”

  麵試官接過簡曆之後,瀏覽了一下,問他:“你是機械工程專業的,怎麽會想到自學開發?”

  “大二下學期的時候,開始對代碼感興趣就開始自學,了解越多學習越深之後更加願意有意願加入IT行業,一邊學習一邊動手做項目。”

  “哦,那你是怎麽自學的呢?”

  “了解階段是從簡單的基礎協議開始看的,在3shool網站上進行學習,決定入門後從軟件工程係同學那借了專業書籍,配合廖雪鬆老師的視頻,論壇,各個老師的博客,從命名、環境變量等基礎開始係統的學習,在實戰過程中給學校寫了網站和麵向師生的APP。原計劃是報雙專業的,因為一點事錯過了報名時間所以經常去軟件係蹭課。”

  “4個瓶蓋換1瓶酒,要喝150瓶酒,最少多少瓶?”

  “113瓶,買一瓶喝掉一瓶,攢夠4個瓶蓋就去換一瓶,最初的4瓶是需要購買的,之後每4瓶中就有1瓶是兌換來的,也就第,n=1,2,3...瓶都是兌換來的。n最大取37,所以隻需要買113瓶。數學算法是:150/4=37.5,150-37=113。”

  “給你一個5L和3L桶,水無限多,怎麽到出4L水?”

  “先將3L的桶裝滿水,倒入5L的桶裏。再重新將3L的桶裝滿水,倒入5L的桶裏,把5L的桶裝滿後,這樣3L的桶中就剩下1L的水了。然後把5L的桶裏的水倒掉,把3L的桶中剩下的1L水倒入5L的桶裏。再打滿3L的水倒入5L的桶裏,就是4L了。”

  “能談談你對三次握手四次揮手的理解嗎?”

  “TCP協議,在發送數據前,通信雙方必須在彼此間建立一條連接。在連接的建立過程中,雙方需要交換一些連接的參數。TCP提供了一種可靠、麵向連接、字節流、傳輸層的服務,采用三次握手建立一個連接。采用4次揮手來關閉一個連接。

  第一次握手:客戶端發送網絡包,服務端收到了。這樣服務端就能得知道:客戶端的發送能力、服務端的接收能力;第二次握手:服務端發包,客戶端收到了。這樣客戶端就能得出結論:服務端的接收、發送能力,客戶端的接收、發送能力;第三次握手:客戶端發包,服務端收到了。這樣服務端知道客戶端的接受發送能力。

  三次握手的目的並不隻是讓通信雙方都了解到一個連接正在建立,還在於利用數據包的選項來傳輸特殊的信息,交換初始序列號ISN。3次握手是指發送了3個報文段,4次揮手是指發送了4個報文段。

  更簡單的理解是處理客戶端和服務端之間的連接通信,確保雙方的接收發送能力。”

  “什麽時候用斷言?”

  “通常在開發和測試時候開啟,為了提高性能,在軟件發布後,斷言堅持通常是關閉的。它是包含布爾運算表達式的語句,可通過其返回值來判斷驗證傳值參數,但不能用斷言去改變程序的狀態。”

  “簡曆上有說你有自己寫APP及網站,能看看嗎?”

  周天白拿出自己手機在頁麵上找到了“工大通”APP,雙手遞給麵試官:“是這個,是一款校園軟件,麵向師生,根據其身份來開放對應權限,產品需求15天,開發周期70天,測試發布一周。網站是我們學校的一個教務係統。”

  麵試官接過手機後,點了APP,問道:“你們是幾個人,如何分工的?”

  “四個人,我們宿舍的人都自學了開發,需求階段是大家一起參與,開發是我和一位舍友負責後端接口及數據庫、運維,另兩位舍友負責前端,測試也是大家一起參與的。”

  “好的,那你在測試過程中都會發現什麽問題呢?”

  “主要是空指針,回傳異常,判斷失誤等。”

  “學生你們是根據學號來判斷用戶信息的,那老師和非在校人員是通過什麽來判斷的?”

  “老師的話是通過係別年級名字來唯一性校驗的,我們從學校網站上收集了一份老師名單加到了數據庫中,每月更新數據。非在校人員暫時沒有給登錄瀏覽權限。”

  “你們數據大概有多少?如果數據多了,查詢耗時太慢怎麽辦?”麵試官問問題的同時也一直在用一隻手滑動APP頁麵。

  “我們數據並不太多,不到一百萬。在之後的測試環境中構造過500萬數據,模擬了慢查詢,簡單的單個條件查詢,耗時40秒。後續對數據控製了去重去空、加組合索引,創建內存臨時表數據先插入臨時表中,優化索引等操作來調優。”

  “好的,那兩個對象屬性名不一樣如何將一個對象的屬性值賦給另一個對象?”

  “兩者屬性相同且都是公開的時候,直接傳,objA.屬性A=objB.屬性B;類型不同,可以強製轉換,或者構造對象,再依次複製內部的屬性,或許用反射映射屬性。”

  當麵試官劃到“找校友”這模塊時,搜索留言校友圈來回切換幾次後再搜索返回的時候,程序崩了,他稍微抬了下頭:“有過棧溢出導致進程崩潰卡死的問題麽。”

  周天白看到了頁麵上明晃晃的“程序已停止”提示,帶點尷尬的說道:“有過,直觀點的看到StackOverflowError異常就去jvm上找,隱蔽一點的會從crash日誌裏查找或是借redump分析;我們碰見過此類問題的大多是在寫代碼時出現遞歸死循環,線程棧空間設置比較小。”

  “嗯,即使有過一兩年經驗的程序員有時候也會出現這樣的問題,那你們在學習過程中哪部分會學起來覺得吃力呢?”

  “二叉樹,圖這類的算法在初步接觸的時候學起來是比較吃力用時也是比較久的,後麵在實踐過程中也是有用到並不斷和軟件係工程的同學進行交流,有了更深層的了解和運用。”

  “好的,關於你的情況我大概了解了,我這邊的麵試先到此結束,接下來如果你有時間我再安排一次人力麵試。”

  “有的。”

  “好的,那你稍等。”說完,麵試官便起身離開。