2016最新Java筆試題集錦
還在找java的筆試題嗎,下面YJBYS小編為大家精心搜集了關(guān)于2016最新Java筆試題的集錦,歡迎大家參考借鑒,希望可以幫助到大家!
1.MVC的各個(gè)部分都有那些技術(shù)來(lái)實(shí)現?如何實(shí)現?
答:MVC是Model-View-Controller的簡(jiǎn)寫(xiě)。"Model" 代表的是應用的業(yè)務(wù)邏輯(通過(guò)JavaBean,EJB組件實(shí)現), "View"是應用的表示面(由JSP頁(yè)面產(chǎn)生),"Controller" 是提供應用的處理過(guò)程控制(一般是一個(gè)Servlet),通過(guò)這種設計模型把應用邏輯,處理過(guò)程和顯示邏輯分成不同的組件實(shí)現。這些組件可以進(jìn)行交互和重用。
2.J2EE是什么?
答:Je22是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級應用模型(enterpriese application model).在這樣的一個(gè)應用系統中,可按照功能劃分為不同的組件,這些組件又可在不同計算機上,并且處于相應的層次(tier)中。所屬層次包括客戶(hù)層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(EIS)層。
3.J2EE是技術(shù)還是平臺還是框架?
答:J2EE本身是一個(gè)標準,一個(gè)為企業(yè)分布式應用的開(kāi)發(fā)提供的標準平臺。
J2EE也是一個(gè)框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)。
4.STRUTS的應用(如STRUTS架構)
答:Struts是采用Java Servlet/JavaServer Pages技術(shù),開(kāi)發(fā)Web應用程序的開(kāi)放源碼的framework。 采用Struts能開(kāi)發(fā)出基于MVC(Model-View-Controller)設計模式的應用構架。 Struts有如下的主要功能:
一.包含一個(gè)controller servlet,能將用戶(hù)的請求發(fā)送到相應的Action對象。
二.JSP自由tag庫,并且在controller servlet中提供關(guān)聯(lián)支持,幫助開(kāi)發(fā)員創(chuàng )建交互式表單應用。
三.提供了一系列實(shí)用對象:XML處理、通過(guò)Java reflection APIs自動(dòng)處理JavaBeans屬性、國際化的提示和消息。
5.WEB SERVICE名詞解釋。JSWDL開(kāi)發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
答:Web ServiceWeb Service是基于網(wǎng)絡(luò )的、分布式的模塊化組件,它執行特定的任務(wù),遵守具體的技術(shù)規范,這些規范使得Web Service能與其他兼容的組件進(jìn)行互操作。
JAXP(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當你需要改變具體的實(shí)現時(shí)候也不需要修改代碼。
JAXM(Java API for XML Messaging) 是為SOAP通信提供訪(fǎng)問(wèn)方法和傳輸機制的API。
WSDL是一種 XML 格式,用于將網(wǎng)絡(luò )服務(wù)描述為一組端點(diǎn),這些端點(diǎn)對包含面向文檔信息或面向過(guò)程信息的消息進(jìn)行操作。這種格式首先對操作和消息進(jìn)行抽象描述,然后將其綁定到具體的網(wǎng)絡(luò )協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(服務(wù))。
SOAP即簡(jiǎn)單對象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協(xié)議。
UDDI 的目的是為電子商務(wù)建立標準;UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實(shí)現標準規范,同時(shí)也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現的訪(fǎng)問(wèn)協(xié)議的實(shí)現標準。
6.C/S 與 B/S 區別:
答:有如下八個(gè)方面的不同:
(1)硬件環(huán)境不同:
C/S 一般建立在專(zhuān)用的網(wǎng)絡(luò )上, 小范圍里的網(wǎng)絡(luò )環(huán)境, 局域網(wǎng)之間再通過(guò)專(zhuān)門(mén)服務(wù)器提供連接和數據交換服務(wù).
B/S 建立在廣域網(wǎng)之上的, 不必是專(zhuān)門(mén)的網(wǎng)絡(luò )硬件環(huán)境,例與電話(huà)上網(wǎng), 租用設備. 信息自己管理. 有比C/S更強的適應范圍, 一般只要有操作系統和瀏覽器就行
(2)對安全要求不同
C/S 一般面向相對固定的用戶(hù)群, 對信息安全的控制能力很強. 一般高度機密的信息系統采用C/S 結構適宜. 可以通過(guò)B/S發(fā)布部分可公開(kāi)信息.
B/S 建立在廣域網(wǎng)之上, 對安全的控制能力相對弱, 可能面向不可知的用戶(hù)。
(3)對程序架構不同
C/S 程序可以更加注重流程, 可以對權限多層次校驗, 對系統運行速度可以較少考慮.
B/S 對安全以及訪(fǎng)問(wèn)速度的多重的考慮, 建立在需要更加優(yōu)化的基礎之上. 比C/S有更高的要求 B/S結構的程序架構是發(fā)展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網(wǎng)絡(luò )的構件搭建的系統. SUN 和IBM推的JavaBean 構件技術(shù)等,使 B/S更加成熟.
(4)軟件重用不同
C/S 程序可以不可避免的整體性考慮, 構件的重用性不如在B/S要求下的構件的重用性好.
B/S 對的多重結構,要求構件相對獨立的功能. 能夠相對較好的重用.就入買(mǎi)來(lái)的餐桌可以再利用,而不是做在墻上的石頭桌子
(5)系統維護不同
C/S 程序由于整體性, 必須整體考察, 處理出現的問(wèn)題以及系統升級. 升級難. 可能是再做一個(gè)全新的系統
B/S 構件組成,方面構件個(gè)別的更換,實(shí)現系統的無(wú)縫升級. 系統維護開(kāi)銷(xiāo)減到最小.用戶(hù)從網(wǎng)上自己下載安裝就可以實(shí)現升級.
(6)處理問(wèn)題不同
C/S 程序可以處理用戶(hù)面固定, 并且在相同區域, 安全要求高需求, 與操作系統相關(guān). 應該都是相同的系統
B/S 建立在廣域網(wǎng)上, 面向不同的用戶(hù)群, 分散地域, 這是C/S無(wú)法作到的. 與操作系統平臺關(guān)系最小.
(7)用戶(hù)接口不同
C/S 多是建立的Window平臺上,表現方法有限,對程序員普遍要求較高
B/S 建立在瀏覽器上, 有更加豐富和生動(dòng)的表現方式與用戶(hù)交流. 并且大部分難度減低,減低開(kāi)發(fā)成本.
(8)信息流不同
C/S 程序一般是典型的中央集權的機械式處理, 交互性相對低
B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。
7.什么是JNDI
答:(Java Naming & Directory Interface)JAVA命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統,讓其它各地的應用程序在其上面留下自己的索引,從而滿(mǎn)足快速查找和定位分布式應用程序的功能。
8.什么是JMS
答:(Java Message Service)JAVA消息服務(wù)。主要實(shí)現各個(gè)應用程序之間的通訊。包括點(diǎn)對點(diǎn)和廣播
9.什么是JTA
答:(Java Transaction API)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應用程序只需調用其提供的接口即可。
10.開(kāi)發(fā)中都用到了那些設計模式?用在什么場(chǎng)合?
答:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現的問(wèn)題,然后描述了該問(wèn)題的解決方案的核心。通過(guò)這種方式,你可以無(wú)數次地使用那些已有的解決方案,無(wú)需在重復相同的工作。主要用到了MVC的設計模式。用來(lái)開(kāi)發(fā)JSP/Servlet或者J2EE的相關(guān)應用。簡(jiǎn)單工廠(chǎng)模式等。
11.、j2ee常用的設計模式?說(shuō)明工廠(chǎng)模式。
答:Java中的23種設計模式:
Factory(工廠(chǎng)模式), Builder(建造模式), Factory Method(工廠(chǎng)方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門(mén)面模式),
Adapter(適配器模式), Bridge(橋梁模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解釋器模式), Visitor(訪(fǎng)問(wèn)者模式),
Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),
Observer(觀(guān)察者模式), State(狀態(tài)模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
工廠(chǎng)模式:工廠(chǎng)模式是一種經(jīng)常被使用到的模式,根據工廠(chǎng)模式實(shí)現的類(lèi)可以根據提供的數據生成一組類(lèi)中某一個(gè)類(lèi)的實(shí)例,通常這一組類(lèi)有一個(gè)公共的抽象父類(lèi)并且實(shí)現了相同的方法,但是這些方法針對不同的數據進(jìn)行了不同的操作。首先需要定義一個(gè)基類(lèi),該類(lèi)的子類(lèi)通過(guò)不同的方法實(shí)現了基類(lèi)中的方法。然后需要定義一個(gè)工廠(chǎng)類(lèi),工廠(chǎng)類(lèi)可以根據條件生成不同的子類(lèi)實(shí)例。當得到子類(lèi)的實(shí)例后,開(kāi)發(fā)人員可以調用基類(lèi)中的方法而不必考慮到底返回的是哪一個(gè)子類(lèi)的實(shí)例。
12.UML方面
答:標準建模語(yǔ)言UML。用例圖,靜態(tài)圖(包括類(lèi)圖、對象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現圖
13.RMI
RMI 指的是遠程方法調用 (Remote Method Invocation)。它是一種機制,能夠讓在某個(gè) Java 虛擬機上的對象調用另一個(gè)Java 虛擬機中的對象上的方法?梢杂么朔椒ㄕ{用的任何對象必須實(shí)現該遠程接口。調用這樣一個(gè)對象時(shí),其參數為"marshalled" 并將其從本地虛擬機發(fā)送到遠程虛擬機(該遠程虛擬機的參數為 "unmarshalled")上。該方法終止時(shí),將編組來(lái)自遠程機的結果并將結果發(fā)送到調用方的虛擬機。如果方法調用導致拋出異常,則該異常將指示給調用方。
JAVA 基礎
1.如何獲得數組的長(cháng)度?
數組名.length
2.訪(fǎng)問(wèn)修飾符“public/private/protected/缺省的修飾符”的使用類(lèi)?
public : 公共,均可訪(fǎng)問(wèn)
private: 私有的,同一個(gè)java類(lèi)中可以訪(fǎng)問(wèn).子類(lèi)不能訪(fǎng)問(wèn).
protected: 同一個(gè)包中的類(lèi)都可訪(fǎng)問(wèn).子類(lèi)可以訪(fǎng)問(wèn).
缺省,friendly :當前類(lèi),同一個(gè)包,都可以訪(fǎng)問(wèn).
作用域 當前類(lèi) 同一package 子孫類(lèi) 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
3.Anonymous Inner Class (匿名內部類(lèi)) 是否可以extends(繼承)其它類(lèi),是否可以implements(實(shí)現)interface(接口)?
匿名內部類(lèi)是沒(méi)有名字的內部類(lèi),不能繼承其它類(lèi),但一個(gè)內部類(lèi)可以作為一個(gè)接口,由另一個(gè)內部類(lèi)實(shí)現.
一、由于匿名內部類(lèi)沒(méi)有名字,所以它沒(méi)有構造函數。因為沒(méi)有構造函數,所以它必須完全借用父類(lèi)的構造函數來(lái)實(shí)例化,換言之:匿名內部類(lèi)完全把創(chuàng )建對象的任務(wù)交給了父類(lèi)去完成。
二、在匿名內部類(lèi)里創(chuàng )建新的方法沒(méi)有太大意義,但它可以通過(guò)覆蓋父類(lèi)的方法達到神奇效果,如上例所示。這是多態(tài)性的體現。
三、因為匿名內部類(lèi)沒(méi)有名字,所以無(wú)法進(jìn)行向下的強制類(lèi)型轉換,持有對一個(gè)匿名內部類(lèi)對象引用的變量類(lèi)型一定是它的直接或間接父類(lèi)類(lèi)型。
new <類(lèi)或接口> <類(lèi)的主體>
匿名類(lèi)
匿名類(lèi)是不能有名稱(chēng)的類(lèi),所以沒(méi)辦法引用它們。必須在創(chuàng )建時(shí),作為new語(yǔ)句的一部分來(lái)聲明它們。
這就要采用另一種形式的new語(yǔ)句,如下所示:
new <類(lèi)或接口> <類(lèi)的主體>
這種形式的new語(yǔ)句聲明一個(gè)新的匿名類(lèi),它對一個(gè)給定的類(lèi)進(jìn)行擴展,或者實(shí)現一個(gè)給定的接口。它還創(chuàng )建那個(gè)類(lèi)的一個(gè)新實(shí)例,并把它作為語(yǔ)句的結果而返回。要擴展的類(lèi)和要實(shí)現的接口是new語(yǔ)句的操作數,后跟匿名類(lèi)的主體。
如果匿名類(lèi)對另一個(gè)類(lèi)進(jìn)行擴展,它的主體可以訪(fǎng)問(wèn)類(lèi)的成員、覆蓋它的方法等等,這和其他任何標準的類(lèi)都是一樣的。如果匿名類(lèi)實(shí)現了一個(gè)接口,它的主體必須實(shí)現接口的方法。
注意匿名類(lèi)的聲明是在編譯時(shí)進(jìn)行的,實(shí)例化在運行時(shí)進(jìn)行。這意味著(zhù)for循環(huán)中的一個(gè)new語(yǔ)句會(huì )創(chuàng )建相同匿名類(lèi)的幾個(gè)實(shí)例,而不是創(chuàng )建幾個(gè)不同匿名類(lèi)的一個(gè)實(shí)例。
從技術(shù)上說(shuō),匿名類(lèi)可被視為非靜態(tài)的內部類(lèi),所以它們具有和方法內部聲明的非靜態(tài)內部類(lèi)一樣的權限和限制。
如果要執行的任務(wù)需要一個(gè)對象,但卻不值得創(chuàng )建全新的對象(原因可能是所需的類(lèi)過(guò)于簡(jiǎn)單,或者是由于它只在一個(gè)方法內部使用),匿名類(lèi)就顯得非常有用。匿名類(lèi)尤其適合在Swing應用程序中快速創(chuàng )建事件處理程序。
exp:
return new Contents() {
private int i = 11;
public int value() { return i; }
};
這種奇怪的語(yǔ)法要表達的意思是:“創(chuàng )建從Contents衍生出來(lái)的匿名類(lèi)的一個(gè)對象”。由new表達式返回的句柄會(huì )自動(dòng)上溯造型成一個(gè)Contents句柄。匿名內部類(lèi)的語(yǔ)法其實(shí)要表達的是:
class MyContents extends Contents {
private int i = 11;
public int value() { return i; }
}
return new MyContents();
若試圖定義內部類(lèi),并想使用在匿名內部類(lèi)外部定義的一個(gè)對象,則編譯器要求外部對象必須是final屬性.
public class Parcel9 {
public Destination
dest(final String dest, final float price) {
return new Destination() {
private int cost;
// Instance initialization for each object:
{
cost = Math.round(price);
if(cost > 100)
System.out.println("Over budget!");
}
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel9 p = new Parcel9();
Destination d = p.dest("Tanzania", 101.395F);
}
}
4.static nested class 和 inner class的不同?
nested class在c++中是嵌套類(lèi),inner class在java中是內部類(lèi).不同就是在于是否有指向外部的`引用上.靜態(tài)內部類(lèi)意味著(zhù)創(chuàng )建一個(gè)static內部類(lèi)的對象,不需要一個(gè)外部類(lèi)對象;不能從一個(gè)static內部類(lèi)的一個(gè)對象訪(fǎng)問(wèn)到一個(gè)外部類(lèi)的對象.
5.&和&&的區別
&是位運算符,表示按位與運算;&&是邏輯運算符,表示邏輯與(and)
6.Collection和Collections的區別
collection是集合類(lèi)的上級接口,繼承與它的接口主要是set和list
其中list必須以特定的順序容納元素;而一個(gè)set不能包含重復的元素.
映射(Map)一系列"鍵-值"對.可以返回自己鍵的一個(gè)set,一個(gè)包含自己值的list,或者包含自己(鍵-值)對的一個(gè)list.
均可構建自己的反復器.
collections類(lèi)是針對集合類(lèi)的一個(gè)幫助類(lèi).它提供一系列的靜態(tài)方法對各種集合的搜索,排序,線(xiàn)程安全化等操作.
public class SimpleCollection {
public static void main(String[] args) {
Collection c = new ArrayList();
for(int i = 0; i < 10; i++)
c.add(Integer.toString(i));
Iterator it = c.iterator();
while(it.hasNext())
System.out.println(it.next());
}
}
7.什么時(shí)候用assert
assertion(斷言)在軟件開(kāi)發(fā)中是一種常用的調試方式,很多開(kāi)發(fā)語(yǔ)言中都支持這種機制。在實(shí)現中,assertion就是在程序中的一條語(yǔ)句,它對一個(gè)boolean表達式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean表達式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處于不正確的狀態(tài)下,系統將給出警告或退出。一般來(lái)說(shuō),assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開(kāi)發(fā)和測試時(shí)開(kāi)啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的.
8.String s = new String("xyz");創(chuàng )建了幾個(gè)String Object***
兩個(gè),一個(gè)字符對象,一個(gè)字符對象引用對象
9.math.round(11.5)和math.round(-11.5)
前者等于12,后者等于-11.round方法返回與參數最接近的長(cháng)整數.參數加0.5,求其floor
10. short s1 = 1;s1 = s1+1;是否有錯誤? short s1 = 1;s1 += 1;是否有錯誤?
前者s1+1返回一個(gè)int型,需要強制類(lèi)型轉換.
后者正確.
11.java種有沒(méi)有g(shù)oto?
有,為保留字.但是尚未使用.
12.Overload和Override的區別。Overloaded的方法是否可以改變返回值的類(lèi)型?
更多相關(guān)java筆試題目分享: 中興軟件筆試題及答案 恒生電子2014最新筆試題目 2015年普通話(huà)水平測試題 java基礎筆試題
Java面試題集 2015校園招聘JAVA筆試題 JAVA常見(jiàn)面試筆試題及解答(精華) 關(guān)于Javascript之AJAX的基礎知識筆試題目
10個(gè)經(jīng)典的Java面試筆試題集合 2014支付寶JAVA筆試題 最新關(guān)于IBM Java的筆試題附答案
答:方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現。重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現,重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數,我們說(shuō)該方法被重寫(xiě) (Overriding)。子類(lèi)的對象使用這個(gè)方法時(shí),將調用子類(lèi)中的定義,對它而言,父類(lèi)中的定義如同被"屏蔽"了。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數個(gè)數或有不同的參數類(lèi)型,則稱(chēng)為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類(lèi)型
13.Set里的元素是不能重復的,那么用什么方法來(lái)區分重復與否呢? 是用==還是equals()? 它們有何區別
答:Set里的元素是不能重復的,那么用iterator()方法來(lái)區分重復與否。equals()是判讀兩個(gè)Set是否相等
equals()和==方法決定引用值是否指向同一對象equals()在類(lèi)中被覆蓋,為的是當兩個(gè)分離的對象的內容和類(lèi)型相配的話(huà),返回真值
14.給我一個(gè)你最常見(jiàn)到的runtime exception?
答:常見(jiàn)的運行時(shí)異常有如下這些
ArithmeticException(異常的運算條件),
ArrayStoreException(向一個(gè)對象數組存放一錯誤類(lèi)型的對象時(shí))BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException..
15.error和exception有什么區別?
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問(wèn)題。比如說(shuō)內存溢出。不可能指望程序能處理這樣的情況
exception 表示一種設計或實(shí)現問(wèn)題。也就是說(shuō),它表示如果程序運行正常,從不會(huì )發(fā)生的情況
16.List, Set, Map是否繼承自Collection接口
答: List,Set是,Map不是
17.abstract class和interface的區別
答:聲明方法的存在而不去實(shí)現它的類(lèi)叫虛擬類(lèi)(abstract class).它用于創(chuàng )建一個(gè)體現某些基本行為的類(lèi),并為該類(lèi)聲明方法,但不能在該類(lèi)中實(shí)現該類(lèi)的情況.不能創(chuàng )建abstract class的實(shí)例.但是可以聲明一個(gè)abstract class變量,將其指向其具體子類(lèi)的一個(gè)實(shí)例.不能有抽象構造函數或抽象靜態(tài)方法.Abstract 類(lèi)的子類(lèi)為它們父類(lèi)中的所有抽象方法提供實(shí)現,否則它們也是抽象類(lèi)為。取而代之,在子類(lèi)中實(shí)現該方法。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現這些方法.
接口(interface)是抽象類(lèi)的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現這樣的接口而獲得。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現與子類(lèi)相似,除了該實(shí)現類(lèi)不能從接口定義中繼承行為。當類(lèi)實(shí)現特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現了該接口的類(lèi)的任何對象上調用接口的方法。由于有抽象類(lèi),它允許使用接口名作為引用變量的類(lèi)型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉換到接口類(lèi)型或從接口類(lèi)型轉換,instanceof 運算符可以用來(lái)決定某對象的類(lèi)是否實(shí)現了接口.
接口是一個(gè)更純的抽象類(lèi).
18.接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(implements)接口? 抽象類(lèi)是否可繼承實(shí)體類(lèi)(concrete class)
答:接口可以繼承接口。抽象類(lèi)可以實(shí)現(implements)接口,抽象類(lèi)可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構造函數
19.abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized
答:都不能.其中synchronized:(同步.避免在你和別人同時(shí)訪(fǎng)問(wèn)一個(gè)屬性的時(shí)候,屬性的值發(fā)生不同步的問(wèn)題.)
native:(聲明本地方法的關(guān)鍵字,可以通過(guò)聲明的方法調用本地的動(dòng)態(tài)鏈接庫或者有C、C++等開(kāi)發(fā)的函數。)
20.構造器Constructor是否可被override(構造函數)
答:構造器Constructor不能被繼承,因此不能重寫(xiě)Overriding,但可以被重載Overloading
1). 構造器不能是native,final,static,synchronized 的,可以是public,private,或什么都沒(méi)有。
2). 構造器函數里可以寫(xiě)return呢,但后面什么都不許有(包括null)
3). 構造器不能返回值.
但如果有個(gè)"構造器"返值了,它就不是構造器嘍,只是個(gè)普通方法
4). super();this();這兩個(gè)方法只能在構造方法里調用.
5). 成員變量聲明時(shí)候賦值,比構造函數還早.
21.是否可以繼承String類(lèi)
答:String類(lèi)是final類(lèi)故不可以繼承
22.try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì )不會(huì )被執行,什么時(shí)候被執行,在return前還是后
答:會(huì )執行,在return前執行
23.用最有效率的方法算出2乘以8等於幾
答:2 << 3
24.兩個(gè)對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話(huà)對不對
答:不對,有相同的hash code
在C++中,每個(gè)類(lèi)多有地址。
java也一樣,不過(guò)hash code不是地址,而是一個(gè)標識對象用的。(個(gè)人認為)
每個(gè)對象的hash code是不一樣的,Object的默認hash code記得是按引用地址的。
對于String例外,是按String內容輸出hash code的,這樣可以用equals()來(lái)比較String的
內容是否相等了,而不是地址
在 Java 應用程序執行期間,在同一對象上多次調用 hashCode 方法時(shí),必須一致地返回相同的整數,前提是對象上 equals比較中所用的信息沒(méi)有被修改。從某一應用程序的一次執行到同一應用程序的另一次執行,該整數無(wú)需保持一致。
如果根據 equals(Object) 方法,兩個(gè)對象是相等的,那么在兩個(gè)對象中的每個(gè)對象上調用 hashCode 方法都必須生成相同的整數結果。
以下情況不 是必需的:如果根據 equals(java.lang.Object) 方法,兩個(gè)對象不相等,那么在兩個(gè)對象中的任一對象上調用hashCode 方法必定會(huì )生成不同的整數結果。但是,程序員應該知道,為不相等的對象生成不同整數結果可以提高哈希表的性能。
實(shí)際上,由 Object 類(lèi)定義的 hashCode 方法確實(shí)會(huì )針對不同的對象返回不同的整數。(這一般是通過(guò)將該對象的內部地址轉換成一個(gè)整數來(lái)實(shí)現的,但是 JavaTM 編程語(yǔ)言不需要這種實(shí)現技巧。)
25.當一個(gè)對象被當作參數傳遞到一個(gè)方法后,此方法可改變這個(gè)對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞
答:是值傳遞。Java 編程語(yǔ)言只有值傳遞參數。當一個(gè)對象實(shí)例作為一個(gè)參數被傳遞到方法中時(shí),參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會(huì )改變的.
26.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:witch(expr1)中,expr1是一個(gè)整數表達式。因此傳遞給 switch 和 case 語(yǔ)句的參數應該是 int、 short、 char 或者byte。long,string 都不能作用于swtich
27.ArrayList和Vector的區別,HashMap和Hashtable的區別
答:就ArrayList與Vector主要從二方面來(lái)說(shuō).
一.同步性:Vector是線(xiàn)程安全的,也就是說(shuō)是同步的,而ArrayList是線(xiàn)程序不安全的,不是同步的
二.數據增長(cháng):當需要增長(cháng)時(shí),Vector默認增長(cháng)為原來(lái)一培,而ArrayList卻是原來(lái)的一半
就HashMap與HashTable主要從三方面來(lái)說(shuō)。
一.歷史原因:Hashtable是基于陳舊的Dictionary類(lèi)的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現
二.同步性:Hashtable是線(xiàn)程安全的,也就是說(shuō)是同步的,而HashMap是線(xiàn)程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value
28.GC是什么? 為什么要有GC
答:GC是垃圾收集的意思(Gabage Collection),內存處理是編程人員容易出現問(wèn)題的地方,忘記或者錯誤的內存回收會(huì )導致程序或系統的不穩定甚至崩潰,Java提供的GC功能可以自動(dòng)監測對象是否超過(guò)作用域從而達到自動(dòng)回收內存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內存的顯示操作方法。
29.float型float f=3.4是否正確?
答:不正確。精度不準確,應該用強制類(lèi)型轉換,如下所示:float f=(float)3.4
30.介紹JAVA中的Collection FrameWork(包括如何寫(xiě)自己的數據結構)?
答:Collection FrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素(Elements)
Map提供key到value的映射.
31.抽象類(lèi)與接口?
答:抽象類(lèi)與接口都用于抽象,但是抽象類(lèi)(JAVA中)可以有自己的部分實(shí)現,而接口則完全是一個(gè)標識(同時(shí)有多重繼承的功能)
JAVA類(lèi)實(shí)現序例化的方法是實(shí)現java.io.Serializable接口
Collection框架中實(shí)現比較要實(shí)現Comparable 接口和 Comparator 接口
32.STRING與STRINGBUFFER的區別。
答:STRING的長(cháng)度是不可變的,STRINGBUFFER的長(cháng)度是可變的。如果你對字符串中的內容經(jīng)常進(jìn)行操作,特別是內容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
33.談?wù)刦inal, finally, finalize的區別
答:final—修飾符(關(guān)鍵字)如果一個(gè)類(lèi)被聲明為final,意味著(zhù)它不能再派生出新的子類(lèi),不能作為父類(lèi)被繼承。因此一個(gè)類(lèi)不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally—再異常處理時(shí)提供 finally 塊來(lái)執行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì )執行,然后控制就會(huì )進(jìn)入 finally 塊(如果有的話(huà))
finalize—方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對象沒(méi)有被引用時(shí)對這個(gè)對象調用的。它是在 Object 類(lèi)中定義的,因此所有的類(lèi)都繼承了它。子類(lèi)覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個(gè)對象調用的
34.面向對象的特征有哪些方面
答:主要有以下四方面:
1.抽象:
抽象就是忽略一個(gè)主題中與當前目標無(wú)關(guān)的那些方面,以便更充分地注意與當前目標有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細節。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數據抽象。
2.繼承:
繼承是一種聯(lián)結類(lèi)的層次模型,并且允許和鼓勵類(lèi)的重用,它提供了一種明確表述共性的方法。對象的一個(gè)新類(lèi)可以從現有的類(lèi)中派生,這個(gè)過(guò)程稱(chēng)為類(lèi)繼承。新類(lèi)繼承了原始類(lèi)的特性,新類(lèi)稱(chēng)為原始類(lèi)的派生類(lèi)(子類(lèi)),而原始類(lèi)稱(chēng)為新類(lèi)的基類(lèi)(父類(lèi))。派生類(lèi)可以從它的基類(lèi)那里繼承方法和實(shí)例變量,并且類(lèi)可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過(guò)程和數據包圍起來(lái),對數據的訪(fǎng)問(wèn)只能通過(guò)已定義的界面。面向對象計算始于這個(gè)基本概念,即現實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過(guò)一個(gè)受保護的接口訪(fǎng)問(wèn)其他對象。
4. 多態(tài)性:
多態(tài)性是指允許不同類(lèi)的對象對同一消息作出響應。多態(tài)性包括參數化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應用程序函數同名問(wèn)題。
35.String是最基本的數據類(lèi)型嗎
答:基本數據類(lèi)型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類(lèi)是final類(lèi)型的,因此不可以繼承這個(gè)類(lèi)、不能修改這個(gè)類(lèi)。為了提高效率節省空間,我們應該用StringBuffer類(lèi)
36.int 和 Integer 有什么區別
答:Java 提供兩種不同的類(lèi)型:引用類(lèi)型和原始類(lèi)型(或內置類(lèi)型)。Int是java的原始數據類(lèi)型,Integer是java為int提供的封裝類(lèi)。Java為每個(gè)原始類(lèi)型提供了封裝類(lèi)。原始類(lèi)型封裝類(lèi),booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble引用類(lèi)型和原始類(lèi)型的行為完全不同,并且它們具有不同的語(yǔ)義。引用類(lèi)型和原始類(lèi)型具有不同的特征和用法,它們包括:大小和速度問(wèn)題,這種類(lèi)型以哪種類(lèi)型的數據結構存儲,當引用類(lèi)型和原始類(lèi)型用作某個(gè)類(lèi)的實(shí)例數據時(shí)所指定的缺省值。對象引用實(shí)例變量的缺省值為 null,而原始類(lèi)型實(shí)例變量的缺省值與它們的類(lèi)型有關(guān).
37.運行時(shí)異常與一般異常有何異同
答:異常表示程序運行過(guò)程中可能出現的非正常狀態(tài),運行時(shí)異常表示虛擬機的通常操作中可能遇到的異常,是一種常見(jiàn)運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運行時(shí)異常。
38.說(shuō)出ArrayList,Vector, LinkedList的存儲性能和特性
答:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實(shí)際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動(dòng)等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線(xiàn)程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現存儲,按序號索引數據需要進(jìn)行前向或后向遍歷,但是插入數據時(shí)只需要記錄本項的前后項即可,所以插入速度較快
39.HashMap和Hashtable的區別
答:HashMap是Hashtable的輕量級實(shí)現(非線(xiàn)程安全的實(shí)現),他們都完成了Map接口,主要區別在于HashMap允許空(null)鍵值(key),由于非線(xiàn)程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類(lèi),而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線(xiàn)程訪(fǎng)問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì )有很大的差異。
40.heap和stack有什么區別****
答:棧是一種線(xiàn)形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的一個(gè)組成元素
41.Java中的異常處理機制的簡(jiǎn)單原理和應用
答:當JAVA程序違反了JAVA的語(yǔ)義規則時(shí),JAVA虛擬機就會(huì )將發(fā)生的錯誤表示為一個(gè)異常。違反語(yǔ)義規則包括2種情況。一種是JAVA類(lèi)庫內置的語(yǔ)義檢查。例如數組下標越界,會(huì )引發(fā)IndexOutOfBoundsException;訪(fǎng)問(wèn)null的對象時(shí)會(huì )引發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴展這種語(yǔ)義檢查,程序員可以創(chuàng )建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類(lèi)。
42.垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機制
答:Java語(yǔ)言中一個(gè)顯著(zhù)的特點(diǎn)就是引入了垃圾回收機制,使c++程序員最頭疼的內存管理的問(wèn)題迎刃而解,它使得Java程序員在編寫(xiě)程序的時(shí)候不再需要考慮內存管理。由于有個(gè)垃圾回收機制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個(gè)單獨的低級別的線(xiàn)程運行,不可預知的情況下對內存堆中已經(jīng)死亡的或者長(cháng)時(shí)間沒(méi)有使用的對象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調用垃圾回收器對某個(gè)對象或所有對象進(jìn)行垃圾回收;厥諜C制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。
43.你所知道的集合類(lèi)都有哪些?主要方法?
答:最常用的集合類(lèi)是 List 和 Map。 List 的具體實(shí)現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類(lèi)型對象的元素列表。 List 適用于按數值索引訪(fǎng)問(wèn)元素的情形。
Map 提供了一個(gè)更通用的元素存儲方法。 Map 集合類(lèi)用于存儲元素對(稱(chēng)作"鍵"和"值"),其中每個(gè)鍵映射到一個(gè)值。
44.描述一下JVM加載class文件的原理機制?
答:JVM中類(lèi)的裝載是由ClassLoader和它的子類(lèi)來(lái)實(shí)現的,Java ClassLoader 是一個(gè)重要的Java運行時(shí)系統組件。它負責在運行時(shí)查找和裝入類(lèi)文件的類(lèi)。
45.排序都有哪幾種方法?請列舉
答: 排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數排序)
快速排序的偽代碼。
/ /使用快速排序方法對a[ 0 :n- 1 ]排序
從a[ 0 :n- 1 ]中選擇一個(gè)元素作為m i d d l e,該元素為支點(diǎn)
把余下的元素分割為兩段left 和r i g h t,使得l e f t中的元素都小于等于支點(diǎn),而right 中的元素都大于等于支點(diǎn)
遞歸地使用快速排序方法對left 進(jìn)行排序
遞歸地使用快速排序方法對right 進(jìn)行排序
所得結果為l e f t + m i d d l e + r i g h t
46.JAVA語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以?huà)伋霎惓?
答:Java通過(guò)面向對象的方法進(jìn)行異常處理,把各種不同的異常進(jìn)行分類(lèi),并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對象,它是Throwable類(lèi)或其它子類(lèi)的實(shí)例。當一個(gè)方法出現異常后便拋出一個(gè)異常對象,該對象中包含有異常信息,調用這個(gè)對象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現的:try、catch、throw、throws和finally。一般情況下是用try來(lái)執行一段程序,如果出現異常,系統會(huì )拋出(throws)一個(gè)異常,這時(shí)候你可以通過(guò)它的類(lèi)型來(lái)捕捉(catch)它,或最后(finally)由缺省處理器來(lái)處理。
用try來(lái)指定一塊預防所有"異常"的程序。緊跟在try程序后面,應包含一個(gè)catch子句來(lái)指定你想要捕捉的"異常"的類(lèi)型。
throw語(yǔ)句用來(lái)明確地拋出一個(gè)"異常"。
throws用來(lái)標明一個(gè)成員函數可能拋出的各種"異常"。
Finally為確保一段代碼不管發(fā)生什么"異常"都被執行一段代碼。
可以在一個(gè)成員函數調用的外面寫(xiě)一個(gè)try語(yǔ)句,在這個(gè)成員函數內部寫(xiě)另一個(gè)try語(yǔ)句保護其他代碼。每當遇到一個(gè)try語(yǔ)句,"異常"的框架就放到堆棧上面,直到所有的try語(yǔ)句都完成。如果下一級的try語(yǔ)句沒(méi)有對某種"異常"進(jìn)行處理,堆棧就會(huì )展開(kāi),直到遇到有處理這種"異常"的try語(yǔ)句。
47.一個(gè)".java"源文件中是否可以包括多個(gè)類(lèi)(不是內部類(lèi))?有什么限制?
答:可以。必須只有一個(gè)類(lèi)名與文件名相同。
48.java中有幾種類(lèi)型的流?JDK為每種類(lèi)型的流提供了一些抽象類(lèi)以供繼承,請說(shuō)出他們分別是哪些類(lèi)?
答:字節流,字符流。字節流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高性能和使用方便。
49.java中會(huì )存在內存泄漏嗎,請簡(jiǎn)單描述。
答:會(huì )。自己實(shí)現堆載的數據結構時(shí)有可能會(huì )出現內存泄露
50.垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動(dòng)通知虛擬機進(jìn)行垃圾回收
答:對于GC來(lái)說(shuō),當程序員創(chuàng )建對象時(shí),GC就開(kāi)始監控這個(gè)對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過(guò)這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象為"不可達"時(shí),GC就有責任回收這些內存空間?梢。程序員可以手動(dòng)執行System.gc(),通知GC運行,但是Java語(yǔ)言規范并不保證GC一定會(huì )執行。
51.靜態(tài)變量和實(shí)例變量的區別?
答:static i = 10; //常量 class A a; a.i =10;//可變
52.什么是java序列化,如何實(shí)現java序列化?*****
答:序列化就是一種用來(lái)處理對象流的機制,所謂對象流也就是將對象的內容進(jìn)行流化?梢詫α骰蟮膶ο筮M(jìn)行讀寫(xiě)操作,也可將流化后的對象傳輸于網(wǎng)絡(luò )之間。序列化是為了解決在對對象流進(jìn)行讀寫(xiě)操作時(shí)所引發(fā)的問(wèn)題。
序列化的實(shí)現:將需要被序列化的類(lèi)實(shí)現Serializable接口,該接口沒(méi)有需要實(shí)現的方法,implements Serializable只是為了標注該對象是可被序列化的,然后使用一個(gè)輸出流(如:FileOutputStream)來(lái)構造一個(gè)ObjectOutputStream(對象流)對象,接著(zhù),使用ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數為obj的對象寫(xiě)出(即保存其狀態(tài)),要恢復的話(huà)則用輸入流。
53.是否可以從一個(gè)static方法內部發(fā)出對非static方法的調用?
答:不可以,如果其中包含對象的method();不能保證對象初始化.
54.寫(xiě)clone()方法時(shí),通常都有一行代碼,是什么?
答:Clone 有缺省行為,super.clone();他負責產(chǎn)生正確大小的空間,并逐位復制。
55.在JAVA中,如何跳出當前的多重嵌套循環(huán)?
答:用break; return 方法。
56.List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?
答:List 以特定次序來(lái)持有元素,可有重復元素。Set 無(wú)法擁有重復元素,內部排序。Map 保存key-value值,value可多值。
57.說(shuō)出一些常用的類(lèi),包,接口,請各舉5個(gè)
答:常用的類(lèi):BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql
常用的接口:Remote List Map Document NodeList
58.描述使用JDBC連接數據庫的過(guò)程
更多相關(guān)java筆試題目分享: 中興軟件筆試題及答案 恒生電子2014最新筆試題目 2015年普通話(huà)水平測試題 java基礎筆試題
Java面試題集 2015校園招聘JAVA筆試題 JAVA常見(jiàn)面試筆試題及解答(精華) 關(guān)于Javascript之AJAX的基礎知識筆試題目
10個(gè)經(jīng)典的Java面試筆試題集合 2014支付寶JAVA筆試題 最新關(guān)于IBM Java的筆試題附答案
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:obdc:mydb";
Connection con = DriverManager.getConnection(url);
Statement stmt = con.createStatement();
ResultSet rs = stmt.execte("select * from mytable");
59.什么是JNDI?
java命名目錄接口
60.Java 的通信編程,編程題(或問(wèn)答),用JAVA SOCKET編程,讀服務(wù)器幾個(gè)字符,再寫(xiě)入本地顯示?
答:Server端程序:
package test;
import java.net.*;
import java.io.*;
public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
try
{
ss=new ServerSocket(10000);
while(true)
{
socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":"+socket.getLocalPort();
System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line = in.readLine();
System.out.println("Cleint send is :" + line);
out = new PrintWriter(socket.getOutputStream(),true);
out.println("Your Message Received!");
out.close();
in.close();
socket.close();
}
}catch (IOException e)
{
out.println("wrong");
}
}
public static void main(String[] args)
{
new Server();
}
};
Client端程序:
package test;
import java.io.*;
import java.net.*;
public class Client
{
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
{
try
{
System.out.println("Try to Connect to 127.0.0.1:10000");
socket = new Socket("127.0.0.1",10000);
System.out.println("The Server Connected!");
System.out.println("Please enter some Character:");
BufferedReader line = new BufferedReader(new
InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOException e)
{
out.println("Wrong");
}
}
public static void main(String[] args)
{
new Client();
}
};
61. 線(xiàn)程的基本概念、線(xiàn)程的本狀態(tài)以及狀態(tài)之間的關(guān)系
•新建 (Born) : 新建的線(xiàn)程處于新建狀態(tài)
•就緒 (Ready) : 在創(chuàng )建線(xiàn)程后,它將處于就緒狀態(tài),等待 start() 方法被調用
•運行 (Running) : 線(xiàn)程在開(kāi)始執行時(shí)進(jìn)入運行狀態(tài)
•睡眠 (Sleeping) : 線(xiàn)程的執行可通過(guò)使用 sleep() 方法來(lái)暫時(shí)中止。在睡眠后,線(xiàn)程將進(jìn)入就緒狀態(tài)
•等待 (Waiting) : 如果調用了 wait() 方法,線(xiàn)程將處于等待狀態(tài)。用于在兩個(gè)或多個(gè)線(xiàn)程并發(fā)運行時(shí)。
•掛起 (Suspended) : 在臨時(shí)停止或中斷線(xiàn)程的執行時(shí),線(xiàn)程就處于掛起狀態(tài)。
•恢復 (Resume) : 在掛起的線(xiàn)程被恢復執行時(shí),可以說(shuō)它已被恢復。
•阻塞 (Blocked) – 在線(xiàn)程等待一個(gè)事件時(shí)(例如輸入/輸出操作),就稱(chēng)其處于阻塞狀態(tài)。
•死亡 (Dead) – 在 run() 方法已完成執行或其 stop() 方法被調用之后,線(xiàn)程就處于死亡狀態(tài)。
串行化的注意事項以及如何實(shí)現串行化答:如果有循環(huán)引用是不可以串行化的。對象輸出流的WriteObject方法和 對象輸入流的ReadObect 方法
62.內部類(lèi)要點(diǎn)?
靜態(tài)內部類(lèi)可以有靜態(tài)成員,而非靜態(tài)內部類(lèi)則不能有靜態(tài)成員。
靜態(tài)內部類(lèi)的非靜態(tài)成員可以訪(fǎng)問(wèn)外部類(lèi)的靜態(tài)變量,而不可訪(fǎng)問(wèn)外部類(lèi)的非靜態(tài)變量。
非靜態(tài)內部類(lèi)的非靜態(tài)成員可以訪(fǎng)問(wèn)外部類(lèi)的非靜態(tài)變量。
63.java中有幾種方法可以實(shí)現一個(gè)線(xiàn)程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?
答:有兩種實(shí)現方法,分別是繼承Thread類(lèi)與實(shí)現Runnable接口
用synchronized關(guān)鍵字修飾同步方法
反對使用stop(),是因為它不安全。它會(huì )解除由線(xiàn)程獲取的所有鎖定,而且如果對象處于一種不連貫狀態(tài),那么其他線(xiàn)程能在那種狀態(tài)下檢查和修改它們。結果很難檢查出真正的問(wèn)題所在。suspend()方法容易發(fā)生死鎖。調用suspend()的時(shí)候,目標線(xiàn)程會(huì )停下來(lái),但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線(xiàn)程都不能訪(fǎng)問(wèn)鎖定的資源,除非被"掛起"的線(xiàn)程恢復運行。對任何線(xiàn)程來(lái)說(shuō),如果它們想恢復目標線(xiàn)程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì )造成死鎖。所以不應該使用suspend(),而應在自己的Thread類(lèi)中置入一個(gè)標志,指出線(xiàn)程應該活動(dòng)還是掛起。若標志指出線(xiàn)程應該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標志指出線(xiàn)程應當恢復,則用一個(gè)notify()重新啟動(dòng)線(xiàn)程。
64.sleep() 和 wait() 有什么區別?
答:sleep是線(xiàn)程類(lèi)(Thread)的方法,導致此線(xiàn)程暫停執行指定時(shí)間,給執行機會(huì )給其他線(xiàn)程,但是監控狀態(tài)依然保持,到時(shí)后會(huì )自動(dòng)恢復。調用sleep不會(huì )釋放對象鎖。
wait是Object類(lèi)的方法,對此對象調用wait方法導致本線(xiàn)程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線(xiàn)程才進(jìn)入對象鎖定池準備獲得對象鎖進(jìn)入運行狀態(tài)。
65.同步和異步有何異同,在什么情況下分別使用他們?舉例說(shuō)明。
答:如果數據將在線(xiàn)程間共享。例如正在寫(xiě)的數據以后可能被另一個(gè)線(xiàn)程讀到,或者正在讀的數據可能已經(jīng)被另一個(gè)線(xiàn)程寫(xiě)過(guò)了,那么這些數據就是共享數據,必須進(jìn)行同步存取。
當應用程序在對象上調用了一個(gè)需要花費很長(cháng)時(shí)間來(lái)執行的方法,并且不希望讓程序等待方法的返回時(shí),就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。
66.啟動(dòng)一個(gè)線(xiàn)程是用run()還是start()?
答:?jiǎn)?dòng)一個(gè)線(xiàn)程是調用start()方法,使線(xiàn)程所代表的虛擬處理機處于可運行狀態(tài),這意味著(zhù)它可以由JVM調度并執行。這并不意味著(zhù)線(xiàn)程就會(huì )立即運行。run()方法可以產(chǎn)生必須退出的標志來(lái)停止一個(gè)線(xiàn)程。
67.當一個(gè)線(xiàn)程進(jìn)入一個(gè)對象的一個(gè)synchronized方法后,其它線(xiàn)程是否可進(jìn)入此對象的其它方法?
答:不能,一個(gè)對象的一個(gè)synchronized方法只能由一個(gè)線(xiàn)程訪(fǎng)問(wèn)。
68.請說(shuō)出你所知道的線(xiàn)程同步的方法。
答:wait():使一個(gè)線(xiàn)程處于等待狀態(tài),并且釋放所持有的對象的lock。
sleep():使一個(gè)正在運行的線(xiàn)程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調用此方法要捕捉InterruptedException異常。
notify():喚醒一個(gè)處于等待狀態(tài)的線(xiàn)程,注意的是在調用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線(xiàn)程,而是由JVM確定喚醒哪個(gè)線(xiàn)程,而且不是按優(yōu)先級。
Allnotity():喚醒所有處入等待狀態(tài)的線(xiàn)程,注意并不是給所有喚醒線(xiàn)程一個(gè)對象的鎖,而是讓它們競爭。
69.多線(xiàn)程有幾種實(shí)現方法,都是什么?同步有幾種實(shí)現方法,都是什么?
答:多線(xiàn)程有兩種實(shí)現方法,分別是繼承Thread類(lèi)與實(shí)現Runnable接口
同步的實(shí)現方面有兩種,分別是synchronized,wait與notify
70.線(xiàn)程的基本概念、線(xiàn)程的基本狀態(tài)以及狀態(tài)之間的關(guān)系
答:線(xiàn)程指在程序執行過(guò)程中,能夠執行程序代碼的一個(gè)執行單位,每個(gè)程序至少都有一個(gè)線(xiàn)程,也就是程序本身。
Java中的線(xiàn)程有四種狀態(tài)分別是:運行、就緒、掛起、結束
71.簡(jiǎn)述synchronized和java.util.concurrent.locks.Lock的異同 ?
答:主要相同點(diǎn):Lock能完成synchronized所實(shí)現的所有功能
主要不同點(diǎn):Lock有比synchronized更精確的線(xiàn)程語(yǔ)義和更好的性能。synchronized會(huì )自動(dòng)釋放鎖,而Lock一定要求程序員手工釋放,并且必須在finally從句中釋放。
jsp筆試
1.jsp有哪些內置對象?作用分別是什么?
答:JSP共有以下9種基本內置組件(可與ASP的6種內部組件相對應):
request 用戶(hù)端請求,此請求會(huì )包含來(lái)自GET/POST請求的參數
response 網(wǎng)頁(yè)傳回用戶(hù)端的回應
pageContext 網(wǎng)頁(yè)的屬性是在這里管理
session 與請求有關(guān)的會(huì )話(huà)期
application servlet 正在執行的內容
out 用來(lái)傳送回應的輸出
config servlet的構架部件
page JSP網(wǎng)頁(yè)本身
exception 針對錯誤網(wǎng)頁(yè),未捕捉的例外
2.jsp有哪些動(dòng)作?作用分別是什么?
答:JSP共有以下6種基本動(dòng)作
jsp:include:在頁(yè)面被請求的時(shí)候引入一個(gè)文件。
jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。
jsp:setProperty:設置JavaBean的屬性。
jsp:getProperty:輸出某個(gè)JavaBean的屬性。
jsp:forward:把請求轉到一個(gè)新的頁(yè)面。
jsp:plugin:根據瀏覽器類(lèi)型為Java插件生成OBJECT或EMBED標記
4.JSP中動(dòng)態(tài)INCLUDE與靜態(tài)INCLUDE的區別?
答:動(dòng)態(tài)INCLUDE用jsp:include動(dòng)作實(shí)現
它總是會(huì )檢查所含文件中的變化,適合用于包含動(dòng)態(tài)頁(yè)面,并且可以帶參數
靜態(tài)INCLUDE用include偽碼實(shí)現,但不會(huì )檢查所含文件的變化,適用于包含靜態(tài)頁(yè)面
5.兩種跳轉方式分別是什么?有什么區別?
答:有兩種,分別為:
前者頁(yè)面不會(huì )轉向include所指的頁(yè)面,只是顯示該頁(yè)的結果,主頁(yè)面還是原來(lái)的頁(yè)面。執行完后還會(huì )回來(lái),相當于函數調用。并且可以帶參數.后者完全轉向新頁(yè)面,不會(huì )再回來(lái)。相當于go to 語(yǔ)句。
6.JSP的內置對象及方法。
答:request表示HttpServletRequest對象。它包含了有關(guān)瀏覽器請求的信息,并且提供了幾個(gè)用于獲取cookie, header,和session數據的有用的方法。
response表示HttpServletResponse對象,并提供了幾個(gè)用于設置送回 瀏覽器的響應的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向瀏覽器回送輸出結果。
pageContext表示一個(gè)javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對象的API,并且包裝了通用的servlet相關(guān)功能的方法。
session表示一個(gè)請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶(hù)的狀態(tài)信息
applicaton 表示一個(gè)javax.servle.ServletContext對象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一個(gè)javax.servlet.ServletConfig對象。該對象用于存取servlet實(shí)例的初始化參數。
page表示從該頁(yè)面產(chǎn)生的一個(gè)servlet實(shí)例
servlet筆試題目
1.說(shuō)一說(shuō)Servlet的生命周期?
答:servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理請求以及服務(wù)結束。這個(gè)生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。 Servlet被服務(wù)器實(shí)例化后,容器運行其init方法,請求到達時(shí)運行其service方法,service方法自動(dòng)派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務(wù)器決定將實(shí)例銷(xiāo)毀的時(shí)候調用其destroy方法。
與cgi的區別在于servlet處于服務(wù)器進(jìn)程中,它通過(guò)多線(xiàn)程方式運行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請求,并且其實(shí)例一般不會(huì )銷(xiāo)毀,而CGI對每個(gè)請求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷(xiāo)毀,所以效率上低于servlet。
2.JAVA SERVLET API中forward() 與redirect()的區別?
答:前者僅是容器中控制權的轉向,在客戶(hù)端瀏覽器地址欄中不會(huì )顯示出轉向后的地址;后者則是完全的跳轉,瀏覽器將會(huì )得到跳轉的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿(mǎn)足需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。
3.Servlet的基本架構
答:
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}
4.什么情況下調用doGet()和doPost()?
答:Jsp頁(yè)面中的form標簽里的method屬性為get時(shí)調用doGet(),為post時(shí)調用doPost()。
5.servlet的生命周期
答:web容器加載servlet,生命周期開(kāi)始。通過(guò)調用servlet的init()方法進(jìn)行servlet的初始化。通過(guò)調用service()方法實(shí)現,根據請求的不同調用不同的do***()方法。結束服務(wù),web容器調用servlet的destroy()方法。
6.如何現實(shí)servlet的單線(xiàn)程模式
答:
7. 頁(yè)面間對象傳遞的方法
答:request,session,application,cookie等
8.四種會(huì )話(huà)跟蹤技術(shù)
答:會(huì )話(huà)作用域ServletsJSP 頁(yè)面描述
page否是代表與一個(gè)頁(yè)面相關(guān)的對象和屬性。一個(gè)頁(yè)面由一個(gè)編譯好的 Java servlet 類(lèi)(可以帶有任何的 include 指令,但是沒(méi)有 include 動(dòng)作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁(yè)面
request是是代表與 Web 客戶(hù)機發(fā)出的一個(gè)請求相關(guān)的對象和屬性。一個(gè)請求可能跨越多個(gè)頁(yè)面,涉及多個(gè) Web 組件(由于 forward 指令和 include 動(dòng)作的關(guān)系)
session是是代表與用于某個(gè) Web 客戶(hù)機的一個(gè)用戶(hù)體驗相關(guān)的對象和屬性。一個(gè) Web 會(huì )話(huà)可以也經(jīng)常會(huì )跨越多個(gè)客戶(hù)機請求
application是是代表與整個(gè) Web 應用程序相關(guān)的對象和屬性。這實(shí)質(zhì)上是跨越整個(gè) Web 應用程序,包括多個(gè)頁(yè)面、請求和會(huì )話(huà)的一個(gè)全局作用域
10.我們在web應用開(kāi)發(fā)過(guò)程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串?
答:
Public String translate (String str) {
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
11.Servlet執行時(shí)一般實(shí)現哪幾個(gè)方法?
答:
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
12.說(shuō)出數據連接池的工作機制是什么?
答:J2EE服務(wù)器啟動(dòng)時(shí)會(huì )建立一定數量的池連接,并一直維持不少于此數目的池連接?蛻(hù)端程序需要連接時(shí),池驅動(dòng)程序會(huì )返回一個(gè)未使用的池連接并將其表記為忙。如果當前沒(méi)有空閑連接,池驅動(dòng)程序就新建一定數量的連接,新建連接的數量有配置參數決定。當使用的池連接調用完成后,池驅動(dòng)程序將此連接表記為空閑,其他調用就可以使用這個(gè)連接。
13.Class.forName的作用?為什么要用?
答:調用該訪(fǎng)問(wèn)返回一個(gè)以字符串指定類(lèi)名的類(lèi)的對象。
【2016最新Java筆試題集錦】相關(guān)文章:
2016最新Java認證筆試題及答案11-04
2016最新java考試題庫及答案10-04
2016年JAVA面試題11-07
2016最新java題庫及答案11-14
2016年Java筆試題及答案09-10
2016年Java認證考試題10-19
最新java面試題及答案08-20
2016年java考試試題及答案09-17