4月19日,本人拿到了網易的口頭offer。已經決定去網易-杭研院實習。精神緊繃了一個半月,現在可以好好放鬆了~ 接下來與大家分享一下本人找實習的經驗。雖說是找實習,相關經驗在秋招時也應該是適用的。
以下經驗主要偏向技術崗,且更多地側重於前端。
簡歷分享兩個簡歷模板:
程序猿簡歷通用模板(請自學Markdown語法)[2]關於怎麼寫簡歷,知乎上有許多寶貴經驗,我就強調以下幾點:
項目經歷、學生工作、興趣愛好等最好有詳實的數據和論據支撐,如「該項目後期經過XX方面的性能優化,效率提升22.7%」、「舉辦XX活動,參加人數XX人,持續XX天」、「愛好唱歌,校園十佳歌手三等獎」。而且一定要體現你起了哪些作用。
網申和內推簡歷寫好後就進入這個階段啦。建議大家關注以下幾個微信公眾號:
和這幾個網站:
注意,部分公眾號和網站提供收費服務,我覺得毫無必要。不要在這方面浪費錢,網上免費的資源已經多到眼花繚亂,像我這樣善良的主動分享經驗的網友也挺多。
這個階段我犯了一個大錯誤。內推找得太早,導致複習得還不夠充分就接到了阿里和騰訊的電話,頭幾次電話面試缺乏經驗發揮失常,浪費了這兩家公司的內推機會。現在想起來都捶胸頓足……可以考慮在各大公司內推/網申截止日期前幾天再投遞。
郵箱最好用163、gmail等郵箱,但京東、美團、騰訊等公司建議使用QQ郵箱。每天都要注意有沒有收到新郵件,注意要翻一翻垃圾郵件,可能被誤識別。
除非有很明確的目標,我建議大多數同學還是海投。我自己就投了三十多家,叫得上名字的公司幾乎都投了。筆試、面試也是很寶貴的經驗,哪怕倒貼錢我也要多嘗試,何況投簡歷、筆試和遠程面試根本就不要錢呢?
筆試非技術崗的筆試喜歡考智力題,這點類似公務員考試。牛客網上可以刷題,或者買公務員考試的資料也行。至於具體的產品經理、策劃等還考些別的什麼,我不太了解。
大多數公司技術崗筆試的套路差不多,選擇題+編程題,有時候還會有問答題。選擇題的考點,除了根據你選擇的崗位有所側重,更多地還是考察基礎知識。C/C++/Java基礎、數據結構、作業系統、計算機網絡一定要重點複習(用學校的教材即可),如果有多餘時間,最好再看看編譯原理。牛客網上也可以做對應的專項練習。
至於編程題……這也是我心中的痛啊……羨慕學ACM的同學,在這方面優勢就很大了。LeetCode、LintCode都可以刷刷。書籍推薦《劍指offer》,圖書館有舊版的。LintCode的階梯訓練-書籍裡也有《劍指offer》的全套練習題,九章算法上也可以搜每道題的題解。刷通了《劍指offer》,除去頭條筆試以外的編程題,做出一半還是比較輕鬆的。大多數公司的編程題支持多門語言。你可以挑選自己喜歡的語言,熟悉相關的API,免得到時候要自己實現一些原本就有的函數。但最好還是練一練C/C++,面試的時候面試官不一定會你掌握的語言,但多少懂點C/C++。
如果是在牛客網筆試,「校招小管家」微信公眾號會在筆試前提醒你。吐槽一下賽碼網,沒有牛客網好用。面試
面試有電話面試、視頻面試、現場面試。電話面試更多地會考察你的知識點、談談你過去做過的項目,很少會問你複雜的算法題,即使問了也是讓你講講思路。視頻面試和現場面試就會讓你寫比較細緻的代碼了,到時候要仔細考慮邊界情況和特別用例。不過我很少見到要求你一定要把代碼跑起來的面試官。
面試會有自我介紹環節,稍微準備一下就好。我的自我介紹通常就半分鐘。
面試的時候一定要放鬆,語速儘可能平緩。遇到不會的知識點請大方地說你不會(或者像我這樣說:「這個知識點我不了解,以下是我的一些猜測……」或者「您能給一些提示嗎?」)。硬著頭皮回答只是在浪費雙方的時間。
面試通常有好幾輪,一般是若干輪技術面加上最後一輪的HR面。阿里的HR面很玄學,其他公司還好。但我至今也想不通為啥鏈家的HR面把我刷掉了……
去大公司面試就像追女孩子,如果面完試很久都沒回你消息,你也別多問,免得兩邊都不愉快。如果是小公司可以冒險嘗試一下,因為小公司的流程不那么正規,有周旋的餘地。
以下是我有印象的各大公司的前端面試題。括號內為答案和吐槽。
阿里阿里內推和網申都開始得比較早,但如前文所說,大家可以不急著投,等準備充分了再去試試運氣。可以在網站的個人中心裡查看自己的面試進度。希望大家不會看到「已回絕」三個字。簡歷面,電話(太緊張+沒睡醒的緣故,我在這裡掛了) 簡述 Vue 的生存周期(創建,掛載,更新,銷毀)
讓你用 Bootstrap 設計一個系統,怎麼設計?
(這問題我現在都不知道怎麼答)
Express 和 Koa 框架的區別、優缺點(參見知乎)
Node.js 的優缺點(擅長I/O密集、不擅長計算密集……)
騰訊騰訊和阿里都喜歡電話突然襲擊,這一點很不友好…… 騰訊的面試進度可以在微信公眾號裡查看。
一面,電話ES6 裡 let 和 var 的區別(前者塊作用域,後者函數作用域;
(面試-狀態碼)
簡述 ES2017 裡的 async 和 await (你不知道的JS)
二面,電話(掛了)(快速學習、善於溝通)
HTTP 、 HTTPS 、 HTTP2 的區別?(關於HTTP你該知道的)
簡述一下用戶訪問網站的過程(緩存,DNS查詢,建立連結,請求,響應,收到頁面,解析DOM樹,顯示內容,首屏加載完成,可交互)
(見後文小結裡的HR相關文章)
筆試後北京一面。體驗極差!不能一次面完嘛!複試還是改電話吧……
列舉數組的用法(建議分類列舉,棧、隊列、映射、刪除等)
跨域(圖像ping, JSONP , CORS , webSocket 等)
本地存儲( cookie , localStorage , sessionStorage 等)
HTTP , TCP , UDP , IP (參看計算機網絡教材)
(見後文小結裡的HR相關文章)
一面過了後公眾號顯示進入複試狀態,但二面一直沒消息。成備胎了?
頭條頭條面試問的算法題比起筆試題簡單多了。面試前會有小姐姐和你約時間。
一般是在牛客網上視頻面試,會讓你在在線編譯器裡寫代碼。順利的話一次三面。頭條回絕人倒是乾脆,面完試十五分鐘內就會給你打電話。像我這樣被掛起來的倒是挺少見……
一面,視頻簡述 CSRF (跨站請求偽造)的攻擊和防禦措施(CSDN博客-CSRF)
在線寫代碼,給定一個數組和一個正整數N,求一個和小於N的最長連續子數組(我兩層for循環暴力解了,在面試官引導下做出了一定的優化)
( overflow , text-overflow )
Vue 的雙向綁定原理(事件監聽, getter 和 setter )
二面,視頻(三面還沒給我消息,估計涼了)在線寫代碼,給定一個二叉樹,求根節點到葉子節點的路徑上所有節點值之和(DFS,先序遍歷,遞歸)
在線寫代碼,給定兩個有序數組,合併為一個有序數組,不許使用 js 的 concat 和 sort 方法(兩個指針)
在線寫代碼,兩欄布局,左邊定寬右邊自適應,等高( flex , grid , float , position ,方法很多隨便說幾個)
簡述 getter 和 setter 寫法(參看紅寶書)
TCP 三次握手和四次揮手,擁塞控制(參看計算機網絡教材)
(見後文小結裡的HR相關文章)
鏈家我也不知道我為啥掛了……
當時面試地點在凱倫飯店。環境舒適,面試官也挺溫和。技術面難度不大,但問得比較細。我印象不深,一二面合起 來寫吧。
技術面跨域方式( JSONP , webSocket 等,但原理要搞懂)
Web 本地存儲( Cookie , localStorage , sessionStorage 等)
Cookie 相關的頭欄位和格式( Set-Cookie:
name1=value1, expires='...',expires='...' )
document.cookie 的格式,寫一個封裝後的函數(格式同上,函數就是花式處理字符串)
session 原理(基於 Cookie ,或查詢字符串,或 ETag )
手寫代碼,不產生新數組,刪除數組裡的重複元素(排序, splice() )
項目細節(問了我一堆後端,還好當年項目搭檔的源碼我還有印象)
(見後文小結裡的HR相關文章)
二面面試官對我的評價:動手能力強,能解決問題,但所學知識雜而不精,不過學生都這樣。
HR面基本是天南海北地侃大山,家庭住址、經濟條件、寢室關係、參加過的競賽、做過的項目、職業規劃等都會關聯到……我可能在這個環節說錯話了。言多必失,不要太實誠,也不 要撒謊。
網易網易的面試體驗挺不錯。它的微信公眾號會給你叫號,前臺小姐姐也會提醒你,每一面結束後都可以找前臺小姐姐查詢面試結果。而且食堂超級好吃!還可以邊吃飯邊吸貓!面試地點在杭州研究院一樓大廳。環境舒適,就是座位有點不夠用。
一面6道基本技術問題,居中、閉包、塊級元素和行內元素等(答案略)
某個項目的頁面布局方式,緩存的設計和優化方式(本地存儲和協議相關的)
ajax 的原生寫法(創建 XHR 對象, open() , setRequestHeader() , send() , onreadystatechange )
vue-router 的原理( hash , HTML5 新增的 pushState )
//open()接受3個參數:請求類型、 URL 和是否異步的布爾值
//GET方式通常這樣發:
xhr.open("get", "example.php?name1=value1&name2=value2", true)
//可以設定請求頭,包括自定義請求頭,比方說這樣:
xhr.setRequestHeader("MyHeader", "MyValue");
//可以這樣取得一個包含所有頭部信息的長字符串:
var myHeader = xhr.getResponseHeader("MyHeader");
var allHeaders = xhr.getAllResponseHeaders();
//POST方式有這幾個地方要改:
//請求頭要重設,數據會以key1=value1&key2=value2的方式發送到伺服器
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//獲取表單
var form = document.getElementById("user-info");
//序列化表單,發送的內容傳入send()
xhr.send(serialize(form));
//也可以這樣傳值:
var data = new FormData(form);
//再傳一點別的
data.append("name", "Nicholas")
xhr.send(data);
二面CSS 三欄布局,左右定寬,中間自適應( flex , grid 等)
Vue 雙向綁定原理(事件監聽, getter 和 setter )
Virtual DOM 和 diff 算法( DOM 樹,分層比較, key , DocumentFragment )
jQuery 鏈式調用的原理(知乎-jQuery鏈式調用)
最近碰到的技術難題,不一定是前端(我答了B站的爬蟲與反爬蟲)
關於反爬蟲,請求頭中的這兩個欄位要修改。Host :
Referer :
注意, HTTP 規範將這個頭部欄位拼寫錯了,而為保證與規範一致,也只能將錯就錯了(這個英文單詞的正確拼法應該是 referrer )。
HR面HR小姐姐似乎對我們學校挺熟悉的,但好像不是校友…… 談一談過去做過的項目、面對的難題(和UI的溝通問題,順便引出我後來自學了平面設計。
未來職業規劃(表示出你想在公司長久待下去,繼續進步就行)
具體的技術發展方向(我答的是「能支持上億用戶使用的前端架構」)
為了往這個方向發展,你所做的努力(我答的是「在看《高性能網站建設》、自學後端,順便提了一下『東北Java第一人』姜國海老師」)
(……還是照實回答吧)
實習時間(我建議把時間段說得寬鬆一些,到時候真的衝突再商量)
京東京東的面試小哥哥有點逗。因為是臨時改成電話面試,過程不太正規,題目直接用手機的攝像頭傳給我…… 初面已過,複試原本顯示待安排,後來估計是招滿人直接給我掛了。
一面列舉塊級元素和行內元素( div 等, span 等)
(非 static 的祖先元素)
(文檔)
parseInt() 和 array 的 map 方法的參數?(看紅寶書)
面試官對我的評價:基礎還可以,做項目的能力是有的,但缺乏深度,要多關注一些細節
去哪兒網距離去哪兒網筆試快一個月了,我都以為我涼了,結果在北京面騰訊的當天下午連續接到三個電話……只有一輪技術面+一輪HR面,然後就給我發了口頭offer,相當地乾脆利落……
去哪兒網好像更注重考察你對框架、工具的應用,對於基礎考得反而不多。而且還考了我 jQuery ,別的公司都不怎麼考的……
一面(各種 loader )
使用 flex 布局寫移動端布局(注意 flex-direction 要改)
jQuery 的 delegate 原理(事件冒泡與捕獲)
HR面別的不記得了……因為整個過程速度太快,來不及記憶……
搜狐我投了三份簡歷給搜狐,結果三份全被刷了……但4月18日早上搜狐面試官突然加我微信好友!於是當天晚上十點視頻面試。
一面HTML5 的語義化標籤( header , footer , main 等)
position 的取值和含義(W3Cschool-position屬性)
z-index 的蜜汁用法(這是一個「拼爹」的屬性)
CORS 跨域文件共享的請求頭(詢問允許的方法和域)
獲取頁面滾動高度( window.pageYOffset )
(見後文小結裡的HR相關文章)
百度雖然百度這幾年發展勢頭落後於AT,甚至快被京東趕上了,畢竟瘦死的駱駝比馬大,面試還是相當有難度和水準的。本人很遺憾地掛在了二面。看來只能投奔網易的懷抱了~ 百度也是在牛客網上進行遠程視頻,流程和頭條差不多。
一面解釋ES6的暫時性死區( let 和 var 的區別)
高階函數(呃……我真不太清楚這是啥,聽起來挺像閉包的)
求N的階乘末尾有多少個0,在線碼代碼或講思路(求因數,統計2、5、10的個數)
給一個小於一百萬的數,求和它最接近的 Fibo 數(我的思路是簡單地求數列然後求差,面試官說 Fibo 數超過34個以後就超過一百萬,可以把34個數都求出來然後研究狀態轉換……)
一面面試官給我的評價:「基礎紮實,邏輯還可以,但代碼風格不太好(ES5和ES6混用,封裝不好),未來發展方向不明確。可以進入第二輪面試。」
二面二面面試官說話不太清晰且聲音太小,對面環境也比較嘈雜(好像也在面試?),這點不如頭條。頭條是在獨立的小隔間裡。
CSS布局( Grid 和 flex 都考且考察細緻)
JSON 對象的深度克隆(遍歷遞歸,或者序列化和反序列化)
簡述動畫寫法( setTimeout , requestAnimationFrame , CSS3 ……)
Node 的多線程,高並發,安全(我都不會……問後端大佬吧)
(沒聽說過,不會……)
服務端渲染,計算首屏和白屏時間(不太會……首屏白屏
伺服器如何強制更新後的文件替代客戶端緩存的文件(不太會……好像和MD5有關?
)
還有很多不太記得了,反正我都不會…………
二面面試官給我的評價:「二面failed。學習能力不錯,反應快,知識的廣度有,但缺乏深度,不夠系統。建議研讀V8引擎源碼,Node源碼,花半年時間。」原來我已經進步到可以看源碼的程度啦?雖然掛了,但聽面試官這麼說還有點開心~
小結
看到這裡,相信讀者也已經感覺到,許多面試題是有套路和重點難點的。我分享幾篇總結這些套路的文章。
都是前輩們留下的寶貴經驗,值得好好吸收。
我的找實習的總結就寫到這裡,感謝大家閱讀。祝願大家能找到滿意的實習。