Java 基礎(chǔ)面試題

java基礎(chǔ)面試題.jpg

Java 基礎(chǔ)面試題 , 還不會(huì)浴麻, 回家種田吧 5梦省!软免!
注:本文轉(zhuǎn)載于:CodeCow · 程序牛 的個(gè)人博客:http://www.codecow.cn/

一宫纬、Java 的基礎(chǔ)數(shù)據(jù)類型有幾種 ?都是啥 膏萧?`

8 種
byte漓骚、short、int榛泛、long蝌蹂、float、double曹锨、char孤个、boolean

二、String是最基本的數(shù)據(jù)類型嗎 ? 是否可以繼承String類 ?

不是 是引用數(shù)據(jù)類型
java.lang.String類是final類型的沛简,因此不可以繼承這個(gè)類齐鲤、不能修改這個(gè)類

三、①:short s1 = 1; s1 = s1 + 1;有錯(cuò)嗎 ? ②:short s2 = 1; s2 += 1;有錯(cuò)嗎 ?

①:有錯(cuò)(s1+1運(yùn)算結(jié)果是int型椒楣,需要強(qiáng)制轉(zhuǎn)換類型)佳遂、 ②:正確

分析①:
s1 = s1 + 1 做運(yùn)算的時(shí)候,1 是 int 類型撒顿,s1 會(huì)被提升為int類型
s1+1 后的結(jié)果是 int類型荚板,將結(jié)果在賦值會(huì)short類型時(shí)發(fā)生錯(cuò)誤
short 內(nèi)存 2 個(gè)字節(jié)凤壁,int 類型 4 個(gè)字節(jié)
必須將int強(qiáng)制轉(zhuǎn)成short才能完成賦值
分析②:
+=是一個(gè)運(yùn)算符,只運(yùn)算一次跪另,并帶有強(qiáng)制轉(zhuǎn)換的特點(diǎn)
也就是說 s2 += 1 就是 s2 = (short)(s2 + 1) 拧抖,因此程序沒有問題編譯通過,運(yùn)行結(jié)果是2.

四免绿、String s = new String("CodeCow"); 創(chuàng)建了幾個(gè)String Object?

兩個(gè)

分析:
一個(gè)是 “xyz”唧席,一個(gè)是指向 “xyz” 的引用對(duì)象 s

五、int 和 Integer 有什么區(qū)別 ?

Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型淌哟,Integer是java為int提供的封裝類

擴(kuò)展:
Java為每個(gè)原始類型提供了封裝類迹卢。
原始類型 _ 封裝類
boolean _ Boolean
char _ Character
byte _ Byte
short _ Short
int _ Integer
long _ Long
float _ Float
double _ Double

六、String徒仓,StringBuffer 與 StringBuilder 的區(qū)別 ?

String類提供了數(shù)值不可改變的字符串(既:String的值是不可變的腐碱,每次對(duì)String的操作都會(huì)生成新的String對(duì)象)
StringBuffer 和StringBuilder 提供的字符串可以進(jìn)行修改(既:并且不產(chǎn)生新的未使用對(duì)象)
StringBuffer 之間的最大不同在于 StringBuilder 的方法是線程不安全的

擴(kuò)展:
由于 StringBuilder 是線程不安全的 相較于 StringBuffer 有速度優(yōu)勢(shì),所以多數(shù)情況下建議使用 StringBuilder 類掉弛。然而在應(yīng)用程序要求線程安全的情況下症见,則必須使用 StringBuffer 類。

七殃饿、被 final 修飾的 類谋作、方法、變量 有什么特點(diǎn)?

final 修飾的類乎芳,不能被繼承
final 修飾的方法遵蚜,不能被重寫
final 修飾的變量,不能被重新賦值

八秒咐、Overload 和 Override 的區(qū)別谬晕。Overloaded的方法是否可以改變返回值的類型?

重寫 (Overriding) :如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫
重載(Overloading):如果在一個(gè)類中定義了多個(gè)同名的方法携取,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型攒钳,則稱為方法的重載
Overloaded的方法是可以改變返回值的類型。

擴(kuò)展:
方法的重寫 Overriding 和 重載 Overloading 是Java多態(tài)性的不同表現(xiàn)
重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn)雷滋;
重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)不撑。

九、final, finally, finalize的區(qū)別 ?

final 用于聲明類晤斩,方法和變量焕檬,分別表示類不可繼承,方法不可重寫澳泵,變量不可重新賦值实愚。
finally 是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行兔辅。
finalize 是Object 類的一個(gè)方法腊敲,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收维苔,例如關(guān)閉文件等碰辅。

擴(kuò)展:
和 finally 藕斷絲連 的問題 ===》 看下面 十九

十、Collection 和 Collections的區(qū)別 ?

Collection 是單例集合的頂層接口介时,繼承與他的接口主要有 Set 和 List.
Collections 是集合的工具類没宾,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索凌彬、排序、線程安全化等操作循衰。

十一铲敛、你所知道的集合類都有哪些?主要方法 羹蚣?

最常用的集合類是 List 和 Map原探。
List 的具體實(shí)現(xiàn)包括 ArrayList 、 Vector顽素、 LinkedList
Map 的具體實(shí)現(xiàn)包括 hashMap咽弦、hashTable、treeMap

十二胁出、List型型、Map、Set 三個(gè)接口全蝶,存取元素時(shí)闹蒜,各有什么特點(diǎn) ?

List 以特定次序來持有元素抑淫,可有重復(fù)元素绷落。
Set 無法擁有重復(fù)元素,內(nèi)部排序。
Map 保存key-value值始苇,value可多值砌烁。

總結(jié):
List ===> 有序、重復(fù)
Set ===> 無序催式、不重復(fù)

十三函喉、說說 ArrayList,Vector荣月, LinkedList 的存 儲(chǔ)性能 和 特性 管呵?

ArrayList 和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),所以索引(查詢)數(shù)據(jù)快 而 插入數(shù)據(jù)慢
Vector 由于使用了 synchronized 方法(線程安全)哺窄,通常性能上較ArrayList 差
而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ)捐下,按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可萌业,所以插入速度較快蔑担。

總結(jié):
ArrayList 和 Vector ====> 查詢數(shù)據(jù)快、增加和刪除數(shù)據(jù) 慢
LinkedList ====> 查詢數(shù)據(jù) 慢咽白、增加和刪除數(shù)據(jù) 快

十四、HashMap和Hashtable的區(qū)別 鸟缕?

HashMap 是非線程安全 晶框;Hashtable 是線程安全的排抬,因此,效率上可能低于HashMap 授段。
HashMap 允許將 null 作為一個(gè) entry 的 key 或者value蹲蒲,而Hashtable不允許

擴(kuò)展:
它兩最大的不同是,Hashtable的方法是Synchronize的侵贵,而HashMap不是届搁,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步窍育,而HashMap 就必須為之提供外同步卡睦。

十五、&和&&的區(qū)別 漱抓?

&是位運(yùn)算符表锻,表示按位與運(yùn)算,&&是邏輯運(yùn)算符乞娄,表示邏輯與(and)瞬逊。

十六、List, Set, Map是否繼承自 Collection 接口 仪或?

List确镊,Set 是
Map 不是

十七、數(shù)組 有沒有 length() 這個(gè)方法? String 有沒有 length() 這個(gè)方法 范删?

數(shù)組沒有l(wèi)ength()這個(gè)方法蕾域,有l(wèi)ength的屬性。
String有有l(wèi)ength()這個(gè)方法瓶逃。

十八束铭、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals() ? 它們有何區(qū)別 厢绝?

Set里的元素是不能重復(fù)的契沫,那么用iterator()方法來區(qū)分重復(fù)與否
equals()是判讀兩個(gè)Set是否相等。
equals()和==方法決定引用值是否指向同一對(duì)象equals()在類中被覆蓋昔汉,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話懈万,返回真值。

十九靶病、try {}里有一個(gè)return語句会通,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行娄周,在return前還是后 涕侈?

會(huì)執(zhí)行
在return前執(zhí)行。

擴(kuò)展:
和 finally 藕斷絲連 的問題 ===》 看上面 九

二十煤辨、error 和 exception 有什么區(qū)別 ?

error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題裳涛。比如說內(nèi)存溢出木张。不可能指望程序能處理這樣的情況。
exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題端三。也就是說舷礼,它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況郊闯。

二十一妻献、同步和異步有何異同,在什么情況下分別使用他們团赁?舉例說明 ?

如果數(shù)據(jù)將在線程間共享育拨。例如正在寫的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫過了然痊,那么這些數(shù)據(jù)就是共享數(shù)據(jù)至朗,必須進(jìn)行同步存取。
當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來執(zhí)行的方法剧浸,并且不希望讓程序等待方法的返回時(shí)锹引,就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率唆香。

二十一嫌变、 給我一個(gè)你最常見到的runtime exception ?

NullPointerException
IndexOutOfBoundsException
SecurityException
SystemException
词渤。奕锌。蒸播。祖今。。磷支。

二十二侯繁、 接口是否可繼承接口 ? 抽象類是否可實(shí)現(xiàn)(implements)接口 ? 抽象類是否可繼承實(shí)體類(concrete class) ?

接口可以繼承接口膝昆。
抽象類可以實(shí)現(xiàn)(implements)接口
抽象類是否可繼承實(shí)體類组贺,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)

二十三凸舵、 說說數(shù)據(jù)連接池的工作機(jī)制是什么 ?

服務(wù)器啟動(dòng)時(shí)會(huì)建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接失尖“⊙伲客戶端程序需要連接時(shí),池驅(qū)動(dòng)程序會(huì)返回一個(gè)未使用的池連接并將其表記為忙掀潮。
如果當(dāng)前沒有空閑連接菇夸,池驅(qū)動(dòng)程序就新建一定數(shù)量的連接,新建連接的數(shù)量有配置參數(shù)決定仪吧。當(dāng)使用的池連接調(diào)用完成后庄新,池驅(qū)動(dòng)程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接薯鼠。

二十四择诈、 abstract 的 method 是否可同時(shí)是static ? 是否可同時(shí)是 synchronized ?

都不能

二十五凡蚜、 構(gòu)造器Constructor是否可被override ?

構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding吭从,但可以被重載Overloading。

二十六恶迈、 兩個(gè)對(duì)象值相同(x.equals(y) == true)涩金,但卻可有不同的hash code,這句話對(duì)不對(duì) ?

不對(duì)暇仲,有相同的hash code步做。

二十七、 當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后奈附,其它線程是否可進(jìn)入此對(duì)象的其它方法 ?

不能
一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問全度。

二十八、 線程同步的方法有哪些 ?

wait():使一個(gè)線程處于等待狀態(tài)斥滤,并且釋放所持有的對(duì)象的lock将鸵。
sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法佑颇,調(diào)用此方法要捕捉InterruptedException異常顶掉。
notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候挑胸,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程痒筒,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)茬贵。
Allnotity():喚醒所有處入等待狀態(tài)的線程簿透,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)解藻。

二十九老充、 多線程有幾種實(shí)現(xiàn)方法,都是什么 ?

多線程有兩種實(shí)現(xiàn)方法
分別是繼承Thread類與實(shí)現(xiàn)Runnable接口

三十、 同步有幾種實(shí)現(xiàn)方法,都是什么 ?

同步的實(shí)現(xiàn)方面有兩種
分別是synchronized , wait與notify

三十一舆逃、寫一個(gè)Singleton出來 ?

public class MySingleton {
    private MySingleton(){}
    private static MySingleton INSTANCE = null;
    public static synchronized MySingleton getInstance() {
        if (null == INSTANCE){
            INSTANCE = new MySingleton();
            }
            return INSTANCE; 
        }
}

三十二蚂维、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系 ?

線程指在程序執(zhí)行過程中路狮,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位虫啥,每個(gè)程序至少都有一個(gè)線程,也就是程序本身奄妨。
Java中的線程有四種狀態(tài)分別是:運(yùn)行涂籽、就緒、掛起砸抛、結(jié)束评雌。

三十三树枫、synchronized 和 java.util.concurrent.locks.Lock的異同 ?

主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能
主要不同點(diǎn):Lock有比synchronized更精確的線程語義和更好的性能。synchronized會(huì)自動(dòng)釋放鎖景东,而Lock一定要求程序員手工釋放砂轻,并且必須在finally從句中釋放。

三十四斤吐、 寫個(gè)冒泡排序 ?

public static void bubbleSort(int arr[]) {
    for(int i =0 ; i<arr.length-1 ; i++) {
        for(int j=0 ; j<arr.length-1-i ; j++) {
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

最后:

不足之處搔涝,還望小伙伴多多諒解;
有錯(cuò)之處和措,還望小伙伴指出庄呈,小編會(huì)盡快改正
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市派阱,隨后出現(xiàn)的幾起案子诬留,更是在濱河造成了極大的恐慌,老刑警劉巖贫母,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件文兑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡颁独,警方通過查閱死者的電腦和手機(jī)彩届,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來誓酒,“玉大人樟蠕,你說我怎么就攤上這事】扛蹋” “怎么了寨辩?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)歼冰。 經(jīng)常有香客問我靡狞,道長(zhǎng),這世上最難降的妖魔是什么隔嫡? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任甸怕,我火速辦了婚禮,結(jié)果婚禮上腮恩,老公的妹妹穿的比我還像新娘梢杭。我一直安慰自己,他們只是感情好秸滴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布武契。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪咒唆。 梳的紋絲不亂的頭發(fā)上届垫,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音全释,去河邊找鬼装处。 笑死,一個(gè)胖子當(dāng)著我的面吹牛浸船,可吹牛的內(nèi)容都是我干的符衔。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼糟袁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了躺盛?” 一聲冷哼從身側(cè)響起项戴,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎槽惫,沒想到半個(gè)月后周叮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡界斜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年仿耽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片各薇。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡项贺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峭判,到底是詐尸還是另有隱情开缎,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布林螃,位于F島的核電站奕删,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疗认。R本人自食惡果不足惜完残,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望横漏。 院中可真熱鬧谨设,春花似錦、人聲如沸绊茧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鹏秋,卻和暖如春尊蚁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侣夷。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工横朋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人百拓。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓琴锭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親衙传。 傳聞我的和親對(duì)象是個(gè)殘疾皇子决帖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348