1. 程式人生 > >2018年java面試題整理

2018年java面試題整理

1.什麼是執行緒區域性變數ThreadLocal
執行緒區域性變數是侷限於執行緒內部的變數,屬於執行緒自身所有,不在多個執行緒間共享。Java提供ThreadLocal類來支援執行緒區域性變數,是一種實現執行緒安全的方式。但是在管理環境下(如 web 伺服器)使用執行緒區域性變數的時候要特別小心,在這種情況下,工作執行緒的生命週期比任何應用變數的生命週期都要長。任何執行緒區域性變數一旦在工作完成後沒有釋放,Java 應用就存在記憶體洩露的風險。
2.生產者消費者模型的作用是什麼?
(1)通過平衡生產者的生產能力和消費者的消費能力來提升整個系統的執行效率,這是生產者消費者模型最重要的作用。
(2)解耦,這是生產者消費者模型附帶的作用,解耦意味著生產者和消費者之間的聯絡少,聯絡越少越可以獨自發展而不需要收到相互的制約。
3.Java 中,Serializable 與 Externalizable 的區別
Serializable 介面是一個序列化 Java 類的介面,以便於它們可以在網路上傳輸或者可以將它們的狀態儲存在磁碟上,是 JVM 內嵌的預設序列化方式,成本高、脆弱而且不安全。Externalizable 允許你控制整個序列化過程,指定特定的二進位制格式,增加安全機制。
4.簡述堆和棧的區別
VM 中堆和棧屬於不同的記憶體區域,使用目的也不同。棧常用於儲存方法幀和區域性變數,而物件總是在堆上分配。棧通常都比堆小,也不會在多個執行緒之間共享,而堆被整個 JVM 的所有執行緒共享。
5.簡述JVM記憶體分配
基本資料型別比變數和物件的引用都是在棧分配的。

堆記憶體用來存放由new建立的物件和陣列。

類變數(static修飾的變數),程式在一載入的時候就在堆中為類變數分配記憶體,堆中的記憶體地址存放在棧中。

例項變數:當你使用java關鍵字new的時候,系統在堆中開闢並不一定是連續的空間分配給變數,是根據零散的堆記憶體地址,通過雜湊演算法換算為一長串數字以表徵這個變數在堆中的”物理位置”,例項變數的生命週期–當例項變數的引用丟失後,將被GC(垃圾回收器)列入可回收“名單”中,但並不是馬上就釋放堆中記憶體。

區域性變數: 由宣告在某方法,或某程式碼段裡(比如for迴圈),執行到它的時候在棧中開闢記憶體,當局部變數一但脫離作用域,記憶體立即釋放。
6.webservice是什麼?
webservice是一種跨程式語言和跨作業系統的遠端呼叫技術,遵循SOPA/WSDL規範
7.springCloud是什麼?
springcloud是一個微服務框架,並提供全套分散式系統解決方案。支援配置管理,熔斷機制,leader選舉,服務治理,分散式session,微代理,控制匯流排,智慧路由,一次性token。
8.執行緒安全是什麼?執行緒不安全是什麼?
執行緒安全就是多執行緒訪問時,採用了加鎖機制,當一個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。(Vector,HashTable)
執行緒不安全就是不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料是髒資料。(ArrayList,LinkedList,HashMap等)
9.執行緒和程序的區別?
程序和執行緒都是一個時間段的描述,是CPU工作時間段的描述,不過是顆粒大小不同;
(1)程序是資源的分配和排程的一個獨立單元,而執行緒是CPU排程的基本單元
(2)同一個程序中可以包括多個執行緒,並且執行緒共享整個程序的資源(暫存器、堆疊、上下文),一個進行至少包括一個執行緒。
(3)程序的建立呼叫fork或者vfork,而執行緒的建立呼叫pthread_create,程序結束後它擁有的所有執行緒都將銷燬,而執行緒的結束不會影響同個程序中的其他執行緒的結束
(4)執行緒是輕兩級的程序,它的建立和銷燬所需要的時間比程序小很多,所有作業系統中的執行功能都是建立執行緒去完成的
(5)執行緒中執行時一般都要進行同步和互斥,因為他們共享同一程序的所有資源
(6)執行緒有自己的私有屬性TCB,執行緒id,暫存器、硬體上下文,而程序也有自己的私有屬性程序控制塊PCB,這些私有屬性是不被共享的,用來標示一個程序或一個執行緒的標誌
10.怎麼對資料庫百萬級資料進行優化?
使用讀寫分離技術(

讓主資料庫(master)處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從資料庫(slave)處理SELECT查詢操作

11.黑盒測試、灰盒測試、白盒測試、單元測試有什麼區別?

黑盒測試關注程式的功能是否正確,面向實際使用者;

白盒測試關注程式原始碼的內部邏輯結構是否正確,面向程式設計人員;

灰盒測試是介於白盒測試與黑盒測試之間的一種測試。

單元測試(Unit Testing)是對軟體基本組成單元進行的測試,如函式或是一個類的方法。這裡的單元,就是軟體設計的最小單位。

大家開啟支付寶領紅包啦,謝謝支援。

在這裡插入圖片描述