Java面試題

阿里巴巴 (70題)
1、java事件機制包括哪三個部分?分別介紹。

2、為什么要使用線程池?

3、線程池有什么作用?

4、說說幾種常見的線程池及使用場景。

5、線程池都有哪幾種工作隊列?

6、怎么理解無界隊列和有界隊列?

7、線程池中的幾種重要的參數(shù)及流程說明。

8、什么是反射機制?

9、說說反射機制的作用。

10、反射機制會不會有性能問題?

11、你怎么理解http協(xié)議?

12、說說http協(xié)議的工作流程。

13、http有哪些請求提交方式?

14、http中的200,302,403,404,500,503都代表什么狀態(tài)?

15、http get和post有什么區(qū)別?

16、你怎么理解cookie和session,有哪些不同點?

17、什么是web緩存?有什么優(yōu)點?

18、什么是https,說說https的工作原理?

19、什么是http代理服務器,有什么用?

20、什么是虛擬主機及實現(xiàn)原理?

21、什么是Java虛擬機,為什么要使用?

22、說說Java虛擬機的生命周期及體系結構。

23、說一說Java內存區(qū)域。

24、什么是分布式系統(tǒng)?

25、分布式系統(tǒng)你會考慮哪些方面?

26、講一講TCP協(xié)議的三次握手和四次揮手流程。

27、為什么TCP建立連接協(xié)議是三次握手,而關閉連接卻是四次握手呢?為什么不能用兩次握手進行連接?

28、為什么TCP TIME_WAIT狀態(tài)還需要等2MSL后才能返回到CLOSED狀態(tài)?

29、什么是DoS、DDoS、DRDoS攻擊?如何防御?

30、描述一下Java異常層次結構。

31、什么是檢查異常,不受檢查異常,運行時異常?并分別舉例說明。

32、finally塊一定會執(zhí)行嗎?

33、正常情況下,當在try塊或catch塊中遇到return語句時,finally語句塊在方法返回之前還是之后被執(zhí)行?

34、try、catch、finally語句塊的執(zhí)行順序。

35、Java虛擬機中,數(shù)據(jù)類型可以分為哪幾類?

36、怎么理解棧、堆?堆中存什么?棧中存什么?

37、為什么要把堆和棧區(qū)分出來呢?棧中不是也可以存儲數(shù)據(jù)嗎?

38、在Java中,什么是是棧的起始點,同是也是程序的起始點?

39、為什么不把基本類型放堆中呢?

40、Java中的參數(shù)傳遞時傳值呢?還是傳引用?

41、Java中有沒有指針的概念?

42、Java中,棧的大小通過什么參數(shù)來設置?

43、一個空Object對象的占多大空間?

44、對象引用類型分為哪幾類?

45、講一講垃圾回收算法。

46、如何解決內存碎片的問題?

47、如何解決同時存在的對象創(chuàng)建和對象回收問題?

48、講一講內存分代及生命周期。

49、什么情況下觸發(fā)垃圾回收?

50、如何選擇合適的垃圾收集算法?

51、JVM中最大堆大小有沒有限制?

52、堆大小通過什么參數(shù)設置?

53、JVM有哪三種垃圾回收器?

54、吞吐量優(yōu)先選擇什么垃圾回收器?響應時間優(yōu)先呢?

55、如何進行JVM調優(yōu)?有哪些方法?

56、如何理解內存泄漏問題?有哪些情況會導致內存泄露?如何解決?

57、從分布式系統(tǒng)部署角度考慮,分哪幾層?

58、如何解決業(yè)務層的數(shù)據(jù)訪問問題?

59、為了解決數(shù)據(jù)庫服務器的負擔,如何做數(shù)據(jù)庫的分布?

60、什么是著名的拜占庭將軍問題?

61、為什么說TCP/IP協(xié)議是不可靠的?

62、講講CAP理念。

63、怎么理解強一致性、單調一致性和最終一致性?

64、分布式系統(tǒng)設計你會考慮哪些策略?

65、最常見的數(shù)據(jù)分布方式是什么?

66、談一談一致性哈希算法。

67、paxos是什么?

68、什么是Lease機制?

69、如何理解選主算法?

70、OSI有哪七層模型?TCP/IP是哪四層模型

答案:

1.事件、事件監(jiān)聽器、事件源
事件 一般繼承自java.util.EventObject類,封裝了事件源對象及跟事件相關的信息
事件監(jiān)聽器 實現(xiàn)java.util.EventListener接口,注冊在事件源上,當事件源的屬性或狀態(tài)改變時,
取得相應的監(jiān)聽器調用其內部的回調方法。
事件源 事件發(fā)生的地方

  1. 首先,服務器創(chuàng)建和銷毀工作線程的開銷很大,如果服務器與很多客戶端通信,并且與每個客戶端通信的時間很短,那么就會在創(chuàng)建和銷毀線程的時候造成很大的開銷。
    
     其次,活動的線程也消耗系統(tǒng)資源,如果線程的創(chuàng)建數(shù)量沒有限制,當大量的客戶連接服務器的時候,就會創(chuàng)建出大量的工作線程,他們會消耗大量的內存空間,導致系統(tǒng)的內存空間不足,影響服務器的使用。
    
     最后,如果線程的數(shù)目固定,并且每個線程都有很長的生命周期,那么線程切換也就是固定的,這樣就會給服務器減輕很多壓力,但是如果頻繁的創(chuàng)建和銷毀線程,必將導致頻繁的切換線程,使得線程之間的切換不再遵循系統(tǒng)的固定切換周期,線程切換的開銷也會增大很多。
    

線程池為這些問題提供了解決方案。線程池中預先創(chuàng)建了一些工作線程,他們不斷的從工作隊列中取出任務,然后執(zhí)行,當執(zhí)行完之后,會繼續(xù)執(zhí)行工作隊列中的下一個任務,減少了創(chuàng)建和銷毀線程的次數(shù),每個線程都可以一直被重用,避免了創(chuàng)建和銷毀的開銷。另外,可以根據(jù)系統(tǒng)的實際承載能力,方便的調節(jié)線程池中線程的數(shù)目,防止因為消耗過量的系統(tǒng)資源而導致系統(tǒng)崩潰的問題。

線程池在系統(tǒng)啟動時會創(chuàng)建大量空閑的線程,當線程對象傳遞給線程池之后,線程池就會啟動其中一個線程來執(zhí)行該對象的run或者call方法。執(zhí)行完畢后,該線程并不會消亡,而是返回線程池,變成空閑狀態(tài)。等待執(zhí)行下一個run或者call方法。

1.newCachedThreadPool 創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。
適用:于執(zhí)行很多短期異步的小程序或者負載較輕的服務器。
2.newFixedThreadPool 創(chuàng)建一個指定工作線程數(shù)量的線程池。每當提交一個任務就創(chuàng)建一個工作線程,如果工作線程數(shù)量達到線程池初始的最大數(shù),則將提交的任務存入到池隊列中。
適用:執(zhí)行長期的任務,性能好很多
3.newSingleThreadExecutor 創(chuàng)建一個單線程化的Executor,即只創(chuàng)建唯一的工作者線程來執(zhí)行任務,它只會用唯一的工作線程來執(zhí)行任務,保證所有任務按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。如果這個線程異常結束,會有另一個取代它,保證順序執(zhí)行。單工作線程最大的特點是可保證順序地執(zhí)行各個任務,并且在任意給定的時間不會有多個線程是活動的。
適用:一個任務一個任務執(zhí)行的場景
4.newScheduleThreadPool 創(chuàng)建一個定長的線程池,而且支持定時的以及周期性的任務執(zhí)行,支持定時及周期性任務執(zhí)行。
適用:周期性執(zhí)行任務的場景

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容