本文首發於公衆號【why技術】,關注文末公衆號閱讀體驗更佳。
這是我的第7篇原創文章java
上週,我面試了15位2020年畢業的計算機相關專業的研究生,他們都是來自四川地區98五、211高校,校名如雷貫耳。面試
由於我有參與到設計校招題的工做中。因此我是技術一面的面試官之一。編程
這篇文章我原本想面試完後就能夠立刻輸出,可是面試結束後,我有了不少思考。數組
這篇文章很差寫,可是我是一個"獨立的自由撰稿人",因此我仍是想談談個人感覺。僅僅表明我我的觀點。緩存
正如以前的文章《普通二本,畢業三年,北漂以後,我是怎麼成爲程序猿的》說的。安全
我是一個本科生,我讀的大學是一個普通二本,我報考的那一年,學校剛剛從專科院校升級爲二本院校。因此我是學校的第一屆本科生。網絡
可能由於是第一屆本科生,在校招的時候,來咱們學校招人的科技公司一隻手都能數過來。並且,每一家公司我都沒有聽過。我沒有去,因此我沒有經歷過校招。多線程
可是我經歷過招聘會,相似於人才市場,當時的場景是這樣的:
併發
你覺得這是我在網上找的圖?框架
不是的,這是2014年11月16日,我去參加《2014年成都冬季特大型人才招聘會暨高校畢業生供需洽談會》,我拍的。
這我的才招聘會,展廳很是的大,裏面有不少的崗位,龍蛇混雜,其中不乏計算機行業相關的工做。好比下面這個來自2014年的招聘:
當年的我絲絕不以爲這個招聘有任何的問題,甚至還挺想去。可是我如今再讀一次後發現:這TM不就是培訓機構嗎?!整的還挺委婉啊!
你在網上海投簡歷,競爭可能更大,可是人才市場給你帶來的視覺衝擊,是直觀且絕望的。
咱們這個專業,畢業後,大方向分爲了五類人:
除了少部分的第二類人,他們在畢業以前就已經找好了工做。大多數人,包括我,是畢業以後纔去找的工做,那時候,咱們身上的標籤是這樣的
每個標籤都很難找工做,當它們都指向同一我的的時候,就真的很難找工做。
因此就有人四處碰壁,無奈之下報名了培訓班,幾個月後包裝簡歷,進入職場。也有人就此告別了這個行業,另謀生路。
而我問了我身邊的研究生朋友。
他們畢業以前的一年有兩次找工做的機會,秋招和春招。其中最好的時機是秋招,不少的叫得上名的科技公司你不須要專門去找他們,他們會去學校開專場招聘會。而後通過一次網絡或者現場篩選,若是過了,就能進入到接下來的面試環節。大多數時候面臨的問題是:
而後秋招或者春招結束後,就去各大論壇發帖,發出幸福的疑問:
寫到這裏,我想表達的一個觀點就呼之欲出了。
啥?你說研究生多讀了三年書還不如三年的工做經驗?
若是你是通常大學的研究生,我理解你這樣說。
可是,若是你是排名靠前的一流院校的研究生,你還這樣說,我多是要打你了哦。
假設你工做了三年,勤勤懇懇,熱愛學習。終於鼓起勇氣向大公司投了簡歷,結果有可能由於學歷的問題直接被HR刷掉簡歷,若是有幸進入面試環節,一輪又一輪的技術面試反覆轟炸你,並且面試有難度也有深度,面試你的目的是看你這我的是否是加入公司就立刻能投入工做,輸出價值。這就是徹底靠實力加一點點運氣的時候。
固然,你說你身邊有人就譜寫了一個十分漂亮的絕地反擊的故事呀。這樣的故事有,可是更多的是你沒有聽到的"名落孫山"。
假設你是一個校招研究生,面試時候考察的方面是不同的,面試你的目的是看你這我的是否是能夠加以培養,做爲公司的儲備力量,因此最後進入公司的概率大了不少。
我沒考過研,因此我沒有話語權說應該怎麼去考研。
可是我建議有能力的話能夠考研。
多的不能再說了,放一張圖吧。僅供參考。
可是很不幸,你可能和我同樣,沒有機會考研了,和同事之間有一道不可逾越的學歷帶來的鴻溝。那麼你只有拼命的學習,瘋狂的汲取知識,對技術保持求真的敬畏之心,學歷幹不過別人已成定局,可是你技術牛逼,那就能讓鴻溝變窄。
如今學習的渠道這麼多,知識全在網上,觸手可及。
就看你願不肯意把本身的手,從追劇、遊戲、綜藝、發呆中抽出來。畢竟一我的最多隻有2隻手。
好了,到這裏,以上表達的全是我的觀點,帶有強烈的我的主觀色彩,你以爲有道理,那謝謝你。你以爲我在扯淡,也請不要攻擊我。
關於面試,有人表現的很優秀,他們都優秀的比較一致。但也有人表現的很通常,他們的通常是千姿百態的。因此我想聊聊那些表現很通常的人。
我在北京的時候,也當過一面面試官。當時咱們小組在發展中,有幾個空缺的職位。要求是3年以上工做經驗。
我先後大概面試了有50多人吧。
其中有工做經驗長達9年的從業者,也有剛剛結束培訓的培訓生。再加上此次的應屆生校招面試。
我想分享一下我遇到的這三類人中表現通常的人,所帶給個人思考。
對於那個工做了9年的面試者,我印象很深入,由於最開始拿到簡歷的時候,我一摸:"這簡歷,好厚啊!"再一看,工做9年。
因而我去找了個人領導,我說:"這人我應該無法面試,我工做經驗都才3年,這哥們是個人3倍啊。咋面?"
領導說:"沒事,你先去聊聊,怕什麼,就當是技術交流,別當成面試。"
面試的過程當中咱們聊的技術問題,他都沒有回答的很好,他的技能就像一塊大平板,一眼望去,什麼都會一點,可是稍微一深刻探討,就兩眼一抹黑了。
面試的最後,我直接給他說:"在整個面試的過程當中,其實你有些問題回答的是不太好的,可能今天咱們的面試就到這裏了,可是我還想請問你一個問題,你能夠不回答。你工做了9年了,應該有不少行業內的朋友呀,爲何沒有內推呢?並且你的技術能力和你的工做年限有點不太匹配。"
他回答了我,大概的意思是這樣的:
聽了以後,我說:
後來,我把他送到公司門口,他已經走出去了,又轉過身來和我握了一下手,他握的很用力,說:"謝謝!"
我在面試結果描述那一欄寫的是:
面試結束以後,我把面試結果反饋給個人領導,領導看到我寫的評語,意味深長的一笑,對我說:"和我預想的同樣,年齡大,工做年限長,可是技術通常"。
以後,他用力握我手的場景有時候會情不自禁的在我腦海裏面浮現。
彷彿在鞭策我:前車可鑑,要警戒啊。
對於培訓生,無論你是由於熱愛編程仍是追求高薪而進入這個行業,我理解大家。面試時你也不須要特別的謙卑,技術面前人人平等。
有一部分培訓生包裝簡歷是爲了過簡歷篩選關,由於有可能HR不懂技術,因此我很是理解,不包裝簡歷,就沒有面試機會,這樣對於那些真正學到的知識的人就很不公平。
面試的時候我遇到他們,我都一視同仁,只要你學到了真本事,我聊了以後以爲還行,能達到咱們的用人標準,均可以進入下一輪面試。
經過參加培訓進入行業,我以爲沒有問題。甚至你有真才實學,爲了面試機會而包裝簡歷,只要最後你坦誠相待,我也以爲沒有問題。可是你包裝了簡歷,本身又沒有真材實料,態度還不端正,這就是有問題的了。固然屬於培訓中的一小波人,可是這一小波人的表現打上的標籤,也會影響到另外的一下波人。
我身邊就有幾個經過培訓進入行業的朋友,他們本身也很是刻苦努力,有熱情,如今工做也還挺不錯的。
可是我面試的時候遇到過一個培訓生,說真的,就他包裝的那個簡歷,不少技術沒有實際操練過,真的經不住幾個連環問的,幾問以後,就原型畢露了。沒有真才實學,指望工資還要的賊高。
你騙過了HR,你還要把技術面試官一塊兒騙過去?都到技術面試了,一輪又一輪,你還能騙過去?
那你別幹程序猿了,你去當演員吧。
因此,先把態度放端正了,咱們再好好的聊技術吧。
你問我什麼叫態度不端正?
你就參加了幾個月的培訓,找工做的時候聽周圍的人傳說:"誰誰誰,今天拿了一個15k的offer。三個月前,剛來的時候連開發環境都是我幫他配置的呢!"而後你就感受本身牛逼的不行了,甚至以爲15k是否是有點低了呀。
因此你面試的時候技術問題回答的通常般,沒有什麼亮點,可是一問指望工資,張口就是:"不低於18k吧!"。
這叫作態度不端正,而我還真的碰見過。
我當時告訴他:讓唐僧成爲唐僧的是那一坨經書嗎?不是的,是取經的路啊。15K就至關於別人的經書,你別隻盯着別人的經書看,你看看他在這一路上的八十一難。你經歷了嗎?
下面這圖,當段子能夠,別當真。
上週來面試全是2020年畢業的研究生。我面試的15個,大多數都十分優秀。
可是我想聊的是那些表現通常的人。
因爲他們都來自名校,因此我怕問的一些問題沒有cue到他們的點,不合他們的胃口(社招面試的時候我纔不會這麼想),在進行了幾個常規基礎面試題預熱後,我每個面試者都問:"請問你以爲你對Java哪一塊比較熟悉?基礎、框架、中間件的都行,咱們能夠聊聊。"
很奇怪,大部分都說本身對Java集合這塊比較熟悉。多是集合這塊的面試題不少,你們都看過相關的視頻或者文章。
基礎不牢,地動山搖 --- 集合
有一個面試者也說他熟悉集合,我問他:
在當咱們對HashMap初始化時沒有設置初始化容量,系統會默認建立一個容量爲16的大小的集合。當HashMap的容量值超過了臨界值(默認16*0.75=12)時,HashMap將會從新擴容到下一個2的指數冪(16->32)。HashMap擴容將要進行resize的操做,頻繁resize,會致使下降性能。
HashMap是線程不安全的,它的不安全就體如今resize的時候,多線程的狀況下,可能會造成環形鏈表,致使下一次讀取的時候可能會出現死循環。
然而他說:"這個我不太清楚,我用的時候沒有指定過大小,可是我知道默認大小是16。"
當他這樣回答的時候,我大概就判斷他可能只是看過幾個集合相關的面試題,並無進行過深刻的研究,遠達不到熟悉的標準。
我準備引導他,看看他本身經過幾個題,能不能聯繫起來,而後回答這個問題,因此我接着問:
1.添加元素的時候會檢查容器當前元素個數。當HashMap的容量值超過了臨界值(默認16*0.75=12)時擴容。
2.HashMap將會從新擴容到下一個2的指數冪(16->32)。
3.調用resize方法,定義長度爲新長度(32)的數組,而後對原數組數據進行再Hash。這個過程是一個性能損耗點。
由於會帶來問題,因此咱們就儘可能減小擴容。
爲了減小擴容,在咱們已經知道集合具體多大,或者有個預估值的狀況下
就設置一個初始化大小就行了。
結果他說:"當集合大小大於默認大小16的時候,會擴容,擴容的大小是原來的1.5倍。具體這麼擴容的我不太清楚,我記得好像是會新建一個集合,把原集合拷貝過去"。(注意這是個錯誤回答!!!)
當他說完以後,氣氛忽然尷尬了起來。很明顯,他把ArrayList和HashMap的擴容記錯了,基礎不牢的表現。
當時我心裏就有一個大大的問號:你不是說你熟悉集合嗎?
基礎不牢,地動山搖 --- 線程
多線程編程,這是基礎且關鍵的技術吧?
由於是應屆生,在學校裏面學了各類各樣的語言。因此面試的時候我會問面試者:你的主要開發語言是什麼?
只要面試者說,他的主要開發語言是java。那我就會問線程池:
大多數面試者,在我問到有哪些默認實現的時候,他們就能自動的把下面的問題都回答的差很少。
可是有幾個面試者,他們的回答是:僅僅是用過默認實現,具體內部細節沒有了解。
那我就會以爲,額,怎麼說呢,這感受很差說,你本身的體會吧。
我問的另一個關於線程池的問題,我面試的15位,沒有一位回答正確,可是我都告訴他們:不要緊的,這個回答不上來的話,不減分,下去能夠了解一下。
我問的是:
以前寫過一篇文章《有的線程它死了,因而它變成一道面試題》,進行了比較詳細的回答,能夠了解一下。
而後,關於線程這塊,我還會問一個題,這題是咱們的宣講會的初選題,他們都作過:
大多數面試者,看了十幾秒就說選C,而且告訴我理由。
有個面試者他看了一分鐘,思考的很認真的樣子,而後說他選擇D選項,由於選項內容說反了。
我說,你肯定嗎?
他說:我很肯定。
我說:下去以後再瞭解一下吧。
有的面試者看了一分多鐘後,沒給出答案,因爲面試時間寶貴,我就說:這樣吧,這題選C。你告訴我C爲何錯了呢?
這個時候,大多數面試者都會給出一個正確的答案:
只有針對此對象調用notify()方法或者notifyAll()方法後本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態。
注意是準備獲取對象鎖進入運行狀態,而不是當即得到。
再看一下《Java併發編程的藝術》裏面是怎麼說的,有這樣一段話:
可是有的面試者,對於C爲何錯了,仍是給不出詳細分析。
這裏反映出了兩個問題:
概念模糊,似是而非
另一個面試者回答說他對Redis瞭解的比較多一點,項目裏面用過。
我問了他:"Redis你是拿來作緩存嗎?有沒有考慮過緩存擊穿、緩存穿透、緩存雪崩的狀況呢?"。
這裏我就不做答了,我以前寫過一篇文章《當週杰倫把QQ音樂幹翻的時候,做爲程序猿我看到了什麼?》介紹過,不瞭解的朋友能夠去看看。
他說:"Redis在個人這個項目裏面,就是拿來作緩存的。你剛剛說的那幾個概念,我有據說過。可是咱們的項目還沒遇到這樣的問題。"。
我說:"明白,沒有關係,你給我介紹一下相關概念和對應的解決方案吧"。
他說:"這個不太清楚。"
好的,我想多是關於Redis的理論知識比較強吧。我接着問:"那你給我介紹一下Redis的兩種持久化策略唄?"
他卻是說了一些上來,可是整個回答聽起來,概念模糊,似是而非。須要我主動去找他回答裏面過濾掉一些口水話,提取到幾個關鍵詞:AOF,RDB,異步刷盤,可配置,命令追加.....
並且說着說着卡殼了,有一種背課文的感受。
我理解,這個程度,不能叫作熟悉。
送分失敗,大失所望
面試的最後幾分鐘,我都會問一個問題:最近在看什麼技術相關的書籍或者文章嗎?
典型的送分題呀。這題很難回答嗎?你甚至能夠說,學業繁忙,主要看的仍是課堂上的東西。
這題你不回答,不減分。回答的好能夠加分,回答的很差會減分。
有一個哥們回答說:我最近在看《深刻理解Java虛擬機》。
我一聽,有點意思,能夠探討一下了。這書我先後加起來看了五次,
我問他:"你看了這本書後印象最深的點有哪些呢?"
他說:"我印象最深的是垃圾回收會致使用戶線程中止。由於我以前碰見過這樣的問題,個人程序常常跑着跑着就停了,我當時不知道爲何。後來瞭解到,是垃圾回收的時候致使的用戶線程暫停。"
我聽到他這個描述我想的是:那這個程序有問題呀,爲何會這麼頻繁且長時間的進行FullGC呢。
因而,我問他:"你是怎麼排查這個問題的呢?"
他說:"不是我解決的,是實驗室其餘的同窗解決的,同窗給我說是垃圾回收的時候致使的問題。我最近看《深刻理解Java虛擬機》的時候也聯想到了這個問題。"
聽到這裏我已經有點失望了,他遇到了問題沒有主動去解決問題。同窗告訴他緣由了,他也沒有繼續深究下去。
算了,仍是回到書上去吧。我問:jvm在回收哪塊區域或者進行什麼操做的時候會出現你剛剛說的暫停(Stop The World --> STW)用戶線程的狀況呢?
其實書上寫的很明確了。老年代進行Full GC的時候會STW,而老年代經常使用的垃圾收集器是CMS:
更深一層次的緣由書上也寫了:
而他的回答是:不太清楚。
失望。
你要說你沒看過回答不上來,我還能夠理解。可是你說你最近在看,卻沒有回答上來。那我能夠理解爲:你僅僅是看了,卻沒有留下任何的東西嗎?
並且我沒有問你相似於字節碼解讀、不經常使用參數介紹這樣的刁鑽問題吧。
不是我在難爲你,是你在難爲你本身。
失望。
其餘的表現
除了上面說的這些狀況,固然還有其餘的一些表現。
好比說簡歷上寫了,熟悉單例模式。我讓手寫個線程安全的單例。而後他寫了一個雙重檢查鎖定。卻忘了加volatile關鍵字。
我說你考慮太重排序嗎?說到重排序你想到了java的哪一個關鍵字呢?
他說想到了volatile。
我說那你這裏爲何沒有加volatile關鍵字呢,他說這裏不須要加。
簡單的解釋了幾句後我給他說去看看《Java併發編程的藝術》這本書,裏面專門說到了這個問題。
經過前面介紹的校招面試出現的一些問題,能夠看到,我面試的時候已經盡力把主動權交給面試者了,可是有的面試者沒有好好把握。
可是隻要能好好把握這個主動權,把本身儘可能多的展示出來,讓我知道你是有技術且是熱情的。語言表達清楚,動做不太浮誇,態度不卑不亢,表情輕鬆天然。
如今不少人面試以前都喜歡看一些面試技巧相關的東西。這沒有問題,我本身也看。
可是面試技巧只是錦上添花,你的真實實力纔是錦上添花的對象。
在對象還不夠堅固的狀況下,應該把花在錦上添花的時間,花到加固對象的時間上。
在絕對的實力面前,任何的錦上添花都會顯得蒼白無力。
這篇文章是我上週末面試結束以後就在構思而且着手準備了,因爲和技術相關的點並很少,我更多的是對於面試這件事的思考,寫到這裏洋洋灑灑又快接近1w字了。大部份內容都是思考於晚上睡覺前的半小時,寫於週末和工做日的早上早起的一小時。
仍是以前說過的:
其實想到寫什麼內容並不難,難的是你對內容的把控。關於技術性的語言,我是反覆推敲,查閱大量文章來進行證僞,總之慎言慎言再慎言,畢竟作技術,我認爲是一件很是嚴謹的事情,我經常想象本身就是在故宮修文物的工匠,在工匠精神的認知上,目前我可能和他們還差的有點遠,可是我時常以工匠精神要求本身。就像我在羣裏表達的:對於技術文章(由於我偶爾也會荒腔走板的聊一聊生活,寫一寫書評,影評),我儘可能保證周推,全力保證質量。
文中提到的兩本書《深刻理解Java虛擬機》和《Java併發編程的藝術》是兩本很是優秀,值得反覆閱讀的工具書,能夠關注我後,在後臺發送java,便可得到電子書。可是對於這類工具書,強烈建議,買一本實體書。
才疏學淺,不免會有紕漏,若是你發現了錯誤的地方,還請你留言給我指出來,我對其加以修改。
最後須要說明的是,這篇文章有不少是我的的見解,並不權威。
可是若是你承認個人見解,你的點贊、留言、轉發、分享、讚揚就是對我最大的鼓勵。
謝謝您的閱讀,感謝您的關注。
以上。
掃碼關注我呀,在這裏我會分享一些技術相關的東西,主攻java方向,用匠心敲代碼,對每一行代碼負責。偶爾也會荒腔走板的聊一聊生活,寫一寫書評,影評。願你我共同進步。
歡迎關注公衆號【why技術】。在這裏我會分享一些技術相關的東西,主攻java方向,用匠心敲代碼,對每一行代碼負責。偶爾也會荒腔走板的聊一聊生活,寫一寫書評,影評。願你我共同進步。