如下面試題是針對最近熱門Java面試題彙總,僅供參考!前端
1、自我介紹,以及介紹最近一個項目java
簡單介紹一下本身,姓名,籍貫,畢業以來工做多少年,在哪些公司工做過。一語帶過便可。而後介紹一下最近作的一個項目,包含總體架構設計,涉及先後端框架,緩存,中間件以及數據庫等。面試
2、String特性。StringBuffer 和 StringBuilder 區別數據庫
String a = "str"; String b = new String("str");問 a == b , a.equals(b) 的值是true仍是false?
這裏涉及到 == 與 equals 的區別:
==:比較引用類型比較的是地址值是否相同後端
equals:比較引用類型默認也是比較地址值是否相同,而String類重寫了equals()方法,比較的是內容是否相同。設計模式
String a = "str"; ,"str" 存到方法區的字符串常量池。而String b = new String("str");,new String() 存到堆中,在指向常量池的"str"。用 == 時,a指向的是字符串常量池地址,而b指向的是 new String() 堆中存放地址。因此必然false。而String 的equals 是比較內容。因此是 true。數組
關於String要知道它是被final修飾的不可變類。頻繁修改最好用 StringBuffer 或 StringBuilder。兩者的區別,StringBuilder效率高,線程不安全。StringBuffer線程安全。緩存
3、ArrayList 和 LinkedList 原理、區別以及底層數據結構安全
4、HashMap、HashTable、ConcurrentHashMap 原理、源碼、數據結構,線程是否安全數據結構
HashMap是數組加鏈表結構。經過key的hashcode 找到數組角標。再遍歷鏈表。
HashTable和HashMap區別,屬於線程安全,key value 不能爲 null。
ConcurrentHashMap也是線程安全,結構可理解成 分裂數組+HashTable。效率比HashTable高,由於HashTable是整個Map加鎖,ConcurrentHashMap是把鎖加到 各個分裂數組上。
5、Lock 和 synchronize 實現原理與區別。簡述樂觀鎖悲觀鎖。分佈式鎖實現方式
synchronized是託管給JVM執行的,而lock是java寫的控制鎖的代碼。synchronized在鎖定時如果方法塊拋出異常,JVM 會自動將鎖釋放掉,不會由於出了異常沒有釋放鎖形成線程死鎖。可是 Lock 的話就享受不到 JVM 帶來自動的功能,出現異常時必須在 finally 將鎖釋放掉,不然將會引發死鎖。在資源競爭不是很激烈的狀況下,偶爾會有同步的情形下,synchronized是很合適的。緣由在於,編譯程序一般會盡量的進行優化synchronize。
分佈式鎖實現方式:基於數據庫實現,基於緩存(Redis,memcached,tair)實現,基於Zookeeper實現。
6、SpringMVC流程。經常使用註解。Spring的IOC和AOP
SpringMVC流程:
7、微服務架構Spring Boot ,Spring Cloud
1.微服務的優點
2.Spring Cloud 五大神獸:(要知道實現原理,Eureka 是重點)
8、多線程與高併發
多線程要了解線程經常使用方法。線程池的實現方式。如何避免死鎖。生命週期。併發包經常使用類原理和應用場景:計數器CountdownLatch,柵欄CyclicBarrier,信號量semaphore,交換。
9、事務相關
項目中事務處理方案。
5種隔離級別:
7種傳播行爲:
保證同一個事務中
保證沒有在同一個事務中
分佈式事務處理方案(XA,TCC等,也能夠了解一下阿里最近推出的 GTS) 推薦博客:https://blog.csdn.net/mine_song/article/details/64118963
10、經常使用那些設計模式,說出原理,已經框架中用到哪些。單例的幾種寫法
23種設計模式至少要了解Spring框架用到的一些設計模式。bean單例 beanfactory工廠 AOP動態代理等。
單例有餓漢式,懶漢式,靜態內部類等方式。這些方式並不是真正安全,能夠用反射拿到,用枚舉能夠避免。
11、經常使用中間件RabbitMQ,kafka等,原理、區別、優缺點
中間件的應用場景。
RabbitMQ是一個AMQP實現,傳統的messaging queue系統實現,基於Erlang。老牌MQ產品了。AMQP協議更多用在企業系統內,對數據一致性、穩定性和可靠性要求很高的場景,對性能和吞吐量還在其次。
Kafka是linkedin開源的MQ系統,主要特色是基於Pull的模式來處理消息消費,追求高吞吐量,一開始的目的就是用於日誌收集和傳輸,0.8開始支持複製,不支持事務,適合產生大量數據的互聯網服務的數據收集業務。
12、緩存:Redis原理,數據結構,集羣幾種方式。和memcache區別
十3、HTTP協議,RPC協議,Socket協議
十4、Nginx實現負載均衡的幾種方式
輪詢,隨機,哈希,加權輪詢,加權隨機,最小鏈接數等。
十5、java1.8新特性
十6、關於jvm調優