大三、研二的秋招備戰路線(Java、大數據)

 

一、寫作背景

二、秋招的意義

三、不同水平的同學備戰秋招的策略(案例)

四、部分面試題整理

五、準備過程中的注意事項

六、針對簡歷複習

 

 

一、寫作背景

1.分享經驗。從去年五月份到今年五月份,我面試了n家公司,也收了(n/2+10)家的offer,經歷了兩個春招一個秋招,其中有騰訊、今日頭條、京東等offer。通過這篇文章分享一些經驗,讓後面的同學少走彎路。

 

2.解決問題。我有自己的學習羣和知識星球,秋招快到了,避免不了被問關於秋招備戰的問題。通過這篇文章把我自己能想到的路線和方法系統化先輸出出來,以便於精細化提問,也爲我自己節省時間。

 

 

二、秋招的意義

1.秋招對於大企業是一場人才儲備的戰役,只有相對較大的企業纔有秋招這個概念,它們有資本和資源花費大量精力進行宣傳面試,可以提前發offer,坐等你畢業來上班。

 

2.對於學生來說,秋招是一場大型的招聘會,可能是這輩子離大廠最近的,機會最多的,也是唯一一次有精力面對這麼多大廠的面試。

 

3.秋招offer在手,畢業時間我有。秋招拿了offer之後,對於你後面的面試也好,玩也好,都是起到非常關鍵的作用。至少心理負擔不會那麼大,面試起來也會更上手一次,不急不躁,玩起來也嗨,沒有就業壓力,畢業之前的時間隨意安排。

 

 

三、不同的同學備戰秋招的策略

想要在秋招拿到offer,記住以下三點,接下去的案例都圍繞這三點:

 

1.拿到足夠多的面試機會, 別讓自己的才華無處施展。

2.根據自己的簡歷形成系統性的知識,在面試中佔據主動地位。

3.成不驕,敗不餒。不斷地從面試中總結經驗,補自己的知識盲區。

 

案例1

 

有小公司Java實習經驗,參與過兩個項目的開發,算法不太行,基礎一般,有大數據基礎,自己做了個大數據項目。

 

目標:秋招想收到大數據offer,最好大廠。

 

分析:項目是長板,算法是短板,其他正常。所以要用最短時間把項目補紮實,成爲優勢,算法逐漸拉上來,其他時間撲理論基礎上。

 

學習路線:

1.先把自己手頭上的Java分佈式項目弄明白,對其中的技術棧以及業務進行深入瞭解,並自己整理項目中的難點和亮點,最終能漂漂亮亮的寫在簡歷上。先熟悉手頭項目,一方面項目是面試的敲門磚,沒有項目的簡歷會顯得空洞,有項目可以避免項目經驗不足被刷。另一方面,項目在面試中也佔着很大比重,面試官比較喜歡從項目場景切入到理論知識。

 

2.每天安排時間刷算法,劍指offer、牛客leetcode148題,容易的先刷,刷一題整理一題到博客,先懂思路後懂代碼,一天至少1題,爭取重複刷幾遍到會手寫。大廠必問算法,而且大都劍指offer或者leetcode原題或變形題,有些只問思路。所以算法必刷,先刷思路,要整理起來,避免刷過即忘。

 

3.補Java集合源碼、JVM、多線程。不看書,直接去網上搜面試題,最後把高頻的整理了下來,直接剛面試題,藉助博客輔助理解。同樣,懂一題整理一題到博客。(整理的面經我學習羣公告有)大數據崗位也要求Java知識,就算到時大數據面不上,面大廠Java還是妥妥的,會大數據知識可以加分。

 

4.熟悉大數據項目裏的技術棧和流程,理解並整理常見大數據面試題。

 

5.對數據庫、操作系統、計算機網絡常見面試題進行熟悉。因爲這些在面試中不會佔很大比例,而且問來問去也是那幾題,所以放到最後。

 

6.有時間再看相關書籍,系統梳理。因爲準備時間有限,而我的目的又是通過秋招面試,所以都是從面試題開始刷起,零散整理,最後有時間再通過看書系統梳理。

 

7.投遞小廠練手。當準備差不多的時候我就開始投遞簡歷面試小公司,通過這樣去補缺補漏。

 

案例2

 

目前正在公司實習,但已經確定不留在這家公司,打算秋招前夕辭職全身心備戰。

 

目標:大廠的Java或者大數據offer

 

路線:

1.針對目前還在公司實習或者即將去公司實習的同學,如果已經確定不留在該公司,那麼可以「面向簡歷實習」。面向簡歷實習,顧名思義,簡歷上需要什麼就學什麼。公司可以提供的資源就是項目,有文檔給你看,不懂的還有老員工可以幫你講解。你需要快速地瞭解項目所用的技術棧,以及應用的業務場景,儘可能多地去搜集相關資料和看源碼。多聽聽老員工在探討什麼技術難點,以及解決方案是怎麼實施的,不懂的就多問。

 

2.在實習期間估計也只有精力學習項目了,在職期間去刷算法或者補理論基礎不太現實。當把你實習的項目有目的性地喫透之後,就可以全身而退,開始刷算法和補基礎。

 

3.如果要找大數據相關,可以通過基礎視頻入門,自己做一兩個項目,把簡歷寫好。其餘的可以參考案例1的學習路線

 

 

案例3

 

懂點Java基礎,有學校課設的管理系統項目,懂基本的數據結構。

 

目標:秋招能進一個知名的大廠做Java。

 

規劃路線:

1.先用一些時間補1到2個項目,技術棧要相對好一些,這樣能保證有面試大公司的機會和進小公司的機會。

 

2.當你能把相對較好的項目寫在簡歷上,並且懂一部分技術棧的原理,那麼先暫停對項目的學習,轉戰Java。先從Javase開始,到JVM,最後併發編程。se和JVM理論較多,先記住能理解的,再就是理解性的背,面試前才機械性記憶。併發編程可以從常見的多線程實現開始熟悉,自己敲敲常見的多線程實現demo,以及常用的幾個線程池,再去比較每個實現方法的優缺點,參數。再由此切入到線程安全,併發鎖等等。記得整理!

 

3.由於數據結構算法基礎不是很紮實,可以先從常見的7大選擇,8大排序開始熟悉,儘量能手寫代碼。再就是刷劍指offer,統一先刷實現思路,遇到能理解的代碼實現也可以記住,不然只記思路也可以。每天刷,記得整理!

 

4.回過頭深入理解項目的技術棧,常見的技術棧面試題,項目的業務場景怎麼樣,技術棧怎麼和業務關聯,可以找出哪些實現難點,有哪些可以當亮點。

 

5.投遞小公司,收到面試通知之後刷數據庫、操作系統等面試題。

 

 

案例4

 

非科班零基礎。

 

目標:秋招儘量找份開發工作。

 

先看看Java基礎視頻入門,然後補項目、適當地補點Java基礎,懂一些基本的JVM和多線程,數據結構和算法只看基本的排序和選擇。當達到案例二的水平之後可以走它的學習路線進行進階。

 

案例5

 

 

大三或研究生,機器學習或者其他方向,技術棧主要是Python,算法基礎還行,有個Python小項目。由於機器學習競爭激烈,但自己又沒核心競爭力,走Python後臺或者爬蟲崗位需求少。

 

目標:秋招找份大廠大數據開發或者後臺開發

 

學習路線:

1.由於已經會Python語言了,所以學Java會比較快。可以快速地過一遍Java基礎。

 

2.根據想走的方向針對性去準備1至2個項目,然後熟悉。可以參考案例1的學習路線去準備算法和基礎。

 

3.把你的Python項目也寫上,做大數據或者Java會Python也是加分的。

 

總結

 

 

秋招 = 項目 + 語言基礎 + 計算機基礎 + 算法 + 軟實力

 

爭取在項目中有:

微服務:SpringCloud、SpringBoot、Dubbo等

 

分佈式服務框架:Zookeeper等

 

消息隊列:Kafka、RabbitMQ、RocketMQ等

 

內存數據庫:Memcached、Redis等

 

分佈式搜索引擎:Solr、Lucene、ES等

 

大數據框架:Hadoop、Hive、Spark等

 

語言基礎:

Javase、集合源碼、JVM、多線程、IO等

 

計算機基礎:

數據庫、計算機網絡、操作系統

 

算法:

基本的排序和選擇算法、劍指offer、牛客148題Leetcode等

 

 

四、部分面試題整理

 

Java:

Java散列表,樹對應的容器類,hashmap如何解決衝突

Java實現生產者和消費者的三種方法

init方法與clinit方法的區別

Java中的引用

Java對象的創建過程

Java中創建子類實例時會創建父類實例?

Java的類加載機制 爲什麼會出現鎖機制?

抽象類和接口的區別

雙親委派模型:啓動加載器、擴展加載器、應用程序加載器

重載與重寫

Java的類型擦除

簡述Java Object類中的方法有哪些

char可以存儲漢字嘛?

抽象類和接口的區別

靜態分派與動態分派

HashMap與HashTable的區別

什麼時候使用HashMap?它有什麼特點?

HashMap的基本原理及內部數據結構

HashMap的put和get操作

簡述Java中的深拷貝與淺拷貝,C++中的淺拷貝和深拷貝

解釋一下static塊和static變量的執行順序

equals()的重寫規則

Java中如何創建線程?

JDK1.8新特性

 

JVM:

JVM內存佈局

JVM垃圾回收機制

JVM垃圾回收算法

哪些對象在老年代?

從年輕代到老年代執行的時間以及發生轉移的場景

爲什麼存在GC?

簡單可達性分析

Minor GC安全檢查

垃圾回收器

引用記數法和可達性算法

類加載機制過程

雙親委派模型

雙親委派機制

 

Java集合:

排序算法比較

Hashmap是線程安全的嗎?爲什麼?

ArrayList與LinkedList區別

HashMap、LinkedHashMap和TreeMap

冒泡排序的優化以及快排過程及優化

紅黑樹

JDK7與JDK8中hashmap的區別

hashmap的初始容量爲什麼設置爲16?

平衡二叉樹的插入刪除操作

 

併發編程:

鎖分段技術、ConcurrentHashMap、擴容

Java同步線程有哪些方式?

volatile 和 synchronized的區別

講一下同步異步(進程和IO)

synchronized和volatile的區別?

線程安全

對象的內存佈局

哪些是線程安全的容器?

ConcurrentHashMap介紹

線程啓動start和run

HashMap爲什麼線程不安全?

簡述Java內存模型的happen before原則

volatile的原理和實現機制 || volatile到底如何保證可見性和禁止指令重排序的?

volatile關鍵字的兩層語義 || 可見性

volatile保證原子性嗎?

volatile能保證有序性嗎?

 

Zookeeper:

Dubbo簡介及以Zookeeper爲註冊中心

Zookeeper的leader選舉過程

2PC and 3PC

簡述Zookeeper。。。watcher

簡介ZAB

簡述paxos算法

Zookeeper如何保證數據的一致性?

敘述ZAB集羣數據同步的過程

Zookeeper中的ACL

Zookeeper底層實現數據一致性

Zookeeper在yarn框架中如何實現避免腦裂的?


大數據:

Kylin:

簡介Kylin

Kylin的工作原理

Kylin的技術框架

Cube、Cuboid 和 Cube Segment

Kylin 對維度表的的要求

Cube的構建過程

全量構建和增量構建的區別

流式構建原理

 

Hive:

Hive內部表與外部表的區別

Hive與傳統數據庫的區別

Hiverc文件

Hive分區

Hive分區過多有何壞處以及分區時的注意事項

Hive中複雜數據類型的使用好處與壞處

hive分桶?

Hive元數據庫是用來做什麼的,存儲哪些信息?

爲何不使用Derby作爲元數據庫?

Hive什麼情況下可以避免進行mapreduce?

Hive連接?

Hive MapJoin?

Hive的sort by, order by, distribute by, cluster by區別?

Hadoop計算框架特性

Hive優化常用手段

數據傾斜整理(轉)

使用Hive如何進行抽樣查詢?

 

Storm:

Storm的可靠性如何實現?包括spout和bolt兩部分

怎麼提高Storm的併發度?

Storm如何處理反壓機制?

Storm中的Stream grouping有哪幾種方式?

Storm的組件介紹

Storm怎麼完成對單詞的計數?

簡述Strom的計算結構

 

Spark:

Spark的運行模式

RDD是如何容錯的?

Spark和MapReduce的區別

說一下Spark的RDD

自己實現一個RDD,需要實現哪些函數或者部分?

MapReduce和Spark的區別

Spark的Stage是怎麼劃分的?如何優化?

寬依賴與窄依賴區別

Spark性能調優

Flink、Storm與Spark Stream的區別(未)

說下spark中的transform和action

RDD、DataFrame和DataSet的區別

Spark執行任務流程(standalone、yarn)

Spark的數據容錯機制

Spark技術棧有哪些組件,每個組件都有什麼功能,適合什麼應用場景?

Spark master使用zookeeper進行HA的,有哪些元數據保存在Zookeeper?以及要注意的地方

driver的功能是什麼?

spark端口

RDD有哪幾種創建方式

map和flatmap的區別

Spark的基本工作流程

 

Hadoop:

MR的Shuffle過程

Yarn的工作機制,以及MR Job提交運行過程

MapReduce1的工作機制和過程

HDFS寫入過程

Fsimage 與 EditLog定義及合併過程

HDFS讀過程

HDFS簡介

在向HDFS中寫數據的時候,當寫某一副本時出錯怎麼處理?

namenode的HA實現

簡述聯邦HDFS

HDFS源碼解讀--create()

NameNode高可用中editlog同步的過程

HDFS寫入過程客戶端奔潰怎麼處理?(租約恢復)

 

kafka:

kafka介紹

Kafka與傳統消息隊列的區別?

kafka的零拷貝

kafka消息持久化和順序讀寫?

 

網絡:

簡述TCP和UDP的區別

七層協議每一層的任務及作用

簡述http狀態碼

簡述http協議與https協議

簡述SSL協議

解析DNS過程

三次握手,四次揮手的過程??爲什麼三握??

 

劍指offer常問:

字符串轉換成整數

鏈表中倒數第K個結點

二維數組中的查找

替換空格

從尾到頭打印鏈表

重建二叉樹

用兩個棧實現隊列

斐波那契數列及變形題

二進制中1的個數

在O(1)時間刪除鏈表結點

調整數組順序使奇數位於偶數前面

反轉鏈表

合併兩個排序的鏈表

樹的子結構

二叉樹的鏡像

順時針打印矩陣

棧的壓入、彈出序列

二叉搜索樹的後序遍歷序列

 二叉樹中和爲某一值的路徑

數組中出現次數超過一半的數字

最小的k個數

連續子數組的最大和

第一個只出現一次的字符

兩個鏈表的第一個公共結點

鏈表中環的入口結點

二叉樹的鏡像

跳臺階

變態跳臺階

矩形覆蓋

從上往下打印二叉樹

二叉搜索樹的第K個結點

 

 

五、準備過程中的注意事項

1.心理壓力大。怕面試,面試怕被懟,一直逃避。面試是一個會上癮的東西,剛開始幾場會比較難受,但不用怕,一個優秀的面試官會讓你有一個舒適的面試體驗,而且面試是一個檢驗自己水平的過程。剛開始可以選擇小公司,即使面的不好也沒事,面上了也不一定去,放輕鬆。

 

2.沉迷學習,無法自拔。秋招已經開始了,自己總想着還沒準備好,想把所有的東西都學完之後再去投。參考過秋招的人都知道,知識是永遠學不完的,永遠沒有準備好的那一刻,當你能把簡歷寫出來的時候就開始投吧。面試不是你很厲害就一定能過的,也有運氣成分在裏面,而且邊面試邊總結會成長很快的。

 

3.無論學習理論,項目,還是算法,一定要邊學邊總結。光輸入看似都會了,輸出纔是王道,不然腦子依然一盤散沙,東拼西湊。面試之前這些平時總結的內容就是你的殺手鐗。

 

4.怕理論懂太多,實操太少。通過以上內容,你會發現我一直強調理論性的東西,無論是項目的學習或者是語言。在校生本來就是以理論分高低,大家都知道面試問這些,但爲什麼總有人回答不上來。實操的話自己在學校敲的跟公司比起來都是小兒科,都得重新學,重要的是先拿到offer。學會把面試和日常學習區分開。

 

5.一定要注重簡歷上的項目。前面提到,簡歷沒有相關項目去支撐你求職的崗位,即使簡歷寫自己的理論多麼強,基礎多麼紮實都是很蒼白無力的。這點我在面阿里的時候喫過虧,前幾天學習羣的一個小兄弟也吃了這個虧。企業說注重理論基礎是建立在有項目的基礎上,而不是隻有理論基礎。

 

6.在簡歷的排版和內容上要好好做文章。正常的面試都是從自我介紹開始,然後面試從上到下瀏覽簡歷,所以你要把你的優點儘量往前面放,而不是把興趣愛好,個人技能這種比較虛的東西放第一第二模塊,而實習經歷,項目經驗放最後。

 

7.實習經歷是否影響秋招?理論上是的,有實習經歷尤其是大廠實習都會在秋招中有優勢的,但這種優勢不是絕對性優勢。實習的目的也是鍛鍊你的動手能力,提高你的工程能力,所以只要能把項目搞定,問題不是很大。但是建議你還是多面試,項目經歷可以補,面試經驗補不了,終歸要出去試試水的,所以要多面試。

 

8.爲什麼零基礎的人學完基礎就馬上學習項目?我在校園招聘的時候,打印了10個簡歷,投了10家,全都拿了offer,當然都是小公司。面試問什麼呢?面向對象的概念,Java的特點等等這些極其基礎的,剩下的都是圍繞着項目問。有些公司面試都沒有直接說有項目那就好辦了,接着問什麼時候能上班,要現場給offer。案例1的人就是我,簡歷有兩個分佈式項目和一個大數據項目。所以我經常跟那些擔心找不到工作的同學說,只要你把項目鼓搗明白,總有公司會要你的,就是大和小的問題。

 

 

六、針對簡歷複習

一直強調把簡歷寫好,那麼怎麼針對簡歷去複習

 

1.面試前夕,打開簡歷,拿一張白紙,把自己當成面試官,手擼思維導圖。從自我介紹開始,然後就是項目介紹,其次就是自己負責的部分以及項目難點。

 

2.技術面試正常兩個部分,一個基礎,另一個項目技術棧。基礎就是網絡,數據結構,算法這些,這些是無論你簡歷上寫不寫都問的。其次就是你簡歷描述的技術棧。

 

3.正常面試官會問你在項目中做了什麼,然後以這個爲點切入進去。

 

舉個例子:我在項目中用了多線程,提高了讀取效率。那麼項目官肯定接着,你如何創建多線程的?我回答:線程池。那你知道創建線程有哪些方法嗎?有哪些線程池嗎?怎麼保證線程安全呢?等等。

 

如果你項目中的問題會把自己問死,也就是挖坑,那我建議你換個。這部分寫的好就是給自己開路,弄不好就自己填坑了。

 

4.項目技術棧來不及複習怎麼辦?打開谷歌搜索一下對應技術棧常問面試題,或者平時多刷牛客網,你就知道哪些題目是高頻的。

 

5.揚長避短。對於不熟的框架,儘量不寫簡歷上,如果寫了並且被面試官問到就直接跟他說這個正在學,用的比較少。正常面試官也有數,你負責的部分用到的技術棧他會問的深一些,這塊自己掂量一下。

 

7.針對基礎,平時多積累。多整理博客也是爲了臨時突擊,像網絡,數據庫,操作系統,問來問去也是那幾題。多看面經幾十遍,不懂原理也能吟。

 

8.針對技術框架,除了基本原理之外,也要準備應用場景。這塊對應屆生來說要求不會很高,社招的話要整理每個原理的應用場景,相對來說會細一點,源碼加分。

 

9.針對算法。算法是貫徹在日常學習的,我刷算法的策略就是理論先上,其次代碼,最後優化。是把所有的算法先刷一遍理論,第二遍再回頭代碼哦,也都有整理思路的。當然,也要準備常用算法,快排,冒泡的手擼代碼

 

大部分還是吹吹思路就可以了,所以我先前面提到了先刷實現思路。

 

10.公司面試題優先。去牛客、看準或拉鉤查對應公司的面試題,這個命中概率比較大。

 

11.公司產品業務準備,最好也看看競品,讓面試官刮目相看。之前面了一家騰訊系的,從它的融資開始講。

 

12.面試官正常從上到下看簡歷,記得布好局。自己面試自己的時候多想想怎麼把上面的知識點不經意的串到你熟悉的知識點。

 

爲什麼說不經意呢?要是你直接跟面試官說,我這個框架不熟,對***比較熟,有點尷尬的。所以要不經意的。

 

當面試官問你hashmap原理的時候,比如說你多線程比較熟,你最後一句提一下它是線程不安全的。又或者你數據結構比較厲害,那就說它是紅黑樹。又或者你對Lambda,JDK1.8一些特性比較熟,那就可以說它是在JDK1.8優化的。

 

平時還是得多整理,面試之前複習一手博客,一手面經,一手面試的思維導圖。

 

最後說一句:抓住學生紅利期,無論機會還是精力都有可能在巔峯時期。

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