1. 程式人生 > >java實習生面試題

java實習生面試題

重定向 over hset 參考 驗證 異常 動態 and pac

MVC 設計思想
MVC就是
M:Model 模型
V:View 視圖
C:Controller 控制器
模型就是封裝業務邏輯和數據的一個一個的模塊,控制器就是調用這些模塊的(java中通常是用Servlet來實現,框架的話很多是用Struts2來實現這一層),視圖就主要是你看到的,比如JSP等.
當用戶發出請求的時候,控制器根據請求來選擇要處理的業務邏輯和要選擇的數據,再返回去把結果輸出到視圖層,這裏可能是進行重定向或轉發等.

equals 與 == 的區別
值類型(int,char,long,boolean等)都是用==判斷相等性。對象引用的話,==判斷引用所指的對象是否是同一個。equals是Object的成員函數,有些類會覆蓋(override)這個方法,用於判斷對象的等價性。例如String類,兩個引用所指向的String都是”abc”,但可能出現他們實際對應的對象並不是同一個(和jvm實現方式有關),因此用==判斷他們可能不相等,但用equals判斷一定是相等的。

集合
List 和 Set 區別
List,Set都是繼承自Collection接口

List特點:元素有放入順序,元素可重復

Set特點:元素無放入順序,元素不可重復,重復元素會覆蓋掉

(註意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的,加入Set 的Object必須定義equals()方法 ,另外list支持for循環,也就是通過下標來遍歷,也可以用叠代器,但是set只能用叠代,因為他無序,無法用下標來取得想要的值。)

Set和List對比:

Set:檢索元素效率低下,刪除和插入效率高,插入和刪除不會引起元素位置改變。

List:和數組類似,List可以動態增長,查找元素效率高,插入刪除元素效率低,因為會引起其他元素位置改變。

List 和 Map 區別
List是對象集合,允許對象重復。

Map是鍵值對的集合,不允許key重復。

Arraylist 與 LinkedList 區別
Arraylist:

優點:ArrayList是實現了基於動態數組的數據結構,因為地址連續,一旦數據存儲好了,查詢操作效率會比較高(在內存裏是連著放的)。

缺點:因為地址連續, ArrayList要移動數據,所以插入和刪除操作效率比較低。

LinkedList:

優點:LinkedList基於鏈表的數據結構,地址是任意的,所以在開辟內存空間的時候不需要等一個連續的地址,對於新增和刪除操作add和remove,LinedList比較占優勢。LinkedList 適用於要頭尾操作或插入指定位置的場景

缺點:因為LinkedList要移動指針,所以查詢操作性能比較低。

適用場景分析:

當需要對數據進行對此訪問的情況下選用ArrayList,當需要對數據進行多次增加刪除修改時采用LinkedList。

ArrayList 與 Vector 區別

public ArrayList(int initialCapacity)//構造一個具有指定初始容量的空列表。

public ArrayList()//構造一個初始容量為10的空列表。

public ArrayList(Collection<? extends E> c)//構造一個包含指定 collection 的元素的列表

Vector有四個構造方法:

public Vector()//使用指定的初始容量和等於零的容量增量構造一個空向量。

public Vector(int initialCapacity)//構造一個空向量,使其內部數據數組的大小,其標準容量增量為零。

public Vector(Collection<? extends E> c)//構造一個包含指定 collection 中的元素的向量

public Vector(int initialCapacity,int capacityIncrement)//使用指定的初始容量和容量增量構造一個空的向量

ArrayList和Vector都是用數組實現的,主要有這麽三個區別:

Vector是多線程安全的,線程安全就是說多線程訪問同一代碼,不會產生不確定的結果。而ArrayList不是,這個可以從源碼中看出,Vector類中的方法很多有synchronized進行修飾,這樣就導致了Vector在效率上無法與ArrayList相比;

兩個都是采用的線性連續空間存儲元素,但是當空間不足的時候,兩個類的增加方式是不同。

Vector可以設置增長因子,而ArrayList不可以。

Vector是一種老的動態數組,是線程同步的,效率很低,一般不贊成使用。

適用場景分析:

Vector是線程同步的,所以它也是線程安全的,而ArrayList是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用ArrayList效率比較高。

如果集合中的元素的數目大於目前集合數組的長度時,在集合中使用數據量比較大的數據,用Vector有一定的優勢。

HashMap 和 Hashtable 的區別
1.hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。

2.hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。

3.hashMap允許空鍵值,而hashTable不允許。

註意:
TreeMap:非線程安全基於紅黑樹實現。TreeMap沒有調優選項,因為該樹總處於平衡狀態。

Treemap:適用於按自然順序或自定義順序遍歷鍵(key)。

參考:http://www.wityx.com/javase/

HashSet 和 HashMap 區別
set是線性結構,set中的值不能重復,hashset是set的hash實現,hashset中值不能重復是用hashmap的key來實現的。

map是鍵值對映射,可以空鍵空值。HashMap是Map接口的hash實現,key的唯一性是通過key值hash值的唯一來確定,value值是則是鏈表結構。

他們的共同點都是hash算法實現的唯一性,他們都不能持有基本類型,只能持有對象
sleep() 、join()、yield()有什麽區別
1、sleep()方法

在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行),此操作受到系統計時器和調度程序精度和準確性的影響。 讓其他線程有機會繼續執行,但它並不釋放對象鎖。也就是如果有Synchronized同步塊,其他線程仍然不能訪問共享數據。註意該方法要捕獲異常

比如有兩個線程同時執行(沒有Synchronized),一個線程優先級為MAX_PRIORITY,另一個為MIN_PRIORITY,如果沒有Sleep()方法,只有高優先級的線程執行完成後,低優先級的線程才能執行;但當高優先級的線程sleep(5000)後,低優先級就有機會執行了。
總之,sleep()可以使低優先級的線程得到執行的機會,當然也可以讓同優先級、高優先級的線程有執行的機會。

2、yield()方法

yield()方法和sleep()方法類似,也不會釋放“鎖標誌”,區別在於,它沒有參數,即yield()方法只是使當前線程重新回到可執行狀態,所以執行yield()的線程有可能在進入到可執行狀態後馬上又被執行,另外yield()方法只能使同優先級或者高優先級的線程得到執行機會,這也和sleep()方法不同。

3、join()方法

Thread的非靜態方法join()讓一個線程B“加入”到另外一個線程A的尾部。在A執行完畢之前,B不能工作。

Thread t = new MyThread(); t.start(); t.join();

保證當前線程停止執行,直到該線程所加入的線程完成為止。然而,如果它加入的線程沒有存活,則當前線程不需要停止
Spring MVC 運行流程

1.用戶發送請求到DispatchServlet

2.DispatchServlet根據請求路徑查詢具體的Handler

3.HandlerMapping返回一個HandlerExcutionChain給DispatchServlet

HandlerExcutionChain:Handler和Interceptor集合

4.DispatchServlet調用HandlerAdapter適配器

5.HandlerAdapter調用具體的Handler處理業務

6.Handler處理結束返回一個具體的ModelAndView給適配器

ModelAndView:model–>數據模型,view–>視圖名稱

7.適配器將ModelAndView給DispatchServlet

8.DispatchServlet把視圖名稱給ViewResolver視圖解析器

9.ViewResolver返回一個具體的視圖給DispatchServlet

10.渲染視圖

11.展示給用戶
為什麽選擇 Netty
Netty 是業界最流行的 NIO 框架之一,它的健壯性、功能、性能、可定制性和可擴展性在同類框架中都是首屈一指的,它已經得到成百上千的商用項目驗證,例如 Hadoop 的 RPC 框架 Avro 使用 Netty 作為通信框架。很多其它業界主流的 RPC 和分布式服務框架,也使用 Netty 來構建高性能的異步通信能力。

Netty 的優點總結參考http://www.wityx.com/javaee/

API 使用簡單,開發門檻低;
功能強大,預置了多種編解碼功能,支持多種主流協議;
定制能力強,可以通過 ChannelHandler 對通信框架進行靈活的擴展;
性能高,通過與其它業界主流的 NIO 框架對比,Netty 的綜合性能最優;
社區活躍,版本叠代周期短,發現的 BUG 可以被及時修復,同時,更多的新功能會被加入;
經歷了大規模的商業應用考驗,質量得到驗證。在互聯網、大數據、網絡遊戲、企業應用、電信軟件等眾多行業得到成功商用,證明了它完全滿足不同行業的商用標準。
正是因為這些優點,Netty 逐漸成為 Java NIO 編程的首選框架。

java實習生面試題