HashMap和HashTable、ConcurrentHashMap區別?
相同點:
- HashMap和Hashtable都實現了Map接口
- 都可以存儲key-value數據
不同點:
- HashMap可以把null作為key或value,HashTable不可以
- HashMap線程不安全,效率高。HashTable線程安全,效率低。
- 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提供了四種方法來創建線程池。
- newFixedThreadPool() :創建固定大小的線程池。
- newCachedThreadPool(): 創建無限大小的線程池,線程池中線程數量不固定,可根據需求自動更改。
- newSingleThreadPool() : 創建單個線程池,線程池中只有一個線程。
- 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。
閱讀更多 編程的boy 的文章