新人報道,沒有什麼可分享的,就記錄一些本身求職的體會和心得。linux
我是在校招的時候參加了今日頭條的招聘,崗位是C++,最後成功拿到了入場券。可是這也絲絕不值得驕傲,你們都知道:技術突飛猛進,要是幾個月不更新本身的技術棧,就會被時代淘汰。簡單點說,我那個在學習scratch編程的小學生弟弟,都會關注MIT LKG團隊是否更新版本,3.0來了,那麼2.0對不起了,轉手拋棄。面試
(更況且大佬那麼多,我不過是個才入門的小弱雞~)算法
如下是我總結進入頭條的兩大決定性因素:
一是,刷面經和筆試題很是關鍵。你將會在蒐集資料的過程當中瞭解到頭條系的情況,具體崗位所面臨的問題和筆面試的風格特徵,作到有備無患。
二是,面試官會更偏心邏輯思惟強的人,在網上就有這樣一個例子:編程
且不說這個故事真實性如何,其中頭條系的風格是被體現得淋漓盡致。畢竟理工男是真的多,在工做中,會特別講究邏輯思惟。沒有邏輯的人,是混不下去。windows
最後給你們分享一下個人面試過程,但願能給你們一些參考。數組
(題目順序有些不分前後,但大體有序)網絡
第一面(50 min)
一、進程和線程的區別和其使用等
常規題。
二、tcp和udp的區別
常規題。
三、http協議和https協議的不一樣和其大概原理
還好前幾天看了一篇HTTPS的科普,我就講了一下https的加密方法,和公鑰私鑰的使用。
四、三次握手和四次揮手的過程和爲什麼如此設計的緣由
TCP鏈接是雙工的,圍繞這一點說了不少。
五、linux瞭解嘛?說一下基礎命令,作過linux的相關開發嗎?
不瞭解,基本命令也不會,很尷尬。
六、智能指針瞭解嗎?說一下
說了shared_ptr和auto_ptr這些,講了一下它們的表現效果和使用時機,還有可能形成的錯誤。
七、寫一下中序遍歷的非遞歸寫法
其實之前沒實現過非遞歸的,在紙上畫了一下,想到用棧,而後兩分鐘寫好就直接過了
八、幾個sizeof的題,就是int* a=malloc(10),cout<<sizeof(a)<<endl之類。
關鍵是還答錯了一個,很尷尬
九、多線程的同步方法和如何使用
鎖
中斷
信號量
原子操做
…
十、進程間通訊的方法,還有它和socket通訊的相同和不一樣點在哪兒,使用時機是什麼時候?
管道
消息
共享文件
十一、linux的進程間通訊和windows有何不一樣?是否瞭解?
其實應該是消息機制的不一樣,沒說好。數據結構
面完面試官說立刻有第二面,等幾分鐘,我說ok,而後很快另一個面試官就來進行第二面。多線程
第二面(1 h 29 m)
一、聊項目,你這個項目的這個點是怎麼實現的,難點在哪兒?
二、說說你作的最難的一個項目,講一下爲何,難點在哪兒?
三、說說你收穫最大的一個項目,說說爲何?
而後和我說了好久的項目的細節和效果表現
四、malloc和alloc的區別
爲了說點我擅長的地方,我額外講了一下操做系統的頁和操做系統對進程的內存分配方式還有段頁的狀況,內存碎片,還有malloc背後的空閒內存鏈表,而後回答了問題——二者的不一樣點。
五、你實現的vector和STL的vector的區別和優越性。
空間複雜度很高,可是時間複雜度比STL的要低。
六、vector什麼時候進行空間的搬運?
老問題。
七、大批量對象的搬運進行了怎樣的優化?
講了一下placement new 和operator new的不一樣表現,和經過placement new進行內存搬運的優勢
八、爲何要vector的新空間爲2倍?
我記不太清了,就隨便說了一下內存對齊之類的。
九、找出其餘全部的數都出現兩次的數組中只出現一次的數。
這個一直想不起來最優解,關鍵是我之前刷過這個題。
先說了一個直接冒泡比較的暴力方法,而後用快排思想一想了一個優化方法,還用到了map,就是想不起來異或這個簡單的方法,真是讓人頭大。
十、現場寫代碼,翻轉句子中的單詞(如hello world – > olleh dlrow),翻轉句子中單詞的順序(hello world --> world helllo)
這道題後一個也一直沒想出最優解。socket
差很少就是這樣了,感受編程題的算法不算很難,但主要是考驗你的代碼能力和debug能力,對於基礎這些問的很仔細和全面,操做系統,C++,網絡,linux,數據結構和基本工做會用到的算法,都問了一個遍,問了的基本上都答上了(除了linux方面的東西,我直接說的我不太熟悉就沒再問了)。
面完次日給我打電話約次日晚上面試,而後次日早上給我打電話,由於面試官臨時有事更改到了後一天,其實這樣也好,緩解了一下個人緊張。
第三面(45min)
感受這面答得不算太好,雖然全都能說好久,可是深度沒說上去,一直在說車軲轆話。
一、自我介紹
二、介紹一下你的這幾個項目
三、你這個項目的細節
而後就一直在交流個人項目,說了挺久,感受面試官是這方面的大佬
四、項目細節和我具體項目有關,就很少說了
五、講一下malloc的整過程
而後同樣的說。
六、講一下如何設計內存管理系統
我說要根據不一樣的使用習慣來構建不一樣的分配和管理策略,而後就說了一下不一樣狀況如何進行內存管理。
七、如何進行內存碎片的管理?
我這裏的確有點忘記了,就大體說了一下malloc的解決方式,感受沒說好。
八、智能指針的實現方法
三面都有這個題,我就說了一下我熟悉的兩個auto和shared。
九、那你用代碼來實現一下這個shared_ptr
我就寫了一下,模版編程,第一次寫完一運行,爆了不少頁的錯,而後慢慢改,花了十多分鐘,最後也算寫好了。
而後寫了一段測試跑了一下,而後又有點錯,而後又改,慢慢完善,而後面試就基本上要結束了。
十、一段代碼,說一下運行結果
class A {
public: void f1() { }
virtual void f2() {}
};
A* a = nullptr;
a->f1();
a->f2();
1
2
3
4
5
6
7
比較簡單,可是直接說出來確定沒什麼亮點。
就再說了一下this指針,而後講了一下類與成員函數的關係,如何經過編譯器的方式去實現的成員函數,和成員變量的訪問方式……
十一、有什麼想問的嗎?
問了幾個組內的狀況和我若是能進的話作什麼的狀況,就結束了。
以上~
但願能對你們有些幫助。