首頁 現(xiàn)實(shí)

90后的互聯(lián)網(wǎng)時(shí)代

第七章:一面·技術(shù)面試

  比約定的面試時(shí)間提前了二十分鐘,周天白來到望京科技園,他在樓下轉(zhuǎn)了會(huì),十分鐘過后,他敲開了公司的門。

  接待他的前臺(tái)小妹把他帶到了一間空曠的會(huì)議室,在辦公區(qū)旁邊,他隨意撇了眼看下,工位大約七八十個(gè)個(gè),分為三個(gè)區(qū),員工看著都挺年輕,看上去都挺認(rèn)真工作。

  前臺(tái)小妹給他倒了一杯水放下一張面試職位表和一只筆之后就離開了。

  大概十分鐘之后,一位中年男人進(jìn)來了,周天白站起來微笑,來人點(diǎn)點(diǎn)頭:“坐下吧,我是今天的面試官王越,技術(shù)部負(fù)責(zé)人。”

  周天白把剛才從包里拿出的簡(jiǎn)歷雙手雙手遞給了面試官:“你好,王總,我是今天來應(yīng)聘貴司軟件開發(fā)的周天白,這是我的簡(jiǎn)歷?!?p>  面試官接過簡(jiǎn)歷之后,瀏覽了一下,問他:“你是機(jī)械工程專業(yè)的,怎么會(huì)想到自學(xué)開發(fā)?”

  “大二下學(xué)期的時(shí)候,開始對(duì)代碼感興趣就開始自學(xué),了解越多學(xué)習(xí)越深之后更加愿意有意愿加入IT行業(yè),一邊學(xué)習(xí)一邊動(dòng)手做項(xiàng)目?!?p>  “哦,那你是怎么自學(xué)的呢?”

  “了解階段是從簡(jiǎn)單的基礎(chǔ)協(xié)議開始看的,在3Wshool網(wǎng)站上進(jìn)行學(xué)習(xí),決定入門后從軟件工程系同學(xué)那借了專業(yè)書籍,配合廖雪松老師的視頻,CSDN論壇,各個(gè)老師的博客?!?p>  他補(bǔ)充:“從命名、環(huán)境變量等基礎(chǔ)開始系統(tǒng)的學(xué)習(xí),在實(shí)戰(zhàn)過程中給學(xué)校寫了網(wǎng)站和面向師生的APP?!?p>  “我原計(jì)劃是報(bào)雙專業(yè)的,因?yàn)橐稽c(diǎn)事錯(cuò)過了報(bào)名時(shí)間所以經(jīng)常去軟件系蹭課?!?p>  面試人直接換了個(gè)問題:“4個(gè)瓶蓋換1瓶酒,要喝150瓶酒,最少多少瓶?”

  “113瓶,買一瓶喝掉一瓶,攢夠4個(gè)瓶蓋就去換一瓶,最初的4瓶是需要購買的,之后每4瓶中就有1瓶是兌換來的,也就第(1+n*4),n=1,2,3...瓶都是兌換來的。n最大取37,所以只需要買113瓶。數(shù)學(xué)算法是:150/4=37.5,150-37=113?!?p>  “給你一個(gè)5L和3L桶,水無限多,怎么到出4L水?”

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

  “能談?wù)勀銓?duì)三次握手四次揮手的理解嗎?”

  “TCP協(xié)議,在發(fā)送數(shù)據(jù)前,通信雙方必須在彼此間建立一條連接。在連接的建立過程中,雙方需要交換一些連接的參數(shù)。TCP提供了一種可靠、面向連接、字節(jié)流、傳輸層的服務(wù),采用三次握手建立一個(gè)連接。

  采用4次揮手來關(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)來傳輸特殊的信息,交換初始序列號(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àn)證傳值參數(shù),但不能用斷言去改變程序的狀態(tài)?!?p>  “簡(jiǎn)歷上有說你有自己寫APP及網(wǎng)站,能看看嗎?”

  周天白拿出自己手機(jī)在頁面上找到了“工大通”APP,雙手遞給面試官:“是這個(gè),是一款校園軟件,面向師生,根據(jù)其身份來開放對(duì)應(yīng)權(quán)限,產(chǎn)品需求15天,開發(fā)周期80天,測(cè)試發(fā)布一周。網(wǎng)站是我們學(xué)校的一個(gè)教務(wù)系統(tǒng)。”

  面試官接過手機(jī)后,點(diǎn)了APP,問道:“你們是幾個(gè)人,如何分工的?”

  “四個(gè)人,我們宿舍的人都自學(xué)了開發(fā),需求階段是大家一起參與,開發(fā)是我和一位舍友負(fù)責(zé)后端接口及數(shù)據(jù)庫、運(yùn)維,另兩位舍友負(fù)責(zé)前端,測(cè)試也是大家一起參與的?!?p>  “好的,那你在測(cè)試過程中都會(huì)發(fā)現(xiàn)什么問題呢?”

  “主要是空指針,回傳異常,判斷失誤等?!?p>  “學(xué)生你們是根據(jù)學(xué)號(hào)來判斷用戶信息的,那老師和非在校人員是通過什么來判斷的?”

  “老師的話是通過系別年級(jí)名字來唯一性校驗(yàn)的,我們從學(xué)校網(wǎng)站上收集了一份老師名單加到了數(shù)據(jù)庫中,每月更新數(shù)據(jù)。非在校人員暫時(shí)沒有給登錄瀏覽權(quán)限?!?p>  “你們數(shù)據(jù)大概有多少?如果數(shù)據(jù)多了,查詢耗時(shí)太慢怎么辦?”面試官問問題的同時(shí)也一直在用一只手滑動(dòng)APP頁面。

  “我們數(shù)據(jù)并不太多,不到一百萬。在之后的測(cè)試環(huán)境中構(gòu)造過500萬數(shù)據(jù),模擬了慢查詢,簡(jiǎn)單的單個(gè)條件查詢,耗時(shí)40秒。后續(xù)對(duì)數(shù)據(jù)控制了去重去空、加組合索引,創(chuàng)建內(nèi)存臨時(shí)表數(shù)據(jù)先插入臨時(shí)表中,優(yōu)化索引等操作來調(diào)優(yōu)?!?p>  “好的,那兩個(gè)對(duì)象屬性名不一樣如何將一個(gè)對(duì)象的屬性值賦給另一個(gè)對(duì)象?”

  “兩者屬性相同且都是公開的時(shí)候,直接傳,objA.屬性A=objB.屬性B;類型不同,可以強(qiáng)制轉(zhuǎn)換,或者構(gòu)造對(duì)象,再依次復(fù)制內(nèi)部的屬性,或許用反射映射屬性。”

  當(dāng)面試官劃到“找校友”這模塊時(shí),搜索留言校友圈來回切換幾次后再搜索返回的時(shí)候,程序崩了,他稍微抬了下頭:“有過棧溢出導(dǎo)致進(jìn)程崩潰卡死的問題麼?!?p>  周天白看到了頁面上明晃晃的“程序已停止”提示。

  “有過,直觀點(diǎn)的看到StackOverflowError異常就去jvm上找,隱蔽一點(diǎn)的會(huì)從crash日志里查找或是借助coredump分析;”

  “我們碰見過此類問題的大多是在寫代碼時(shí)出現(xiàn)遞歸死循環(huán),線程??臻g設(shè)置比較小?!?p>  “嗯,即使有過一兩年經(jīng)驗(yàn)的程序員有時(shí)候也會(huì)出現(xiàn)這樣的問題,那你們?cè)趯W(xué)習(xí)過程中哪部分會(huì)學(xué)起來覺得吃力呢?”

  “二叉樹,圖這類的算法在初步接觸的時(shí)候?qū)W起來是比較吃力用時(shí)也是比較久的,后面在實(shí)踐過程中也是有用到并不斷和軟件系工程的同學(xué)進(jìn)行交流,有了更深層的了解和運(yùn)用?!?p>  “好的,關(guān)于你的情況我大概了解了,我這邊的面試先到此結(jié)束,接下來如果你有時(shí)間我再安排一次人力面試。”

  “有的。”

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

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進(jìn)入下一章  按 “空格鍵” 向下滾動(dòng)
目錄
目錄
設(shè)置
設(shè)置
書架
加入書架
書頁
返回書頁
指南