Java軟件開發(fā)工程師實習求職常見面試題
1、請說出作用域public,private,protected,以及不寫時的區(qū)別
這四個作用域的可見范圍如下表所示。
說明:如果在修飾的元素上面沒有寫任何訪問修飾符,則表示friendly。
作用域 當前類 同一package 子孫類 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
備注:只要記住了有4種訪問權限,4個訪問范圍,然后將全選和范圍在水平和垂直方向上分別按排從小到大或從大到小的順序排列,就很容易畫出上面的圖了。
2、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個數(shù)或類型不同)。
重寫Override表示子類中的方法可以與父類中的某個方法的名稱和參數(shù)完全相同,通過子類創(chuàng)建的實例對象調(diào)用這個方法時,將調(diào)用子類中的定義方法,這相當于把父類中定義的那個完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。
如果兩個方法的參數(shù)列表完全一樣,是否可以讓它們的返回值不同來實現(xiàn)重載Overload。java就無法確定編程者倒底是想調(diào)用哪個方法了,因為它無法通過返回結(jié)果類型來判斷。
3.HashMap和Hashtable的區(qū)別
(1 )HashMap不是線程安全的 .
hashmap是一個接口 是map接口的子接口,是將鍵映射到值的對象,其中鍵和值都是對象,并且不能包含重復鍵,但可以包含重復值。HashMap允許null key和null value,而hashtable不允許。
(2) HashTable是線程安全的一個Collection。
HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
4. ArrayList和LinkedList
List 接口對Collection進行了簡單的擴充,它的具體實現(xiàn)類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,并在需要時從中取出。ArrayList從其命名中可以看出它是一種類似數(shù)組的形式進行存儲,因此它的隨機訪問速度極快,而LinkedList的內(nèi)部實現(xiàn)是鏈表,它適合于在鏈表中間需要頻繁進行插入和刪除操作。在具體應用時可以根據(jù)需要自由選擇。前面說的Iterator只能對容器進行向前遍歷,而 ListIterator則繼承了Iterator的思想,并提供了對List進行雙向遍歷的方法。
5..hashCode方法的作用?
(網(wǎng)友提供的一段,待改進:hashcode這個方法是用來鑒定2個對象是否相等的。
那你會說,不是還有equals這個方法嗎?
不錯,這2個方法都是用來判斷2個對象是否相等的。但是他們是有區(qū)別的。
一般來講,equals這個方法是給用戶調(diào)用的,如果你想判斷2個對象是否相等,你可以重寫equals方法,然后在代碼中調(diào)用,就可以判斷他們是否相等了。簡單來講,equals方法主要是用來判斷從表面上看或者從內(nèi)容上看,2個對象是不是相等。舉個例子,有個學生類,屬性只有姓名和性別,那么我們可以認為只要姓名和性別相等,那么就說這2個對象是相等的。
hashcode方法一般用戶不會去調(diào)用,比如在hashmap中,由于key是不可以重復的,他在判斷key是不是重復的時候就判斷了hashcode這個方法,而且也用到了equals方法。這里不可以重復是說equals和hashcode只要有一個不等就可以了!所以簡單來講,hashcode相當于是一個對象的編碼,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比較起來不直觀。我們一般在覆蓋equals的同時也要覆蓋hashcode,讓他們的邏輯一致。舉個例子,還是剛剛的.例子,如果姓名和性別相等就算2個對象相等的話,那么hashcode的方法也要返回姓名的hashcode值加上性別的hashcode值,這樣從邏輯上,他們就一致了。
要從物理上判斷2個對象是否相等,用==就可以了。
6、靜態(tài)變量和實例變量的區(qū)別?
在語法定義上的區(qū)別:靜態(tài)變量前要加static關鍵字,而實例變量前則不加。
在程序運行時的區(qū)別:實例變量屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了?傊,實例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用
7、Integer與int的區(qū)別
int是java提供的8種原始數(shù)據(jù)類型之一。Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類。int的默認值為0,而Integer的默認值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無法表達出未賦值的情況,
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math類中提供了三個與取整有關的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應,例如,ceil的英文意義是天花板,該方法就表示向上取整,所以,Math.ceil(11.3)的結(jié)果為12,Math.ceil(-11.3)的結(jié)果是-11;floor的英文意義是地板,該方法就表示向下取整,所以,Math.floor(11.6)的結(jié)果為11,Math.floor(-11.6)的結(jié)果是-12;最難掌握的是round方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來的數(shù)字加上0.5后再向下取整,所以,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11。
9.AOP
(1).概念介紹:所謂AOP,即Aspect orientied program,就是面向方面(切面)的編程,
(2).解釋什么是方面:貫穿到系統(tǒng)的各個模塊中的系統(tǒng)一個功能就是一個方面,
比如,記錄日志,統(tǒng)一異常處理,事務處理,權限檢查,這些功能都是軟件系統(tǒng)
的一個面,而不是一點,在各個模塊中都要出現(xiàn)。
(3).什么是面向方面編程:把系統(tǒng)的一個方面的功能封裝成對象的形式來處理
(4).怎么進行面向方面編程:把功能模塊對應的對象作為切面嵌入到原來的各個系統(tǒng)模塊中,采用代理技術,代理會調(diào)用目標,同時把切面功能的代碼(對象)加入進來,所以,
用spring配置代理對象時只要要配兩個屬性,分別表示目標和切面對象(Advisor)。
10、構(gòu)造器Constructor是否可被override?
構(gòu)造器Constructor不能被繼承,因此不能重寫Override,但可以被重載Overload。
http://www.fuchuonang.cn/【Java軟件開發(fā)工程師實習求職常見面試題】相關文章:
Java軟件開發(fā)工程師筆試題06-08
Java軟件工程師綜合面試題06-05
Java軟件測試面試題06-20
java多線程面試題02-19
常見的軟件測試工程師面試題06-30
面試指南-百度Java工程師面試題匯總05-15
公司JAVA開發(fā)面試題06-03
java前端開發(fā)面試題05-09
Java的面試題和答案10-30
軟件測試工程師經(jīng)典常見面試題05-11