當前位置:簡歷模板館>面試>面試技巧>

春招面經,整理了3個月的面試總結

面試技巧 閱讀(1.26W)

2020年是一個開頭就沒開好的年份,但實習卻依舊要開始,而且今年實習似乎比往常都顯得難了,在經歷了春招大戰後的我,最後拿到美團、騰訊、京東、360、搜狗等等offer(均爲java後端開發)。

春招面經,整理了3個月的面試總結

在結束了大混戰以後,感覺需要寫寫總結,一來是對自己的總結,留下一個印記,二來也是希望將我自己的經歷分享給大家,能夠幫助大家。

本人本科雙非計算機科班,考研去了還可以的211,屬於最最普通的一名計算機研究生,而且沒有任何實習經歷,底子說實話很一般,因此我覺得還是具有一些普遍的參考意義,當然經驗只是用來參考的,最後還是要選擇最適合自己的方式來學習。

接下來我將分七個部分來分享我的此次春招經歷:

如何準備面試如何投遞簡歷和選擇崗位面試中需要注意的內容java面試高頻知識點offer的選擇一些其他感想總結

以下全程手碼,全程乾貨,全程高能!

第一部分:如何準備面試

我本人是從2月份開始準備面試的。我個人建議準備的戰線不用太久,在2-3個月左右最爲合適,當然如果你認爲自己需要更長的時間來準備,也是沒有問題的,這取決於個人的基礎。

首先,面試準備主要分兩大塊:通用板塊,專業板塊。

所謂的通用板塊,一般就是基礎算法,沒有什麼複雜的技巧,leetcode、牛客刷起來就可以了。現在大廠的招聘流程都有在線手撕代碼的模塊(尤其是字節),所以這個板塊需要重視。

所謂的專業板塊,一般就是開發或者算法,適用於你想去的領域,例如java開發,C++開發、前端、移動端、機器學習等等。

我個人的經驗,除了部分對於算法有莫名執念的公司,專業板塊的重要程度要大於通用板塊,大家務必要把重心放在專業板塊上。

其次,準備面試不等於簡單的背誦!

在準備知識點的時候,你需要自己做好筆記,做好自己的理解(有自己的理解很重要)、並且形成體系,因爲如果你只是簡單的背誦、你沒有辦法把知識點串聯起來,就無法形成體系,效果會很差。

比如你要知道技術的使用場景(不結合場景談技術都是耍流氓)、優劣、和同類型的技術的對比。

例1:

面試官問:我現在需要對某個系統進行某些關鍵操作的記錄,並且用於做大數據分析,你會怎麼設計這個功能?

(2020京東面試題)

你如果在複習的時候有全局視野,有體系。你就能馬上知道,面試管問這個問題的核心就是在問,對於橫向業務,你是否懂得要用AOP的思想。如果你只是背誦AOP可以用於記錄日誌,可以用來進行權限檢查,而沒有理解他的核心,沒有建立體系,這種問題就容易答偏。

例2:

有一個static變量,初始值是0,現在有2個程序同時修改這個值,每個程序都是進行自增操作,請問這個變量最後的取值可能有多少?如果這個變量加上volatile,取值可能有多少?

(2020美團面試題)

如果你只是背誦了多線程的一些概念,而沒有理解具體是怎麼回事,這種題目就變成,知道一點,但就是答不出來。因此需要理解,成體系,且懂得應用與分析。

例3:

如果請你設計一個緩存,你覺得你會考慮哪些問題?

(2020阿里面試題)

同樣的道理,如果你沒有對緩存有一個完整的體系認知,那麼回答這種問題只是東答一點,西答一點,具體緩存知識點可以參考敖丙。

還有很多諸如此類的面試題,不再一一列舉,說這個是想強調,大廠要的不是會背書的機器人,而是真正能理解問題,解決問題的人。

總結一下,複習面試的重點在於專業板塊,但也要重視通用板塊,在複習的時候切記不能成爲背書的機器人,要懂得建立體系,這樣的複習才更加高效和有序。

第二部分:如何投遞簡歷和選擇崗位

基本上,互聯網企業的簡歷投遞途徑就是內推(校園bbs、或者學長學姐)、牛客網、官網投遞、一些招聘軟件等等,都大同小異。崗位選擇的話,大類就是技術、產品、運營等等。

我這裏主要想說的是幾個可能相對特殊的問題。

提前批的選擇

在如今金三銀四的春招中,時間顯然成爲了一個重要的戰場,所謂投的越早中的概率越大。其實這裏需要有一個trade off 的考量的。當你沒有準備好的時候,不適合投的太早。因爲很有可能就會直接沉到池子。因此你需要自己衡量一下自己的狀態,再做決定。

有關池子的問題

所謂的池子就是當你的第一次投遞面試掛了,然後你的簡歷就會進入這個公司的大池子。

一旦進入池子,就開始等待反覆被撈的過程。除了個別公司,大部分公司都會有撈人的情況。

一些大廠的流程阿里:

阿里的流程最爲複雜,相對週期較長。基本流程有一面、二面、三面、交叉面、HR面,以及在HR面前,可能會有加面,平均面試數量爲5面。

另外有測評以及在線筆試(2道編程題),必須參加,一般不會篩人,一個部門掛了,可以轉部門,但需要重新完成測評與筆試,存在HR篩人的情況,面試以電話面試爲主,另外面試基本都是突然襲擊,時間基本在2月-5月。

騰訊:

騰訊的流程相對簡單,效率較高,分爲提前批與常規批,一般來說提前批是主要戰場,基本流程有初試、複試、GM面試、HR面試。

是否通過該輪面試24h內就會有反饋(是否變灰),總體效率較高,提前批無筆試,常規批有筆試(但不是必須參加,但參加會有更高的概率發起面試)。

一個部門掛了,可以被其他部門撈起,HR面試基本不篩人。面試以電話面試以及視頻面試爲主。面試均會提前預約,時間基本在2月-5月底。

字節跳動:

字節的流程效率相當高,效率相當高,基本上一面二面三面可以在一天完成,有統一的在線筆試,也有提前批,但字節的實習招聘屬於全年招聘,因此日常與暑期基本沒有區別,HR面基本不篩人。

一個部門掛了,可以重新投遞。面試以視頻面試爲主(牛客在線面試,必有手撕代碼),面試均會提前預約。時間基本全年招聘。

美團:

美團的流程相對簡單,效率相對較高。基本流程有一面、二面、三面、HR面。有統一的在線筆試(5道編程題),一個部門掛了,可以被其他部門撈起。HR面試幾乎不篩人,面試以電話面試以及視頻面試爲主。面試均會提前預約,時間基本在2月-4月底。

京東:

京東流程相對簡單,效率一般。基本流程是一面、二面、HR面。有統一在線的筆試,基本不存在提前批,都是統一的進度流程,先筆試,再面試,面試以電話面試爲主,面試均會提前預約。時間基本在3月-4月底。

網易:

網易的流程相對簡單,效率較高。基本流程是一面、二面、HR面。有統一在線的筆試,基本不存在提前批,都是統一的進度流程,先筆試,再面試(筆試會篩人),面試以電話面試與視頻面試爲主,面試均會提前預約,且可以自己選時間段,時間基本在3月-4月底。

百度:

百度的流程相對簡單,效率較高。基本就是一面,二面,三面,HR面。一週一面的節奏,有統一在線的筆試,基本不存在提前批,都是統一的進度流程,先筆試。再面試(筆試會篩人),面試以電話面試與視頻面試爲主,面試均會提前預約。且可以自己選時間段,時間基本在3月-4月底。

華爲:

華爲流程相對簡單,相對週期較長。基本就是技術面。主管面。兩次面試中的間隔時間,整體較長,有統一的在線筆試,基本不存在提前批,都是統一的進度流程,先筆試。再面試,面試以視頻面試爲主,面試均會提前預約。時間基本在3月-5月。

360:

360流程相對簡單,相對週期較長。基本就是初試、複試、HR面。基本一週一面,有統一的在線筆試,基本不存在提前批,都是統一的進度流程,先筆試。再面試,面試以視頻面試爲主,面試均會提前預約。時間基本在3月-5月。

搜狗:

搜狗流程相對簡單,相對週期較長。基本就是初試、複試、HR面。整體週期較長,基本不存在提前批,都是統一的進度流程,面試以電話面試爲主,面試均會提前預約。時間基本在3月-5月。

其餘企業也大同小異,不一一列舉了。

具體面試的流程,大家可以多問問內推人,以及同屆的小夥伴,或者去牛客網上多關注面試動態。

總結一下,簡歷投遞一般來說,可以多投幾個試試,根據個人情況來做選擇,以及投遞前最好對該崗位有一定的瞭解,第一次投遞很關鍵,以及有些公司存在筆試或者簡歷篩人的情況,因此也要重視簡歷的書寫以及在線筆試或者測評。

總的來說,金三銀四是鐵律,大家要做好規劃。

第三部分:面試中需要注意的內容

一般來說,面試部分基本分爲4個板塊:自我介紹、簡歷提問、專業吊打、反轉提問。

首先先來說說自我介紹,個人感覺自我介紹沒有什麼好多囉嗦了。簡明扼要即可,但有一點需要注意,自我介紹需要突出兩個方面:第一個是對於技術的熱情,第二個是要引導面試官往自己熟悉的領域提問。

曾和一個阿里面試官聊天,以阿里爲例,阿里主要看重的學生的三個方面:

學習成績要前列,基礎知識紮實

喜歡折騰,對於技術有極大的熱情

有無實習經歷,有無參賽經歷,有無論文經歷。

因此,在自我介紹的部分,儘量突出以上的方面。

其次,我們再來談談簡歷提問,這一塊主要是面試官對於你的簡歷中的技術項目會進行刨根式提問。

因此,對於你寫在簡歷上的項目,你必須要做到非常非常熟悉,否則一提問就像沒有做過的,很尷尬。

所以你可以適當的對於你的工作進行包裝,但要是隻是爲了包裝而包裝,反而得不償失。

另外,對於簡歷中的項目,你需要有一個完整的準備,從項目背景、項目介紹、項目角色、項目技術棧等等來進行回答,而不要隨便說說我做了一個什麼功能的項目。

接下來就是最緊張刺激的吊打環節了!這個環節就是刀光劍影的環節了,過不過就看這個環節了。

這個環節就是考察你的基本功的時候了,具體的知識點我就不贅述了,可以參考接下來的一部分。

我主要提醒3點:

對於回答任何問題都要有邏輯,有條理。

例4:

是否瞭解synchronized關鍵詞?

(2020美團面試題)

我相信任何一個java面試者都被問過這個問題,這是一個經典問題,對於這個回答,我相信大部分人就開始了鎖升級那一套的東西。

但我覺得更好的回答方式是有系統,有體系的回答:

例如: synchronized關鍵字是java解決併發問題一種重要方案。

我將從以下4個層面回答:

synchronized關鍵字在使用層面的理解synchronized關鍵字在字節碼中的體現synchronized關鍵字在JVM中的實現synchronized關鍵字在硬件方面的實現

首先,synchronized關鍵字可以作用在代碼塊或者.....

以這種有邏輯的方面回答,可以讓面試管覺得你是一個專業的人,而且會讓它眼前一亮,可以參考敖丙的文章,那逼寫的真的通俗易懂。

對於面試官的問題如果有暫時回答不出來的,或者不懂的。可以表示能否讓我思考一下,或者老實的說我不知道。而不要不說話,卡着,這樣大家都很尬尷,畢竟最怕突然的安靜。你要主動引導面試官的提問,儘可能能突出自己的強項,以及多回答自己的理解,而不是千篇一律的背誦。

總之,這個環節,是一個需要技術基本功、有邏輯的表達而且看命的環節哈哈哈。如果大家有條件,可以去參加參加一些模擬面試,熟悉一下流程,比如敖丙的模擬面試。

最後。就是反轉提問環節,就是所謂的你有什麼想問我的?

這個部分見仁見智,一般可以參加的提問有:

對於剛剛面試環節的評價,有哪些不足之處可以改進的對於技術業務的瞭解其他問題

總之這塊中規中矩即可。

以上就是面試的全部經驗。

總結一下,面試緣分很重要,俗稱看命。在面試中,儘可能引導面試官往你的強項提問,以及要有條理的回答問題,而不是想到什麼說什麼。最後,對於自己簡歷上所提到過的任何一個字都要負責。

第四部分:java面試高頻知識點

其實面多了,就會發現核心就這些,我例舉幾個我認爲的高頻知識點。(怎麼感覺和期末考試提綱一樣哈哈哈)

講道理是不太想寫一塊的,因爲網上一搜一大把,但感覺大家特別喜歡看這塊面經,還是稍微寫一下。

集合類組合拳(尤其是HashMap)

我覺得這個已經問爛了,應該熟到條件反射的回答,

提醒一下一些冷門知識:st有什麼特點、fail-fast與fail-safe、以及hashmap的一些參數(以及爲什麼)、hashmap是否可以存null值,concurrenthashmap是否可以存null值等等。

併發編程組合拳

例如:synchronized 的鎖升級、對象頭、字節碼層面、openJDK層面的實現(3個隊列),硬件層面的實現,

volatile的底層原理,DCL(Double Check Lock),CAS底層原理以及ABA問題,各種類型的鎖,

Reentrantlock,AQS的底層源碼(特別是理解設計思想),runnable和callable的區別

java中的同步工具(CountDownLatch/CyclicBarrier/Semaphore)的使用場景以及原理,

線程池(ThreadPoolExecutor核心的7個參數,4種拒絕策略,1個使用原則),寫時複製等等。

線程與進程

這個我覺得也是老生常談的問題。提醒一下:wait()與sleep() 方法的區別。

如果你能知道什麼時候用線程,什麼時候用進程就能加分了。比如你知道nginx底層的用到了什麼。

JVM組合拳

這個板塊絕對是可以問到死的板塊,大家適度複習就好。以hotspot爲例:

例如你要知道JVM內存結構,如果還知道不同版本的區別加分。

類加載與雙親委派機制,如果知道tomcat打破雙親委派加分。

GC Roots、JVM常用參數(請拿出白紙默寫)、常見的OOM、四大引用,以及經典的案例(localthread)、

四大垃圾收集算法(標記整理、標記清除、複製算法、分代收集算法)

十大垃圾收集器、JVM默認垃圾收集器、各種垃圾收集器的優劣、使用場景

如果你能聊聊CMS、G1、ZGC,面試官會開始眼前一亮

如果你能說出CMS的7個階段(其實不止)、還能說說concurrent model failure、background & foreground collector ,增量更新+寫屏障等等,面試官開始內心波動。

如果你能說出G1中的,Remembered Set、Card Table、Collect Set、young gc和Mix GC的完整流程、SATB+寫屏障、Marking bitmaps和TAMS、Pause Prediction Model,面試官開始扶眼鏡,流口水。

如果你還能說說ZGC中的color point,面試開始高潮

最後。對於JVM的調優的各種參數,各種命令(例如100%cpu的排查、死鎖的檢查)以及常用的JVM的監測的工具(例如 Arthas 等等),還能聊聊對象的分配過程(棧上分配)、JIT、逃逸分析等等,面試官徹底高潮,不能自拔。

總之,JVM這塊是無底洞,大家自行把握尺度。

設計模式

這塊主要核心理解思想,以及不同的設計模式的具體案例(這個很重要,否則只知道概念有p用)

比如。不要只會回答單例模式(當然單例模式也是核心,5種實現方式要會)

適配器模式(Callable)、代理模式(Aop)、裝飾器模式(I/O)、責任鏈模式 (handlerchain)、模板方法模式(tryAcquire)等等不再一一列舉。

BIO/NIO/AIO

這塊也屬於高頻出境。知識點一搜一大把,注意NIO底層的實現,以及使用場景、如果能知道Netty,加分。

源碼拷問靈魂(主打Spring framework,當然還有springboot、dubbo、springcloud、zookeeper等等數不清的源碼 )

業界流傳,不會spring就不要做java開發了。你說這塊是不是要問到死?

以spring爲例,(說實話我都不知道應該怎麼寫這些知識點,因爲系統實在太龐大),我舉一些基礎部分:

一些非技術的問題(例如對spring的理解。這個沒有標準答案,但絕對能聽出你的功底)

先來Spring-Aop

比如:Spring-Aop的底層原理(開啓註解的原理),如何實現的,爲什麼jdk代理要用接口(不要告訴我這是規範)、aop失效場景以及原因,spring是用哪個後置處理器完成aop的,aop與aspectj有什麼關係,aop在spring中的流程(這個絕的可以加分,不要簡單認爲spring就實例化bean以後做aop這麼簡單)、Spring中如何設置aop暴露,aop的使用場景、如果你還能說說cglib底層用的asm,面試官直接高潮。aop相對於還是比較簡單的入門,一般也比較喜歡問aop

接下來就是無底洞的Spring-context、spring-bean、spring-core的版塊了。也就是傳說中的IOC

比如:IOC的生命週期(這個可以回答到死、從this()方法開始到refresh()方法結束,好像這麼說後面的問題都在裏面了。當然百度糊弄一下說個大概面試官也懂)、說說spring的常見擴展點(這個可以直接問穿,大家自行學習,什麼你不知道擴展點?)、spring的 ConfigurationClassPostProcessor 幹了一些什麼事情(可以直接問穿,比如@configuration註解的底層、@Import三種情況的處理、spring如何解析bean的等等,什麼你不知道這個類?)、Spring中的@Autowired和 @Resource(別告訴我什麼bytype,一看就是百度的)、Spring中的循環依賴(爲什麼要這樣設計)、Spring中的bean的創建流程、Spring中的生命週期的回調、Spring中的5個核心後置處理器都做了什麼、說說Spring中的factorybean等等。不再一一列舉。

你以爲Spring IOC結束了?不好意思。Mybatis是如何和Spring整合的(核心@MapperScan底層原理)

在接下來是Spring-webmvc、spring-tx、spring-cache、spring schedule

比如:說說Springmvc中父子容器(什麼你寫了這麼多@controller@service@MapperScan還不知道父子容器?)、springMVC的請求流程等等、spring的事務的7種傳播方式、底層的實現、Spring事務失效的場景以及原因、spring中的定時任務原理、spring中的緩存用過嗎?等等

在接下來是Springboot,

比如Springboot中的watch機制瞭解嗎?springboot自動裝配了解嗎?Springboot啓動流程瞭解嗎?

好吧,我不想再寫了。

總之一句話。源碼是最能看功底的。這一塊大家各自看命吧,說好了面試官直接高潮。

大家平時一定要養成看源碼的好習慣!

Mysql組合拳

說實話這塊其實也可以問到死,但畢竟不是做DBA。

大家自行百度一堆。比如innodb底層的頁結構,比如隔離級別底層實現(MVCC與鎖)

Redis 組合拳

大家看敖丙。再看看redis底層的源碼實現即可。

分佈式事務與微服務架構設計

這塊也的核心是場景設計、較靈活

基本的知識點有: CAP理論、BASE理論、Paxos & Raft & ZAB 一致性算法、2PC、3PC、TCC、最終一致性、 Seata等等,重點在於理解。

MQ消息隊列

這塊也的核心是場景設計、較靈活,以及大家針對一個MQ把底層原理了解清楚即可。

算法組合拳

首當其衝的就是各種排序算法,必須熟練背誦、各種時間複雜度空間複雜度、如果你還能知道不同排序算法的優化手段,面試官會高潮。

其此是海量數據的問題,例如topK的問題,無非就是基於海量數據上的存儲,處理,操作。海量就是數據量太大。導致要麼無法再較短時間解決,要麼是數據太大,無法一次性裝入內存。

解決方案:

針對時間:可以採取巧妙的算法搭配合適的數據結構,如Bloom filter、Hash、bit-map、Heap、數據庫索引或者倒排索引、Trie樹針對空間:無非就是大而化小,分而治之(hash映射),不就是規模大嘛,我就化成小的,各個擊破。

如果還能知道Roaring Bitmap——解決BitMap空間稀疏問題,面試官會高潮

最後就是JDK底層如何實現排序,如果能聊聊DualPivotQuicksort和Timsort,面試官會再次高潮。

還有很多雜項

比如:HTTPS、TCP三次握手 四次揮手、負載均衡算法、各個JDK版本的特性、常見linux命令、CDN(這個是阿里某個bu據說必問的問題,很神奇)、分庫分表、tomcat的底層原理、以及JDK組合拳(例如==與equals區別、stringbuffer與Stringbuilder區別(這個其實也能問深入)、static和final關鍵詞、面向對象的四大特點)、cookie與session、XSS與csrf、DNS解析過程等等。

總結一下,這些問題大家可以根據自己投的bu以及問問內推學長學姐,面試官有沒有特別重視的板塊,能更有針對性的複習。但以上問題屬於基本的必考題,還是要熟練掌握爲好。當然準備越充分越好,以上也只是我挑選了一些我認爲最核心的問題,還有很多其他知識點,完整知識點可以看敖丙。

第五部分:offer的選擇

對於offer的選擇,在和許多人聊完,我覺得基本上有這樣一個大原則:

能去大廠就去大廠,能去核心就去核心。

說着是很容易,但事實上,我們遇到的選擇可能會非常糾結,我說一下,一些特殊情況的選擇,供各位參考

ps。以下比較是在崗位相同的情況,至於什麼是大廠,什麼是小廠,什麼是核心,我相信你們能懂的。

超大廠非核心 與 小廠核心 ,選擇超大廠非核心。超大廠非核心 與 大廠核心,選擇大廠核心。大廠非核心 與 小廠核心,選擇大廠非核心。

差不多是這個情況。當然,你還可以考慮一下其他的因素,比如是否考慮轉正,對於城市是否有要求等等。

總結一下,實習就是來學習的!不要害怕選擇,正如寫在前面的話說的那樣,因爲你能學到多少,取決於你,而且一定要去實習,不要以爲不在大廠就學不到東西。總之一句話,就是幹!

第六部分:一些其他感想你要相信面試中個人實力固然重要,但緣分也很重要。所以你沒有拿到offer並不一定代表你不優秀。競爭真的很激烈,因此需要加倍努力,要相信天道酬勤。不要輕易更換目標,下定決心後就往死裏幹。你不是一個人在戰鬥,要學會分享,多和大牛交流。自學能力很重要,經常討論討論,學會提問。生活不只有工作和代碼,也有生活本身。要有獨立之精神,自由之思想,不要盲從大流。永遠不要放棄,絕望之爲虛妄,正與希望相同。第七部分:總結

2020年,雖然開了一個不怎麼樣的頭,但我相信一切都會好起來的,就像這次艱難的實習面試,困難終究會過去,希望終將到來,一切都將是新的開始,這也是我人生的第一篇寫的這麼正式的wiki哈哈,以後應該要經常寫wiki了(猜猜我最終去哪裏了嘿嘿),希望多年以後還能不忘初心,好好做一個合格的程序員~

感謝一路以來幫助我的朋友,甚至有些朋友只是聊天羣裏素不相識的熱心人。

感謝大廠爸爸們給了我好好學習的機會

感謝自己沒有放棄,堅持到現在。

也祝所有努力拼搏的小夥伴都能拿到自己嚮往的offer!

寫在最後的話

機會遍地都是,但是能不能抓住,就要看你是否做好了準備了。

整個文章光是我排版都花了不少時間,更不用說讀者背後耗費的經歷了,大家可以看到一個優秀的仔是怎麼準備一場春招或者秋招的,社招的朋友也一樣,就是應該這樣,不打沒把握的仗,你準備越充分,你勝率就越大,給你的回報也就越大。