一、選擇題
      主要的知識點:
1、臨界變量critical section的概念(還有semaphore,thread類似的這些)。
2、存儲器cache寫穿透和寫返回的概念(復習一下高體的cache)。
3、數據庫技術里的幾種隔離級別,一般是可重復的讀、讀穩定性等。可重復的讀最高。
4、Java的內存管理機制,包括沙箱和garbage collector。
5、C++的內存管理機制,注意和上面的區別,new操作和delete操作的作用方式,以及和alloc與free的區別,內存不足時怎么辦。
6、計算機網絡IP地址和子網掩碼的知識,怎樣判斷兩個ip地址和對應子網掩碼是否能通信。
7、C++里虛函數的概念,非常重要。另外,const的用法,虛繼承和內聯函數各自的好處和不好,等等這些基礎的知識要掌握。
8、一個對象在內存里是怎樣存儲的,注意虛繼承和有虛函數的情況。
9、對字符串的操作,應該注意哪些問題,包括拷貝,訪問,等等。
10、基本的數據結構,如堆(注意最大值堆和最小值堆的操作和建堆的過程)、棧、連表、隊列、二叉樹(注意二叉檢索樹的相關操作)、圖,這些知識和相關的算法要掌握。

二、邏輯部分
      不用復習了,沒啥必要,一般是推理題,總會做出來的,只是時間問題。但說實話,我覺得在這里浪費時間來求準確性是非常重要的,因為后面的大題很難拿分,與其后面的題目寫了一堆,不如在這里多花些時間求準確性,以為答對一個就是1.5分。

三、程序設計
      第二次筆試是兩個題目,一個是求一個數組的最大公約數,知道展轉相除的話很簡單,但要把自己主要的思想用一句話哪怕是中文寫在題目旁邊,這樣看的人就知道你會做這個題目了。程序都是很亂的,而且一個人不容易讀懂另一個人的程序,所以這點我覺得有用。
      第二個,是讓你對一個英文字典建立一個抽象數據類型(就是一個C++類),然后對給定的前綴打印出所有的單詞。trie樹是一個數據結構,簡單地,它可以有任意多個子結點。那么對字典建立trie樹即可。對于給定的前綴,只要順序搜索子結點,然后遞歸打印出所有的葉結點就OK了。知道了想法也就簡單。
      總結一下,就是這部分的題目其實都不難,但紙張的空間有限,而且基本都要求寫完程序之后寫測試用例,所以其實挑主要的寫就可以了。注意盡可能的精簡就成。

四、設計
      一般這個題目,是給你一個場景,如M$的MSN或者outlook或者office等,問你有哪些不足,需要增加哪些功能你覺得,然后舉一個你最想增加的功能,并說明給你3個月你怎么實現。隨便bla吧,但如果你應聘的是PM,那么這個題目相當重要。

五、測試
      兩個題目,都是寫測試用例和第三大題不同,雖然第三大題也讓你寫完算法程序后寫測試用例,但這個要詳細一些。一般是先挑bug,再寫測試用例。所謂的測試用例,就是給定的輸入參數和期望的輸出結果。一般讓你挑bug的,都是對字符串進行操作的,所以一定要仔細檢查,是否有操作空指針、是否檢查了輸入參數、是否有指針越界。
      上次筆試是給定的兩個題目是一個檢查函數中操作字符串的bug并寫測試用例,一個是給一個函數int system(char* command),讓你寫測試用例。黑箱測試了。

      不知道為什么第二次的時間變短了,改成了2個半小時,不知道這次是多少小時,時間方面可能要抓緊一下,否則寫不完。感覺還是要把前面的題目盡量做對,否則如果某個題目沒達到他們最低的要求,人家就不向下看了。