Java開發面試題總結(八)
好久沒有來更新我的面試題了,不知道關註我的小夥伴有沒有失聯啊?!呼叫!
好了開始我們今天的正題分享!
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開發面試題總結(八)