基本概念
- 操作系統(tǒng)中 heap 和 stack 的區(qū)別
- 什么是基于注解的切面實現(xiàn)
- 什么是 對象/關系 映射集成模塊
- 什么是 Java 的反射機制
- 什么是 ACID
- BS與CS的聯(lián)系與區(qū)別
- Cookie 和 Session的區(qū)別
- fail-fast 與 fail-safe 機制有什么區(qū)別
- get 和 post請求的區(qū)別
- Interface 與 abstract 類的區(qū)別
- IOC的優(yōu)點是什么
- IO 和 NIO的區(qū)別,NIO優(yōu)點
- Java 8 / Java 7 為我們提供了什么新功能
- 什么是競態(tài)條件? 舉個例子說明卖擅。
- JRE糟需、JDK澈吨、JVM 及 JIT 之間有什么不同
- MVC的各個部分都有那些技術來實現(xiàn)?如何實現(xiàn)?
- RPC 通信和 RMI 區(qū)別
- 什么是 Web Service(Web服務)
- JSWDL開發(fā)包的介紹窃判。JAXP吴汪、JAXM的解釋惠窄。SOAP、UDDI,WSDL解釋漾橙。
- WEB容器主要有哪些功能? 并請列出一些常見的WEB容器名字杆融。
- 一個”.java”源文件中是否可以包含多個類(不是內(nèi)部類)?有什么限制
- 簡單說說你了解的類加載器近刘。是否實現(xiàn)過類加載器
- 解釋一下什么叫AOP(面向切面編程)
- 請簡述 Servlet 的生命周期及其相關的方法
- 請簡述一下 Ajax 的原理及實現(xiàn)步驟
- 簡單描述Struts的主要功能
- 什么是 N 層架構(gòu)
- 什么是CORBA擒贸?用途是什么
- 什么是Java虛擬機臀晃?為什么Java被稱作是“平臺無關的編程語言”
- 什么是正則表達式?用途是什么介劫?哪個包使用正則表達式來實現(xiàn)模式匹配
- 什么是懶加載(Lazy Loading)
- 什么是尾遞歸徽惋,為什么需要尾遞歸
- 什么是控制反轉(zhuǎn)(Inversion of Control)與依賴注入(Dependency Injection)
關鍵字
finalize
- 什么是finalize()方法
- finalize()方法什么時候被調(diào)用
- 析構(gòu)函數(shù)(finalization)的目的是什么
- final 和 finalize 的區(qū)別
- final
- final關鍵字有哪些用法
- final 與 static 關鍵字可以用于哪里?它們的作用是什么
- final, finally, finalize的區(qū)別
- final座韵、finalize 和 finally 的不同之處险绘?
- 能否在運行時向 static final 類型的賦值
- 使用final關鍵字修飾一個變量時,是引用不能變誉碴,還是引用的對象不能變
- 一個類被聲明為final類型宦棺,表示了什么意思
- throws, throw, try, catch, finally分別代表什么意義
Java 有幾種修飾符?分別用來修飾什么
volatile
- volatile 修飾符的有過什么實踐
- volatile 變量是什么黔帕?volatile 變量和 atomic 變量有什么不同
- volatile 類型變量提供什么保證代咸?能使得一個非原子操作變成原子操作嗎
- 能創(chuàng)建 volatile 數(shù)組嗎?
transient變量有什么特點
super什么時候使用
public static void 寫成 static public void會怎樣
說明一下public static void main(String args[])這段聲明里每個關鍵字的作用
請說出作用域public, private, protected, 以及不寫時的區(qū)別
sizeof 是Java 的關鍵字嗎
static
- static class 與 non static class的區(qū)別
- static 關鍵字是什么意思成黄?Java中是否可以覆蓋(override)一個private或者是static的方法
- 靜態(tài)類型有什么特點
- main() 方法為什么必須是靜態(tài)的呐芥?能不能聲明 main() 方法為非靜態(tài)
- 是否可以從一個靜態(tài)(static)方法內(nèi)部發(fā)出對非靜態(tài)(non-static)方法的調(diào)用
- 靜態(tài)變量在什么時候加載?編譯期還是運行期奋岁?靜態(tài)代碼塊加載的時機呢
- 成員方法是否可以訪問靜態(tài)變量思瘟?為什么靜態(tài)方法不能訪問成員變量
switch
- switch 語句中的表達式可以是什么類型數(shù)據(jù)
- switch 是否能作用在byte 上,是否能作用在long 上闻伶,是否能作用在String上
- while 循環(huán)和 do 循環(huán)有什么不同
操作符
- &操作符和&&操作符有什么區(qū)別?
- a = a + b 與 a += b 的區(qū)別滨攻?
- 邏輯操作符 (&,|,^)與條件操作符(&&,||)的區(qū)別
- 3*0.1 == 0.3 將會返回什么?true 還是 false蓝翰?
- float f=3.4; 是否正確光绕?
- short s1 = 1; s1 = s1 + 1;有什么錯?
數(shù)據(jù)結(jié)構(gòu)
基礎類型(Primitives)
- 基礎類型(Primitives)與封裝類型(Wrappers)的區(qū)別在哪里
- 簡述九種基本數(shù)據(jù)類型的大小,以及他們的封裝類
- int 和 Integer 哪個會占用更多的內(nèi)存霎箍? int 和 Integer 有什么區(qū)別奇钞?parseInt()函數(shù)在什么時候使用到
- float和double的默認值是多少
- 如何去小數(shù)四舍五入保留小數(shù)點后兩位
- char 型變量中能不能存貯一個中文漢字,為什么
類型轉(zhuǎn)換
- 怎樣將 bytes 轉(zhuǎn)換為 long 類型
- 怎么將 byte 轉(zhuǎn)換為 String
- 如何將數(shù)值型字符轉(zhuǎn)換為數(shù)字
- 我們能將 int 強制轉(zhuǎn)換為 byte 類型的變量嗎漂坏?如果該值大于 byte 類型的范圍,將會出現(xiàn)什么現(xiàn)象
- 能在不進行強制轉(zhuǎn)換的情況下將一個 double 值賦值給 long 類型的變量嗎
- 類型向下轉(zhuǎn)換是什么
數(shù)組
- 如何權衡是使用無序的數(shù)組還是有序的數(shù)組
- 怎么判斷數(shù)組是 null 還是為空
- 怎么打印數(shù)組媒至? 怎樣打印數(shù)組中的重復元素
- Array 和 ArrayList有什么區(qū)別顶别?什么時候應該使用Array而不是ArrayList
- 數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)描述,各自的時間復雜度
- 數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法
隊列
- 隊列和棧是什么拒啰,列出它們的區(qū)別
- BlockingQueue是什么
- 簡述 ConcurrentLinkedQueue LinkedBlockingQueue 的用處和不同之處驯绎。
ArrayList、Vector谋旦、LinkedList的存儲性能和特性
String
StringBuffer
- ByteBuffer 與 StringBuffer有什么區(qū)別
HashMap
- HashMap的工作原理是什么
- 內(nèi)部的數(shù)據(jù)結(jié)構(gòu)是什么
- HashMap 的 table的容量如何確定剩失?loadFactor 是什么屈尼? 該容量如何變化?這種變化會帶來什么問題拴孤?
- HashMap 實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)是什么脾歧?如何實現(xiàn)
- HashMap 和 HashTable、ConcurrentHashMap 的區(qū)別
- HashMap的遍歷方式及效率
- HashMap演熟、LinkedMap鞭执、TreeMap的區(qū)別
- 如何決定選用HashMap還是TreeMap
- 如果HashMap的大小超過了負載因子(load factor)定義的容量,怎么辦
- HashMap 是線程安全的嗎芒粹?并發(fā)下使用的 Map 是什么兄纺,它們內(nèi)部原理分別是什么,比如存儲方式、 hashcode、擴容院溺、 默認容量等
HashSet
- HashSet和TreeSet有什么區(qū)別
- HashSet 內(nèi)部是如何工作的
- WeakHashMap 是怎么工作的白翻?
Set
- Set 里的元素是不能重復的,那么用什么方法來區(qū)分重復與否呢适肠?是用 == 還是 equals()? 它們有何區(qū)別?
- TreeMap:TreeMap 是采用什么樹實現(xiàn)的?TreeMap棺聊、HashMap、LindedHashMap的區(qū)別贞谓。TreeMap和TreeSet在排序時如何比較元素限佩?Collections工具類中的sort()方法如何比較元素?
- TreeSet:一個已經(jīng)構(gòu)建好的 TreeSet裸弦,怎么完成倒排序祟同。
- EnumSet 是什么
Hash算法
- Hashcode 的作用
- 簡述一致性 Hash 算法
- 有沒有可能 兩個不相等的對象有相同的 hashcode?當兩個對象 hashcode 相同怎么辦理疙?如何獲取值對象
- 為什么在重寫 equals 方法的時候需要重寫 hashCode 方法晕城?equals與 hashCode 的異同點在哪里
- a.hashCode() 有什么用?與 a.equals(b) 有什么關系
- hashCode() 和 equals() 方法的重要性體現(xiàn)在什么地方
- Object:Object有哪些公用方法窖贤?Object類hashcode,equals 設計原則砖顷? sun為什么這么設計?Object類的概述
- 如何在父類中為子類自動完成所有的 hashcode 和 equals 實現(xiàn)赃梧?這么做有何優(yōu)劣滤蝠。
- 可以在 hashcode() 中使用隨機數(shù)字嗎?
LinkedHashMap
- LinkedHashMap 和 PriorityQueue 的區(qū)別是什么
List
- List, Set, Map三個接口授嘀,存取元素時各有什么特點
- List, Set, Map 是否繼承自 Collection 接口
- 遍歷一個 List 有哪些不同的方式
- LinkedList
- LinkedList 是單向鏈表還是雙向鏈表
- LinkedList 與 ArrayList 有什么區(qū)別
- 描述下 Java 中集合(Collections)物咳,接口(Interfaces),實現(xiàn)(Implementations)的概念蹄皱。LinkedList 與 ArrayList 的區(qū)別是什么览闰?
- 插入數(shù)據(jù)時芯肤,ArrayList, LinkedList, Vector誰速度較快?
- ArrayList
- ArrayList 和 HashMap 的默認大小是多數(shù)
- ArrayList 和 LinkedList 的區(qū)別压鉴,什么時候用 ArrayList崖咨?
- ArrayList 和 Set 的區(qū)別?
- ArrayList, LinkedList, Vector的區(qū)別
- ArrayList是如何實現(xiàn)的晴弃,ArrayList 和 LinkedList 的區(qū)別
- ArrayList如何實現(xiàn)擴容
- Array 和 ArrayList 有何區(qū)別掩幢?什么時候更適合用Array
- 說出ArraList,Vector, LinkedList的存儲性能和特性
Map
- Map, Set, List, Queue, Stack
- Map 接口提供了哪些不同的集合視圖
- 為什么 Map 接口不繼承 Collection 接口
Collections
- 介紹Java中的Collection FrameWork。集合類框架的基本接口有哪些
- Collections類是什么上鞠?Collection 和 Collections的區(qū)別际邻?Collection、Map的實現(xiàn)
- 集合類框架的最佳實踐有哪些
- 為什么 Collection 不從 Cloneable 和 Serializable 接口繼承
- 說出幾點 Java 中使用 Collections 的最佳實踐芍阎?
- Collections 中 遺留類 (HashTable世曾、Vector) 和 現(xiàn)有類的區(qū)別
什么是 B+樹,B-樹谴咸,列出實際的使用場景轮听。
接口
- Comparator 與 Comparable 接口是干什么的?列出它們的區(qū)別
對象
拷貝(clone)
- 如何實現(xiàn)對象克隆
- 深拷貝和淺拷貝區(qū)別
- 深拷貝和淺拷貝如何實現(xiàn)激活機制
- 寫clone()方法時岭佳,通常都有一行代碼血巍,是什么
比較
- 在比較對象時,”==” 運算符和 equals 運算有何區(qū)別
- 如果要重寫一個對象的equals方法珊随,還要考慮什么
- 兩個對象值相同(x.equals(y) == true)述寡,但卻可有不同的hash code,這句話對不對
構(gòu)造器
- 構(gòu)造器鏈是什么
- 創(chuàng)建對象時構(gòu)造器的調(diào)用順序
不可變對象
- 什么是不可變象(immutable object)
- 為什么 Java 中的 String 是不可變的(Immutable)
- 如何構(gòu)建不可變的類結(jié)構(gòu)叶洞?關鍵點在哪里
- 能創(chuàng)建一個包含可變對象的不可變對象嗎
如何對一組對象進行排序
方法
- 構(gòu)造器(constructor)是否可被重寫(override)
- 方法可以同時即是 static 又是 synchronized 的嗎
- abstract 的 method是否可同時是 static鲫凶,是否可同時是 native,是否可同時是synchronized
- Java支持哪種參數(shù)傳遞類型
- 一個對象被當作參數(shù)傳遞到一個方法衩辟,是值傳遞還是引用傳遞
- 當一個對象被當作參數(shù)傳遞到一個方法后螟炫,此方法可改變這個對象的屬性,并可返回變化后的結(jié)果艺晴,那么這里到底是值傳遞還是引用傳遞
- 我們能否重載main()方法
- 如果main方法被聲明為private會怎樣
GC
概念
- GC是什么昼钻?為什么要有GC
- 什么時候會導致垃圾回收
- GC是怎么樣運行的
- 新老以及永久區(qū)是什么
- GC 有幾種方式?怎么配置
- 什么時候一個對象會被GC财饥? 如何判斷一個對象是否存活
- System.gc() Runtime.gc()會做什么事情换吧? 能保證 GC 執(zhí)行嗎
- 垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動通知虛擬機進行垃圾回收钥星?
- Minor GC 、Major GC满着、Young GC 與 Full GC分別在什么時候發(fā)生
- 垃圾回收算法的實現(xiàn)原理
- 如果對象的引用被置為null谦炒,垃圾收集器是否會立即釋放對象占用的內(nèi)存贯莺?
- 垃圾回收的最佳做法是什么
GC收集器有哪些
- 垃圾回收器的基本原理是什么?
- 串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么
- Serial 與 Parallel GC之間的不同之處
- CMS 收集器 與 G1 收集器的特點與區(qū)別
- CMS垃圾回收器的工作過程
- JVM 中一次完整的 GC 流程是怎樣的宁改? 對象如何晉升到老年代
- 吞吐量優(yōu)先和響應優(yōu)先的垃圾收集器選擇
GC策略
- 舉個實際的場景缕探,選擇一個GC策略
- JVM的永久代中會發(fā)生垃圾回收嗎
收集方法
- 標記清除、標記整理还蹲、復制算法的原理與特點爹耗?分別用在什么地方
- 如果讓你優(yōu)化收集方法,有什么思路
JVM
參數(shù)
- 說說你知道的幾種主要的jvm 參數(shù)
- -XX:+UseCompressedOops 有什么作用
類加載器(ClassLoader)
- Java 類加載器都有哪些
- JVM如何加載字節(jié)碼文件
內(nèi)存管理
- JVM內(nèi)存分哪幾個區(qū)谜喊,每個區(qū)的作用是什么
- 一個對象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的
- 解釋內(nèi)存中的棧(stack)潭兽、堆(heap)和方法區(qū)(method area)的用法
- JVM中哪個參數(shù)是用來控制線程的棧堆棧小
- 簡述內(nèi)存分配與回收策略
- 簡述重排序,內(nèi)存屏障斗遏,happen-before山卦,主內(nèi)存,工作內(nèi)存
- Java中存在內(nèi)存泄漏問題嗎诵次?請舉例說明
- 簡述 Java 中軟引用(SoftReferenc)账蓉、弱引用(WeakReference)和虛引用
- 內(nèi)存映射緩存區(qū)是什么
jstack,jstat逾一,jmap铸本,jconsole怎么用
32 位 JVM 和 64 位 JVM 的最大堆內(nèi)存分別是多數(shù)?32 位和 64 位的 JVM遵堵,int 類型變量的長度是多數(shù)箱玷?
怎樣通過 Java 程序來判斷 JVM 是 32 位 還是 64 位
JVM自身會維護緩存嗎?是不是在堆中進行對象分配鄙早,操作系統(tǒng)的堆還是JVM自己管理堆
什么情況下會發(fā)生棧內(nèi)存溢出
雙親委派模型是什么
多線程
基本概念
- 什么是線程
- 多線程的優(yōu)點
- 多線程的幾種實現(xiàn)方式
- 用 Runnable 還是 Thread
- 什么是線程安全
- Vector, SimpleDateFormat 是線程安全類嗎
- 什么 Java 原型不是線程安全的
- 哪些集合類是線程安全的
- 多線程中的忙循環(huán)是什么
- 如何創(chuàng)建一個線程
- 編寫多線程程序有幾種實現(xiàn)方式
- 什么是線程局部變量
- 線程和進程有什么區(qū)別汪茧?進程間如何通訊,線程間如何通訊
- 什么是多線程環(huán)境下的偽共享(false sharing)
- 同步和異步有何異同限番,在什么情況下分別使用他們舱污?舉例說明
Current
- ConcurrentHashMap 和 Hashtable的區(qū)別
- ArrayBlockingQueue, CountDownLatch的用法
- ConcurrentHashMap的并發(fā)度是什么
CyclicBarrier 和 CountDownLatch有什么不同?各自的內(nèi)部原理和用法是什么
Semaphore的用法
Thread
- 啟動一個線程是調(diào)用 run() 還是 start() 方法弥虐?start() 和 run() 方法有什么區(qū)別
- 調(diào)用start()方法時會執(zhí)行run()方法扩灯,為什么不能直接調(diào)用run()方法
- sleep() 方法和對象的 wait() 方法都可以讓線程暫停執(zhí)行,它們有什么區(qū)別
- yield方法有什么作用霜瘪?sleep() 方法和 yield() 方法有什么區(qū)別
- Java 中如何停止一個線程
- stop() 和 suspend() 方法為何不推薦使用
- 如何在兩個線程間共享數(shù)據(jù)
- 如何強制啟動一個線程
- 如何讓正在運行的線程暫停一段時間
- 什么是線程組珠插,為什么在Java中不推薦使用
- 你是如何調(diào)用 wait(方法的)?使用 if 塊還是循環(huán)颖对?為什么
生命周期
- 有哪些不同的線程生命周期
- 線程狀態(tài)捻撑,BLOCKED 和 WAITING 有什么區(qū)別
- 畫一個線程的生命周期狀態(tài)圖
ThreadLocal 用途是什么,原理是什么,用的時候要注意什么
ThreadPool
- 線程池是什么顾患?為什么要使用它
- 如何創(chuàng)建一個Java線程池
- ThreadPool用法與優(yōu)勢
- 提交任務時番捂,線程池隊列已滿時會發(fā)會生什么
- newCache 和 newFixed 有什么區(qū)別?簡述原理江解。構(gòu)造函數(shù)的各個參數(shù)的含義是什么设预,比如 coreSize, maxsize 等
- 線程池的實現(xiàn)策略
- 線程池的關閉方式有幾種,各自的區(qū)別是什么
- 線程池中submit() 和 execute()方法有什么區(qū)別犁河?
線程調(diào)度
- Java中用到的線程調(diào)度算法是什么
- 什么是多線程中的上下文切換
- 你對線程優(yōu)先級的理解是什么
- 什么是線程調(diào)度器 (Thread Scheduler) 和時間分片 (Time Slicing)
線程同步
- 請說出你所知的線程同步的方法
- synchronized 的原理是什么
- synchronized 和 ReentrantLock 有什么不同
- 什么場景下可以使用 volatile 替換 synchronized
- 有T1鳖枕,T2,T3三個線程桨螺,怎么確保它們按順序執(zhí)行宾符?怎樣保證T2在T1執(zhí)行完后執(zhí)行,T3在T2執(zhí)行完后執(zhí)行
- 同步塊內(nèi)的線程拋出異常會發(fā)生什么
- 當一個線程進入一個對象的 synchronized 方法A 之后彭谁,其它線程是否可進入此對象的 synchronized 方法B
- 使用 synchronized 修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別
- 如何從給定集合那里創(chuàng)建一個 synchronized 的集合
鎖
- Java Concurrency API 中 的 Lock 接口是什么吸奴?對比同步它有什么優(yōu)勢
- Lock 與 Synchronized 的區(qū)別?Lock 接口比 synchronized 塊的優(yōu)勢是什么
- ReadWriteLock是什么缠局?
- 鎖機制有什么用
- 什么是樂觀鎖(Optimistic Locking)则奥?如何實現(xiàn)樂觀鎖?如何避免ABA問題
- 解釋以下名詞:重排序狭园,自旋鎖读处,偏向鎖,輕量級鎖唱矛,可重入鎖罚舱,公平鎖,非公平鎖绎谦,樂觀鎖管闷,悲觀鎖
- 什么時候應該使用可重入鎖
- 簡述鎖的等級方法鎖、對象鎖窃肠、類鎖
- Java中活鎖和死鎖有什么區(qū)別包个?
- 什么是死鎖(Deadlock)?導致線程死鎖的原因冤留?如何確保 N 個線程可以訪問 N 個資源同時又不導致死鎖
- 死鎖與活鎖的區(qū)別碧囊,死鎖與饑餓的區(qū)別
- 怎么檢測一個線程是否擁有鎖
- 如何實現(xiàn)分布式鎖
- 有哪些無鎖數(shù)據(jù)結(jié)構(gòu),他們實現(xiàn)的原理是什么
- 讀寫鎖可以用于什么應用場景
Executors類是什么纤怒? Executor和Executors的區(qū)別
什么是Java線程轉(zhuǎn)儲(Thread Dump)糯而,如何得到它
如何在Java中獲取線程堆棧
說出 3 條在 Java 中使用線程的最佳實踐
在線程中你怎么處理不可捕捉異常
實際項目中使用多線程舉例。你在多線程環(huán)境中遇到的常見的問題是什么泊窘?你是怎么解決它的
請說出與線程同步以及線程調(diào)度相關的方法
程序中有3個 socket熄驼,需要多少個線程來處理
假如有一個第三方接口像寒,有很多個線程去調(diào)用獲取數(shù)據(jù),現(xiàn)在規(guī)定每秒鐘最多有 10 個線程同時調(diào)用它谜洽,如何做到
如何在 Windows 和 Linux 上查找哪個線程使用的 CPU 時間最長
如何確保 main() 方法所在的線程是 Java 程序最后結(jié)束的線程
非常多個線程(可能是不同機器)萝映,相互之間需要等待協(xié)調(diào)才能完成某種工作吴叶,問怎么設計這種協(xié)調(diào)方案
你需要實現(xiàn)一個高效的緩存阐虚,它允許多個用戶讀,但只允許一個用戶寫蚌卤,以此來保持它的完整性实束,你會怎樣去實現(xiàn)它
異常
基本概念
- Error 和 Exception有什么區(qū)別
- UnsupportedOperationException是什么
- NullPointerException 和 ArrayIndexOutOfBoundException 之間有什么相同之處
- 什么是受檢查的異常,什么是運行時異常
- 運行時異常與一般異常有何異同
- 簡述一個你最常見到的runtime exception(運行時異常)
finally
- finally關鍵詞在異常處理中如何使用
- 如果執(zhí)行finally代碼塊之前方法返回了結(jié)果逊彭,或者JVM退出了咸灿,finally塊中的代碼還會執(zhí)行嗎
- try里有return,finally還執(zhí)行么侮叮?那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行避矢,什么時候被執(zhí)行,在return前還是后
- 在什么情況下囊榜,finally語句不會執(zhí)行
throw 和 throws 有什么區(qū)別审胸?
OOM你遇到過哪些情況?你是怎么搞定的卸勺?
SOF你遇到過哪些情況砂沛?
既然我們可以用RuntimeException來處理錯誤,那么你認為為什么Java中還存在檢查型異常
當自己創(chuàng)建異常類的時候應該注意什么
導致空指針異常的原因
異常處理 handle or declare 原則應該如何理解
怎么利用 JUnit 來測試一個方法的異常
catch塊里別不寫代碼有什么問題
你曾經(jīng)自定義實現(xiàn)過異常嗎曙求?怎么寫的
什么是 異常鏈
在try塊中可以拋出異常嗎
JDBC
- 通過 JDBC 連接數(shù)據(jù)庫有哪幾種方式
- 闡述 JDBC 操作數(shù)據(jù)庫的基本步驟
- JDBC 中如何進行事務處理
- 什么是 JdbcTemplate
- 什么是 DAO 模塊
- 使用 JDBC 操作數(shù)據(jù)庫時碍庵,如何提升讀取數(shù)據(jù)的性能?如何提升更新數(shù)據(jù)的性能
- 列出 5 個應該遵循的 JDBC 最佳實踐
IO
- File
- File類型中定義了什么方法來創(chuàng)建一級目錄
File類型中定義了什么方法來判斷一個文件是否存在
- 流
- 為了提高讀寫性能悟狱,可以采用什么流
- Java中有幾種類型的流
- JDK 為每種類型的流提供了一些抽象類以供繼承静浴,分別是哪些類
- 對文本文件操作用什么I/O流
- 對各種基本數(shù)據(jù)類型和String類型的讀寫,采用什么流
- 能指定字符編碼的 I/O 流類型是什么
- 序列化
- 什么是序列化挤渐?如何實現(xiàn) Java 序列化及注意事項
- Serializable 與 Externalizable 的區(qū)別
- Socket
- socket 選項 TCP NO DELAY 是指什么
- Socket 工作在 TCP/IP 協(xié)議棧是哪一層
- TCP苹享、UDP 區(qū)別及 Java 實現(xiàn)方式
- 說幾點 IO 的最佳實踐
- 直接緩沖區(qū)與非直接緩沖器有什么區(qū)別?
- 怎么讀寫 ByteBuffer挣菲?ByteBuffer 中的字節(jié)序是什么
- 當用System.in.read(buffer)從鍵盤輸入一行n個字符后富稻,存儲在緩沖區(qū)buffer中的字節(jié)數(shù)是多少
- 如何使用掃描器類(Scanner Class)令牌化
面向?qū)ο缶幊蹋∣OP)
- 解釋下多態(tài)性(polymorphism),封裝性(encapsulation)白胀,內(nèi)聚(cohesion)以及耦合(coupling)
- 多態(tài)的實現(xiàn)原理
- 封裝椭赋、繼承和多態(tài)是什么
- 對象封裝的原則是什么?
- 類
- 獲得一個類的類對象有哪些方式
- 重載(Overload)和重寫(Override)的區(qū)別。重載的方法能否根據(jù)返回類型進行區(qū)分或杠?
- 說出幾條 Java 中方法重載的最佳實踐
- 抽象類
- 抽象類和接口的區(qū)別
- 抽象類中是否可以有靜態(tài)的main方法
- 抽象類是否可實現(xiàn)(implements)接口
- 抽象類是否可繼承具體類(concrete class)
- 匿名類(Anonymous Inner Class)
匿名內(nèi)部類是否可以繼承其它類哪怔?是否可以實現(xiàn)接口
- 內(nèi)部類
- 內(nèi)部類分為幾種
- 內(nèi)部類可以引用它的包含類(外部類)的成員嗎
- 請說一下 Java 中為什么要引入內(nèi)部類?還有匿名內(nèi)部類
- 繼承
- 繼承(Inheritance)與聚合(Aggregation)的區(qū)別在哪里
- 繼承和組合之間有什么不同
- 為什么類只能單繼承,接口可以多繼承
- 存在兩個類认境,B 繼承 A胚委,C 繼承 B,能將 B 轉(zhuǎn)換為 C 么叉信?如 C = (C) B
- 如果類 a 繼承類 b亩冬,實現(xiàn)接口c,而類 b 和接口 c 中定義了同名變量硼身,請問會出現(xiàn)什么問題
- 接口
- 接口是什么
- 接口是否可繼承接口
- 為什么要使用接口而不是直接使用具體類硅急?接口有什么優(yōu)點
泛型
- 泛型的存在是用來解決什么問題
- 泛型的常用特點
- List能否轉(zhuǎn)為List
工具類
- 日歷
- Calendar Class的用途
- 如何在Java中獲取日歷類的實例
- 解釋一些日歷類中的重要方法
- GregorianCalendar 類是什么
- SimpleTimeZone 類是什么
- Locale類是什么
- 如何格式化日期對象
- 如何添加小時(hour)到一個日期對象(Date Objects)
- 如何將字符串 YYYYMMDD 轉(zhuǎn)換為日期
- Math
Math.round()什么作用?Math.round(11.5) 等于多少佳遂?Math.round(-11.5)等于多少营袜?
- XML
- XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別丑罪?解析XML文檔有哪幾種方式荚板?DOM 和 SAX 解析器有什么不同?
- Java解析XML的方式
- 用 jdom 解析 xml 文件時如何解決中文問題吩屹?如何解析
- 你在項目中用到了 XML 技術的哪些方面跪另?如何實現(xiàn)
動態(tài)代理
- 描述動態(tài)代理的幾種實現(xiàn)方式,分別說出相應的優(yōu)缺點
設計模式
- 什么是設計模式(Design Patterns)祟峦?你用過哪種設計模式罚斗?用在什么場合
- 你知道哪些商業(yè)級設計模式?
- 哪些設計模式可以增加系統(tǒng)的可擴展性
- 單例模式
- 除了單例模式宅楞,你在生產(chǎn)環(huán)境中還用過什么設計模式针姿?
- 寫 Singleton 單例模式
- 單例模式的雙檢鎖是什么
- 如何創(chuàng)建線程安全的 Singleton
- 什么是類的單例模式
- 寫出三種單例模式實現(xiàn)
- 適配器模式
- 適配器模式是什么?什么時候使用
- 適配器模式和代理模式之前有什么不同
- 適配器模式和裝飾器模式有什么區(qū)別
- 什么時候使用享元模式
- 什么時候使用組合模式
- 什么時候使用訪問者模式
- 什么是模板方法模式
- 請給出1個符合開閉原則的設計模式的例子
開放問題
- 用一句話概括 Web 編程的特點
- Google是如何在一秒內(nèi)把搜索結(jié)果返回給用戶
- 哪種依賴注入方式你建議使用厌衙,構(gòu)造器注入距淫,還是 Setter方法注入
- 樹(二叉或其他)形成許多普通數(shù)據(jù)結(jié)構(gòu)的基礎。請描述一些這樣的數(shù)據(jù)結(jié)構(gòu)以及何時可以使用它們
- 某一項功能如何設計
- 線上系統(tǒng)突然變得異常緩慢婶希,你如何查找問題
- 什么樣的項目不適合用框架
- 新浪微博是如何實現(xiàn)把微博推給訂閱者
- 簡要介紹下從瀏覽器輸入 URL 開始到獲取到請求界面之后 Java Web 應用中發(fā)生了什么
- 請你談談SSH整合
- 高并發(fā)下榕暇,如何做到安全的修改同一行數(shù)據(jù)
- 12306網(wǎng)站的訂票系統(tǒng)如何實現(xiàn),如何保證不會票不被超賣
- 網(wǎng)站性能優(yōu)化如何優(yōu)化的
- 聊了下曾經(jīng)參與設計的服務器架構(gòu)
- 請思考一個方案喻杈,實現(xiàn)分布式環(huán)境下的 countDownLatch
- 請思考一個方案彤枢,設計一個可以控制緩存總體大小的自動適應的本地緩存
- 在你的職業(yè)生涯中,算得上最困難的技術挑戰(zhàn)是什么
- 如何寫一篇設計文檔筒饰,目錄是什么
- 大寫的O是什么缴啡?舉幾個例子
- 編程中自己都怎么考慮一些設計原則的,比如開閉原則瓷们,以及在工作中的應用
- 解釋一下網(wǎng)絡應用的模式及其特點
- 設計一個在線文檔系統(tǒng)业栅,文檔可以被編輯秒咐,如何防止多人同時對同一份文檔進行編輯更新
- 說出數(shù)據(jù)連接池的工作機制是什么
- 怎么獲取一個文件中單詞出現(xiàn)的最高頻率
- 描述一下你最常用的編程風格
- 如果有機會重新設計你們的產(chǎn)品,你會怎么做
- 如何搭建一個高可用系統(tǒng)
- 如何啟動時不需輸入用戶名與密碼
- 如何在基于Java的Web項目中實現(xiàn)文件上傳和下載
- 如何實現(xiàn)一個秒殺系統(tǒng)碘裕,保證只有幾位用戶能買到某件商品携取。
- 如何實現(xiàn)負載均衡,有哪些算法可以實現(xiàn)
- 如何設計一個購物車帮孔?想想淘寶的購物車如何實現(xiàn)的
- 如何設計一套高并發(fā)支付方案雷滋,架構(gòu)如何設計
- 如何設計建立和保持 100w 的長連接
- 如何避免瀏覽器緩存。
- 如何防止緩存雪崩
- 如果AB兩個系統(tǒng)互相依賴你弦,如何解除依
- 如果有人惡意創(chuàng)建非法連接惊豺,怎么解決
- 如果有幾十億的白名單,每天白天需要高并發(fā)查詢禽作,晚上需要更新一次,如何設計這個功能
- 如果系統(tǒng)要使用超大整數(shù)(超過long長度范圍)揩页,請你設計一個數(shù)據(jù)結(jié)構(gòu)來存儲這種超大型數(shù)字以及設計一種算法來實現(xiàn)超大整數(shù)加法運算)
- 如果要設計一個圖形系統(tǒng)旷偿,請你設計基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實現(xiàn)
- 如果讓你實現(xiàn)一個并發(fā)安全的鏈表,你會怎么做
- 應用服務器與WEB 服務器的區(qū)別爆侣?應用服務器怎么監(jiān)控性能萍程,各種方式的區(qū)別?你使用過的應用服務器優(yōu)化技術有哪些
- 大型網(wǎng)站在架構(gòu)上應當考慮哪些問題
- 有沒有處理過線上問題兔仰?出現(xiàn)內(nèi)存泄露茫负,CPU利用率標高,應用無響應時如何處理的
- 最近看什么書乎赴,印象最深刻的是什么
- 描述下常用的[重構(gòu) 技巧
- 你使用什么版本管理工具忍法?分支(Branch)與標簽(Tag)之間的區(qū)別在哪里
- 你有了解過存在哪些反模式(Anti-Patterns)嗎
- 你用過的網(wǎng)站前端優(yōu)化的技術有哪些
- 如何分析Thread dump
- 你如何理解AOP中的連接點(Joinpoint)、切點(Pointcut)榕吼、增強(Advice)饿序、引介(Introduction)、織入(Weaving)羹蚣、切面(Aspect)這些概念
- 你是如何處理內(nèi)存泄露或者棧溢出問題的
- 你們線上應用的 JVM 參數(shù)有哪些
- 怎么提升系統(tǒng)的QPS和吞吐量
知識面
- 解釋什么是 MESI 協(xié)議(緩存一致性)
- 談談 reactor 模型
- Java 9 帶來了怎樣的新功能
- Java 與 C++ 對比原探,C++ 或 Java 中的異常處理機制的簡單原理和應用
- 簡單講講 Tomcat 結(jié)構(gòu),以及其類加載器流程
- 虛擬內(nèi)存是什么
- 闡述下 SOLID 原則
- 請簡要講一下你對 測試驅(qū)動開發(fā)的認識
- CDN實現(xiàn)原理
- Maven 和 ANT 有什么區(qū)別
- UML中有哪些常用的圖
- Linux
- Linux 下 IO 模型有幾種顽素,各自的含義是什么咽弦。
- Linux 系統(tǒng)下你關注過哪些內(nèi)核參數(shù),說說你知道的
- Linux 下用一行命令查看文件的最后五行
- 平時用到哪些 Linux 命令
- 用一行命令輸出正在運行的 Java 進程
- 使用什么命令來確定是否有 Tomcat 實例運行在機器上
- 什么是 N+1 難題
- 什么是 paxos 算法
- 什么是 restful胁出,講講你理解的 restful
- 什么是 zab 協(xié)議
- 什么是領域模型(domain model)型型?貧血模型(anaemic domain model) 和充血模型(rich domain model)有什么區(qū)別
- 什么是領域驅(qū)動開發(fā)(Domain Driven Development)
- 介紹一下了解的 Java 領域的 Web Service 框架
- Web Server、Web Container 與 Application Server 的區(qū)別是什么
- 微服務(MicroServices)與巨石型應用(Monolithic Applications)之間的區(qū)別在哪里
- 描述 Cookie 和 Session 的作用划鸽,區(qū)別和各自的應用范圍输莺,Session工作原理
- 你常用的持續(xù)集成(Continuous Integration)戚哎、靜態(tài)代碼分析(Static Code Analysis)工具有哪些
- 簡述下數(shù)據(jù)庫正則化(Normalizations)
- KISS,DRY,YAGNI 等原則是什么含義
- 分布式事務的原理,優(yōu)缺點嫂用,如何使用分布式事務型凳?
- 布式集群下如何做到唯一序列號
- 網(wǎng)絡
- HTTPS 的加密方式是什么,講講整個加密解密流程
- HTTPS和HTTP的區(qū)別
- HTTP連接池實現(xiàn)原理
- HTTP集群方案
- Nginx嘱函、lighttpd甘畅、Apache三大主流 Web服務器的區(qū)別
- java學習群669823128
- 是否看過框架的一些代碼
- 持久層設計要考慮的問題有哪些?你用過的持久層框架有哪些
- 數(shù)值提升是什么
- 你能解釋一下里氏替換原則嗎
- 你是如何測試一個應用的往弓?知道哪些測試框架
- 傳輸層常見編程協(xié)議有哪些疏唾?并說出各自的特點
編程題
計算加班費
加班10小時以下加班費是時薪的1.5倍。加班10小時或以上函似,按4元/時算槐脏。提示:(一個月工作26天,一天正常工作8小時)
- 計算1000月薪撇寞,加班9小時的加班費
- 計算2500月薪顿天,加班11小時的加班費
- 計算1000月薪,加班15小時的加班費
賣東西
一家商場有紅蘋果和青蘋果出售蔑担。(紅蘋果5元/個牌废,青蘋果4元/個)。
- 模擬一個進貨啤握。紅蘋果跟青蘋果各進200個鸟缕。
- 模擬一個出售。紅蘋果跟青蘋果各買出10個排抬。每賣出一個蘋果需要進行統(tǒng)計懂从。
提示:一個蘋果是一個單獨的實體。
日期提取
有這樣一個時間字符串:2008-8-8 20:08:08 畜埋, 請編寫能夠匹配它的正則表達式莫绣,并編寫Java代碼將日期后面的時分秒提取出來,即:20:08:08
線程
- 8設計4個線程悠鞍,其中兩個線程每次對j增加1对室,另外兩個線程對j每次減少1。寫出程序咖祭。
- 用Java寫一個多線程程序掩宜,如寫四個線程,二個加1么翰,二個對一個變量減一牺汤,輸出
- wait-notify 寫一段代碼來解決生產(chǎn)者-消費者問題
數(shù)字
- 判斷101-200之間有多少個素數(shù),并輸出所有素數(shù)
- 用最有效率的方法算出2乘以17等于多少
- 有 1 億個數(shù)字浩嫌,其中有 2 個是重復的檐迟,快速找到它补胚,時間和空間要最優(yōu)
- 2 億個隨機生成的無序整數(shù),找出中間大小的值
- 10 億個數(shù)字里里面找最小的 10 個
- 1到1億的自然數(shù),求所有數(shù)的拆分后的數(shù)字之和追迟,如286 拆分成2溶其、8、6敦间,如1到11拆分后的數(shù)字之和 => 1 + … + 9 + 1 + 0 + 1 + 1
- 一個數(shù)如果恰好等于它的因子之和瓶逃,這個數(shù)就稱為 “完數(shù) “。例如6=1+2+3.編程 找出1000以內(nèi)的所有完數(shù)
- 一個數(shù)組中所有的元素都出現(xiàn)了三次廓块,只有一個元素出現(xiàn)了一次找到這個元素
- 一球從100米高度自由落下厢绝,每次落地后反跳回原高度的一半;再落下带猴,求它在 第10次落地時昔汉,共經(jīng)過多少米?第10次反彈多高浓利?
- 求100-1000內(nèi)質(zhì)數(shù)的和
- 求1到100的和的平均數(shù)
- 求s=a+a+aaa+aaaa+aa…a的值挤庇,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時共有5個數(shù)相加)贷掖,幾個數(shù)相加有鍵盤控制。 求出1到100的和
- 算出1到40的質(zhì)數(shù)渴语,放進數(shù)組里
- 顯示放組里的數(shù)
- 找出第[5]個數(shù)
- 刪除第[9]個數(shù)苹威,再顯示刪除后的第[9]個
- 有 3n+1 個數(shù)字酵使,其中 3n 個中是重復的漱病,只有 1 個是不重復的,怎么找出來病蛉。
- 有一組數(shù)1.1.2.3.5.8.13.21.34调违。寫出程序隨便輸入一個數(shù)就能給出和前一組數(shù)字同規(guī)律的頭5個數(shù)
- 計算指定數(shù)字的階乘
- 開發(fā) Fizz Buzz
- 給定一個包含 N 個整數(shù)的數(shù)組窟哺,找出丟失的整數(shù)
- 一個排好序的數(shù)組,找出兩數(shù)之和為m的所有組合
- 將一個正整數(shù)分解質(zhì)因數(shù)技肩。例如:輸入90,打印出90=233*5且轨。
- 打印出所有的 “水仙花數(shù) “,所謂 “水仙花數(shù) “是指一個三位數(shù)虚婿,其各位數(shù)字立方和等于該數(shù)本身旋奢。例如:153是一個 “水仙花數(shù) “,因為153=1的三次方+5的三次方+3的三次方
- 原地交換兩個變量的值
- 找出4字節(jié)整數(shù)的中位數(shù)
- 找到整數(shù)的平方根
- 實現(xiàn)斐波那契
網(wǎng)絡
- 用Java Socket編程然痊,讀服務器幾個字符至朗,再寫入本地顯示
反射
- 反射機制提供了什么功能?
- 反射是如何實現(xiàn)的
- 哪里用到反射機制
- 反射中 Class.forName 和 ClassLoader 區(qū)別
- 反射創(chuàng)建類實例的三種方式是什么
- 如何通過反射調(diào)用對象的方法
- 如何通過反射獲取和設置對象私有字段的值
- 反射機制的優(yōu)缺點
數(shù)據(jù)庫
- 寫一段 JDBC 連Oracle的程序,并實現(xiàn)數(shù)據(jù)查詢
算法
- 50個人圍坐一圈剧浸,當數(shù)到三或者三的倍數(shù)出圈锹引,問剩下的人是誰矗钟,原來的位置是多少
- 實現(xiàn)一個電梯模擬器用
- 寫一個冒泡排序
- 寫一個折半查找
- 隨機產(chǎn)生20個不能重復的字符并排序
- 寫一個函數(shù),傳入 2 個有序的整數(shù)數(shù)組嫌变,返回一個有序的整數(shù)數(shù)組
- 寫一段代碼在遍歷 ArrayList 時移除一個元素
- 古典問題:有一對兔子吨艇,從出生后第3個月起每個月都生一對兔子,小兔子長到第四個月后每個月又生一對兔子初澎,假如兔子都不死秸应,問每個月的兔子總數(shù)為多少
- 約瑟芬環(huán)游戲
正則
- 請編寫一段匹配IP地址的正則表達式
- 寫出一個正則表達式來判斷一個字符串是否是一個數(shù)字
字符串
- 寫一個方法,入一個文件名和一個字符串碑宴,統(tǒng)計這個字符串在這個文件中出現(xiàn)的次數(shù)软啼。
- 寫一個程序找出所有字符串的組合,并檢查它們是否是回文串
- 寫一個字符串反轉(zhuǎn)函數(shù)延柠,輸入abcde轉(zhuǎn)換成edcba代碼
- 小游戲祸挪,倒轉(zhuǎn)句子中的單詞
- 將GB2312編碼的字符串轉(zhuǎn)換為ISO-8859-1編碼的字符串
- 請寫一段代碼來計算給定文本內(nèi)字符“A”的個數(shù)。分別用迭代和遞歸兩種方式
- 編寫一個截取字符串的函數(shù)贞间,輸入為一個字符串和字節(jié)數(shù)贿条,輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個增热,如“我ABC”4整以,應該截為“我AB”,輸入“我ABC漢DEF”峻仇,6公黑,應該輸出為“我ABC”而不是“我ABC+漢的半個”
- 給定 2 個包含單詞列表(每行一個)的文件,編程列出交集
- 打印出一個字符串的所有排列
- 將一個鍵盤輸入的數(shù)字轉(zhuǎn)化成中文輸出(例如:輸入1234567摄咆,輸出:一百二拾三萬四千五百六拾七)
- 在Web應用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符凡蚜,如從 GBK 到 ISO8859-1等,如何輸出一個某種編碼的字符串
日期
- 計算兩個日期之間的差距
- java學習群669823128