一個跨專業選手的後端java實習面經 已拿阿里美團字節offer

說在前面

先說下自己基本情況,我是本科土木, 保研本校計算機, 保研的時候因爲跨專業所以被調成了專碩, 總共兩年, 所以只讀了半年就要準備找工作. [跨保相關的經驗, 我最後有鏈接] 我們實驗室基本都是做的縱向課題, 並且專碩學碩的培養計劃是一致的, 接觸橫向的機會並不多. 考慮到做算法兩年時間(實際上只有一年)很難有競爭力, 並且這兩年算法的內卷比較嚴重的情況, 我開始了自己的自學研發的道路.

在整個學習和準備找實習的過程中, 牛客真的給了我很大幫助, 所以在我上岸之後, 在學長的建議下對我自己的經歷進行一個總結, 回饋牛客, 大家如果有什麼問題歡迎留言和小窗.

4月8號收到阿里釘釘實習的口頭offer,我的春招實習基本進入尾聲,面的崗位都是後端java(字節要轉go),以美團字節阿里的oc收官。總體結果挺出乎我的意料的,因爲我的簡歷上沒有別人那麼漂亮的java項目(兩個項目一個是我畢設的車輛路徑算法設計cpp,一個是做的橫向課題web開發python), 也沒有大廠的實習經歷, 我覺得簡歷能看的主要就是加權和數模一等獎這些. 我自己從一月底開始琢磨實習的事情,過完大年初三開始複習準備,總體時間甚至有些倉促,而且作爲一個開始準備的時候,用java寫leetcode都要偶爾翻doc查api的菜雞,我都有點意外我可以走到現在. 回顧整個過程, 我覺得一定是我做對了什麼事,所以把自己的經驗梳理一下,給大家作爲參考。

要不要投實習

實習招聘戰場上,通常有兩類人,一類是已經準備的差不多的大佬,在我都不敢投大廠的時候,oc已經拿到手軟。一類是啥都沒準備,突然意識到秋招前我是不是該先試試水的菜雞,比如我。

所以這裏第一個問題, 要不要投實習? 實驗室不放的話投實習有什麼意義? 實習面試太菜會不會影響秋招?

首先是要去投, 就算沒有準備好, 也要邊準備邊投. 實習面試的經歷非常重要, 甚至對於沒有準備好的同學更重要, 沒有準備好通常的狀態, 比如我手上沒有實習經歷, 沒有見過大廠的真題, 沒有感受過大廠面試的過程. 這種情況, 春天的實習招聘就是你的復活甲, 投不了喫虧投不了上當, 血賺不虧. 如果這個時候不投, 秋招的時候就真的裸奔上戰場了, 實習0offer可怕還是秋招0offer可怕, 應該大家都有衡量.

比如我們學校很多實驗室是不放實習的, 我和朋友聊的過程也經常遇到這種情況, 我們實驗室也是理論上不放實習, 但我覺得實習固然重要, 對於沒有實習經歷的同學, 實習面試的經歷也很重要, 像阿里這種來不了實習也可以直通終面的情況,真的非常友好. 因此, 即使實驗室不放, 我也強烈建議要去投一投, 把面試經驗沉澱一下. 如果過了, 接到oc去不了拒掉的話,好好和hr溝通,據說人家秋招還會來問你意向(不是鴿offer,鴿offer可能被拉黑)

然後面試被刷影不影響秋招, 我面過的大廠, 都是回覆的有通過記錄的秋招有優勢, 沒有通過也不會影響. 我甚至之前看到過大佬的分享, 說進阿里的童鞋有很多是有不止一次面試記錄, 是否能過與能力, 部門情況, 運氣, 臨場表現息息相關, 過了不代表強, 不過也不能代表一無是處.

總結就是, 實習階段的面試是很低成本的試錯機會, 大家要抓住這樣的穩賺不賠的機會.

面試準備

接下來說下我的面試的準備,兩個月的時間邊準備邊面,比較倉促, 但也很適合目前還沒有準備好的同學。

計算機基礎,操作系統,計網和數據結構。我在面試前都把教材過了一遍,並且要總結,有的我用了我以前的筆記,有的搬了些博客和github的內容. 這部分複習花了大概15天, 期間也每天在刷算法題. 有了自己的知識點總結, 之後是一個查漏補缺的過程,把牛客上見到的題不會的,找到答案補充進去,高頻的問題,拎出來答案准備好,每次面試前過一遍。參考我的github,note_md高頻部分, 另外, 推薦大家可以借鑑github上cyc2018的這種總結方式, 對知識點進行梳理. 上面提到了我自己的項目, 但是做的的確不如cyc好, 鏈接在文末會給出.

計算機基礎是大廠面試的重中之重,並且千萬不要背答案, 背不完也沒有用. 阿里的面試爲例, 操作系統和算法的部分, 有的地方我記不住的,面試官提示一下,我給面試官展示了把完整的知識點推出來的思路, 我覺得這個過程其實比直接給答案更加分。

算法題要刷,我的順序是兩遍劍指,挑出還不會的最優解的, 再過一遍. 然後cyc2018的leetcode題庫,先刷完數據結構部分,再刷算法部分。面試手撕原題命中率很高。刷題時,遇到不太熟的,比如我是dp和trie字典樹不熟的,系統性的翻教材學一遍做好筆記,針對性的做點算法題鞏固。算法題啊,沒必要死磕,剛開始刷的時候20分鐘完全沒頭緒很正常,看一遍答案,明天回頭自己寫一遍。 我劍指上都有三刷記不住最優解的,記不住的別強求。每天一個半小時起步吧,開始的時候每天花半天時間。

再是java基礎,這個部分比較雜,我建議找個比較全的java知識點思維導圖,掌握的勾掉,不熟的先從高頻到低頻準備,然後對導圖上的知識一個個補洞, 準備的過程並不是找到高頻題答案就行了, 最好能讀一讀源碼(時間不夠可以看源碼分析的博客, 然後和自己學的操作系統/計網的知識點串一串)。學習資料和順序,JavaSE我推薦《core java 第一卷》, 比較厚, 前六章一定要看, 後面的按需跳着看, 最好能和《java編程思想》比較着看,我覺得後者講的更清楚。 jvm只要看最經典的《深入java虛擬機》那本,我自己對java基礎的複習主要是看博客+源碼,併發這部分有看《java concurrency in practice》 的中文版,但是直接看博客+源碼也還行。時間不夠的話不要太留戀難點,我到現在AQS都沒完整讀透,準備的過程要寫demo,跑通過的東西記憶會深刻很多, 同時要寫博客或做筆記, 以後這就是你知識體系的外存 。

然後再回到計算機基本功,問的高頻題和簡歷延伸到東西都是比較容易準備的。 難的是開放題,沒法準備只能靠自己的計算機基礎去嘗試給答案,不過也可能是我自己基礎不紮實或者見識有限積累不夠。但我的總體建議是, 聯繫你學過的操作系統,計網中學過的解決問題的方法進行遷移。這部分真的靠日常積累。

怎麼準備簡歷

首先是策略和態度, 你要對自己簡歷的每個字負責。如果認真準備它們就是你的亮點, 否則就是面試官抓到你的漏洞。簡歷是你最能控住全場的部分,別的問題沒法準備, 但是簡歷上的東西是可以提前準備的。每個字都要想面試官會拿着這個怎麼問,自己按照背景,亮點,不足,可能可以改進的方向準備好回答,然後積累不同面試過程中面試官對你項目問的問題,簡歷相關的東西面幾次就脫口而出了。

簡歷沒有java項目怎麼辦,我覺得面試Java用java相關當然最好,但是我真的沒有完整的好看的Java項目,這是我的短板,被阿里hr吊着打,差點掛我。但是沒有的話臨時湊的不如一個不是Java但是非常完整的,完整到你覆盤過,和更好的比較過,最好比較完回頭改進過,如果做到最後一步這個項目就比較完整了,我只做到找優秀的相似項目比較,但是也因此得到過好評。 Java項目可以反映你對這門語言和其生態的熟悉程度, 但是一個不完整的項目也會讓你在面試時漏洞百出。

自己的項目,用過的框架相關的高頻面試題一定要熟,源碼有餘力最好能讀一讀,讀不完沒關係, 從來沒看過就是態度問題。 問到源碼沒有看過的部分, 可以說那部分沒看過,但是正在看這個部分,就扯回你熟悉的領域了。我自己會暗搓搓搜一些Spring面試高頻知識點,但是主要是爲了應急啦,我現在不急了還是每天啃一點spring源碼。

面試套路

首先說一下我最近面了這麼多的一個感想,實習不一定要有好看的項目,但是基礎一定要紮實,同時要帶着面試官往你擅長的地方走,自己的戰線不要打得太開。舉個反例,一下說自己熟悉mysql,一下說自己Spring用的6,再往zk,dubbo一扯,面試官對你的期望很高,一問都沒看過源碼,然後很容易涼涼。

相反,開始不要給面試官太高期待,比如我,我知道我菜, 所以自我介紹的時候就說熟悉javaSE,用過mysql,redis,Spring還在學,源碼這些可能不太熟。 然後面試官在你圈的範圍開始問了之後,一旦問到了你精心準備的部分可以給他設個連環套,面試官可能會對你刮目相看。比如hashmap套concurrentHashMap套volatile, 他如果順着準備的這條問,就這三條我聊源碼可以說40分鐘不止,類似的在mysql,redis,以及其他的JavaEE框架這些技術上也有對常問的點準備到侃侃而談,不常問的點不至於一句都說不上來,一個面試的基本盤就搭起來了。面試官他有可能會跳出你畫的圈,對我來說比如問到javaEE相關的,如果正好你也有準備,同樣是回答一個知識點,面試官在不同期待值下的感受應該是有區別的。

另外,遇到不會的知識點,但是你有自己的推測的,可以說,這部分我不太熟,如果我來做可能會xxx,因爲我覺得(推測原因),我下去會了解下這一部分。在我有限的嘗試中,這裏面試官點頭的情況還蠻多的,主要是我瞎猜的準? 對於那種要麼是要麼不是或者你就算猜都編不出理由的,坦誠地說不好意思這部分有點糊。一方面,你需要展示出你遇到問題時,是比較主動的想解決方案的姿態,另一方面也要坦誠,但是如果你這不會那不會說的太多,估計要涼。比如我的蘑菇街,我說最近自己寫demo做了一個比較簡陋的web服務器,多嘴說了句參考了tomcat源碼,然後被抓住問了一堆tomcat我不太熟的,就沒了。

策略和心態

我是從牛客的貼意識到去面實習的重要性,也是在牛客上找的大部分實習,以及面經。也是因爲牛客,我那時每天過的都非常難受,不敢刷牛客,感覺人和人的差別真的太大了,又對自己沒有什麼信心,面了的都要麼涼要麼沒有消息,每天晚上一兩點不敢停下學習,不敢睡覺,躺牀上也會懷疑人生。

我自己準備過程的心態的確不夠好,非常焦慮,但是我覺得策略上還是有可取之處。面試準備上點面結合, 高頻題是點, 計算機基礎是面; 選擇公司時, 沒有面試經驗的時候,適當多投一些,自己想去的公司往後排一點。再重複一遍, 過了不管一面還是兩面都是有積極作用的,沒過的話,不會影響秋招, 白嫖一個心儀廠的試錯機會。像我這種面着面着就進去了的也是可能的,我是真的菜雞。

btw。 選擇計算機行業, 意味着在一定程度上以技術安身立命, 投機取巧一定是不牢靠的,要做好長期規劃和持續集成,比如我缺的分佈式相關的知識和項目練習,我也會在近期儘快補上,努力成爲一個真大佬。

然後,阿里釘釘急缺簡歷,其他bu掛了有機會撈,java後端和前端,我還可以在線賣藝幫忙改簡歷,還有阿里學長幫忙改和提建議,及時跟進我每輪面完最多一天就知道結果,一週走完流程,人超級好。

我上岸真的有很大一部分的運氣和學長的幫助, 以及各輪面試的面試官都非常平等的和我交流技術探討問題, 沒有因爲我沒有好看的Java項目放棄我, 很多問題考得很活有難度但也很過癮.

對我們感興趣的或者求撈的, 可以私信我,我這邊幫你對接.

以上是我暫時想到的東西,然後擺一波資源

書單(也是我從別的大佬找來的通過我自己驗證的優先看的章節, 其他章節也要慢慢看完)

  • 劍指offer
  • 深入理解Java虛擬機 第二章 第三章 第七章 第十二章 第十三章
  • mysql必知必會 + leetcode-database題目
  • 高性能mysql 第一章 第五章和第六章
  • redis設計與實現 字典 跳躍表 過期機制 持久化 事件 複製 Sentinel 集羣 發佈與訂閱 事務

項目資源

java練手項目

這些練手項目, 如果是自己如果想不到做什麼可以模仿的項目, 但是我依然建議大家自己去想一想項目, 比如模仿spring寫個IoC容器, 模仿tomcat實現個小web服務器, 這些都是我這樣的菜雞的選擇, 大佬繞道.

另外,我挺推薦java的一個付費課(我真的沒收錢, 人家講的不錯)

  • 極客時間 - Java核心技術面試精講

以前寫的跨保的經歷 不同學校的保研政策可能有差異, 供參考 https://www.zhihu.com/question/65673406/answer/514972800

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章