網際網路公司面經總結,最後我成功拿到百度offer
從事Java開發也有5年經驗了,7月初來到帝都,開啟面試經歷,前後20天左右,主要面網際網路公司,一二線大公司或者是融資中的創業公司都面試過,拿了一些offer,其中包括奇虎360,最後綜合決定還是去百度了。
首先不同面試官面試風格一定不同,我這裡就是總結這些天面試Java開發過程中的大多數問題,綜合分類有Java基礎,框架,多執行緒,網路通訊,資料庫以及設計模式,等幾個模組,由於問題太多,下面先列出問題,之後有時間在寫文章解答,或者網上有很多答案,可以自行搜尋。
關於專業技能
寫完專案接著寫一名3年工作經驗的Java程式設計師應該具備的技能,這可能是Java程式設計師們比較關心的內容。我這裡要說明一下,以下列舉的內容不是都要會的東西—-但是如果你掌握得越多,最終能得到的評價、拿到的薪水勢必也越高。
一、Java基礎
1.String類為什麼是final的。
2.HashMap的原始碼,實現原理,底層結構。
3.反射中,Class.forName和classloader的區別
4.session和cookie的區別和聯絡,session的生命週期,多個服務部署時session管理。
5.Java中的佇列都有哪些,有什麼區別。
6.Java的記憶體模型以及GC演算法
7.Java7、Java8的新特性(baidu問的,好BT)
8.Java陣列和連結串列兩種結構的操作效率,在哪些情況下(從開頭開始,從結尾開始,從中間開始),哪些操作(插入,查詢,刪除)的效率高
9.Java記憶體洩露的問題調查定位:jmap,jstack的使用等等
二、多執行緒
這也是必問的一塊了。因為三年工作經驗,所以基本上不會再問你怎麼實現多執行緒了,會問得深入一些比如說Thread和Runnable的區別和聯絡、多次start一個執行緒會怎麼樣、執行緒有哪些狀態。當然這只是最基本的,出乎意料地,幾次面試幾乎都被同時問到了一個問題,問法不盡相同,總結起來是這麼一個意思:
假如有Thread1、Thread2、Thread3、Thread4四條執行緒分別統計C、D、E、F四個盤的大小,所有執行緒都統計完畢交給Thread5執行緒去做彙總,應當如何實現?
聰明的網友們對這個問題是否有答案呢?不難,java.util.concurrent下就有現成的類可以使用。
另外,執行緒池也是比較常問的一塊,常用的執行緒池有幾種?這幾種執行緒池之間有什麼區別和聯絡?執行緒池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的執行緒池比較合適。
最後,雖然這次面試問得不多,但是多執行緒同步、鎖這塊也是重點。
synchronized和ReentrantLock的區別、synchronized鎖普通方法和鎖靜態方法、死鎖的原理及排查方法等等,關於多執行緒,我在之前有些過文章總結過多執行緒的40個問題,可以參看40個Java多執行緒問題總結。
三、IO
再次補充IO的內容,之前忘了寫了。
IO分為File IO和Socket IO,File IO基本上是不會問的,問也問不出什麼來,平時會用就好了,另外記得File IO都是阻塞IO。
Socket IO是比較重要的一塊,要搞懂的是阻塞/非阻塞的區別、同步/非同步的區別,藉此理解阻塞IO、非阻塞IO、多路複用IO、非同步IO這四種IO模型,Socket IO如何和這四種模型相關聯。這是基本一些的,深入一些的話,就會問NIO的原理、NIO屬於哪種IO模型、NIO的三大組成等等,這有些難,當時我也是研究了很久才搞懂NIO。提一句,NIO並不是嚴格意義上的非阻塞IO而應該屬於多路複用IO,面試回答的時候要注意這個細節,講到NIO會阻塞在Selector的select方法上會增加面試官對你的好感。
如果用過Netty,可能會問一些Netty的東西,畢竟這個框架基本屬於當前最好的NIO框架了(Mina其實也不錯,不過總體來說還是比不上Netty的),大多數網際網路公司也都在用Netty。
四、JDK原始碼
要想拿高工資,JDK原始碼就不可不讀。上面的內容可能還和具體場景聯絡起來,JDK原始碼就是實打實地看你平時是不是愛鑽研了。過程中被問了不少JDK原始碼的問題,其中最刁鑽的一個問了,String的hashCode()方法是怎麼實現的,幸好平時String原始碼看得多,答了個大概。JDK原始碼其實沒什麼好總結的,純粹看個人,總結一下比較重要的原始碼:
(1)List、Map、Set實現類的原始碼
(2)ReentrantLock、AQS的原始碼
(3)AtomicInteger的實現原理,主要能說清楚CAS機制並且AtomicInteger是如何利用CAS機制實現的
(4)執行緒池的實現原理
(5)Object類中的方法以及每個方法的作用
這些其實要求蠻高的,去年一整年基本把JDK中重要類的原始碼研究了個遍,真的花費時間、花費精力,當然回頭看,是值得的—-不僅僅是為了應付面試。
五、框架
1.struts1和struts2的區別
2.struts2和springMVC的區別
3.spring框架中需要引用哪些jar包,以及這些jar包的用途
4.srpingMVC的原理
5.springMVC註解的意思
6.spring中beanFactory和ApplicationContext的聯絡和區別
7.spring注入的幾種方式
8.spring如何實現事務管理的
9.springIOC和AOP的原理
10.hibernate中的1級和2級快取的使用方式以及區別原理
11.spring中迴圈注入的方式
六、資料庫
資料庫十有八九也都會問到。一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是資料庫效能的優化,如果對於資料庫的效能優化一竅不通,那麼有時間,還是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容準備一下。
不過資料庫倒是不用擔心,一家公司往往有很多部門,如果你對資料庫不熟悉而基本技術又非常好,九成都是會要你的,估計會先把你放到對資料庫使用不是要求非常高的部門鍛鍊一下。
七、資料結構與演算法
資料結構和演算法分析,對於一名程式設計師來說,會比不會好而且在工作中絕對能派上用場。陣列、連結串列是基礎,棧和佇列深入一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,可以不瞭解它們的具體實現,但是要知道什麼是二叉查詢樹、什麼是平衡樹,AVL樹和紅黑樹的區別。記得某次面試,某個面試官和我聊到了資料庫的索引,他問我:
你知道索引使用的是哪種資料結構實現嗎?
答到用的Hash表吧,答錯。他又問,你知道為什麼要使用樹嗎?答到因為Hash表可能會出現比較多的衝突,在千萬甚至是上億級別的資料面前,會大大增加查詢的時間複雜度。而樹比較穩定,基本保證最多二三十次就能找到想要的資料,對方說不完全對,最後我們還是交流了一下這個問題,我也明白了為什麼要使用樹,這裡不說,網友朋友們覺得索引為什麼要使用樹來實現呢?
八、Java虛擬機器
出乎意料,Java虛擬機器應該是很重要的一塊內容,結果在這幾家公司中被問到的概率幾乎為0。要知道,去年可是花了大量的時間去研究Java虛擬機器的,《深入理解Java虛擬機器:JVM高階特性與最佳實踐》,就讀了不下五遍。
言歸正傳,雖然Java虛擬機器沒問到,但我覺得還是有必要研究的,就簡單地列一個提綱吧,談談Java虛擬機器中比較重要的內容:
(1)Java虛擬機器的記憶體佈局
(2)GC演算法及幾種垃圾收集器
(3)類載入機制,也就是雙親委派模型
(4)Java記憶體模型
(5)happens-before規則
(6)volatile關鍵字使用規則
經過幾輪面試,雖然很多沒有記住,自己最後簡單的整理了一下,把這些網際網路面試題分享給大家,其實一線網際網路公司並沒有那麼的神祕,也沒有想象中那麼難進,程式設計師是吃技術飯,要養成堅持學習的習慣,最後我在網上找了一些關於回答面試題的,也有一些Java高併發、分散式、高效能、微服務等架構技術資料,一併分享到我的Java進階之路群裡(878249276),歡迎大家加入交流學習!
相關文章
- 各大網際網路Java面試題彙總,最後我成功拿到百度的offerJava面試題
- 一線網際網路企業面試題總結(幫你成功拿到offer)面試題
- 小公司面試10連掛之後,我拿到了網際網路一線大廠offer!【石杉的架構筆記】面試架構筆記
- Java面經 面試經驗 網際網路公司面試經驗 後端面試經驗Java面試後端
- 分享:一線網際網路公司的面試經驗面試
- 2018年一線網際網路公司Java高階面試題總結Java面試題
- 各大網際網路公司面試流程及面試題彙總面試題
- 拿到BAT等大廠offer以後,我總結了這些技術面試技巧BAT面試
- 雙非一本,非科班,外包,拿到網際網路大廠 Offer!
- 從業4年網際網路寒潮下我的面試總結(美團\陌陌\百度\阿里\京東)面試阿里
- 新鮮出爐的一線網際網路公司Java高階面試題總結!Java面試題
- [面試專題]一線網際網路大廠面試總結面試
- [網際網路]網際網路公司的種類
- 2017下半年,一二線網際網路公司Android面試題彙總Android面試題
- 大型網際網路公司必考java面試題與面試技巧Java面試題
- 網際網路公司面試必問的Redis題目面試Redis
- 如何才能透過一線網際網路公司面試?面試
- 各大網際網路公司架構演進之路彙總架構
- 揭開網際網路公司的神秘面紗,資料解讀那些slay整個行業的網際網路公司行業
- 與頂級網際網路公司技術大佬面對面聊聊RocketMQMQ
- 網際網路公司面試必問的mysql題目(下)面試MySql
- 跳槽可閱!網際網路公司DBA面試指南集錦!面試
- 網際網路公司面試必問的mysql題目(上)面試MySql
- 30K 成功入職京東:拿到京東 offer 經驗分享「面試經歷 + 面試真題」面試
- MySQL:網際網路公司常用分庫分表方案彙總!MySql
- 網傳網際網路公司大裁員
- 萌妹子的面試經歷,美團四面三小時,成功拿到 Java 崗 offer面試Java
- 1.2網際網路的網路結構
- 2021年頂級網際網路技術總結 - Richard
- 網際網路大潮已去,疫情後資料分析公司怎麼走?
- Python求職怎麼拿到對摺面試公司OfferPython求職面試
- Android春招面經:二本渣院面試網易被拒,最終終於拿到騰訊+阿里offer(已入職騰訊)Android面試阿里
- 工業網際網路是繼移動網際網路之後最大的經濟機會---振工鏈
- 中國網際網路第三巨頭已經易主? 百度:我還能拯救一下!
- 巨人網路新CFO:前中金公司董事總經理孟瑋,80後
- 網際網路公司最常見的面試演算法題有哪些?面試演算法
- 大型網際網路公司網站架構背後的基礎技術2019網站架構
- MySQL:網際網路公司常用分庫分表方案彙總!(轉載)MySql