本文是面試經驗總結,功利成分過大,不適合用於技術學習
本文適合像我同樣方向不明確,沒有牛逼經歷的普通學生
本文的大部分觀點是我我的的總結,不具備普適性,僅供參考php
看了一週249的新劇,以爲我應該給這幾個月的劃上一個句號。是對本身的總結,也但願能給其餘人帶來一點點經驗吧。前端
先說一說本身的經歷吧。從三月份開始,大廠實習面試所有失敗,去了本地某國際知名廠商的雲計算銷售部門,去幹了一個月,以爲離研發有點遠,就辭了(後來證實,該公司的名號,仍是在校招篩簡歷的過程當中,幫了很多)。此時已經到了六月底了,痛定思痛,自知在機器學習算法方向只懂一點皮毛而已,積累不夠。開始給本身定了後臺開發的方向。java
七月和八月從csapp後半部分開始,本身寫了寫簡單的httpserver,讀了muduo源碼和書籍,以及若干linux後臺的書籍(後面我會列一下)。而後進入九月,正式校招。
戰果:node
b廠內推三次掛,校招同一個部門三次掛mysql
a廠集齊5個已回絕jquery
t內推去深圳掛,校招不過筆試。linux
360內推到hr面後掛,校招不給機會。ios
小米內推一面掛,校招不過筆試c++
華爲提早批offer。面試
新美大offer
大疆offer
還有若干不過筆試,沒有面試機會的以及實習的面試過程,就不列出來了。一開始我就說本文適合普通學生,根本就不是什麼成功的經驗,實際上是我本身失敗的總結。若是你纔剛上大學或者研究生,請抓緊搞各類比賽和項目。若是你還有幾個月就面試了,不妨看一看,興許有一些有用的地方。
我準備從自我定位、知識儲備、面試流程這幾個方面談一談
實習的時候,我嘗試面試了機器學習相關的算法崗位,很快我意識到,本身並不擅長算法,只懂一點CNN的皮毛,sigmoid是怎麼推出來的,徹底不知道。這個時候離校招只有不到三個月時間,我要麼從基礎開始,過一遍機器學習的理論,要麼朝後臺方向,本身擼項目,補基礎。顯然,我以爲本身搞工程項目更容易一點,也更感興趣一點,因而選擇了工程項目(而後後來我簡歷上的惟一亮點倒是關於機器學習的,這給後來的面試帶來了很多困擾)。
面試了這麼多,我感受面試官選人的流程通常是:
過去有沒有牛逼的經歷(acm等牛逼競賽,牛逼論文,牛逼實習等等)
方向是否是對口(過去的項目經歷,跟目前的崗位匹配度和深度)
基礎知識(操做系統,網絡,算法,相關業務知識)
這三點重要性我認爲是按照前後順序排列,舉個極端點的例子:你拿過acm金牌而後去面試後臺開發崗位,不清楚TIME_WAIT狀態的含義,面試官應該不會刷掉你。可是若是你沒有那個獎,而後也沒答出來,我想你多半就很危險了。
然而對於大部分人而言,好比我,第一條根本就沒有。這個時候,給本身一個定位就很重要了,大部分面試官都會考察到你的基礎,可是不排除有部分面試官當你第二條不知足的時候,直接就崗位不符合了,尤爲是到了終面,第三條你們都知足了,前面兩條就顯得很是重要了。
第一條是硬傷,第二條勉強還能夠補一補,前端開發、後臺開發、算法、機器學習、安卓、ios等等,你必定要選一個方向,針對性地學習,各個公司崗位可能名字不同,但大的方向就那麼幾個。能夠結合本身的興趣、理想和以往的經驗,綜合考慮一下,若是不清楚崗位具體作的事情,能夠問問認識的師兄師姐。
除開機器學習算法類,研發類的基礎知識基本都是差很少的,這裏主要之後臺爲例講一下,基礎知識該怎麼去準備。
沒刷過題的同窗,不建議直接去刷leetcode,leetcode如今已經有將近400道題了吧,咱們的時間有限,直接刷,有點盲目。我建議從劍指offer開始,至少一遍(能夠配套lintcode的階梯訓練),越熟練越好。而後是鏈表和二叉樹,到leetcode選擇鏈表和二叉樹的tag,所有刷完。鏈表和二叉樹的題目,面試的機率實在太大,若是這類題目沒有答出來,會比較慘。
刷題的時候,不建議一道一道沒目的地刷。能夠利用好leetcode的tag,分類別來練,好比這周練DFS,有點感受後,再選下一個主題DP,就跟高考的複習差很少。這裏再推薦一下左神的代碼課,牛客網上有他每一週的直播視頻,講得很細,也推薦你們買一下他99的課(優惠碼AlAMdgS),內容針對性很強,可是感受講解沒有直播好,我買的時候大部份內容我已經刷過了,算是給左神補個錢了,不虧。
總得來講,面試不會涉及很複雜的數據結構和算法,除非是你本身跟面試官提。若是你上面的基礎內容都差很少了,能夠去hihocoder,它裏面有一個hiho一下,分專題,難度要大一些,像線段樹,各類平衡樹等。hihocoder就是正規的ACM形式,不給數據,新手刷起來很費時間,感受用戶較少,討論區也常常找不到有用的信息。
最後說一點就是,平時無所謂,去面試以前,必定要花點時間去練一下白板寫代碼,畢竟仍是會趕上手撕爬蟲、手撕TCP分包黏包這類的面試官。簡單的必定要寫出來,複雜的至少寫個大概思路。
這部份內容,我就列一下我從圖書館借過的書單吧.
csapp(時間緊的話,重點後半部分)
TCP/IP詳解. 卷1(TCP狀態圖要能畫出來)
UNIX網絡編程. 卷1,卷2 (選重點內容)(以上三本基礎,必讀)
Linux多線程服務端編程 陳碩 (muduo源碼,很適合學習)
Linux高性能服務器編程 (瞭解,可做參考)
Linux內核設計與實現 (書很薄,可用於快速瞭解linux)
深刻Linux內核架構(選擇對應的章節,細讀。好比文件系統,內存管理)
深刻理解Nginx : 模塊開發與架構解析 (翻了下目錄,看了部分小節)
高性能MySQL (看前面一兩章,面試到mysql可保命)
SGI STL源碼剖析 (重點前三章)
effective C++ && more effective C++
c++ primer 最新版
深度探索C++對象模型 (以上四本,c++方向越熟越好)
兩個月時間,不可能所有看完。個人方法是選一個項目(muduo),學到什麼,再去看什麼。其次就是去翻面經,針對性地補。
再補充一點,平心而論,C++方向的崗位真心不多,若是時間還早,建議入java。不過,校招不過重要,我後來拿到的offer所有是java崗。java方向的我以爲上面書單裏面,除了後面四本,都是適用的。
單獨把筆試說一下,由於如今的筆試都變成了在線筆試,簡歷不出彩的狀況下,筆試仍是很重要。不過筆試,真是有一種深深的無力感,時間短,範圍廣,各個公司套路都不太同樣,毫無章法可循。不過感謝牛客網提供了一個地方,至少有個地方能夠刷一刷。我作了那麼多筆試,很慚愧,感受都是憑几率過的。
個人建議就是,先去牛客網上刷幾套公司的題,而後感受本身哪一個方面弱一點,先看看書,而後選擇某一個類別的題目針對性訓練。尤爲是智力題,我以爲是能夠刷一刷的,後來我發現有大機率碰上原題。
而後是編程題,這個只能練,多刷leetcode。把我前面說的基礎部分搞定事後,可能還不夠,不少狀況下,筆試的編程題會比面試還難。不事後來我據說你們都是組隊的。。我就很少說了(實際上是我連組隊的人都找不到。。。)
最後說一點,就是校招過程當中,會有大量的衝突。你有可能一天趕上三次筆試,這個時候要作出選擇。不只是放棄衝突,若是有連續三場的筆試,我也建議放棄一場,由於人的精力是有限的。根據自身的狀況,若是我去連續搞好幾場筆試面試,太累了,可能哪一場都搞很差。我如今回想有好幾回筆試沒過,就是由於精力不夠。
面試這個東西,真的是天時,地利、人和一個都不能少。運氣很重要,實力也很重要。首先,面試是什麼?面試是銷售你本身的過程。因此你應該主導整個面試流程,而不是等着面試官來問你。爲何會有自我介紹?自我介紹其實就是去講你會什麼,擅長什麼,最好順帶講一下簡歷裏面的重點內容,而不是簡單的講一下名字和學校就完了。若是自我介紹信息量不大,面試官就會從簡歷裏面本身挖一些東西問,因爲你簡歷用詞不當等緣由,頗有可能問到你的死穴。
整個面試下來,像百度、美團等這些大廠面試流程更正規、紮實。美團中規中矩,百度最難(寫個多線程計數器讓我利用CPU多核下面的 cache Orz...)。騰訊基礎考得並不難,項目經歷被鄙視。華爲面試最水,華爲感受不怎麼看面試,看你是否是有一等獎學金,論文這些。大疆不知道什麼鬼,有多是缺人,面了兩次,時間都很短。我後面會把我遇到的面試題列一下,供你們參考。
我面試到後面,基本上都可以進入二面或者說是終面。然而在終面或者總監面的過程當中,老是由於過去的經歷太過薄弱而後掛掉了,也有多是我不會吹牛,我是以爲真心無解,硬傷。百度內推到終面的時候,問我研究生的研究方向以及成果,我blabla說了一推,明顯感受到面試官不太滿意。而後到校招的時候,也是終面,面試官挑我機器學習項目的亮點,講完了事後,他就問我究竟是想作機器學習仍是工程研發,以爲我研發項目經驗偏弱。Orz...因此我一開始就講定位,基礎都過關了的時候,方向真的過重要了。
再說一點就是,當你以爲面試官以爲對你失去興趣的時候,這個時候你能夠拿着你提早準備好的籌碼(前提是你的這個籌碼必定要精通),跟他講你某一個點很熟。好比你熟悉linux內存管理,你熟悉C++多態等等。如今想一想,騰訊終面的時候,面試官說個人經歷太弱,沒有實際的,大型的項目經歷,我應該再爭取一下,講一下個人基礎,說不定會有起色。
前面說了那麼多,都是我本身經驗,有一些通用的地方,也有不少我自身的特色。更詳細的面試歷程,各位能夠去網上搜面經,本身多總結。找工做的這幾個月,很考驗你信心和毅力還有體力。沒事多給本身灌灌雞湯,offer總會有的。
這裏只是一部分面試的內容,有不少我當時沒有記下來(好比美團,大疆的我就搞忘記了),不過面試多了,你會發現,題目會有不少重複。
百度運維部(內推):
你的代碼行數
最好的一段代碼實現經歷
linux 子系統模塊
最熟悉的數據結構和算法
客戶端忽然掛掉,而後服務器這邊會有什麼反應
線程加鎖有哪些須要注意的地方
地鐵問題:
統計地鐵 某一秒的 人數
數據:
時間都到秒級別
進站時間 出站時間 卡ID
而後怎麼設計一種結構,能夠提供查詢 某一秒的 人數, 查第 3 第5秒的人數
方法:
一、用一個數據a[606024]來表示每一秒的變化人數,好比第10秒,進入100人,a[10]+=100,出站20人,a[10]-=20那麼最終a[10] = 80。
二、再用另一個同大小數組b[0] = a[0] b[i] = b[i-1] + a[i] 就是第I秒前的總人數
重點: 考慮每秒變化的人數!
數據庫查詢慢 會作什麼,數據庫引擎 inonodb
linux 文件系統 ext2 ext3 inode節點
進程通訊的方式
怎麼避免死鎖
shell 查看CPU 哪些進程的使用
/proc裏面的內容和原理,多長時間刷新一次?實際上不是刷新。
sed,awk使用
全局變量初始化 和成員變量的初始化
40億個 unsigned int 給10w個數 查找是否存在 布隆過濾器
SVM的含義和,優缺點
怎麼對用戶建模,推薦廣告
TCP 啓動階段,作了哪些事情
擁賽控制具體算法
HTTP 協議的字段 cache-control last-modify 這些字段的意義
百度運維部校招:
寫一個多線程計數器,比原子操做更快的方式,利用多核CPU的 cache, 定義局部變量, 而後手動合併一下(不會寫)
寫memcpy 函數, char 字節拷貝效率比較低,而後效率最高的拷貝, 寄存器最多能一次拷幾個字節,有沒有不通過CPU的拷貝?
兩個進程訪問同一個頁面,怎麼弄?
二面:
手寫爬蟲題:找到全部百度IP,抓百度全部網頁,判斷全部網頁是否相同,再抓取全部百度logo
IP題,題目記不得了,當時用得線段樹,沒手寫出來,講了思路
推薦系統怎麼弄?
運維繫統裏面,怎麼找異常的狀況
小米內推:
GET POST區別
C/C++的區別
java與C++的區別
HTTP狀態碼
ajax原理。
poll與epoll的區別
vfork fork pthread_create 下面都是clone, 它們的區別, 進程結構 task_struct
linux內存管理,分頁,頁大小,怎麼分配連續的內存,kmalloc
線程間同步
進程間通訊方式,區別優缺點
linux處理器調度,進程調度,實時進程,非實時進程,實時進程的調度算法
信號量,kill 。發送的信號是 什麼? 終止信號能不能忽略, 進程kill以後,資源回收問題
數據庫ACID
紅黑樹
MVC怎麼理解?
php與.net平臺的區別
數據庫創建索引須要注意的地方
jquery 選擇器
(就一次面試,面了這麼多東西,最後還掛了。。。)
360內推:
一面:
函數對象和普通函數的區別
poll epoll的區別
二叉樹遍歷、快排、鏈表遍歷,選一個寫
線程加鎖 須要注意的地方
二面:
樹和hash表的區別(速度、修改頻率、內存)
進程掛了,怎麼辦?守護進程
鏈表有環,不用快慢指針的方法
select 大小限制,是多大?
ping,traceroute,udp
各類協議的原理
華爲提早批:
什麼是無鎖,無鎖隊列
設計模式相關
爲何要用線程
好將來:一面:C++多態原理菱形繼承虛函數表,是調用哪一個虛函數用C語言去實現多態,結構體包含實現繼承,函數指針實現虛函數實現sizeof double 思路: 內存數組,而後相減二面:TCP分包粘包,寫代碼堆排序,寫代碼