面試官首先看了下簡歷,看我寫熟習操作系統。首先問了malloc和free那到大題怎樣答的。我提到了多是線程同步技術。假設有兩個線程同時訪問同享區域可能會出問題,C庫應當具有線程安全性。貌似答得不對,面試官反問我這還要C++的智能指針等高級的線程同步技術來干嗎。無語。
再問free如何通過傳入的指針判斷內存分配的大小,并進行釋放。我說操作系統管理了1個待分配的內存鏈表,其中肯定包括所分區域的內存首地址和內存塊的大小。通過傳入的指針遍歷這個鏈表就可以得到內存塊的大小從而進行釋放。然后面試官說不就結了,繼續發問。
再問讓我解釋甚么是消息循環。我說是操作系統觸發某個事件以后會給對應的進程發送消息,然落后程通過GETMESSAGE獲得消息并進行處理。然后他說那你只是給單1進程發送消息,如果廣播呢,操作系統采取甚么機制避免消息隊列堆積,并且說操作系統預先不知道有多少進程在進行監聽。沒答上來。然后問我你要怎樣實現,我說那必須知道有多少監聽者,用這個全局變量進行減減,為0就從消息隊列拋棄,他說這樣也行吧。
然后繼續問,進程有那幾種通訊方式,怎樣實現的。我說有管道,油槽,然后底層都是通過消息映照實現的。然后再問那線程通訊呢,我說在WINDOWS里進程是線程的容器,線程的通訊方式和進程方式相同。然后有事他出去了1會兒,等了10分鐘。
回來以后就問我數據結構學的如何,我說1般。然后他說我們做幾道題吧,然后就是開始:
1.給1個有序數組a[N],然后隨機切分成M個子序列,如何將這M個子序列重排序。我當時沒鬧明白,就說了用堆排。他說時間復雜度多少。我說(nlgn)。然后問有無更快的,我說看起來像歸并排序。他說那是多少。我說nlgn。他說是嗎?我想了1下nlgm。哦。那你寫1下。
然后寫了1段。發現我在寫歸并的算法就讓我不要寫了。看看大致思路,然后發現1些問題。想改不給我改了。然后問我有甚么善于的。想了1下沒有說。然后看我簡歷里有ADABOOST算法的研究,就問了我原理。怎樣訓練的,臥槽早忘了好嗎。看我不行又問了1下浮點轉整數的原理,乘法除法變位移的方法。然后說你這樣做有精度問題,有無查太高精度的方法。我說沒有(這時候候已抓狂了)。
然后說那末我們繼續做題。給出兩個單鏈表判斷是不是相交,第1次交點在哪里。這個看到過秒殺了。
然后在來1題,50E個IP如何找出出現次數最多的,內存1GB。我問1個IP多少大。他說IPV4。哦4B。算了1下需要20G我去神經啊。我說這內寄存不下,要用硬盤上吧。他說怎樣用。我說分成20塊,內寄存滿了就倒到硬盤上。然后內存找不到就到硬盤上去找。他說怎樣找。我想了1下難道是HASH?表示沒用過不知道怎樣操作。然后他說這個很簡單的,你只要把IP通過HASH映照到文件然后在文件里遍歷就好了。其實我想問怎樣HASH映照,沒實戰過不敢講啊。
然后說答得是還行,面試時間也很長了。回去等通知吧。感覺要跪,沒底。