第七章:一面·技術(shù)面試
比約定的面試時(shí)間提前了二十分鐘,,周天白來(lái)到望京科技園,,他在樓下轉(zhuǎn)了會(huì),十分鐘過(guò)后,,他敲開了公司的門,。
接待他的前臺(tái)小妹把他帶到了一間空曠的會(huì)議室,,在辦公區(qū)旁邊,他隨意撇了眼看下,,工位大約七八十個(gè)個(gè),,分為三個(gè)區(qū),員工看著都挺年輕,,看上去都挺認(rèn)真工作,。
前臺(tái)小妹給他倒了一杯水放下一張面試職位表和一只筆之后就離開了。
大概十分鐘之后,,一位中年男人進(jìn)來(lái)了,,周天白站起來(lái)微笑,來(lái)人點(diǎn)點(diǎn)頭:“坐下吧,,我是今天的面試官王越,,技術(shù)部負(fù)責(zé)人,。”
周天白把剛才從包里拿出的簡(jiǎn)歷雙手雙手遞給了面試官:“你好,,王總,,我是今天來(lái)應(yīng)聘貴司軟件開發(fā)的周天白,,這是我的簡(jiǎn)歷,。”
面試官接過(guò)簡(jiǎn)歷之后,,瀏覽了一下,,問(wèn)他:“你是機(jī)械工程專業(yè)的,怎么會(huì)想到自學(xué)開發(fā),?”
“大二下學(xué)期的時(shí)候,,開始對(duì)代碼感興趣就開始自學(xué),了解越多學(xué)習(xí)越深之后更加愿意有意愿加入IT行業(yè),,一邊學(xué)習(xí)一邊動(dòng)手做項(xiàng)目,。”
“哦,,那你是怎么自學(xué)的呢,?”
“了解階段是從簡(jiǎn)單的基礎(chǔ)協(xié)議開始看的,在3Wshool網(wǎng)站上進(jìn)行學(xué)習(xí),,決定入門后從軟件工程系同學(xué)那借了專業(yè)書籍,,配合廖雪松老師的視頻,CSDN論壇,,各個(gè)老師的博客,。”
他補(bǔ)充:“從命名,、環(huán)境變量等基礎(chǔ)開始系統(tǒng)的學(xué)習(xí),,在實(shí)戰(zhàn)過(guò)程中給學(xué)校寫了網(wǎng)站和面向師生的APP?!?p> “我原計(jì)劃是報(bào)雙專業(yè)的,,因?yàn)橐稽c(diǎn)事錯(cuò)過(guò)了報(bào)名時(shí)間所以經(jīng)常去軟件系蹭課?!?p> 面試人直接換了個(gè)問(wèn)題:“4個(gè)瓶蓋換1瓶酒,,要喝150瓶酒,最少多少瓶,?”
“113瓶,,買一瓶喝掉一瓶,攢夠4個(gè)瓶蓋就去換一瓶,,最初的4瓶是需要購(gòu)買的,,之后每4瓶中就有1瓶是兌換來(lái)的,,也就第(1+n*4),n=1,,2,,3...瓶都是兌換來(lái)的。n最大取37,,所以只需要買113瓶,。數(shù)學(xué)算法是:150/4=37.5,150-37=113,?!?p> “給你一個(gè)5L和3L桶,水無(wú)限多,,怎么到出4L水,?”
“先將 3L 的桶裝滿水,倒入 5L 的桶里,。再重新將 3L 的桶裝滿水,,倒入 5L 的桶里,把 5 L 的桶裝滿后,,這樣 3L 的桶中就剩下 1L 的水了,。然后把 5L 的桶里的水倒掉,把 3L 的桶中剩下的 1L 水倒入 5L 的桶里,。再打滿 3L 的水倒入 5L 的桶里,,就是 4L 了?!?p> “能談?wù)勀銓?duì)三次握手四次揮手的理解嗎,?”
“TCP協(xié)議,在發(fā)送數(shù)據(jù)前,,通信雙方必須在彼此間建立一條連接,。在連接的建立過(guò)程中,雙方需要交換一些連接的參數(shù),。TCP提供了一種可靠,、面向連接、字節(jié)流,、傳輸層的服務(wù),,采用三次握手建立一個(gè)連接。
采用4次揮手來(lái)關(guān)閉一個(gè)連接,。
第一次握手:客戶端發(fā)送網(wǎng)絡(luò)包,,服務(wù)端收到了。這樣服務(wù)端就能得知道:客戶端的發(fā)送能力、服務(wù)端的接收能力,;
第二次握手:服務(wù)端發(fā)包,,客戶端收到了。這樣客戶端就能得出結(jié)論:服務(wù)端的接收,、發(fā)送能力,,客戶端的接收、發(fā)送能力,;
第三次握手:客戶端發(fā)包,,服務(wù)端收到了。這樣服務(wù)端知道客戶端的接受發(fā)送能力,。
三次握手的目的并不只是讓通信雙方都了解到一個(gè)連接正在建立,,還在于利用數(shù)據(jù)包的選項(xiàng)來(lái)傳輸特殊的信息,,交換初始序列號(hào)ISN,。3次握手是指發(fā)送了3個(gè)報(bào)文段,4次揮手是指發(fā)送了4個(gè)報(bào)文段,。
更簡(jiǎn)單的理解是處理客戶端和服務(wù)端之間的連接通信,,確保雙方的接收發(fā)送能力?!?p> “什么時(shí)候用斷言,?”
“通常在開發(fā)和測(cè)試時(shí)候開啟,為了提高性能,,在軟件發(fā)布后,,斷言堅(jiān)持通常是關(guān)閉的。它是包含布爾運(yùn)算表達(dá)式的語(yǔ)句,,可通過(guò)其返回值來(lái)判斷驗(yàn)證傳值參數(shù),,但不能用斷言去改變程序的狀態(tài)?!?p> “簡(jiǎn)歷上有說(shuō)你有自己寫APP及網(wǎng)站,,能看看嗎?”
周天白拿出自己手機(jī)在頁(yè)面上找到了“工大通”APP,,雙手遞給面試官:“是這個(gè),,是一款校園軟件,面向師生,,根據(jù)其身份來(lái)開放對(duì)應(yīng)權(quán)限,,產(chǎn)品需求15天,開發(fā)周期80天,,測(cè)試發(fā)布一周,。網(wǎng)站是我們學(xué)校的一個(gè)教務(wù)系統(tǒng)?!?p> 面試官接過(guò)手機(jī)后,,點(diǎn)了APP,,問(wèn)道:“你們是幾個(gè)人,如何分工的,?”
“四個(gè)人,,我們宿舍的人都自學(xué)了開發(fā),需求階段是大家一起參與,,開發(fā)是我和一位舍友負(fù)責(zé)后端接口及數(shù)據(jù)庫(kù),、運(yùn)維,另兩位舍友負(fù)責(zé)前端,,測(cè)試也是大家一起參與的,。”
“好的,,那你在測(cè)試過(guò)程中都會(huì)發(fā)現(xiàn)什么問(wèn)題呢,?”
“主要是空指針,回傳異常,,判斷失誤等,。”
“學(xué)生你們是根據(jù)學(xué)號(hào)來(lái)判斷用戶信息的,,那老師和非在校人員是通過(guò)什么來(lái)判斷的,?”
“老師的話是通過(guò)系別年級(jí)名字來(lái)唯一性校驗(yàn)的,我們從學(xué)校網(wǎng)站上收集了一份老師名單加到了數(shù)據(jù)庫(kù)中,,每月更新數(shù)據(jù),。非在校人員暫時(shí)沒(méi)有給登錄瀏覽權(quán)限?!?p> “你們數(shù)據(jù)大概有多少,?如果數(shù)據(jù)多了,查詢耗時(shí)太慢怎么辦,?”面試官問(wèn)問(wèn)題的同時(shí)也一直在用一只手滑動(dòng)APP頁(yè)面,。
“我們數(shù)據(jù)并不太多,不到一百萬(wàn),。在之后的測(cè)試環(huán)境中構(gòu)造過(guò)500萬(wàn)數(shù)據(jù),,模擬了慢查詢,簡(jiǎn)單的單個(gè)條件查詢,,耗時(shí)40秒,。后續(xù)對(duì)數(shù)據(jù)控制了去重去空、加組合索引,,創(chuàng)建內(nèi)存臨時(shí)表數(shù)據(jù)先插入臨時(shí)表中,,優(yōu)化索引等操作來(lái)調(diào)優(yōu)。”
“好的,,那兩個(gè)對(duì)象屬性名不一樣如何將一個(gè)對(duì)象的屬性值賦給另一個(gè)對(duì)象,?”
“兩者屬性相同且都是公開的時(shí)候,直接傳,,objA.屬性A=objB.屬性B,;類型不同,可以強(qiáng)制轉(zhuǎn)換,,或者構(gòu)造對(duì)象,,再依次復(fù)制內(nèi)部的屬性,或許用反射映射屬性,?!?p> 當(dāng)面試官劃到“找校友”這模塊時(shí),搜索留言校友圈來(lái)回切換幾次后再搜索返回的時(shí)候,,程序崩了,,他稍微抬了下頭:“有過(guò)棧溢出導(dǎo)致進(jìn)程崩潰卡死的問(wèn)題麼?!?p> 周天白看到了頁(yè)面上明晃晃的“程序已停止”提示,。
“有過(guò),直觀點(diǎn)的看到StackOverflowError異常就去jvm上找,,隱蔽一點(diǎn)的會(huì)從crash日志里查找或是借助coredump分析;”
“我們碰見過(guò)此類問(wèn)題的大多是在寫代碼時(shí)出現(xiàn)遞歸死循環(huán),,線程??臻g設(shè)置比較小?!?p> “嗯,,即使有過(guò)一兩年經(jīng)驗(yàn)的程序員有時(shí)候也會(huì)出現(xiàn)這樣的問(wèn)題,那你們?cè)趯W(xué)習(xí)過(guò)程中哪部分會(huì)學(xué)起來(lái)覺得吃力呢,?”
“二叉樹,,圖這類的算法在初步接觸的時(shí)候?qū)W起來(lái)是比較吃力用時(shí)也是比較久的,后面在實(shí)踐過(guò)程中也是有用到并不斷和軟件系工程的同學(xué)進(jìn)行交流,,有了更深層的了解和運(yùn)用,。”
“好的,,關(guān)于你的情況我大概了解了,,我這邊的面試先到此結(jié)束,接下來(lái)如果你有時(shí)間我再安排一次人力面試,?!?p> “有的。”
“好的,,那你稍等,。”說(shuō)完,,面試官便起身離開,。