系統工程師面經

紫鳳發表於2013-10-16

直接開始吧!

1. 中國人:

    a. 我Resume上的Semaphore是如何實現的,寫下來。我寫了一半,有一點忘記了

    b. 問了spinlock使用的問題。

    c. 智力題:小明一家過河

2. Hiring manager白人:

    a. 一張七道題關於C語言的卷子!!!其它再無交流空間,給試卷做,當時就悶了!

    b. 題目有:str[]和*str的區別;

    c. 陣列指標大小;

    d. 包含不同型別變數的struct大小;

    e. 實現一個程式能檢視自身的記憶體佔用情況;還有三題記不得了

3. 阿三帶吃飯:

    問了我一些基本概念,學校學習情況。然後開始說:我們邊吃邊想,思考。一個程式題目吧。你別停啊,多吃。題目倒是不難,兩個string表示的二進位制,一個是32位,一個8位。裡面都是1和0。問怎麼判斷B是A的substring?我答了兩種:第一種最簡單的,從左往右歷,O(m*n)。第二種: 我們用一個8位的mask把A罩起來,然後和B做XOR,如果結果是0,那麼就是substring,如果不是,那麼繼續shift再找。這人電話面試也問我substring,不過當時是int找substring。。。真是對substring情有獨鍾。

4. 白人:
     a. conceptual:一個process通過CPU呼叫記憶體給I/O裝置,結果I/O收到的是junk,請問有什麼可能原因?我的答案:1。物理原因,記憶體壞區,或者虛擬記憶體磁碟壞區。2I/O端和系統端的記憶體識別不對稱(他覺得這個問題不太可能發生)。3。虛擬記憶體在做replacement algorithm時候正好把要傳送的page給swap了,導致I/O收到了不正確的記憶體塊。修改意見可以是改變algorithm 4。還有就是kernel可能已經控制了整塊記憶體,而不讓process自行allocate記憶體。(不知道對不對)

     b. 寫個雙向連結串列,要實現add, delete, seek.我只寫到add結束,時間來不及了。程式碼寫的不好,沒有check malloc伯克利男很傷心,然後add時候有一處忘了更新頭尾指標。

5. 白人:

    a. 問問你用什麼debugger啊?kdb和gdb用起來感覺有什麼不一樣啊?還有別的debugger嗎?遇到kernel panic你會怎麼辦啊?kernel怎麼debug啊?
    b. 寫一個hexToInt()方法,把十六進位制轉化成十進位制。

6. 白人偏硬體:

    a. 你覺得你的研究生生活怎樣?是你想學的東西嗎?為什麼改行?

    b. 程式碼題:一個int,我有個scanner每次找兩個bit,要求1打頭就記錄下來返回這兩個bits和位置到global variable。

7. 像是墨西哥人又像印度人:

    a. 直入主題程式設計題。我是一個貨運公司,我有1到n臺卡車,每臺運費也是1到n。我一旦有貨就用最便宜的卡車運走。在未知時間內,卡車會回來。寫兩個方法,一個發車,一個回車,更新我的卡車列表。不考慮synchronization

    b. a是很簡單就能實現,用一個index陣列就行了。然後,加難度,把卡車列表寫成二進位制管理形式,你要更新單獨的bit。這就考到了00001000,怎麼搞出單獨1來。注意:他要求最實際化,右移補零,左移情況未知!這就十分蛋疼了,我只能右移,不能左移。然後就考驗你的bit manipulation的水平了。我提供的方法是+1法:00000111+1=00001000。他說還有更多精彩方法請google。對我表示不屑。。。

    c. 來了來了,synchronization!怎麼處理?哪裡要處理?我的建議,spinlock,mutex都行。他說,放哪裡?我放在了最後update卡車列表值時,他說不對,然後我改錯說放在while loop是不好的。這要非常消耗CPU。之後我發現在while loop之前有一個傳遞變數,把他lock起來就行了。他表示滿意。

【完畢】

本文來自微信:待字閨中,2013-10-03釋出,原創@陳利人 ,歡迎大家繼續關注微信公眾賬號“待字閨中”。

相關文章