更新時間:2019-10-16 11:02:08 來源:動力節點 瀏覽2996次
在掌握了Java技術之后,面試就成為馬上要面臨的問題了。面對面試官的問題,提前做好準備能夠有助于你的臨場發揮,以下是一些Java面試中高頻出現的一些問題,有一部分是沒有固定答案的,希望能夠對大家有所幫助。
BIO、NIO和AIO的區別
JavaBIO:同步并阻塞,服務器實現模式為一個連接一個線程,即客戶端有連接請求時服務器端就需要啟動一個線程進行處理,如果這個連接不做任何事情會造成不必要的線程開銷,當然可以通過線程池機制改善。
JavaNIO:同步非阻塞,服務器實現模式為一個請求一個線程,即客戶端發送的連接請求都會注冊到多路復用器上,多路復用器輪詢到連接有I/O請求時才啟動一個線程進行處理。
JavaAIO:異步非阻塞,服務器實現模式為一個有效請求一個線程,客戶端的I/O請求都是由OS先完成了再通知服務器應用去啟動線程進行處理。
NIO比BIO的改善之處是把一些無效的連接擋在了啟動線程之前,減少了這部分資源的浪費(因為我們都知道每創建一個線程,就要為這個線程分配一定的內存空間)
AIO比NIO的進一步改善之處是將一些暫時可能無效的請求擋在了啟動線程之前,比如在NIO的處理方式中,當一個請求來的話,開啟線程進行處理,但這個請求所需要的資源還沒有就緒,此時必須等待后端的應用資源,這時線程就被阻塞了。
適用場景分析:
BIO方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解,如之前在Apache中使用。
NIO方式適用于連接數目多且連接比較短(輕操作)的架構,比如聊天服務器,并發局限于應用中,編程比較復雜,JDK1.4開始支持,如在Nginx,Netty中使用。
AIO方式使用于連接數目多且連接比較長(重操作)的架構,比如相冊服務器,充分調用OS參與并發操作,編程比較復雜,JDK7開始支持,在成長中,Netty曾經使用過,后來放棄。
Java中常說的堆和棧,分別是什么數據結構;另外,為什么要分為堆和棧來存儲數據
棧是一種具有后進先出性質的數據結構,也就是說后存放的先取,先存放的后取。
堆是一種經過排序的樹形數據結構,每個結點都有一個值。通常我們所說的堆的數據結構,是指二叉堆。堆的特點是根結點的值最小(或最大),且根結點的兩個子樹也是一個堆。由于堆的這個特性,常用來實現優先隊列,堆的存取是隨意的。
為什么要劃分堆和棧
1、從軟件設計的角度看,棧代表了處理邏輯,而堆代表了數據。這樣分開,使得處理邏輯更為清晰。
2、堆與棧的分離,使得堆中的內容可以被多個棧共享。一方面這種共享提供了一種有效的數據交互方式(如:共享內存),另一方面,堆中的共享常量和緩存可以被所有棧訪問,節省了空間。
3、棧因為運行時的需要,比如保存系統運行的上下文,需要進行地址段的劃分。由于棧只能向上增長,因此就會限制住棧存儲內容的能力。而堆不同,堆中的對象是可以根據需要動態增長的,因此棧和堆的拆分,使得動態增長成為可能,相應棧中只需記錄堆中的一個地址即可。
4、體現了Java面向對象這一核心特點(也可以繼續說一些自己的理解)。
為什么要用線程池
那先要明白什么是線程池
線程池是指在初始化一個多線程應用程序過程中創建一個線程集合,然后在需要執行新的任務時重用這些線程而不是新建一個線程。
使用線程池的好處
1、線程池改進了一個應用程序的響應時間。由于線程池中的線程已經準備好且等待被分配任務,應用程序可以直接拿來使用而不用新建一個線程。
2、線程池節省了CLR為每個短生存周期任務創建一個完整的線程的開銷并可以在任務完成后回收資源。
3、線程池根據當前在系統中運行的進程來優化線程時間片。
4、線程池允許我們開啟多個任務而不用為每個線程設置屬性。
5、線程池允許我們為正在執行的任務的程序參數傳遞一個包含狀態信息的對象引用。
6、線程池可以用來解決處理一個特定請求最大線程數量限制問題。
Msyql優化經驗
1、對查詢進行優化,應盡量避免全表掃描,首先應考慮在where及orderby涉及的列上建立索引。
2、應盡量避免在where子句中使用!=或<>操作符,否則引擎將放棄使用索引而進行全表掃描。
3、盡量使用數字型字段,若只含數值信息的字段盡量不要設計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會逐個比較字符串中每一個字符,而對于數字型而言只需要比較一次就夠了。
4、任何地方都不要使用select*fromt,用具體的字段列表代替“*”,不要返回用不到的任何字段。
5、避免頻繁創建和刪除臨時表,以減少系統表資源的消耗。諸如此類,等等等等......
相關Java面試題推薦
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習