此套面試題適用于Java開發的各個階段面試,不過更偏向初級和中級開發人員!由于文章篇幅過長,我這里就沒列出答案了,我這里已經整理好PDF大綱,有需要的直接點擊這里,回復暗號:CS 即可免費領取!!!
一、基礎篇
1.1、Java基礎
- 面向物件的特征:繼承、封裝和多型
- final, finally, finalize 的區別
- Exception、Error、運行時例外與一般例外有何異同
- 請寫出5種常見到的runtime exception
- int 和 Integer 有什么區別,Integer的值快取范圍
- 包裝類,裝箱和拆箱
- String、StringBuilder、StringBuffer
- 多載和重寫的區別
- 抽象類和介面有什么區別
- 說說反射的用途及實作
- 說說自定義注解的場景及實作
- HTTP請求的GET與POST方式的區別
- Session與Cookie區別
- 列出自己常用的JDK包
- MVC設計思想
- equals與==的區別
- hashCode和equals方法的區別與聯系
- 什么是Java序列化和反序列化,如何實作Java序列化?或者請解釋Serializable 介面的作用
- Object類中常見的方法,為什么wait notify會放在Object里邊?
- Java的平臺無關性如何體現出來的
- JDK和JRE的區別
- Java 8有哪些新特性
1.2、Java常見集合
- List 和 Set 區別
- Set和hashCode以及equals方法的聯系
- List 和 Map 區別
- Arraylist 與 LinkedList 區別
- ArrayList 與 Vector 區別
- HashMap 和 Hashtable 的區別
- HashSet 和 HashMap 區別
- HashMap 和 ConcurrentHashMap 的區別
- HashMap 的作業原理及代碼實作,什么時候用到紅黑樹
- 多執行緒情況下HashMap死回圈的問題
- HashMap出現Hash DOS攻擊的問題
- ConcurrentHashMap 的作業原理及代碼實作,如何統計所有的元素個數
- 手寫簡單的HashMap
- 看過那些Java集合類的原始碼
1.3、行程和執行緒
- 執行緒和行程的概念、并行和并發的概念
- 創建執行緒的方式及實作
- 行程間通信的方式
- 說說 CountDownLatch、CyclicBarrier 原理和區別
- 說說 Semaphore 原理
- 說說 Exchanger 原理
- ThreadLocal 原理分析,ThreadLocal為什么會出現OOM,出現的深層次原理
- 講講執行緒池的實作原理
- 執行緒池的幾種實作方式
- 執行緒的生命周期,狀態是如何轉移的
1.4、鎖機制
- 說說執行緒安全問題,什么是執行緒安全,如何保證執行緒安全
- 重入鎖的概念,重入鎖為什么可以防止死鎖
- 產生死鎖的四個條件(互斥、請求與保持、不剝奪、回圈等待)
- 如何檢查死鎖(通過jConsole檢查死鎖)
- volatile 實作原理(禁止指令重排、重繪記憶體)
- synchronized 實作原理(物件監視器)
- synchronized 與 lock 的區別
- AQS同步佇列
- CAS無鎖的概念、樂觀鎖和悲觀鎖
- 常見的原子操作類
- 什么是ABA問題,出現ABA問題JDK是如何解決的
- 樂觀鎖的業務場景及實作方式
- Java 8并法包下常見的并發類
- 偏向鎖、輕量級鎖、重量級鎖、自旋鎖的概念
1.5、JVM
- JVM運行時記憶體區域劃分
- 記憶體溢位OOM和堆疊溢位SOE的示例及原因、如何排查與解決
- 如何判斷物件是否可以回識訓存活
- 常見的GC回收演算法及其含義
- 常見的JVM性能監控和故障處理工具類:jps、jstat、jmap、jinfo、jconsole等
- JVM如何設定引數
- JVM性能調優
- 類加載器、雙親委派模型、一個類的生命周期、類是如何加載到JVM中的
- 類加載的程序:加載、驗證、準備、決議、初始化
- 強參考、軟參考、弱參考、虛參考
- Java記憶體模型JMM
1.6、設計模式
- 常見的設計模式
- 設計模式的的六大原則及其含義
- 常見的單例模式以及各種實作方式的優缺點,哪一種最好,手寫常見的單利模式
- 設計模式在實際場景中的應用
- Spring中用到了哪些設計模式
- MyBatis中用到了哪些設計模式
- 你專案中有使用哪些設計模式
- 說說常用開源框架中設計模式使用分析
- 動態代理很重要!!!
1.7、資料結構
- 樹(二叉查找樹、平衡二叉樹、紅黑樹、B樹、B+樹)
- 深度有限演算法、廣度優先演算法
- 克魯斯卡爾演算法、普林母演算法、迪克拉斯演算法
- 什么是一致性Hash及其原理、Hash環問題
- 常見的排序演算法和查找演算法:快排、折半查找、堆排序等
1.8、網路/IO基礎
- BIO、NIO、AIO的概念
- 什么是長連接和短連接
- Http1.0和2.0相比有什么區別
- Https的基本概念
- 三次握手和四次揮手、為什么揮手需要四次
- 從游覽器中輸入URL到頁面加載的發生了什么?
二、資料存盤和訊息佇列
2.1、資料庫
- MySQL 索引使用的注意事項
- DDL、DML、DCL分別指什么
- explain命令
- left join,right join,inner join
- 資料庫事物ACID(原子性、一致性、隔離性、持久性)
- 事物的隔離級別(讀未提交、讀以提交、可重復讀、可序列化讀)
- 臟讀、幻讀、不可重復讀
- 資料庫的幾大范式
- 資料庫常見的命令
- 說說分庫與分表設計
- 分庫與分表帶來的分布式困境與應對之策(如何解決分布式下的分庫分表,全域表?)
- 說說 SQL 優化之道
- MySQL遇到的死鎖問題、如何排查與解決
- 存盤引擎的 InnoDB與MyISAM區別,優缺點,使用場景
- 索引類別(B+樹索引、全文索引、哈希索引)、索引的原理
- 什么是自適應哈希索引(AHI)
- 為什么要用 B+tree作為MySQL索引的資料結構
- 聚集索引與非聚集索引的區別
- 遇到過索引失效的情況沒,什么時候可能會出現,如何解決
- limit 20000 加載很慢怎么解決
- 如何選擇合適的分布式主鍵方案
- 選擇合適的資料存盤方案
- 常見的幾種分布式ID的設計方案
- 常見的資料庫優化方案,在你的專案中資料庫如何進行優化的
2.2、Redis
- Redis 有哪些資料型別
- Redis 內部結構
- Redis 使用場景
- Redis 持久化機制
- Redis 集群方案與實作
- Redis 為什么是單執行緒的?
- 快取雪崩、快取穿透、快取預熱、快取更新、快取降級
- 使用快取的合理性問題
- Redis常見的回收策略
2.3、訊息佇列
- 訊息佇列的使用場景
- 訊息的重發補償解決思路
- 訊息的冪等性解決思路
- 訊息的堆積解決思路
- 自己如何實作訊息佇列
- 如何保證訊息的有序性
三、開源框架和容器
3.1、SSM/Servlet
- Servlet的生命周期
- 轉發與重定向的區別
- BeanFactory 和 ApplicationContext 有什么區別
- Spring Bean 的生命周期
- Spring IOC 如何實作
- Spring中Bean的作用域,默認的是哪一個
- 說說 Spring AOP、Spring AOP 實作原理
- 動態代理(CGLib 與 JDK)、優缺點、性能對比、如何選擇
- Spring 事務實作方式、事務的傳播機制、默認的事務類別
- Spring 事務底層原理
- Spring事務失效(事務嵌套),JDK動態代理給Spring事務埋下的坑
- 如何自定義注解實作功能
- Spring MVC 運行流程
- Spring MVC 啟動流程
- Spring 的單例實作原理
- Spring 框架中用到了哪些設計模式
- Spring 其他產品(Srping Boot、Spring Cloud、Spring Secuirity、Spring Data、Spring AMQP 等)
- 有沒有用到Spring Boot,Spring Boot的認識、原理
- MyBatis的原理
3.2、Netty
- 為什么選擇 Netty
- 說說業務中,Netty 的使用場景
- 原生的 NIO 在 JDK 1.7 版本存在 epoll bug
- 什么是TCP 粘包/拆包
- TCP粘包/拆包的解決辦法
- Netty 執行緒模型
- 說說 Netty 的零拷貝
- Netty 內部執行流程
- Netty 重連實作
3.3、Tomcat
- Tomcat的基礎架構(Server、Service、Connector、Container)
- Tomcat如何加載Servlet的
- Pipeline-Valve機制
四、分布式
4.1、Nginx
- 請解釋什么是C10K問題或者知道什么是C10K問題嗎?
- Nginx簡介
- 正向代理和反向代理.
- Nginx幾種常見的負載均衡策略
- Nginx服務器上的Master和Worker行程分別是什么
- 使用“反向代理服務器”的優點是什么?
4.2、分布式其他
- 談談業務中使用分布式的場景
- Session 分布式方案
- Session 分布式處理
- 分布式鎖的應用場景、分布式鎖的產生原因、基本概念
- 分布是鎖的常見解決方案
- 分布式事務的常見解決方案
- 集群與負載均衡的演算法與實作
- 說說分庫與分表設計
- 分庫與分表帶來的分布式困境與應對之策
4.3、Dubbo
- 什么是Dubbo
- 什么是RPC、如何實作RPC、RPC 的實作原理
- Dubbo中的SPI是什么概念
- Dubbo的基本原理、執行流程
五、微服務
5.1、微服務
- 前后端分離是如何做的?
- 微服務哪些框架
- Spring Could的常見組件有哪些?
- 領域驅動有了解嗎?什么是領域驅動模型?充血模型、貧血模型
- JWT有了解嗎,什么是JWT?
- 你怎么理解 RESTful
- 說說如何設計一個良好的 API
- 如何理解 RESTful API 的冪等性
- 如何保證介面的冪等性
- 說說 CAP 定理、BASE 理論
- 怎么考慮資料一致性問題
- 說說最終一致性的實作方案
- 微服務的優缺點
- 微服務與 SOA 的區別
- 如何拆分服務、水平分割、垂直分割
- 如何應對微服務的鏈式呼叫例外
- 如何快速追蹤與定位問題
- 如何保證微服務的安全、認證
5.2、安全問題
- 如何防范常見的Web攻擊、如何方式SQL注入
- 服務端通信安全攻防
- HTTPS原理剖析、降級攻擊、HTTP與HTTPS的對比
5.3、性能優化
- 性能指標有哪些
- 如何發現性能瓶頸
- 性能調優的常見手段
- 說說你在專案中如何進行性能調優
六、其他
6.1、設計能力
- 說說你在專案中使用過的UML圖
- 你如何考慮組件化、服務化、系統拆分
- 秒殺場景如何設計
6.2、業務工程
- 說說你的開發流程、如何進行自動化部署的
- 你和團隊是如何溝通的
- 你如何進行代碼評審
- 說說你對技術與業務的理解
- 說說你在專案中遇到感覺最難Bug,是如何解決的
- 介紹一下作業中的一個你認為最有價值的專案,以及在這個程序中的角色、解決的問題、你覺得你們專案還有哪些不足的地方
6.3、軟實力
- 說說你的優缺點、亮點
- 說說你最近在看什么書、什么博客、在研究什么新技術、再看那些開源專案的源代碼
- 說說你覺得最有意義的技術書籍
- 作業之余做什么事情、平時是如何學習的,怎樣提升自己的能力
- 說說個人發展方向方面的思考
- 說說你認為的服務端開發工程師應該具備哪些能力
- 說說你認為的架構師是什么樣的,架構師主要做什么
- 如何看待加班的問題
當然,一個完整的面試肯定不止上述的知識點,其他的諸如:Linux、資料結構、演算法、邏輯思維題、系統設計題、職業規劃等等都會有所涉及!總之,充分的準備是應對一切面試的不二法寶!
讀者福利、完整面試題【含答案】Java核心筆記,Java架構面試專題整合千道(pdf檔案)
有需要 直接點擊這里,回復暗號:CS 即可免費領取!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/76130.html
標籤:其他
