求職複習系列10 面試題

HashMap和HashTable、ConcurrentHashMap區別?

相同點:

  1. HashMap和Hashtable都實現了Map接口
  2. 都可以存儲key-value數據

不同點:

  1. HashMap可以把null作為key或value,HashTable不可以
  2. HashMap線程不安全,效率高。HashTable線程安全,效率低。
  3. HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。

ConcurrentModificationException異常出現的原因

public class Test {

public static void main(String[] args) {

ArrayList<integer> list = new ArrayList<integer>();/<integer>/<integer>

list.add(2);

Iterator<integer> iterator = list.iterator();/<integer>

while(iterator.hasNext()){

Integer integer = iterator.next();

if(integer==2)

list.remove(integer);

}

}

}

執行上段代碼是有問題的,會拋出ConcurrentModificationException異常。

原因:調用list.remove()方法導致modCount和expectedModCount的值不一致。

final void checkForComodification() {

if (modCount != expectedModCount)

throw new ConcurrentModificationException();

}

解決辦法:在迭代器中如果要刪除元素的話,需要調用Iterator類的remove方法。

public class Test {

public static void main(String[] args) {

ArrayList<integer> list = new ArrayList<integer>();/<integer>/<integer>

list.add(2);

Iterator<integer> iterator = list.iterator();/<integer>

while(iterator.hasNext()){

Integer integer = iterator.next();

if(integer==2)

iterator.remove(); //注意這個地方

}

}

}

2. java線程池用過沒有?

Executors提供了四種方法來創建線程池。

  1. newFixedThreadPool() :創建固定大小的線程池。
  2. newCachedThreadPool(): 創建無限大小的線程池,線程池中線程數量不固定,可根據需求自動更改。
  3. newSingleThreadPool() : 創建單個線程池,線程池中只有一個線程。
  4. newScheduledThreadPool() 創建固定大小的線程池,可以延遲或定時的執行任務。

、Servlet API中forward()與redirect()的區別?

1.從地址欄顯示來說

forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裡來的,所以它的地址欄還是原來的地址.

redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所以redirect等於客戶端向服務器端發出兩次request,同時也接受兩次response。

2.從數據共享來說

forward:轉發頁面和轉發到的頁面可以共享request裡面的數據.

redirect:不能共享數據.

redirect不僅可以重定向到當前應用程序的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源.

forward方法只能在同一個Web應用程序內的資源之間轉發請求.forward 是服務器內部的一種操作.

redirect 是服務器通知客戶端,讓客戶端重新發起請求.

所以,你可以說 redirect 是一種間接的請求, 但是你不能說"一個請求是屬於forward還是redirect "

3.從運用地方來說

forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.

redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等.

4.從效率來說

forward:高.

redirect:低.

request.getAttribute()和 request.getParameter()有何區別?

1,request.getParameter()取得是通過容器的實現來取得通過類似post,get等方式傳入的數據。

request.setAttribute()和getAttribute()只是在web容器內部流轉,僅僅是請求處理階段。

2,getAttribute是返回對象,getParameter返回字符串

3,getAttribute()一向是和setAttribute()一起使用的,只有先用setAttribute()設置之後,才能夠通過getAttribute()來獲得值,它們傳遞的是Object類型的數據。而且必須在同一個request對象中使用才有效。,而getParameter()是接收表單的get或者post提交過來的參數

jsp有哪些內置對象?作用分別是什麼?

JSP共有以下9個內置的對象:

1,request 用戶端請求,此請求會包含來自GET/POST請求的參數

2,response 網頁傳回用戶端的回應

3,pageContext 網頁的屬性是在這裡管理

4,session 與請求有關的會話期

5,application servlet 正在執行的內容

6,out 用來傳送回應的輸出

7,config servlet的構架部件

8,page JSP網頁本身

9,exception 針對錯誤網頁,未捕捉的例外

jsp和servlet的區別、共同點、各自應用的範圍?

JSP是Servlet技術的擴展,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。

Servlet和JSP最主要的不同點在於:Servlet的應用邏輯是在Java文件中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。

JSP側重於視圖,Servlet主要用於控制邏輯。在struts框架中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層.

SQL查詢出來的結果分頁展示一般怎麼做?

Oracle:

select * from

(select *,rownum as tempid from student ) t

where t.tempid between ” + pageSize*(pageNumber-1) + ” and ” + pageSize*pageNumber

MySQL:

select * from students limit ” + pageSize*(pageNumber-1) + “,” + pageSize;

sql server:

select top ” + pageSize + ” * from students where id not in +

(select top ” + pageSize * (pageNumber-1) + id from students order by id) +

“order by id;

談談你對Spring的理解。

1.Spring是實現了工廠模式的工廠類(在這裡有必要解釋清楚什麼是工廠模式),這個類名為BeanFactory(實際上是一個接口),在程序中通常BeanFactory的子類ApplicationContext。Spring相當於一個大的工廠類,在其配置文件中通過<bean>元素配置用於創建實例對象的類名和實例對象的屬性。/<bean>

2. Spring提供了對IOC良好支持,IOC是一種編程思想,是一種架構藝術,利用這種思想可以很好地實現模塊之間的解耦,IOC也稱為DI(Depency Injection)。

3. Spring提供了對AOP技術的良好封裝, AOP稱為面向切面編程,就是系統中有很多各不相干的類的方法,在這些眾多方法中要加入某種系統功能的代碼,例如,加入日誌,加入權限判斷,加入異常處理,這種應用稱為AOP。


分享到:


相關文章: