Java 進階面試問題列表翻譯自Java developer interview questions: The hard part,從屬於筆者的Java入門與工程實踐系列。最近公司打算招幾個 Java 開發人員,正巧在 Reddit 上看到了該文,順手翻譯了一波。只是單純的問題列表,可能較水,慎進。java
解釋下多態性(polymorphism),封裝性(encapsulation),內聚(cohesion)以及耦合(coupling)。git
繼承(Inheritance)與聚合(Aggregation)的區別在哪裏。github
你是如何理解乾淨的代碼(Clean Code)與技術負載(Technical Debt)的。面試
描述下經常使用的重構技巧。算法
闡述下 SOLID 原則。數據庫
其餘的譬如 KISS,DRY,YAGNI 等原則又是什麼含義。編程
什麼是設計模式(Design Patterns)?你知道哪些設計模式?設計模式
你有了解過存在哪些反模式(Anti-Patterns)嗎?瀏覽器
你會如何設計登錄艦/數學表達式計算程序/一條龍?緩存
你知道哪些基本的排序算法,它們的計算複雜度如何?在給定數據的狀況下你會傾向於使用哪一種算法呢?
嘗試編寫以下代碼:
計算指定數字的階乘
開發 Fizz Buzz 小遊戲
倒轉句子中的單詞
迴文字符串檢測
枚舉給定字符串的全部排列組合
equals 與 hashCode 的異同點在哪裏?Java 的集合中又是如何使用它們的。
描述下 Java 中集合(Collections),接口(Interfaces),實現(Implementations)的概念。LinkedList 與 ArrayList 的區別是什麼?
基礎類型(Primitives)與封裝類型(Wrappers)的區別在哪裏?
final 與 static 關鍵字能夠用於哪裏?它們的做用是什麼?
闡述下 Java 中的訪問描述符(Access Modifiers)。
描述下 String,StringBuilder 以及 StringBuffer 區別。
接口(Interface)與抽象類(Abstract Class)的區別在哪裏。
覆蓋(Overriding)與重載(OverLoading)的區別在哪裏。
異常分爲哪幾種類型?以及所謂的handle or declare
原則應該如何理解?
簡述垃圾回收器的工做原理。
你是如何處理內存泄露或者棧溢出問題的?
如何構建不可變的類結構?關鍵點在哪裏?
什麼是 JIT 編譯?
Java 8 / Java 7 爲咱們提供了什麼新功能?即將到來的 Java 9 又帶來了怎樣的新功能?
請解釋下 ORM。
簡述下 Hibernate 的優劣特性。
Hibernate 與 JPA 區別在哪?
Hibernate 最新版提供了哪些特性?
什麼是懶加載(Lazy Loading)?
什麼是 N+1 難題?
介紹一些熟悉的 Hibernate 註釋。
簡介下 Hibernate Session 與 SessionFactory。
Entity Beans 的狀態有哪些。
Hibernate 中的緩存分爲幾層。
Hibernate 中事務的支持分爲幾級?
什麼是樂觀鎖(Optimistic Locking)?
簡述下 ACID 原則。
簡述下數據庫正則化(Normalizations)。
請介紹下你平常工做中優化慢查詢(Slow Query)的策略。
新版的 Spring 中有哪些新特性?
介紹下 Spring 的優點與缺陷。
什麼是控制反轉(Inversion of Control)與依賴注入(Dependency Injection)?
你用過哪些 Spring 的模塊?
Spring 中是如何使用依賴注入的?
Spring 中提供了幾種自動注入的機制?
介紹下 Spring MVC。
Spring 中 Scopes 有哪些?
Spring 中 Bean 的生命週期包含哪些步驟?
Spring Bean 與 EJB Bean 的區別在哪裏?
介紹下切面編程(Aspect Oriented Programming)。
概述下 GET 與 POST 的區別。
Web Server、Web Container 與 Application Server 的區別是什麼?
簡要介紹下從瀏覽器輸入 URL 開始到獲取到請求界面以後 Java Web 應用中發生了什麼。
什麼是 N 層架構?
微服務(MicroServices)與巨石型應用(Monolithic Applications)之間的區別在哪裏?
你知道哪些商業級設計模式?
你是如何測試一個應用的?知道哪些測試框架?
你是如何測試單個方法的?
在你的職業生涯中,算得上最困難的技術挑戰是什麼?
什麼是領域驅動開發(Domain Driven Development)?
介紹下一些你最愛的 IDE 的經常使用插件。
除了 IDE 以外,你的平常工做中還會用到哪些工具?
你使用什麼版本管理工具?
分支(Branch)與標籤(Tag)之間的區別在哪裏?
你經常使用的持續集成(Continuous Integration)、靜態代碼分析(Static Code Analysis)工具備哪些?