大家好,我是阿菌:)
去年參加的秋招,現在大四。
大學裡比較不務正業,學習了各種技能,程式設計算是其中一項。
所以我的方法論和麵試技巧可能和一些把程式設計作為終身事業的同學有所區別,希望能從一個不同的角度給大家一些啟發。
如果你能完全吃透本文的內容,是很有可能在本科階段就拿到比較高的薪資的。(阿菌實踐過)
當然,如果你已經是研究生,可能拿得更高哦:)
。
阿菌只掛了某大廠一個感覺比較厲害的部門,當時的面試官恰好是我實習&秋招前幫我改簡歷的朋友,掛的原因是我演算法不行。比較可惜,當然也非常感謝他,要不然我都不知道該如何潤色我的簡歷。
去年我五月底結束實習,準備了一個多月,然後開始投遞,演算法水平僅限於刷完了劍指offer。大學期間忙的事情比較多,沒太多時間刷題,演算法基礎很薄弱。
一開始我是海投的,也不太瞭解自己的面試水平,但後來慢慢發現,自己面得似乎還可以,於是就只面喜歡的大廠,其他都在面試前或中途婉拒掉了。
阿菌覺得,如果這家公司你以後是不會去的,那麼沒有必要繼續面。當然如果面得不多,想要積累面試經驗,當然不要放過每一次面試機會。只是現在就業環境蠻嚴峻的,如果不會去可以提早把位置空出來,不佔用資源,對大家都有好處。當然,一定要建立在你有信心拿到心儀offer的情況下才這麼做,要不然會比較吃虧的。
:)
本文不會像其他面試分享一樣羅列知識點哈,那類文章網上蠻多的,這裡只是和大家聊聊天,邊聊邊談知識吧。
面試有兩點很重要,一個是自身實力,一個是面試心態。
這麼說吧,如果你能在面試中和麵試官“聊”起來,偶爾倆人還能一起笑起來,那這場面試基本就成了。
當然,面試房間的門關上不等於把車門焊死,逗笑面試官最好不要使用低階趣味,談談技術理想,人生哲學,照樣能開懷大笑的。
程式設計師段子大家應該也看不少了,活學活用吖各位。
大家一定要記住一點,面試官是在物色同事(能幹活的螺絲釘)。
:)
大家換位思考一下,如果是你自己組建團隊,你想要些什麼樣的搭檔呢?
無非是人品好好,技術吊吊。
雖然,最終我們都會變成自己討厭的樣子......
但,大哥,這是面試欸,演你也要演給面試官看哦。
:)
面試內容就先從專案開始聊吧,
當時我的專案配置是一個小程式,一個小遊戲,還有一個小框架。
放小程式是想告訴面試官:增刪改查,我能寫;常見中介軟體,我能靈活運用;專案部署也有接觸這樣。
面試官通常都會挑一兩個專案問的,像小程式這類專案能聊的就很多。因為一涉及中介軟體就能牽扯各種設計問題,如果大家在專案裡用到了中介軟體,一定要想好為什麼用,如果不用,還有什麼其他的解決方案。
面美團的時候,一個面試官花了一半的面試時間和我探討這個專案某個功能點的實現,讓我想不同的方案。
唉,人都是被逼出來的,那天我想了五六個吧。
大家不要怕在面試官面前出醜,當時我想的方案要麼很爛,要麼天馬行空,被面試官懟的體無完膚。
哈哈,唉,管他,能給我們過就行。
:)
其實面試官都會想要一個點子多的應屆生,這可能意味著所謂的潛力吧,所以大家不要害怕展示自己的思考,就算複雜度low到爆又怎樣,它也是一種解決策略呀!
而且,通過不斷地優化,它最終是有可能成為最優解的,這需要大家和麵試官不斷探討,這就是所謂的“聊”了。
如果有餘力的話可以和麵試官聊聊部署運維相關的事情,比如當時咋用的Docker和k8s,搭建了一套CI/CD這種,展現你對系統的把控能力。如果沒嘗試過可以考慮瞭解一下,會是加分項哦。
另外,放小遊戲的原因是我覺得能和麵試官聊很多網路,協議,IO模型相關的問題,個人認為各種IO模型的設計非常有趣,所以比較喜歡聊這個。
大家也可以根據自己的興趣點,放一些相關專案到簡歷上。
這樣一來,面試官問到就是賺到。
最後一個放的是小框架,當時做的是一個精簡版的spring。
我覺得專案中有一個小輪子還蠻重要的,大到小型作業系統,小到應用框架或類庫都可以。
工作中,面試官(領導)可能不會喜歡一個啥都從頭造的同事,因為大公司有完善的技術工具。但是,誰又會拒絕一個能造輪子的人當自己的同事呢?
這裡,隆重推薦一下碼農翻身公眾號劉哥的spring教程:從零開始造Spring
:)
程式設計師面試,網路和作業系統是兩座繞不過的大山。
先聊網路吧。
其實一路面下來,網路問題無外乎網路協議,而且定位還可以精準一些,就是傳輸層的TCP和UDP,偶爾問問HTTP/HTTPS這樣。
我不太瞭解科班生是如何學網路的,聽計軟的同學說他們要看好幾本書,考試是要考好多概念的,還有計算題呢。
我入門看的是劉哥推薦的自頂向下,看了四五遍這樣,面試的時候感覺還蠻輕鬆的。
舉個例子吧。
在面騰訊的時候,其中一場面試官一上線就丟來一道演算法題,一道字首樹的變型。但由於演算法基礎不紮實,而且比較緊張(秋招第一場面試就是騰訊),最後沒跑通,換了個普通解。
面試官的笑容逐漸消失。
:)
然後隨口問了一個UDP怎麼保證可靠傳輸。
我當時一愣,也不知道當時有沒理解錯,反正我是這樣想的:
大佬欸,想考TCP就直接問啊,為啥要套個UDP外殼呢?
沒辦法,人家問的就是UDP,那就和他聊聊如何在UDP的基礎上繼續修改協議,增加功能,做到穩定傳輸吧,無非就是加序號,設計重傳,開滑動視窗提升效率(TCP那一套)。
結果當時用了一半的面試時間聊這個問題,這種聊深了得好好聊,比如說滑動視窗具體落實到程式碼該怎麼寫。
我覺得背概念會比較虛,和麵試官聊天,當涉及技術點的時候,最好能站在一個“如果要我實現,我會怎麼實現”的角度去聊,把自己的想法羅列出來,當然這需要你平時學習的時候也有類似的實踐才能在面試的時候有話可說。
自己的實現肯定比標準的要菜很多,但設計思路和理念跟上就行。
:)
作業系統問得也蠻多的,感覺頻率會比網路少那麼一點點?
如果各位仍在校,而且時間充裕,非常建議大家去做一個小型作業系統當面試專案哇,這絕對是大大滴加分項。
拋開面試的功利性來說,寫小型作業系統感覺會對一個人的程式設計能力有巨大的提升。
作業系統都能寫,以後不是想幹嘛幹嘛嗎?去做工程也行,開發資料庫,中介軟體,做基礎設施也行,幹啥啥都行。(使勁忽悠,使壞)
沒時間寫?
呃,那就去背那些概念吧,面試要考。
阿菌這種懶鬼肯定就不寫了,哈哈,其實還是想寫的,但是真的沒時間啦,連演算法題也沒時間刷。唉,還是比較喜歡睡覺,和唱歌。(咳咳)
:)
最後是程式語言了,演算法我就不提啦,唉太丟人了,慶幸當時各位面試官都能容忍。
面大廠程式語言似乎就沒那麼重要了,但是面之前自己用習慣的程式語言要了解(不敢說精通)。
瞭解指的是語言特性,基礎類庫的底層實現。
當時面試前用的是Java,雖然不是各個大廠都用Java,但是面試官都會根據我的情況問一些Java相關的問題,並告訴我部門用的是XX語言這樣。
Java的考點很多,但比較常考的就是一些資料結構的實現,我覺得這都和語言無關了,和麵試官聊資料結構就行。演算法題我們可以不會做,但基本的資料結構,各位,這是底線,沒得討價還價的哈。
再比如一些多執行緒併發相關的問題,很多都是一些理念上的問題,並不是Java一門語言獨有的,所以聊的時候其實可以放下具體的語言,聊某個技術點的理念與實現,這樣會好一些。
:)
大概就是這麼多啦,一個本科生也不可能有太深的技術積累,面試官可能更看重潛力吧,我們裝成有潛力的樣子就好啦~
大廠技術面試一般都是三四輪,一面偏基礎,二面偏專案,三面看BOSS喜好。面試時,面試官問問題往往會步步緊逼,看你的積累有多深,問到不會為止,這可能就是所謂的吊打吧。
欸,從阿菌的經歷看來,幾乎所有面試官都會這樣,非要問到別人不會為止。不過,在觸及盲區後選擇合適的時機服軟,面試官都會切換問題的。
一開始肯定是備受打擊的,後來就習慣了,不受點打擊這面試就過不了,所以大家放開和麵試官對線就行。
如果大家有興趣可以考慮關注一下我的公眾號:波波和阿菌(這不是一個技術號,是個漫畫故事號:)
),回覆關鍵字“筆記”,即可獲得阿菌記錄的一些面經和麵試前對知識點的小結(有道雲連結,不搞虛的)。事先宣告:,我的筆記比較亂,因為是想記錄啥記啥,只是為了方便自己看。面經也沒記多少,面到後面發現問題都一樣,沒啥好記的了,即場發揮吧,但一定要保證上次沒答出來的題目要弄懂,別在同一個地方摔倒。其實阿菌也失敗了好多次的,騰訊面了三個部門才過呢。不過前兩個掛我的面試官給了我好多建議,大家面試完也可以和麵試官聊聊天的,有時候面試官提點兩句真的能幫助到自己不少的,後面再面其他大廠就很有自信了。(但就不透露去哪了哈,最後去的廠也沒記面經,很多都沒記的,面經網上一搜一大把哈)
我覺得這戲筆記對有面試需求的小夥伴還是有幫助的,你可以看看我都整理了哪些點,然後你可以根據這些點自己去學習,要記住,面試千萬不要死記硬背,自己理解之後,能按自己的想法說出來,這樣和麵試官對線才有一點點可能性哈。如果強記那些面經,你會發現自己面試的時候使不上勁的,一問深就跨。
我大概是大二開始接觸程式設計,認識劉哥,這項技能修煉了兩年多吧。
期間也不是所有時間寫程式碼,喜歡畫點小漫畫這樣。
希望這篇文章對大家有幫助。