(面的初級到中級之間的,卻有不少高級的問題)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最多的線程?