1. 程式人生 > >GNU'S Not Unix

GNU'S Not Unix

3.1.1 Java基礎

此時一般會問到一些Java的基礎知識,比如

  • synchronized static修飾類和方法有什麼區別
  • HashMap的原理,底層資料結構,rehash的過程,指標碰撞問題
  • HashMap的執行緒安全問題,為什麼會產生這樣的執行緒安全問題
  • ConcurrentHashMap的資料結構,底層原理,put和get是否執行緒安全
  • Java IO的一些內容,包括NIO,BIO等

3.1.2 Java高階特性

此時問到的問題一般包含JVM,多執行緒的一些內容,這塊建議大家多看看原始碼,大致如下:

  • Java執行緒池的構造方法,裡面引數的含義,以及原理
  • volatile和ThreadLocal解決了什麼問題
  • CAS在Java中的具體實現
  • Java虛擬機器的構成,以及一個Java物件的生命週期,還有堆疊和方法區中儲存的內容
  • JVM的GC過程,包括一些實際問題的分析,比如說明一個現象,讓你分析可能是什麼原因會導致這樣的問題,應該如何對JVM引數進行調優
  • synchronized和Lock的區別,以及底層實現原理
  • Full GC和Minor GC觸發的條件
  • GC Roots的選擇
  • jmap,jstat,jstack等的使用場景,MAT等
  • ClassLoader的載入過程
  • CountDownLatch、CyclicBarrier和Semaphore等
  • Java 8 的新特性等

3.1.3 資料庫

這裡的資料庫包含兩種,一種一般是

MySQL,另外是NoSql資料庫,包括RedisMongoDB等。一般會問的問題有:

  • inner join和left join等的區別
  • SQL調優,explain,profile等
  • InnoDB和Myisam的區別
  • ACID
  • 資料庫的事務隔離級別,以及他們分別能解決什麼問題
  • Redis的幾種資料結構
  • Redis是單執行緒還是多執行緒
  • Redis的持久化
  • 悲觀鎖和樂觀鎖的含義
  • 最左字首索引,索引的資料結構,聚簇索引等(這塊還沒搞明白)

3.1.4 框架

3.1.4.1 Spring

因為spring是我們常用的框架,所以這塊的內容會問的比較多,也會比較細。

  • Spring的兩大特性(IoC和AOP)
  • Spring的bean的生命週期
  • Spring是如何解決Bean的迴圈引用問題的
  • AOP的兩種實現方式,以及兩者的區別(這裡其實使用了動態代理,具體動態代理分為兩種,一種是JDK的動態代理,主要使用的是JDK的反射,還有一種是CGLib,兩者區別可以自己搜尋,文章比較多)
  • AOP一般的使用場景
  • Spring的事務原理

3.1.4.2 MyBatis

這塊問到的比較簡單些:

  • $和#的區別
  • MyBatis和Hibernate的區別
  • 原始碼,一般問的比較少

3.1.4.3 Dubbo

因為平時自己用到了Dubbo,所以這塊會有問到:

  • RPC的原理
  • Dubbo是如何完成遠端呼叫的
  • Dubbo如何進行調優
  • Dubbo的通訊協議
  • Dubbo是如何實現負載均衡的

3.1.4.4 ZooKeeper

  • ZK的使用場景
  • ZK的選舉機制
  • ZK的節點型別
  • 一致性Hash原理

3.1.5 資料結構和演算法

這塊的內容是基礎,如果面試官懷疑你的能力,一般一會問到這部分內容,比如樹的遍歷、快速排序等。

3.1.6 linux

一般會問一些命令的使用,然後會舉一個實際的場景,讓你用命令去排查問題,這塊自己不是很熟,需要儘快加強。

3.1.7 綜合題

這塊的題目,面試官一般會問的比較深入。比如如何設計一個搶購系統,String轉Integer等,這部分需要考驗的就是一個人的臨場應變能力,以及在平時工作中系統設計能力的積累,以及考慮問題是否周到等。也有可能會對你簡歷上面寫的系統的設計進行詳細的詢問,所以在你寫簡歷的時候,千萬不能把自己不熟悉的內容寫上去,而且自己又講不清,這樣一般會被直接pass掉。

當然也會問一些常用的maven的命令,設計模式的題目(這部分問的比較多的就是單例模式)。