本文目錄一覽:
java基礎面試題
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。
2.繼承:
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼 承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和實例變數,並且類可以修改或增 加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。
4. 多態性:
多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。
5、String 和StringBuffer的區別
JAVA平台提供了兩個類:String和 StringBuffer,它們可以儲存和操作字元串,即包含多個字元的字元數據。這個String類提供了數值不可改變的字元串。而這個 StringBuffer類提供的字元串進行修改。當你知道字元數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用 StringBuffers來動態構造字元數據。
6、運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
7、說出Servlet的生命周期,並說出Servlet和CGI的區別。
Servlet被伺服器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將實例銷毀的時候調用其destroy方法。
與cgi的區別在於servlet處於伺服器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。
8、說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和 Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素 移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而 LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
10、和的區別。
是位運算符,表示按位與運算,是邏輯運算符,表示邏輯與(and)。
11、HashMap和Hashtable的區別。
HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。
12、final, finally, finalize的區別。
final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。
13、sleep() 和 wait() 有什麼區別?
sleep是線程類(Thread)的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動恢復。調用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
14、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Override和重載Overload是Java多態性的不同表現。重寫Overrid是父類與子類之間多態性的一種表現,重載 Overload是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overrid)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被”屏蔽”了。如果在一個類中定義了多個同名的方 法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overload的方法是可以改變返回值的類型。
15、error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
16、同步和非同步有何異同,在什麼情況下分別使用他們?舉例說明。
如果數據將在線程間共享。例如正在寫的數據以後可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那麼這些數據就是共享數據,必須進行同步存取。
當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用非同步編程,在很多情況下採用非同步途徑往往更有效率。
17、try { }里有一個return語句,那麼緊跟在這個try後的finally { }里的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
18、Java中的異常處理機制的簡單原理和應用。
當JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情 況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發 NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,並自由選擇在何時用 throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
19、垃圾回收的優點和原理。並考慮2種回收機制。
Java語言中一個顯著的特點就是引入了垃圾回收機制,使C++程序員最頭疼的內存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內存管理。由於有個垃圾回收機制,Java中的對象不再有 “作用域”的概念,只有對象的引用才有”作用域”。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的 線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾 回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。
20、請說出你所知道的線程同步的方法。
wait():使一個線程處於等待狀態,並且釋放所持有的對象的lock。
sleep():使一個正在運行的線程處於睡眠狀態,是一個靜態方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的線程,注意的是在調用此方法的時候,並不能確切的喚醒某一個等待狀態的線程,而是由JVM確定喚醒哪個線程,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的線程,注意並不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
21、描述一下JVM載入class文件的原理機制
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
22、MVC的各個部分都有那些技術來實現?如何實現?
MVC是Model-View-Controller 的簡寫。”Model” 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), “View” 是應用的表示面(由JSP頁面產生),”Controller” 是提供應用的處理過程式控制制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。
23、List、Map、Set三個介面,存取元素時,各有什麼特點?
List以特定次序來持有元素,可有重複元素。Set 無法擁有重複元素,內部排序。Map 保存key-value值.
119、STRUTS的應用(如STRUTS架構)
Struts是採用Java Servlet/JavaServer Pages技術,開發Web應用程序的開放源碼的framework。 採用Struts能開發出基於MVC(Model-View-Controller)設計模式的應用構架。 Struts有如下的主要功能: 一.包含一個controller servlet,能將用戶的請求發送到相應的Action對象。 二.JSP自由tag庫,並且在controller servlet中提供關聯支持,幫助開發員創建互動式表單應用。 三.提供了一系列實用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
Java基礎面試題都有哪些?
1.java異常機制的原理與應用
答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。
實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標準應用:try-catch-finally-throw-throws一起使用。
2. 垃圾回收機制的優點
答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()
3. Error與Exception區別
答:Error是jvm進行處理,是jvm出錯
exception是可以由程序處理的,可以用try-catch捕獲的
4. final,finally,finallize
答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承
finally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的
5. Anonymous Inner Class是否可以extends,是否可以implements Interface
答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的
6. Static Nested Class 與Inner Class的區別
答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問
而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。
7. HashMap and HashTable?
答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,性能較高,是非線程安全的 3)允許null
HashTable:
1)released in jdk 1.0 ,old Class
2)採用同步處理方式,性能低,是線程安全的
3)不允許null
8. assert代表什麼?
答:asserts是jdk 1.4之後發布的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數
9. gc是什麼?
答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放
10. String s = new String(“xyz”)產生了幾個對象?
答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。
11. sleep() and wait()?
答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒
wait()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源
12. Overload與Override的區別
答:Overload:重載
|- 在一個類中定義的若干方法
|- 所有的方法名相同,但參數類型或個數不同
|- 只有參數有關,與返回類型無關
Override:覆寫
|- 在繼承的關係中
|- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。
|- 訪問許可權不能更嚴格
13. abstract class 和 interface有什麼區別?
答:抽象類:
|-由抽象方法和常量、變數、全局常量、構造方法、普通方法組成
|-使用abstract聲明
|-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-存在單繼承的局限
|-抽象類可以實現若干個介面
介面:
|-由抽象方法和全局常量組成
|-使用interface關鍵字
|-子類要通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-一個子類可以實現多個介面
|-介面不能繼承一個抽象類,但允許繼承多個介面
java基礎面試題有哪些?
下面是10道java基礎面試題,後附答案
1.什麼是 Java 虛擬機?為什麼 Java 被稱作是「平台無關的編程語言」?
Java 虛擬機是一個可以執行 Java 位元組碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的位元組碼文件。
Java 被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java 虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。
2.「static」關鍵字是什麼意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,所以概念上不適用。
3.JDK 和 JRE 的區別是什麼?
Java 運行時環境(JRE)是將要執行 Java 程序的 Java 虛擬機。它同時也包含了執行 applet 需要的瀏覽器插件。Java 開發工具包 (JDK)是完整的 Java 軟體開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調試器),可以讓開發者開發、編譯、執行 Java 應用程序。
4.是否可以在 static 環境中訪問非 static 變數?
static 變數在 Java 中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變數進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。
5.Java 支持的數據類型有哪些?什麼是自動拆裝箱?
Java 語言支持的 8 中基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int 轉化成 Integer,double 轉化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。
7.Java 中,什麼是構造函數?什麼是構造函數重載?什麼是複製構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java 編譯器會為這個類創建一個默認的構造函數。
Java 中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java 不支持像 C++中那樣的複製構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java 不會創建默認的複製構造函數。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java 中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.介面和抽象類的區別是什麼?
Java 提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java 介面中聲明的變數默認都是 final 的。抽象類可以包含非 final 的變數。
Java 介面中的成員函數默認是 public 的。抽象類的成員函數可以是 private, protected 或者是 public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最後祝你面試順利!
java的面試題有哪些?
正如圈內的大佬所說的那樣,基礎很重要。浙江優就業的老師幫你總結一下。
常見的面試題有:
安卓圖片載入後一直在手機如何優化?
解釋一下安卓中SharedPreferences類?
客戶端和服務端如何收發信息?
activity里如何發起http請求?
安卓UI線程調用sleep?
static類如何回收?
介面和抽象類
JVM垃圾回收演算法
如何區分哪些是老年代對象?
線程池
線程終止
設計模式
單例
JDBC
Runnable
run()
start()
區別?
Socket
靜態代碼塊和構造器的執行順序
final的map能否修改?
String
StringBuffer
StringBuild區別?
內存泄露?
ArraryList
LinkedList
HashMap原理
linux常用命令
查看進程PS
redis相關?
運行時異常
一個對象為空,怎麼進行處理?
泛型
哪裡用到?什麼好處
?
對資料庫進行一些操作,mybatis要進行哪些操作?
為什麼Java是跨平台?
匿名內部類能不能有外部內的介面?(反正跟匿名內部類有關)?
@Test
測試用例
幹嘛
如何獲取http的參數?
Controller的參數設置,為什麼是單例的?
@autowired裝載一個類,構造器里能不能直接調用這個類
?
spring和springmvc區別?
springmvc跨域?
鎖的種類等
望採納!
原創文章,作者:SE58P,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130862.html