1. 程式人生 > >送你一個勵志故事——涵蓋20多所網際網路公司的校招C++面經

送你一個勵志故事——涵蓋20多所網際網路公司的校招C++面經

終於有時間來回饋牛客了,接下來將繼續我的學習歷程(keep learning)。我的秋招故事很長很長,期間無窮多的心酸與苦難,當然也不乏興奮與驚喜。寫在這裡,是對自己這段生活的一種懷念,更是想給目前還處於彷徨無助看不到希望的同學一種激勵。這不是一篇純粹的筆經面經,但我自認為這是一個曾經浮沉校招大小筆面試的非科班學子的面試記錄與總結心得。當然,我認為會是個勵志故事,你若不認同,就只能說我的文字太過拙劣,也許滿足不了你,但是隻要有同學能夠從中汲取到正能量,能夠學到某些小竅門,甚至只是一個小問題,我都是開心的。
(前面都是個人經歷,不喜者可以直接往下翻,看面經去~)
那麼,首先交代背景,我是個非科班的碩士生,水平很有限,真正開始準備工作需要的技能與知識是在一年前,具體專業的話,這麼說吧,我是舒克也是貝塔,院系(本4碩17)。因為本科研究生都做了不少硬體的事情,所以軟體方面需要加強的東西極其多,複習期間都是白天做專案,晚上學習,凌晨1點之前都不可能回到宿舍。並且在七八月份,找工作的關鍵時間,被導師要求寫SCI文章(撰寫加來回修改30+遍),更是直接只能忍著所有的睏意與疲倦,奔波在各個面試地點,回來迅速轉換思維寫文章。如果你現在還是秋招,因為找不到工作很低落,那麼我想跟你說,曾經的我,比你要痛苦得多,我只是知道,當我熬過去那段一躺下睡覺就會覺得心臟隱痛,感覺隨時猝死的時間,我就會重生,命運不會拋棄願意自我抗爭的人。(說到這裡,想到之前大家討論的導師和學校,我只能說我航這個問題從來都是重災區,可是吐槽是沒有任何作用的,如果你厭惡你的生活,那就付出十倍百倍的努力來改變的下一步的生活吧,那才是我們要關注的重點。)
扯遠了,收回來。我本科和研究生都做了很多嵌入式的事情,所以部分offer也與此相關。但是個人在接觸硬軟體清楚自己的意向是軟體開發,所以主要往C++開發方向發展了。求職主要面向的是C++軟體開發,後臺開發,伺服器開發。
學習了大佬的排版,我也照著這個寫好了。

https://www.nowcoder.com/discuss/29890 (大佬寫的比我好好多)

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之類
錯過新浪網申。

沒錯,列舉這些,就是想說明一點:我是幾乎混跡所有網際網路大廠筆面試的非科班學生 。此處沒有任何別的意思,列舉公司名字方便牛油們對於以上某家公司有興趣或者有問題諮詢,可以回覆問我。另外,給大家介紹一位大佬@young_for_you,妥妥的大廠offer收割機,百度(sp)、京東(sp),搜狐(sp),騰訊(offer),網易(口頭 sp offer),新浪(口頭 sp offer),頭條(目前正在實習,轉正也是妥妥的)。如果大家有問題也可以找他(哈哈,職業坑隊友)

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

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

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

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

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

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

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

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

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

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

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

3.2 提升軟實力與筆/面試技巧
筆試很多題目就是面試出的基礎題目,語言基礎、網路、資料庫、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面的你怎麼評價你的研究生/本科生涯等等。這些問題說白了都是情商,無關技術,但是又很影響面試官對你的看法。這些問題沒有標準答案,但是,保持誠懇的態度與真實的描述(當然實現要有所準備)是總是能夠拉近和麵試官的距離的。

2. C++研發高頻筆/面試題目
筆試:
筆試這一塊想不到特別好說的,很多時候只是公司篩選人的第一步,分數高低代表意義不大(尤其是大公司,現身說法,我的騰訊筆試真的是呵呵噠),當然筆試是一個門檻,不過後面很可能就不用談了。我筆試經驗也不足,感覺筆試考察最重點的就是演算法的熟悉程度,程式碼能力,我筆試成績通常不太高,原因是我程式設計題速度比較慢,往往都做不完。
以C++開放舉例,粗略說說筆試一般會考哪些內容:
(1) 語言基礎,C++中的定義,指標,模板,多型,過載等(尤其是多型,給定一個程式,基類子類有不同實現,考慮輸出結果,這一類的題目面試題也極為高頻)
(2) TCP/IP協議及其程式設計:計算機網路基礎,socket程式設計,其中子網劃分,七層協議(例如交換機屬於資料鏈路層一類題目),五層協議,協議名稱及其作用,常用埠號,https1.0 1.1特性與區別,三次握手四次揮手(可能出現的伺服器攻擊),加密(對稱,非對稱),IO複用等
(3) 作業系統:程序通訊方式(linux/windows,每種方式的特點),執行緒通訊(linux/windows),程序與執行緒區別,頁面置換策略(考察置換幾次),進/執行緒狀態轉換圖,程序排程方式,死鎖(必要條件,哲學家就餐,銀行家,讀者寫者問題),
(4) 資料庫:索引作用,應該/不應該建立索引的列,索引底層實現,sql語法,常見引擎特點,事務特點,隔離級別(引擎預設級別),隔離級別的問題,鎖等
(5) Linux方面:IO模型,linux常見命令(grep,awk,sed),檔案系統,
(6) 智力題:智力題是大公司筆試面試很喜歡出的題目,重在考察思維能力,也是為了選出潛力更大的人來吧。我沒有刷過這類題,如果自我感覺這方面有欠缺的話可以自己在牛客上刷題。
(7) 演算法:劍指offer,leetcode,左神的書和視訊,任意兩個搞定你都沒有問題
那麼說說面試的硬實力。
面試高頻題:
校招過程中參考過牛客諸位大佬的面經,但是具體哪一塊是參考誰的我也忘記了,如果您看到有些熟悉,那麼可能就是您的,如果您覺得侵權,請告訴我,我撤回。
1語言基礎(C++)
(1) 指標和引用的區別
(2) 堆和棧的區別
(3) new和delete是如何實現的,new 與 malloc的異同處
(4) C和C++的區別
(5) C++、Java的聯絡與區別,包括語言特性、垃圾回收、應用場景等(java的垃圾回收機制)
(6) Struct和class的區別
(7) define 和const的區別(編譯階段、安全性、記憶體佔用等)
(8) 在C++中const和static的用法(定義,用途)
(9) const和static在類中使用的注意事項(定義、初始化和使用)
(10) C++中的const類成員函式(用法和意義)
(11) 計算下面幾個類的大小:
class A {};: sizeof(A) = 1;
class A { virtual Fun(){} };: sizeof(A) = 4(32位機器)/8(64位機器);
class A { static int a; };: sizeof(A) = 1;
class A { int a; };: sizeof(A) = 4;
class A { static int a; int b; };: sizeof(A) = 4;
(12) 給一個程式碼,求輸出結果
class A
{
public:
A(int x){}
}
問:A a = 1;是否正確, 如果正確, 那麼它呼叫了哪些函式?
這類題目更常見的是在基類和子類有不同實現方法。(虛擬函式相關,栗子很多,不多說了)
(13) C++的STL介紹(這個系列也很重要,建議侯捷老師的這方面的書籍與視訊),其中包括記憶體管理allocator,函式,實現機理,多執行緒實現等
(14) STL原始碼中的hash表的實現
(15) STL中unordered_map和map的區別
(16) STL中vector的實現
(17) vector使用的注意點及其原因,頻繁對vector呼叫push_back()對效能的影響和原因。
(18) C++中的過載和重寫的區別:
(19) C ++記憶體管理(熱門問題)
(20) 介紹面向物件的三大特性,並且舉例說明每一個。
(21) 多型的實現(和下個問題一起回答)
(22) C++虛擬函式相關(虛擬函式表,虛擬函式指標),虛擬函式的實現原理(熱門,重要)
(23) 實現編譯器處理虛擬函式表應該如何處理
(24) 解構函式一般寫成虛擬函式的原因
(25) 建構函式為什麼一般不定義為虛擬函式
(26) 建構函式或者解構函式中呼叫虛擬函式會怎樣
(27) 純虛擬函式
(28) 靜態繫結和動態繫結的介紹
(29) 引用是否能實現動態繫結,為什麼引用可以實現
(30) 深拷貝和淺拷貝的區別(舉例說明深拷貝的安全性)
(31) 物件複用的瞭解,零拷貝的瞭解
(32) 介紹C++所有的建構函式
(33) 什麼情況下會呼叫拷貝建構函式(三種情況)
(34) 結構體記憶體對齊方式和為什麼要進行記憶體對齊?
(35) 記憶體洩露的定義,如何檢測與避免?
(36) 手寫實現智慧指標類(34-37我沒遇見過)
(37) 除錯程式的方法
(38) 遇到coredump要怎麼除錯
(39) 記憶體檢查工具的瞭解
(40) 模板的用法與適用場景
(41) 成員初始化列表的概念,為什麼用成員初始化列表會快一些(效能優勢)?
(42) 用過C11嗎,知道C11新特性嗎?(有面試官建議熟悉C11)
(43) C++的呼叫慣例(簡單一點C++函式呼叫的壓棧過程)
(44) C++的四種強制轉換
2計算機網路(TCP/IP)
(1) 建立TCP伺服器的各個系統呼叫
(2) 繼上一題,說明socket網路程式設計有哪些系統呼叫?其中close是一次就能直接關閉的嗎,半關閉狀態是怎麼產生的?
(3) 對路由協議的瞭解與介紹。內部閘道器協議IGP包括RIP,OSPF,和外部閘道器協議EGP和BGP.
(4) 路由協議所使用的演算法。
(5) TCP和UDP的區別
(6) TCP和UDP相關的協議與埠號
(7) TCP(UDP,IP)等首部的認識(http請求報文構成)
(8) 網頁解析的過程與實現方法
(9) 在瀏覽器中輸入URL後執行的全部過程(如www.baidu.com)
(10) 網路層分片的原因與具體實現
(11) TCP的三次握手與四次揮手的詳細介紹(TCP連線建立與斷開是熱門問題)
(12) TCP握手以及每一次握手客戶端和伺服器端處於哪個狀態(11種狀態)
(13) 為什麼使用三次握手,兩次握手可不可以?
(14) TIME_WAIT的意義(為什麼要等於2MSL)
(15) 超時重傳機制(不太高頻)
(16) TCP怎麼保證可靠性(面向位元組流,超時重傳,應答機制,滑動視窗,擁塞控制,校驗等)?
(17) 流量控制的介紹,採用滑動視窗會有什麼問題(死鎖可能,糊塗視窗綜合徵)?
(18) tcp滑動視窗協議
(19) 擁塞控制和流量控制的區別
(20) TCP擁塞控制,演算法名字?(極其重要)
(21) http協議與TCP聯絡
(22) http/1.0和http/1.1的區別
(23) http的請求方法有哪些?get和post的區別。
(24) http的狀態碼
(25) http和https的區別,由http升級為https需要做哪些操作
(26) https的具體實現,怎麼確保安全性
(27) http中瀏覽器一個URL的流程,這個過程中瀏覽器做了什麼,URL包括哪三個部分?
(28) 一個機器能夠使用的埠號上限是多少,為什麼?可以改變嗎?那如果想要用的埠超過這個限制怎麼辦?
(29) 對稱密碼和非對稱密碼體系
(30) 數字證書的瞭解(高頻)
(31) 客戶端為什麼信任第三方證書
(32) RSA加密演算法,MD5原理(MD5不算加密演算法)
(33) 單條記錄高併發訪問的優化
(34) 介紹一下ping的過程,分別用到了哪些協議
(35) TCP/IP的分片粘包過程
(36) 有沒有抓過TCP包,描述一下
(37) 一個ip配置多個域名,靠什麼識別?
(38) 伺服器攻擊(DDos攻擊)
3資料庫(MySQL)
資料庫我自身不是特別熟,面試的時候一般也都坦言了,所以面試官都只是問一些基礎題目。
(1) 關係型和非關係型資料庫的區別(各自優點)
(2) 常用SQL語句(DDL,DML,DCL,TCL)
(3) 資料庫中join的型別與區別(inner join, outer join, cross join, natural join, self join),注意適用場景和sql語句的編寫
(4) 資料庫的索引型別
(5) 聚集索引和非聚集索引的區別(葉節點儲存內容)
(6) 唯一性索引和主碼索引的區別
(7) 索引的優缺點,什麼時候使用索引,什麼時候不能使用索引(重點)
(8) 索引的底層實現(B+樹,為何不採用紅黑樹,B樹)
(9) B樹和B+樹具體實現
(10) 索引最左字首問題
(11) Mysql的優化(高頻,索引優化,效能優化)
(12) 資料庫引擎介紹,innodb和myisam的特點與區別
(13) 資料庫中事務的ACID(四大特性都要能夠舉例說明,理解透徹,比如原子性和一致性的關聯,隔離性不好會出現的問題)
(14) 資料庫隔離性設定不同會出現的問題(髒讀、不可重複讀、丟失修改、幻讀)
(15) 資料庫的隔離級別,mysql和Oracle的隔離級別分別是什麼
(16) 資料庫連線池的作用
(17) Mysql的表空間方式,各自特點
(18) 分散式事務
(19) 資料庫的正規化
(20) 資料的鎖的種類,加鎖的方式
(21) 檢視的作用與使用方法(如何刪除等)
(22) 分庫分表,主從複製,讀寫分離。(我不會,也沒碰到過)
(23) 專案中哪裡用到了資料庫,怎麼用的
4Linux基礎
Linux這一塊如果不太熟,可以直接說,但是因為開發崗位一般都是在Linux平臺下的,所以幾個基礎問題還是要會的。
(1) Linux的I/O模型介紹以及同步非同步阻塞非阻塞的區別(超級重要)
(2) 檔案系統的理解(EXT4,XFS,BTRFS)
(3) 檔案處理grep,awk,sed這三個命令必知必會
(4) IO複用的三種方法(select,poll,epoll)深入理解,包括三者區別,內部原理實現?
(5) Epoll的ET模式和LT模式(ET的非阻塞)
(6) 查詢程序佔用CPU的命令(注意要了解到used,buf,cache代表意義)
(7) linux的其他常見命令(kill,find,cp等等)
(8) shell指令碼用法
(9) 硬連線和軟連線的區別
(10) 檔案許可權怎麼看(rwx)
(11) 檔案的三種時間(mtime, atime,ctime),分別在什麼時候會改變
(12) Linux監控網路頻寬的命令,檢視特定程序的佔用網路資源情況命令
5作業系統
(1) 程序與執行緒的區別和聯絡
(2) 一個程序可以建立多少執行緒,和什麼有關
(3) 一個程式從開始執行到結束的完整過程(四個過程)
(4) 程序通訊方法(Linux和windows下),執行緒通訊方法(Linux和windows下)
(5) 程序排程方法詳細介紹
(6) 頁面置換方法詳細介紹
(7) 能否實現一個LRU演算法
(8) 死鎖的必要條件(怎麼檢測死鎖,解決死鎖問題)
(9) 哲學家就餐,銀行家,讀者寫者,生產者消費者(怎麼加鎖解鎖,虛擬碼)
(10) 海量資料的bitmap使用原理
(11) 布隆過濾器原理與優點
(12) 布隆過濾器處理大規模問題時的持久化,包括記憶體大小受限、磁碟換入換出問題
(13) 同步IO和非同步IO
(14) 檔案讀寫使用的系統呼叫
(15) 執行緒池的瞭解、優點、排程處理方式和保護任務佇列的方式
(16) 怎麼回收執行緒
(17) 殭屍程序問題
(18) 多執行緒同步(尤其是如果專案中用到了多執行緒,很大可能會結合討論)
(19) memcache瞭解
(20) 異常和中斷的區別
(21) 一般情況下在Linux/windows平臺下棧空間的大小
6設計模式和演算法
設計模式一般都不會考太多,除非你明確說自己懂。我基本上就不涉及到設計模式的東西,所以只是簡要說說。當然,單例模式和簡單工廠模式的概念和使用場景還是要知道的。
(1) 介紹熟悉的設計模式(單例,簡單工廠模式)
(2) 寫單例模式(餓漢模式和懶漢模式),執行緒安全版本
(3) MVC設計模式
演算法這一塊太過龐大,幾乎都有可能,牛油們最好還是去刷劍指offer(level 1),leetcode(如果能夠刷到最高難度,演算法對你來說已經不是什麼了,或者說面試對你來說簡直就是吃飯喝水的難度),左神的書《程式原始碼面試指南》(字串,陣列,dp,海量資料問題,搞定它們也就搞定面試的一半)。
下面還是簡單的列舉一些吧(包括一些資料結構題目,只列舉簡單的,面試的演算法一半不會太難,但是現在一般都是需要比較好的思維,或者曾經接觸過這方面的題,建議就是多刷題,做題感覺是刷出來的)
(1) 紅黑樹的瞭解(平衡樹,二叉搜尋樹),使用場景
(2) 紅黑樹在STL上的應用
(3) 瞭解並查集嗎?(低頻)
(4) 貪心演算法和動態規劃的區別
(5) 判斷一個連結串列是否有環,如何找到這個環的起點
(6) 實現一個strcpy函式(或者memcpy),如果記憶體可能重疊呢
(7) 實現一個迴圈佇列
(8) 排序演算法(寫快排,歸併排序,堆排序),演算法的時間複雜度,空間複雜度,是否穩定等
(9) 快排存在的問題,如何優化
(10) 反轉一個連結串列
(11) Top K問題(可以採取的方法有哪些,各自優點?)
(12) Bitmap的使用,儲存和插入方法
(13) 二叉樹的先序、中序、後序遍歷(非遞迴實現)
(14) 二叉樹的公共祖先(簡單地說,劍指offer上的題大都是高頻題)
(15) 1-n中有多少個1
(16) 字典樹的理解以及在統計上的應用
(17) 陣列的全排列
(18) N個骰子出現和為m的概率
(19) 海量資料問題(可參考左神的書)
(20) 一致性雜湊
7智力題
我特別把智力題單獨拿出來講,是因為這一塊其實有些公司很看重(例如騰訊),但是我基本上也沒刷過這類題目,接觸不多,牛油們自行補充吧。
(1) 100層樓,只有2個雞蛋,想要判斷出那一層剛好讓雞蛋碎掉,給出策略(滴滴筆試中兩個鐵球跟這個是一類題)
(2) 毒藥問題,n拼毒藥,要快速找出哪一瓶有毒,需要幾隻小白鼠
(3) 博弈論問題
(4) 先手必勝策略問題:n本書,每次能夠拿X-X本,怎麼拿必勝
(5) 放n只螞蟻在一條樹枝上,螞蟻與螞蟻之間碰到就各自往反方向走,問總距離或者時間。
(6) 瓶子換飲料問題:多少個瓶子能夠換1瓶飲料,問最多能喝幾瓶

3. 面試經歷(包含面經)
阿里巴巴(菜鳥)
內推,時間較早,結果比較可惜,都是電面
一面:

專案深挖,聊了30分鐘的專案,然而我專案跟軟體開發並沒有太大關係,反而跟自動駕駛關聯性大一些(當我意識到可以投遞百度無人駕駛部門的時候已經太晚了)
面試官貌似對我的專案還挺感興趣,專案聊得很深,具體到專案的硬體實現上。
因為我是擅長C++,所以後面就問C++的基礎,當時答得好爛。
C++記憶體管理有哪些
指標和引用的區別
define和const有什麼區別?
define和const分別在什麼時候編譯,哪個更安全
在類中,基類的解構函式為什麼要設定成虛擬函式
虛擬函式的實現
8.有什麼問題要問我
一面之後以為掛了,然而很意外的還收到了二面,二面正好跟導師在談論文的時候,所以往後推遲了,就又換了一個面試官。這裡說一下,對於大廠的面試,可以不推遲就不要推遲,儘可能去,有時候你一旦說剛好有事,崗位就變成不合適了。
二面
面向物件的三個特性是什麼?
詳細介紹一下多型
如果我拿一個父類指標,指向一個子類的陣列,要找這個陣列的三個元素,應該怎麼使用多型來實現
(上個問題我想不出特別好的答案,然後說將這個指標轉換成子類的,在+3找出這個物件)面試官詢問如果不強制轉換呢?
聊聊STL,如果我用一個int型別的指標,指向一個vector<int>中的元素,會怎麼樣?
在vector裡面有一個find函式,那如果我用find==-1,會發生什麼(這個問題記不太清楚,只記得什麼等於-1)
用過gcc吧,問你幾個gcc的問題
在Linux中一個目的函式的生成過程或者說編譯過程是怎麼樣的
編譯有哪些方式
那在linux中,對於一個已經動態編譯後的檔案,怎麼查找出它用了哪些動態庫?
Linux共享庫的搜尋路徑先後順序
如果一個動態編譯後的檔案,可能缺少了某些動態庫,我們應該怎麼把它們新增上?
在Linux中,執行緒的同步方式有哪些
我問一些資料結構和演算法的題目吧,知道紅黑樹嗎
能說說單源最短路徑dijkstra演算法嗎
那dijkstra演算法能夠找到最短路徑的原因是什麼
說說最小生成樹吧
貪心演算法和動態規劃有什麼區別?
設計題:設計一個爬蟲,去爬一些論壇,有一些論壇可以直接爬,有一些論壇需要登入,有一些論壇需要註冊,有一些論壇只讓你檢索固定數量的字元(例如你要爬20個,但是隻讓你爬15個),請問怎麼設計這樣一個類?
那有這樣一種情況,如果剛開始給你100個論壇,你實現了,但是又給你100個,怎麼辦,不可能一直編譯然後實現?
聊聊專案,花25分鐘聊了專案
崗位在杭州,能夠接收嗎?
三面:
二面其實回答的很爛,感覺上是掛了,但是收到三面,三面很短,記不清問了什麼了,沒太多實質問題。

美團 後臺開發
美團重點就是資料庫、linux、java上,感覺只要你的java和資料庫好就能進,恰巧,我是搞C++的,資料庫不咋熟悉。
一面(面試官感覺也比較青澀,可能也剛畢業不久吧,人挺好的,問題超級多,面了一個多小時):

自我介紹
詳細介紹專案
Linux命令(問了接近10個小問題吧):怎麼修改一個檔案的許可權、怎麼查詢一個檔案的最後10行(tail),那怎麼找出含有關鍵字的行的前後4行(不會了),怎麼查詢一個網路情況
資料庫熟悉嗎?(不熟悉啊,沒關係,我問幾個問題)知道索引嗎?在什麼場景下用索引,索引有什麼好處,有什麼缺點?
面試官感覺我回答索引部分還可以,給了一個具體場景,問應該怎麼做(不會)
計算機網路:TCP/IP的三次握手、四次揮手,為什麼要用三次握手,兩次可不可以,四次揮手有沒有可能改成三次揮手
作業系統:程序和執行緒的聯絡和區別,Linux下程序的通訊方式IPC,程序排程的演算法(講了先來先服務、短作業優先、輪轉、最高響應比),分別分析每一種的優缺點,死鎖的產生條件,怎麼解決死鎖問題,怎麼檢測出死鎖(怎麼檢測出死鎖不知道)
近程的通訊裡面的管道通訊,有哪幾種(命名和非命名)。寫一個管道通訊的命令,問第一個程序的輸出傳遞給第二個程序的輸入,那麼它還儲存這個資料嗎
知道資料證書嗎?(從非對稱的加密演算法,公鑰私鑰的使用,數字簽名,CA給的數字證書來避免冒認)對稱加密演算法包括哪幾類?MD5是加密演算法嗎(不算,原因是)
資料結構:堆疊和佇列各有什麼特點,佇列有什麼應用場景(美團真心超級喜歡問這個問題的,不管是啥都問有什麼應用場景)畫一下單鏈表,雙鏈表和迴圈連結串列,他們的查詢,插入,刪除的複雜度分別是多少?
演算法:給一個二叉樹,找出其中最長的距離,給出路徑
學過java嗎?C++和JAVA的區別是啥?能接受java嗎
一般怎麼學習技術
說一個你最近看的部落格

二面:(這個面試官不苟言笑,跟他交流找不到鼓勵,而且他一直否定我的思路,最後能過也是萬幸)

(一直看我的簡歷),介紹一下做的專案,詳細說說其中軟體的實現(專案真的很重要,面試面一定要將自己的專案介紹練習到能夠詳細透徹地講解所有實現細節)
專案裡用到了生產者想飛這,面試官讓講講這個模型(感謝這次面試,讓我更透徹理解我專案裡面的缺陷與改進方法)
生產者消費者用在什麼場景下(單生產單消費,多生產多消費)
專案裡執行緒是如何同步的
專案裡資料的儲存(面試官見我答得不好,開啟教育模式)
簡歷裡寫了linux(這個坑有點大),現在網路流量比較大,那我想檢視那個IP的網路流量比較大(我答netstate),面試官說如果是檢視埠的狀態的話是這樣,但是我的意思是說導致網路流量變得很大的是哪個IP。
用過sed命令嗎?對linux瞭解多嗎?
寫過shell指令碼嗎
迴歸線程問題,說說多執行緒的出現是為了解決什麼問題(回答不滿意)
執行緒的狀態有幾種,畫出狀態轉換圖
你做過硬體的東西,那為什麼要轉軟體
軟體的高吞吐量考慮因素
除了C和C++,還了解過其他語言嗎?有沒有考慮學習Python
能不能說兩個你最熟悉的資料結構?
找一個你最不熟悉的給我講一下?balabala,一般用在哪裡(又是應用場景,好煩)
你印象中C/C++和Java或者python的區別是啥,如果讓你學習java或者Python,你會如何學習,有什麼學習計劃?
說一下你自己的亮點吧

二面比較煎熬,而且面試實在太少,回答的時候支支吾吾,結結巴巴,給人感覺極差,即使是原先可以很好回答的問題,也因為缺乏信心而在面試官中失色不少。
三面:

linux的IO模型可以說說嗎
專案裡資料是怎麼傳輸的,是在哪一層協議?
看過GPL相關的東西嗎
我們後臺開發都是用java寫的,你這一塊怎麼樣
詳細介紹專案的設計
專案裡面用到的快取區,那什麼時候釋放
設計題:假設一個輸入框,可以輸入中文姓名,我們要設計一個評分系統,給輸入的姓名打一個分,姓名越符合取名的習慣分數越高,否則分數越低?要考慮名字很長的情況,名字中兩個字本身都挺好,但是合在一起就語義就有問題的情況(深挖,回答不好)
寫一個整數翻轉的演算法(考慮溢位)
寫一個生產者消費者的虛擬碼
你最近在看哪些書啊?
你以前看了哪些計算機的書啊
職業規劃
能不能轉JAVA
有什麼要問我的

美團有一點很不好,就是不管過不過完全不告訴你,而且面試的時候也是沒有HR的,從通知面試,接我去面試的都是一面面試官。我差點以為你們是不需要HR的呢。

騰訊 後臺開發
特地把鵝廠先提出來說,因為可能還有人在面鵝廠吧。首先,我騰訊也是霸面出來的。和大部分同學相比,我比較幸運的是我大概11:10去霸面(想著感覺太早去也不會給我機會面試,但實際上不是這樣的),然後掃碼放上簡歷,差不多10分鐘簡歷就被拿走了,5分鐘後就被叫去面試了。當時面試官篩掉一堆簡歷,我親眼看著他最後只拿了我的簡歷走了,感覺幸運值MAX(後來發現可能是由於我內推的時候,接到一個簡短的電面(20分鐘),也是SNG事業群的,然後沒有繼續內推面試,放到校招面試了)
關於霸面這裡也說說這方面技巧,首先霸面基本上只適用於這些支援霸面的公司,其他公司最好不要死纏爛打。霸面之前,再次修飾一下自己的簡歷,讓自己的簡歷亮點更加突出,能夠在5秒的快速瀏覽中讓面試官get到他們想要的內容。可以在放簡歷處或者面試廳外面守面試官,在他們空閒之際,快速遞上簡歷推銷自己,如果簡歷足夠出色,機會要比直接放在那裡等人去拿好得多。但是如果面試官不感興趣,切忌死纏爛打,只會起到反作用。

電面
這一面試比較久遠,我能夠記得的就只有幾個問題了

linux中的殭屍程序,怎麼產生,怎麼處理
top K問題,有哪些方法可以做(快排,建堆,分成小檔案,然後敗者樹)
快排思想,複雜度
快排和堆排對比

一面

自我介紹
因為是霸面,上來就給了一張紙,讓我看看做幾道題,其中一道是C++中多型相關的,就是那種詢問輸出結果的題;一道是迴圈fork,問有多少個輸出行的題,還有一道忘了。感覺應該是如果這幾道題沒答上來就可以回去了
set,map和vector的插入複雜度
講講static的用法
全域性變數和區域性的靜態變數除了可見區域不同還有什麼不同?
什麼時候要有拷貝建構函式
C++裡面的紅黑樹
C++類裡面函式加const的原因和實現?能不能在函式前面加上static,為什麼
linux基本命令,許可權查詢,cpu和記憶體的情況,查詢出來後的結果怎麼看
排序演算法比較,複雜度,穩定性等
11.智力題:有100本書,每次拿1-5本書,要先手贏,怎麼拿?
12.智力題:螞蟻在樹枝上的問題
面試完感覺好開心啊,根本沒去想過不過,只是覺得能夠面到我最喜歡的公司啦,即是隻有一面也值了,開心~(於是,當天晚上狀態改變,通知複試)

二面:
二面我是當天第一個面試,感覺面試官還沒有進入狀態,所以前小段的面試比較冷場

介紹專案
(發現專案沒啥問的),出了幾道計算機網路基礎問題,例如描述三次握手四次揮手的11種狀態,還有兩三個忘了。三次握手之間可能存在什麼攻擊(DDos攻擊)
說說DNS的原理,具體工作原理(我沒說清楚)
講講ping的具體工作,用到哪些協議(這一塊要熟一點,不要只記住用了哪些協議,要深挖怎麼工作)
講講http的狀態碼,403,201什麼意思
中間穿插了一些別的問題,例如C++的多型,虛擬函式,排序演算法啊
C++中加入建構函式裡面有虛擬函式,會怎樣
8:智力題(在他電腦上)
9:在他電腦上看兩道題,說答案
(看著電腦,上面有我的筆試題每道題的得分情況)你怎麼看騰訊這次的筆試題,難度怎麼樣,筆試完有沒有去查你不確定或者不會的題目怎麼做啊?
你筆試程式設計題做得不好啊,什麼原因啊
那你挑一道程式設計題重新去做吧,哦,我給你選吧,就這道(魔法城堡)。我先面下一個,你要是寫完了或者不會寫你就再寫一個快排吧
於是我就去後面寫程式碼了,面試官面試下一個。(這裡有個不太靠譜的小竅門,但是跟人交流過貌似挺符合的,要是面試官要是沒有給你紙去寫程式碼,那麼你要小心點了,說不好就要去準備下一家了)
你有什麼要問我的(問了部門,面試官比較詳細介紹了部門,而且很貼心的告訴我如果我能進去,應該負責什麼)
能否實習

三面(HR面試)

自我介紹(HR面試的自我介紹可以側重軟實力部分,專案技術方面介紹可以適當少一些)
不是計算機專業,為什麼要轉行
專案中遇到的最大難點
遇見過最大的挫折是什麼,怎麼解決的
職業規劃
看過最好的一本書是什麼
不是計算機專業,學習很難吧,平時怎麼學習的?
怎麼看待自己的?用兩個詞形容自己
目前的offer情況
家庭情況。
有什麼問題問我的嗎(我問因為部門有三個業務,具體負責什麼確定了嗎,培訓機制,接下來的流程)
問流程的時候,hr小姐姐貼心的告訴我可能要加面(不要加面啊,哭)
嗯,最後我表示了一下對騰訊的感情,不吐不快。

於是度過史上最難過的十一(比我去年整個十一用來寫論文還慘),每天都刷狀態,然而每天都是HR面試(雖然HR小姐姐說了十一之後才會變狀態,但是不死心)。一直到十一的最後(10月8號的晚上),狀態變成已完成所有面試。第二天查詢狀態(待報批),報批了一週,於10月13成功get到offer。

網易(全是演算法)
一面:

自我介紹
貌似問了兩個C++基礎,忘記了,反正面試官也沒上心
瞭解歸併排序和堆排嗎?balabala後,寫演算法:有兩個連結串列都是有序的,怎麼合併成一個(歸併)
演算法:怎麼判斷一個輸入字元是正確的IP地址(IPv4的點分法)

二面:

給一張紙,上面有幾個問題,問怎麼輸出,跟騰訊差不多,還是多型那套東西
又給了一張紙,上面是別的問題,海量資料的設計題(忘記了)
寫演算法:有1個連結串列,上面每個節點除了next正常指向下一個之外,還有1個隨機指向別的節點,怎麼複製(劍指offer原題)
演算法:有1個打卡系統,上面記錄了每個人登陸時間和下線時間,詢問最大線上人數(原先思路是對登陸時間排序,然後比較下線時間跟後面的登入時間,但是面試官指出了會出錯的情況。於是設立了對最早登陸時間和最晚離線時間的排序,然後每次離線人數cnt-1,每次有登陸時間cnt+1的方法)

三面(我以為是HR,然而並不是)

介紹專案
2 專案的難點是什麼
為什麼轉行
對未來發展的看法(職業規劃)
前面的面試官對你的評價都挺好,那我就不多問了,寫個演算法吧,輸入兩個字串,然後忘記了,貌似是怎麼做處理後輸出字串。反正比較簡單
有什麼要問我的(沒看到我的部門安排啊)

網易的面試特別順暢,幾乎沒有卡頓或者不會的問題,當天狀態特別好(騰訊加的buff在閃耀)。

完美世界(伺服器開發)
錯過內推,師兄的同學還是把我的簡歷給了HR,走校招流程。但是,我的筆試成績不知道為啥找不到了,HR告訴了師兄。最後,HR讓我去面試,面試之前重新做了一套卷子(1個小時)。這裡就凸顯內推的好處了,雖然流程都一樣,難度都一樣,但是起碼人家更願意給你機會。

先說說筆試,這套筆試難度中等,比較器全面考核了幾乎所有的基礎內容,有幾道挺難的,沒做的特別好。其中,有兩道大題記憶比較深,因為遇見次數挺多,一道就是給了一個類,讓你寫出建構函式,解構函式,拷貝建構函式,賦值運算子過載函式。另一道是考察vector在刪除某些函式的時候,iterator失效的情況,怎麼解決

一面:
一面主要就是圍繞筆試題進行詢問,面試官一遍檢查我的答題情況,一遍問一些重要問題(更多的是我做錯的題目),然後擴充套件去問基礎,例如

虛擬函式的實現,要極其具體的過程,例如虛擬函式指標在不同物件的指向
vector迭代器失效的情況
演算法題的思路
專案具體介紹,包括缺陷和改進

二面(部門老大)
1.簡單考察了一下技術。問了差不多十個小問題,具體記不太清楚。

學過mysql,詢問有沒有在專案中用到,sql語句考察
3.之前面過暢遊?那邊的情況
喜歡玩什麼遊戲,對遊戲的認識,聊聊遊戲
不是計算機專業,平時如何學習的?
最喜歡的書。
目前的offer情況
對戶口有要求嗎
二面沒問太多,也沒跟我說什麼,原先以為應該是掛了,因為沒有讓我HR面,但最後是卻發現是想給我申請sp,所以要加面。(這個sp應該跟有個同系師兄也在部門裡面,而且做得很不錯有關)

第二天,部門HR反饋面試結果,表示要加面,後期校招HR通知
第三天,校招HR電話通知面試,這裡贊一波完美的HR和麵試官,有一說一,直接跟你說是想給你申請sp所以才加的面,面試結果不影響錄取。然後這個HR對我們學院好感興趣,跟我聊了差不多半個小時。(HR人好好,聊到最後我差點就直接說不考慮了,就去完美)

三面(是一個等級好高的人面的,在另一個大廈,裡面都是完美的X總)
三面全程聊專案,面試官不停詢問專案細節,然後加大專案難度,如果資料量更大要怎麼設計啊,如果資料傳輸更快速怎麼辦啊,一直提醒我站到一個全域性設計的角度上,不要拘泥於某一點(看成一個專案需求,總體設計是否應該更改,怎麼改)。我都沒想到我的專案的擴充套件性有這麼大…面到最後挺崩潰的,大咖就是大咖,思路跟不上。
最後問了一下喜歡玩什麼遊戲,有什麼心得。
Over。

趨勢科技
這一家沒太多好說的,就是儘可能參加他的線下筆試吧,還是要簡單一些的。
一面(30min)

介紹專案
面向物件的理解。
多型的理解
介紹三次握手四次揮手
其他基礎問題跟前面高頻題目大都重複,不說了。
寫個演算法思路:給一個字串,怎麼找出最長連續重複子字串?
想做哪方面的軟體開發?
有什麼想問的?

二面(兩個面試官,綜合面,零零碎碎的,問了很多)

詳細介紹了專案,面試官中途打斷幾次詢問
介紹在專案裡面充當的角色
專案最大的難點是啥
專案過程遇到的最大挫折是什麼
介紹一下本科獲得的全國賽獎項的情況
英語聊聊你對工作地點的看法
女朋友在哪,中文說工作地點的考慮因素有哪些
最有成就感的事情
在實驗室中擔任什麼角色,參加的XXX能聊聊嗎
職業規劃,軟體開發有多種,往哪方面發展
用兩個詞來形容自己
有什麼要問的:趨勢科技在國內的市場發展,培訓機制(然後他們介紹了整個公司的整體文化,極客,自由)

不得不提一下,趨勢科技的簽約現場。二面後很快,就通知籤兩方,剛進們,就遇見那個宣講的大咖,全程壓力好大,他們氣場太足了,但是確實我的所有問題都給予瞭解答,包括各種福利,公司制度,晉升渠道等等。然後跟我說,我可以先簽了呀,反正沒有違約金(這點厲害了),可以讓我有個保底也好。也說了我可以繼續去面其他的啊,最後還想去他們那再去。

京東(投了深圳崗位,但是面試我的是北京京東雲)
一面:
坦白說,見到面試官,我就有不詳的預感,因為我真的很不擅長跟年長的面試官(四五十歲)打交道。面試官全程冷淡,而且用“嗯?”來質疑你,感覺就是流程一直走,回答好壞確實沒咋上心。

自我介紹+專案詳細介紹
專案細化,能不能用XX來代替啊,為什麼這麼設計啊,專案目前的缺陷是啥?
三次握手四次揮手
TCP和UDP的區別,適用場景
抓過TCP包嗎?TCP包怎麼構成
埠號最大是多少,如果需要更多的呢?
接下來就厲害了,幾乎所有的網路協議來個遍。ARP瞭解嗎,詳細說說
詳細聊聊ICMP
路由協議瞭解嗎?說說
http請求報文的組成
linux用過是嗎?檔案許可權,還有一些常見的命令
聊聊traceroute
在瀏覽器輸入一個URL後發生的事情
資料庫,用了什麼,問了一些sql語句
問了全文索引
還有好多,但是大都忘記了,基本上回答上80%,但是還是掛了。

360(C++開發)
面試的資料流部門的面試官,
主要就問了兩個問題

寫一個連結串列翻轉的程式碼
類似今日頭條,有很多帖子,假設每個帖子都有1個ID,32位,怎麼實現將使用者閱讀過的帖子不重複出現(雜湊不行,資料量太大,而且會是三維的(使用者ID-帖子ID-是否閱讀過),最後用了bitmap,還聊到了布隆過濾器,但是我這一塊幾乎都忘記了,實在面試官的引導下一點一點把這道題完成了)。
嗯,剛出門就看到狀態說不合適。

Shopee 後臺開發
Shopee今年是第一次校招,崗位在深圳,公司處於剛開始的階段。面試包括開發面,測試面,HR面。
面試之前,先做兩道筆試題。
第一道演算法:將字串的所有大寫字母放在後面,小寫字母放在前面,相對位置不能更改,不能有額外的空間複雜度。(面試官會看演算法的時間複雜度)
第二道:問在[0,1000000]之間的數字不包括8和9的數字有多少個
一面(幾乎將所有基礎都涉及到了,但都不深)

解剖筆試題,解釋自己使用的演算法
程序通訊方式,詳細說明,並給出各自的優劣
死鎖的必要條件
銀行家演算法
頁面置換演算法,詳細說說LRU
C++的const和static作用
C++的記憶體洩露
面向物件的三個特性
C++的虛擬函式
(跟騰訊一樣)在他的電腦上看題,兩三道吧,C++和網路都有,C++是典型的虛擬函式問題,網路有兩道,跟協議和執行順序相關
在瀏覽器中輸入一個網站,發生的事情(客戶端,服務端)
輸入網站後,瀏覽器做了什麼(中間涉及到URL的構成)
OSA七層協議,交換機(XXX)屬於哪一層
瞭解網路層的協議嗎,分別有哪些
埠號的上限,以及原因
https屬於哪個埠,FTP呢?
https和http的區別
瞭解設計模式嗎?
單例模式用來做什麼的
瞭解資料庫嗎(mySQL),count(1), count(*), count(col) 的區別
問了差不多五個SQL語句的問題(select,insert, alter)

二面(二面面試官對於一面面試官貌似比較相信,所以傾向於他的評價,沒有問我太多)

筆試題第一道演算法講解,時間複雜度分析,是否可以優化(面試官認為可以優化,但是我到現在還是找不到優化方法)
筆試題第二道講解,然後面試官質疑我的解法,我用概率論的方法重新解釋了一遍,面試官接受了(這裡想說一下,如果面試過程彙總,你跟面試官的想法相左,我覺得可以用很好的邏輯去講解,讓面試官明白,但語氣要誠懇,態度要端正,說明你的想法即可,不要糾結於對錯,因為更多情況下,會是你錯了)
看兩道題,第一道:有1億個IP地址,怎麼找出訪問次數最多的IP(可能是這樣)
第二道