1. 程式人生 > >Offer經驗分享 - 螞蟻金服、位元組跳動、PDD、百度、華為、Paypal - Java社招面經

Offer經驗分享 - 螞蟻金服、位元組跳動、PDD、百度、華為、Paypal - Java社招面經

> 年中的時候因為換工作的緣故,陸續參加了華為、螞蟻、位元組跳動、PDD、百度、Paypal的社招面試,除了位元組跳動流程較長,我主動結束面試以外,其他的都順利拿到了Offer。 最近時間稍微寬裕點了,寫個面經,希望對大家找工作有所幫助。 ## 面試體驗 下面以時間先後順序,分享下我在不同公司面試的體驗。 ### 華為 簡歷投遞方式:在BOSS直聘上聯絡的華為HR。 1. 線上筆試:在正式面試之前,會有線上筆試環節,3道演算法題,難易程度由淺入深,做出來兩道基本就沒問題了。 2. 1輪面試:視訊面試,這輪面試會有兩個面試官,每個面試官大概會面試45分鐘,面試內容偏向Java基礎為主;最後會寫個演算法題,不過也不復雜。 3. 2輪面試:這輪主要是幾個領導一起電話面試,可能會問一些專案相關的內容,不過更多是框架相關的,不會涉及到很底層的技術細節。 4. HR面試:溝通一下職級和薪資情況,華為的薪資是由基本工資和績效工資組成的,然後年終可能是2個月,我嘗試去argue了一下薪資,但是好像並沒有什麼卵用。 總結:華為面試官和HR都很Nice,整體面試難度中規中矩,都是偏重於基礎和簡單的演算法,另外面試流程也很快,基本上兩週之內結束沒問題。不過現在華為社招基本是OD,也就是掛靠到外企德科那邊,不是正式員工,所以日後升職加薪可能會有所影響,這點大家需要自己考慮下。 ### 螞蟻金服 簡歷投遞方式:朋友直接內推的,內推過後一週之內就聯絡面試了。 1. 1輪面試:線上電話面試,杭州打來的,主要是介紹下專案,他會根據專案中的技術點,進行一些討論。印象比較深的是,當時我們討論下分散式一致性的解決方案,但感覺他對我的回答不太滿意,哈哈。最後會發一個連結過來做題,題目主要考察Java多執行緒的使用,我當時的題目是在某種場景下找到最快的支付方式。 2. 2輪面試:上海打來的電話面試,這輪是主管面試,也是專案為主,然後拓展開去很多基礎問題,比如分散式鎖、分散式一致性、事物、Java執行緒等等。這輪沒有做題,聊了大概一個小時,就結束了。 3. 3輪面試:這次是2輪面試官的主管來面試,讓我直接去上海螞蟻Z空間面試。這輪的話,主要是講專案或者是說更巨集觀一點的東西,沒有具體技術細節。 4. HR面試:因為我面試的P6,所以3輪過後就直接HR面試了,HR側重阿里味的考察,比如樂觀、皮實等等。 總結:面試難度適中,流程基本上一週一面,整體下來一個月,當然不包括後續的背調、體檢之類的,因此如果要面試阿里,可以提前一些開始面試,然後一邊面試一邊覆盤總結。 ### PDD 簡歷投遞方式:BOSS直聘找到pdd HR。 1. 1輪面試:視訊面試。前半小時聊專案,後半小時做題。 2. 2輪面試:視訊面試。前半小時聊專案,後半小時做題。 3. 3輪面試:視訊面試。前半小時做題,後半小時聊專案。 4. HR面試:確定薪資,因為PDD的強度非常大,大家可以大膽一點要薪資,不然進去以後後悔就晚了。 總結:PDD的面試流程非常簡單粗暴,就是做題加上聊專案,一半一半,題目難度基本是Leetcode上的Medium難度,我面試下來也沒有碰到很偏很怪的題目,面試準備的時候,把Leetcode上面常考的200題刷一刷就沒問題了。雖然最後沒有去PDD,但是PDD的面試官和HR都給我留下很好的印象,面試流程很舒服,就像和朋友交流一樣;PDD的流程很快,大概兩週之內出結果,因為不同公司的流程不一樣,HR那邊一直等了我好幾周,可以讓我拿到其他Offer了再回復她,這點上真的特別感激。 ### 百度 簡歷投遞方式:BOSS直聘找到HR。 1. 1輪面試:視訊面試。分享專案,然後問一些技術細節,主要偏向Java基礎、快取、分散式這塊。 2. 2輪面試:視訊面試。這輪和上輪差不多,不過會問更多的技術細節,讓我線上寫了一個生產者消費者模式,還有一個演算法題。 3. 3輪面試:視訊面試。主管面試,比較輕鬆一些,聊聊工作、聊聊規劃就完了。 4. HR面試:確定薪資,百度的薪資組成是Base加上股票。如果有其他公司的Offer,可以大膽argue一下,HR可能會有各種理由說不能加了,但是一定要堅持argue,我體驗下來,argue的空間還是很大的。 總結:面試側重於純技術,所以關於技術細節,一定要搞清楚弄明白;至於演算法,百度考察的不深。面試流程很快,大概一週多就結束了。 ### Paypal 簡歷投遞方式:內推。 1. 1輪面試:視訊面試,2個人輪流面試,時長2個小時。各種Java的細節,從包裝類、多執行緒到分散式、快取等等。每輪都需要做題,Medium難度。 2. 2輪面試:視訊面試。3個人輪流面試,時長3小時,這個就看面試管的風格了,有的偏向於純演算法,有的偏向於基礎。但是時長比較長,需要大家提前準備好。 3. 兩輪面試之後,如果順利的話HR就會去申請Offer,很快就拿到Offer了。 總結:效率很高,面試官也很專業。薪資組成由Base加上股票組成,今年股價漲了不少,所以去年入職的同學賺了不少,哈哈。 ### 位元組跳動 簡歷投遞方式:獵頭 1. 1輪面試:基礎技術面試。不講專案,直接問基礎,包括作業系統、計算機網路、Java基礎、資料庫、快取、分散式等等,問的面很廣。最後寫一道演算法題。 2. 2輪面試:專案和系統設計面試。側重於系統設計,比如設計朋友圈、12306系統等,後面也需要寫演算法題。 3. 3輪面試:可能第二輪沒有表現好,重新安排了面試官接著面試第二輪。這一輪也考察基礎和系統設計,順利通過了。 4. 4輪面試:交叉面試,這輪面試體驗比較糟糕,面試官中途打電話、還處理了個線上的issue,哈哈。 由於當時已經有好幾個Offer,加上面試過程比較長,基本一週一面,所以也不想拖太久了。後面HR約最後一輪技術面的時候,我也直接拒絕了。 總結:位元組的面試是所有面試裡面難度最大的,因為基礎的考察面很廣,而且演算法題不是那種常考的題目,有時候會碰到Hard難度,也都是看運氣了。如果要去面試位元組的話,演算法一定要提前多準備,儘量多刷一些,以防到時連題目都沒見過,要你15分鐘內寫出來也就很難了。 ## 經驗總結 多家面試總結下來,考察的範圍都很廣,包括基礎知識、專案和演算法。 - 基礎知識這塊,需要花大量時間準備每一個細節,知其所以然,這樣才能面試的時候問起來,都能頭頭是道。比如Java的AQS原理,多執行緒,JVM記憶體等,框架的話,有Spring,MySQL、Redis、Kafka、ES、ZK等,都要十分熟悉。 - 專案,阿里比較注重專案,所以不僅要熟悉專案做了什麼事情,而且要提煉出專案中的閃光點或者說不一樣的地方,為什麼要選擇這種技術、架構怎麼設計、以後如何擴充套件、出問題了怎麼定位等等;這些在面試之前都要想清楚。 - 演算法,這點沒的說,就是要多刷題。面試了這麼多公司,除了阿里,其他公司的每一輪都會要求做演算法題,所以在面試之前要對各種常見演算法瞭然於心,比如DFS、BFS、樹、貪心演算法、常見DP等等,有時間的話多去刷刷題找感覺。 ## 面試題分享 這部分分享一下我在面試準備過程中,以及面試時遇到的常考基礎題,大家可以針對題目複習一下。 ### 1. Java基礎 1.1 Hashmap 與 concurrentHashMap (重點) 1.2 集合相關問題 1.3 Java 泛型的理解 1.4 跳錶(ConcurrentSkipListMap)的查詢過程是怎麼樣的,查詢和插入的時間複雜度? 1.5 java 位元組流 字元流 1.8 包裝型別和基本型別比較問題 1.9 為什麼重寫equals和hashcode 1.10 stringBuilder和stringBuffer的區別 1.11 Java序列化的原理 1.11 Java8、9、10、11的一些新特性介紹 1.12 java中四種修飾符的限制範圍。 1.13 Object類中的方法。 1.14 淺拷貝 深拷貝 1.15 介面和抽象類的區別,注意JDK8的介面可以有實現。 1.16 動態代理的兩種方式,以及區別。 1.16 傳值和傳引用的區別,Java是怎麼樣的,有沒有傳值引用。 1.17 一個ArrayList在迴圈過程中刪除,會不會出問題,為什麼。 1.18 Exception和Error區別 1.19 new關鍵字和newinstance()方法 1.20 Map、List、Set 分別說下你知道的執行緒安全類和執行緒不安全的類 1.21 Java防止SQL注入 1.22 反射原理及使用場景 1.23 static Vs Final ? 如何讓類不能被繼承 1.24 記憶體洩露?記憶體溢位? 1.25 重寫Vs過載 1.26 Lambda表示式實現 1.27 ClassNotFoundException和NoClassDefFoundError的區別 ### 2. 併發、多執行緒 2.1 volatile 關鍵字 原理 2.2 對java中鎖的理解 2.3 悲觀鎖 樂觀鎖 2.4 對CAS的理解,java中的CAS,如何不用unsafe實現CAS 2.5 java 執行緒建立方式 執行緒run和start的區別?兩次start同一個執行緒會怎麼樣? 2.6 Java執行緒池的原理?執行緒池有哪些?執行緒池引數是什麼? 2.7 ThreadLocal及其應用場景 2.8 對執行緒安全的理解 2.9 get需要加鎖麼,為什麼? 2.10 Lock的底層原理。synchronized、Lock、ReentrantLock、ReadWriteLock。 2.11 AtomicInteger怎麼實現原子修改的? 2.11 分散式環境下,怎麼保證執行緒安全。 2.12 產生死鎖的四個必要條件? 2.13 如何中斷執行緒 2.14 執行緒的狀態都有哪些。 2.15 wait、notify、notifyAll、await、signal、sleep、yield 2.16 Callable和Future的瞭解。 2.17 synchronized關鍵字的用法,優缺點。 2.18 可重入鎖的用處及實現原理,寫時複製的過程,讀寫鎖,分段鎖 2.19 ABC三個執行緒如何保證順序執行。 2.20 雙執行緒交替列印奇偶 (阿里) ### 3. JVM 3.1 常見GC演算法、 CMS收集器、G1 3.2 jvm記憶體模型 && Java記憶體模型 3.3 怎麼判斷物件可被回收?GC 可達性分析中哪些算是GC ROOT? 3.4 eden survivor區的比例,為什麼是這個比例,eden survivor的工作過程。 3.4 fullgc是否可以回收方法區 3.5 什麼物件會進老年代? 為什麼新生代使用複製演算法? 3.6 被GC判斷為"垃圾"的物件一定會回收嗎 3.7 強制young gc會有什麼問題? 3.8 類載入的過程 Java為什麼要設計雙親委派模型? 3.9 什麼時候會觸發minor gc,什麼時候會觸發full gc? 3.10 G1和ZGC的區別 3.12 你知道強引用、弱引用和軟引用嗎? GC對他們執行怎樣的操作。 3.13 JVM方法棧的工作過程,方法棧和本地方法棧有什麼區別。 3.14 JVM的棧中引用如何和堆中的物件產生關聯。 3.15 逃逸分析技術。 3.16 Java是否可以GC直接記憶體。 3.17 常用的JVM調優引數。 3.6 具體的效能調優步驟嗎?fullgc的時候會導致介面的響應速度特別慢,該如何排查和解決。 3.18 dump檔案的分析。 3.19 Java有沒有主動觸發GC的方式 3.20 假如現在在同一臺機器上開兩個java專案,有幾個java虛擬機器? 3.21 javac編譯期工作流程 ### 4. Spring 4.1 spring IOC 過程 4.2 迴圈依賴怎麼解決的 4.3 spring AOP,動態代理是怎麼實現的 4.4 spring BeanDefinition作用 4.5 spring @Autowired (@Resource, 類似)實現原理 4.6 bean的生命週期 4.7 Bean的預設作用範圍是什麼?其他的作用範圍? 4.8 Spring的單例是怎麼實現的? 4.11 SpringMVC不同使用者登入的資訊怎麼保證執行緒安全的? 4.12 Spring用了哪些設計模式。 4.13 Spring注入bean的方式。 4.14 什麼是IOC,什麼是依賴注入。 4.15 Spring具有什麼特點(IOC和AOP) 4.16 幾種scope區別,aop實現有哪幾種實現, 4.17 spring的事務及實現模式 4.19 對Spring、SpringMVC、springBoot理解 4.20 @transactional註解在什麼情況下會失效,為什麼。 4.21 SpringMVC的Controller是如何將引數和前端傳來的資料一一對應的。 4.23 Spring如何維護它擁有的bean。 4.24 自定義註解的實現。 4.25 如何自己設計IOC框架 4.26 Quartz是如何完成定時任務的。 4.18 servlet的生命週期,怎麼判斷是get請求還是post請求,後臺實現session共享的方法。Java web過濾器的生命週期?過濾器和攔截器的區別。 4.19 BeanFactory 和 FactoryBean 的區別 4.20 Spring中配置id或name相同的Bean可能引發的問題及解決方案 4.21 防止Web表單重複提交的方法 ### 5. 訊息中介軟體 5.1 kafka有哪些元件,kafka controller選舉過程,kafka leader重選舉過程 5.2 kafka 最早是為了解決什麼問題設計的 5.3 為什麼kafka用zookeeper來儲存metadata,而不是用db來儲存 5.4 kafka 只有一次生產 只有一次消費怎麼做 5.5 kafka的消費模式?kafka怎麼做有序消費?kafka 重消費解決?訊息丟失怎麼解決? 5.6 Kafka的Replicas的作用? ### 6. 演算法 6.1 B+樹 6.2 hash和B+樹的區別?分別應用於什麼場景?哪個比較好? 6.3 紅黑樹瞭解麼,時間複雜度? 五個特性 6.4 堆排序的時間複雜度 6.5 快速排序,堆排序,插入排序 6.6 一致性Hash演算法,一致性Hash演算法的應用 限於篇幅,我沒有給出答案,感興趣的可以關注公眾號『後端精進之路』,傳送『面經』獲取完整的答案, pdf有80頁左右。 --- 本文由『後端精進之路』原創,首發於部落格 http://teckee.github.io/ , 轉載請註明出處 搜尋『後端精進之路』關注公眾號,立刻獲取最新文章和**價值2000元的BATJ精品面試課程**。 ![後端精進之路.png](https://user-gold-cdn.xitu.io/2019/11/25/16ea178d8af3d60a?w=2125&h=765&f=jpeg&s