1. 程式人生 > >JAVA面試——基礎部分常見問題簡答

JAVA面試——基礎部分常見問題簡答

一、面向物件的四大基本特徵

繼承

子類可以繼承父類的所有屬性和方法,例如,兒子繼承父親的財產。

封裝

將零散的屬性封裝成一個物件,將物件歸納為一個類

多型

每個種群有不同的表現形式,比如People people = new Student()/new Teacher();多型的實現也依賴於重寫過載。

抽象

不能例項化的類,但可以用子類表達 比如People ,人類。

二、談談包裝類、基本資料型別、拆箱裝箱

包裝類

基本資料型別不具有物件的特徵,在實際開發中,經常需要把基本資料型別轉為物件操作,因此有了包裝類。

基本資料型別

基本資料型別的變數,儲存的就是資料本身的值,而引用型別的變數,儲存的則是資料的地址,這個地址指向了資料的值。

拆箱裝箱

裝箱是值型別轉成object引用型別,拆箱是已被裝箱的引用型別轉成原來的值型別。

Integer i=1 自動裝箱; int j=i 自動拆箱

三、“==”和“equals”的區別

一般情況下,用==比較值(基本資料型別直接存值,因此比較值。引用物件存的是記憶體地址,也是一種值比較)是否相同。字串用equals比較值是否相同。

在object類中,”equals” 和 “==”的功能是一樣的,都是比較記憶體地址,只不過大多數類都重寫了equals方法。

四、String、StringBuilder、StringBuffer有什麼區別

Sting是final型別的,每次賦值,都會在記憶體中開闢新的空間儲存,不適合多次賦值使用。

StingBuilder和StringBuffer可以多次使用,但StringBuilder的append方法添加了同步鎖,因此執行緒更安全,但效率更低。

五、講一下java中的集合

集合可以大致分為兩個介面 collection 和map介面,他們的儲存方式分別是 value 和key-value

1、其中collection下又分為 list 和set,兩者的區別是,list允許有重複的元素,而set不允許,這是依賴於set集合重寫hashcode和equals方法。

①list介面下又分ArrayList和Linkedlist,底層分別是使用陣列和連結串列。

ArrayList 查詢快,增刪慢,因為在記憶體中使用的是連續的記憶體地址,如果增刪會改變其他元素記憶體地址。

LinkedList 查詢慢,增刪快,因為在記憶體中使用的是非連續的記憶體地址,由某個元素指向上下元素的記憶體地址,查詢由頭部開始。增刪不會改變其他元素的記憶體地址。

②hashset 、Linkedhashset不能有重複元素, 其他大體等同List。此外hashset是無序集合,Linkedhashset是有序集合

2、map介面下有Hashmap 和Hashtable

Hashmap鍵值可以為null,執行緒不安全,但更高效

Hashtable鍵值不可為null,執行緒安全,但低效

ConcurrentHashmap涉及到執行緒併發庫,將既高效又安全。 HashTable容器使用synchronized來保證執行緒安全,但線上程競爭激烈的情況下HashTable的效率非常低下。而ConcurrentHashmap將資料分段儲存,每一段加一把鎖。

六、拷貝檔案用什麼流

位元組流

七、談談執行緒的實現方式

1、①通過繼承Thread類

這種方式的可擴充套件性不強,因為java只允許物件有一個父類。

②通過實現Runable介面

這種方式比較通用

2、怎麼啟動

Thread thread =new Thread(繼承了Thread類或實現了Runable介面的類)

thread.start();

注意:啟動執行緒使用start();而執行的方法是實現類中的run()方法

八、談談你對執行緒併發庫(執行緒池)的理解

Executor類提供了四種靜態方法用於建立執行緒池。

一般採用newFixedThreadPool (建立一個固定大小的執行緒池)

使用執行緒池的優點:1、不用每次都建立或銷燬,節約了資源。提高了效率

2、限定了執行緒的個數,不會因為執行緒過多而導致系統崩潰,提高了穩定性

九、談談常見的設計模式

設計模式就是指可以反覆使用由無數前人總結的解決特定問題的一種程式碼結構模式。

常見的有單例模式工廠模式代理模式·和包裝模式。

其中單例模式就是將構造私有化,然後在本類中建立一個例項,並提供一個暴露出去的方法獲取該例項。

單例模式又分飽漢模式、餓漢模式和雙重鎖模式。

1、飽漢模式在申明例項的時候會直接建立物件。這種模式更佔用資源,但效率更高。

2、餓漢模式只會在需要的時候建立它。這種模式節省資源,但需要上同步鎖,因此不支援多執行緒效率更低。

3、雙重鎖模式,只在第一次例項化時使用同步鎖,因此只有初始化載入的時候比較慢,其餘時候很快,是一種比較優秀的模式。

小弟才學疏淺,若有誤人子弟的地方還請各位大佬指出。