Java面試之Java基礎(chǔ)上冊(含答案)

1. JAVA中的幾種基本數(shù)據(jù)類型是什么庞钢,各自占用多少字節(jié)爆存。

int? ? ? ? 32bit? short? 16bit

long? ? 64bit? byte? ? 8bit

char? ? 16bit? float? 32bit

double? 64bit? boolean 1bit

============================================================

2. String類能被繼承嗎肚菠,為什么?

public final class String

? ? implements java.io.Serializable, Comparable<String>, CharSequence

String 被final修飾了罩旋,所有不能被繼承无虚。

1.final修飾的對象不能被修改;

2.final修飾的類不能被繼承晤碘;

3.final修飾的方法不能被重寫褂微;

============================================================

3. String,Stringbuffer园爷,StringBuilder的區(qū)別宠蚂。

1.可變與不可變

  String類中使用字符數(shù)組保存字符串,如下就是童社,因為有“final”修飾符求厕,所以可以知道string對象是不可變的。

    private final char value[];

  StringBuilder與StringBuffer都繼承自AbstractStringBuilder類扰楼,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串呀癣,如下就是,可知這兩種對象都是可變的灭抑。

    char[] value;

2.是否多線程安全

  String中的對象是不可變的十艾,也就可以理解為常量,顯然線程安全腾节。

  AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作荤牍,如expandCapacity案腺、append、insert康吵、indexOf等公共方法劈榨。

  StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以是線程安全的晦嵌⊥保看如下源碼

最后,如果程序不是多線程的惭载,那么使用StringBuilder效率高于StringBuffer旱函。

============================================================

4 . ArrayList和LinkedList有什么區(qū)別。

ArrayList和Vector使用了數(shù)組的實現(xiàn)描滔,

LinkedList使用了循環(huán)雙向鏈表數(shù)據(jù)結(jié)構(gòu)棒妨。 場景使用不同

對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的含长。對ArrayList而言券腔,主要是在內(nèi)部數(shù)組中增加一項伏穆,指向所添加的元素,偶爾可能會導致對數(shù)組重新進行分配纷纫;而對LinkedList而言枕扫,這個開銷是統(tǒng)一的,分配一個內(nèi)部Entry對象辱魁。

2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩余的元素都會被移動铡原;而在LinkedList的中間插入或刪除一個元素的開銷是固定的。

3.LinkedList不支持高效的隨機元素訪問商叹。

4.ArrayList的空間浪費主要體現(xiàn)在在list列表的結(jié)尾預留一定的容量空間燕刻,而LinkedList的空間花費則體現(xiàn)在它的每一個元素都需要消耗相當?shù)目臻g

? ? ? 可以這樣說:當操作是在一列數(shù)據(jù)的后面添加數(shù)據(jù)而不是在前面或中間,并且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的性能;當你的操作是在一列數(shù)據(jù)的前面或中間添加或刪除數(shù)據(jù),并且按照順序訪問其中的元素時,就應(yīng)該使用LinkedList了剖笙。

============================================================

5. 講講類的實例化順序卵洗,比如父類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù)弥咪,字段过蹂,子類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù)聚至,字段酷勺,當new的時候,他們的執(zhí)行順序扳躬。

類的實例化順序:先靜態(tài)再父子

父類靜態(tài)數(shù)據(jù)->子類靜態(tài)數(shù)據(jù)->父類字段->子類字段->父類構(gòu)造函數(shù)->子類構(gòu)造函數(shù)

============================================================

6. Map區(qū)別

用過哪些Map類脆诉,都有什么區(qū)別,HashMap是線程安全的嗎,并發(fā)下使用的Map是什么贷币,他們內(nèi)部原理分別是什么击胜,比如存儲方式,hashcode役纹,擴容偶摔,默認容量等。

最常用的Map實現(xiàn)類有:HashMap促脉,ConcurrentHashMap(jdk1.8)辰斋,LinkedHashMap,TreeMap,HashTable瘸味;

其中最頻繁的是HashMap和ConcurrentHashMap宫仗,他們的主要區(qū)別是HashMap是非線程安全的。ConcurrentHashMap是線程安全的硫戈。

并發(fā)下可以使用ConcurrentHashMap和HashTable锰什,他們的主要區(qū)別是:

1.ConcurrentHashMap的hash計算公式:(key.hascode()^ (key.hascode()>>> 16)) & 0x7FFFFFFF

? HashTable的hash計算公式:key.hascode()& 0x7FFFFFFF

2.HashTable存儲方式都是鏈表+數(shù)組,數(shù)組里面放的是當前hash的第一個數(shù)據(jù),鏈表里面放的是hash沖突的數(shù)據(jù)

ConcurrentHashMap是數(shù)組+鏈表+紅黑樹

3.默認容量都是16汁胆,負載因子是0.75梭姓。就是當hashmap填充了75%的busket是就會擴容,最小的可能性是(16*0.75)嫩码,一般為原內(nèi)存的2倍

4 .線程安全的保證:HashTable是在每個操作方法上面加了synchronized來達到線程安全誉尖,ConcurrentHashMap線程是使用CAS(compore and swap)來保證線程安全的

============================================================

7. JAVA8的ConcurrentHashMap為什么放棄了分段鎖,有什么問題嗎铸题,如果你來設(shè)計铡恕,你如何設(shè)計。

jdk8 放棄了分段鎖而是用了Node鎖丢间,減低鎖的粒度探熔,提高性能,并使用CAS操作來確保Node的一些操作的原子性烘挫,取代了鎖诀艰。

但是ConcurrentHashMap的一些操作使用了synchronized鎖,而不是ReentrantLock,雖然說jdk8的synchronized的性能進行了優(yōu)化饮六,但是我覺得還是使用ReentrantLock鎖能更多的提高性能

============================================================

8.? 有沒順序的 Map 實現(xiàn)類其垄,如果有,他們是怎么保證有序的 卤橄。 順序的 Map 實現(xiàn)類:LinkedHashMap,TreeMap

LinkedHashMap 是基于元素進入集合的順序或者被訪問的先后順序排序绿满,TreeMap 則是基于元素的固有順序 (由 Comparator 或者 Comparable 確定)。

============================================================

9. 抽象類和接口的區(qū)別窟扑,類可以繼承多個類么喇颁,接口可以繼承多個接口么,類可以實現(xiàn)多個接口么。抽象類和接口的區(qū)別:

1.抽象類可以有自己的實現(xiàn)方法辜膝,接口在jdk8以后也可以有自己的實現(xiàn)方法(default)

2.抽象類的抽象方法是由非抽象類的子類實現(xiàn)无牵,接口的抽象方法有接口的實現(xiàn)類實現(xiàn)

3.接口不能有私有的方法跟對象,抽象類可以有自己的私有的方法跟對象

類不可以繼承多個類厂抖,接口可以繼承多個接口,類可以實現(xiàn)多個接口

============================================================

10. 繼承和聚合的區(qū)別在哪克懊。

繼承:指的是一個類(稱為子類忱辅、子接口)繼承另外的一個類(稱為父類、父接口)的功能谭溉,并可以增加它自己的新功能的能力墙懂,繼承是類與類或者接口與接口之間最常見的關(guān)系;在Java中此類關(guān)系通過關(guān)鍵字extends明確標識扮念,在設(shè)計時一般沒有爭議性损搬;

聚合:聚合是關(guān)聯(lián)關(guān)系的一種特例,他體現(xiàn)的是整體與部分、擁有的關(guān)系巧勤,即has-a的關(guān)系嵌灰,此時整體與部分之間是可分離的,他們可以具有各自的生命周期颅悉,部分可以屬于多個整體對象沽瞭,也可以為多個整體對象共享;比如計算機與CPU剩瓶、公司與員工的關(guān)系等驹溃;表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的延曙,只能從語義級別來區(qū)分豌鹤;

============================================================

11. 講講你理解的nio。他和bio的區(qū)別是啥枝缔,談?wù)剅eactor模型布疙。

BIO:同步阻塞式IO,服務(wù)器實現(xiàn)模式為一個連接一個線程魂仍,即客戶端有連接請求時服務(wù)器端就需要啟動一個線程進行處理拐辽,如果這個連接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善擦酌。

NIO:同步非阻塞式IO俱诸,服務(wù)器實現(xiàn)模式為一個請求一個線程,即客戶端發(fā)送的連接請求都會注冊到多路復用器上赊舶,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理睁搭。

reactor模型:反應(yīng)器模式(事件驅(qū)動模式):當一個主體發(fā)生改變時,所有的屬體都得到通知笼平,類似于觀察者模式园骆。

============================================================

12. 反射的原理,反射創(chuàng)建類實例的三種方式是什么寓调。

反射的原理:如果知道一個類的名稱/或者它的一個實例對象锌唾, 就能把這個類的所有方法和變量的信息(方法名,變量名夺英,方法晌涕,修飾符,類型痛悯,方法參數(shù)等等所有信息)找出來余黎。

反射創(chuàng)建類實例的三種方式:

1.Class.forName("com.A");

2.new A().getClass();

3.A.class;

============================================================

13. 反射中,Class.forName和ClassLoader區(qū)別载萌。

class.forName()除了將類的.class文件加載到j(luò)vm中之外惧财,還會對類進行解釋巡扇,執(zhí)行類中的static塊。

classLoader只干一件事情垮衷,就是將.class文件加載到j(luò)vm中厅翔,不會執(zhí)行static中的內(nèi)容,只有在newInstance才會去執(zhí)行static塊。

============================================================

14.? 描述動態(tài)代理的幾種實現(xiàn)方式帘靡,分別說出相應(yīng)的優(yōu)缺點知给。

動態(tài)代理有兩種實現(xiàn)方式,分別是:jdk動態(tài)代理和cglib動態(tài)代理

jdk動態(tài)代理的前提是目標類必須實現(xiàn)一個接口描姚,代理對象跟目標類實現(xiàn)一個接口涩赢,從而避過虛擬機的校驗。

cglib動態(tài)代理是繼承并重寫目標類轩勘,所以目標類和方法不能被聲明成final筒扒。

============================================================

15. 動態(tài)代理與cglib實現(xiàn)的區(qū)別。

動態(tài)代理有兩種實現(xiàn)方式绊寻,分別是:jdk動態(tài)代理和cglib動態(tài)代理

jdk動態(tài)代理的前提是目標類必須實現(xiàn)一個接口花墩,代理對象跟目標類實現(xiàn)一個接口,從而避過虛擬機的校驗澄步。

cglib動態(tài)代理是繼承并重寫目標類冰蘑,所以目標類和方法不能被聲明成final。

小編分類整理了許多java進階學習材料和BAT面試題村缸,需要資料的請轉(zhuǎn)發(fā)此文章后再私聊小編回復【java】就能領(lǐng)取2019年java進階學習資料和BAT面試題以及《Effective Java》(第3版)電子版書籍祠肥。也可以加群:712263501領(lǐng)取海量學習資料進行學習。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梯皿,一起剝皮案震驚了整個濱河市仇箱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌东羹,老刑警劉巖剂桥,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異属提,居然都是意外死亡权逗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門冤议,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旬迹,“玉大人,你說我怎么就攤上這事求类。” “怎么了屹耐?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵尸疆,是天一觀的道長椿猎。 經(jīng)常有香客問我,道長寿弱,這世上最難降的妖魔是什么犯眠? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮症革,結(jié)果婚禮上筐咧,老公的妹妹穿的比我還像新娘。我一直安慰自己噪矛,他們只是感情好量蕊,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艇挨,像睡著了一般残炮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缩滨,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天势就,我揣著相機與錄音,去河邊找鬼脉漏。 笑死苞冯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的侧巨。 我是一名探鬼主播舅锄,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刃泡!你這毒婦竟也來了巧娱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤烘贴,失蹤者是張志新(化名)和其女友劉穎禁添,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桨踪,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡老翘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了锻离。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铺峭。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汽纠,靈堂內(nèi)的尸體忽然破棺而出卫键,到底是詐尸還是另有隱情,我是刑警寧澤虱朵,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布莉炉,位于F島的核電站钓账,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏絮宁。R本人自食惡果不足惜梆暮,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绍昂。 院中可真熱鬧啦粹,春花似錦、人聲如沸窘游。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽张峰。三九已至泪蔫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喘批,已是汗流浹背撩荣。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饶深,地道東北人餐曹。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像敌厘,于是被迫代替她去往敵國和親台猴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容