Java 進階面試問題列表

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 小遊戲

    • 倒轉句子中的單詞

    • 迴文字符串檢測

    • 枚舉給定字符串的全部排列組合

Java 核心概念

  • 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 又帶來了怎樣的新功能?

Hibernate / 數據庫

  • 請解釋下 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 中有哪些新特性?

  • 介紹下 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)工具備哪些?

相關文章
相關標籤/搜索