學(xué)習(xí)啦>創(chuàng)業(yè)指南>職場(chǎng)>面試題>

關(guān)于經(jīng)典JAVA面試題大全(2)

時(shí)間: 朝瑩801 分享

  抽象類可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。

  Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。

  Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。

  接口是絕對(duì)抽象的,不可以被實(shí)例化。抽象類也不可以被實(shí)例化,但是,如果它包含main方法的話是可以被調(diào)用的。

  也可以參考JDK8中抽象類和接口的區(qū)別

  10.什么是值傳遞和引用傳遞?

  對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是改變了對(duì)象副本,也不會(huì)影響源對(duì)象的值。

  對(duì)象被引用傳遞,意味著傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象所做的改變會(huì)反映到所有的對(duì)象上。

  Java線程

  11.進(jìn)程和線程的區(qū)別是什么?

  進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程。線程又叫做輕量級(jí)進(jìn)程。

  12.創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?

  有三種方式可以用來(lái)創(chuàng)建線程:

  繼承Thread類

  實(shí)現(xiàn)Runnable接口

  應(yīng)用程序可以使用Executor框架來(lái)創(chuàng)建線程池

  實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread類。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對(duì)象的情況下,這需要多繼承(而Java不支持多繼承),只能實(shí)現(xiàn)接口。同時(shí),線程池也是非常高效的,很容易實(shí)現(xiàn)和使用。

  13.概括的解釋下線程的幾種可用狀態(tài)。

  線程在執(zhí)行過(guò)程中,可以處于下面幾種狀態(tài):

  就緒(Runnable):線程準(zhǔn)備運(yùn)行,不一定立馬就能開(kāi)始執(zhí)行。

  運(yùn)行中(Running):進(jìn)程正在執(zhí)行線程的代碼。

  等待中(Waiting):線程處于阻塞的狀態(tài),等待外部的處理結(jié)束。

  睡眠中(Sleeping):線程被強(qiáng)制睡眠。

  I/O阻塞(Blocked on I/O):等待I/O操作完成。

  同步阻塞(Blocked on Synchronization):等待獲取鎖。

  死亡(Dead):線程完成了執(zhí)行。

  14.同步方法和同步代碼塊的區(qū)別是什么?

  在Java語(yǔ)言中,每一個(gè)對(duì)象有一把鎖。線程可以使用synchronized關(guān)鍵字來(lái)獲取對(duì)象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級(jí)別(粗粒度鎖)或者是代碼塊級(jí)別(細(xì)粒度鎖)。

  15.在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級(jí)別的同步?

  監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個(gè)線程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對(duì)象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。

  16.什么是死鎖(deadlock)?

  兩個(gè)進(jìn)程都在等待對(duì)方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無(wú)限的等待中。

  17.如何確保N個(gè)線程可以訪問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?

  使用多線程的時(shí)候,一種非常簡(jiǎn)單的避免死鎖的方式就是:指定獲取鎖的順序,并強(qiáng)制線程按照指定的順序獲取鎖。因此,如果所有的線程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖了。

  Java集合類

  18.Java集合類框架的基本接口有哪些?

  Java集合類提供了一套設(shè)計(jì)良好的支持對(duì)一組對(duì)象進(jìn)行操作的接口和類。Java集合類里面最基本的接口有:

  Collection:代表一組對(duì)象,每一個(gè)對(duì)象都是它的子元素。

  Set:不包含重復(fù)元素的Collection。

  List:有順序的collection,并且可以包含重復(fù)元素。

  Map:可以把鍵(key)映射到值(value)的對(duì)象,鍵不能重復(fù)。

  19.為什么集合類沒(méi)有實(shí)現(xiàn)Cloneable和Serializable接口?

  集合類接口指定了一組叫做元素的對(duì)象。集合類接口的每一種具體的實(shí)現(xiàn)類都可以選擇以它自己的方式對(duì)元素進(jìn)行保存和排序。有的集合類允許重復(fù)的鍵,有些不允許。

  20.什么是迭代器(Iterator)?

  Iterator接口提供了很多對(duì)集合元素進(jìn)行迭代的方法。每一個(gè)集合類都包含了可以返回迭代器實(shí)例的

  迭代方法。迭代器可以在迭代的過(guò)程中刪除底層集合的元素。


  看過(guò)“關(guān)于經(jīng)典JAVA面試題大全”的人還看了:

1.JAVA面試題大全及答案

2.面試問(wèn)題及答案

3.面試中常見(jiàn)的經(jīng)典問(wèn)題

4.關(guān)于經(jīng)典的FBI面試題

5.java面試自我介紹范文

941254