1. 程式人生 > >Java常見面試題(七)

Java常見面試題(七)

好久沒有來更新了,今天正好有空更新一篇,不知道正在準備面試的小夥伴有沒有錯過啊?肯定是沒有,因為金三銀四還沒有來,今年開開心心過年,明年工作來一個大豐收!


1、SpringMVC的工作流程?

使用者傳送請求至前端控制器DispatcherServlet

DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。

處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。

DispatcherServlet通過HandlerAdapter處理器介面卡呼叫處理器

執行處理器(Controller,也叫後端控制器)。

Controller執行完成返回ModelAndView

HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet

DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器

ViewReslover解析後返回具體View

DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)

DispatcherServlet響應使用者

2、垃圾回收的優點和原理。並考慮2 種回收機制。

答:Java 語言中一個顯著的特點就是引入了垃圾回收機制,使c++程式設計師最頭疼的記憶體管理的問題迎刃而解,它使得Java 程式設計師在編寫程式的時候不再需要考慮記憶體管理。由於有個垃圾回收機制,Java 中的物件不再有“作用域”的概念,只有物件的引用才有“作用域”。垃圾回收可以有效的防止記憶體洩露,有效的使用可以使用的記憶體。垃圾回收器通常是作為一個單獨的低級別的執行緒執行,不可預知的情況下對記憶體堆中已經死亡的或者長時間沒有使用的物件進行清楚和回收,程式設計師不能實時的呼叫垃圾回收器對某個物件或所有物件進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。

3、jsp 有哪些動作?作用分別是什麼?

答:JSP 共有以下6 種基本動作:

jsp:include:在頁面被請求的時候引入一個檔案;

jsp:useBean:尋找或者例項化一個JavaBean。;

jsp:setProperty:設定JavaBean 的屬性。;

jsp:getProperty:輸出某個JavaBean 的屬性;

jsp:forward:把請求轉到一個新的頁面;

jsp:plugin:根據瀏覽器型別為Java 外掛生成OBJECT 或EMBED 標記。

4、如何用Java實現阻塞佇列?

首先,我們要明確阻塞佇列的定義:

阻塞佇列(BlockingQueue)是一個支援兩個附加操作的佇列。這兩個附加的操作是:在佇列為空時,獲取元素的執行緒會等待佇列變為非空。當佇列滿時,儲存元素的執行緒會等待佇列可用。 阻塞佇列常用於生產者和消費者的場景,生產者是往佇列裡新增元素的執行緒,消費者是從佇列裡拿元素的執行緒。阻塞佇列就是生產者存放元素的容器,而消費者也只從容器裡拿元素。

阻塞佇列的一個簡單實現:

```

public class BlockingQueue {

private List queue = new LinkedList();

private int limit = 10;

public BlockingQueue(int limit){

this.limit = limit;

}

public synchronized void enqueue(Object item)throws InterruptedException {

while(this.queue.size() == this.limit) {

wait();

}

if(this.queue.size() == 0) {

notifyAll();

}

this.queue.add(item);

}

public synchronized Object dequeue() throws InterruptedException{

while(this.queue.size() == 0){

wait();

}

if(this.queue.size() == this.limit){

notifyAll();

}

return this.queue.remove(0);

}

}

```

在enqueue和dequeue方法內部,只有佇列的大小等於上限(limit)或者下限(0)時,才呼叫notifyAll方法。如果佇列的大小既不等於上限,也不等於下限,任何執行緒呼叫enqueue或者dequeue方法時,都不會阻塞,都能夠正常的往佇列中新增或者移除元素。

未完待續~