歡迎光臨
每天分享高質量文章

Java 面試題 :百度前 200 頁都在這裡

(點選上方公眾號,可快速關註)


來源:唐尤華,

github.com/tangyouhua/program-resource/blob/master/program-interview/java-baidu-200.md

基本概念

  • 作業系統中 heap 和 stack 的區別

  • 什麼是基於註解的切麵實現

  • 什麼是 物件/關係 對映整合模組

  • 什麼是 Java 的反射機制

  • 什麼是 ACID

  • BS與CS的聯絡與區別

  • Cookie 和 Session的區別

  • fail-fast 與 fail-safe 機制有什麼區別

  • get 和 post請求的區別

  • Interface 與 abstract 類的區別

  • IOC的優點是什麼

  • IO 和 NIO的區別,NIO優點

  • Java 8 / Java 7 為我們提供了什麼新功能

  • 什麼是競態條件? 舉個例子說明。

  • JRE、JDK、JVM 及 JIT 之間有什麼不同

  • MVC的各個部分都有那些技術來實現?如何實現?

  • RPC 通訊和 RMI 區別

  • 什麼是 Web Service(Web服務)

  • JSWDL開發包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。

  • WEB容器主要有哪些功能? 並請列出一些常見的WEB容器名字。

  • 一個”.java”源檔案中是否可以包含多個類(不是內部類)?有什麼限制

  • 簡單說說你瞭解的類載入器。是否實現過類載入器

  • 解釋一下什麼叫AOP(面向切麵程式設計)

  • 請簡述 Servlet 的生命週期及其相關的方法

  • 請簡述一下 Ajax 的原理及實現步驟

  • 簡單描述Struts的主要功能

  • 什麼是 N 層架構

  • 什麼是CORBA?用途是什麼

  • 什麼是Java虛擬機器?為什麼Java被稱作是“平臺無關的程式語言”

  • 什麼是正則運算式?用途是什麼?哪個包使用正則運算式來實現樣式匹配

  • 什麼是懶載入(Lazy Loading)

  • 什麼是尾遞迴,為什麼需要尾遞迴

  • 什麼是控制反轉(Inversion of Control)與依賴註入(Dependency Injection)

關鍵字

finalize

  • 什麼是finalize()方法

  • finalize()方法什麼時候被呼叫

  • 解構式(finalization)的目的是什麼

  • final 和 finalize 的區別

final

  • final關鍵字有哪些用法

  • final 與 static 關鍵字可以用於哪裡?它們的作用是什麼

  • final, finally, finalize的區別

  • final、finalize 和 finally 的不同之處?

能否在執行時向 static final 型別的賦值

  • 使用final關鍵字修飾一個變數時,是取用不能變,還是取用的物件不能變

  • 一個類被宣告為final型別,表示了什麼意思

  • throws, throw, try, catch, finally分別代表什麼意義

Java 有幾種修飾符?分別用來修飾什麼

volatile

  • volatile 修飾符的有過什麼實踐

  • volatile 變數是什麼?volatile 變數和 atomic 變數有什麼不同

  • volatile 型別變數提供什麼保證?能使得一個非原子操作變成原子操作嗎

  • 能建立 volatile 陣列嗎?

  • transient變數有什麼特點

  • super什麼時候使用

  • public static void 寫成 static public void會怎樣

  • 說明一下public static void main(String args[])這段宣告裡每個關鍵字的作用

  • 請說出作用域public, private, protected, 以及不寫時的區別

  • sizeof 是Java 的關鍵字嗎

static

  • static class 與 non static class的區別

  • static 關鍵字是什麼意思?Java中是否可以改寫(override)一個private或者是static的方法

  • 靜態型別有什麼特點

  • main() 方法為什麼必須是靜態的?能不能宣告 main() 方法為非靜態

  • 是否可以從一個靜態(static)方法內部發出對非靜態(non-static)方法的呼叫

  • 靜態變數在什麼時候載入?編譯期還是執行期?靜態程式碼塊載入的時機呢

  • 成員方法是否可以訪問靜態變數?為什麼靜態方法不能訪問成員變數

switch

  • switch 陳述句中的運算式可以是什麼型別資料

  • switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上

  • while 迴圈和 do 迴圈有什麼不同

運運算元

  • &運運算元和&&運運算元有什麼區別?

  • a = a + b 與 a += b 的區別?

  • 邏輯運運算元 (&,|,^)與條件運運算元(&&,||)的區別

  • 3*0.1 == 0.3 將會傳回什麼?true 還是 false?

  • float f=3.4; 是否正確?

  • short s1 = 1; s1 = s1 + 1;有什麼錯?

資料結構

基礎型別(Primitives)

  • 基礎型別(Primitives)與封裝型別(Wrappers)的區別在哪裡

  • 簡述九種基本資料型別的大小,以及他們的封裝類

  • int 和 Integer 哪個會佔用更多的記憶體? int 和 Integer 有什麼區別?parseInt()函式在什麼時候使用到

  • float和double的預設值是多少

  • 如何去小數四捨五入保留小數點後兩位

  • char 型變數中能不能存貯一個中文漢字,為什麼

型別轉換

  • 怎樣將 bytes 轉換為 long 型別

  • 怎麼將 byte 轉換為 String

  • 如何將數值型字元轉換為數字

  • 我們能將 int 強制轉換為 byte 型別的變數嗎?如果該值大於 byte 型別的範圍,將會出現什麼現象

  • 能在不進行強制轉換的情況下將一個 double 值賦值給 long 型別的變數嗎

  • 型別向下轉換是什麼

陣列

  • 如何權衡是使用無序的陣列還是有序的陣列

  • 怎麼判斷陣列是 null 還是為空

  • 怎麼列印陣列? 怎樣列印陣列中的重覆元素

  • Array 和 ArrayList有什麼區別?什麼時候應該使用Array而不是ArrayList

  • 陣列和連結串列資料結構描述,各自的時間複雜度

  • 陣列有沒有length()這個方法? String有沒有length()這個方法

佇列

  • 佇列和棧是什麼,列出它們的區別

  • BlockingQueue是什麼

  • 簡述 ConcurrentLinkedQueue LinkedBlockingQueue 的用處和不同之處。

ArrayList、Vector、LinkedList的儲存效能和特性

String

StringBuffer

  • ByteBuffer 與 StringBuffer有什麼區別

HashMap

  • HashMap的工作原理是什麼

  • 內部的資料結構是什麼

  • HashMap 的 table的容量如何確定?loadFactor 是什麼? 該容量如何變化?這種變化會帶來什麼問題?

  • HashMap 實現的資料結構是什麼?如何實現

  • HashMap 和 HashTable、ConcurrentHashMap 的區別

  • HashMap的遍歷方式及效率

  • HashMap、LinkedMap、TreeMap的區別

  • 如何決定選用HashMap還是TreeMap

  • 如果HashMap的大小超過了負載因子(load factor)定義的容量,怎麼辦

  • HashMap 是執行緒安全的嗎?併發下使用的 Map 是什麼,它們內部原理分別是什麼,比如儲存方式、 hashcode、擴容、 預設容量等

HashSet

  • HashSet和TreeSet有什麼區別

  • HashSet 內部是如何工作的

  • WeakHashMap 是怎麼工作的?

Set

  • Set 裡的元素是不能重覆的,那麼用什麼方法來區分重覆與否呢?是用 == 還是 equals()? 它們有何區別?

  • TreeMap:TreeMap 是採用什麼樹實現的?TreeMap、HashMap、LindedHashMap的區別。TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?

  • TreeSet:一個已經構建好的 TreeSet,怎麼完成倒排序。

  • EnumSet 是什麼

Hash演演算法

  • Hashcode 的作用

  • 簡述一致性 Hash 演演算法

  • 有沒有可能 兩個不相等的物件有相同的 hashcode?當兩個物件 hashcode 相同怎麼辦?如何獲取值物件

  • 為什麼在重寫 equals 方法的時候需要重寫 hashCode 方法?equals與 hashCode 的異同點在哪裡

  • a.hashCode() 有什麼用?與 a.equals(b) 有什麼關係

  • hashCode() 和 equals() 方法的重要性體現在什麼地方

  • Object:Object有哪些公用方法?Object類hashcode,equals 設計原則? sun為什麼這麼設計?Object類的概述

  • 如何在父類中為子類自動完成所有的 hashcode 和 equals 實現?這麼做有何優劣。

  • 可以在 hashcode() 中使用隨機數字嗎?

LinkedHashMap

  • LinkedHashMap 和 PriorityQueue 的區別是什麼

List

  • List, Set, Map三個介面,存取元素時各有什麼特點

  • List, Set, Map 是否繼承自 Collection 介面

  • 遍歷一個 List 有哪些不同的方式

  • LinkedList

  1. LinkedList 是單向連結串列還是雙向連結串列

  2. LinkedList 與 ArrayList 有什麼區別

  3. 描述下 Java 中集合(Collections),介面(Interfaces),實現(Implementations)的概念。LinkedList 與 ArrayList 的區別是什麼?

  4. 插入資料時,ArrayList, LinkedList, Vector誰速度較快?

  • ArrayList

  1. ArrayList 和 HashMap 的預設大小是多數

  2. ArrayList 和 LinkedList 的區別,什麼時候用 ArrayList?

  3. ArrayList 和 Set 的區別?

  4. ArrayList, LinkedList, Vector的區別

  5. ArrayList是如何實現的,ArrayList 和 LinkedList 的區別

  6. ArrayList如何實現擴容

  7. Array 和 ArrayList 有何區別?什麼時候更適合用Array

  8. 說出ArraList,Vector, LinkedList的儲存效能和特性

Map

  • Map, Set, List, Queue, Stack

  • Map 介面提供了哪些不同的集合檢視

  • 為什麼 Map 介面不繼承 Collection 介面

Collections

  • 介紹Java中的Collection FrameWork。集合類框架的基本介面有哪些

  • Collections類是什麼?Collection 和 Collections的區別?Collection、Map的實現

  • 集合類框架的最佳實踐有哪些

  • 為什麼 Collection 不從 Cloneable 和 Serializable 介面繼承

  • 說出幾點 Java 中使用 Collections 的最佳實踐?

  • Collections 中 遺留類 (HashTable、Vector) 和 現有類的區別

什麼是 B+樹,B-樹,列出實際的使用場景。

介面

  • Comparator 與 Comparable 介面是乾什麼的?列出它們的區別

物件

複製(clone)

  • 如何實現物件克隆

  • 深複製和淺複製區別

  • 深複製和淺複製如何實現啟用機制

  • 寫clone()方法時,通常都有一行程式碼,是什麼

比較

  • 在比較物件時,”==” 運運算元和 equals 運算有何區別

  • 如果要重寫一個物件的equals方法,還要考慮什麼

  • 兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對

建構式

  • 建構式鏈是什麼

  • 建立物件時建構式的呼叫順序

不可變物件

  • 什麼是不可變象(immutable object)

  • 為什麼 Java 中的 String 是不可變的(Immutable)

  • 如何構建不可變的類結構?關鍵點在哪裡

  • 能建立一個包含可變物件的不可變物件嗎

  • 如何對一組物件進行排序

方法

  • 建構式(constructor)是否可被重寫(override)

  • 方法可以同時即是 static 又是 synchronized 的嗎

  • abstract 的 method是否可同時是 static,是否可同時是 native,是否可同時是synchronized

  • Java支援哪種引數傳遞型別

  • 一個物件被當作引數傳遞到一個方法,是值傳遞還是取用傳遞

  • 當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可傳回變化後的結果,那麼這裡到底是值傳遞還是取用傳遞

  • 我們能否多載main()方法

  • 如果main方法被宣告為private會怎樣

GC

概念

  • GC是什麼?為什麼要有GC

  • 什麼時候會導致垃圾回收

  • GC是怎麼樣執行的

  • 新老以及永久區是什麼

  • GC 有幾種方式?怎麼配置

  • 什麼時候一個物件會被GC? 如何判斷一個物件是否存活

  • System.gc() Runtime.gc()會做什麼事情? 能保證 GC 執行嗎

  • 垃圾回收器可以馬上回收記憶體嗎?有什麼辦法主動通知虛擬機器進行垃圾回收?

  • Minor GC 、Major GC、Young GC 與 Full GC分別在什麼時候發生

  • 垃圾回收演演算法的實現原理

  • 如果物件的取用被置為null,垃圾收集器是否會立即釋放物件佔用的記憶體?

  • 垃圾回收的最佳做法是什麼

GC收集器有哪些

  • 垃圾回收器的基本原理是什麼?

  • 序列(serial)收集器和吞吐量(throughput)收集器的區別是什麼

  • Serial 與 Parallel GC之間的不同之處

  • CMS 收集器 與 G1 收集器的特點與區別

  • CMS垃圾回收器的工作過程

  • JVM 中一次完整的 GC 流程是怎樣的? 物件如何晉升到老年代

  • 吞吐量優先和響應優先的垃圾收集器選擇

GC策略

  • 舉個實際的場景,選擇一個GC策略

  • JVM的永久代中會發生垃圾回收嗎

收集方法

標記清除、標記整理、複製演演算法的原理與特點?分別用在什麼地方

如果讓你最佳化收集方法,有什麼思路

JVM

引數

  • 說說你知道的幾種主要的jvm 引數

  • -XX:+UseCompressedOops 有什麼作用

類載入器(ClassLoader)

  • Java 類載入器都有哪些

  • JVM如何載入位元組碼檔案

記憶體管理

  • JVM記憶體分哪幾個區,每個區的作用是什麼

  • 一個物件從建立到銷毀都是怎麼在這些部分裡存活和轉移的

  • 解釋記憶體中的棧(stack)、堆(heap)和方法區(method area)的用法

  • JVM中哪個引數是用來控制執行緒的棧堆疊小

  • 簡述記憶體分配與回收策略

  • 簡述重排序,記憶體屏障,happen-before,主記憶體,工作記憶體

  • Java中存在記憶體洩漏問題嗎?請舉例說明

  • 簡述 Java 中軟取用(SoftReferenc)、弱取用(WeakReference)和虛取用

  • 記憶體對映快取區是什麼

  1. jstack,jstat,jmap,jconsole怎麼用

  2. 32 位 JVM 和 64 位 JVM 的最大堆記憶體分別是多數?32 位和 64 位的 JVM,int 型別變數的長度是多數?

  3. 怎樣透過 Java 程式來判斷 JVM 是 32 位 還是 64 位

  4. JVM自身會維護快取嗎?是不是在堆中進行物件分配,作業系統的堆還是JVM自己管理堆

  5. 什麼情況下會發生棧記憶體上限溢位

  6. 雙親委派模型是什麼

多執行緒

基本概念

  • 什麼是執行緒

  • 多執行緒的優點

  • 多執行緒的幾種實現方式

  1. 用 Runnable 還是 Thread

  • 什麼是執行緒安全

  1. Vector, SimpleDateFormat 是執行緒安全類嗎

  2. 什麼 Java 原型不是執行緒安全的

  3. 哪些集合類是執行緒安全的

  • 多執行緒中的忙迴圈是什麼

  • 如何建立一個執行緒

  • 編寫多執行緒程式有幾種實現方式

  • 什麼是執行緒區域性變數

  • 執行緒和行程有什麼區別?行程間如何通訊,執行緒間如何通訊

  • 什麼是多執行緒環境下的偽共享(false sharing)

  • 同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明

Current

  • ConcurrentHashMap 和 Hashtable的區別

  • ArrayBlockingQueue, CountDownLatch的用法

  • ConcurrentHashMap的併發度是什麼

CyclicBarrier 和 CountDownLatch有什麼不同?各自的內部原理和用法是什麼

Semaphore的用法

Thread

  • 啟動一個執行緒是呼叫 run() 還是 start() 方法?start() 和 run() 方法有什麼區別

  • 呼叫start()方法時會執行run()方法,為什麼不能直接呼叫run()方法

  • sleep() 方法和物件的 wait() 方法都可以讓執行緒暫停執行,它們有什麼區別

  • yield方法有什麼作用?sleep() 方法和 yield() 方法有什麼區別

  • Java 中如何停止一個執行緒

  • stop() 和 suspend() 方法為何不推薦使用

  • 如何在兩個執行緒間共享資料

  • 如何強制啟動一個執行緒

  • 如何讓正在執行的執行緒暫停一段時間

  • 什麼是執行緒組,為什麼在Java中不推薦使用

  • 你是如何呼叫 wait(方法的)?使用 if 塊還是迴圈?為什麼

生命週期

  • 有哪些不同的執行緒生命週期

  • 執行緒狀態,BLOCKED 和 WAITING 有什麼區別

  • 畫一個執行緒的生命週期狀態圖

ThreadLocal 用途是什麼,原理是什麼,用的時候要註意什麼

ThreadPool

  • 執行緒池是什麼?為什麼要使用它

  • 如何建立一個Java執行緒池

  • ThreadPool用法與優勢

  • 提交任務時,執行緒池佇列已滿時會發會生什麼

  • newCache 和 newFixed 有什麼區別?簡述原理。建構式的各個引數的含義是什麼,比如 coreSize, maxsize 等

  • 執行緒池的實現策略

  • 執行緒池的關閉方式有幾種,各自的區別是什麼

  • 執行緒池中submit() 和 execute()方法有什麼區別?

執行緒排程

  • Java中用到的執行緒排程演演算法是什麼

  • 什麼是多執行緒中的背景關係切換

  • 你對執行緒優先順序的理解是什麼

  • 什麼是執行緒排程器 (Thread Scheduler) 和時間分片 (Time Slicing)

執行緒同步

  • 請說出你所知的執行緒同步的方法

  • synchronized 的原理是什麼

  • synchronized 和 ReentrantLock 有什麼不同

  • 什麼場景下可以使用 volatile 替換 synchronized

  • 有T1,T2,T3三個執行緒,怎麼確保它們按順序執行?怎樣保證T2在T1執行完後執行,T3在T2執行完後執行

  • 同步塊內的執行緒丟擲異常會發生什麼

  • 當一個執行緒進入一個物件的 synchronized 方法A 之後,其它執行緒是否可進入此物件的 synchronized 方法B

  • 使用 synchronized 修飾靜態方法和非靜態方法有什麼區別

  • 如何從給定集合那裡建立一個 synchronized 的集合

  • Java Concurrency API 中 的 Lock 介面是什麼?對比同步它有什麼優勢

  • Lock 與 Synchronized 的區別?Lock 介面比 synchronized 塊的優勢是什麼

  • ReadWriteLock是什麼?

  • 鎖機制有什麼用

  • 什麼是樂觀鎖(Optimistic Locking)?如何實現樂觀鎖?如何避免ABA問題

  • 解釋以下名詞:重排序,自旋鎖,偏向鎖,輕量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖

  • 什麼時候應該使用可重入鎖

  • 簡述鎖的等級方法鎖、物件鎖、類鎖

  • Java中活鎖和死鎖有什麼區別?

  • 什麼是死鎖(Deadlock)?導致執行緒死鎖的原因?如何確保 N 個執行緒可以訪問 N 個資源同時又不導致死鎖

  • 死鎖與活鎖的區別,死鎖與饑餓的區別

  • 怎麼檢測一個執行緒是否擁有鎖

  • 如何實現分散式鎖

  • 有哪些無鎖資料結構,他們實現的原理是什麼

  • 讀寫鎖可以用於什麼應用場景

  • Executors類是什麼? Executor和Executors的區別

  • 什麼是Java執行緒轉儲(Thread Dump),如何得到它

  • 如何在Java中獲取執行緒堆疊

  • 說出 3 條在 Java 中使用執行緒的最佳實踐

  • 在執行緒中你怎麼處理不可捕捉異常

  • 實際專案中使用多執行緒舉例。你在多執行緒環境中遇到的常見的問題是什麼?你是怎麼解決它的

  • 請說出與執行緒同步以及執行緒排程相關的方法

  • 程式中有3個 socket,需要多少個執行緒來處理

  • 假如有一個第三方介面,有很多個執行緒去呼叫獲取資料,現在規定每秒鐘最多有 10 個執行緒同時呼叫它,如何做到

  • 如何在 Windows 和 Linux 上查詢哪個執行緒使用的 CPU 時間最長

  • 如何確保 main() 方法所在的執行緒是 Java 程式最後結束的執行緒

  • 非常多個執行緒(可能是不同機器),相互之間需要等待協調才能完成某種工作,問怎麼設計這種協調方案

  • 你需要實現一個高效的快取,它允許多個使用者讀,但只允許一個使用者寫,以此來保持它的完整性,你會怎樣去實現它

異常

基本概念

  • Error 和 Exception有什麼區別

  1. UnsupportedOperationException是什麼

  2. NullPointerException 和 ArrayIndexOutOfBoundException 之間有什麼相同之處

  • 什麼是受檢查的異常,什麼是執行時異常

  • 執行時異常與一般異常有何異同

  • 簡述一個你最常見到的runtime exception(執行時異常)

finally

  • finally關鍵詞在異常處理中如何使用

  1. 如果執行finally程式碼塊之前方法傳回了結果,或者JVM退出了,finally塊中的程式碼還會執行嗎

  2. try裡有return,finally還執行麼?那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後

  3. 在什麼情況下,finally陳述句不會執行

  • throw 和 throws 有什麼區別?

  • OOM你遇到過哪些情況?你是怎麼搞定的?

  • SOF你遇到過哪些情況?

  • 既然我們可以用RuntimeException來處理錯誤,那麼你認為為什麼Java中還存在檢查型異常

  • 當自己建立異常類的時候應該註意什麼

  • 導致空指標異常的原因

  • 異常處理 handle or declare 原則應該如何理解

  • 怎麼利用 JUnit 來測試一個方法的異常

  • catch塊裡別不寫程式碼有什麼問題

  • 你曾經自定義實現過異常嗎?怎麼寫的

  • 什麼是 異常鏈

  • 在try塊中可以丟擲異常嗎

JDBC

  • 透過 JDBC 連線資料庫有哪幾種方式

  • 闡述 JDBC 運算元據庫的基本步驟

  • JDBC 中如何進行事務處理

  • 什麼是 JdbcTemplate

  • 什麼是 DAO 模組

  • 使用 JDBC 運算元據庫時,如何提升讀取資料的效能?如何提升更新資料的效能

  • 列出 5 個應該遵循的 JDBC 最佳實踐

IO

File

  • File型別中定義了什麼方法來建立一級目錄

  • File型別中定義了什麼方法來判斷一個檔案是否存在

  • 為了提高讀寫效能,可以採用什麼流

  • Java中有幾種型別的流

  • JDK 為每種型別的流提供了一些抽象類以供繼承,分別是哪些類

  • 對文字檔案操作用什麼I/O流

  • 對各種基本資料型別和String型別的讀寫,採用什麼流

  • 能指定字元編碼的 I/O 流型別是什麼

序列化

  • 什麼是序列化?如何實現 Java 序列化及註意事項

  • Serializable 與 Externalizable 的區別

Socket

  • socket 選項 TCP NO DELAY 是指什麼

  • Socket 工作在 TCP/IP 協議棧是哪一層

  • TCP、UDP 區別及 Java 實現方式

  • 說幾點 IO 的最佳實踐

  • 直接緩衝區與非直接緩衝器有什麼區別?

  • 怎麼讀寫 ByteBuffer?ByteBuffer 中的位元組序是什麼

  • 當用System.in.read(buffer)從鍵盤輸入一行n個字元後,儲存在緩衝區buffer中的位元組數是多少

  • 如何使用掃描器類(Scanner Class)令牌化

面向物件程式設計(OOP)

  • 解釋下多型性(polymorphism),封裝性(encapsulation),內聚(cohesion)以及耦合(coupling)

  • 多型的實現原理

  • 封裝、繼承和多型是什麼

  • 物件封裝的原則是什麼?

  1. 獲得一個類的類物件有哪些方式

  2. 多載(Overload)和重寫(Override)的區別。多載的方法能否根據傳回型別進行區分?

  3. 說出幾條 Java 中方法多載的最佳實踐

  • 抽象類

  1. 抽象類和介面的區別

  2. 抽象類中是否可以有靜態的main方法

  3. 抽象類是否可實現(implements)介面

  4. 抽象類是否可繼承具體類(concrete class)

  • 匿名類(Anonymous Inner Class)

  1. 匿名內部類是否可以繼承其它類?是否可以實現介面

  • 內部類

  1. 內部類分為幾種

  2. 內部類可以取用它的包含類(外部類)的成員嗎

  3. 請說一下 Java 中為什麼要引入內部類?還有匿名內部類

  • 繼承

  1. 繼承(Inheritance)與聚合(Aggregation)的區別在哪裡

  2. 繼承和組合之間有什麼不同

  3. 為什麼類只能單繼承,介面可以多繼承

  4. 存在兩個類,B 繼承 A,C 繼承 B,能將 B 轉換為 C 麼?如 C = (C) B

  5. 如果類 a 繼承類 b,實現介面c,而類 b 和介面 c 中定義了同名變數,請問會出現什麼問題

  • 介面

  1. 介面是什麼

  2. 介面是否可繼承介面

  3. 為什麼要使用介面而不是直接使用具體類?介面有什麼優點

泛型

  • 泛型的存在是用來解決什麼問題

  • 泛型的常用特點

  • List能否轉為List

工具類

日曆

  • Calendar Class的用途

  • 如何在Java中獲取日曆類的實體

  • 解釋一些日曆類中的重要方法

  • GregorianCalendar 類是什麼

  • SimpleTimeZone 類是什麼

  • Locale類是什麼

  • 如何格式化日期物件

  • 如何新增小時(hour)到一個日期物件(Date Objects)

  • 如何將字串 YYYYMMDD 轉換為日期

Math

  • Math.round()什麼作用?Math.round(11.5) 等於多少?Math.round(-11.5)等於多少?

XML

  • XML檔案定義有幾種形式?它們之間有何本質區別?解析XML檔案有哪幾種方式?DOM 和 SAX 解析器有什麼不同?

  • Java解析XML的方式

  • 用 jdom 解析 xml 檔案時如何解決中文問題?如何解析

  • 你在專案中用到了 XML 技術的哪些方面?如何實現

動態代理

  • 描述動態代理的幾種實現方式,分別說出相應的優缺點

設計樣式

  • 什麼是設計樣式(Design Patterns)?你用過哪種設計樣式?用在什麼場合

  • 你知道哪些商業級設計樣式?

  • 哪些設計樣式可以增加系統的可擴充套件性

  • 單例樣式

  1. 除了單例樣式,你在生產環境中還用過什麼設計樣式?

  2. 寫 Singleton 單例樣式

  3. 單例樣式的雙檢鎖是什麼

  4. 如何建立執行緒安全的 Singleton

  5. 什麼是類的單例樣式

  6. 寫出三種單例樣式實現

  • 配接器樣式

  1. 配接器樣式是什麼?什麼時候使用

  2. 配接器樣式和代理樣式之前有什麼不同

  3. 配接器樣式和裝飾器樣式有什麼區別

  • 什麼時候使用享元樣式

  • 什麼時候使用組合樣式

  • 什麼時候使用訪問者樣式

  • 什麼是模板方法樣式

  • 請給出1個符合開閉原則的設計樣式的例子

開放問題

  • 用一句話概括 Web 程式設計的特點

  • Google是如何在一秒內把搜尋結果傳回給使用者

  • 哪種依賴註入方式你建議使用,建構式註入,還是 Setter方法註入

  • 樹(二叉或其他)形成許多普通資料結構的基礎。請描述一些這樣的資料結構以及何時可以使用它們

  • 某一項功能如何設計

  • 線上系統突然變得異常緩慢,你如何查詢問題

  • 什麼樣的專案不適合用框架

  • 新浪微博是如何實現把微博推給訂閱者

  • 簡要介紹下從瀏覽器輸入 URL 開始到獲取到請求介面之後 Java Web 應用中發生了什麼

  • 請你談談SSH整合

  • 高併發下,如何做到安全的修改同一行資料

  • 12306網站的訂票系統如何實現,如何保證不會票不被超賣

  • 網站效能最佳化如何最佳化的

  • 聊了下曾經參與設計的伺服器架構

  • 請思考一個方案,實現分散式環境下的 countDownLatch

  • 請思考一個方案,設計一個可以控制快取總體大小的自動適應的本地快取

  • 在你的職業生涯中,算得上最困難的技術挑戰是什麼

  • 如何寫一篇設計檔案,目錄是什麼

  • 大寫的O是什麼?舉幾個例子

  • 程式設計中自己都怎麼考慮一些設計原則的,比如開閉原則,以及在工作中的應用

  • 解釋一下網路應用的樣式及其特點

  • 設計一個線上檔案系統,檔案可以被編輯,如何防止多人同時對同一份檔案進行編輯更新

  • 說出資料連線池的工作機制是什麼

  • 怎麼獲取一個檔案中單詞出現的最高頻率

  • 描述一下你最常用的程式設計風格

  • 如果有機會重新設計你們的產品,你會怎麼做

  • 如何搭建一個高可用系統

  • 如何啟動時不需輸入使用者名稱與密碼

  • 如何在基於Java的Web專案中實現檔案上傳和下載

  • 如何實現一個秒殺系統,保證只有幾位使用者能買到某件商品。

  • 如何實現負載均衡,有哪些演演算法可以實現

  • 如何設計一個購物車?想想淘寶的購物車如何實現的

  • 如何設計一套高併發支付方案,架構如何設計

  • 如何設計建立和保持 100w 的長連線

  • 如何避免瀏覽器快取。

  • 如何防止快取雪崩

  • 如果AB兩個系統互相依賴,如何解除依

  • 如果有人惡意建立非法連線,怎麼解決

  • 如果有幾十億的白名單,每天白天需要高併發查詢,晚上需要更新一次,如何設計這個功能

  • 如果系統要使用超大整數(超過long長度範圍),請你設計一個資料結構來儲存這種超大型數字以及設計一種演演算法來實現超大整數加法運算)

  • 如果要設計一個圖形系統,請你設計基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實現

  • 如果讓你實現一個併發安全的連結串列,你會怎麼做

  • 應用伺服器與WEB 伺服器的區別?應用伺服器怎麼監控效能,各種方式的區別?你使用過的應用伺服器最佳化技術有哪些

  • 大型網站在架構上應當考慮哪些問題

  • 有沒有處理過線上問題?出現記憶體洩露,CPU利用率標高,應用無響應時如何處理的

  • 最近看什麼書,印象最深刻的是什麼

  • 描述下常用的重構技巧

  • 你使用什麼版本管理工具?分支(Branch)與標簽(Tag)之間的區別在哪裡

  • 你有瞭解過存在哪些反樣式(Anti-Patterns)嗎

  • 你用過的網站前端最佳化的技術有哪些

  • 如何分析Thread dump

  • 你如何理解AOP中的連線點(Joinpoint)、切點(Pointcut)、增強(Advice)、引介(Introduction)、織入(Weaving)、切麵(Aspect)這些概念

  • 你是如何處理記憶體洩露或者棧上限溢位問題的

  • 你們線上應用的 JVM 引數有哪些

  • 怎麼提升系統的QPS和吞吐量

知識面

  • 解釋什麼是 MESI 協議(快取一致性)

  • 談談 reactor 模型

  • Java 9 帶來了怎樣的新功能

  • Java 與 C++ 對比,C++ 或 Java 中的異常處理機制的簡單原理和應用

  • 簡單講講 Tomcat 結構,以及其類載入器流程

  • 虛擬記憶體是什麼

  • 闡述下 SOLID 原則

  • 請簡要講一下你對測試驅動開發(TDD)的認識

  • CDN實現原理

  • Maven 和 ANT 有什麼區別

  • UML中有哪些常用的圖

  • Linux

  1. Linux 下 IO 模型有幾種,各自的含義是什麼。

  2. Linux 系統下你關註過哪些核心引數,說說你知道的

  3. Linux 下用一行命令檢視檔案的最後五行

  4. 平時用到哪些 Linux 命令

  5. 用一行命令輸出正在執行的 Java 行程

  6. 使用什麼命令來確定是否有 Tomcat 實體執行在機器上

  • 什麼是 N+1 難題

  • 什麼是 paxos 演演算法

  • 什麼是 restful,講講你理解的 restful

  • 什麼是 zab 協議

  • 什麼是領域模型(domain model)?貧血模型(anaemic domain model) 和充血模型(rich domain model)有什麼區別

  • 什麼是領域驅動開發(Domain Driven Development)

  • 介紹一下瞭解的 Java 領域的 Web Service 框架

  • Web Server、Web Container 與 Application Server 的區別是什麼

  • 微服務(MicroServices)與巨石型應用(Monolithic Applications)之間的區別在哪裡

  • 描述 Cookie 和 Session 的作用,區別和各自的應用範圍,Session工作原理

  • 你常用的持續整合(Continuous Integration)、靜態程式碼分析(Static Code Analysis)工具有哪些

  • 簡述下資料庫正則化(Normalizations)

  • KISS,DRY,YAGNI 等原則是什麼含義

  • 分散式事務的原理,優缺點,如何使用分散式事務?

  • 布式叢集下如何做到唯一序列號

  • 網路

  1. HTTPS 的加密方式是什麼,講講整個加密解密流程

  2. HTTPS和HTTP的區別

  3. HTTP連線池實現原理

  4. HTTP叢集方案

  5. Nginx、lighttpd、Apache三大主流 Web伺服器的區別

  • 是否看過框架的一些程式碼

  • 持久層設計要考慮的問題有哪些?你用過的持久層框架有哪些

  • 數值提升是什麼

  • 你能解釋一下里氏替換原則嗎

  • 你是如何測試一個應用的?知道哪些測試框架

  • 傳輸層常見程式設計協議有哪些?並說出各自的特點

程式設計題

計算加班費

加班10小時以下加班費是時薪的1.5倍。加班10小時或以上,按4元/時算。提示:(一個月工作26天,一天正常工作8小時)

  • 計算1000月

看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,提升Java技能

贊(0)

分享創造快樂