軟件測試面試 | 史上最全,Java 經典面試題匯總


一、基礎篇

 

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 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 問題??

·         正向代理和反向代理

·         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 圖

·         你如何考慮組件化、服務化、系統拆分

·         秒殺場景如何設計

·         說說公司的流程、如何進行自動化部署的

·         你和團隊是如何溝通的

·         你如何進行代碼評審

·         說說你對技術與業務的理解

·         說說你在項目中遇到感覺最難 Bug,是如何解決的

·         介紹一下工作中的一個你認為最有價值的項目,以及在這個過程中的角色、解決的問題、你覺得你們項目還有哪些不足的地方

 

6.2 軟實力

·         說說你的優缺點、亮點

·         說說你最近在看什么書、什么博客、在研究什么新技術、再看那些開源項目的源代碼

·         說說你覺得最有意義的技術書籍

·         工作之余做什么事情、平時是如何學習的,怎樣提升自己的能力

·         說說個人發展方向方面的思考

·         說說你認為的測試開發工程師應該具備哪些能力

·         說說你認為的測試架構師是什么樣的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM