5年經驗Java程序員面試20天

 

 

 

寫在前面

今天分享的是一位5年工做經驗的Java工程師在帝都的面試經驗總結,看看這些互聯網公司都愛問些什麼題,但願對你們的面試有指導意義。java

從事Java開發也有5年經驗了,4月初本身的開啓面試經歷之旅,先後20天左右,主面互聯網公司,一二線大公司或者是融資中的創業公司都面試過,拿了一些offer,其中包括奇虎360等程序員

首先不一樣面試官面試風格必定不一樣,這裏是我總結這些天面試Java開發過程當中的大多數問題,綜合分類有Java基礎,框架,多線程,網絡通訊,數據庫以及設計模式,算法等幾個模塊。面試

一名3年工做經驗的Java程序員應該具有的技能,這多是Java程序員們比較關心的內容。我這裏要說明一下,如下列舉的內容不是都要會的東西----可是若是你掌握得越多,最終能獲得的評價、拿到的薪水勢必也越高。算法

1、Java基礎spring

  1. String類爲何是final的。
  2. HashMap的源碼,實現原理,底層結構。
  3. 反射中,Class.forName和classloader的區別
  4. session和cookie的區別和聯繫,session的生命週期,多個服務部署時session管理。
  5. Java中的隊列都有哪些,有什麼區別。
  6. Java的內存模型以及GC算法
  7. Java數組和鏈表兩種結構的操做效率,在哪些狀況下(從開頭開始,從結尾開始,從中間開始),哪些操做(插入,查找,刪除)的效率高
  8. Java內存泄露的問題調查定位:jmap,jstack的使用等等

2、多線程數據庫

這也是必問的一塊了。由於三年工做經驗,因此基本上不會再問你怎麼實現多線程了,會問得深刻一些好比說Thread和Runnable的區別和聯繫、屢次start一個線程會怎麼樣、線程有哪些狀態。固然這只是最基本的,出乎意料地,幾回面試幾乎都被同時問到了一個問題,問法不盡相同,總結起來是這麼一個意思:編程

假若有Thread一、Thread二、Thread三、Thread4四條線程分別統計C、D、E、F四個盤的大小,全部線程都統計完畢交給Thread5線程去作彙總,應當如何實現?設計模式

聰明的網友們對這個問題是否有答案呢?不難,java.util.concurrent下就有現成的類可使用。數組

另外,線程池也是比較常問的一塊,經常使用的線程池有幾種?這幾種線程池之間有什麼區別和聯繫?線程池的實現原理是怎麼樣的?實際一些的,會給你一些具體的場景,讓你回答這種場景該使用什麼樣的線程池比較合適。性能優化

最後,雖然此次面試問得很少,可是多線程同步、鎖這塊也是重點。

synchronized和ReentrantLock的區別、synchronized鎖普通方法和鎖靜態方法、死鎖的原理及排查方法等等,關於多線程,我在以前有些過文章總結過多線程,併發編程的面試問題!

java併發編程高級面試:併發隊列+可重入鎖+線程池等

5年經驗Java程序員面試20天,拿下數個offer,總結出的經驗感想!

 

3、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。

4、JDK源碼

要想拿高工資,JDK源碼不可不讀。上面的內容可能還和具體場景聯繫起來,JDK源碼就是實打實地看你平時是否是愛鑽研了。過程當中被問了很多JDK源碼的問題,其中最刁鑽的一個問了,String的hashCode()方法是怎麼實現的,幸虧平時String源代碼看得多,答了個大概。JDK源碼其實沒什麼好總結的,純粹看我的,總結一下比較重要的源碼:

  1. List、Map、Set實現類的源代碼
  2. ReentrantLock、AQS的源代碼
  3. AtomicInteger的實現原理,主要能說清楚CAS機制而且AtomicInteger是如何利用CAS機制實現的
  4. 線程池的實現原理
  5. Object類中的方法以及每一個方法的做用

這些其實要求蠻高的,去年一全年基本把JDK中重要類的源代碼研究了個遍,真的花費時間、花費精力,固然回頭看,是值得的----不只僅是爲了應付面試。

5、框架

  1. spring框架中須要引用哪些jar包,以及這些jar包的用途
  2. srpingMVC的原理
  3. springMVC註解的意思
  4. spring中beanFactory和ApplicationContext的聯繫和區別
  5. spring注入的幾種方式
  6. spring如何實現事物管理的
  7. springIOC和AOP的原理
  8. spring中循環注入的方式
5年經驗Java程序員面試20天,拿下數個offer,總結出的經驗感想!

 

6、數據庫

數據庫十有八九也都會問到。一些基本的像union和union all的區別、left join、幾種索引及其區別就不談了,比較重要的就是數據庫性能的優化,若是對於數據庫的性能優化一竅不通,那麼有時間,仍是建議你在面試前花一兩天專門把SQL基礎和SQL優化的內容準備一下。

不過數據庫卻是不用擔憂,一家公司每每有不少部門,若是你對數據庫不熟悉而基本技術又很是好,九成都是會要你的,估計會先把你放到對數據庫使用不是要求很是高的部門鍛鍊一下。

5年經驗Java程序員面試20天,拿下數個offer,總結出的經驗感想!

 

7、數據結構和算法分析

數據結構和算法分析,對於一名程序員來講,會比不會好,並且在工做中絕對能派上用場。數組、鏈表是基礎,棧和隊列深刻一些但也不難,樹挺重要的,比較重要的樹AVL樹、紅黑樹,能夠不瞭解它們的具體實現,可是要知道什麼是二叉查找樹、什麼是平衡樹,AVL樹和紅黑樹的區別。記得某次面試,某個面試官和我聊到了數據庫的索引,他問我:

你知道索引使用的是哪一種數據結構實現嗎?

答到用的Hash表吧,答錯。他又問,你知道爲何要使用樹嗎?答到由於Hash表可能會出現比較多的衝突,在千萬甚至是上億級別的數據面前,會大大增長查找的時間複雜度。而樹比較穩定,基本保證最多二三十次就能找到想要的數據,對方說不徹底對,最後咱們仍是交流了一下這個問題,我也明白了爲何要使用樹。

8、JVM

出乎意料,Java虛擬機應該是很重要的一塊內容,結果在這幾家公司中被問到的機率幾乎爲0。要知道,去年但是花了大量的時間去研究Java虛擬機的,光周志明老師的《深刻理解Java虛擬機:JVM高級特性與最佳實踐》,就讀了不下五遍。

言歸正傳,雖然Java虛擬機沒問到,但我以爲仍是有必要研究的,就簡單地列一個提綱吧,談談Java虛擬機中比較重要的內容:

  1. Java虛擬機的內存佈局
  2. GC算法及幾種垃圾收集器
  3. 類加載機制,也就是雙親委派模型
  4. Java內存模型
  5. happens-before規則
  6. volatile關鍵字使用規則

也許面試無用,但在走向大牛的路上,不可不會,這個是面試了幾家公司最後通過整合寫出了這些面試題,面試就決定了你的薪資,必定要好好對待,這些問題可能不會問到,可是程序員技多不壓身,最後收到了百度的offer,薪資還不錯,把這些面試題分享出來但願能幫助那些打算跳槽的人~~

20道精選JVM重點面試問題!

5年經驗Java程序員面試20天,拿下數個offer,總結出的經驗感想!

 

學習共勉

同時金三銀四已通過了,就目前國內的面試模式來說,在面試前積極的準備面試,複習整個 Java 知識體系將變得很是重要,能夠很負責任的說一句,複習準備的是否充分,將直接影響你入職的成功率。但不少小夥伴卻苦於沒有合適的資料來回顧整個 Java 知識體系,或者有的小夥伴可能都不知道該從哪裏開始複習。我偶然獲得一份整理的資料,不管是從整個 Java 知識體系,仍是從面試的角度來看,都是一份含技術量很高的資料(PDF版)。

相關文章
相關標籤/搜索