阿里巴巴口碑網面試題 一面


反射的應用很多,很多框架都有用到
spring 的 ioc/di 也是反射….
javaBean和jsp之間調用也是反射….
struts的 FormBean 和頁面之間…也是通過反射調用….
JDBC 的 classForName()也是反射…..
hibernate的 find(Class clazz) 也是反射….
反射還有一個不得不說的問題,就是性能問題,大量使用反射系統性能大打折扣。怎么使用使你的系統達到最優就看你系統架構和綜合使用問題啦,這里就不多說了。
 
session 與 cookie 區別
cookie 是 Web 服務器發送給瀏覽器的一塊信息。瀏覽器會在本地文件中給每一個 Web 服務
器存儲 cookie。以后瀏覽器在給特定的 Web 服務器發請求的時候,同時會發送所有為該服
務器存儲的 cookie。下面列出了 session 和 cookie 的區別:
無論客戶端瀏覽器做怎么樣的設置,session都應該能正常工作。客戶端可以選擇禁用 cookie,
但是, session 仍然是能夠工作的,因為客戶端無法禁用服務端的 session。
 
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都是用數組實現的,主要有這么三個區別:
  1. Vector是多線程安全的,線程安全就是說多線程訪問同一代碼,不會產生不確定的結果。而ArrayList不是,這個可以從源碼中看出,Vector類中的方法很多有synchronized進行修飾,這樣就導致了Vector在效率上無法與ArrayList相比;
  2. 兩個都是采用的線性連續空間存儲元素,但是當空間不足的時候,兩個類的增加方式是不同。
  3. Vector可以設置增長因子,而ArrayList不可以。
  4. Vector是一種老的動態數組,是線程同步的,效率很低,一般不贊成使用。
適用場景分析:
  1. Vector是線程同步的,所以它也是線程安全的,而ArrayList是線程異步的,是不安全的。如果不考慮到線程的安全因素,一般用ArrayList效率比較高。
  2. 如果集合中的元素的數目大於目前集合數組的長度時,在集合中使用數據量比較大的數據,用Vector有一定的優勢。
 
HashSet 和 HashMap 區別
set是線性結構,set中的值不能重復,hashset是set的hash實現,hashset中值不能重復是用hashmap的key來實現的。
map是鍵值對映射,可以空鍵空值。HashMap是Map接口的hash實現,key的唯一性是通過key值hash值的唯一來確定,value值是則是鏈表結構。
他們的共同點都是hash算法實現的唯一性,他們都不能持有基本類型,只能持有對象
 
 
HashMap 和 ConcurrentHashMap 的區別
ConcurrentHashMap是線程安全的HashMap的實現。
(1)ConcurrentHashMap對整個桶數組進行了分割分段(Segment),然后在每一個分段上都用lock鎖進行保護,相對於HashTable的syn關鍵字鎖的粒度更精細了一些,並發性能更好,而HashMap沒有鎖機制,不是線程安全的。
(2)HashMap的鍵值對允許有null,但是ConCurrentHashMap都不允許。
 
 
 
 
基本數據類型和引用數據類型的區別:
基本數據類型在被創建時,在棧上給其划分一塊內存,將數值直接存儲在棧上;
引用數據類型在被創建時,首先要在棧上給其引用(句柄)分配一塊內存,而對象的具體信息都存儲在堆內存上,然后由棧上面的引用指向堆中對象的地址。
例如,有一個類Person,有屬性name,age,帶有參的構造方法,
Person p = new Person("Tom",20);
在內存中的具體創建過程是:
1.首先在棧內存中位其p分配一塊空間;
2.在堆內存中為Person對象分配一塊空間,並為其三個屬性設初值"",0;
3.根據類Person中對屬性的定義,為該對象的兩個屬性進行賦值操作;
4.調用構造方法,為兩個屬性賦值為"Tom",20;(注意這個時候p與Person對象之間還沒有建立聯系);
5.將Person對象在堆內存中的地址,賦值給棧中的p;通過句柄p可以找到堆中對象的具體信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM