前言
大白話講面試題,每天更新三題,提倡每日積累而不是臨陣磨槍响逢,我的目的不是為了背題望蜡,而是通過這種方式來更好的鞏固自身所掌握的知識(shí)唤崭。
題目的星星代表難度等級(jí),五星為滿脖律,并且我會(huì)列出需要掌握的前置知識(shí)谢肾。
大家一起,沖鴨小泉!
Java 面向?qū)ο笥心男┨卣鳎?
目的:了解你的基礎(chǔ)芦疏,有些人干了三年都有可能答不好或答不出這個(gè)問題。
回答這題你還需要理解:什么是面向?qū)ο笪㈡ⅲ裁词穷愃彳睿裁词菍?duì)象,他們之間的關(guān)系柒桑。
- 封裝
- 繼承
- 多態(tài)
封裝隱藏了類的內(nèi)部實(shí)現(xiàn)機(jī)制弊决,可以在不影響使用的情況下改變類的內(nèi)部結(jié)構(gòu),同時(shí)也保護(hù)了數(shù)據(jù)魁淳。對(duì)外界來說飘诗,它的內(nèi)部細(xì)節(jié)是隱藏的,暴露給外界的只是它的訪方法界逛。
對(duì)于一個(gè)類來說昆稿,封裝了自己的屬性和方法,想要訪問屬性的值息拜,只能通過事先寫好的方法去訪問溉潭,可以通過控制方法的邏輯來限制對(duì)屬性的不合理操作;同時(shí)少欺,方法的封裝可以讓調(diào)用者不必關(guān)心方法的內(nèi)部實(shí)現(xiàn)邏輯喳瓣,便于使用便于修改。
繼承是從已有類中派生出新的類赞别,新的類繼承了已有類的屬性和方法畏陕,并且可以擴(kuò)展新的能力。
派生出來的類叫子類(或派生類)仿滔,原有類叫父類(或基類)惠毁;比如經(jīng)典的 Animal 和 Cat犹芹,Dog,由 Animal 類派生出貓和狗鞠绰,他們有共同的特征是跑跳叫腰埂,但狗可以擴(kuò)展自己的動(dòng)作,比如吃屎……
多態(tài)是指兩個(gè)類由繼承關(guān)系蜈膨,存在有方法的重寫屿笼,故而可以在調(diào)用時(shí)有父類引用指向子類對(duì)象。比如 Animal animal = new Dog丈挟。
ArrayList 和 LinkedList 之間有什么區(qū)別刁卜??
目的:考察數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),以及對(duì)基礎(chǔ)集合有沒有比較深入的了解曙咽,這個(gè)題目是一個(gè)很經(jīng)典的對(duì)比蛔趴。
回答這題你還需要理解:數(shù)組和鏈表,他們的特點(diǎn)例朱、特性孝情、原理等。
ArrayList 和 LinkedList 都實(shí)現(xiàn)了 List 接口洒嗤,他們之間有以下的不同點(diǎn):
- 底層數(shù)據(jù)結(jié)構(gòu)上:前者底層使用了數(shù)組箫荡;后者使用了鏈表,因此后者所占用的內(nèi)存空間要更大一些渔隶,因?yàn)橐鎯?chǔ)前后節(jié)點(diǎn)的位置羔挡。
- 效率上:前者使用索引訪問數(shù)據(jù),取數(shù)賊快间唉,但插入和刪除需要移動(dòng)后面的數(shù)據(jù)绞灼,效率較慢;后者由于鏈表的特性呈野,插入和刪除特別快低矮,但查詢需要從頭開始遍歷,效率較慢被冒。
線程安全的集合類都有哪些军掂????
目的:考察多線程方面的基礎(chǔ),往往以這個(gè)問題為入口昨悼,越問越深
回答這題你還需要理解:關(guān)鍵字 synchronized蝗锥、volatile,什么是 CAS(容易被追問)率触。
第一代線程安全集合類:
- Vector(Since: JDK1.0)
- Hashtable(Since: JDK1.0)
底層使用 synchronized
關(guān)鍵字來保障線程安全玛追,效率低下。
第二代集合類:
- ArrayList(Since: JDK1.2)
- HashMap(Since: JDK1.2)
那如果需要線程安全怎么辦呢闲延?
在寫這兩個(gè)集合類的時(shí)候痊剖,作者還寫了一個(gè) Collections
集合工具類,比如 Collections.synchronizedListCollections(List<T> list)
就可以創(chuàng)建一個(gè)線程安全的 List 對(duì)象垒玲,底層任然使用的是關(guān)鍵字synchronized
陆馁,但由于鎖的是方法,性能上有一定提升合愈。
第三代線程安全集合類:
從 JDK1.5 開始叮贩,引入了包 java.util.concurrent.*
,JUC 中多數(shù)類是通過 volatile關(guān)鍵字和 CAS 來實(shí)現(xiàn)佛析,線程安全且高效益老。
在這個(gè)包下的所有集合類都是線程安全的,比如常用的 ConcurrentHashMap
寸莫。
引用
在這里我會(huì)放上所有我參考的資料鏈接