115道Java面试题及答案分享,java程序员赶紧收好
115道Java經(jīng)典面試題(面中率最高、最全)
Java是一個(gè)支持并發(fā)、基于類和面向?qū)ο蟮挠?jì)算機(jī)編程語(yǔ)言。下面列出了面向?qū)ο筌浖_(kāi)發(fā)的優(yōu)點(diǎn):
代碼開(kāi)發(fā)模塊化,更易維護(hù)和修改。
代碼復(fù)用。
增強(qiáng)代碼的可靠性和靈活性。
增加代碼的可理解性。
面向?qū)ο缶幊逃泻芏嘀匾奶匦?#xff0c;比如:封裝,繼承,多態(tài)和抽象。下面的章節(jié)我們會(huì)逐個(gè)分析這些特性。
封裝
封裝給對(duì)象提供了隱藏內(nèi)部特性和行為的能力。對(duì)象提供一些能被其他對(duì)象訪問(wèn)的方法來(lái)改變它內(nèi)部的數(shù)據(jù)。在Java當(dāng)中,有3種修飾符:public,private和protected。每一種修飾符給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪問(wèn)權(quán)限。在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流圈。交流學(xué)習(xí)偽鑫:1253431195(里面有大量的面試題及答案)里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良多
下面列出了使用封裝的一些好處:
通過(guò)隱藏對(duì)象的屬性來(lái)保護(hù)對(duì)象內(nèi)部的狀態(tài)。
提高了代碼的可用性和可維護(hù)性,因?yàn)閷?duì)象的行為可以被單獨(dú)的改變或者是擴(kuò)展。
禁止對(duì)象之間的不良交互提高模塊化。
參考這個(gè)文檔獲取更多關(guān)于封裝的細(xì)節(jié)和示例。
多態(tài)
多態(tài)是編程語(yǔ)言給不同的底層數(shù)據(jù)類型做相同的接口展示的一種能力。一個(gè)多態(tài)類型上的操作可以應(yīng)用到其他類型的值上面。
繼承
繼承給對(duì)象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也可以在不修改類的情況下給現(xiàn)存的類添加新特性。
抽象
抽象是把想法從具體的實(shí)例中分離出來(lái)的步驟,因此,要根據(jù)他們的功能而不是實(shí)現(xiàn)細(xì)節(jié)來(lái)創(chuàng)建類。Java支持創(chuàng)建只暴漏接口而不包含方法實(shí)現(xiàn)的抽象的類。這種抽象技術(shù)的主要目的是把類的行為和實(shí)現(xiàn)細(xì)節(jié)分離開(kāi)。
抽象和封裝的不同點(diǎn)
抽象和封裝是互補(bǔ)的概念。一方面,抽象關(guān)注對(duì)象的行為。另一方面,封裝關(guān)注對(duì)象行為的細(xì)節(jié)。一般是通過(guò)隱藏對(duì)象內(nèi)部狀態(tài)信息做到封裝,因此,封裝可以看成是用來(lái)提供抽象的一種策略。
常見(jiàn)的Java問(wèn)題
1.什么是Java虛擬機(jī)?為什么Java被稱作是“平臺(tái)無(wú)關(guān)的編程語(yǔ)言”?
Java虛擬機(jī)是一個(gè)可以執(zhí)行Java字節(jié)碼的虛擬機(jī)進(jìn)程。Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。
Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫或者是重新編譯。Java虛擬機(jī)讓這個(gè)變?yōu)榭赡?#xff0c;因?yàn)樗赖讓佑布脚_(tái)的指令長(zhǎng)度和其他特性。
2.JDK和JRE的區(qū)別是什么?
Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java開(kāi)發(fā)工具包(JDK)是完整的Java軟件開(kāi)發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行Java應(yīng)用程序。
3.”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法?
“static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類的實(shí)例變量的情況下被訪問(wèn)。
Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。
4.是否可以在static環(huán)境中訪問(wèn)非static變量?
static變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時(shí)候,會(huì)對(duì)static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪問(wèn)非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。
5.Java支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?
Java語(yǔ)言支持的8中基本數(shù)據(jù)類型是:
byte
short
int
long
float
double
boolean
char
自動(dòng)裝箱是Java編譯器在基本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
java中的方法重載發(fā)生在同一個(gè)類里面兩個(gè)或者是多個(gè)方法的方法名相同但是參數(shù)不同的情況。與此相對(duì),方方法覆蓋是說(shuō)子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪問(wèn)。
7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?
當(dāng)新對(duì)象被創(chuàng)建的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒(méi)有給類提供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。
Java中構(gòu)造函數(shù)重載和方法重載很相似。可以為一個(gè)類創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。
Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是因?yàn)槿绻悴蛔约簩憳?gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。
8.Java支持多繼承么?
不支持,Java不支持多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流圈。交流學(xué)習(xí)偽鑫:1253431195(里面有大量的面試題及答案)里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良多
9.接口和抽象類的區(qū)別是什么?
10.什么是值傳遞和引用傳遞?
11.進(jìn)程和線程的區(qū)別是什么?
12.創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?
13.概括的解釋下線程的幾種可用狀態(tài)。
14.同步方法和同步代碼塊的區(qū)別是什么?
15.在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級(jí)別的同步?
16.什么是死鎖(deadlock)?
17.如何確保N個(gè)線程可以訪問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?
18.Java集合類框架的基本接口有哪些?
19.為什么集合類沒(méi)有實(shí)現(xiàn)Cloneable和Serializable接口?
20.什么是迭代器(Iterator)?
21.Iterator和ListIterator的區(qū)別是什么?
22.快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)別是什么?
23.Java中的HashMap的工作原理是什么?
24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方?
25.HashMap和Hashtable有什么區(qū)別?
26.數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時(shí)候應(yīng)該使用Array而不是ArrayList?
27.ArrayList和LinkedList有什么區(qū)別?
28.Comparable和Comparator接口是干什么的?列出它們的區(qū)別。
29.什么是Java優(yōu)先級(jí)隊(duì)列(Priority Queue)?
30.你了解大O符號(hào)(big-O notation)么?你能給出不同數(shù)據(jù)結(jié)構(gòu)的例子么?
31.如何權(quán)衡是使用無(wú)序的數(shù)組還是有序的數(shù)組?
32.Java集合類框架的最佳實(shí)踐有哪些?
33.Enumeration接口和Iterator接口的區(qū)別有哪些?
34.HashSet和TreeSet有什么區(qū)別?
35.Java中垃圾回收有什么目的?什么時(shí)候進(jìn)行垃圾回收?
36.System.gc()和Runtime.gc()會(huì)做什么事情?
37.finalize()方法什么時(shí)候被調(diào)用?析構(gòu)函數(shù)(finalization)的目的是什么?
39.Java堆的結(jié)構(gòu)是什么樣子的?什么是堆中的永久代(Perm Gen space)?
40.串行(serial)收集器和吞吐量(throughput)收集器的區(qū)別是什么?
41.在Java中,對(duì)象什么時(shí)候可以被垃圾回收?
42.JVM的永久代中會(huì)發(fā)生垃圾回收么?
43.Java中的兩種異常類型是什么?他們有什么區(qū)別?
44.Java中Exception和Error有什么區(qū)別?
45.throw和throws有什么區(qū)別?
45.異常處理的時(shí)候,finally代碼塊的重要性是什么?(譯者注:作者標(biāo)題的序號(hào)弄錯(cuò)了)
46.異常處理完成以后,Exception對(duì)象會(huì)發(fā)生什么變化?
47.finally代碼塊和finalize()方法有什么區(qū)別?
48.什么是Applet?
49.解釋一下Applet的生命周期
50.當(dāng)applet被載入的時(shí)候會(huì)發(fā)生什么?
51.Applet和普通的Java應(yīng)用程序有什么區(qū)別?
52.Java applet有哪些限制條件?
53.什么是不受信任的applet?
54.從網(wǎng)絡(luò)上加載的applet和從本地文件系統(tǒng)加載的applet有什么區(qū)別?
55.applet類加載器是什么?它會(huì)做哪些工作?
56.applet安全管理器是什么?它會(huì)做哪些工作?
57.彈出式選擇菜單(Choice)和列表(List)有什么區(qū)別
58.什么是布局管理器?
59.滾動(dòng)條(Scrollbar)和滾動(dòng)面板(JScrollPane)有什么區(qū)別?
60.哪些Swing的方法是線程安全的?
61.說(shuō)出三種支持重繪(painting)的組件。
62.什么是裁剪(clipping)?
63.MenuItem和CheckboxMenuItem的區(qū)別是什么?
64.邊緣布局(BorderLayout)里面的元素是如何布局的?
65.網(wǎng)格包布局(GridBagLayout)里面的元素是如何布局的?
66.Window和Frame有什么區(qū)別?
67.裁剪(clipping)和重繪(repainting)有什么聯(lián)系?
68.事件監(jiān)聽(tīng)器接口(event-listener interface)和事件適配器(event-adapter)有什么關(guān)系?
69.GUI組件如何來(lái)處理它自己的事件?
70.Java的布局管理器比傳統(tǒng)的窗口系統(tǒng)有哪些優(yōu)勢(shì)?
71.Java的Swing組件使用了哪種設(shè)計(jì)模式?
72.什么是JDBC?
73.解釋下驅(qū)動(dòng)(Driver)在JDBC中的角色。
74.Class.forName()方法有什么作用?
75.PreparedStatement比Statement有什么優(yōu)勢(shì)?
76.什么時(shí)候使用CallableStatement?用來(lái)準(zhǔn)備CallableStatement的方法是什么?
77.數(shù)據(jù)庫(kù)連接池是什么意思?
78.什么是RMI?
79.RMI體系結(jié)構(gòu)的基本原則是什么?
80.RMI體系結(jié)構(gòu)分哪幾層?
81.RMI中的遠(yuǎn)程接口(Remote Interface)扮演了什么樣的角色?
82.java.rmi.Naming類扮演了什么樣的角色?
83.RMI的綁定(Binding)是什么意思?
84.Naming類的bind()和rebind()方法有什么區(qū)別?在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流圈。交流學(xué)習(xí)偽鑫:1253431195(里面有大量的面試題及答案)里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良多
85.讓RMI程序能正確運(yùn)行有哪些步驟?
86.RMI的stub扮演了什么樣的角色?
87.什么是分布式垃圾回收(DGC)?它是如何工作的?
88.RMI中使用RMI安全管理器(RMISecurityManager)的目的是什么?
89.解釋下Marshalling和demarshalling。
90.解釋下Serialization和Deserialization。
91.什么是Servlet?
92.說(shuō)一下Servlet的體系結(jié)構(gòu)。
93.Applet和Servlet有什么區(qū)別??
94.GenericServlet和HttpServlet有什么區(qū)別?
95.解釋下Servlet的生命周期。
96.doGet()方法和doPost()方法有什么區(qū)別?
97.什么是Web應(yīng)用程序?
98.什么是服務(wù)端包含(Server Side Include)?
99.什么是Servlet鏈(Servlet Chaining)?
100.如何知道是哪一個(gè)客戶端的機(jī)器正在請(qǐng)求你的Servlet?
101.HTTP響應(yīng)的結(jié)構(gòu)是怎么樣的?
102.什么是cookie?session和cookie有什么區(qū)別?
103.瀏覽器和Servlet通信使用的是什么協(xié)議?
104.什么是HTTP隧道?
105.sendRedirect()和forward()方法有什么區(qū)別?
106.什么是URL編碼和URL解碼?
107.什么是JSP頁(yè)面?
108.JSP請(qǐng)求是如何被處理的?
109.JSP有什么優(yōu)點(diǎn)?
110.什么是JSP指令(Directive)?JSP中有哪些不同類型的指令?
111.什么是JSP動(dòng)作(JSP action)?
112.什么是Scriptlets?
113.聲明(Decalaration)在哪里?
114.什么是表達(dá)式(Expression)?
115.隱含對(duì)象是什么意思?有哪些隱含對(duì)象?
真的很抱歉,由于題目太多,十幾頁(yè)的文檔無(wú)法放下,如果真的有需要還請(qǐng)移駕公眾號(hào)(Java進(jìn)階營(yíng))在后臺(tái)對(duì)話框回復(fù):Java面試題
總結(jié)
以上是生活随笔為你收集整理的115道Java面试题及答案分享,java程序员赶紧收好的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 韩国ICB支付
- 下一篇: java自旋锁使用_10.Java锁之自