三無選手上岸大廠的後端校招經驗

2022-12-15 18:01:48

眾所周知,受疫情影響,網際網路迎來了『寒冬』,大廠 HC 驟減,騰訊基本不招人,華為也不再是有手就行,阿里某些部門流傳只招 23 所院校,在如此嚴峻的形勢下,上岸大廠變得愈發困難...

1. 個人介紹

大家好,我是一楓。本科末流 211,碩士中流 985,均是電子資訊專業,非科班、無實習、無比賽,最終上岸位元組跳動,崗位是後端開發。

我是在讀研的時候接觸到的 Java,在 B 站學習了 Java 基礎、MySQL 基礎、JavaWeb、SSM、SpringBoot,但是那時候只是懂個皮毛,比如 MySQL 就只會 Insert、Update、Select、Delete,像什麼索引、事務、慢查詢等都一竅不通。

正式準備秋招是從 2022 年的一月份開始的,經過長達大半年的努力,拿到了位元組、美團、攜程等 offer,雖然說並不多,但也是很滿意了。

在我的面試過程中,基本上技術面都能夠通過,很多是在 HR 面或排序中掛掉了,如螞蟻、OPPO、蔚來等,在這裡還是提醒一下大家,如果有機會實習的話,一定要實習,因為現在後端開發比較卷,在大家知識面差不多的情況下,企業肯定還是會傾向於招聘有實習經驗的同學,比如我在面京東的時候,面試官就很可惜的說,我雖然基礎較好,但是前面的幾個競爭者都有美團、華為等公司實習,我這方面比較吃虧,還安慰我說可能還有其他部門撈...

2. 面試經驗

下面是對秋招整個過程的一點小建議,希望有所幫助。

  • 在製作簡歷時,有些自己只懂皮毛的,最好不要寫上去,主要寫自己比較熟悉的內容,比如之前我在簡歷上寫了 ElasticSearch,但是每次面試官問,我都回答的不太好,反而減分,之後就將它從簡歷上刪掉了。
  • 對於簡歷投遞,建議大家越早越好,因為現在的形式是 HC 較少,而候選人較多,到了後期很可能就沒有面試機會了,而且如果投的早,即使掛了,後面也可能被撈。我有些公司就因為投遞較晚失去了機會,比如 zoom 二面結束後,公司全面鎖了 HC,即使面試表現很好,也無濟於事。
  • 建議大家總結一份屬於自己的知識點筆記。面試中有很多高頻問題,經常會被問到,比如 synchronized 的鎖升級過程、Java 執行時區域有哪些、瀏覽器輸入 URL 後回車發生了什麼等,大家可以提前準備好一個面試版本,如果面試官問你了,就可以『背誦』筆記上的內容。
  • 建議大家多面試,不要怕,剛開始可以從一些中小廠練起。面試也是有一定技巧的,剛開始面試的時候難免緊張,可能語無倫次,答的很差,但隨著面試多了,慢慢的就找到了感覺,不僅能夠流暢的回答問題,甚至可以逐步引導面試官問自己懂的部分,彰顯出自己的實力。對於不能實習的同學,建議也參加一下暑期實習招聘,主要就是讓自己瞭解面試的過程,總結套路,並知道自己有哪些不足,同時有些公司面試通過了還可能會發放秋招直通車。
  • 在面試過程中,如果遇到自己可能不太懂的知識點,不要立馬說自己不會,可以先思考一會,說不定就想起來了。同時即使有些內容不會,也可以一些與之相關的,比如問 Redis 的字典底層原理,如果不會,可以說自己懂 Java HashMap 的底層原理。並且對於一些自己比較熟的內容,可以適當的延伸,不要總是等著面試官問。比如面試官問 HTTP 和 HTTPS 的區別,除了簡單地說幾點區別外,還可以主動聊 HTTPS 為什麼安全,SSL/TLS 握手的過程等。
  • 因為現在主要是線上面試,大家可以對自己的面試過程錄屏,然後進行復盤,一方面是查一下自己不懂的知識點,另一方面是看一下自己在語速、表情、姿態、語言等方面是不是有需要改變的地方。

3. 學習經驗

因為我主要準備的是 Java 後端,下面說一下個人的經驗。

在一場面試過程中,一般包括三方面的考察:基礎知識、專案經歷、演演算法能力,都比較重要!

(1)基礎知識

這方面涉及的內容比較多,我認為以下內容是較為重要的:Java 基礎、JVM、Java 並行、MySQL、Redis、計算機網路、作業系統、Spring。一般情況下,我會先看 B 站上的視訊入門,然後再看書籍深入,不懂的或者欠缺的知識點再搜部落格看。

  • Java 基礎

    對於 Java 基礎部分,重點是 Java 集合,比如 HashMap,這塊我沒有看過具體的書籍(《Java 核心技術 卷一》一直在吃灰...),主要是看的部落格和原始碼,也會看一些網上總結的面試指南,如 JavaGuideCS-NotesJava 面試小抄等,都是非常全面的。

  • JVM

    這塊我以前也沒了解過,一直感覺比較難,但後來面過幾場試後發現,問得問題都比較固定,比如 Java 執行時的五巨量資料區域、垃圾收集演演算法&垃圾收集器、類載入過程等。推薦如下:

  • Java 並行

    這塊比較重要,面試高頻點,比如 synchronized 鎖升級、volatile 原理、ThreadLocal 原理、執行緒池原理等。推薦如下:

  • MySQL

    這塊比較重要,作為後端,我們需要經常和資料庫打交道,推薦如下:

  • Redis

    這塊面試題較為固定,比如 Redis 的資料結構、持久化、哨兵、快取擊穿、快取穿透、快取雪崩、Mysql 和 Redis 的資料一致性等,推薦如下:

  • 計算機網路

    這塊重點需要掌握以下協定:HTTP、HTTPS、DNS、TCP。推薦如下:

    • 視訊:計算機網路微課堂(有字幕無背景音樂版),用動畫演示,通俗易懂,而且視訊相對不長。
    • 書籍:《網路是怎麼連線的》,內容不長,像讀小說一樣,能夠知道計算機網路的一個全貌。
    • 部落格:圖解網路,小林coding 的文章彙總,應付秋招基本夠用,平常會分享一些秋招的面試題,對我幫助蠻大的。
  • 作業系統

    這塊我被問到的很少,基本也就是問一下為什麼要有虛擬記憶體、程序排程有哪些演演算法等。推薦如下:

  • Spring

    對於 Java 開發而言,Spring 肯定是非常重要的,推薦如下:

  • 其他

    • 目前對於 MQ 的考察慢慢多了起來,我學習的是 RabbitMQ,比較簡單,大家也可以學一下 Kafka,用的更多一點。同時可以瞭解一下 SpringCloud 相關內容(沒時間就算了),RabbitMQ 和 SpringCloud 我是看了視訊:SpringCloud+RabbitMQ+Docker+Redis+搜尋+分散式,系統詳解springcloud
    • 面試中也可能會出現海量資料處理的問題,可以看這篇文章
    • 面試中也可能會出現一些智力題,我是看到牛客的一些面經上的智力題後,百度搜了一些常見的,如賽馬問題、過橋問題等。
    • 隨著後端的不斷內卷,現在校招生也可能會被問到設計模式了,這塊挺難的,畢竟是思想性的東西,大家需要提前準備一下,不需要了解全部設計模式,只需要熟悉其中的幾個能夠在面試中說即可,比如單例模式(必會)、代理模式、工廠模式等。
    • 同時目前面試中也出現了越來越多的場景題,這個也是挺困難的,它不像基礎知識那樣會有固定的答案,屬於一種開放性問題,更考察小夥伴們的系統設計能力以及知識的全面性,我是搜了一些經常會出現的場景題,比如秒殺、微博發帖、短地址設計等,然後在面試中如果遇到,就考慮如何引導面試官問一些基礎性的問題,比如 MySQL、Redis、RabbitMQ 等。

(2)專案經歷

因為沒有實習,所以這塊我是比較匱乏的,大家能去實習還是要去實習!我簡歷上一共寫了兩個專案,分別是牛客網的仿牛客論壇專案以及讀研期間做的一個導師橫向課題。因為做的橫向課題與後端關係不大,基本沒有被問過,大部分面試官都是問我仿牛客論壇專案。

仿牛客論壇這個專案涉及的內容挺豐富的,而且技術棧比較多,非常適合練手。我是在跟著敲完這個專案後,對專案進行了重構,比如它原先使用的是 Kafka,我換成了自己熟悉的 RabbitMQ,比如使用 SpringSecurity 和 JWT 重構了登入部分,又比如將專案重構出了一個前後端分離的版本(前端找的實驗室同學做的)。本來還想著將私信功能用 WebSocket 進行重構,但是時間不夠,我也不想再折騰了...

大家在做專案後,也可以想想能不能利用自己的所學知識點對專案進行重構,同時提前想好如果面試官讓介紹專案時應該如何說,問專案的亮點和難點時,應該怎麼回答(如果實在沒有亮點或難點,也可以說一下自己學到了哪些知識,比如如何限流的、用到了 Redis 的哪些資料結構等)。

(3)演演算法能力

近些年來,演演算法是後端面試的重中之重,基本上每場面試都會寫至少一道演演算法題,大家務必重視。

我是先看了《演演算法 第 4 版》這本書瞭解了一些基本的知識之後,便開始在力扣刷題了,一共刷了 200 道左右,主要刷的就是 Hot100劍指 Offer,期間也看了一遍程式碼隨想錄,學習了挺多做題套路。

在刷題過程中,Hot100 是超級重點,很多面試官都會出上面的題目,基本上 Hot100 能吃透,面試題目問題不大,我整個秋招一共刷了 3 遍 Hot100 和 2 遍劍指 Offer,後期刷的速度越來越快,比如寫快排基本都不用怎麼想,幾分鐘就完整寫出來了。

4. 碎碎念

在準備秋招過程中,我覺得最重要的一件事就是做筆記了,畢竟後端的知識非常多,某個知識點一旦不回顧,可能很快就忘了,整個過程中,我一共記錄了超過二十萬字的筆記,有三百多頁。

網上總結的知識點筆記一方面可能知識點不全,另一方面可能寫的比較難懂,甚至有些錯誤。而自己整理的筆記,畢竟是寫給自己看的,那麼肯定是更易於理解的,下次忘了的時候也能夠通過看筆記迅速回憶起來。

每隔一段時間,我都會全面複習自己的筆記,甚至『背誦』,而且會經常對自己的筆記進行重新整理,畢竟伴隨著學習的深入,很多知識點可能理解的更為透徹。

大家如果需要我的筆記作為參考的話,可以關注或私信『一楓說碼』,免費分享哈!

最後,大家要穩住心態,不要放棄任何機會,加油,你一定會找到理想的工作!