三月真是一個忙碌的季節,剛剛開學就需要准備各種面試和筆試(鄙視)。幸運的是,在長達一個月的面試內推季之后,終於同時拿到了阿里和騰訊的offer,還是挺開心的。突而想起久未更新的博客,就冒昧學一學各路大神,分享面試過程中的經驗總結。總的來說,本人並不是什么超級大牛,文章更多的是經歷敘述,大神可自行繞道。
經驗很重要
簡單亂入一下,本人主修軟件工程專業,對Web有着濃厚興趣,主攻Web前端。
就在三月份剛開始的時候,各種群里面就有師兄說,誰要內推,趕緊發郵件。好在牛人師兄多,一開始就投了天貓、淘寶。騰訊SNG和騰訊微信四份內推簡歷。
接到的第一個面試是天貓的,在完全沒有准備的情況下,就開始了長達一個多小時的電話面試。第一次難免是緊張的,在面試的一個多小時里面,多次處於顫抖狀態。這里所說的顫抖是真的,原因很簡單,對於這一次面試沒有任何准備,加上這個面試足夠有分量。掛了電話的時候,第一反應就是不斷回想剛剛面試的問題以及自己回答是否正確。於是就不斷回想剛剛面試官說過的什么JavaScript事件委托、HTTP狀態碼、前端模塊化怎么實現...
和預想中的一樣,第一次面完之后,然后就沒有然后了。然而還沒來得及失落,以及做足后續准備,騰訊的SNG電話面試就來了,問的問題很少,讓你介紹一下自己的項目,為了幾個常規問題(文章末尾附上所有面試題目),然后就讓你開QQ,遠程看你寫代碼..(從沒想過QQ居然是面試工具)。不幸的是,寫代碼不給查資料,所以寫的時候遇到一個閉包問題,卡了好長時間。這一次的面試長達一個半小時左右,然后就進入了漫長的等待。這一次情況不同的是,我有面試官的QQ啊!於是幾天之后,我問面試官,為什么我被刷了?面試官給的理由是,你有前端模塊化的思想,思路清晰,很不錯,但是你寫代碼卡的時間比較長,必須有個刷人標准..
於是乎,在沒有經驗的情況下,前兩輪面試就這樣光榮掛彩了。
面試不是你問我答
在屢屢受挫之后,我開始反思面試的流程:自我介紹->項目經歷-> 技術問題 -> 我有何問題。我發現在除了項目經歷之后,其他環節都不是問題,畢竟我有着兩年的積淀,基礎還是很扎實的。
於是我去請教一些師兄,面試應該要注意什么。起初問了微信的兩位大牛師兄,結果甚是驚訝。簡單總結就是,在講項目的時候,你需要展示你自己的亮點,可以說一些裝逼的詞,但裝逼也是得有真材實料的。比如我在項目中使用了WebSocket,那么面試官很可能問你WebSocket是什么,底層原理你知道么?如果你當場傻掉,面試官就會覺得你只是會使用別人的東西,並不在意實現原理,終究是碼農。那么事先你就應當去看看WebSocket協議的官方文檔(純英文,看得累死我了!),這樣面試官一問你,你能頭頭是道,會大大加分。再比如,你在項目中使用了模塊化,那么你就一定要知道什么是模塊化,而不是說你會用模塊化工具。其實要求並不高,你只要能很好說清楚什么是AMD規范,什么是CommonJs規范,各自的優缺點是什么就很夠了,起碼之后每次面試官問我,我都是秒回的,面試官竟無言以對,也就是對我的認同。
最后一點,也就是最重要的一點是,一定要把面試官往你熟悉的領域引導,這真的很重要,因為如果你不引導,面試官不了解你的項目,看不到你的亮點,就只能一直問技術問題刁難你,人家在大公司待這么久了,還不是輕松碾壓你。所以你在引導的同時,時不時提及一些事先准備好的關鍵詞,技術官一問,你一回答,怎么都妥了~
理論實踐
上述理論其實真的是很管用的,起碼我現在覺得自己是半無解了,因為在那之后的淘寶和微信面試中都順利通過了,也可以放棄29的騰訊線下筆試了(學渣真不會C++),哈哈。
淘寶一輪的電話是一個慵懶的中午打來的,由於三點有課,兩點的時候准備上去睡個午覺,還沒躺下呢,就接到面試官的電話,我說我准備睡午覺,他說兩點了還睡午覺...
不得不說,阿里的面試還是非常專業的,一輪的時候,花了半個小時實踐我上面說的理論,然后就狂問十幾個技術細節問題!沒有一定的技術基礎真的招架不住。面完之后個人感覺還不錯,口干舌燥上課去了。后來發現阿里的面試狀態是在他的招聘網上實時更新的(這一點阿里做的最好)。由於心里有底,看到通過淘寶一面並不是很驚訝,只能說要是這樣都不過我就認了!最難的是二面,估計是技術總監什么的,除了常規面試流程之外會一直刁難你,這個時候需要有格外良好的心里素質。像阿里巴巴這種大公司,技術牛是沒話可說的,但是我們只是一個大學生,沒有做過並發量達到他們零頭的應用,所以這一關考驗的是思考問題的能力。有些問題是你可能是真的不會的,但是也不要出現好像是、可能是、我猜之類的詞眼(我之前就是這樣跪掉的),而是說按照我的理解、給過一點思考時間、我不太懂這個問題需要我從哪個角度解析、我以前遇到類似的問題是怎樣這個問題應該也是這樣...這樣給面試官的印象是,即便你不懂,但是你在全力思考,而且這樣會給自己爭取很多時間。
微信的面試就不多說了,只能說騰訊的廣州研發中心真的很漂亮,一看就是工作的好地方!里面的設備啥的也是好的沒話說!但是還是忍不住吐槽一下,騰訊的面試做的不夠好,去到二話不說給你六道算法題,時間一個小時,然后又狂問你一個小時,一口水都沒的喝!!好在過了,不再贅述。
總結
- 機會總是留給有准備的人,每一次都要好好對待
- 當對自己的技術足夠自信的時候,拼的就是RP和面試技巧了
- 面試之前,去找找那些大牛們,他們比你都有經驗
- 平常心對待,只不過是一份工作
資源共享
個人覺得每一次面試都是一次修煉,所以每一次都需要好好總結。這一點我還是做的不錯的,我把大部分面試都記錄了下來,然后仔細分析研究,避免不會犯二次錯誤。這里附上一些面試題目和個人准備過程中的一點小筆記。然后推薦同樣面試前端的同學好好看看《JavaScript高級程序設計》和《HTTP權威指南》,管用。
最后奉上個人的簡歷,供大家參考,起碼沒有在簡歷環節被刷,哈哈。我的簡歷
袁梓民的個人簡歷
個人信息
姓名:袁梓民
性別:男
出生年月:1993年10月14日
學校專業:中山大學軟件學院
電話:13824421386
Email:1229084233@qq.com
blog:http://www.cnblogs.com/yuanzm
英語水平:CET-4
技術能力
專注並且熱愛web開發,熟練掌握JavaScript、HTMl、CSS以及JavaScript框架來搭建web應用。了解原生JavaScript和JavaScript類庫的使用。
- 掌握的JavaScript類庫:jQuery、Prototype
- 掌握的JavaScript框架:BackBone、Vuejs、Angular.js、React.js
- 掌握的CSS預編譯器:LessCss、Sass
- 掌握JavaScript模塊加載器:RequireJS、Browserify
- 掌握項目構建工具:Grunt、Gulp
- 掌握項目管理和協同工具的使用:SVN、Git
- 掌握前端測試框架以及工具:Jasmine、Mocha
- 掌握基本后端開發:NodeJS、Python
- 掌握web相關技術:MongoDB、CoffeeScript、SEO、Socket.io、Express、Tornado等
個人經歷
- 2012年進入中山大學學習
- 大一開始接觸Web
- 大二開始瘋狂投入web學習
- 大二下開始加入創業團隊,系益米通服務有限公司的微信前端工程師
- 大二暑假在廣州時代財富有限公司上班實習,參與建設銀行網上銀行前端原型開發
個人作品
米芝蓮
項目地址: http://www.wizland.cn/wizland/index/
- 簡介
- 米芝蓮是一個在線食材選購網站,同時具有移動端和PC端。項目采取了SpringMVC框架,充分利用了框架所宣傳的MVC、Restful風格、簡潔高效等特性。
- 項目收獲
- 熟悉了Eclipse環境的開發,熟悉了Java Web應用的開發流程
- 嘗試了沒有框架條件下的移動端Web開發
- 對於前端模塊化有了更加深層次的理解
- 理解了組件化開發對於前端開發的重要性
- 項目總結
- 在本項目中,我擔任了移動端和PC端的前端開發一職。在這個項目中,充分認識到了前端架構的重要性。在同時具有移動端和PC端的非響應式應用中,怎么合理把握好前端結構顯得尤為重要。既然要分成移動端和PC端,主要原因是頁面排版不同,但是很多邏輯是通用的,因此怎么利用browserify等前端模塊化工具來提高代碼復用性成為一個很重要的任務。同時,本項目中還第一次嘗試了設計,完成了移動端和PC端的大部分設計稿,認識到了作為一名前端工程師,設計能力的不可或缺性。總的來說,這個項目實戰型很強,收獲很大。
LiveChat
項目地址: https://github.com/yuanzm/Live-Chat
- 簡介
- Live-Chat應該是所做過的最復雜的一個Web應用。項目采用Node的Express框架作為后端架構,采用非關系型數據庫MongoDB實現聊天記錄持久化,采用socket.io實現具有高兼容性的實時消息傳送。
- 收獲
- 認識到項目架構的重要性
- 總結出了自己的前端模塊化工作流
- 熟悉了Nodejs應用開發流程
- 總結
- 作為聊天WebApp,決定了整個頁面是富交互的,所以如果僅僅是單純的模塊化並不能保證良好的可擴展性。於是總結出了前端組件化開發的思想:前端應該根據應用的復雜程度將前端分成三道四層,第一層為數據操作層,封裝了很多AjaxAPI,負責與后端進行數據交互;第二層為UI組件層,為了最大化提高頁面組件的復用性,頁面上的元素應該根據功能划分成很多模塊,也即HTMl和CSS同樣是模塊化的;第三層為UI組件通信層,為了降低UI組件的耦合性,組件之間的通信應該是通過事件機制的,而不是直接互相調用另一個模塊的內部函數。整個項目最大的難點是怎么降低不同組件之間的耦合性,不然在開發的過程中,一個模塊牽扯到很多模塊就會顧此失彼。
Home-Cloud
Home-Cloud是基於Python的Tornado框架構的一個移動端WebApp。Home-Cloud的開發並沒有花費很長時間,得益於之前的Web開發經驗。Tornado本身不是一個MVC框架,於是在組織后端代碼的時候借鑒了Nodejs的Express框架,將整個后端代碼架構成由model層、router層以及view層構成的的MVC結構。好處是顯而易見的,當業務邏輯愈發復雜,這種分層架構能夠保持項目代碼絲毫不會紊亂。前端得益於Tornado的模板機制,在大部分模板引擎都具有繼承等優點的情況下,多出了UI模塊這一點,使得每一個模塊可以擁有自己的html、CSS和js,能夠很好符合Web組件化開發的特點。通過這個簡單的項目,很好展現了近兩年的Web開發經驗,從剛開始的寫一步看一步到今天的工程思想,感覺收獲很大。
求組隊
項目地址:https://github.com/yuanzm/project-qiuzudui
所做的第一個項目,項目致力於創建一個在校大學生競賽組隊平台,通過這個平台,用戶可以在主頁查看到近期學校的比賽並能夠發出組隊邀請。在這個團隊里面,我與另外一名成員進行合作負責前端開發。作為第一個項目,主要問題是團隊協作以及項目工程經驗不足的問題。由於沒有很好的組織好項目結構,以及版本控制意識的缺乏,導致后期代碼結構混亂的問題頻頻出現。通過這個項目,領會了項目工程思維的重要性,以及團隊協作的重要性。
益米通
項目地址:https://github.com/yuanzm/emitong.git
第一次做手機端的Web應用,整個項目用於展示與益米通公司合作商家的優惠信息。項目遇到的主要問題是移動端Web經驗缺乏,不同設備的適配問題等。通過查閱資料以及咨詢前輩,在這個項目中掌握了Web響應式應用的開發,同時了解了微信公眾平台應用開發的基本流程。
學院黨委網站維護
項目地址:http://pro.ss.sysu.edu.cn:8080/party_affairs/index.jsp
主要任務是部署基於Java Web的網站服務器和網站的日常維護工作。
Snake
項目地址:https://github.com/yuanzm/Snake
在閑暇的時候用JavaScript寫了一個貪吃蛇小游戲
自我簡介
從大一開始了解web技術,大二開始正式投入學習web各種技術。正處於快速增長技能的階段,對於web有着極高的熱情,每天堅持學習web。
目前為止對於前端技術比較了解,但是正在學習web后端技術,目標是成為一名優秀的web全端工程師。
擁有較強的學習能力和溝通能力,能夠比較良好的和團隊成員協同完成開發。












