阿里巴巴 (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ā)生的地方
首先,服務器創(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í)行任務的場景