不一樣的面試(發現自己最大的問題之一)

小弟季義欽發表於2012-11-07

今天被北京XXX公司(著名廣告投放公司)鄙視了。面試官是個中年男子,很帥氣,雖然面試官人很好,但是還是讓我心情不爽。

一進去就說先來個組成原理的題吧: CPU,主存,北橋,南橋,速度不一致,快取之類的,這個很簡單,回答出來了,面試官說了好幾個good,還挺滿足的。

接下來說做一道作業系統的題吧:我在word裡面寫了一些文字,點選儲存。

(1) 他有沒有寫到磁碟上?

(2) 如果寫了,是一個怎麼樣的詳細過程,如果沒寫,在哪兒?

回答了磁碟快取,檔案操作會經過一個轉換層轉換成塊IO操作,然後由裝置驅動將這些塊IO的請求寫到快取,快取進行排程,然後分別寫到磁碟。

如果檔案不夠大,不會寫到磁碟,會先到緩衝區之類的。。。 差不多就這些。看樣子面試官不滿意我的回答。

接下來說我們做一個網路的題吧: 我在瀏覽器出入新浪的域名,然後就看到他的主頁了,讓我解釋這個過程:

(1)我說先請求DNS,將域名轉換成IP。 面試官說不詳細,讓我在詳細介紹DNS的流程/結構。我就說有什麼遞迴查詢了,可能會訪問頂級域名伺服器啊,他說我說的還是隻是其中一個方面。想半天想不出來,然後他說大概會經過:本地快取查詢-》DHCP-》然後才是請求DNS。

(2)接下來我說拿到IP之後會傳送一個IP資料包,通過在Internet上面的路由選擇到達sina的伺服器,然後他會響應這個請求。然後面試官馬上就問了,那你說說響應是怎麼回來的?我說響應的IP資料包也有目的IP地址啊,經過路由選擇到達區域網之後通過MAC地址找到你的主機。他說不完善,然後我有事想了一通想不出來他想知道什麼。。。最後他說客戶端請求的時候,會生成一個臨時埠號,然後響應的資料包回來的時候會送到這個埠,客戶端會監聽這個埠。大概就是這個意思吧。。。

(3)然後面試官又問我了:你知道一般這個請求會傳送多少個IP資料包麼?汗。。。 我說看頁面的大小吧。。。面試官仍然不滿意我的回答,忘了他說什麼了。。。

(4)然後又問我,我請求的頁面是全部內容都會發過來麼? 這個直接被鄙視。我說靜態部分應該會全部發過來,動態部分應該要是情況而定(基本是蒙的)。面試官耐心地給我解釋,說有一個什麼“html樹”,每一個節點都會傳送各自的請求什麼的。。。 不懂,看來得查一查。

這裡比較詳細地講解了整個過程:http://zhan.renren.com/seochina?gid=3602888497994264527&checked=true

好吧,我們再來做一個編譯原理的題吧(。。。):你說你會java,那麼你說一個,從一個java原始檔,到在機器上的二進位制可執行檔案這個過程是怎麼樣的?

我就說java會有自己平臺無關的jvm指令集,首先會將原始檔編譯成位元組碼檔案,就是這樣的指令集表示的,然後會彙編成為依賴於具體的硬體平臺的彙編,然後彙編程式就會連結,然後轉換成二進位制碼執行。。。其實我基本上是在憑感覺說。。。 面試官又說我說的太粗糙了。。。漢。。。好幾次這樣說我了。(說實話,我遇到過好幾個人說我對各種計算機領域的只是理解不夠深入了。。。看來我平時應該多注意這種細節問題的思考和探知啊)。 然後面試官問我知道語法樹麼。我馬上明白了,原來他是要我回答編譯原理方面的細節啊,說實話,什麼詞法分析,語法分析,語義分析,優化之類的我早忘記了。。。不過面試官還是耐心地給我講了一下。

完了又問我,你知道為什麼要轉換成彙編麼? 哎,為什麼啊,我回答說彙編是依賴於體系結構的最原始的“高階語言”,開始的時候我們不可能直接寫二進位制程式碼,就弄了這樣好理解的符號化的東西。。。我好想回答的不是他問的,哎,又被鄙視了。

接下來,我們在做一個java的題吧:

try{

int x;

x = 1;

return x;

}catch(Exception e){

x = 2;

}finally{

x = 3;

}

返回什麼? 我說肯定不是2,執行return x之前會先執行finally,所以是3。

好吧,錯了。面試官又是耐心給我解釋,我恍然大悟啊。一開始就沒有走對方向,我其實在不確定的情況下應該往底層一點想想,想想x是存在棧中,return x是函式的返回值,是存放在棧中的另一個位置的,而finally的之後修改的是棧中變數x,而與函式返回值無關。。。 哎,處處是底層啊。。。又被鄙視了。

面試官又問我,你對linux安全瞭解麼?啊,這個我還真不瞭解,趕緊說不了解。。。

面試官又問我,你用過哪些伺服器啊?我說tomcat啊,Apache啊,還聽過一個叫什麼GlassFish的,shit,不知道有沒有這麼一個伺服器,面試官表示沒聽過。

然後面試官又是耐心給我講,列了一大堆伺服器,大概十幾個伺服器的名字。

又給我將什麼現在伺服器因為要處理大量併發請求,趨勢就是會設計成“非同步”的,而不是“同步”的。

我還是和他扯起來,我說什麼可以通過叢集,將請求分配到不同伺服器,結合動態負載均衡等技術來處理請求,他說即使分散式處理,還是可能會出現單臺伺服器需要處理大量請求的情況,我表示贊同。然後我又說“非同步”的處理方式會影響使用者體驗啊,響應時間不確定啊,什麼的。。。

差不多就這樣結束了,面試官盡然來了一句:“你先回去吧,我看如果沒有更好的,我在打電話給你。。。”(太直接了,我喜歡。。。)好吧,握個手,走人了!

這次讓我更加重視自己的缺點了,平時學習一個東西不夠深入,沒有強烈的類似的底層細節知識的思考和探知慾望。。。學知識有點急躁。。。。哎,一定要注意。(學習東西一定要深入底層,這裡說的底層不是說貼近於硬體的那種底層,而是設計各方面細節的原理性的東西。。。計算機一通百通!)

路還很長啊!

相關文章