您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java的基礎(chǔ)面試題有哪些”,在日常操作中,相信很多人在Java的基礎(chǔ)面試題有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java的基礎(chǔ)面試題有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
1.JDK 和 JRE 有什么區(qū)別?
答:JRE是java運(yùn)行時(shí)環(huán)境,包含了java虛擬機(jī),java基礎(chǔ)類庫(kù)。是使用java語(yǔ)言編寫的程序運(yùn)行所需要的軟件環(huán)境,是提供給想運(yùn)行java程序的用戶使用的。
JDK是java開(kāi)發(fā)工具包,是程序員使用java語(yǔ)言編寫java程序所需的開(kāi)發(fā)工具包,是提供給程序員使用的。
2.== 和 equals 的區(qū)別是什么?
答:==是操作符,是比較兩個(gè)對(duì)象的地址或基本類型,equals是比較兩個(gè)對(duì)象的內(nèi)容,屬于Object里的方法。
3.兩個(gè)對(duì)象的 hashCode()相同,則 equals()也一定為 true,對(duì)嗎?
答:不對(duì)!hashCode()相同,不代表兩個(gè)對(duì)象就相同。hashCode值是從hash表中得來(lái)的,hash是一個(gè)函數(shù),該函數(shù)的實(shí)現(xiàn)是一種算法,通過(guò)hash算法算出hash值,hash表就是hash值組成的,一共有8個(gè)位置。
1)、如果兩個(gè)對(duì)象equals,Java運(yùn)行時(shí)環(huán)境會(huì)認(rèn)為他們的hashcode一定相等。
2)、如果兩個(gè)對(duì)象不equals,他們的hashcode有可能相等。
3)、如果兩個(gè)對(duì)象hashcode相等,他們不一定equals。
4)、如果兩個(gè)對(duì)象hashcode不相等,他們一定不equals。
4.final 在 java 中有什么作用?和finally、finalize的區(qū)別是什么?
答:final的作用隨著所修飾的類型而不同:
1)、final修飾類中的屬性或者變量:無(wú)論屬性是基本類型還是引用類型,final所 起的作用。
5.java 中的 Math.round(-1.5) 等于多少,Math.round(1.5)等于多少?
答:等于-1,等于2
計(jì)算方法:
1)、參數(shù)的小數(shù)點(diǎn)后第一位<5,運(yùn)算結(jié)果為參數(shù)整數(shù)部分
2)、參數(shù)的小數(shù)點(diǎn)后第一位>5,運(yùn)算結(jié)果為參數(shù)整數(shù)部分絕對(duì)值+1,符號(hào)(即正 負(fù))不變。
3)、參數(shù)的 小數(shù)點(diǎn)后第一位=5,正數(shù)運(yùn)算結(jié)果為整數(shù)部分+1,負(fù)數(shù)運(yùn)算結(jié)果為整 數(shù)部分。
總結(jié):大于五全部加,等于五正數(shù)加, 小于五全不加
6. Java 中的重載和重寫的區(qū)別?
重載和重寫都允許你用相同的名稱來(lái)實(shí)現(xiàn)不同的功能,但是重載是編譯時(shí)活動(dòng),而重寫是運(yùn)行時(shí)活動(dòng)。你可以在同一個(gè)類中重載方法,但是只能在子類中重寫方法。重寫必須要有繼承
重寫:
1)、在子類中可以根據(jù)需要對(duì)從基類中繼承來(lái)的方法進(jìn)行重寫。
2)、重寫的方法和被重寫的方法必須具有相同方法名稱、參數(shù)列表和返回類型。
3)、重寫方法不能使用比被重寫的方法更嚴(yán)格的訪問(wèn)權(quán)限。
重載的時(shí)候,方法名要一樣,但是參數(shù)類型和個(gè)數(shù)不一樣,返回值類型可以相同也可以不相同。無(wú)法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。
7.java 中操作字符串都有哪些類?它們之間有什么區(qū)別?
答:String、StringBuffer、StringBuilder可以操作拼接字符串
區(qū)別:String是不可變的對(duì)象,對(duì)每次對(duì)String類型的改變時(shí)都會(huì)生成一個(gè)新的對(duì)象,StringBuffer和StringBuilder是可以改變對(duì)象的。
對(duì)于操作效率:StringBuilder > StringBuffer > String
對(duì)于線程安全:StringBuffer 是線程安全,可用于多線程;StringBuilder 是非線程安全,用于單線程
8.String str="i"與 String str=new String("i")一樣嗎?
答:不一樣,因?yàn)樗麄儾皇峭粋€(gè)對(duì)象。
9.訪問(wèn)修飾符public,private,protected,以及不寫(默認(rèn))時(shí)的區(qū)別?
答:類的成員不寫訪問(wèn)修飾時(shí)默認(rèn)為default。默認(rèn)對(duì)于同一個(gè)包中的其他類相當(dāng)于公開(kāi)(public),對(duì)于不是同一個(gè)包中的其他類相當(dāng)于私有(private)。受保護(hù)(protected)對(duì)子類相當(dāng)于公開(kāi),對(duì)不是同一包中的沒(méi)有父子關(guān)系的類相當(dāng)于私有。Java中,外部類的修飾符只能是public或默認(rèn),類的成員(包括內(nèi)部類)的修飾符可以是以上四種。
簡(jiǎn)單些說(shuō):Protected可在包內(nèi)及包外子類訪問(wèn),default只能同一包內(nèi)訪問(wèn),prvate只能同一類。
10.java的基本類型有哪些?String是基本類型嗎
Java中的基本數(shù)據(jù)類型只有8個(gè):byte、short、int、long、float、double、char、boolean;String是一個(gè)對(duì)象,不是基本類型。
11.int和Integer有什么區(qū)別,為什么要使用包裝類?
答:為了能夠?qū)⑦@些基本數(shù)據(jù)類型當(dāng)成對(duì)象操作,Java為每一個(gè)基本數(shù)據(jù)類型都引入了對(duì)應(yīng)的包裝類型,比如int的包裝類就是Integer,Java 為每個(gè)原始類型提供了包裝類型:
- 原始類型: boolean,char,byte,short,int,long,float,double
- 包裝類型:Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Double
12.抽象類(abstract class)和接口(interface)有什么區(qū)別?
1)、抽象類和接口都不能夠?qū)嵗?、不能有?gòu)造方法
2)、接口用interface來(lái)修飾
3)、類能實(shí)現(xiàn)一個(gè)或多個(gè)接口,但只能繼承一個(gè)抽象類
4)、接口里的方法只能是抽象方法、類方法或者默認(rèn)方法,接口里的方法不能有方法實(shí)現(xiàn),但類方法、默認(rèn)方法都必須要實(shí)現(xiàn)。
5)、用抽象類是為了重用。減少編碼量,降低耦合性。
13.面向?qū)ο蟮娜齻€(gè)特征是什么?什么是 封裝、繼承、多態(tài)?
答:面向?qū)ο蟮娜齻€(gè)基本特征:封裝、繼承、多態(tài)
1)、封裝(英語(yǔ):Encapsulation)是指,一種將抽象性函式接口的實(shí)現(xiàn)細(xì)節(jié)部份包裝、隱藏起來(lái)的方法。封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問(wèn)。
2)、繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等,繼承可以理解為一個(gè)對(duì)象從另一個(gè)對(duì)象獲取屬性的過(guò)程。
3)、多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。多態(tài)性是對(duì)象多種表現(xiàn)形式的體現(xiàn)。比如我們說(shuō)"寵物"這個(gè)對(duì)象,它就有很多不同的表達(dá)或?qū)崿F(xiàn),比如有小貓、小狗、蜥蜴等等。那么我到寵物店說(shuō)"請(qǐng)給我一只寵物",服務(wù)員給我小貓、小狗或者蜥蜴都可以,我們就說(shuō)"寵物"這個(gè)對(duì)象就具備多態(tài)性。
14.列出一些你常見(jiàn)的運(yùn)行時(shí)異常?
答:- ClassNotFoundException(類找不到異常)
- ClassCastException (類轉(zhuǎn)換異常)
- IllegalArgumentException (非法參數(shù)異常)
- IndexOutOfBoundsException (下標(biāo)越界異常)
- NullPointerException (空指針異常)
- SecurityException (安全異常)
15.Java容器有哪些?Collection、Collections、List、Set、Map的區(qū)別?
答:Collection接口和Map接口,List和Set繼承了Collection接口,Collections是個(gè)一個(gè)工具類,提供了一系列的靜態(tài)方法來(lái)輔助容器操作,這些方法包括對(duì)容器的搜索、排序、線程安全化等等。
1)、List是有序集合,允許重復(fù),實(shí)現(xiàn)List接口的有ArrayList、LinkedList、Vector,其中ArrayList便于查詢、便于隨機(jī)訪問(wèn),而LinkedList是鏈表,便于插入和刪除的操作,Vector中的方法由于添加了synchronized修飾,因此Vector是線程安全的容器,但性能上較ArrayList差,因此已經(jīng)是Java中的遺留容器。
2)而Set是無(wú)序集合、不允許重復(fù);Set的實(shí)現(xiàn)類有EnumSet、SortedSet、HashSet
,其中HashSet查取、查找性能優(yōu)異,其子類是LinkedHashSet,通過(guò)鏈表維護(hù)的內(nèi)部順序和通過(guò)元素的添加順序來(lái)訪問(wèn)集合里的元素,使用鏈表記錄集合的添加順序;TreeSet是SortedSet的子類,采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ)集合元素,支持自然排序和定制排序,是一個(gè)有序的集合。
備注:Hashtable、Dictionary、BitSet、Stack、Properties都是遺留容器),已經(jīng)不推薦使用。
3)、Map接口鍵值對(duì)(key-value pair)映射 Map 集合類用于存儲(chǔ)元素對(duì)(稱作"鍵"和"值"),其中每個(gè)鍵映射到一個(gè)值。
16.hashMap原理,java8做的改變
答:從結(jié)構(gòu)實(shí)現(xiàn)來(lái)講,HashMap是數(shù)組+鏈表+紅黑樹(shù)(JDK1.8增加了紅黑樹(shù)部分)實(shí)現(xiàn)的。HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。HashMap非線程安全。ConcurrentHashMap線程安全。解決碰撞:當(dāng)出現(xiàn)沖突時(shí),運(yùn)用拉鏈法,將關(guān)鍵詞為同義詞的結(jié)點(diǎn)鏈接在一個(gè)單鏈表中,散列表長(zhǎng)m,則定義一個(gè)由m個(gè)頭指針組成的指針數(shù)組T,地址為i的結(jié)點(diǎn)插入以T(i)為頭指針的單鏈表中。Java8中,沖突的元素超過(guò)限制(8),用紅黑樹(shù)替換鏈表。
17.HashMap和Hashtable的區(qū)別。
答:HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
1)、HashMap允許空的鍵值對(duì), 但最多只有一個(gè)空對(duì)象,而HashTable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。
2)、 Hashtable繼承自Dictionary類,而HashMap繼承自abstractMap
3)、最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步
HashTable同步,而HashMap非同步,效率上比HashTable要高。
4)、Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。
18.常用數(shù)據(jù)結(jié)構(gòu)。
答:集合,線性結(jié)構(gòu)(數(shù)組,隊(duì)列,鏈表和棧),樹(shù)形結(jié)構(gòu),圖狀結(jié)構(gòu)。
19.Comparator 與Comparable 有什么不同?
答:Comparable 接口用于定義對(duì)象的自然順序,是排序接口,而 comparator 通常用于定義用戶定制的順序,是比較接口。
20.Java 中堆和棧有什么區(qū)別?
答:JVM 中堆和棧屬于不同的內(nèi)存區(qū)域,使用目的也不同。棧常用于保存方法幀和局部變量,而對(duì)象總是在堆上分配。棧通常都比堆小,也不會(huì)在多個(gè)線程之間共享,而堆被整個(gè) JVM 的所有線程共享。
21.JVM分為哪些區(qū),每一個(gè)區(qū)是干嘛的?
1)、方法區(qū)(method):被所有的線程共享。方法區(qū)包含所有的類信息和靜態(tài)變量。
2)、堆(heap):被所有的線程共享,存放對(duì)象實(shí)例以及數(shù)組,Java堆是GC的主要區(qū)域。
3)、棧(stack):每個(gè)線程包含一個(gè)棧區(qū),棧中保存一些局部變量等。
4)、程序計(jì)數(shù)器:是當(dāng)前線程執(zhí)行的字節(jié)碼的行指示器。
22.解釋堆空間和GC是什么?
答:Java 進(jìn)程的時(shí)候,會(huì)為它分配內(nèi)存。內(nèi)存的一部分用于創(chuàng)建堆空間,當(dāng)程序中創(chuàng)建對(duì)象的時(shí)候,就從對(duì)空間中分配內(nèi)存。GC 是 JVM 內(nèi)部的一個(gè)進(jìn)程,回收無(wú)效對(duì)象的內(nèi)存用于將來(lái)的分配。
到此,關(guān)于“Java的基礎(chǔ)面試題有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。