? ? 能拿到這個offer,運氣占了不少比例,感謝一路上幫助過我的朋友和同學。面試的戰(zhàn)線拉得比較長,在此簡單記錄一下。
面試部門:螞蟻金服——人工智能
面試崗位:C/C++研發(fā)工程師
共計5輪面試,其中前面4輪技術面,最后一面為HR面
一面:2017-04-05,40分鐘電面
1.自我介紹,項目相關
2.項目里面說到有開發(fā)過驅(qū)動,那么比如讀寫一個文件,在用戶態(tài)調(diào)用系統(tǒng)的接口函數(shù),如read和write函數(shù),直至操作到磁盤上,是怎樣的一個流程
3.驅(qū)動里面有沒有用到過內(nèi)存分配,使用哪些函數(shù)(這題應該是問,用戶態(tài)調(diào)用malloc這類函數(shù),操作系統(tǒng)內(nèi)部是怎么分配內(nèi)存的)
4.伙伴系統(tǒng)相關
5.操作系統(tǒng)是如何對內(nèi)存進行管理
6.說說內(nèi)存碎片
7.STL里的map如何實現(xiàn)
8.談談紅黑樹
9.談談冒泡和歸并算法
10.談談對快速排序算法的實現(xiàn),你是如何理解這個算法
? ? 總結:面試官比較nice,聊起來比較放松。問題偏向于底層,跟系統(tǒng)關系很大,對于操作系統(tǒng)這塊的學習和理解還需要加強!而且問題也比較深入,會根據(jù)你的回答,進行更進一步的追問、拓展。C++基礎問的不多(這可能是因為面試官側重于Java),數(shù)據(jù)結構與算法中比較經(jīng)典的還是容易作為考點,一定要深入理解,最好還能形成一定的自己的想法。
二面:2017-04-10 25分鐘電面+20分鐘在線編程
1.說說在碩士期間主要做了哪些事情,實驗室主要研究方向;談談做過的項目(主要是自己負責的部分)
2.操作系統(tǒng)核心主要分為哪幾個部分?
3.操作系統(tǒng)的內(nèi)核主要承擔怎樣的工作?
4.你們的項目(狀態(tài)監(jiān)測系統(tǒng)),如果一個進程或者腳本運行出錯,有沒有什么措施避免系統(tǒng)出錯?
5.操作系統(tǒng)內(nèi)核中,常常以模塊的形式進行加載和卸載(比如驅(qū)動),這樣做有什么好處?
6.操作系統(tǒng)如何確定安全的卸載了模塊?
? ? 這題剛開始不理解,扯了半天(模塊加載之后就是在系統(tǒng)里面,使用時先open、再read/write、不用時close即可;要想卸載驅(qū)動,直接卸載即可);面試官提醒:引用計數(shù)。反應過來理解錯題意了,借用OS的文件系統(tǒng)是如何管理打開的文件進行回答(系統(tǒng)的文件打開表,保存引用計數(shù),多個進程或線程同時使用文件或設備時,引用計數(shù)相應的增加,當最后一個進程關閉文件時,OS才真正的把引用計數(shù)清0,關閉文件)。
7.你們的項目中,前端以及服務器使用了什么技術?
? ? 由于本人沒有負責這一塊,回答說不太了解。
在線編程部分:
1).二叉樹的DFS和BFS遍歷
2).給定一個有序數(shù)組A[],以及待查值target,查找數(shù)組A[]中是否存在target。存在,返回其下標;不存在,返回應該插入的下標(保持數(shù)組仍然有序);分析所寫算法的復雜度。
三面:2017-04-17 20分鐘電面
1.自我介紹
2.C++中,你覺得哪些關鍵字比較有意思
? ? 一時不知道怎么回答,說了C++中增加的bool關鍵字。然后面試官追問為什么C++中增加了這個關鍵字。
3.宏定義#define與const常量有什么區(qū)別
4.在GDB等調(diào)試過程中,宏和常量有什么區(qū)別
5.static關鍵字有什么作用
6.三個連續(xù)的整數(shù),比如a,a+1,a+2,相乘之后能否整除6,即a*(a+1)*(a+2)能否整除6
7.計算機硬件中,32bit與64bit的機器有什么區(qū)別
8.在32bit系統(tǒng)中,整形變量所能表示的最大值是多少
9.如何計算出一個整數(shù)的二進制表示中,有多少個bit的值等于1
四面:2017-04-18 25分鐘電面+20分鐘在線編程
1.首先還是自我介紹
2.詳細介紹了項目,以及在項目中做了哪些工作
3.Linux下,如何創(chuàng)建一個進程
? ? 回答在程序中,可以調(diào)用fork()創(chuàng)建子進程。
4.承上,fork()函數(shù)的返回值是怎樣
? ? 父進程返回子進程的pid,子進程返回0。
5.承上,假如父進程返回0,子進程返回自己的pid能行嗎?當前系統(tǒng)為什么不這樣設計,而是父返回子pid,子返回0?
? ? 回答了父進程返回子進程的pid,主要原因在于父進程往往需要知道子進程的運行狀態(tài)以及結果。比如父進程可以調(diào)用wait(),捕捉子進程的返回信息,因此需要知道子進程的pid。
6.linux下,程序的內(nèi)存布局是分段的,大概是如何分布?
? ? 32位系統(tǒng),進程獨立擁有4G虛擬內(nèi)存空間,1G用于內(nèi)核,余下3G按照棧、MAP、堆、BSS、DATA、TEXT分布;64位系統(tǒng),擁有256G空間,內(nèi)核128G,用戶128G,布局類似。
7.看你簡歷里面寫了解典型網(wǎng)絡模型,簡單說說有哪些
8.TCP的四次握手關閉鏈接過程
9.TIME_WAIT狀態(tài)的作用與意義
10.簡單說說TCP客戶端/服務器開發(fā)時,用到的系統(tǒng)調(diào)用函數(shù)
11.select()系統(tǒng)調(diào)用有什么作用
12.STL下sort()的內(nèi)部實現(xiàn),stable_sort()內(nèi)部實現(xiàn),nth_element()內(nèi)部實現(xiàn),lower_bound()內(nèi)部實現(xiàn)。
在線編程部分:
1).給定一個字符串,比如" ?abc cba ? ? ",要求去掉首尾的前導0,即把字符串處理成"abc cba",返回處理后的字符串。
HR面:2017-04-27 20分鐘電面
? ? 在此首先給出一個建議:不要輕視HR面試。很多同學(自己也是),特別是技術崗位的,往往會認為HR面試沒有什么好準備的,就聊天嘛。其實不是的,一些比較常見,比較經(jīng)典的問題,如果有提前準備、組織語言的話,總歸好過臨時回答時的磕磕絆絆。還有就是一定要針對面試的公司,提前做一番全面的了解,這會是個加分項。其他的在此就不再贅述了。