c++面經

轉載 自留

一、前言

我的秋招故事很長很長,期間無窮多的心酸與苦難,當然也不乏興奮與驚喜。寫在這裏,是對自己這段生活的一種懷念,更是想給目前還處於彷徨無助看不到希望的同學一種激勵。這不是一篇純粹的筆經面經,但我自認爲這是一個曾經浮沉校招大小筆面試的非科班學子的面試記錄與總結心得。

當然,我認爲會是個勵志故事,你若不認同,就只能說我的文字太過拙劣,也許滿足不了你,但是只要有同學能夠從中汲取到正能量,能夠學到某些小竅門,甚至只是一個小問題,我都是開心的。

那麼,首先交代背景,我是個非科班的碩士生,水平很有限,真正開始準備工作需要的技能與知識是在一年前,具體專業的話,這麼說吧,我是舒克也是貝塔,院系(本4碩17)。因爲本科研究生都做了不少硬件的事情,所以軟件方面需要加強的東西極其多,複習期間都是白天做項目,晚上學習,凌晨1點之前都不可能回到宿舍。並且在七八月份,找工作的關鍵時間,被導師要求寫SCI文章(撰寫加來回修改30+遍),更是直接只能忍着所有的睏意與疲倦,奔波在各個面試地點,回來迅速轉換思維寫文章。

如果你現在還是秋招,因爲找不到工作很低落,那麼我想跟你說,曾經的我,比你要痛苦得多,我只是知道,當我熬過去那段一躺下睡覺就會覺得心臟隱痛,感覺隨時猝死的時間,我就會重生,命運不會拋棄願意自我抗爭的人。(說到這裏,想到之前大家討論的導師和學校,我只能說我航這個問題從來都是重災區,可是吐槽是沒有任何作用的,如果你厭惡你的生活,那就付出十倍百倍的努力來改變的下一步的生活吧,那纔是我們要關注的重點。)

扯遠了,收回來。我本科和研究生都做了很多嵌入式的事情,所以部分offer也與此相關。但是個人在接觸硬軟件清楚自己的意向是軟件開發,所以主要往C++開發方向發展了。求職主要面向的是C++軟件開發,後臺開發,服務器開發。

二、offer情況

1) Get offer 或者offer流程中
騰訊(後臺開發,offer,薪資各方面都算滿意)
網易(C++開發,offer,三面面試官說前面的評價都是優秀,可能sp)
完美世界(服務器開發,sp offer,薪資不低)
趨勢科技(軟件開發,offer)
寒武紀(軟件開發,offer,薪資還可以)
恆潤(這一家可能只有北京高校知道一點,我航和我理去的比較多,sp offer)
多益網絡(遊戲開發,offer)
塗鴉移動(軟件開發,offer)
CVTE(軟件開發,終面,拒絕)
shopee(後臺開發,offer,月薪不錯)
遠景能源(軟件開發,終面,但不知道是不是被我說出的騰訊offer情況嚇走了)
美團(後臺開發,內推的三面完成,應該是G了)
深鑑科技(C++開發,offer,薪資很高,比普通的sp要高)
招銀網絡(軟件開發,offer)
招商金融(軟件開發,終面談了所有offer情況,CTO坦言給不了我那麼高工資)
中興(軟件開發,offer,談薪後直接拒)
新華三(軟件開發,終面談薪後拒offer)
華爲(IT軟件開發,終面,面試官加了微信…)
4399(遊戲後端開發,offer,談薪後拒絕)
2)GG的公司
阿里巴巴(三面,掛)
京東(玄學面試,一面掛)
360(面試官很專業,但不容忍錯誤,掛)
58(後臺開發,一面掛,所有面試中體驗最差的公司,沒有之一,沒有之一,沒有之一)
商湯科技(筆試好難,應該掛)
小米(筆試後沒消息,掛)
攜程(玄學筆試,至今沒通知,掛)
3)待面試中
頭條
4)放棄的公司
放棄面試:百度,滴滴,海康,好未來、蘑菇街(這麼晚才接到電話也是醉了)
放棄筆試:類似去哪兒、深信服、TPlink之類
沒錯,列舉這些,就是想說明一點:我是幾乎混跡所有互聯網大廠筆面試的非科班學生 。

三、面試

本面試主要分成三塊內容:

第一部分:知識水平的提升方法與面試技巧,針對非科班或者知識面薄弱的同學,講解準備校招與校招過程中應該具備的能力與技巧,包括但不限於推薦書單,技能說明,面試技巧等。
第二部分:大體上描述C++研發或者後臺開發在筆試面試中高頻出現的問題;
第三部分:挑選其中20家公司,描述自己的面試經歷,說說不同公司的面試題目與感受(因爲面試公司太多,所以我過程中基本上都沒有做記錄,只能憑着記憶寫,但是重要問題都會提及)
1. 提升知識水平的學習建議
1.1 提升硬實力
校招是對面試者的種種考覈與展示機會,在沒有實力之前去面對,是很無能爲力的,結局往往也不會是可喜的。所以首先前提在於提升自己的知識水平,在本身實力不足的前提下,過得的強調技巧,一門心思想走捷徑,很可能是會釀下苦果。
所以,最重要的是你要有足夠的硬實力。語言基礎,操作系統,計算機網絡,數據庫,設計模式,算法,我認爲都應該學習,擴展自身的知識寬度。如果跟我一樣是非科班的同學,毫無疑問你要花時間將這些基礎都有側重點的學習一遍或者幾遍,這樣不至於面試官提出的一些問題你完全不知所謂。不需要什麼都懂得很深,但是基礎的東西要能夠說明白,並且在某些關鍵問題中儘可能地挖深,研究透徹。假設你C11特性就是了解得特別多,用一個同學的說法就是,C11的知識點早就刻入骨子裏了,閉着眼睛都寫得出來,那麼我相信你在其他保證基礎沒問題的前提下,一定可以獲得一個很不錯的offer。
下面我說說基礎的學習資料。我認爲在有時間的前提下,應該將基礎知識都先補全了,保證知識全面的前提下,再做深度研究。而且由於非科班同學對於大部分東西都是第一次接觸,本身沒有一個特別好的框架或者概念,往往不知道這些知識的內在聯繫與實際應用場景,不要擔心,先安心擴展自己的知識寬度,在慢慢將這些知識融會貫通的時候,自然而然你自己就會有答案,甚至你會在筆試面試或者與同學的交流中得到答案。頓悟的前提一定是大量知識的積累。

四、讀書的建議:

(1)讀每一本書都建議一定要讀取書的源碼,自己敲一遍,相信我,讀沒讀過源碼,是否自己能夠寫出代碼差別還是很大的。
(2)強烈建議處於校招或者準備校招的各位,要有一個讀書計劃,上面不僅要有讀每本書的計劃時間(10天或者兩週),並且記載讀完每本書的感受或者問題。如果可能,可以記錄讀書過程中發現的問題,並且在很多博客上去查找答案。如果一番讀書過程,受益匪淺。

1、C++:
C++ primer 5(不建議C++ primer plus),基礎書籍,必讀
深度探索C++對象模型 基礎書籍,必讀
STL源碼剖析 STL方面的神書,建議讀
Effective C++
More Effective C++ 推薦
侯捷老師的書籍與視頻都很推薦,之前有個牛油給出了侯捷老師的視頻,我下下來了,但是忘記是哪位同學了。在最後我將我的所有學習資料都打包放在百度雲盤上,有喜歡的同學可以下載。

2、操作系統:

深入理解計算機基礎(CSAPP,神書,極度推薦,號稱比同等質量的金子更加之前的書,這個評價一點也不爲過,必讀)
現代操作系統(在讀完上一本書後讀,講述操作系統的概念,可以配套網易雲盤北大或者清華的操作系統課程視頻)
UNIX環境高級編程(APUE,強烈推薦,如果想進騰訊,建議此書列爲必讀,如果能夠理解這本書的內容,網絡編程不會是你拿到offer的攔路石)
還有一個是之前一個師兄推薦的,MIT6.828的這門課,要求自己設計出一個簡易的操作系統,是一個極好的實踐項目(7個lab)。

3、計算機網絡:

計算機網絡(謝希仁,基礎書籍,必讀)
圖解TCP/IP(簡單明瞭,花上三四天時間讀讀這本書,挺有好處的,基礎書籍,非必讀)
TCP/IP詳解(卷一,進階書籍,必讀)
UNIX網絡編程(卷一,神書,進階書籍,強烈推薦,跟APUE一樣,騰訊的敲門磚)
圖解HTTP(非必讀,面試過程中http問的問題一般偏多,可以考慮在http方面詳細研究,作爲自己的亮點)

4、數據結構:

網易雲課堂浙大的數據結構課程(推薦,0基礎學生的必備良藥,基礎視頻,每節課的配套題目必須獨立完成)
大話數據結構(推薦,但是個人感覺不如浙大的視頻講解)
算法4(推薦,書籍代碼是java語言,不影響理解)
以上三種不建議都詳讀,建議浙大視頻+作業,過程中快速讀算法4即可。沒有太多時間,可以學習完視頻,完成所有課程作業之後直接學習算法。

5、算法:

劍指offer(準備校招刷一遍,校招過程再刷一遍,哪裏不會刷哪裏)
程序員代碼面試指南(左程雲,好書,配套左神的視頻使用效果更佳)
Leetcode(後面會給出部分leetcode題目詳解的電子版,題目牛客就可以刷,但是不太全,如果你想進階的話可以刷,我並沒有刷,在不能確保自己其他基礎水平達到的情況下,不建議貪多隻花時間刷算法)

6、數據庫:

數據庫概論(基礎,快速讀,重在瞭解概念與基礎)
Mysql必知必會(基礎,快速瞭解mysql的好書,推薦)
高性能mysql(建議讀前面索引和性能的部分即可)
數據庫面試問題不會太多,而校招時間有限,所以建議基礎先打好,後續再學習更深入的部分。

7、設計模式:

大話設計模式
設計模式能夠在筆/面試中用到的不多(大牛除外),所以可以擴展這方面的基礎,對其進行了解即可,重點研究單例模式,工廠模式等常見的設計模式。

8、Linux:

鳥哥的linux家常菜(基礎書籍,必讀)
如果有興趣看linux內核的話,可以看看
深入理解linux內核
Linux內核設計與實現(LKD)
Linux內核完全剖析——基於0.12內核

9、校招基礎準備:

王道程序員面試寶典(好書,將大部分的基礎都進行了講解,基礎問題基本上都涉及到了,可以很好的應對面試上的小問題,推薦面試前期或者基礎不紮實的同學看一遍,後面有電子版。)

10、提升軟實力與筆/面試技巧

筆試很多題目就是面試出的基礎題目,語言基礎、網絡、數據庫、linux,這些都是必考的,所以在校招之前和校招過程中,最好保持每天刷一定量的題(50起),注意查漏補缺,重點刷自己的短板(去刷2000題吧~)。但前提是,以上書單或者相似的內容都已經學會,否則很容易在筆/面試中鎩羽而歸。

提升軟實力:

面試是一場個人show,是對自己目前已有知識與項目的一種展示,更是對面試者的全面審查。所以不只是硬實力的比拼,也考慮個人的綜合素質,也就是所謂的軟實力。我認爲軟實力這方面主要就是每個人的情商表現了,性格方面的東西是很難取改變的,由此每個人的作風也有所區別。但是在面試過程適當的掩蓋自己的鋒芒與說話的技巧還是極其重要的。大體可以總結爲:
(1)保持自信的姿態,相信自己能夠勝任這一份工作,語言有力,連貫並富有力量感
(2)保持謙卑的態度,認可面試官的知識能力,能夠坦然接受面試官的所有評價,即使是嘲諷,切忌強烈反駁(雙選過程,實在不開心不外乎就不去了)
(3)適當展示自己的價值觀與人生觀,每個公司都喜歡找契合自己公司文化的人,所以適當展示這方面,會給面試官一種很舒服的柑橘
(4)鍛鍊自己的反應能力,面試問題是不可控的,面試官會問到什麼問題大都是無法預測的,所以保持絕對的熱情與飽滿的精神狀態去面對,即使遇到不懂的問題很多時候也能夠憑藉本身的實力與靈活的現場反應能力回答上一二,加上面試官的提示,是完全可能回答好的。
(5)專注的注意力,在面試過程中,有時候是會有前後聯繫的,能判斷到面試官擅長或者感興趣的內容時,可以儘量往哪方面描述,可能會有意想不到的效果。

準備筆試的技巧:

(1) 學習過程中,注意總結筆/面試會可能會問到的問題,重點研究。舉個栗子,鳥哥的linux家常菜這本書通俗易懂,看過一遍,估計也就一週。推薦邊看邊刷題(贊一波牛客的題庫),即使刷題耽誤了看書時間,也能慢慢讓你培養出筆試的感覺,看完了你自然而然就知道這本書哪一塊是重點,哪一塊過一遍即可,然後再去刷題,看面經裏面出現的linux命令的題目(如果分數ok,題目也都會,那麼下一本)。
(2) 筆試過程中注重歸納與總結,記錄每一類高頻問題,可以在牛客上先找別人列出的問題,但是一定要將每個問題研究透徹,隨時對其進行補充。
(3) 算法題除了多刷圖以外,可以在自己電腦上將自己平時練習的算法題目進行總結,寫一些通用的小算法,例如字符串題目、數組題目,dp問題,有些問題經常只是意境變換了,實際算法還是用得上的。
一言以蔽之,多看多練多總結,筆試不能高分也會通過。
另外:如果有線下筆試,都推薦線下筆試,難度會降低。

面試的準備與技巧:

面試是一個考覈的現場,在實力之外,是需要技巧來支撐的,能夠掌控面試節奏與放任面試節奏絕對是兩個感受。。而校招本身就是一場戰役,如果大廠崗位逐年減少,而IT學生越來越多,僧多粥少,沒有準備的站會輸得很慘。
(1)簡歷問題:互聯網簡歷最重要的就是技能樹和項目,其他都是錦上添花的東西。所以寫上簡歷的東西一定要極其熟悉,自己深入項目,考慮面試官會詢問什麼問題,如果面試官問到你沒有考慮到的地方,可以嘗試發散思維去想去說,最好不要什麼都說,甚至可以說你自己理解的但是其實不太相關的東西,至少要讓他知道你是考慮過項目的整體框架,內在聯繫,存在問題以及改進空間的。另外,在面試幾次之後,項目你也介紹過幾遍了,面試官可能也提出一些問題,基於這些問題,重新潤色簡歷上的項目描述,並且重新熟悉自己介紹項目的說辭,對面試官可能提出的問題做到心中有數。
簡歷上的技能,對自己寫的每一項做到心中有數,例如,你寫上“熟悉TCP/IP協議及其編程”,那麼面試官問你建立服務器的socket函數有哪些,分別什麼作用,你總不能不會吧?我最開始對數據庫不太熟,沒有系統複習過,簡歷上就沒寫數據庫,然後美團面試的時候,一直問JAVA和數據庫,我都直說不會/不太熟,面試官沒有過分刁難,雖然還是問了很多。
(2)面試的準備
面試之前,前面簡歷的問題要熟透,嚼爛已知的項目的坑,並在後面面試中慢慢補全。知識技能方面,多看面經,首先將面試崗位的高頻面試題都事先熟悉,用面經上面的題目自我考覈,判斷自己能不能很流利地回答出來。何謂流利地說出來,就是富有條理性的,透徹的,橫向縱向結合的描述。並且在看面經的過程,可以擴展的看,每個問題的延伸問題,最後都花時間去琢磨(博客是個好東西,多看)。後面我會給出我知道的C++研發高頻題目。
(3)面試過程的技巧
首先如果可以現場面,推薦現場面試,優勢在於能夠讓面試官看到你的精氣神,確保面試期間精神飽滿,富有交流欲,尤其和面試官保持眼神交流,讓他看到你的態度,並且對於每個問題,不管會不會,多問問面試官總是沒錯的。這個我認爲是最重要的,每次面試官問的問題,我一般都是緊盯這面試官說,我是這麼考慮的,您看看對不對/我對這一塊不是特別熟悉,但我是這麼想的,麻煩您指點一下/對於這個問題,我們分成三部分考慮,首先…
有人說面試變成了一站到底,這是很難避免的,面試官爲了追求效率,考察你是否具備他們所要的技能,那麼語言基礎、網絡、數據庫、算法、linux基礎,都必須至少兩三個問題,於是他們就一個一個蹦出來。這種時候,你最好要穩住節奏,表現出足夠的表現欲,對擅長的問題進行擴展,深挖,讓面試官意識到你在某一方面很厲害,促使他去按照你想的方向去了解。聚個栗子,面試官問是否瞭解linux的IO模型,我一般是這麼回答的,“對於這個問題,我們首先要理解同步異步、阻塞非阻塞的概念,balabala,他們之間的區別可以類比爲XXX。

在理解這些之後,我們將IO模型分爲五類,分別是XXX”,講完這些估計就要五分鐘,相比你不鹹不談說,有五種,是XXX,面試官不詳細問它們的特點你就不說,是不是差距很大。假設我有點忘記了IO模型的分類,那麼前面的鋪墊是不是也可以給自己時間去回憶。我經常是在面試期間忘了某個問題的答案,於是一邊打打擦邊球,一邊大腦快速回憶這個問題,很可能在講着講着就想起來了。即是你想不起來,也絕對你比支支吾吾說不了幾個字強太多了。

(4)面試的心態
前面說到了,精神一定要飽滿,儘可能有信心一點。當然,我覺得對於前面幾次面試的同學或者手上還沒有靠譜offer的同學,緊張無可避免,那麼就告訴自己,上次我面到了一面,這次我只要一面過了就好,一點一點目標往上提。
面試中自己的面試儘可能不要太受面試官影響,畢竟有些面試官確實不太負責,在面試期間時不時做一點別的事情,我們要做的就是做到自己的最好,描述清晰而流利,控制語速(我中興面試的時候自我介紹實在太熟了,說得太快,被面試官提了一下)。
非科班同學面試經常碰到的一個問題就是,你不是這個計算機專業的呀/你的專業跟我們不匹配啊。這個問題很現實也很尖銳,畢竟科班出身的人就那麼多,我憑什麼要你不要他們,所以你要展示的就是你得計算機技能不比別人差,你的自學能力比普通人要強,或者你做的項目比別人牛逼,或者你比別人更能堅持,語言是很無力的,即使你說了,面試官也不一定就相信,所以在後面的面試拿出實力來表現自己。放在這裏是想說,首先你自己心態要擺正,非科班對面試是正buff還是負buff,重點還在面試者自己身上,大公司一般不會卡這方面,更不會因此鄙視你,所以坦然一些,用實力告訴他們我們能行。
(5)面試後的總結與再準備
面試後,最關鍵是什麼?還是總結。很多時候其實面試完畢你就大致知道結果了,至少你知道你能夠根據面試官的反饋知道你自己的缺陷在哪裏,記錄下來。如果可能,每天都用word或者博客進行記錄,短暫時間的將重點問題記錄在手機備忘錄上,然後找時間將這些問題一個一個克服。

我個人是將問題都分類,分類總結記錄,並且查資料將問題徹底弄明白。在經歷三四次這個過程之後,你應該會很贊同這樣一句話:面試是提高能力的最好途徑。沒錯,你最初的總結一般都是很片面的,或者不符合面試需求的,但是在實戰幾次之後,你就會明白哪裏纔是重點,哪裏是次要的,也明白自己的優勢或者擅長的地方是哪些。

在知道這些之後,面試過程中,就可以儘可能的避重就輕,引導面試官往你擅長的方面去說。還是聚個栗子,騰訊面試的時候,問了我http的狀態碼,我當時真的完全忘記了,就說這個我記得不太清楚,但是我瞭解的http是應用層上的XXX,版本有http1.0 1.1 2.0,動作一般有…,爲了安全會用https來代替http。這樣過渡掉這個問題,引導面試官來到你說的這些問題上(當然前提是你說這些可不能不會,不然就是自己挖坑自己跳了)。

還是迴歸面試後的心態,面試後就儘量不要過度去考慮這一場面試通過與否,最重要的是總結和準備下一場面試。這裏也適用於筆試,校招時候公司太多,每天面試筆試往往都很多,沒有太多時間給你感傷或者驚喜,在沒有確定秋招結束之前,這裏一直都是戰場,不能鬆懈否則你可能就輸了下一場。尤其是,如果面試失敗了,那種低落情緒幾乎避免不了,我們要做的就是儘可能縮短這個低落時間。我一直很看重京東的面試,抱了很大的期望,面試過程中感覺也很不錯,但是當天就掛了,當時表示完全理解不了,非常低落,甚至開始懷疑自己的能力。這個時候,就必須和家人朋友聊一聊,放鬆一下,然後重新開始(有個信念,就是這是千萬人都在爭的路,輸了也正常,但是我們都沒有退路,沒有任何辦法,總結總結重新開始吧)

面試過程,真的不是學習或者工程能力強就能夠拿到offer的,自身軟實力也極其重要。心態,反應能力,態度,甚至狀態都是能否通過一場面試至關重要的因素,這些就要靠我們自己去慢慢摸索與準備。我在拿到一些offer之後,跟同學討論過,發現挺多人存在一個問題就是:對於很平常的問題,他們表現出不知道應該怎麼回答,例如專業面的你在項目過程中最大的難點是什麼,怎麼克服的;HR面的你怎麼評價你的研究生/本科生涯等等。這些問題說白了都是情商,無關技術,但是又很影響面試官對你的看法。這些問題沒有標準答案,但是,保持誠懇的態度與真實的描述(當然實現要有所準備)是總是能夠拉近和面試官的距離的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章