java面试题大合集(开发者必看一)
前言
本文來(lái)自百度網(wǎng)絡(luò)的一篇文章,由于沒(méi)有答案,現(xiàn)在整理了一些比較好的回答和好的博客,可以自己擴(kuò)展思路,如果大家有一下面試題的更好的答案,歡迎在評(píng)論區(qū)留言。以上全部來(lái)自網(wǎng)絡(luò)!此外,我的微信公眾號(hào)將每日分享下面面試題相關(guān)的知識(shí)點(diǎn)總結(jié)干貨,歡迎關(guān)注微信公眾號(hào):好好學(xué)java!
文章推薦
精選java等全套學(xué)習(xí)資源
精選java電子圖書資源
精選大數(shù)據(jù)學(xué)習(xí)資源
java項(xiàng)目練習(xí)精選
基本概念
1、操作系統(tǒng)中 heap 和 stack 的區(qū)別
堆:堆空間一般由程序員來(lái)分配,可以由垃圾回收機(jī)制來(lái)回收。一般用來(lái)存放new創(chuàng)建的對(duì)象和數(shù)組。 ?
棧:棧是“后進(jìn)先出”的存儲(chǔ)空間,一般用來(lái)存儲(chǔ)基本類型的數(shù)據(jù)和對(duì)象的引用。
2、什么是基于注解的切面實(shí)現(xiàn)
用注解的方式實(shí)現(xiàn)的面向切面編程(AOP),可以在某個(gè)方法的執(zhí)行前或者執(zhí)行后插入一些代碼(例如日志功能的代碼)。
3、什么是 對(duì)象/關(guān)系 映射集成模塊
對(duì)象/關(guān)系映射(ORM):是指將程序中的對(duì)象自動(dòng)持久化到關(guān)系型數(shù)據(jù)庫(kù)中
4、什么是 Java 的反射機(jī)制
反射機(jī)制:是指程序可以在運(yùn)行時(shí) 訪問(wèn) 或 修改 它本身狀態(tài)和方法的這種能力。
5、什么是 ACID
A:atom ?原子性 ?
C:consistency ?一致性 ?
I:isolation ?隔離性 ?
D:durability ?持久性
6、BS與CS的聯(lián)系與區(qū)別
C/S(Client/Server):是指需要安裝的客戶端應(yīng)用程序。 ?
B/S(Brower/Server):是指可以用瀏覽器直接訪問(wèn)的應(yīng)用程序。
7、Cookie 和 Session 的區(qū)別
Cookie:是把數(shù)據(jù)保存在瀏覽器本地,并隨著每一次請(qǐng)求發(fā)送到服務(wù)器。 ?
Session:是把用戶數(shù)據(jù)保存在服務(wù)器端。
8、fail-fast 與 fail-safe 機(jī)制有什么區(qū)別
fail-fast(快速失敗):快速失敗機(jī)制在遍歷一個(gè)集合時(shí),如果集合內(nèi)容被修改,會(huì)拋出ConcurrentModificationException異常。 ?
fail-safe(安全失敗):安全失敗機(jī)制對(duì)集合的任何修改都會(huì)在一個(gè)復(fù)制的集合上進(jìn)行,因此不會(huì)拋出異常。
9、get 和 post請(qǐng)求的區(qū)別
get: ?
1、請(qǐng)求的參數(shù)會(huì)附加在URL之后,多個(gè)參數(shù)用 & 連接。 ?
2、因?yàn)閁RL的長(zhǎng)度限制,get 方式傳輸?shù)臄?shù)據(jù)大小有所限制。 ?
3、安全性低,因?yàn)閭鬏數(shù)臄?shù)據(jù)會(huì)顯示在請(qǐng)求的URL中。 ?
post: ?
1、將請(qǐng)求參數(shù)放置在 HTTP 數(shù)據(jù)包,發(fā)送給服務(wù)器。 ?
2、傳送的數(shù)據(jù)量比較大 ?
3、安全性較高
10、Interface 與 abstract 類的區(qū)別
1、接口(Interface)需要被實(shí)現(xiàn),抽象類(abstract類)需要被繼承。 ?
2、一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但一個(gè)類只能繼承一個(gè)抽象類。 ?
3、接口里面的方法全部是抽象的,抽象類里面可以有非抽象的方法。
11、IoC的優(yōu)點(diǎn)是什么
IoC(控制反轉(zhuǎn))的優(yōu)點(diǎn)是:我們需要使用一個(gè)對(duì)象的時(shí)候無(wú)需自己創(chuàng)建,可以從IoC容器中直接獲取一個(gè)對(duì)象,然后直接使用。
12、IO 和 NIO 的區(qū)別,NIO的優(yōu)點(diǎn)
1、IO是面向流的,NIO是面向緩沖區(qū)的。 ?
2、IO是阻塞的,NIO是非阻塞的。 ?
3、NIO有選擇器機(jī)制,可以讓一個(gè)線程來(lái)監(jiān)視多個(gè)IO通道。 ? ?
NIO的優(yōu)點(diǎn): ? ?
1、不需要使用 read() 或者 write() 就可以處理文件內(nèi)容。 ?
2、NIO的處理效率很快。
13、Java 8 / Java 7 為我們提供了什么新功能
Java7 新特性:
1、switch里面的case條件可以使用字符串了 ?
2、運(yùn)用 List\ tempList = new ArrayList<>(); 即泛型實(shí)例化類型自動(dòng)推斷 ?
Java8 新特性: ?
1、Java8 允許我們給接口添加一個(gè)非抽象的方法實(shí)現(xiàn),只需要使用 default 關(guān)鍵字即可 ?
2、lambda 表達(dá)式
14、什么是競(jìng)態(tài)條件?舉個(gè)例子說(shuō)明。
當(dāng)兩個(gè)線程競(jìng)爭(zhēng)同一資源時(shí),如果對(duì)資源的訪問(wèn)順序敏感,就稱存在競(jìng)態(tài)條件。
15、JRE、JDK、JVM 及 JIT 之間有什么不同
JVM(java 虛擬機(jī)):JVM 處理字節(jié)碼文件,讓 java 語(yǔ)言實(shí)現(xiàn)跨平臺(tái)。 ?
JRE(java運(yùn)行時(shí)環(huán)境):JRE 是 JVM 的一個(gè)超集。 ?
JDK(java開(kāi)發(fā)工具箱):JDK 包含了 JRE 和 Java的開(kāi)發(fā)環(huán)境。 ?
JIT(即時(shí)編譯器):即時(shí)編譯器是種特殊的編譯器,它通過(guò)把字節(jié)碼變成機(jī)器碼來(lái)提高JVM的效率。
16、MVC 的各個(gè)部分都用哪些技術(shù)來(lái)實(shí)現(xiàn)?如何實(shí)現(xiàn)?
Model層:可以用普通的 JavaBean 來(lái)實(shí)現(xiàn)。 ?
View層:可以用 JSP 或者 JS 來(lái)實(shí)現(xiàn)。 ?
Controller層:可以用 Struts2 或者 Spring MVC 來(lái)實(shí)現(xiàn)。
17、RPC 通信 和 RMI 區(qū)別
RPC(remote procedure call),即遠(yuǎn)程過(guò)程調(diào)用。 ?
RMI(remote method invocation),即遠(yuǎn)程方法調(diào)用。 ?
兩者的實(shí)質(zhì)都是調(diào)用遠(yuǎn)程的服務(wù),只不過(guò)RPC是用面向過(guò)程的語(yǔ)言如C語(yǔ)言實(shí)現(xiàn),而RMI是用面向?qū)ο蟮恼Z(yǔ)言如Java實(shí)現(xiàn)。
18、什么是 Web Service(Web服務(wù))
Web Service 就是通過(guò)網(wǎng)絡(luò)調(diào)用其他網(wǎng)站的資源。
19、JSWDL 開(kāi)發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI、WSDL解釋。
JAXP:(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當(dāng)你需要改變具體的實(shí)現(xiàn)時(shí)候也不需要修改代碼。 ?
JAXM:(Java API for XML Messaging) 是為SOAP通信提供訪問(wèn)方法和傳輸機(jī)制的API。 ?
SOAP:即簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級(jí)協(xié)議。 ? ?
UDDI:UDDI的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時(shí)也包含一組使企業(yè)能將自身提供的Web Service注冊(cè),以使別的企業(yè)能夠發(fā)現(xiàn)的訪問(wèn)協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。 ? ?
WSDL:是一種 XML 格式,用于將網(wǎng)絡(luò)服務(wù)描述為一組端點(diǎn),這些端點(diǎn)對(duì)包含面向文檔信息或面向過(guò)程信息的消息進(jìn)行操作。這種格式首先對(duì)操作和消息進(jìn)行抽象描述,然后將其綁定到具體的網(wǎng)絡(luò)協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(服務(wù))。
20、WEB容器主要有哪些功能?并請(qǐng)列出一些常見(jiàn)的WEB容器名字。
WEB容器的功能:通信支持、管理servlet的生命周期、多線程支持、jsp支持(將jsp翻譯成java) ?
常見(jiàn)的WEB容器:Tomcat、WebLogic、WebSphere
21、一個(gè)”.java”源文件中是否可以包含多個(gè)類(不是內(nèi)部類)?有什么限制
可以,一個(gè)“.java”源文件里面可以包含多個(gè)類,但是只允許有一個(gè)public類,并且類名必須和文件名一致。
22、簡(jiǎn)單說(shuō)說(shuō)你了解的類加載器。是否實(shí)現(xiàn)過(guò)類加載器
類加載器負(fù)責(zé)加載Java類的字節(jié)碼到Java虛擬機(jī)中。 ?
自己實(shí)現(xiàn)類加載器一般需要繼承 java.lang.ClassLoader ,覆寫 findClass(String name)方法。
23、解釋一下什么叫AOP(面向切面編程)
AOP(Aspect Oriented Programming),即面向切面編程,它利用一種稱為"橫切"的技術(shù),剖解開(kāi)封裝的對(duì)象內(nèi)部,并將那些影響了多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其命名為"Aspect",即切面。所謂"切面",簡(jiǎn)單說(shuō)就是將那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯封裝起來(lái),便于減少系統(tǒng)的重復(fù)代碼,降低模塊之間的耦合度,并有利于未來(lái)的可操作性和可維護(hù)性。
24、請(qǐng)簡(jiǎn)述 Servlet 的生命周期及其相關(guān)的方法
①實(shí)例化階段:服務(wù)器對(duì)Servlet進(jìn)行實(shí)例化,調(diào)用Servlet的構(gòu)造方法 ?
②初始化階段:服務(wù)器調(diào)用Servlet的init方法進(jìn)行初始化(只在第一次請(qǐng)求時(shí)調(diào)用)。 ?
③請(qǐng)求處理階段:服務(wù)器調(diào)用Servlet的service方法,然后根據(jù)請(qǐng)求方式調(diào)用相應(yīng)的doXXX方法。 ?
④服務(wù)終止階段:服務(wù)器調(diào)用Servlet的destroy方法銷毀Servlet實(shí)例
25、請(qǐng)簡(jiǎn)述一下 Ajax 的原理及實(shí)現(xiàn)步驟
Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。 ?
原理:HTTP協(xié)議的異步通信 ?
實(shí)現(xiàn)步驟: ?
1、創(chuàng)建一個(gè)XMLHttpRequest對(duì)象 ?
2、調(diào)用該對(duì)象的open方法 ?
3、設(shè)置回調(diào)函數(shù)
26、簡(jiǎn)單描述 Struts 的主要功能
1、獲取表單內(nèi)容,并組織生成參數(shù)對(duì)象 ?
2、根據(jù)請(qǐng)求的參數(shù)轉(zhuǎn)發(fā)請(qǐng)求給適當(dāng)?shù)目刂破??
3、在控制器中調(diào)用業(yè)務(wù)接口 ?
4、將業(yè)務(wù)接口返回的結(jié)果包裝起來(lái)發(fā)送給指定的視圖,并由視圖完成處理結(jié)果的展現(xiàn)
5、做一些簡(jiǎn)單的校驗(yàn)或是國(guó)際化工作
27、什么是 N 層架構(gòu)
N層架構(gòu)是一種軟件抽象的層次結(jié)構(gòu),是對(duì)復(fù)雜軟件的一種縱向切分,每一層次中完成同一類型的操作,以便將各種代碼根據(jù)其完成的使命來(lái)進(jìn)行分割,以降低軟件的復(fù)雜度,提高其可維護(hù)性。一般來(lái)說(shuō),層次之間是向下依賴的,下層代碼未確定其接口前,上層代碼是無(wú)法開(kāi)發(fā)的,下層代碼接口的變化將使上層的代碼一起變化。
28、什么是 CORBA?用途是什么
CORBA(Common Object Request Broker Architecture 公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))是由OMG組織制訂的一種標(biāo)準(zhǔn)的面向?qū)ο髴?yīng)用程序體系規(guī)范。 ?
用途: ?
1、存取來(lái)自現(xiàn)行桌面應(yīng)用程序的分布信息和資源; ?
2、使現(xiàn)有業(yè)務(wù)數(shù)據(jù)和系統(tǒng)成為可供利用的網(wǎng)絡(luò)資源; ?
3、為某一特定業(yè)務(wù)用的定制的功能和能力來(lái)增強(qiáng)現(xiàn)行桌面工具和應(yīng)用程序; ?
4、改變和發(fā)展基于網(wǎng)絡(luò)的系統(tǒng)以反映新的拓?fù)浣Y(jié)構(gòu)或新資源;
29、什么是 Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無(wú)關(guān)的編程語(yǔ)言”
Java虛擬機(jī)是執(zhí)行字節(jié)碼文件(.class)的虛擬機(jī)進(jìn)程。 ?
因?yàn)椴煌钠脚_(tái)裝有不同的Java虛擬機(jī),它們能夠?qū)⑾嗤?class文件,解釋成不同平臺(tái)所需要的機(jī)器碼。所以Java被稱為平臺(tái)無(wú)關(guān)的編程語(yǔ)言。
30、什么是正則表達(dá)式?用途是什么?哪個(gè)包使用正則表達(dá)式來(lái)實(shí)現(xiàn)模式匹配
正則表達(dá)式:是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,用這個(gè)“規(guī)則字符串”來(lái)表達(dá)對(duì)字符串的過(guò)濾邏輯。 ?
用途包括: ?
1、字符串匹配 ?
2、指定字符串替換 ?
3、指定字符串查找 ?
4、字符串分割 ?
正則表達(dá)式的包:java.util.regex包
31、什么是懶加載(Lazy Loading)
懶加載:即為延遲加載,顧名思義就是在需要的時(shí)候才加載,這樣做效率會(huì)比較低,但是占用內(nèi)存低。
32、什么是尾遞歸,為什么需要尾遞歸
如果一個(gè)函數(shù)中所有遞歸形式的調(diào)用都出現(xiàn)在函數(shù)的末尾,我們稱這個(gè)遞歸函數(shù)是尾遞歸的。 ?
為什么需要尾遞歸:尾遞歸和普通遞歸的不同點(diǎn)在對(duì)內(nèi)存的占用,普通遞歸創(chuàng)建stack后內(nèi)存減少,而尾遞歸只會(huì)占用恒量的內(nèi)存。
33、什么是控制反轉(zhuǎn)(Inversion of Control)與依賴注入(Dependency Injection)
控制反轉(zhuǎn):是指將創(chuàng)建對(duì)象的功能交給Spring容器,在我們需要使用對(duì)象的時(shí)候不需要自己創(chuàng)建,可以直接從容器中獲取。 ? ?
依賴注入:動(dòng)態(tài)的向某個(gè)對(duì)象提供它所依賴的其他對(duì)象。
關(guān)鍵字finalize
1、什么是finalize() 方法
Java 可以使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做一些必要的清理工作。
2、finalize()方法什么時(shí)候被調(diào)用
這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。
3、析構(gòu)函數(shù)(finalization) 的目的是什么
析構(gòu)函數(shù)的目的是:在清除對(duì)象前,完成一些清理工作,比如:釋放內(nèi)存等。
4、final 和 finalize 的區(qū)別
final關(guān)鍵字可以用于類、方法、變量前,用來(lái)表示該類、方法、變量具有不可變的特性。
finalize方法用于回收資源,可以為任何一個(gè)類添加finalize方法。該方法將在垃圾回收器清除對(duì)象之前調(diào)用。
注意:
關(guān)于以下java基礎(chǔ)、io、集合、多線程、虛擬機(jī)、設(shè)計(jì)模式等的文章和源碼解析,可以到我的微信公眾號(hào)獲取,每日分享!
final
1、final關(guān)鍵字有哪些用法
2、final 與 static 關(guān)鍵字可以用于哪里?它們的作用是什么
3、final, finally, finalize的區(qū)別
4、final、finalize 和 finally 的不同之處?
5、能否在運(yùn)行時(shí)向 static final 類型的賦值
6、使用final關(guān)鍵字修飾一個(gè)變量時(shí),是引用不能變,還是引用的對(duì)象不能變
7、一個(gè)類被聲明為final類型,表示了什么意思
8、throws, throw, try, catch, finally分別代表什么意義
9、Java 有幾種修飾符?分別用來(lái)修飾什么
volatile
1、volatile 修飾符有過(guò)什么實(shí)踐
2、volatile 變量是什么?volatile 變量和 atomic 變量有什么不同
3、volatile 類型變量提供什么保證?能使得一個(gè)非原子操作變成原子操作嗎
4、能創(chuàng)建 volatile 數(shù)組嗎?
5、transient變量有什么特點(diǎn)
6、super什么時(shí)候使用
7、public static void 寫成 static public void會(huì)怎樣
8、說(shuō)明一下public static void main(String args[])這段聲明里每個(gè)關(guān)鍵字的作用
9、請(qǐng)說(shuō)出作用域public, private, protected, 以及不寫時(shí)的區(qū)別
10、sizeof 是Java 的關(guān)鍵字嗎
static
1、static class 與 non static class的區(qū)別
2、static 關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法
3、靜態(tài)類型有什么特點(diǎn)
4、main() 方法為什么必須是靜態(tài)的?能不能聲明 main() 方法為非靜態(tài)
5、是否可以從一個(gè)靜態(tài)(static)方法內(nèi)部發(fā)出對(duì)非靜態(tài)(non-static)方法的調(diào)用
6、靜態(tài)變量在什么時(shí)候加載?編譯期還是運(yùn)行期?靜態(tài)代碼塊加載的時(shí)機(jī)呢
7、成員方法是否可以訪問(wèn)靜態(tài)變量?為什么靜態(tài)方法不能訪問(wèn)成員變量
switch
1、switch 語(yǔ)句中的表達(dá)式可以是什么類型數(shù)據(jù)
2、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上
3、while 循環(huán)和 do 循環(huán)有什么不同
操作符
1、&操作符和&&操作符有什么區(qū)別?
2、a = a + b 與 a += b 的區(qū)別?
3、邏輯操作符 (&,|,^)與條件操作符(&&,||)的區(qū)別
4、3*0.1 == 0.3 將會(huì)返回什么?true 還是 false?
5、loat f=3.4; 是否正確?
6、short s1 = 1; s1 = s1 + 1;有什么錯(cuò)?
數(shù)據(jù)結(jié)構(gòu)
基礎(chǔ)類型(Primitives)
1、基礎(chǔ)類型(Primitives)與封裝類型(Wrappers)的區(qū)別在哪里
2、簡(jiǎn)述九種基本數(shù)據(jù)類型的大小,以及他們的封裝類
3、int 和 Integer 哪個(gè)會(huì)占用更多的內(nèi)存? int 和 Integer 有什么區(qū)別?parseInt()函數(shù)在什么時(shí)候使用到
4、float和double的默認(rèn)值是多少
5、如何去小數(shù)四舍五入保留小數(shù)點(diǎn)后兩位
6、char 型變量中能不能存貯一個(gè)中文漢字,為什么
類型轉(zhuǎn)換
1、怎樣將 bytes 轉(zhuǎn)換為 long 類型
2、怎么將 byte 轉(zhuǎn)換為 String
3、如何將數(shù)值型字符轉(zhuǎn)換為數(shù)字
4、我們能將 int 強(qiáng)制轉(zhuǎn)換為 byte 類型的變量嗎?如果該值大于 byte 類型的范圍,將會(huì)出現(xiàn)什么現(xiàn)象
5、能在不進(jìn)行強(qiáng)制轉(zhuǎn)換的情況下將一個(gè) double 值賦值給 long 類型的變量嗎
6、類型向下轉(zhuǎn)換是什么
數(shù)組
1、如何權(quán)衡是使用無(wú)序的數(shù)組還是有序的數(shù)組
2、怎么判斷數(shù)組是 null 還是為空
3、怎么打印數(shù)組? 怎樣打印數(shù)組中的重復(fù)元素
4、Array 和 ArrayList有什么區(qū)別?什么時(shí)候應(yīng)該使用Array而不是ArrayList
5、數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)描述,各自的時(shí)間復(fù)雜度
6、數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法? String有沒(méi)有l(wèi)ength()這個(gè)方法
隊(duì)列
1、隊(duì)列和棧是什么,列出它們的區(qū)別
2、BlockingQueue是什么
3、簡(jiǎn)述 ConcurrentLinkedQueue LinkedBlockingQueue 的用處和不同之處。
4、ArrayList、Vector、LinkedList 的存儲(chǔ)性能和特性?
5、String 和 StringBuffer 的區(qū)別?
6、ByteBuffer 與 StringBuffer 有什么區(qū)別?
HashMap
1、HashMap的工作原理是什么
2、內(nèi)部的數(shù)據(jù)結(jié)構(gòu)是什么
3、HashMap 的 table的容量如何確定?loadFactor 是什么? 該容量如何變化?這種變化會(huì)帶來(lái)什么問(wèn)題?
4、HashMap 實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)是什么?如何實(shí)現(xiàn)
5、HashMap 和 HashTable、ConcurrentHashMap 的區(qū)別
6、HashMap的遍歷方式及效率
7、HashMap、LinkedMap、TreeMap的區(qū)別
8、如何決定選用HashMap還是TreeMap
9、如果HashMap的大小超過(guò)了負(fù)載因子(load factor)定義的容量,怎么辦
10、HashMap 是線程安全的嗎?并發(fā)下使用的 Map 是什么,它們內(nèi)部原理分別是什么,比如存儲(chǔ)方式、 hashcode、擴(kuò)容、 默認(rèn)容量等
HashSet
1、HashSet和TreeSet有什么區(qū)別
2、HashSet 內(nèi)部是如何工作的
3、WeakHashMap 是怎么工作的?
Set
1、Set 里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用 == 還是 equals()? 它們有何區(qū)別?
2、TreeMap:TreeMap 是采用什么樹(shù)實(shí)現(xiàn)的?TreeMap、HashMap、LindedHashMap的區(qū)別。TreeMap和TreeSet在排序時(shí)如何比較元素?Collections工具類中的sort()方法如何比較元素?
3、TreeSet:一個(gè)已經(jīng)構(gòu)建好的 TreeSet,怎么完成倒排序。
4、EnumSet 是什么
Hash算法
1、Hashcode 的作用
2、簡(jiǎn)述一致性 Hash 算法
3、有沒(méi)有可能 兩個(gè)不相等的對(duì)象有相同的 hashcode?當(dāng)兩個(gè)對(duì)象 hashcode 相同怎么辦?如何獲取值對(duì)象
4、為什么在重寫 equals 方法的時(shí)候需要重寫 hashCode 方法?equals與 hashCode 的異同點(diǎn)在哪里
5、a.hashCode() 有什么用?與 a.equals(b) 有什么關(guān)系
6、hashCode() 和 equals() 方法的重要性體現(xiàn)在什么地方
7、Object:Object有哪些公用方法?Object類hashcode,equals 設(shè)計(jì)原則? sun為什么這么設(shè)計(jì)?Object類的概述
8、如何在父類中為子類自動(dòng)完成所有的 hashcode 和 equals 實(shí)現(xiàn)?這么做有何優(yōu)劣。
9、可以在 hashcode() 中使用隨機(jī)數(shù)字嗎?
LinkedHashMap
1、LinkedHashMap 和 PriorityQueue 的區(qū)別是什么
List
1、List, Set, Map三個(gè)接口,存取元素時(shí)各有什么特點(diǎn)
2、List, Set, Map 是否繼承自 Collection 接口
3、遍歷一個(gè) List 有哪些不同的方式
LinkedList
1、LinkedList 是單向鏈表還是雙向鏈表
2、LinkedList 與 ArrayList 有什么區(qū)別
3、描述下 Java 中集合(Collections),接口(Interfaces),實(shí)現(xiàn)(Implementations)的概念。LinkedList 與 ArrayList 的區(qū)別是什么?
4、插入數(shù)據(jù)時(shí),ArrayList, LinkedList, Vector誰(shuí)速度較快?
ArrayList
1、ArrayList 和 HashMap 的默認(rèn)大小是多數(shù)
2、ArrayList 和 LinkedList 的區(qū)別,什么時(shí)候用 ArrayList?
3、ArrayList 和 Set 的區(qū)別?
4、ArrayList, LinkedList, Vector的區(qū)別
5、ArrayList是如何實(shí)現(xiàn)的,ArrayList 和 LinkedList 的區(qū)別
6、ArrayList如何實(shí)現(xiàn)擴(kuò)容
7、Array 和 ArrayList 有何區(qū)別?什么時(shí)候更適合用Array
8、說(shuō)出ArraList,Vector, LinkedList的存儲(chǔ)性能和特性
Map
1、Map, Set, List, Queue, Stack
2、Map 接口提供了哪些不同的集合視圖
3、為什么 Map 接口不繼承 Collection 接口
Collections
1、介紹Java中的Collection FrameWork。集合類框架的基本接口有哪些
2、Collections類是什么?Collection 和 Collections的區(qū)別?Collection、Map的實(shí)現(xiàn)
3、集合類框架的最佳實(shí)踐有哪些
4、為什么 Collection 不從 Cloneable 和 Serializable 接口繼承
5、說(shuō)出幾點(diǎn) Java 中使用 Collections 的最佳實(shí)踐?
6、Collections 中 遺留類 (HashTable、Vector) 和 現(xiàn)有類的區(qū)別
7、什么是 B+樹(shù),B-樹(shù),列出實(shí)際的使用場(chǎng)景
接口
1、Comparator 與 Comparable 接口是干什么的?列出它們的區(qū)別
對(duì)象拷貝(clone)
1、如何實(shí)現(xiàn)對(duì)象克隆
2、深拷貝和淺拷貝區(qū)別
3、深拷貝和淺拷貝如何實(shí)現(xiàn)激活機(jī)制
4、寫clone()方法時(shí),通常都有一行代碼,是什么
比較
1、在比較對(duì)象時(shí),”==” 運(yùn)算符和 equals 運(yùn)算有何區(qū)別
2、如果要重寫一個(gè)對(duì)象的equals方法,還要考慮什么
3、兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)
構(gòu)造器
1、構(gòu)造器鏈?zhǔn)鞘裁?/p>
2、創(chuàng)建對(duì)象時(shí)構(gòu)造器的調(diào)用順序
不可變對(duì)象
1、什么是不可變象(immutable object)
2、為什么 Java 中的 String 是不可變的(Immutable)
3、如何構(gòu)建不可變的類結(jié)構(gòu)?關(guān)鍵點(diǎn)在哪里
4、能創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象嗎
5、如何對(duì)一組對(duì)象進(jìn)行排序
方法
1、構(gòu)造器(constructor)是否可被重寫(override)
2、方法可以同時(shí)即是 static 又是 synchronized 的嗎
3、abstract 的 method是否可同時(shí)是 static,是否可同時(shí)是 native,是否可同時(shí)是synchronized
4、Java支持哪種參數(shù)傳遞類型
5、一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法,是值傳遞還是引用傳遞
6、當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞
7、我們能否重載main()方法
8、如果main方法被聲明為private會(huì)怎樣
GC
概念
1、GC是什么?為什么要有GC
2、什么時(shí)候會(huì)導(dǎo)致垃圾回收
3、GC是怎么樣運(yùn)行的
4、新老以及永久區(qū)是什么
5、GC 有幾種方式?怎么配置
6、什么時(shí)候一個(gè)對(duì)象會(huì)被GC? 如何判斷一個(gè)對(duì)象是否存活
7、System.gc() Runtime.gc()會(huì)做什么事情? 能保證 GC 執(zhí)行嗎
8、垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收?
9、Minor GC 、Major GC、Young GC 與 Full GC分別在什么時(shí)候發(fā)生
10、垃圾回收算法的實(shí)現(xiàn)原理
11、如果對(duì)象的引用被置為null,垃圾收集器是否會(huì)立即釋放對(duì)象占用的內(nèi)存?
12、垃圾回收的最佳做法是什么
GC收集器有哪些
1、垃圾回收器的基本原理是什么?
2、串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么
3、Serial 與 Parallel GC之間的不同之處
4、CMS 收集器 與 G1 收集器的特點(diǎn)與區(qū)別
5、CMS垃圾回收器的工作過(guò)程
6、JVM 中一次完整的 GC 流程是怎樣的? 對(duì)象如何晉升到老年代
7、吞吐量?jī)?yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇
GC策略
1、舉個(gè)實(shí)際的場(chǎng)景,選擇一個(gè)GC策略
2、JVM的永久代中會(huì)發(fā)生垃圾回收嗎
收集方法
1、標(biāo)記清除、標(biāo)記整理、復(fù)制算法的原理與特點(diǎn)?分別用在什么地方
2、如果讓你優(yōu)化收集方法,有什么思路
JVM參數(shù)
1、說(shuō)說(shuō)你知道的幾種主要的jvm 參數(shù)
2、-XX:+UseCompressedOops 有什么作用
類加載器(ClassLoader)
1、Java 類加載器都有哪些
2、JVM如何加載字節(jié)碼文件
內(nèi)存管理
1、JVM內(nèi)存分哪幾個(gè)區(qū),每個(gè)區(qū)的作用是什么
2、一個(gè)對(duì)象從創(chuàng)建到銷毀都是怎么在這些部分里存活和轉(zhuǎn)移的
3、解釋內(nèi)存中的棧(stack)、堆(heap)和方法區(qū)(method area)的用法
4、JVM中哪個(gè)參數(shù)是用來(lái)控制線程的棧堆棧小
5、簡(jiǎn)述內(nèi)存分配與回收策略
6、簡(jiǎn)述重排序,內(nèi)存屏障,happen-before,主內(nèi)存,工作內(nèi)存
7、Java中存在內(nèi)存泄漏問(wèn)題嗎?請(qǐng)舉例說(shuō)明
8、簡(jiǎn)述 Java 中軟引用(SoftReferenc)、弱引用(WeakReference)和虛引用
9、內(nèi)存映射緩存區(qū)是什么
10、jstack,jstat,jmap,jconsole怎么用
11、32 位 JVM 和 64 位 JVM 的最大堆內(nèi)存分別是多數(shù)?32 位和 64 位的 JVM,int 類型變量的長(zhǎng)度是多數(shù)?
12、怎樣通過(guò) Java 程序來(lái)判斷 JVM 是 32 位 還是 64 位
13、JVM自身會(huì)維護(hù)緩存嗎?是不是在堆中進(jìn)行對(duì)象分配,操作系統(tǒng)的堆還是JVM自己管理堆
14、什么情況下會(huì)發(fā)生棧內(nèi)存溢出
15、雙親委派模型是什么
多線程基本概念
1、什么是線程
2、多線程的優(yōu)點(diǎn)
3、多線程的幾種實(shí)現(xiàn)方式
4、用 Runnable 還是 Thread
5、什么是線程安全
6、Vector, SimpleDateFormat 是線程安全類嗎
7、什么 Java 原型不是線程安全的
8、哪些集合類是線程安全的
9、多線程中的忙循環(huán)是什么
10、如何創(chuàng)建一個(gè)線程
11、編寫多線程程序有幾種實(shí)現(xiàn)方式
12、什么是線程局部變量
13、線程和進(jìn)程有什么區(qū)別?進(jìn)程間如何通訊,線程間如何通訊
14、什么是多線程環(huán)境下的偽共享(false sharing)
15、同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明
Current
1、ConcurrentHashMap 和 Hashtable的區(qū)別
2、ArrayBlockingQueue, CountDownLatch的用法
3、ConcurrentHashMap的并發(fā)度是什么
4、CyclicBarrier 和 CountDownLatch有什么不同?各自的內(nèi)部原理和用法是什么
5、Semaphore的用法
Thread
1、啟動(dòng)一個(gè)線程是調(diào)用 run() 還是 start() 方法?start() 和 run() 方法有什么區(qū)別
2、調(diào)用start()方法時(shí)會(huì)執(zhí)行run()方法,為什么不能直接調(diào)用run()方法
3、sleep() 方法和對(duì)象的 wait() 方法都可以讓線程暫停執(zhí)行,它們有什么區(qū)別
4、yield方法有什么作用?sleep() 方法和 yield() 方法有什么區(qū)別
5、Java 中如何停止一個(gè)線程
6、stop() 和 suspend() 方法為何不推薦使用
7、如何在兩個(gè)線程間共享數(shù)據(jù)
8、如何強(qiáng)制啟動(dòng)一個(gè)線程
9、如何讓正在運(yùn)行的線程暫停一段時(shí)間
10、什么是線程組,為什么在Java中不推薦使用
11、你是如何調(diào)用 wait(方法的)?使用 if 塊還是循環(huán)?為什么
生命周期
1、有哪些不同的線程生命周期
2、線程狀態(tài),BLOCKED 和 WAITING 有什么區(qū)別
3、畫一個(gè)線程的生命周期狀態(tài)圖
4、ThreadLocal 用途是什么,原理是什么,用的時(shí)候要注意什么
ThreadPool
1、線程池是什么?為什么要使用它
2、如何創(chuàng)建一個(gè)Java線程池
3、ThreadPool用法與優(yōu)勢(shì)
4、提交任務(wù)時(shí),線程池隊(duì)列已滿時(shí)會(huì)發(fā)會(huì)生什么
5、newCache 和 newFixed 有什么區(qū)別?簡(jiǎn)述原理。構(gòu)造函數(shù)的各個(gè)參數(shù)的含義是什么,比如 coreSize, maxsize 等
6、線程池的實(shí)現(xiàn)策略
7、線程池的關(guān)閉方式有幾種,各自的區(qū)別是什么
8、線程池中submit() 和 execute()方法有什么區(qū)別?
線程調(diào)度
1、Java中用到的線程調(diào)度算法是什么
2、什么是多線程中的上下文切換
3、你對(duì)線程優(yōu)先級(jí)的理解是什么
4、什么是線程調(diào)度器 (Thread Scheduler) 和時(shí)間分片 (Time Slicing)
線程同步
1、請(qǐng)說(shuō)出你所知的線程同步的方法
2、synchronized 的原理是什么
3、synchronized 和 ReentrantLock 有什么不同
4、什么場(chǎng)景下可以使用 volatile 替換 synchronized
5、有T1,T2,T3三個(gè)線程,怎么確保它們按順序執(zhí)行?怎樣保證T2在T1執(zhí)行完后執(zhí)行,T3在T2執(zhí)行完后執(zhí)行
6、同步塊內(nèi)的線程拋出異常會(huì)發(fā)生什么
7、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的 synchronized 方法A 之后,其它線程是否可進(jìn)入此對(duì)象的 synchronized 方法B
8、使用 synchronized 修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別
9、如何從給定集合那里創(chuàng)建一個(gè) synchronized 的集合
鎖
1、Java Concurrency API 中 的 Lock 接口是什么?對(duì)比同步它有什么優(yōu)勢(shì)
2、Lock 與 Synchronized 的區(qū)別?Lock 接口比 synchronized 塊的優(yōu)勢(shì)是什么
3、ReadWriteLock是什么?
4、鎖機(jī)制有什么用
5、什么是樂(lè)觀鎖(Optimistic Locking)?如何實(shí)現(xiàn)樂(lè)觀鎖?如何避免ABA問(wèn)題
6、解釋以下名詞:重排序,自旋鎖,偏向鎖,輕量級(jí)鎖,可重入鎖,公平鎖,非公平鎖,樂(lè)觀鎖,悲觀鎖
7、什么時(shí)候應(yīng)該使用可重入鎖
8、簡(jiǎn)述鎖的等級(jí)方法鎖、對(duì)象鎖、類鎖
9、Java中活鎖和死鎖有什么區(qū)別?
10、什么是死鎖(Deadlock)?導(dǎo)致線程死鎖的原因?如何確保 N 個(gè)線程可以訪問(wèn) N 個(gè)資源同時(shí)又不導(dǎo)致死鎖
11、死鎖與活鎖的區(qū)別,死鎖與饑餓的區(qū)別
12、怎么檢測(cè)一個(gè)線程是否擁有鎖
13、如何實(shí)現(xiàn)分布式鎖
14、有哪些無(wú)鎖數(shù)據(jù)結(jié)構(gòu),他們實(shí)現(xiàn)的原理是什么
15、讀寫鎖可以用于什么應(yīng)用場(chǎng)景
16、Executors類是什么? Executor和Executors的區(qū)別
17、什么是Java線程轉(zhuǎn)儲(chǔ)(Thread Dump),如何得到它
18、如何在Java中獲取線程堆棧
19、說(shuō)出 3 條在 Java 中使用線程的最佳實(shí)踐
20、在線程中你怎么處理不可捕捉異常
21、實(shí)際項(xiàng)目中使用多線程舉例。你在多線程環(huán)境中遇到的常見(jiàn)的問(wèn)題是什么?你是怎么解決它的
22、請(qǐng)說(shuō)出與線程同步以及線程調(diào)度相關(guān)的方法
23、程序中有3個(gè) socket,需要多少個(gè)線程來(lái)處理
24、假如有一個(gè)第三方接口,有很多個(gè)線程去調(diào)用獲取數(shù)據(jù),現(xiàn)在規(guī)定每秒鐘最多有 10 個(gè)線程同時(shí)調(diào)用它,如何做到
25、如何在 Windows 和 Linux 上查找哪個(gè)線程使用的 CPU 時(shí)間最長(zhǎng)
26、如何確保 main() 方法所在的線程是 Java 程序最后結(jié)束的線程
27、非常多個(gè)線程(可能是不同機(jī)器),相互之間需要等待協(xié)調(diào)才能完成某種工作,問(wèn)怎么設(shè)計(jì)這種協(xié)調(diào)方案
28、你需要實(shí)現(xiàn)一個(gè)高效的緩存,它允許多個(gè)用戶讀,但只允許一個(gè)用戶寫,以此來(lái)保持它的完整性,你會(huì)怎樣去實(shí)現(xiàn)它
異常
基本概念
1、Error 和 Exception有什么區(qū)別
2、UnsupportedOperationException是什么
3、NullPointerException 和 ArrayIndexOutOfBoundException 之間有什么相同之處
4、什么是受檢查的異常,什么是運(yùn)行時(shí)異常
5、運(yùn)行時(shí)異常與一般異常有何異同
6、簡(jiǎn)述一個(gè)你最常見(jiàn)到的runtime exception(運(yùn)行時(shí)異常)
finally
1、finally關(guān)鍵詞在異常處理中如何使用
2、如果執(zhí)行finally代碼塊之前方法返回了結(jié)果,或者JVM退出了,finally塊中的代碼還會(huì)執(zhí)行嗎
3、try里有return,finally還執(zhí)行么?那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后
4、在什么情況下,finally語(yǔ)句不會(huì)執(zhí)行
5、throw 和 throws 有什么區(qū)別?
6、OOM你遇到過(guò)哪些情況?你是怎么搞定的?
7、SOF你遇到過(guò)哪些情況?
8、既然我們可以用RuntimeException來(lái)處理錯(cuò)誤,那么你認(rèn)為為什么Java中還存在檢查型異常
9、當(dāng)自己創(chuàng)建異常類的時(shí)候應(yīng)該注意什么
10、導(dǎo)致空指針異常的原因
11、異常處理 handle or declare 原則應(yīng)該如何理解
12、怎么利用 JUnit 來(lái)測(cè)試一個(gè)方法的異常
13、catch塊里別不寫代碼有什么問(wèn)題
14、你曾經(jīng)自定義實(shí)現(xiàn)過(guò)異常嗎?怎么寫的
15、什么是 異常鏈
16、在try塊中可以拋出異常嗎
JDBC
1、通過(guò) JDBC 連接數(shù)據(jù)庫(kù)有哪幾種方式
2、闡述 JDBC 操作數(shù)據(jù)庫(kù)的基本步驟
3、JDBC 中如何進(jìn)行事務(wù)處理
4、什么是 JdbcTemplate
5、什么是 DAO 模塊
6、使用 JDBC 操作數(shù)據(jù)庫(kù)時(shí),如何提升讀取數(shù)據(jù)的性能?如何提升更新數(shù)據(jù)的性能
7、列出 5 個(gè)應(yīng)該遵循的 JDBC 最佳實(shí)踐
IO
File
1、File類型中定義了什么方法來(lái)創(chuàng)建一級(jí)目錄
2、File類型中定義了什么方法來(lái)判斷一個(gè)文件是否存在
流
1、為了提高讀寫性能,可以采用什么流
2、Java中有幾種類型的流
3、JDK 為每種類型的流提供了一些抽象類以供繼承,分別是哪些類
4、對(duì)文本文件操作用什么I/O流
5、對(duì)各種基本數(shù)據(jù)類型和String類型的讀寫,采用什么流
6、能指定字符編碼的 I/O 流類型是什么
序列化
1、什么是序列化?如何實(shí)現(xiàn) Java 序列化及注意事項(xiàng)
2、Serializable 與 Externalizable 的區(qū)別
Socket
1、socket 選項(xiàng) TCP NO DELAY 是指什么
2、Socket 工作在 TCP/IP 協(xié)議棧是哪一層
3、TCP、UDP 區(qū)別及 Java 實(shí)現(xiàn)方式
4、說(shuō)幾點(diǎn) IO 的最佳實(shí)踐
5、直接緩沖區(qū)與非直接緩沖器有什么區(qū)別?
6、怎么讀寫 ByteBuffer?ByteBuffer 中的字節(jié)序是什么
7、當(dāng)用System.in.read(buffer)從鍵盤輸入一行n個(gè)字符后,存儲(chǔ)在緩沖區(qū)buffer中的字節(jié)數(shù)是多少
8、如何使用掃描器類(Scanner Class)令牌化
面向?qū)ο缶幊?#xff08;OOP)
1、解釋下多態(tài)性(polymorphism),封裝性(encapsulation),內(nèi)聚(cohesion)以及耦合(coupling)
2、多態(tài)的實(shí)現(xiàn)原理
3、封裝、繼承和多態(tài)是什么
4、對(duì)象封裝的原則是什么?
類
1、獲得一個(gè)類的類對(duì)象有哪些方式
2、重載(Overload)和重寫(Override)的區(qū)別。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分?
3、說(shuō)出幾條 Java 中方法重載的最佳實(shí)踐
抽象類
1、抽象類和接口的區(qū)別
2、抽象類中是否可以有靜態(tài)的main方法
3、抽象類是否可實(shí)現(xiàn)(implements)接口
4、抽象類是否可繼承具體類(concrete class)
匿名類(Anonymous Inner Class)
1、匿名內(nèi)部類是否可以繼承其它類?是否可以實(shí)現(xiàn)接口
內(nèi)部類
1、內(nèi)部類分為幾種
2、內(nèi)部類可以引用它的包含類(外部類)的成員嗎
3、請(qǐng)說(shuō)一下 Java 中為什么要引入內(nèi)部類?還有匿名內(nèi)部類
繼承
1、繼承(Inheritance)與聚合(Aggregation)的區(qū)別在哪里
2、繼承和組合之間有什么不同
3、為什么類只能單繼承,接口可以多繼承
4、存在兩個(gè)類,B 繼承 A,C 繼承 B,能將 B 轉(zhuǎn)換為 C 么?如 C = (C) B
5、如果類 a 繼承類 b,實(shí)現(xiàn)接口c,而類 b 和接口 c 中定義了同名變量,請(qǐng)問(wèn)會(huì)出現(xiàn)什么問(wèn)題
接口
1、接口是什么
2、接口是否可繼承接口
3、為什么要使用接口而不是直接使用具體類?接口有什么優(yōu)點(diǎn)
泛型
1、泛型的存在是用來(lái)解決什么問(wèn)題
2、泛型的常用特點(diǎn)
3、List能否轉(zhuǎn)為L(zhǎng)ist
工具類
日歷
1、Calendar Class的用途
2、如何在Java中獲取日歷類的實(shí)例
3、解釋一些日歷類中的重要方法
4、GregorianCalendar 類是什么
5、SimpleTimeZone 類是什么
6、Locale類是什么
7、如何格式化日期對(duì)象
8、如何添加小時(shí)(hour)到一個(gè)日期對(duì)象(Date Objects)
9、如何將字符串 YYYYMMDD 轉(zhuǎn)換為日期
Math
1、Math.round()什么作用?Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
XML
1、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?DOM 和 SAX 解析器有什么不同?
2、Java解析XML的方式
3、用 jdom 解析 xml 文件時(shí)如何解決中文問(wèn)題?如何解析
4、你在項(xiàng)目中用到了 XML 技術(shù)的哪些方面?如何實(shí)現(xiàn)
動(dòng)態(tài)代理
1、描述動(dòng)態(tài)代理的幾種實(shí)現(xiàn)方式,分別說(shuō)出相應(yīng)的優(yōu)缺點(diǎn)
設(shè)計(jì)模式
1、什么是設(shè)計(jì)模式(Design Patterns)?你用過(guò)哪種設(shè)計(jì)模式?用在什么場(chǎng)合
2、你知道哪些商業(yè)級(jí)設(shè)計(jì)模式?
3、哪些設(shè)計(jì)模式可以增加系統(tǒng)的可擴(kuò)展性
單例模式
1、除了單例模式,你在生產(chǎn)環(huán)境中還用過(guò)什么設(shè)計(jì)模式?
2、寫 Singleton 單例模式
3、單例模式的雙檢鎖是什么
4、如何創(chuàng)建線程安全的 Singleton
5、什么是類的單例模式
6、寫出三種單例模式實(shí)現(xiàn)
適配器模式
1、適配器模式是什么?什么時(shí)候使用
2、適配器模式和代理模式之前有什么不同
3、適配器模式和裝飾器模式有什么區(qū)別
4、什么時(shí)候使用享元模式
5、什么時(shí)候使用組合模式
6、什么時(shí)候使用訪問(wèn)者模式
7、什么是模板方法模式
8、請(qǐng)給出1個(gè)符合開(kāi)閉原則的設(shè)計(jì)模式的例子
注意:
關(guān)于以上java基礎(chǔ)、io、集合、多線程、虛擬機(jī)、設(shè)計(jì)模式等的文章和源碼解析,可以到我的微信公眾號(hào)獲取,每日分享!
開(kāi)放問(wèn)題(看你的了)
1、用一句話概括 Web 編程的特點(diǎn)
2、Google是如何在一秒內(nèi)把搜索結(jié)果返回給用戶
3、哪種依賴注入方式你建議使用,構(gòu)造器注入,還是 Setter方法注入
4、樹(shù)(二叉或其他)形成許多普通數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)。請(qǐng)描述一些這樣的數(shù)據(jù)結(jié)構(gòu)以及何時(shí)可以使用它們
5、某一項(xiàng)功能如何設(shè)計(jì)
6、線上系統(tǒng)突然變得異常緩慢,你如何查找問(wèn)題
7、什么樣的項(xiàng)目不適合用框架
8、新浪微博是如何實(shí)現(xiàn)把微博推給訂閱者
9、簡(jiǎn)要介紹下從瀏覽器輸入 URL 開(kāi)始到獲取到請(qǐng)求界面之后 Java Web 應(yīng)用中發(fā)生了什么
10、請(qǐng)你談?wù)凷SH整合
11、高并發(fā)下,如何做到安全的修改同一行數(shù)據(jù)
12、12306網(wǎng)站的訂票系統(tǒng)如何實(shí)現(xiàn),如何保證不會(huì)票不被超賣
13、網(wǎng)站性能優(yōu)化如何優(yōu)化的
14、聊了下曾經(jīng)參與設(shè)計(jì)的服務(wù)器架構(gòu)
15、請(qǐng)思考一個(gè)方案,實(shí)現(xiàn)分布式環(huán)境下的 countDownLatch
16、請(qǐng)思考一個(gè)方案,設(shè)計(jì)一個(gè)可以控制緩存總體大小的自動(dòng)適應(yīng)的本地緩存
17、在你的職業(yè)生涯中,算得上最困難的技術(shù)挑戰(zhàn)是什么
18、如何寫一篇設(shè)計(jì)文檔,目錄是什么
19、大寫的O是什么?舉幾個(gè)例子
20、編程中自己都怎么考慮一些設(shè)計(jì)原則的,比如開(kāi)閉原則,以及在工作中的應(yīng)用
21、解釋一下網(wǎng)絡(luò)應(yīng)用的模式及其特點(diǎn)
22、設(shè)計(jì)一個(gè)在線文檔系統(tǒng),文檔可以被編輯,如何防止多人同時(shí)對(duì)同一份文檔進(jìn)行編輯更新
23、說(shuō)出數(shù)據(jù)連接池的工作機(jī)制是什么
24、怎么獲取一個(gè)文件中單詞出現(xiàn)的最高頻率
25、描述一下你最常用的編程風(fēng)格
26、如果有機(jī)會(huì)重新設(shè)計(jì)你們的產(chǎn)品,你會(huì)怎么做
27、如何搭建一個(gè)高可用系統(tǒng)
28、如何啟動(dòng)時(shí)不需輸入用戶名與密碼
29、如何在基于Java的Web項(xiàng)目中實(shí)現(xiàn)文件上傳和下載
30、如何實(shí)現(xiàn)一個(gè)秒殺系統(tǒng),保證只有幾位用戶能買到某件商品。
31、如何實(shí)現(xiàn)負(fù)載均衡,有哪些算法可以實(shí)現(xiàn)
32、如何設(shè)計(jì)一個(gè)購(gòu)物車?想想淘寶的購(gòu)物車如何實(shí)現(xiàn)的
33、如何設(shè)計(jì)一套高并發(fā)支付方案,架構(gòu)如何設(shè)計(jì)
34、如何設(shè)計(jì)建立和保持 100w 的長(zhǎng)連接
35、如何避免瀏覽器緩存。
36、如何防止緩存雪崩
37、如果AB兩個(gè)系統(tǒng)互相依賴,如何解除依
38、如果有人惡意創(chuàng)建非法連接,怎么解決
39、如果有幾十億的白名單,每天白天需要高并發(fā)查詢,晚上需要更新一次,如何設(shè)計(jì)這個(gè)功能
40、如果系統(tǒng)要使用超大整數(shù)(超過(guò)long長(zhǎng)度范圍),請(qǐng)你設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)這種超大型數(shù)字以及設(shè)計(jì)一種算法來(lái)實(shí)現(xiàn)超大整數(shù)加法運(yùn)算)
41、如果要設(shè)計(jì)一個(gè)圖形系統(tǒng),請(qǐng)你設(shè)計(jì)基本的圖形元件(Point,Line,Rectangle,Triangle)的簡(jiǎn)單實(shí)現(xiàn)
42、如果讓你實(shí)現(xiàn)一個(gè)并發(fā)安全的鏈表,你會(huì)怎么做
43、應(yīng)用服務(wù)器與WEB 服務(wù)器的區(qū)別?應(yīng)用服務(wù)器怎么監(jiān)控性能,各種方式的區(qū)別?你使用過(guò)的應(yīng)用服務(wù)器優(yōu)化技術(shù)有哪些
44、大型網(wǎng)站在架構(gòu)上應(yīng)當(dāng)考慮哪些問(wèn)題
45、有沒(méi)有處理過(guò)線上問(wèn)題?出現(xiàn)內(nèi)存泄露,CPU利用率標(biāo)高,應(yīng)用無(wú)響應(yīng)時(shí)如何處理的
46、最近看什么書,印象最深刻的是什么
47、描述下常用的重構(gòu)技巧
48、你使用什么版本管理工具?分支(Branch)與標(biāo)簽(Tag)之間的區(qū)別在哪里
49、你有了解過(guò)存在哪些反模式(Anti-Patterns)嗎
50、你用過(guò)的網(wǎng)站前端優(yōu)化的技術(shù)有哪些
51、如何分析Thread dump
52、你如何理解AOP中的連接點(diǎn)(Joinpoint)、切點(diǎn)(Pointcut)、增強(qiáng)(Advice)、引介(Introduction)、織入(Weaving)、切面(Aspect)這些概念
53、你是如何處理內(nèi)存泄露或者棧溢出問(wèn)題的
54、你們線上應(yīng)用的 JVM 參數(shù)有哪些
55、怎么提升系統(tǒng)的QPS和吞吐量
?
每日一題
??用于調(diào)用存儲(chǔ)過(guò)程的對(duì)象是:???C
A.ResultSet
B.DriverManager
C.CallableStatemet
D.PreparedStatement
?Static變量是什么含義
???static是靜態(tài)變量,就是變量值不隨函數(shù)執(zhí)行結(jié)束而消失,下次調(diào)用同一函數(shù)時(shí),上次所賦予的值仍存在。
? 在try-catch-finally塊中的退出語(yǔ)句。
public class Test
{
public static void main(String[] args)
{
int a=1;
try
{
a=a/0;
}catch(Exception e)
{
System.out.println("catch");
return;//當(dāng)return時(shí),finally中的語(yǔ)句會(huì)執(zhí)行。
//System.exit(0);//若用上這句,finally中的語(yǔ)句不會(huì)執(zhí)行。直接返回,退出程序。
}
finally?//當(dāng)沒(méi)有System.exit(0);時(shí),無(wú)論是否發(fā)生異常它都會(huì)執(zhí)行。
{
System.out.println("finally");
}
}
}
注:???try-catch-finally塊的順序不能調(diào)換。
??如果小伙伴們有更好的回答,歡迎在留言區(qū)留言哦,我們一起努力營(yíng)造更好的學(xué)習(xí)氛圍。
回復(fù)以下關(guān)鍵字獲取更多學(xué)習(xí)資源
java基礎(chǔ)|html5|css|js|jquery|angularJs|ajax|node.js|javaEE基礎(chǔ)| |struts2|hibernate|spring|svn|maven|springmvc|mybatis|linux|oracle| |luncene|solr|redis|springboot|架構(gòu)師資源|dubbo|php|webservice|c++基礎(chǔ)|nginx|mysql|sqlserver|asp.net
更多學(xué)習(xí)資源逐步更新,請(qǐng)置頂公眾號(hào)不要錯(cuò)過(guò)更新
想了解更多?
那就趕緊來(lái)關(guān)注我們
長(zhǎng)按二維碼 關(guān)注我們
推送java優(yōu)質(zhì)文章、視頻教程
微信ID:好好學(xué)java
總結(jié)
以上是生活随笔為你收集整理的java面试题大合集(开发者必看一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ArrayList深入解析,看这篇就够了
- 下一篇: java基础(七) 深入解析java四种