02.11 2020年史上最全Java面試題:數據結構+算法+JVM+線程+finalize+GC

基本概念

  • 操作系統中 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()方法
  1. finalize()方法什麼時候被調用
  2. 析構函數(finalization)的目的是什麼
  3. final 和 finalize 的區別
  4. final
  • final關鍵字有哪些用法
  1. final 與 static 關鍵字可以用於哪裡?它們的作用是什麼
  2. final, finally, finalize的區別
  3. final、finalize 和 finally 的不同之處?
  • 能否在運行時向 static final 類型的賦值
  1. 使用final關鍵字修飾一個變量時,是引用不能變,還是引用的對象不能變
  2. 一個類被聲明為final類型,表示了什麼意思
  3. 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的存儲性能和特性StringStringBuffer

  • 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)和虛引用
  • 內存映射緩存區是什麼

jstack,jstat,jmap,jconsole怎麼用32 位 JVM 和 64 位 JVM 的最大堆內存分別是多數?32 位和 64 位的 JVM,int 類型變量的長度是多數?怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64 位JVM自身會維護緩存嗎?是不是在堆中進行對象分配,操作系統的堆還是JVM自己管理堆什麼情況下會發生棧內存溢出雙親委派模型是什麼

多線程

基本概念

  • 什麼是線程
  • 多線程的優點
  • 多線程的幾種實現方式
  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
  1. File類型中定義了什麼方法來創建一級目錄

File類型中定義了什麼方法來判斷一個文件是否存在

  1. 為了提高讀寫性能,可以採用什麼流
  2. Java中有幾種類型的流
  3. JDK 為每種類型的流提供了一些抽象類以供繼承,分別是哪些類
  4. 對文本文件操作用什麼I/O流
  5. 對各種基本數據類型和String類型的讀寫,採用什麼流
  6. 能指定字符編碼的 I/O 流類型是什麼
  • 序列化
  1. 什麼是序列化?如何實現 Java 序列化及注意事項
  2. Serializable 與 Externalizable 的區別
  • Socket
  1. socket 選項 TCP NO DELAY 是指什麼
  2. Socket 工作在 TCP/IP 協議棧是哪一層
  3. 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. 內部類分為幾種
  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

工具類

  • 日曆
  1. Calendar Class的用途
  2. 如何在Java中獲取日曆類的實例
  3. 解釋一些日曆類中的重要方法
  4. GregorianCalendar 類是什麼
  5. SimpleTimeZone 類是什麼
  6. Locale類是什麼
  7. 如何格式化日期對象
  8. 如何添加小時(hour)到一個日期對象(Date Objects)
  9. 如何將字符串 YYYYMMDD 轉換為日期
  • Math

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

  • XML
  1. XML文檔定義有幾種形式?它們之間有何本質區別?解析XML文檔有哪幾種方式?DOM 和 SAX 解析器有什麼不同?
  2. Java解析XML的方式
  3. 用 jdom 解析 xml 文件時如何解決中文問題?如何解析
  4. 你在項目中用到了 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月薪,加班9小時的加班費
  • 計算2500月薪,加班11小時的加班費
  • 計算1000月薪,加班15小時的加班費

賣東西

一家商場有紅蘋果和青蘋果出售。(紅蘋果5元/個,青蘋果4元/個)。

  • 模擬一個進貨。紅蘋果跟青蘋果各進200個。
  • 模擬一個出售。紅蘋果跟青蘋果各買出10個。每賣出一個蘋果需要進行統計。

提示:一個蘋果是一個單獨的實體。

日期提取

有這樣一個時間字符串:2008-8-8 20:08:08 , 請編寫能夠匹配它的正則表達式,並編寫Java代碼將日期後面的時分秒提取出來,即:20:08:08

線程

  • 8設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序。
  • 用Java寫一個多線程程序,如寫四個線程,二個加1,二個對一個變量減一,輸出
  • wait-notify 寫一段代碼來解決生產者-消費者問題

數字

  • 判斷101-200之間有多少個素數,並輸出所有素數
  • 用最有效率的方法算出2乘以17等於多少
  • 有 1 億個數字,其中有 2 個是重複的,快速找到它,時間和空間要最優
  • 2 億個隨機生成的無序整數,找出中間大小的值
  • 10 億個數字裡裡面找最小的 10 個
  • 1到1億的自然數,求所有數的拆分後的數字之和,如286 拆分成2、8、6,如1到11拆分後的數字之和 => 1 + … + 9 + 1 + 0 + 1 + 1
  • 一個數如果恰好等於它的因子之和,這個數就稱為 “完數 “。例如6=1+2+3.編程 找出1000以內的所有完數
  • 一個數組中所有的元素都出現了三次,只有一個元素出現了一次找到這個元素
  • 一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在 第10次落地時,共經過多少米?第10次反彈多高?
  • 求100-1000內質數的和
  • 求1到100的和的平均數
  • 求s=a+a+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。 求出1到100的和
  • 算出1到40的質數,放進數組裡
  1. 顯示放組裡的數
  2. 找出第[5]個數
  3. 刪除第[9]個數,再顯示刪除後的第[9]個
  • 有 3n+1 個數字,其中 3n 箇中是重複的,只有 1 個是不重複的,怎麼找出來。
  • 有一組數1.1.2.3.5.8.13.21.34。寫出程序隨便輸入一個數就能給出和前一組數字同規律的頭5個數
  • 計算指定數字的階乘
  • 開發 Fizz Buzz
  • 給定一個包含 N 個整數的數組,找出丟失的整數
  • 一個排好序的數組,找出兩數之和為m的所有組合
  • 將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
  • 打印出所有的 “水仙花數 “,所謂 “水仙花數 “是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個 “水仙花數 “,因為153=1的三次方+5的三次方+3的三次方
  • 原地交換兩個變量的值
  • 找出4字節整數的中位數
  • 找到整數的平方根
  • 實現斐波那契

網絡

  • 用Java Socket編程,讀服務器幾個字符,再寫入本地顯示

反射

  • 反射機制提供了什麼功能?
  • 反射是如何實現的
  • 哪裡用到反射機制
  • 反射中 Class.forName 和 ClassLoader 區別
  • 反射創建類實例的三種方式是什麼
  • 如何通過反射調用對象的方法
  • 如何通過反射獲取和設置對象私有字段的值
  • 反射機制的優缺點

數據庫

  • 寫一段 JDBC 連Oracle的程序,並實現數據查詢

算法

  • 50個人圍坐一圈,當數到三或者三的倍數出圈,問剩下的人是誰,原來的位置是多少
  • 實現一個電梯模擬器用
  • 寫一個冒泡排序
  • 寫一個折半查找
  • 隨機產生20個不能重複的字符並排序
  • 寫一個函數,傳入 2 個有序的整數數組,返回一個有序的整數數組
  • 寫一段代碼在遍歷 ArrayList 時移除一個元素
  • 古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第四個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少
  • 約瑟芬環遊戲

正則

  • 請編寫一段匹配IP地址的正則表達式
  • 寫出一個正則表達式來判斷一個字符串是否是一個數字

字符串

  • 寫一個方法,入一個文件名和一個字符串,統計這個字符串在這個文件中出現的次數。
  • 寫一個程序找出所有字符串的組合,並檢查它們是否是迴文串
  • 寫一個字符串反轉函數,輸入abcde轉換成edcba代碼
  • 小遊戲,倒轉句子中的單詞
  • 將GB2312編碼的字符串轉換為ISO-8859-1編碼的字符串
  • 請寫一段代碼來計算給定文本內字符“A”的個數。分別用迭代和遞歸兩種方式
  • 編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如“我ABC”4,應該截為“我AB”,輸入“我ABC漢DEF”,6,應該輸出為“我ABC”而不是“我ABC+漢的半個”
  • 給定 2 個包含單詞列表(每行一個)的文件,編程列出交集
  • 打印出一個字符串的所有排列
  • 將一個鍵盤輸入的數字轉化成中文輸出(例如:輸入1234567,輸出:一百二拾三萬四千五百六拾七)
  • 在Web應用開發過程中經常遇到輸出某種編碼的字符,如從 GBK 到 ISO8859-1等,如何輸出一個某種編碼的字符串

日期

  • 計算兩個日期之間的差距

面試答案

針對於上面的面試題我總結出了互聯網公司java程序員面試涉及到的絕大部分面試題及答案做成了文檔和架構視頻資料免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),希望能幫助到您面試前的複習且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。

資料領取方式:

轉發+評論,關注我私信回覆【面試資料】即可免費獲取

2020年史上最全Java面試題:數據結構+算法+JVM+線程+finalize+GC

面試答案


2020年史上最全Java面試題:數據結構+算法+JVM+線程+finalize+GC

面試答案

2020年史上最全Java面試題:數據結構+算法+JVM+線程+finalize+GC

208頁核心面試寶典

轉發+評論,關注我私信回覆【面試資料】即可免費獲取


分享到:


相關文章: