Java面試(基礎(chǔ)部分)

1.基本數(shù)據(jù)類型

byte? 8位;? ? shout? ? ?16位;? ? ?int? ? 32位;? ? long? ? 64位;

float(浮點型)? ?32位 ;? ?double(雙精度)? ? ? ? 64位;

char(字符型)? ? ? 16位;? ?boolean(布爾)? ? ?1位

2.基本數(shù)據(jù)類型和封裝類的區(qū)別

1.內(nèi)存位置:基本數(shù)據(jù)類型在棧中;封裝類對象在堆中;

2.默認(rèn)值:基本數(shù)據(jù)類型0或false;封裝類:null;

3.傳參方面:基本數(shù)據(jù)類型傳遞值;包裝類傳遞地址;

4.裝箱和拆箱:裝箱:integer? i =1;拆箱:int? a=new? Integer(10);

3.接口和抽象類的區(qū)別

1.接口多實現(xiàn),抽象類單繼承;

2.接口中只有方法的定義沒有方法的實現(xiàn)

3.接口中只有常量,抽象類中可以有變量;

4.實現(xiàn)接口需要實現(xiàn)接口中的所有方法,繼承抽象類不需要實現(xiàn)所有的方法;

5.抽象類中可以定義非抽象方法;

6.接口中沒有構(gòu)造方法,抽象類可以有構(gòu)造方法。

4.Java中重載和重寫的區(qū)別

1.重載要求方法名相同,參數(shù)列表不同;重寫方法名相同,參數(shù)列表相同;

2.重寫用在具有繼承關(guān)系的子類中;重載用在本類中。

5.文件輸入,輸出分別是什么流

文件輸入:FileInputStream、FileReader、BufferedInputstream、BufferedReader;

文件輸出:FileOutputStream、FileWriter、BufferedOutputstream、BufferedWriter

按照流劃分:

字節(jié)? ? ? 字節(jié)流,字符流

方向? ? ? ?輸入流,輸出流

功能? ? ? ? 字節(jié)流? ? 處理流

6.常見的異常

運行異常:

NullpointerException空指針異常

ArrayIndexOutofBoundsException數(shù)組下標(biāo)越界

FileNotFoundException

受檢異常:

SQLException;IOException;ClassNotFoundException

7.二分查找

要求:(1)必須采用順序存儲(2)必須按關(guān)鍵字大小有序排列

原理:

????將數(shù)組分為三部分,依次是中值(所謂中值就是數(shù)組中間位置的值)前,中值,中值后;

? ? 將要查找的值和數(shù)組的中值進行比較,若小于中值則在中值前面找,若大于中值則在中值后面找,等于中值直接返回,然后依次是一個遞歸循環(huán)的過程,前半部分或后半部分繼續(xù)分解為三部分。

8.遞歸及用法

自己調(diào)用自己的方法,要求:必須有表示結(jié)束的條件;

應(yīng)用:查詢后代數(shù)據(jù);階乘;斐波那契數(shù)列

9.多態(tài)的理解

分為賦值多態(tài)和傳參多態(tài)兩種

賦值:通過多態(tài),只能調(diào)用子類中的重寫的方法,不能表用子類特有的方法

傳參:形參為父類,實參為子類。

接口和類中存在多態(tài)

建立耦合(聯(lián)系),用在賦值傳參。

條件:繼承,重寫,向上轉(zhuǎn)型

10.異常和錯誤的區(qū)別

Error(錯誤)是系統(tǒng)中的錯誤,程序員不能改變和處理的,是在程序編寫時的錯誤,只能通過修改代碼才能修正;

Exception(異常)表示程序可以處理的異常,可以捕獲且可以恢復(fù)。

11.equals底層是怎么實現(xiàn)

比較地址,返回true,判斷是不是字符串,(value當(dāng)前字符串的變量)拿到數(shù)組長度,判斷長度,賦值數(shù)組,比較每一個值

12.談?wù)剬γ嫦驅(qū)ο蟮睦斫?/h4>

面向?qū)ο笫窍颥F(xiàn)實世界模型的自然延伸,這是一種“萬物皆對象”的編程思想。在現(xiàn)實生活中的任何物體都可以歸為一類事物,而每一個個體都是一類事物的實例。面向?qū)ο蟮木幊淌且詫ο鬄橹行?,以消息為?qū)動,所以程序=對象+消息。

面向?qū)ο笥腥筇匦?,封裝、繼承和多態(tài)。

封裝就是將一類事物的屬性和行為抽象成一個類,使其屬性私有化,行為公開化,提高了數(shù)據(jù)的隱秘性的同時,使代碼模塊化。這樣做使得代碼的復(fù)用性更高。

繼承則是進一步將一類事物共有的屬性和行為抽象成一個父類,而每一個子類是一個特殊的父類--有父類的行為和屬性,也有自己特有的行為和屬性。這樣做擴展了已存在的代碼塊,進一步提高了代碼的復(fù)用性。

如果說封裝和繼承是為了使代碼重用,那么多態(tài)則是為了實現(xiàn)接口重用。多態(tài)的一大作用就是為了解耦--為了解除父子類繼承的耦合度。

(如果說封裝和繼承是面向?qū)ο蟮幕A(chǔ),那么多態(tài)則是面向?qū)ο笞罹璧睦碚?。?/p>

13.Java中異常處理機制的實現(xiàn)原理和應(yīng)用

捕獲異常 try catch finally

1,try是嘗試運程代碼塊,如果有異常會被隨后的catch捕獲,異常發(fā)生后代碼不執(zhí)行。

2,catch代碼塊是異常處理代碼,注意:異常的大小關(guān)系,大類型的放到后面處理。

3,finally代碼塊中,經(jīng)常用來處理現(xiàn)場清理。例如:數(shù)據(jù)庫連接關(guān)閉。

3,處理異常有一個基本原則:能夠底層處理的盡量處理,但是如果不能處理,必須拋出

到方法。

14.object里的tostring方法的實現(xiàn)

getClass().getName()+"@"+Integer.toHexString(hashCode());

15.java的三大特性和五大原則

特征:封裝,繼承,多態(tài)

原則:單一原則,開閉原則,替換原則,依賴倒置原則,接口隔離原則。

16.string,stringbuffer,stringbuilder區(qū)別

1.string長度不可變,底層是final修飾的char[]數(shù)組,用于拼接較少的情況

2.stringbuffer? ?JDK1.0? 長度可變,底層是沒有final修飾的char[]數(shù)組線程安全,效率低,多用于多編程情況;

3.stringbuilder? ?JDK1.5長度可變,底層是沒有final修飾char[]數(shù)組,非線程安全,效率高,用于拼接較多的情況

17.隱式轉(zhuǎn)換(自動轉(zhuǎn)換)和顯示轉(zhuǎn)換(強轉(zhuǎn))

隱士轉(zhuǎn)換特征:從小到大,可以隱士轉(zhuǎn)換,數(shù)據(jù)類型將自動提升

強制轉(zhuǎn)換特征:從大到?。ㄈ绻忝鞔_知道數(shù)據(jù)是可以用該數(shù)據(jù)類型來表示的,可以用強制轉(zhuǎn)換)

byte + byte = int; 拿byte存儲以Int計算

byte + short = int; ??

byte,short,int,char,都是以Int來計算。

Int + long = long;

float + short = float;(double也可以)

float + int = float;

float + long = float;(損失精度)

char + double = double;

18如何不用new實例化對象(反序列化和克?。?/h4>

通過I/O流(包括反序列化),如運行反序列化手段,調(diào)用java.io.ObjectInputStream對象的readObject()方法

19.collection和collections

collection抽象的集合概念,實現(xiàn)它有l(wèi)ist和set

collections集合靜態(tài)工具類,包含集合的工具方法,sort()等

19 final,finalize和finally的不同之處

final 是一個修飾符,可以修飾變量、方法和類。如果 final 修飾變量,意味著該變量的值在初始化后不能被改變。

finalize 方法是在對象被回收之前調(diào)用的方法,給對象自己最后一個復(fù)活的機會,但是什么時候調(diào)用 finalize 沒有保證。

finally 是一個關(guān)鍵字,與 try 和 catch 一起用于異常的處理。finally 塊一定會被執(zhí)行,無論在 try 塊中是否有發(fā)生異常。

20 final的用法

1.被final修飾的類不可以被繼承

2.被final修飾的方法不可以被重寫

3.被final修飾的變量不可以被改變,如果修飾引用,那么表示引用不可變,引用指向的內(nèi)容可變

4.被final修飾的方法,JVM會嘗試將其內(nèi)聯(lián),以提高運行效率

5.被final修飾的常量,在編譯階段會存入常量池中

21 static用法

1.static修飾的變量,存儲在常量池,公共訪問;

2.static修飾的方法為靜態(tài)方法,存放在方法區(qū),可以通過“類型.方法名”來調(diào)用

3.static修飾的類不能調(diào)用非靜態(tài)變量或方法,但是非靜態(tài)方法或變量可以訪問靜態(tài)變量或方法

4.static優(yōu)先于對象創(chuàng)建,只能修飾成員變量

拓展:靜態(tài)代碼塊>main方法>構(gòu)造代碼塊>構(gòu)造方法

儲存于堆內(nèi)的方法區(qū),在主方法執(zhí)行之前加載

聲明的變量儲存在常量池中,修飾的方法為靜態(tài)方法,類方法

非static修飾的變量及方法能夠訪問static修飾的變量和方法

22.截取字符串

Substring(int startindex ,int endindex)前包含,后不包含

Substring(int startindex,int length)

split(",");(用“,”截取)

23.泛型的理解

泛型是具有占位符(類型參數(shù))的類,機構(gòu),接口和方法,占位符就是先占住一個固定的位置,再往里面添加內(nèi)容的符號,就是約束數(shù)據(jù)類型的

24 請求轉(zhuǎn)發(fā)和重定向的區(qū)別

轉(zhuǎn)發(fā):

req.getRequestDispatcher("***.jsp";)

服務(wù)器內(nèi)部轉(zhuǎn)發(fā),訪問該項目下的文件,一次請求,URL不變

重定向:

resp.sendRedirect("http://baidu.com");

可以訪問任何資源,由jsp文件發(fā)出的兩次請求,URL變化

25.JVM運行順序

1.運行class文件((靜態(tài)變量、靜態(tài)初始化塊)–>(變量、初始化塊)–> 構(gòu)造器;如果有父類,則順序是:父類static方法 –> 子類static方法 –> 父類構(gòu)造方法- -> 子類構(gòu)造方法?)

2.管理并分配內(nèi)存

3.執(zhí)行垃圾回收

26.連接池的作用

減少創(chuàng)建連接的時間,更快響應(yīng),統(tǒng)一管理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容