第一套 一面: HashMap 實現原理,ConcurrentHashMap 實現原理 紅黑樹,爲何容許局部不平衡 TCP,UDP 區別,爲何可靠和不可靠 一次 HTTP 請求的全過程,包括域名解析、定位主機等 TCP 三次握手 MySQL 事務是什麼?四大特性,四大隔離級別 ConcurrentHashMap 和 Hashtable 區別 spring IOC 和 AOP,以及各有什麼優勢 有哪幾種經常使用的線程池 什麼狀況下使用 Runnable 和 Thread 建立線程,Runnable 和 Callable 的區別 線程方法中的異常如何處理,副線程能夠捕獲到嗎 synchronized 和鎖的區別,什麼狀況下使用 synchronized 和 ReentrantLock JVM 的對象分配在哪一個區,Class 對象分配在哪一個區 二面: 經常使用的設計模式介紹:單例模式、裝飾者模式等 Java 會出現內存溢出嗎?什麼狀況下會出現? 雙親委派模型,爲何這樣作? 對象什麼狀況下進入老年代? 快速排序說一下過程 AOP 實現原理:動態代理 BIO、NIO(如何實現的)、AIO 消息中間件有哪些?他們之間的優劣勢? Redis,持久化框架 棧和隊列 垃圾回收算法 MySQL 的索引 Tomcat 類加載器 OOM 內存泄漏,什麼狀況下會出現,如何排查 三面: 介紹你實踐的性能優化案例,以及你的優化思路 微服務和 SOA 的區別,優劣勢 SQL 慢查詢的優化方案,索引和表的優化方案。 MySQL 與 MongoDB 的區別,海量數據的存儲 緩存框架,例如 Redis、Memcached 之間的區別,優劣勢比較 請描述一致 hash 算法 分佈式 session 的共享方案有哪些,有什麼優劣勢 高併發狀況,系統的優化方案有哪些,以及優先級排序。 第二套 一面: ArrayList 和 linkedlist 區別。ArrayList 是否會越界。 ArrayList 和 hashset 有何區別。hashset 存的數是有序的麼。 volatile 和 synchronized 區別 多態的原理 數據庫引擎 Innodb 和 myisam 區別 Redis 的數據結構 Redis 是基於內存的麼 Redis 的 list zset 的底層實現 http 和 https 的區別,tcp 握手過程 jvm 垃圾回收算法手寫冒泡 手寫單例包括多線程下 Java 線程間怎麼實現同步,notify()與 notifyAll()的區別 數據庫的悲觀鎖和樂觀鎖應用場景。 排序算法的複雜度,快速排序非遞歸實現。 海量數據過濾,黑名單過濾一個 url。 二面: list set map 底層使用什麼實現的有哪些典型實現 hashmap 擴容是怎麼擴容的,爲何是 2 的冪 concurrenthashmap 爲何線程安全,採用了什麼措施應對高併發 線程池的參數有什麼意義 Springmvc 請求流程 Spring IOC,autowired 如何實現 Spring boot SpringClound 的基本架構設計 Dubbo 和 SpringClound 的區別在哪裏,優劣勢 說說一致性 Hash 算法 三面: 分佈式架構設計哪方面比較熟悉 講講你對 CDN 的瞭解,與分佈式緩存和本地緩存的區別 多線程和高併發有什麼區別 高併發下有哪些經常使用的技術解決方案,舉三個高併發場景設計例子 說一個你對 JVM 優化的實際案例,包括實際步驟和方法 Docker 有使用過和了解嗎?Docker 和 JVM 的區別是什麼? Docker 的基本架構和使用場景? 負載均衡有接觸過哪些開源框架,優劣勢是什麼? 數據庫分庫分表須要怎樣來實現? 數據庫端的經常使用優化策略? 若是讓你來設計秒殺系統,你的設計思路是什麼,爲何要這樣設計?java
面試總結: java 的基礎知識點,主要圍繞在集合類和多線程等:ArrayList、LinkedList、HashSet、HashpMap 的數據結果,以及如何擴容、以及 ConcurrentHashMap 相關的多線程安全等。 JVM 的內存分配、幾個常見的垃圾回收算法以及原理、還有對應的 JVM 優化參數須要牢記。 網絡:TCP 的三次握手等網絡都必問,重點掌握網絡協議。 Redis:做爲分佈式緩存的主力,基本也是 BAT 每次必考,重點是 Redis 的數據結構、內存、 算法、持久化,以及與別的緩存 memcached 的優劣勢。 多線程:狀態流轉、多線程的實現,以及與高併發的區別等。 Spring 框架問得是最多的,BAT 很是喜歡問,重點掌握。 最後就是分佈式架構設計 經常使用的分佈式架構設計方案:單點登陸、分佈式緩存、存儲、消息的選型,還有就是數據 庫端的優化方案(須要提早了解)。 最好能提早了解深刻一個相似秒殺這樣的項目,若是面試官問到相似的項目,你能把設計 思路講出來,這對你的面試結果是很大的加分項。mysql
第三套 一面 1.自我介紹 2.談一個你以爲你學到最多的項目,使用了什麼技術,挑戰在哪裏 3.Spring 的 bean 的做用域?(好比:singleton,prototype 等) 4.Spring 的 IOC 實現原理?沒有無參構造函數能實例化嗎?有參構造函數注入?(xml 配置) 5.經過反射,談到了方法區,而後,類加載機制? 6.synchronized 的實現原理?Volatile 能保證原子性嗎?爲何? 7.hashmap 和 concurrenthashmap 的 size 方法怎麼實現的 8.JVM 的調優參數?(-Xmn,-Xms 等具體參數設置) 9.線程池優勢,參數,若是我想實現 newSingleThreadPoll,應該怎麼配置,構造方法傳什麼 參數 10.mysql 死鎖,怎麼解決,若是不要求執行順序,死鎖怎麼解決 11.ioc 和 aop 原理 12.線程的五態?轉化過程? 13.TCP 三次握手,爲何三次握手? 14.JVM 內存分區?(主存,工做內存,堆,棧。。。。) 15.講一下 GC? 16.爲何要用老年代和新生代? 17.新生代進入老生代的狀況? 18.新生代的分區? 二面 變着法的問了一大堆線程池的知識 (主要考對應的參數) java 內存模型 lock 和 synchronized 的區別 reentrantlock 的實現 hashmap 和 concurrenthashmap B+樹和 B-樹的區別 複合索引 彙集索引和非彙集索引的區別? 數據庫索引 主鍵和惟一索引有什麼區別 索引失效條件,何時該創建索引 innDB 和 MyISAM 的區別? 線程安全(阻塞同步,非阻塞同步,無同步) 三面 主要高併發和分佈式架構設計 服務器模型以及之間的區別 線程池的設計 線程池如何作負載均衡 如何實現線程調度算法 複合索引是如何實現的? 如何設計單點登陸,單點登陸的原理 redis 緩存和 memcached 緩存的區別,以及各自的優劣勢 大型高併發網站如何作性能優化:Web 性能、數據庫性能、應用服務器性能等。 實踐中如何優化 MySQL:SQL 語句及索引的優化、數據庫表結構的優化、系統配置的優化、 硬件的優化 分庫分表和讀寫分離如何設計 微服務架構:dubbo 和 springcloud 的區別,以及各自對應的使用場景。面試