Java:每天三道大白話(huà)面試題(001)

前言

大白話(huà)講面試題,每天更新三題,提倡每日積累而不是臨陣磨槍?zhuān)业哪康牟皇菫榱吮愁},而是通過(guò)這種方式來(lái)更好的鞏固自身所掌握的知識(shí)。

題目的星星代表難度等級(jí),五星為滿(mǎn),并且我會(huì)列出需要掌握的前置知識(shí)。

大家一起,沖鴨!

Java 面向?qū)ο笥心男┨卣鳎?

目的:了解你的基礎(chǔ),有些人干了三年都有可能答不好或答不出這個(gè)問(wèn)題。

回答這題你還需要理解:什么是面向?qū)ο?,什么是?lèi),什么是對(duì)象,他們之間的關(guān)系。

  • 封裝
  • 繼承
  • 多態(tài)

封裝隱藏了類(lèi)的內(nèi)部實(shí)現(xiàn)機(jī)制,可以在不影響使用的情況下改變類(lèi)的內(nèi)部結(jié)構(gòu),同時(shí)也保護(hù)了數(shù)據(jù)。對(duì)外界來(lái)說(shuō),它的內(nèi)部細(xì)節(jié)是隱藏的,暴露給外界的只是它的訪(fǎng)方法。

對(duì)于一個(gè)類(lèi)來(lái)說(shuō),封裝了自己的屬性和方法,想要訪(fǎng)問(wèn)屬性的值,只能通過(guò)事先寫(xiě)好的方法去訪(fǎng)問(wèn),可以通過(guò)控制方法的邏輯來(lái)限制對(duì)屬性的不合理操作;同時(shí),方法的封裝可以讓調(diào)用者不必關(guān)心方法的內(nèi)部實(shí)現(xiàn)邏輯,便于使用便于修改。

繼承是從已有類(lèi)中派生出新的類(lèi),新的類(lèi)繼承了已有類(lèi)的屬性和方法,并且可以擴(kuò)展新的能力。

派生出來(lái)的類(lèi)叫子類(lèi)(或派生類(lèi)),原有類(lèi)叫父類(lèi)(或基類(lèi));比如經(jīng)典的 Animal 和 Cat,Dog,由 Animal 類(lèi)派生出貓和狗,他們有共同的特征是跑跳叫,但狗可以擴(kuò)展自己的動(dòng)作,比如吃屎……

多態(tài)是指兩個(gè)類(lèi)由繼承關(guān)系,存在有方法的重寫(xiě),故而可以在調(diào)用時(shí)有父類(lèi)引用指向子類(lèi)對(duì)象。比如 Animal animal = new Dog。

ArrayList 和 LinkedList 之間有什么區(qū)別??

目的:考察數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),以及對(duì)基礎(chǔ)集合有沒(méi)有比較深入的了解,這個(gè)題目是一個(gè)很經(jīng)典的對(duì)比。

回答這題你還需要理解:數(shù)組和鏈表,他們的特點(diǎn)、特性、原理等。

ArrayList 和 LinkedList 都實(shí)現(xiàn)了 List 接口,他們之間有以下的不同點(diǎn):

  1. 底層數(shù)據(jù)結(jié)構(gòu)上:前者底層使用了數(shù)組;后者使用了鏈表,因此后者所占用的內(nèi)存空間要更大一些,因?yàn)橐鎯?chǔ)前后節(jié)點(diǎn)的位置。
  2. 效率上:前者使用索引訪(fǎng)問(wèn)數(shù)據(jù),取數(shù)賊快,但插入和刪除需要移動(dòng)后面的數(shù)據(jù),效率較慢;后者由于鏈表的特性,插入和刪除特別快,但查詢(xún)需要從頭開(kāi)始遍歷,效率較慢。

線(xiàn)程安全的集合類(lèi)都有哪些????

目的:考察多線(xiàn)程方面的基礎(chǔ),往往以這個(gè)問(wèn)題為入口,越問(wèn)越深

回答這題你還需要理解:關(guān)鍵字 synchronized、volatile,什么是 CAS(容易被追問(wèn))。

第一代線(xiàn)程安全集合類(lèi):

  • Vector(Since: JDK1.0)
  • Hashtable(Since: JDK1.0)

底層使用 synchronized 關(guān)鍵字來(lái)保障線(xiàn)程安全,效率低下。

第二代集合類(lèi):

  • ArrayList(Since: JDK1.2)
  • HashMap(Since: JDK1.2)

那如果需要線(xiàn)程安全怎么辦呢?

在寫(xiě)這兩個(gè)集合類(lèi)的時(shí)候,作者還寫(xiě)了一個(gè) Collections 集合工具類(lèi),比如 Collections.synchronizedListCollections(List<T> list) 就可以創(chuàng)建一個(gè)線(xiàn)程安全的 List 對(duì)象,底層任然使用的是關(guān)鍵字synchronized ,但由于鎖的是方法,性能上有一定提升。

第三代線(xiàn)程安全集合類(lèi):
從 JDK1.5 開(kāi)始,引入了包 java.util.concurrent.* ,JUC 中多數(shù)類(lèi)是通過(guò) volatile關(guān)鍵字和 CAS 來(lái)實(shí)現(xiàn),線(xiàn)程安全且高效。
在這個(gè)包下的所有集合類(lèi)都是線(xiàn)程安全的,比如常用的 ConcurrentHashMap

引用

在這里我會(huì)放上所有我參考的資料鏈接

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

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

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