面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

寫這篇文章之前,我推薦下自己創的一個交流裙,每天群內直播分享課!我是一名從事了5年C++開發的全棧工程師,目前在做線上教育講師,年初整理了一份最適合2018年學習的C++乾貨,有想要學習C++的同學,關注小編頭條號,私信【學習】即可免費領取本文一整套系統的C++學習教程!

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

前言

相信不少的程序員都有過類似的困惑:如果我沒有大型的項目經歷,也不能靠技術征服面試官,那我要怎麼才能給面試官留下一個好印象呢?

按照本人的面試經驗來說,面試主要看幾點:項目經驗+基本技術+個人潛力

關於項目經驗

我認為方騰飛老師講的一段話非常好:

介紹產品時面試官會考察應聘者的溝通能力和思考能力,我們大部分情況都是做產品的一個功能或一個模塊,但是即使是這樣,自己有沒有把整個系統架構或產品搞清楚,並能介紹清楚,為什麼做這個系統?這個系統的價值是什麼?這個系統有哪些功能?優缺點有哪些?如果讓你重新設計這個系統你會如何設計?

我覺得這就已經足以概括了。也許你僅僅工作一年,也許你做的是項目中微不足道的模塊,當然這些一定是你的劣勢且無法改變,但是如何彌補這個劣勢,從方老師的話中我總結幾點:

明確你的項目到底是做什麼的,有哪些功能

明確你的項目的整體架構,在面試的時候能夠清楚地畫給面試官看並且清楚地指出從哪裡調用到哪裡、使用什麼方式調用

明確你的模塊在整個項目中所處的位置及作用

明確你的模塊用到了哪些技術,更好一些的可以再瞭解一下整個項目用到了哪些技術

在你無法改變自己的工作年限、自己的不那麼有說服力的項目經驗的情況下(這一定是扣分項),可以通過這種方式來一定程度上地彌補並且增進面試官對你的好感度。

補充一點,在面試中聊你的項目的時候,有一個問題90%是繞不過的:談一下你在項目中解決過的比較複雜的問題。這需要在工作中不斷去發現和探索,不需要多,在你自己目前的項目中只要你找到一兩個能說的問題就行。

一個小技巧是,即使問題不是你解決的而是別人解決的,但是你把這個問題弄懂、搞透了,在面試的時候你一樣可以把這個問題當作是你自己解決的來說----畢竟,誰來管這個問題當時到底是不是你解決的呢?

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

安徽黃山:秋霧籠罩奇墅湖 宛若水墨丹青

關於基本技術

說完了項目經驗,接下來說一說1-3年的C++程序員應該具備的技術能力,這些能力你掌握的越多,給面試官的感覺和最終拿到的薪資也就越高。

1、基本語法

這包括static、final、I/O流、this 指針用法作用,foreach循環的原理等等。今天面試我問你static關鍵字有哪些作用,如果你答出static修飾變量、修飾方法我會認為你合格,答出靜態塊,我會認為你不錯,答出靜態內部類我會認為你很好,答出靜態導包我會對你很滿意,因為能看出你非常熱衷研究技術。

最深入的一次,記得面試官直接問到了我volatile關鍵字的底層實現原理(順便插一句,面試和被面試本身就是相對的,面試官能問這個問題同時也讓面試者感覺到面試官也是一個喜愛研究技術的人,增加了面試者對公司的好感,我最終選擇的就是問了這個問題的公司),不要覺得這太吹毛求疵了----越簡單的問題越能看出一個人的水平,別人對你技術的考量絕大多數都是以深度優先、廣度次之為標準的,切記。

2、集合

非常重要,也是必問的內容。基本上就是List、Map、Set,問的是各種實現類的底層實現原理!

3、設計模式

本來以為蠻重要的一塊內容,結果只在阿里巴巴B2B事業部面試的時候被問了一次,當時問的是裝飾器模式。

當然咱們不能這麼功利,為了面試而學習,設計模式在工作中還是非常重要、非常有用的,23種設計模式中重點研究常用的十來種就可以了,面試中關於設計模式的問答主要是三個方向:

你的項目中用到了哪些設計模式,如何使用

知道常用設計模式的優缺點

能畫出常用設計模式的UML圖

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

“中國水墨丹青式的運河夜景圖”元宵節之夜全線亮燈

4、多線程

這也是必問的一塊了。因為三年工作經驗,所以基本上不會再問你怎麼實現多線程了,會問得深入一些比如說Thread和Runnable的區別和聯繫、多次start一個線程會怎麼樣、線程有哪些狀態。當然這只是最基本的,出乎意料地,幾次面試幾乎都被同時問到了一個問題,問法不盡相同,總結起來是這麼一個意思:

假如有Thread1、Thread2、Thread3、Thread4四條線程分別統計C、D、E、F四個盤的大小,所有線程都統計完畢交給Thread5線程去做彙總,應當如何實現?

聰明的網友們對這個問題是否有答案呢?不難,java.util.concurrent下就有現成的類可以使用。

另外,線程池也是比較常問的一塊,常用的線程池有幾種?這幾種線程池之間有什麼區別和聯繫?線程池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的線程池比較合適。

最後,雖然這次面試問得不多,但是多線程同步、鎖這塊也是重點。synchronized和ReentrantLock的區別、synchronized鎖普通方法和鎖靜態方法、死鎖的原理及排查方法等等。

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

在蔥蘢的竹海掩映中,粉牆黛瓦的徽州古民居點綴於廣闊的油菜花叢中,爭相輝映,如同一幅花黃柳綠的水墨丹青

5、IO

IO分為File IO和Socket IO,File IO基本上是不會問的,問也問不出什麼來,平時會用就好了,另外記得File IO都是阻塞IO。

Socket IO是比較重要的一塊,要搞懂的是阻塞/非阻塞的區別、同步/異步的區別,藉此理解阻塞IO、非阻塞IO、多路複用IO、異步IO這四種IO模型,Socket IO如何和這四種模型相關聯。這是基本一些的,深入一些的話,就會問NIO的原理、NIO屬於哪種IO模型、NIO的三大組成等等,這有些難,當時我也是研究了很久才搞懂NIO。提一句,NIO並不是嚴格意義上的非阻塞IO而應該屬於多路複用IO,面試回答的時候要注意這個細節,講到NIO會阻塞在Selector的select方法上會增加面試官對你的好感。

如果用過Netty,可能會問一些Netty的東西,畢竟這個框架基本屬於當前最好的NIO框架了(Mina其實也不錯,不過總體來說還是比不上Netty的),大多數互聯網公司也都在用Netty。

6、框架

老生常談,面試必問的東西。一般來說會問你一下你們項目中使用的框架,然後給你一些場景問你用框架怎麼做,比如我想要在Spring初始化bean的時候做一些事情該怎麼做、想要在bean銷燬的時候做一些事情該怎麼做、MyBatis中$和#的區別等等,這些都比較實際了,平時積累得好、有多學習框架的使用細節自然都不成問題。

如果上面你的問題答得好,面試官往往會深入地問一些框架的實現原理。問得最多的就是Spring AOP的實現原理,當然這個很簡單啦,兩句話就搞定的的事兒,即使你不會準備一下就好了。

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

塵世的聲音太喧囂,靜下來,聽聽自己的內心的聲音,一杯清盞,放不下那些紛杳而至的慾望,素色清寂

7、數據庫

數據庫十有八九也都會問到。一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是數據庫性能的優化,如果對於數據庫的性能優化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容準備一下。

不過數據庫倒是不用擔心,一家公司往往有很多部門,如果你對數據庫不熟悉而基本技術又非常好,九成都是會要你的,估計會先把你放到對數據庫使用不是要求非常高的部門鍛鍊一下。

8、數據結構和算法分析

數據結構和算法分析,對於一名程序員來說,會比不會好而且在工作中絕對能派上用場。數組、鏈表是基礎,棧和隊列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不瞭解它們的具體實現,但是要知道什麼是二叉查找樹、什麼是平衡樹,AVL樹和紅黑樹的區別。

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!

攝於楊家埠大觀園

關於個人潛力

關於這一點我覺得是應該是貫穿於整個面試過程的。如果你能做到如下幾點,相信會在面試官心裡留下一個好印象。

面試時能夠保持良好、平穩的心態。條理清晰地回答面試官的問題,同時體現自己有較濃的技術興趣。

整個面試過程態度積極向上,不要有任何悲觀消極的態度(尤其在談到以前公司情況的時候,即使有再多的不滿),就不會有問題。

關於HR面,不能輕視。很多公司HR對面試者都有一票否決權。因此碰到一些難處理的問題一定要慎重回答,四個字:滴水不漏。

不是所有的程序員都是大牛,都能靠技術征服面試官。大部分程序員沒有太好的項目經驗、技術也不是特別突出,不必妄自菲薄,因為還有很多人和你一樣。

重要的是:怎麼在和你差不多的程序員中脫穎而出?

我相信,只要你在面試過程中體現出對技術的熱情、積極向上的態度、不卑不亢的風貌就能給面試官留下一個良好的印象,而當你具備了這些特質時,那你已經變成準大牛了。

試問,還有哪家求賢若渴的公司會因為一些表面的問題刁難你呢?還有哪個公司會拒絕你成為儲備人才呢?

結語

想起一句話——人不需要被教訓,但需要被提醒!獻給正在程序員修煉路上奮力前行的你們!共勉!

面試就是程序員與HR的戰爭!做好以下幾點汝將凱旋歸來!


分享到:


相關文章: