1. 程式人生 > >Java開發面試題總結(八)

Java開發面試題總結(八)

維護 model ann 多例 操作系統 iter ali 負責 channel

好久沒有來更新我的面試題了,不知道關註我的小夥伴有沒有失聯啊?!呼叫!

技術分享圖片

好了開始我們今天的正題分享!

1、如何從FutureTask不阻塞獲取結果

get(long timeout,TimeUnit unit),超時則返回

輪詢,先通過isDone()判斷是否結束,然後調用get()

2、 blockingqueue如果存放了比較關鍵的數據,系統宕機該如何處理

其實這個是一個開放性問題,不同的人會給出不同的答案,大家可以自行發揮,也可以討論一下更好的答案。

將隊列持久化,比較麻煩,需要將生產數據持久化到磁盤,持久化成功才返回,消費者線程從磁盤加載數據到內存阻塞隊列中,維護消費offset,啟動時,根據消費offset從磁盤加載數據

加入消息隊列,保證消息不丟失,生成序列號,消費冪等,根據消費進程決定系統重啟後的生產狀態

3、簡單介紹下springMVC和struts2的區別有哪些?1) springmvc的入口是一個servlet即前端控制器,而struts2入口是一個filter過慮器。2)springmvc是基於方法開發(一個url對應一個方法),請求參數傳遞到方法的形參,可以設計為單例或多例(建議單例),struts2是基於類開發,傳遞參數是通過類的屬性,只能設計為多例。3)Struts采用值棧存儲請求和響應的數據,通過OGNL存取數據, springmvc通過參數解析器是將request請求內容解析,並給方法形參賦值,將數據和視圖封裝成ModelAndView對象,最後又將ModelAndView中的模型數據通過reques域傳輸到頁面。Jsp視圖解析器默認使用jstl。

4、 NIO與傳統I/O的區別

1)節約線程,NIO由原來的每個線程都需要阻塞讀寫變成了由單線程(即Selector)負責處理多個channel註冊(register)的興趣事件(SelectionKey)集合(底層借助操作系統提供的epoll()),netty bossgroup處理accept連接(沒看明白為什麽bossgroup設置多個thread的必要性),workergroup處理具體業務流程和數據讀寫

2)NIO提供非阻塞操作

3)傳統I/O 以流的方式處理數據,而 NIO 以塊的方式處理數據,NIO提供bytebuffer,分為堆內和堆外緩沖區,讀寫時均先放到該緩沖區中,然後由內核通過channel傳輸到對端,堆外緩沖區不走內核,提升了性能

5、list中存放可重復字符串,如何刪除某個字符串

1)調用iterator相關方法刪除

2)倒刪,防止正序刪除導致的數組重排,index跳過數組元素問題

未完待續~

Java開發面試題總結(八)