java常見面試題總結

(面的初級到中級之間的,卻有不少高級的問題)java

總結一些常見的碰見的面試題(來自各方面收集)mysql

1.開發中Java用了比較多的數據結構有哪些?面試

2.談談你對HashMap的理解,底層原理的基本實現,HashMap怎麼解決碰撞問題的?算法

這些數據結構中是線程安全的嗎?假如你回答HashMap是線程安全的,接着問你有沒有線程安全的map,接下來問conurren包。spring

3.對JVM熟不熟悉?簡單說說類加載過程,裏面執行了哪些操做?問了GC和內存管理,平時在tomcat裏面有沒有進行相關配置sql

4.而後問了http協議,get和post的基本區別,接着tcp/ip協議,三次握手,窗口滑動機制。數據庫

5.開發中用了哪些數據庫?回答mysql,存儲引擎有哪些?而後問了我悲觀鎖和樂觀鎖問題使用場景、分佈式集羣實現的原理。編程

6.而後問了我springmvc和mybatis的工做原理,有沒有看過底層源碼?windows

 

 

1.如何保障請求執行順序?設計模式

2.分佈式事務與分佈式鎖(扣款不要出現負數)

3.分佈式session設置,分佈式session一致性

4.執行某操做,前50次成功,第51次失敗a所有回滾b前50次提交51次拋異常,ab場景分別如何設置Spring(傳播性)

5.Zookeeper有哪些用?

6.JVM的內存模型?

7.數據庫垂直和水平拆分

8.Mybatis如何分頁;如何設置緩存;Mysql分頁

9.IO與NIO的區別,阻塞與非阻塞的區別

10.分佈式接口的冪等性設計(不能重複扣款)

 

1.最近作的比較熟悉的項目是哪一個?畫一下項目技術架構圖

2.JVM老年代和新生代的比例?

3.YGC和FGC的發生的具體場景

4.線程池的構造類的方法的5個參數的具體意義?

5.單機上一個線程池正在處理服務,若是忽然斷電怎麼辦?(正在處理和阻塞隊列裏的請求怎麼處理?)

6.使用無界阻塞隊列會出現什麼問題?

7.接口如何處理重複請求

8.具體處理方案是什麼?

9.如何保證共享變量修改是的原子性?

10.設計一個對外服務的接口實現類,在1,2,3這三個主機(對應不一樣ip)上實現負載均衡和順序輪詢機制(考慮併發)

 

1.jvm,jre以及jdk三者之間的關係

2.Dubbo的底層原理,Zookeeper是什麼?

3.快速排序;廣度優先搜索?

4.緩存的雪崩以及穿透的理解?

5.HashMap的key能夠重複嗎?

6.synchronized和lock的區別?

7.開發一個大型網站你會考慮哪些問題?

 

面試時,綜合準備java Core,數據庫,框架,分佈式,算法等方面的題目。

初級開發:

1.熟悉SSM架構,至少在項目中作過。用一個業務流程來講明springmvc如何實現的。

2.知道spring mvc的細節,如@Autowired的用法,如何把url映射到Controller上,ModelAndView對象返回的方式等。

3.結合項目的,如何使用AOP,攔截器的,如能夠經過攔截器攔截非法請求,怎麼用AOP輸出日誌等。

4.ORM的一對一,一對多,多對多等的用法,以及cascade和inverse的用法

5.聲明式事務的作法。

 

1.spring bean的週期

2.spring 的源代碼,IOC、AOP、Springmvc的工做流程

3.結合反射,說下IOC的實現原理

4.Spring Boot和Spring Cloud的知識(如spring cloud組件的用法)

 

數據庫

1.索引怎麼建,怎麼用,在哪些場景,什麼狀況下不應建索引,哪些語句不會使用索引?如在where語句中name like '123%' 會不會使用索引。

2.SQL的優化方案,如分庫分表,或經過執行計劃查看SQL的優化點。

 

集合

1.hashcode有沒有重寫過?在什麼場景下須要重寫。若是能夠,結合hash表的算法,說下hashmap的實現原理。ConcurrentHashMap在併發的底層實現代碼。

2.ArrayList/LinkedList的差異,好比一個基於數組,一個基於鏈表,它們均是線程不安全的,ArrayList的擴容作法等。

3.Set如何實現防重,如TreeSet和HashSet等

4.Collection的一些方法,如比較方法、包裝成線程安全的方法等。

5.如何經過ArrayList實現隊列或堆棧。

 

多線程

1.synchronized和可重入鎖的差異,信號量等防併發機制。

2.在線程裏該如何返回值(就是 callable runnable的區別),以及併發機制

3.經過ThreadLocal或volatile關鍵字,說明線程的內存模型

4.線程池的瞭解及經常使用參數的瞭解

 

虛擬機

1.虛擬機的結構圖和流程

2.針對堆的垃圾回收機制,畫個圖,說下年輕代和年老代等

3.說下垃圾回收的流程,而後針對性地說下如何在代碼中優化內存性能。

4.若是出現OOM異常,該怎麼排查,如何看Dump文件?

 

算法和設計模式

 

 

特別蒐集多線程和併發的面試題

1.如今有線程T一、T2和T3。你如何確保T2線程在T1以後執行,而且T3線程在T2以後執行?

  可使用Thread 的join方法實現這一效果

2.Java中新的Lock接口相對於同步代碼塊(synchronized block)有什麼優點?如何讓你實現一個高性能緩存,支持併發讀取和單一寫入,你如何保障數據完整性。

  多線程和併發編程中使用lock接口的最大優點是它爲讀和寫提供兩個單獨的鎖,可讓你構建高性能數據結構,好比ConcurrentHashMap和條件阻塞。

3.Java中wait和sleep方法有什麼區別?

  二者主要區別就是等待釋放鎖和監視器。sleep方法在等待時不會釋聽任何鎖或監視器。wait方法多用於線程間通訊,而sleep只是在執行時暫停。

4.如何在Java中實現一個阻塞隊列?

5.如何在Java中編寫代碼解決生產者和消費者問題?

6.寫一段死鎖代碼。你在Java中如何解決死鎖?

7.什麼是原子操做?java中有哪些原子操做?你須要同步原子操做嗎

8.Java中volatile關鍵字是什麼?你如何使用它,它和Java中的同步方法有什麼區別?

9.什麼是競態條件?你如何發現並解決競態條件?

10.在Java中你如何轉儲線程(thread dump)?如何分析它?

  在UNIX中,你可使用kill -3 而後線程轉儲日誌會打印在屏幕上,可使用CTRL+Break查看。

11.既然start()方法會調用run()方法,爲何咱們調用start()方法,而不直接調用run() 方法?

  當你調用start()方法時,它會新建一個線程而後執行run() 方法中的代碼。若是直接調用run()方法,並不會建立線程,方法中的代碼會在當前調用者的線程中執行。

12.Java中你如何喚醒阻塞線程?

能夠中斷線程,拋出InterruptedException異常來喚醒。

13.Java中CyclicBarriar和CountDownLatch有什麼區別?

14.什麼是不可變類?它對於編寫併發應用有何幫助?

15.你在多線程環境中遇到的最多的問題是什麼?你是如何解決的?

  內存干擾、競態條件、死鎖、活鎖、線程飢餓時多線程和併發編程中比較有表明性的問題。這類問題無休無止,並且難於定位和調試。

 

1.Java中綠色線程和本地線程的區別?

2.線程和進程的區別?

3.多線程的上下文切換是什麼?

4.死鎖和活鎖的區別?死鎖和飢餓的區別?

5.java中使用什麼線程調度算法?

6.Java中線程調度室什麼

7.線程中如何處理某個未處理異常?

8.什麼是線程組?爲何Java中不建議使用線程組?

9.爲何使用Executor框架比直接建立線程要好?

10.Java中Executor和Executors的區別?

11.在windows和Linux系統上分別入額找到佔用CPU最多的線程?

相關文章
相關標籤/搜索