1. 程式人生 > >最近面試的一些事

最近面試的一些事

       最近這三天,很幸運地接到了來自國內某網際網路公司的電面,雖然後面可能還需要在進行面試,可是今天想說說到目前為止3面的經歷。
  給我的感覺是他們很注重效率,三天、面試三次。
一、
  第一次電面是26號中午打過來,因為有些原因,就約了晚上七點面試,可能是那時候一面的面試官開會或是正在面試其他人。到晚上8點多電話打過來,當時正在食堂吃完飯,巧的是正準備拿飯的時候電話過來,我就趕緊接了電話,手上的拌麵放在一邊。
  一面的面試官是一個很隨和的人(貌似面試官都很隨和,很nice),開始讓我講述自己在技術方面比較感興趣的東西,當然我從自己做過的東西入手,將自己對於服務端程式設計的理解講給面試官,中間問了很多怎麼處理負載,以及檢視服務端程式執行狀況的問題,問我自己常用的系統工具,測試工具之類的問題。我將自己知道的都說出來,又談了一些關於程序和執行緒的問題。總之,一面自己覺得和麵試官聊的還行,很多問題根據自己的理解都說了出來,

  當然也最後說到了考研的問題,我說了自己的想法。總之和一面面試官聊得不錯,人很nice 。也謝謝我的一面面試官。

        一面時間:35分鐘左右。

二.
  第二次電面是27日,同樣是中午電話過來,當時十分不好意思的又約了晚上七點,因為下午還有課。我覺得很不好意思。當然,晚上7點多,電話準時過來。二面給我的一個總體感覺就是被虐了,而且面試官還沒“狠狠”虐我,非常感謝。很多問題自己當時沒反應上來,總結下自己下載還記得的一些問題如下:
   1. glibc中關於strlen()函式的實現。(200多行,效率比我們自己隨便寫的O(n) 高多了)。自己當時也只能說自己曾經看過,(因為貌似去年帆哥就是這個)只記得它用了很多位運算去優化效率。
   2.關於epoll_wait()函式中第四個引數事件返回的問題,還有關於epoll_wait()可以處理的事件都有那些,可以用在客戶端麼。
   3.關於實現UDP可靠性傳輸,我自己只能以TCP為基礎回答,只知道重傳和定時檢測包首位校驗和。然後其他的問題就基本不會了,面試官也沒有太為難我,轉而問QQ的協議實現是基於TCP還是UDP,我說了自己對與視訊聊天的理解,然後自己又扯到抓包問題,wireshake和TCPDUMP自己只是簡單玩過,原始套接字抓包也只是簡單寫過程式,分析IP、協議、以及MAC資訊,如果面試官深入,我直接就跪死了。
   4.不知怎麼說到了無鎖迴圈佇列的實現,啊啊,但是自己不知道怎麼了,一直考慮的是加鎖互斥,卻一直沒想起來原子操作可以用在這裡。CAS就是去判斷舊值與新值的關係,去實現的。當然面試官問我怎麼判斷操作是原子的,自己當時一直給面試官說,我記得++操作不是原子的,但是就是忘了怎麼檢查,我知道面試官想考察的就是在你不知道怎麼辦的前提下,自己解決和分析問題的能力,唉,自己當時腦子貌似秀逗了,最簡單的就是看++操作的彙編程式碼。這樣直接就可以了。。。唉,當時思維就混亂了,怎麼也沒想到。
   5.就是多程序、與多執行緒的優缺點,當時真的可能是腦子秀逗了,一直在扯多執行緒提高響應速率,降低延時,多程序獨立性什麼的,其實可能問題就是多執行緒中一個執行緒跪了,其他執行緒都跪的問題。。。唉,腦子當時完全不在狀態。
   6.就是除錯問題,core檔案的產生與處理,gdb的問題,backtrace 之類的。
   7.關於C的錯誤處理,面試官問得是程式一開始開啟檔案,後面一堆的錯誤處理,一堆關閉檔案,或是一堆記憶體分配錯誤,問怎麼避免,我一直說C++的RAII,可是面試官想聽到的答案就是C怎麼做,我說了do while(0),以及有限狀態機的東西,不知道當時答沒答到點子上,而且當時竟然沒想起來setjump() 、longjump(),這對錯誤處理函式,說實話,這個自己真心知道,也在用,可是當時就是腦熱,完全不再狀態,我也不清楚面試官是不是在考察這對函式,如果是,啊啊啊啊啊啊。

  很多問題現在都記得不是很清楚,貌似是壓力面,可是我知道面試官還沒有狠狠虐我,如果再深入說些問題,我估計什麼都說不上來。不過感謝二面的面試官,最後和我聊了很多,給了我很多指導的建議,真的感覺二面的面試官很nice,一方面是因為他讓我過了,另一方面很感謝二面的面試官願意去了解我其他的方面,看我寫的一些東西。並沒有完全否定我,這才是我特別感謝二面面試官的原因。

       二面時間:47分鐘左右

三.
  第三輪,也就是今天,28號,中午正在上課的時候電話過來,又很抱歉的到教室外面接電話並且說另約時間,下午2:30電話過來,三面面試官同樣是很nice的一個人,讓我自我介紹,還問我有沒有給妹子寫過。。。省略,簡短的寒暄過後,面試官開始問自己一些技術問題了,也是一開始瞭解我擅長的一些東西,問了一些關於伺服器框架的問題,I/O複用,我從C/S模型的角度入手,說了自己瞭解到的服務端模型,以及自己用到的框架,事件驅動、IPC、多程序、多執行緒這些。然後三面面試官問我自己負載怎麼樣,什麼地方是系統的瓶頸,我說記憶體、磁碟I/O,網路頻寬. 自己一開始把著眼點放在了記憶體上,面試官追問,如果這些都夠大呢,當時說出的就是memcache,然後貌似答對了,就問我用過嗎?我只在機子上裝過,知道儲存方式是鍵值的形式,然後說自己只知道這麼多。
  後面問到了程序模型的通訊機制,以及關於對共享記憶體的訪問控制的一些問題,還有就是關於gdb的除錯,檢視段錯誤等除錯技巧,我就說了自己知道的那些,dmesg, strace 以及gdb的bt.然後問我怎麼切換到子程序中除錯,這個,,額。不知道。自己剛才看看,set follow-fork-mode ,或是attach pid 的方式。
  然後問到了自己的其他方面的東西,我說了一下和大家一起做的小核心,關於這個東西很多細節自己記得也不太清楚了,當時講了Grub載入,以及介面列印,這些講的還算蠻清晰。然後說了說自己對於GDT以及段頁的理解。算是粗略說說,然後面試官也沒有深入問。

  最後聊了一些生活方面,考研什麼的。有什麼體育愛好,打不打遊戲之類的。

       三面時間:35分鐘左右

  大概這三次面試過程,就是這樣.貌似寫的挺羅嗦。。

       期待自己還可以最後獲得賞識,總之,真的,很多時候,我們只需要一個機會和內心的平靜。