8年開發java程序員教你:Java開發經典面試題

很久沒有來更新了,今天正好有空更新一篇,不知道正在準備面試的小夥伴有沒有錯過啊?確定是沒有,由於金三銀四尚未來,今年開開心心過年,明年工做來一個大豐收!前端

一、SpringMVC的工做流程?c++

(1) 用戶發送請求至前端控制器DispatcherServlet程序員

(2) DispatcherServlet收到請求調用HandlerMapping處理器映射器。面試

(3) 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。後端

(4) DispatcherServlet經過HandlerAdapter處理器適配器調用處理器瀏覽器

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

(6) Controller執行完成返回ModelAndViewjsp

(7) HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServletthis

(8) DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器url

(9) ViewReslover解析後返回具體View

(10) DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)

(11) DispatcherServlet響應用戶

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

答:Java 語言中一個顯著的特色就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問題迎刃而解,它使得Java 程序員在編寫程序的時候再也不須要考慮內存管理。因爲有個垃圾回收機制,Java 中的對象再也不有「做用域」的概念,只有對象的引用纔有「做用域」。垃圾回收能夠有效的防止內存泄露,有效的使用可使用的內存。垃圾回收器一般是做爲一個單獨的低級別的線程運行,不可預知的狀況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清楚和回收,程序員不能實時的調用垃圾回收器對某個對象或全部對象進行垃圾回收。回收機制有分代複製垃圾回收和標記垃圾回收,增量垃圾回收。

三、jsp 有哪些動做?做用分別是什麼?

答:JSP 共有如下6 種基本動做:

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

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

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

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

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

jsp:plugin:根據瀏覽器類型爲Java 插件生成OBJECT 或EMBED 標記。

四、如何用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方法時,都不會阻塞,都可以正常的往隊列中添加或者移除元素。

相關文章
相關標籤/搜索