?前言
????????四月份的時(shí)候因?yàn)閾Q工作的緣故,陸續(xù)參加了華為、螞蟻、字節(jié)跳動(dòng)、PDD、百度、Paypal的社招面試,除了字節(jié)跳動(dòng)流程較長(zhǎng),我主動(dòng)結(jié)束面試以外,其他的都順利拿到了Offer。
最近時(shí)間稍微寬裕點(diǎn)了,寫(xiě)個(gè)面經(jīng),希望對(duì)大家找工作有所幫助。
面試體驗(yàn)
下面就是我各家公司面試的一個(gè)體驗(yàn)
華為
1.簡(jiǎn)歷投遞方式:在BOSS直聘上聯(lián)系的華為HR。
2.線上筆試:在正式面試之前,會(huì)有線上筆試環(huán)節(jié),3道算法題,難易程度由淺入深,做出來(lái)兩道基本就沒(méi)問(wèn)題了。
3.一面:視頻面試,這輪面試會(huì)有兩個(gè)面試官,每個(gè)面試官大概會(huì)面試45分鐘,面試內(nèi)容偏向Java基礎(chǔ)為主;最后會(huì)寫(xiě)個(gè)算法題,不過(guò)也不復(fù)雜。
4.二面:這輪主要是幾個(gè)領(lǐng)導(dǎo)一起電話面試,可能會(huì)問(wèn)一些項(xiàng)目相關(guān)的內(nèi)容,不過(guò)更多是框架相關(guān)的,不會(huì)涉及到很底層的技術(shù)細(xì)節(jié)。
5.HR面試:溝通一下職級(jí)和薪資情況,華為的薪資是由基本工資和績(jī)效工資組成的,然后年終可能是2個(gè)月,我嘗試去argue了一下薪資,但是好像并沒(méi)有什么卵用。
總結(jié):華為面試官和HR都很Nice,整體面試難度中規(guī)中矩,都是偏重于基礎(chǔ)和簡(jiǎn)單的算法,另外面試流程也很快,基本上兩周之內(nèi)結(jié)束沒(méi)問(wèn)題。不過(guò)現(xiàn)在華為社招基本是OD,也就是掛靠到外企德科那邊,不是正式員工,所以日后升職加薪可能會(huì)有所影響,這點(diǎn)大家需要自己考慮下。
螞蟻金服
1.簡(jiǎn)歷投遞方式:朋友直接內(nèi)推的,內(nèi)推過(guò)后一周之內(nèi)就聯(lián)系面試了。
2.一面:線上電話面試,杭州打來(lái)的,主要是介紹下項(xiàng)目,他會(huì)根據(jù)項(xiàng)目中的技術(shù)點(diǎn),進(jìn)行一些討論。印象比較深的是,當(dāng)時(shí)我們討論下分布式一致性的解決方案,但感覺(jué)他對(duì)我的回答不太滿意,哈哈。最后會(huì)發(fā)一個(gè)鏈接過(guò)來(lái)做題,題目主要考察Java多線程的使用,我當(dāng)時(shí)的題目是在某種場(chǎng)景下找到最快的支付方式。
3.二面:上海打來(lái)的電話面試,這輪是主管面試,也是項(xiàng)目為主,然后拓展開(kāi)去很多基礎(chǔ)問(wèn)題,比如分布式鎖、分布式一致性、事物、Java線程等等。這輪沒(méi)有做題,聊了大概一個(gè)小時(shí),就結(jié)束了。
3.三面:這次是2輪面試官的主管來(lái)面試,讓我直接去上海螞蟻Z空間面試。這輪的話,主要是講項(xiàng)目或者是說(shuō)更宏觀一點(diǎn)的東西,沒(méi)有具體技術(shù)細(xì)節(jié)。
4.HR面試:因?yàn)槲颐嬖嚨腜6,所以3輪過(guò)后就直接HR面試了,HR側(cè)重阿里味的考察,比如樂(lè)觀、皮實(shí)等等。
總結(jié):面試難度適中,流程基本上一周一面,整體下來(lái)一個(gè)月,當(dāng)然不包括后續(xù)的背調(diào)、體檢之類的,因此如果要面試阿里,可以提前一些開(kāi)始面試,然后一邊面試一邊復(fù)盤(pán)總結(jié)。
PDD
1.簡(jiǎn)歷投遞方式:BOSS直聘找到pdd HR。
2.一面:視頻面試。前半小時(shí)聊項(xiàng)目,后半小時(shí)做題。
3.二面:視頻面試。前半小時(shí)聊項(xiàng)目,后半小時(shí)做題。
4.三面:視頻面試。前半小時(shí)做題,后半小時(shí)聊項(xiàng)目。
5.HR面試:確定薪資,因?yàn)镻DD的強(qiáng)度非常大,大家可以大膽一點(diǎn)要薪資,不然進(jìn)去以后后悔就晚了。
總結(jié):PDD的面試流程非常簡(jiǎn)單粗暴,就是做題加上聊項(xiàng)目,一半一半,題目難度基本是Leetcode上的Medium難度,我面試下來(lái)也沒(méi)有碰到很偏很怪的題目,面試準(zhǔn)備的時(shí)候,把Leetcode上面常考的200題刷一刷就沒(méi)問(wèn)題了。雖然最后沒(méi)有去PDD,但是PDD的面試官和HR都給我留下很好的印象,面試流程很舒服,就像和朋友交流一樣;PDD的流程很快,大概兩周之內(nèi)出結(jié)果,因?yàn)椴煌镜牧鞒滩灰粯樱琀R那邊一直等了我好幾周,可以讓我拿到其他Offer了再回復(fù)她,這點(diǎn)上真的特別感激。
百度
1.簡(jiǎn)歷投遞方式:BOSS直聘找到HR。
2.一面:視頻面試。分享項(xiàng)目,然后問(wèn)一些技術(shù)細(xì)節(jié),主要偏向Java基礎(chǔ)、緩存、分布式這塊。
3.二面:視頻面試。這輪和上輪差不多,不過(guò)會(huì)問(wèn)更多的技術(shù)細(xì)節(jié),讓我在線寫(xiě)了一個(gè)生產(chǎn)者消費(fèi)者模式,還有一個(gè)算法題。
4.三面:視頻面試。主管面試,比較輕松一些,聊聊工作、聊聊規(guī)劃就完了。
5.HR面試:確定薪資,百度的薪資組成是Base加上股票。如果有其他公司的Offer,可以大膽argue一下,HR可能會(huì)有各種理由說(shuō)不能加了,但是一定要堅(jiān)持argue,我體驗(yàn)下來(lái),argue的空間還是很大的。
總結(jié):面試側(cè)重于純技術(shù),所以關(guān)于技術(shù)細(xì)節(jié),一定要搞清楚弄明白;至于算法,百度考察的不深。面試流程很快,大概一周多就結(jié)束了。
經(jīng)驗(yàn)總結(jié)
多家面試總結(jié)下來(lái),考察的范圍都很廣,包括基礎(chǔ)知識(shí)、項(xiàng)目和算法。
基礎(chǔ)知識(shí)這塊,需要花大量時(shí)間準(zhǔn)備每一個(gè)細(xì)節(jié),知其所以然,這樣才能面試的時(shí)候問(wèn)起來(lái),都能頭頭是道。比如Java的AQS原理,多線程,JVM內(nèi)存等,框架的話,有Spring,MySQL、Redis、Kafka、ES、ZK等,都要十分熟悉。
項(xiàng)目,阿里比較注重項(xiàng)目,所以不僅要熟悉項(xiàng)目做了什么事情,而且要提煉出項(xiàng)目中的閃光點(diǎn)或者說(shuō)不一樣的地方,為什么要選擇這種技術(shù)、架構(gòu)怎么設(shè)計(jì)、以后如何擴(kuò)展、出問(wèn)題了怎么定位等等;這些在面試之前都要想清楚。
算法,這點(diǎn)沒(méi)的說(shuō),就是要多刷題。面試了這么多公司,除了阿里,其他公司的每一輪都會(huì)要求做算法題,所以在面試之前要對(duì)各種常見(jiàn)算法了然于心,比如DFS、BFS、樹(shù)、貪心算法、常見(jiàn)DP等等,有時(shí)間的話多去刷刷題找感覺(jué)。
面試題分享
這部分分享一下我在面試準(zhǔn)備過(guò)程中,以及面試時(shí)遇到的??蓟A(chǔ)題,大家可以針對(duì)題目復(fù)習(xí)一下。所有的面試題及答案我都已經(jīng)整理成PDF,?資料鏈接:駱駝祥子思維導(dǎo)圖 - GitMind?
1.Java基礎(chǔ)
1.1 Hashmap 與 concurrentHashMap (重點(diǎn))
1.2 集合相關(guān)問(wèn)題
1.3 Java 泛型的理解
1.4 跳表(ConcurrentSkipListMap)的查詢過(guò)程是怎么樣的,查詢和插入的時(shí)間復(fù)雜度?
1.5 java 字節(jié)流 字符流
1.8 包裝類型和基本類型比較問(wèn)題
1.9 為什么重寫(xiě)equals和hashcode
1.10 stringBuilder和stringBuffer的區(qū)別
1.11 Java序列化的原理
1.11 Java8、9、10、11的一些新特性介紹
1.12 java中四種修飾符的限制范圍。
1.13 Object類中的方法。
1.14 淺拷貝 深拷貝
1.15 接口和抽象類的區(qū)別,注意JDK8的接口可以有實(shí)現(xiàn)。
1.16 動(dòng)態(tài)代理的兩種方式,以及區(qū)別。
1.16 傳值和傳引用的區(qū)別,Java是怎么樣的,有沒(méi)有傳值引用。
1.17 一個(gè)ArrayList在循環(huán)過(guò)程中刪除,會(huì)不會(huì)出問(wèn)題,為什么。
1.18 Exception和Error區(qū)別
1.19 new關(guān)鍵字和newinstance()方法
1.20 Map、List、Set 分別說(shuō)下你知道的線程安全類和線程不安全的類
1.21 Java防止SQL注入
1.22 反射原理及使用場(chǎng)景
1.23 static Vs Final ? 如何讓類不能被繼承
1.24 內(nèi)存泄露??jī)?nèi)存溢出?
1.25 重寫(xiě)Vs重載
1.26 Lambda表達(dá)式實(shí)現(xiàn)
1.27 ClassNotFoundException和NoClassDefFoundError的區(qū)別
2. 并發(fā)、多線程
2.1 volatile 關(guān)鍵字 原理
2.2 對(duì)java中鎖的理解
2.3 悲觀鎖 樂(lè)觀鎖
2.4 對(duì)CAS的理解,java中的CAS,如何不用unsafe實(shí)現(xiàn)CAS
2.5 java 線程創(chuàng)建方式
線程run和start的區(qū)別??jī)纱蝧tart同一個(gè)線程會(huì)怎么樣?
2.6 Java線程池的原理?線程池有哪些?線程池參數(shù)是什么?
2.7 ThreadLocal及其應(yīng)用場(chǎng)景
2.8 對(duì)線程安全的理解
2.9 get需要加鎖么,為什么?
2.10 Lock的底層原理。synchronized、Lock、ReentrantLock、ReadWriteLock。
2.11 AtomicInteger怎么實(shí)現(xiàn)原子修改的?
2.11 分布式環(huán)境下,怎么保證線程安全。
2.12 產(chǎn)生死鎖的四個(gè)必要條件?
2.13 如何中斷線程
2.14 線程的狀態(tài)都有哪些。
2.15 wait、notify、notifyAll、await、signal、sleep、yield
2.16 Callable和Future的了解。
2.17 synchronized關(guān)鍵字的用法,優(yōu)缺點(diǎn)。
2.18 可重入鎖的用處及實(shí)現(xiàn)原理,寫(xiě)時(shí)復(fù)制的過(guò)程,讀寫(xiě)鎖,分段鎖
2.19 ABC三個(gè)線程如何保證順序執(zhí)行。
2.20 雙線程交替打印奇偶 (阿里)
3. JVM
3.1 常見(jiàn)GC算法、 CMS收集器、G1
3.2 jvm內(nèi)存模型 && Java內(nèi)存模型
3.3 怎么判斷對(duì)象可被回收?GC 可達(dá)性分析中哪些算是GC ROOT?
3.4 eden survivor區(qū)的比例,為什么是這個(gè)比例,eden survivor的工作過(guò)程。
3.4 fullgc是否可以回收方法區(qū)
3.5 什么對(duì)象會(huì)進(jìn)老年代? 為什么新生代使用復(fù)制算法?
3.6 被GC判斷為"垃圾"的對(duì)象一定會(huì)回收嗎
3.7 強(qiáng)制young gc會(huì)有什么問(wèn)題?
3.8 類加載的過(guò)程 Java為什么要設(shè)計(jì)雙親委派模型?
3.9 什么時(shí)候會(huì)觸發(fā)minor gc,什么時(shí)候會(huì)觸發(fā)full gc?
3.10 G1和ZGC的區(qū)別
3.12 你知道強(qiáng)引用、弱引用和軟引用嗎? GC對(duì)他們執(zhí)行怎樣的操作。
3.13 JVM方法棧的工作過(guò)程,方法棧和本地方法棧有什么區(qū)別。
3.14 JVM的棧中引用如何和堆中的對(duì)象產(chǎn)生關(guān)聯(lián)。
3.15 逃逸分析技術(shù)。
3.16 Java是否可以GC直接內(nèi)存。
3.17 常用的JVM調(diào)優(yōu)參數(shù)。
3.6 具體的性能調(diào)優(yōu)步驟嗎?fullgc的時(shí)候會(huì)導(dǎo)致接口的響應(yīng)速度特別慢,該如何排查和解決。
3.18 dump文件的分析。
3.19 Java有沒(méi)有主動(dòng)觸發(fā)GC的方式
3.20 假如現(xiàn)在在同一臺(tái)機(jī)器上開(kāi)兩個(gè)java項(xiàng)目,有幾個(gè)java虛擬機(jī)?
3.21 javac編譯期工作流程
4. Spring
4.1 spring IOC 過(guò)程
4.2 循環(huán)依賴怎么解決的
4.3 spring AOP,動(dòng)態(tài)代理是怎么實(shí)現(xiàn)的
4.4 spring BeanDefinition作用
4.5 spring @Autowired (@Resource, 類似)實(shí)現(xiàn)原理
4.6 bean的生命周期
4.7 Bean的默認(rèn)作用范圍是什么?其他的作用范圍?
4.8 Spring的單例是怎么實(shí)現(xiàn)的?
4.11 SpringMVC不同用戶登錄的信息怎么保證線程安全的?
4.12 Spring用了哪些設(shè)計(jì)模式。
4.13 Spring注入bean的方式。
4.14 什么是IOC,什么是依賴注入。
4.15 Spring具有什么特點(diǎn)(IOC和AOP)
4.16 幾種scope區(qū)別,aop實(shí)現(xiàn)有哪幾種實(shí)現(xiàn),
4.17 spring的事務(wù)及實(shí)現(xiàn)模式
4.19 對(duì)Spring、SpringMVC、springBoot理解
4.20 @transactional注解在什么情況下會(huì)失效,為什么。
4.21 SpringMVC的Controller是如何將參數(shù)和前端傳來(lái)的數(shù)據(jù)一一對(duì)應(yīng)的。
4.23 Spring如何維護(hù)它擁有的bean。
4.24 自定義注解的實(shí)現(xiàn)。
4.25 如何自己設(shè)計(jì)IOC框架
4.26 Quartz是如何完成定時(shí)任務(wù)的。
4.18 servlet的生命周期,怎么判斷是get請(qǐng)求還是post請(qǐng)求,后臺(tái)實(shí)現(xiàn)session共享的方法。Java web過(guò)濾器的生命周期?過(guò)濾器和攔截器的區(qū)別。
4.19 BeanFactory 和 FactoryBean 的區(qū)別
4.20 Spring中配置id或name相同的Bean可能引發(fā)的問(wèn)題及解決方案
4.21 防止Web表單重復(fù)提交的方法
5. 消息中間件
5.1 kafka有哪些組件,kafka controller選舉過(guò)程,kafka leader重選舉過(guò)程
5.2 kafka 最早是為了解決什么問(wèn)題設(shè)計(jì)的
5.3 為什么kafka用zookeeper來(lái)存儲(chǔ)metadata,而不是用db來(lái)存儲(chǔ)
5.4 kafka 只有一次生產(chǎn) 只有一次消費(fèi)怎么做
5.5 kafka的消費(fèi)模式?kafka怎么做有序消費(fèi)?kafka 重消費(fèi)解決?消息丟失怎么解決?
5.6 Kafka的Replicas的作用?
6. 算法
6.1 B+樹(shù)
6.2 hash和B+樹(shù)的區(qū)別?分別應(yīng)用于什么場(chǎng)景?哪個(gè)比較好?
6.3 紅黑樹(shù)了解么,時(shí)間復(fù)雜度? 五個(gè)特性
6.4 堆排序的時(shí)間復(fù)雜度
6.5 快速排序,堆排序,插入排序
6.6 一致性Hash算法,一致性Hash算法的應(yīng)用