?前言
????????四月份的時候因?yàn)閾Q工作的緣故愿险,陸續(xù)參加了華為、螞蟻价说、字節(jié)跳動辆亏、PDD、百度鳖目、Paypal的社招面試扮叨,除了字節(jié)跳動流程較長,我主動結(jié)束面試以外领迈,其他的都順利拿到了Offer彻磁。
最近時間稍微寬裕點(diǎn)了,寫個面經(jīng)狸捅,希望對大家找工作有所幫助衷蜓。
面試體驗(yàn)
下面就是我各家公司面試的一個體驗(yàn)
華為
1.簡歷投遞方式:在BOSS直聘上聯(lián)系的華為HR。
2.線上筆試:在正式面試之前尘喝,會有線上筆試環(huán)節(jié)恍箭,3道算法題,難易程度由淺入深瞧省,做出來兩道基本就沒問題了扯夭。
3.一面:視頻面試,這輪面試會有兩個面試官鞍匾,每個面試官大概會面試45分鐘交洗,面試內(nèi)容偏向Java基礎(chǔ)為主;最后會寫個算法題橡淑,不過也不復(fù)雜构拳。
4.二面:這輪主要是幾個領(lǐng)導(dǎo)一起電話面試,可能會問一些項(xiàng)目相關(guān)的內(nèi)容梁棠,不過更多是框架相關(guān)的置森,不會涉及到很底層的技術(shù)細(xì)節(jié)。
5.HR面試:溝通一下職級和薪資情況符糊,華為的薪資是由基本工資和績效工資組成的凫海,然后年終可能是2個月,我嘗試去argue了一下薪資男娄,但是好像并沒有什么卵用行贪。
總結(jié):華為面試官和HR都很Nice漾稀,整體面試難度中規(guī)中矩,都是偏重于基礎(chǔ)和簡單的算法建瘫,另外面試流程也很快崭捍,基本上兩周之內(nèi)結(jié)束沒問題。不過現(xiàn)在華為社招基本是OD啰脚,也就是掛靠到外企德科那邊殷蛇,不是正式員工,所以日后升職加薪可能會有所影響橄浓,這點(diǎn)大家需要自己考慮下粒梦。
螞蟻金服
1.簡歷投遞方式:朋友直接內(nèi)推的,內(nèi)推過后一周之內(nèi)就聯(lián)系面試了贮配。
2.一面:線上電話面試谍倦,杭州打來的塞赂,主要是介紹下項(xiàng)目泪勒,他會根據(jù)項(xiàng)目中的技術(shù)點(diǎn),進(jìn)行一些討論宴猾。印象比較深的是圆存,當(dāng)時我們討論下分布式一致性的解決方案,但感覺他對我的回答不太滿意仇哆,哈哈沦辙。最后會發(fā)一個鏈接過來做題,題目主要考察Java多線程的使用讹剔,我當(dāng)時的題目是在某種場景下找到最快的支付方式油讯。
3.二面:上海打來的電話面試,這輪是主管面試延欠,也是項(xiàng)目為主陌兑,然后拓展開去很多基礎(chǔ)問題,比如分布式鎖由捎、分布式一致性兔综、事物、Java線程等等狞玛。這輪沒有做題软驰,聊了大概一個小時,就結(jié)束了心肪。
3.三面:這次是2輪面試官的主管來面試锭亏,讓我直接去上海螞蟻Z空間面試。這輪的話硬鞍,主要是講項(xiàng)目或者是說更宏觀一點(diǎn)的東西贰镣,沒有具體技術(shù)細(xì)節(jié)呜象。
4.HR面試:因?yàn)槲颐嬖嚨腜6,所以3輪過后就直接HR面試了碑隆,HR側(cè)重阿里味的考察恭陡,比如樂觀、皮實(shí)等等上煤。
總結(jié):面試難度適中休玩,流程基本上一周一面,整體下來一個月劫狠,當(dāng)然不包括后續(xù)的背調(diào)拴疤、體檢之類的,因此如果要面試阿里独泞,可以提前一些開始面試呐矾,然后一邊面試一邊復(fù)盤總結(jié)。
PDD
1.簡歷投遞方式:BOSS直聘找到pdd HR懦砂。
2.一面:視頻面試蜒犯。前半小時聊項(xiàng)目,后半小時做題荞膘。
3.二面:視頻面試罚随。前半小時聊項(xiàng)目,后半小時做題羽资。
4.三面:視頻面試淘菩。前半小時做題,后半小時聊項(xiàng)目屠升。
5.HR面試:確定薪資潮改,因?yàn)镻DD的強(qiáng)度非常大,大家可以大膽一點(diǎn)要薪資腹暖,不然進(jìn)去以后后悔就晚了汇在。
總結(jié):PDD的面試流程非常簡單粗暴,就是做題加上聊項(xiàng)目微服,一半一半趾疚,題目難度基本是Leetcode上的Medium難度,我面試下來也沒有碰到很偏很怪的題目以蕴,面試準(zhǔn)備的時候糙麦,把Leetcode上面常考的200題刷一刷就沒問題了丛肮。雖然最后沒有去PDD赡磅,但是PDD的面試官和HR都給我留下很好的印象,面試流程很舒服宝与,就像和朋友交流一樣焚廊;PDD的流程很快冶匹,大概兩周之內(nèi)出結(jié)果,因?yàn)椴煌镜牧鞒滩灰粯优匚粒琀R那邊一直等了我好幾周嚼隘,可以讓我拿到其他Offer了再回復(fù)她,這點(diǎn)上真的特別感激袒餐。
百度
1.簡歷投遞方式:BOSS直聘找到HR飞蛹。
2.一面:視頻面試。分享項(xiàng)目灸眼,然后問一些技術(shù)細(xì)節(jié)卧檐,主要偏向Java基礎(chǔ)、緩存焰宣、分布式這塊霉囚。
3.二面:視頻面試。這輪和上輪差不多匕积,不過會問更多的技術(shù)細(xì)節(jié)盈罐,讓我在線寫了一個生產(chǎn)者消費(fèi)者模式,還有一個算法題闸天。
4.三面:視頻面試暖呕。主管面試斜做,比較輕松一些苞氮,聊聊工作、聊聊規(guī)劃就完了瓤逼。
5.HR面試:確定薪資笼吟,百度的薪資組成是Base加上股票。如果有其他公司的Offer霸旗,可以大膽argue一下贷帮,HR可能會有各種理由說不能加了,但是一定要堅(jiān)持argue诱告,我體驗(yàn)下來撵枢,argue的空間還是很大的。
總結(jié):面試側(cè)重于純技術(shù)精居,所以關(guān)于技術(shù)細(xì)節(jié)锄禽,一定要搞清楚弄明白;至于算法靴姿,百度考察的不深沃但。面試流程很快,大概一周多就結(jié)束了佛吓。
經(jīng)驗(yàn)總結(jié)
多家面試總結(jié)下來宵晚,考察的范圍都很廣垂攘,包括基礎(chǔ)知識、項(xiàng)目和算法淤刃。
基礎(chǔ)知識這塊晒他,需要花大量時間準(zhǔn)備每一個細(xì)節(jié),知其所以然逸贾,這樣才能面試的時候問起來仪芒,都能頭頭是道。比如Java的AQS原理耕陷,多線程掂名,JVM內(nèi)存等,框架的話哟沫,有Spring饺蔑,MySQL、Redis嗜诀、Kafka猾警、ES、ZK等隆敢,都要十分熟悉发皿。
項(xiàng)目,阿里比較注重項(xiàng)目拂蝎,所以不僅要熟悉項(xiàng)目做了什么事情穴墅,而且要提煉出項(xiàng)目中的閃光點(diǎn)或者說不一樣的地方,為什么要選擇這種技術(shù)温自、架構(gòu)怎么設(shè)計(jì)玄货、以后如何擴(kuò)展、出問題了怎么定位等等悼泌;這些在面試之前都要想清楚松捉。
算法,這點(diǎn)沒的說馆里,就是要多刷題隘世。面試了這么多公司,除了阿里鸠踪,其他公司的每一輪都會要求做算法題丙者,所以在面試之前要對各種常見算法了然于心,比如DFS慢哈、BFS蔓钟、樹、貪心算法卵贱、常見DP等等滥沫,有時間的話多去刷刷題找感覺侣集。
面試題分享
這部分分享一下我在面試準(zhǔn)備過程中,以及面試時遇到的忱夹澹考基礎(chǔ)題世分,大家可以針對題目復(fù)習(xí)一下。所有的面試題及答案我都已經(jīng)整理成PDF缀辩,?資料鏈接:駱駝祥子思維導(dǎo)圖 - GitMind?
1.Java基礎(chǔ)
1.1 Hashmap 與 concurrentHashMap (重點(diǎn))
1.2 集合相關(guān)問題
1.3 Java 泛型的理解
1.4 跳表(ConcurrentSkipListMap)的查詢過程是怎么樣的臭埋,查詢和插入的時間復(fù)雜度?
1.5 java 字節(jié)流 字符流
1.8 包裝類型和基本類型比較問題
1.9 為什么重寫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 動態(tài)代理的兩種方式累贤,以及區(qū)別叠穆。
1.16 傳值和傳引用的區(qū)別,Java是怎么樣的臼膏,有沒有傳值引用硼被。
1.17 一個ArrayList在循環(huán)過程中刪除,會不會出問題渗磅,為什么嚷硫。
1.18 Exception和Error區(qū)別
1.19 new關(guān)鍵字和newinstance()方法
1.20 Map、List夺溢、Set 分別說下你知道的線程安全類和線程不安全的類
1.21 Java防止SQL注入
1.22 反射原理及使用場景
1.23 static Vs Final 论巍? 如何讓類不能被繼承
1.24 內(nèi)存泄露烛谊?內(nèi)存溢出风响?
1.25 重寫Vs重載
1.26 Lambda表達(dá)式實(shí)現(xiàn)
1.27 ClassNotFoundException和NoClassDefFoundError的區(qū)別
2. 并發(fā)、多線程
2.1 volatile 關(guān)鍵字 原理
2.2 對java中鎖的理解
2.3 悲觀鎖 樂觀鎖
2.4 對CAS的理解丹禀,java中的CAS状勤,如何不用unsafe實(shí)現(xiàn)CAS
2.5 java 線程創(chuàng)建方式
線程run和start的區(qū)別?兩次start同一個線程會怎么樣双泪?
2.6 Java線程池的原理持搜?線程池有哪些?線程池參數(shù)是什么焙矛?
2.7 ThreadLocal及其應(yīng)用場景
2.8 對線程安全的理解
2.9 get需要加鎖么葫盼,為什么?
2.10 Lock的底層原理村斟。synchronized贫导、Lock抛猫、ReentrantLock、ReadWriteLock孩灯。
2.11 AtomicInteger怎么實(shí)現(xiàn)原子修改的闺金?
2.11 分布式環(huán)境下,怎么保證線程安全峰档。
2.12 產(chǎn)生死鎖的四個必要條件败匹?
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)原理怎爵,寫時復(fù)制的過程特石,讀寫鎖,分段鎖
2.19 ABC三個線程如何保證順序執(zhí)行鳖链。
2.20 雙線程交替打印奇偶 (阿里)
3. JVM
3.1 常見GC算法姆蘸、 CMS收集器、G1
3.2 jvm內(nèi)存模型 && Java內(nèi)存模型
3.3 怎么判斷對象可被回收芙委?GC 可達(dá)性分析中哪些算是GC ROOT逞敷?
3.4 eden survivor區(qū)的比例,為什么是這個比例灌侣,eden survivor的工作過程推捐。
3.4 fullgc是否可以回收方法區(qū)
3.5 什么對象會進(jìn)老年代? 為什么新生代使用復(fù)制算法侧啼?
3.6 被GC判斷為"垃圾"的對象一定會回收嗎
3.7 強(qiáng)制young gc會有什么問題牛柒?
3.8 類加載的過程 Java為什么要設(shè)計(jì)雙親委派模型?
3.9 什么時候會觸發(fā)minor gc痊乾,什么時候會觸發(fā)full gc皮壁?
3.10 G1和ZGC的區(qū)別
3.12 你知道強(qiáng)引用、弱引用和軟引用嗎? GC對他們執(zhí)行怎樣的操作哪审。
3.13 JVM方法棧的工作過程蛾魄,方法棧和本地方法棧有什么區(qū)別。
3.14 JVM的棧中引用如何和堆中的對象產(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的時候會導(dǎo)致接口的響應(yīng)速度特別慢把夸,該如何排查和解決。
3.18 dump文件的分析铭污。
3.19 Java有沒有主動觸發(fā)GC的方式
3.20 假如現(xiàn)在在同一臺機(jī)器上開兩個java項(xiàng)目恋日,有幾個java虛擬機(jī)?
3.21 javac編譯期工作流程
4. Spring
4.1 spring IOC 過程
4.2 循環(huán)依賴怎么解決的
4.3 spring AOP嘹狞,動態(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 對Spring、SpringMVC确封、springBoot理解
4.20 @transactional注解在什么情況下會失效除呵,為什么。
4.21 SpringMVC的Controller是如何將參數(shù)和前端傳來的數(shù)據(jù)一一對應(yīng)的爪喘。
4.23 Spring如何維護(hù)它擁有的bean颜曾。
4.24 自定義注解的實(shí)現(xiàn)。
4.25 如何自己設(shè)計(jì)IOC框架
4.26 Quartz是如何完成定時任務(wù)的秉剑。
4.18 servlet的生命周期泛豪,怎么判斷是get請求還是post請求,后臺實(shí)現(xiàn)session共享的方法秃症。Java web過濾器的生命周期候址?過濾器和攔截器的區(qū)別。
4.19 BeanFactory 和 FactoryBean 的區(qū)別
4.20 Spring中配置id或name相同的Bean可能引發(fā)的問題及解決方案
4.21 防止Web表單重復(fù)提交的方法
5. 消息中間件
5.1 kafka有哪些組件种柑,kafka controller選舉過程,kafka leader重選舉過程
5.2 kafka 最早是為了解決什么問題設(shè)計(jì)的
5.3 為什么kafka用zookeeper來存儲metadata匹耕,而不是用db來存儲
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+樹
6.2 hash和B+樹的區(qū)別?分別應(yīng)用于什么場景煤傍?哪個比較好盖文?
6.3 紅黑樹了解么,時間復(fù)雜度? 五個特性
6.4 堆排序的時間復(fù)雜度
6.5 快速排序蚯姆,堆排序五续,插入排序
6.6 一致性Hash算法,一致性Hash算法的應(yīng)用