俗話說,對於程序員來說,每一年都應該出去面試一下,看看本身的技術能力在外面處於什麼水平。程序員在一個公司一個環境一個業務幹得過久,很容易喪失學習的動力,得到的僅僅是重新手到熟手。固然,我相信在各行各業均是如此。可是,剛好,計算機的技術層出不窮,每一年都有新的框架新的技術出現,甚至會要求程序員在一個項目中馬上上馬一個全新的技術。git
《劍指Offer》這本書的做者來自於微軟,書中第1章主要介紹面試的常見流程,以及在簡歷的準備以及面試過程當中的一些軟技能。後面6個章節則介紹了面試時所具有的一些硬技能,也就是專業知識的掌握程度,以及編碼動手能力,解決問題時的一些思路等等。程序員
【好書推薦】是我一直以來想增設的一個主題,但因爲自己工做經歷的緣由,看完一本書和對一本書進行歸納總結以及思考的能力還有待進步,便一直擱淺遲遲沒有展開。因此我嘗試用一種另外一種方式來開展這個主題,邊讀邊寫,更但願讀者能和我一塊兒讀這本書交流這本書。github
《劍指Offer》這本書,我打算用兩個大的主題:1、結合書中做者的經驗聊聊面試中的一些軟技能;2、逐一經過Java編寫書中說起到的編程面試題,並在題中給出幾種不一樣的解法和思路過程。web
本文先談談第一個主題——面試軟技能。面試
面試的第一步是寫簡歷,簡歷如何寫確實是個學問,一味的想去填滿美化本身的簡歷,把不應寫的寫在了簡歷上反而得不償失,把本身應該大寫特寫的部分一筆帶過也是一種重大失誤。我第一次跳槽的簡歷不徹底統計我改了8個版本。ajax
這是我存儲在Onedrive上的簡歷版本,經過修改時間能看到,從初版到第八版經歷了6個月。spring
簡歷是面試的第0步,千萬不能隨意對待,固然若是你的背景強大,學歷背景、哪一個大廠的背景或者是職位背景,那可能只須要和boss喝兩杯咖啡就能拿到offer。言歸正傳,咱們先來看看《劍指Offer》的做者是如何建議咱們書寫簡歷的。編程
項目經驗緩存
做者建議面試者在簡歷中按照STAR法則描述項目經驗。websocket
Situation:簡短的項目背景。
Task:本身的任務。
Action:爲完成任務本身作了哪些工做,是怎麼作的。
Result:本身的貢獻。
不少人不知道如何描述本身的項目經驗,很多人一般會這麼寫:該項目是用於XX的後臺管理系統,使用了SSM框架,採用了MVC結構,應用了XX技術等,我負責了XX模塊、XX模塊的開發。而後就不知道該怎麼寫下去了,以爲這個後臺系統沒什麼可寫的,草草地描述。這個描述對於面試管來講基本沒有什麼信息,這樣的簡歷頗有可能面試的機會都沒有。做者在書中結合STAR法則描述了本身在微軟Winforms項目組的經歷。咱們來經過STAR法則來看看如何描述本身作了一個看起來沒有什麼技術含量的後臺管理系統。
該項目是XX的後臺管理系統(Situation)。本人的工做是獨立開發了XX模塊、XX模塊(Task)。在作XX模塊時,發如今和前臺交互過程須要寫大量的分頁代碼,因而本人經過查閱資料將mybatis的分頁插件pagehelper引入到了系統中,解決了分頁代碼重複編寫且比較容易出錯的問題。另外在作XX模塊時,由於要實時獲取後臺數據,而且數據有變化時須要將數據推送到前臺,並無採用輪訓ajax的方式獲取,而是引入了websocket(Action)。在這個系統的開發過程當中,一直保持較低的bug率,一共完成了XX個功能模塊,佔整個系統X%,在性能提高方面分析業務,將一些同步任務改成了線程池異步的方式大大提升了性能(Result)。
專業技能
這一塊在簡歷中也是比較重要的部分,做者解釋了「瞭解」、「熟悉」、「精通」的區別。
「瞭解」指對某項技術只是上過課或者看過書,但沒有作過實際的項目。
「熟悉」指若是在實際項目中使用某項技術已經有較長時間,經過查閱相關的文檔能夠獨立解決大部分問題。
「精通」對一項技術駕輕就熟,當有其餘人向你請教這個問題時,有信心也有能力去解決。
對於咱們簡歷關於專業技能的描述應該大部分是「熟悉」,敢把精通往簡歷上寫的,那是真正的勇士。瞭解能夠分狀況來討論,按做者的觀點,若是你去一家作圖形圖像的公司面試,在此以前你沒作過圖形圖像相關的項目,只是大學上過這麼課程或者業餘時間看過書,那麼能夠寫了解圖形圖像,但若是你去一家電商企業面試此時你寫了解圖形圖像就沒什麼意義。
對於不少人來說,簡歷最大的問題是沒什麼可寫的,「我作的大部分都是一些後臺管理系統,涉及到的技術就只有spring、mybatis這些,什麼Redis、ElasticSearch、ZooKeeper根本就用不上這怎麼辦」。若是你真的是這種狀況,那個人建議只能是,再等等跳槽吧。那又有人說,我本身學,沒有作過項目,那不也是瞭解某項技術了嗎?那得看你怎麼學。若是你學Redis只是跑起來,寫了個Main方法set和get了一下就認爲本身已經學了沒什麼好學的了;若是學ElasticSearch、ZooKeeper一樣也是跑了起來,就認爲已經學好了。那這和精通八種編程語言打印「helloword」有什麼區別呢?
毛主席說,沒有條件創造條件。咱們說,沒有項目創造項目。Redis不只僅是個緩存,你能夠用它作分佈式鎖,能夠用它作註冊中心,能夠用它作配置管理,找一找github上關於Redis的項目,不妨從新造個輪子;ZooKeeper不妨也作個後臺管理,不妨也作一個配置中心,這些作完不也是完成項目熟悉了嗎?面試的時候,實話實話本身的項目大部分是後臺管理,對於Redis、ZooKeeper是本身業餘學習的,本身也寫了幾個相關的項目,面試官大多會理解你的,甚至以爲你是一個不可多得的人才,沒有作過相關項目經驗不足是由於客觀因素,但主觀來說你是一個很是熱愛技術熱愛學習的人才,這幾乎成爲了你的加分項。
3. 其餘
簡歷上的就只剩下其餘我的信息了,姓名、聯繫方式、畢業院校等等。
簡歷是面試之路的第0步,作完這步就是投遞簡歷靜等翻牌。假設如今有公司翻牌,此時就正式進入面試流程。
書中提到了面試常見的三個流程「電話面試->共享桌面遠程面試->現場面試」。「共享桌面遠程面試」我相信大部分沒有經歷過,我本身也沒有經歷過,因此咱們跳過這個過程。
1.電話面試
這個流程也並非全部的公司都會有,也並非大廠纔會有。電話面試最關鍵的就是,找一個信號佳且比較隱蔽的地方。我曾在樓梯間接一個公司的電話面試,不料撞上了leader,場面一度很是尷尬。我電話面試有一個習慣,會作電話錄音。目前大多數安卓手機都有電話錄音的功能,主要是爲了本身在電話面試後能對本身的面試狀況作一個覆盤,哪些知識點沒有作好,是由於沒掌握仍是說話技巧的問題等等。
2.現場面試
書中做者說的很詳細,談到了面試公司的距離提早規劃路線,當天的着裝,以及注意面試邀約中的細節,包括提早準備幾個須要向面試官提問的問題。
面試過程當中做者介紹得很是詳細,從須要掌握的基礎知識到面試考察解決問題的思路等等。
在最後一個「向面試官提問的問題」時,有幾個問題儘可能不要出現:詢問面試官的面試狀況,詢問薪水情況,而是儘可能詢問和麪試崗位相關的問題。例如:這個崗位和XX業務相關,公司是否會有相關的培訓等等。回想我之前的面試,在最後向面試官提問時,我認爲,這是一個很好的機會,面試官是優秀的人,他經驗比較豐富,這是一個很好的交流機會,因此我一般會向面試官詢問針對本身的狀況對本身將來的發展有什麼意見或者建議等等,有的面試官真的會很耐心分析你的狀況給你作一個分析和解答,這的確是一個不可多得的機會。固然你若是實在想不出問題,不問也比亂問好。
書中的第一章節,做者主要是談到面試前以及面試的流程性問題,不要犯非技術性問題,低級錯誤,更多在於軟技能。本文關於《劍指Offer》的第一部分也介紹到這裏,後面部分,我也會將面試的硬技能分享給你們,也但願你們關注公衆號(CoderBuff)和我一塊兒閱讀這本書。
這是一個能給程序員加buff的公衆號 (CoderBuff)