- 相關(guān)推薦
java開發(fā)面試技巧方法
篇一:Java開發(fā)工程師面試題總結(jié)
JAVA開發(fā)工程師面試題總結(jié)--JAVASE部分
1.談?wù)刦inal,finally,finalize的區(qū)別?
final是Java的一個關(guān)鍵字,用于定義不能被繼承的類,不能被覆寫的方法,常量。 finally是Java的一個關(guān)鍵字,是異常處理操作的統(tǒng)一出口。
finalize是Object類中所提供的一個方法,用于在對象回收之前進(jìn)行收尾操作。
2.請解釋Java實(shí)現(xiàn)可移植性的原理
Java程序最終通過字節(jié)碼文件運(yùn)行,運(yùn)行的時(shí)候字節(jié)碼需要JVM的支持,但是在不同的操作系統(tǒng)上有不同JVM,程序不用關(guān)系操作系統(tǒng),只關(guān)心JVM,只要JVM不改變,程序可以在操作系統(tǒng)間任意移植。
3.請解釋path和classpath的區(qū)別?
path是windows的環(huán)境屬性,用于指定可執(zhí)行命令的路徑
classpath是指在java程序執(zhí)行的時(shí)候,用于指定類的加載路徑
4.請說明下JAVA中的幾個特殊關(guān)鍵字(了解,一般面試面這個問題的都是一些煞筆公司)
未使用到的關(guān)鍵字:goto、const
有特殊含義的關(guān)鍵字:null、true、false
JDK1.4之后增加了一個assert關(guān)鍵字
JDK1.5之后增加了一個enum關(guān)鍵字
5.請解釋JAVA中的數(shù)據(jù)類型的劃分,并說出其默認(rèn)值 基本數(shù)據(jù)類型:
數(shù)值型:
整型:byte、short、int、long; 0
浮點(diǎn)型:float、double; 0
字符型:char 空字符:’u0000’
布爾型:boolean false
引用數(shù)據(jù)類型:數(shù)組、類、接口 null
6.請解釋&和&&、|和||的區(qū)別
&(普通與)和|(普通或)指的是所有條件都進(jìn)行判斷;
&&(短路與)如果前面的條件不滿足,則后面不再進(jìn)行判斷,||(短路或)如果前面的條件滿足則后面不再判斷;
在開發(fā)之中為了性能的提高,主要使用短路與和短路或操作;
&和|除了用于邏輯運(yùn)算之外,也可以進(jìn)行位運(yùn)算的操作;
7.請解釋String類的兩種比較方式
在String類中可以使用“==”和equals()兩種操作來進(jìn)行字符串的比較
“==”比較的是兩個字符串的內(nèi)存地址數(shù)值,屬于數(shù)值比較
equals()是String類中提供的一個方法,用于字符串內(nèi)容的比較,最簡單的做法就是比較字符串永遠(yuǎn)使用equals()方法就行了
8.請解釋String對象的兩種實(shí)例化方式的區(qū)別
首先String對象的實(shí)例化方式有兩種:一種是直接賦值,另外一種是通過構(gòu)造方法完成
直接賦值:只開辟一個堆內(nèi)存空間,而且采用了共享設(shè)計(jì)模式,可以自動入池,以備下次對象繼續(xù)使用
構(gòu)造方法:會開辟兩快內(nèi)存空間,其中有一塊空間將成為垃圾,而且不會自動入池,可以使用intern()方法進(jìn)行手工入池
從開發(fā)角度來說,很明顯使用直接賦值的方式會更好一些
9.請談?wù)劮椒ǖ闹剌d和覆寫的區(qū)別
首先重載和覆寫都是面向?qū)ο蠖鄳B(tài)性的一個體現(xiàn)
重載
單詞:OverLoading
概念:方法名稱相同,參數(shù)的類型或個數(shù)不同
范圍:發(fā)生在一個類之中
權(quán)限:重載的時(shí)候沒有權(quán)限的限制
覆寫
單詞:Override
概念:方法名稱、返回值、參數(shù)的個數(shù)及類型全部相同
范圍:發(fā)生在繼承關(guān)系中
權(quán)限:子類覆寫的方法不能擁有比父類更嚴(yán)格的訪問控制權(quán)限
重載的時(shí)候可以返回值類型不相同,但是沒有任何意義
10.請談?wù)則his和super的區(qū)別
this
屬性:this.屬性表示的是找到本類的屬性,如果本類沒有找到則繼續(xù)查找父類 方法:this方法()表示找到本類的方法,如果本類沒有找到則繼續(xù)查找父類 構(gòu)造:必須放在構(gòu)造方法的首行,不能與super關(guān)鍵字同時(shí)出現(xiàn)
特殊:表示當(dāng)前對象
super
屬性:super.屬性直接在子類之中查找父類中的指定屬性,不在查找子類本身 方法:super.方法()直接在子類之中查找父類中的指定方法,不在查找子類本身 構(gòu)造:必須放在構(gòu)造方法首行,不能與this關(guān)鍵字同時(shí)出現(xiàn)
在開發(fā)之中使用this和super可以明確的劃分出子類和父類之間的操作
11.請解釋Collection和Collections的關(guān)系
兩者之間在定義上沒有直接的關(guān)系
Collection是單值集合的操作最大父接口
Collections只是一個集合的工具操作類
12.為什么構(gòu)造方法的定義上不寫返回值類型,如果不返回寫一個void不也可以嗎
如果構(gòu)造方法上寫了void的話,則表示的就是一個普通方法了,普通方法是在對象實(shí)例化之后調(diào)用的,而構(gòu)造方法是在對象實(shí)例化的時(shí)候同時(shí)調(diào)用的
13.請解釋Error和Exception的區(qū)別
Error:表示的是JVM出錯,即,程序還沒有運(yùn)行時(shí)所發(fā)生的錯誤,用戶無法處理; Exception:表示程序運(yùn)行時(shí)發(fā)生的錯誤,用戶可以處理;
14.請解釋String與StringBuffer的區(qū)別,分別在什么時(shí)候用 String的內(nèi)容不能改變(改變的是地址的指向),而StringBuffer的內(nèi)容是可以改變的 String類和StringBuffer類中定義的方法可以很好的實(shí)現(xiàn)互補(bǔ)
從開發(fā)角度來說,大部分情況使用的都是String類,很少使用StringBuffer,使用StringBuffer只有一個前提,當(dāng)字符串的內(nèi)容需要不斷的修改對象的時(shí)候
15.請解釋throw和throws的區(qū)別
throw表示人為的進(jìn)行異常拋出,手工拋出異常
throws表示:用于方法聲明上,表示一個方法不處理異常,而是交給被調(diào)用處處理
16.使用char型數(shù)據(jù)能否表示一個漢字
首先一個漢字占2個字節(jié),而UNICODE編碼也是16位的,java又是采用UNICODE編碼,但是保存漢字,語言必須是中文才可以保存
17.是否可以繼承String類
不可以,因?yàn)镾tring類是final類,不可以被繼承
18.抽象類可以有構(gòu)造方法嗎
可以有構(gòu)造方法,而且抽象類中的子類實(shí)例化對象的時(shí)候也依然符合子類對象實(shí)例化的過程,先調(diào)用父類的構(gòu)造方法,為父類的屬性初始化,而后調(diào)用子類自己的構(gòu)造方法,所以抽象類中的屬性,static屬性,常量等都是可以定義的
19.抽象類中可以沒有抽象方法嗎
可以沒有抽象方法,盡管沒有抽象方法,也不能直接使用關(guān)鍵字new實(shí)例化對象
20.一個抽象類中能否包含內(nèi)部類或內(nèi)部抽象類
可以
21.一個抽象類能否使用static 關(guān)鍵字聲明
在外部的抽象類肯定不能使用static關(guān)鍵字
在內(nèi)部抽象類中使用static,則表示外部類,則可以使用
22.一個抽象類能否使用final聲明
不能,final定義的類不能有子類,而抽象類必須有子類
23.請解釋多線程的兩種實(shí)例化方式
多線程的兩種實(shí)現(xiàn)方式是繼承Thread類和實(shí)現(xiàn)Runnable接口,不管使用何種方式都要覆寫run()方法
繼承Thread類與實(shí)現(xiàn)Runnable接口相比會有當(dāng)繼承的局限
Thread類也是Runnablee接口的子類,不管通過何種方式實(shí)現(xiàn)多線程,最終多需要依靠Thread類的start()方法啟動
使用Runnablee接口可以更加清楚的表示出數(shù)據(jù)庫共享的概念
24.多個線程操作同一資源的時(shí)候需要注意什么?會帶來那些問題 多個線程操作同一資源的時(shí)候必須考慮到同步,但是過多的同步會造成死鎖
25.抽象類和接口的區(qū)別
抽象類
關(guān)鍵字:abstract class
組成:屬性,(全局)常量,構(gòu)造方法,普通方法,(抽象方法),static方法 權(quán)限:可以使用各種權(quán)限,private,public等
使用:抽象類必須有子類,子類必須繼承抽象類
子類關(guān)鍵字:class 子類 extends 父類
與接口的關(guān)系:一個抽象類可以實(shí)現(xiàn)多個接口
設(shè)計(jì)模式:模板設(shè)計(jì)
局限:子類只能繼承一個父類,有單繼承限制
接口:
關(guān)鍵字:interface
組成:全局常量,抽象方法
權(quán)限:所有權(quán)限必須都是public
使用:接口必須有子類,子類必須實(shí)現(xiàn)接口
子類關(guān)鍵字:class 子類 implements 接口A,接口B
與抽象類的關(guān)系:接口不能繼承抽象類,但是可以繼承多個接口
設(shè)計(jì)模式:工廠設(shè)計(jì)模式,代理設(shè)計(jì)模式
局限:子類可以實(shí)現(xiàn)多個接口,避免了單繼承
當(dāng)接口和抽象類都能滿足的情況下,優(yōu)先使用接口,因?yàn)榻涌诒苊饬藛卫^承的局限性,便于擴(kuò)展
接口與抽象類合作適配器設(shè)計(jì)模式
26.請解釋下JAVA中的垃圾回收機(jī)制
垃圾收集機(jī)制指的是可以對無用的內(nèi)存空間進(jìn)行釋放,而對垃圾的收集采用兩種方式 第一種:不定期的進(jìn)行自動的垃圾回收,不可控制的
第二種:Runtime中的gc()方法回收,可控的
27.作用域public,private,protected以及不寫時(shí)的區(qū)別
28.如果現(xiàn)在父類中的方法是private,子類中覆寫此方法為default權(quán)限可以嗎?
從概念上來說是可以的,因?yàn)楦割愂莗rivate,子類覆寫之后是default,而default權(quán)限>private,但是從實(shí)際角度來說,這種操作是不可能實(shí)現(xiàn)的,因?yàn)閜rivate比較特殊
篇二:Java軟件開發(fā)工程師面試題寶典
1、了解j2EE規(guī)范,選擇幾點(diǎn)進(jìn)行重點(diǎn)消化。
2、異常分類,一般性異常和運(yùn)行期異常,異常捕獲。
3、了解spring mvc框架,和struts mvc框架的區(qū)別。
4、要對spring和ibatis非常熟悉,必須,熟知。
5、應(yīng)適當(dāng)關(guān)注需求分析和產(chǎn)品方面的知識。
6、了解多線程相關(guān)知識
7、了解java5以及java6新特性
8、熟悉linux相關(guān)命令操作。
9、工廠模式,簡單工廠、抽象工廠的區(qū)別
10、動態(tài)代理模式
11、
一、String,StringBuffer, StringBuilder 的區(qū)別是什么?String為什么是不可變的?
二、VECTOR,ARRAYLIST, LINKEDLIST的區(qū)別是什么?
三、HASHTABLE, HASGMAQ,TreeMap區(qū)別
四、ConcurrentMap和HashMap的區(qū)別
五、Tomcat,apache,jboss的區(qū)別
六、GET POST區(qū)別
七、SESSION, COOKIE區(qū)別
八、Servlet的生命周期
九、HTTP 報(bào)文包含內(nèi)容
十、Statement與PreparedStatement的區(qū)別,什么是SQL注入,如何防止SQL注入 十一、redirect, foward區(qū)別
十二、關(guān)于JAVA內(nèi)存模型,一個對象(兩個屬性,四個方法)實(shí)例化100次,現(xiàn)在內(nèi)存中的存儲狀態(tài),
幾個對象,幾個屬性,幾個方法。
十三、談?wù)凥ibernate的理解,一級和二級緩存的作用,在項(xiàng)目中Hibernate都是怎么使用緩存的
十四、反射講一講,主要是概念,都在哪需要反射機(jī)制,反射的性能,如何優(yōu)化 十五、談?wù)凥ibernate與Ibatis的區(qū)別,哪個性能會更高一些
十六、對Spring的理解,項(xiàng)目中都用什么?怎么用的?對IOC、和AOP的理解及實(shí)現(xiàn)原理
十七、線程同步,并發(fā)操作怎么控制
十八、描述struts的工作流程。
十九、Tomcat的session處理,如果讓你實(shí)現(xiàn)一個tomcatserver,如何實(shí)現(xiàn)session機(jī)制
二十、關(guān)于Cache(Ehcache,Memcached)
二一、sql的優(yōu)化相關(guān)問題
二二、oracle中 rownum與rowid的理解,一千條記錄我查200到300的記錄怎么查? 二三、如何分析ORACLE的執(zhí)行計(jì)劃?
二四、 DB中索引原理,種類,使用索引的好處和問題是什么?
二五、JVM垃圾回收實(shí)現(xiàn)原理。垃圾回收的線程優(yōu)先級。
二六、jvm 最大內(nèi)存設(shè)置。設(shè)置的原理。結(jié)合垃圾回收講講。
Java面試寶典2010版
一. Java基礎(chǔ)部分..................................................................................................................... 8
1、一個".java"源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制? ...... 9
2、Java有沒有g(shù)oto ....................................................................................................... 9
3、說說&和&&的區(qū)別。 ............................................................................................... 9
4、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)? .......................................................... 9
5、switch語句能否作用在byte上,能否作用在long上,能否作用在String上 10
6、short s1 = 1; s1 = s1 + 1;有什么錯 short s1 = 1; s1 += 1;有什么錯 ..................... 10
7、char型變量中能不能存貯一個中文漢字為什么 ................................................ 10
8、用最有效率的方法算出2乘以8等於幾 ............................................................. 10
9、請?jiān)O(shè)計(jì)一個一百億的計(jì)算器 ................................................................................... 11
10、使用final關(guān)鍵字修飾一個變量時(shí),是引用不能變,還是引用的對象不能變?
......................................................................................................................................... 12
11、"=="和equals方法究竟有什么區(qū)別? ................................................................. 12
12、靜態(tài)變量和實(shí)例變量的區(qū)別? ............................................................................. 13
13、是否可以從一個static方法內(nèi)部發(fā)出對非static方法的調(diào)用? ........................ 14
14、Integer與int的區(qū)別 .............................................................................................. 14
15、Math.round(11.5)等於多少 Math.round(-11.5)等於多少 ................................... 14
16、下面的代碼有什么不妥之處 ............................................................................... 14
17、請說出作用域public,private,protected,以及不寫時(shí)的區(qū)別 ........................ 15
18、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型
......................................................................................................................................... 15
19、構(gòu)造器Constructor是否可被override ................................................................ 16
20、接口是否可繼承接口 抽象類是否可實(shí)現(xiàn)(implements)接口 抽象類是否可繼
承具體類(concrete class) 抽象類中是否可以有靜態(tài)的main方法? ...................... 16
21、寫clone()方法時(shí),通常都有一行代碼,是什么? ............................................. 16
22、面向?qū)ο蟮奶卣饔心男┓矫?................................................................................. 16
23、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么? ......................................................................... 18
24、abstract class和interface有什么區(qū)別 ................................................................. 18
25、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是
synchronized .................................................................................................................. 20
26、什么是內(nèi)部類?Static Nested Class 和 Inner Class的不同。 ........................... 20
27、內(nèi)部類可以引用它的包含類的成員嗎?有沒有什么限制? ............................. 22
28、Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可
以implements(實(shí)現(xiàn))interface(接口) ............................................................................ 22
29、super.getClass()方法調(diào)用 .......................................................................... 23
30、String是最基本的數(shù)據(jù)類型嗎 ............................................................................ 23
31、String s = "Hello";s = s + " world!";這兩行代碼執(zhí)行后,原始的String對象中的
內(nèi)容到底變了沒有? ..................................................................................................... 23
32、是否可以繼承String類 ....................................................................................... 24
33、String s = new String("xyz");創(chuàng)建了幾個String Object 二者之間有什么區(qū)別?
......................................................................................................................................... 24
34、String 和StringBuffer的區(qū)別 ............................................................................... 25
35、如何把一段逗號分割的字符串轉(zhuǎn)換成一個數(shù)組 ............................................... 25
36、數(shù)組有沒有l(wèi)ength()這個方法 String有沒有l(wèi)ength()這個方法? .................... 26
37、下面這條語句一共創(chuàng)建了多少個對象:String s="a"+"b"+"c"+"d"; .................. 26
38、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不
會被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后 .................................................... 26
39、下面的程序代碼輸出的結(jié)果是多少? ................................................................. 27
40、final, finally, finalize的區(qū)別。 .............................................................................. 29
41、運(yùn)行時(shí)異常與一般異常有何異同? ..................................................................... 29
42、error和exception有什么區(qū)別 ............................................................................. 29
43、Java中的異常處理機(jī)制的簡單原理和應(yīng)用。 ..................................................... 29
44、請寫出你最常見到的5個runtime exception。 ................................................... 30
45、JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表
什么意義?在try塊中可以拋出異常嗎? .................................................................. 30
46、java中有幾種方法可以實(shí)現(xiàn)一個線程?用什么關(guān)鍵字修飾同步方法 stop()和
suspend()方法為何不推薦使用? ................................................................................. 30
47、sleep() 和 wait() 有什么區(qū)別 ............................................................................. 31
48、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。 ................. 34
49. 下面兩個方法同步嗎?(自己發(fā)明) .................................................................. 34
50、多線程有幾種實(shí)現(xiàn)方法同步有幾種實(shí)現(xiàn)方法 ................................................. 34
51、啟動一個線程是用run()還是start() . .................................................................. 35
52、當(dāng)一個線程進(jìn)入一個對象的一個synchronized方法后,其它線程是否可進(jìn)入此
對象的其它方法 ........................................................................................................... 35
53、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系 ................................. 35
54、簡述synchronized和java.util.concurrent.locks.Lock的異同 ? ........................ 36
55、設(shè)計(jì)4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。
寫出程序。 ..................................................................................................................... 38
56、子線程循環(huán)10次,接著主線程循環(huán)100,接著又回到子線程循環(huán)10次,接著
再回到主線程又循環(huán)100,如此循環(huán)50次,請寫出程序。 .................................... 40
57、介紹Collection框架的結(jié)構(gòu) .................................................................................. 45
58、Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)什么接口 ....................................................... 45
59、ArrayList和Vector的區(qū)別 .................................................................................... 45
60、HashMap和Hashtable的區(qū)別 .............................................................................. 46
61、List 和 Map 區(qū)別 ............................................................................................... 46
62、List, Set, Map是否繼承自Collection接口 ......................................................... 47
63、List、Map、Set三個接口,存取元素時(shí),各有什么特點(diǎn)? ............................. 47
64、說出ArrayList,Vector, LinkedList的存儲性能和特性 ......................................... 48
65、去掉一個Vector集合中重復(fù)的元素 .................................................................... 48
66、Collection 和 Collections的區(qū)別。 ..................................................................... 48
67、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢 是用==還是
equals() 它們有何區(qū)別 .............................................................................................. 48
68、你所知道的集合類都有哪些?主要方法? ......................................................... 49
69、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不
對 ................................................................................................................................... 49
70、TreeSet里面放對象,如果同時(shí)放入了父類和子類的實(shí)例對象,那比較時(shí)使用的是父類的compareTo方法,還是使用的子類的compareTo方法,還是拋異常!
......................................................................................................................................... 50
71、說出一些常用的類,包,接口,請各舉5個 ..................................................... 51
72、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請
說出他們分別是哪些類? ............................................................................................. 51
73、字節(jié)流與字符流的區(qū)別 ......................................................................................... 51
74、什么是java序列化,如何實(shí)現(xiàn)java序列化?或者請解釋Serializable接口的作
用。 ................................................................................................................................. 53
75、描述一下JVM加載class文件的原理機(jī)制 ....................................................... 53
76、heap和stack有什么區(qū)別。 .................................................................................. 53
77、GC是什么 為什么要有GC .............................................................................. 54
78、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。 ............................................. 54
79、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法
主動通知虛擬機(jī)進(jìn)行垃圾回收? ................................................................................. 54
80、什么時(shí)候用assert。 ............................................................................................... 54
81、java中會存在內(nèi)存泄漏嗎,請簡單描述。 ......................................................... 55
82、能不能自己寫個類,也叫java.lang.String? ....................................................... 58
83. Java代碼查錯................................................................................................................... 59
二. 算法與編程 ...................................................................................................................... 63
1、編寫一個程序,將a.txt文件中的單詞與b.txt文件中的單詞交替合并到c.txt文件中,a.txt文件中的單詞用回車符分隔,b.txt文件中用回車或空格進(jìn)行分隔。 . 63
2、編寫一個程序,將d:java目錄下的所有.java文件復(fù)制到d:jad目錄下,并將原
來文件的擴(kuò)展名從.java改為.jad。 .............................................................................. 64
3、編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串,但要保證漢字不被截取半個,如“我ABC”,4,應(yīng)該截取“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出“我ABC”,而不是“我ABC+漢的半個”。
......................................................................................................................................... 66
4、有一個字符串,其中包含中文字符、英文字符和數(shù)字字符,請統(tǒng)計(jì)和打印出各
個字符的個數(shù)。 ............................................................................................................. 67
5、說明生活中遇到的二叉樹,用java實(shí)現(xiàn)二叉樹 .................................................. 68
6、從類似如下的文本文件中讀取出所有的姓名,并打印出重復(fù)的姓名和重復(fù)的次
數(shù),并按重復(fù)次數(shù)排序: ............................................................................................. 73
7、寫一個Singleton出來。 ......................................................................................... 77
8、遞歸算法題1 ............................................................................................................ 79
9、遞歸算法題2 ............................................................................................................ 80
10、排序都有哪幾種方法?請列舉。用JAVA實(shí)現(xiàn)一個快速排序。 ...................... 81
11、有數(shù)組a[n],用java代碼將數(shù)組元素順序顛倒 ................................................. 82
12.金額轉(zhuǎn)換,阿拉伯?dāng)?shù)字的金額轉(zhuǎn)換成中國傳統(tǒng)的形式如:(¥1011)->(一千
零一拾一元整)輸出。 ................................................................................................. 83
三. html&JavaScript&ajax部分 ............................................................................................. 84
1. 判斷第二個日期比第一個日期大 ............................................................................ 84
2. 用table顯示n條記錄,每3行換一次顏色,即1,2,3用紅色字體,4,5,6
用綠色字體,7,8,9用紅顏色字體。 ...................................................................... 85
3、HTML 的 form 提交之前如何驗(yàn)證數(shù)值文本框的內(nèi)容全部為數(shù)字 否則的話提
示用戶并終止提交 ....................................................................................................... 86
4、請寫出用于校驗(yàn)HTML文本框中輸入的內(nèi)容全部為數(shù)字的javascript代碼 .... 86
5、說說你用過那些ajax技術(shù)和框架,說說它們的區(qū)別 .......................................... 87
四. Java web部分 ................................................................................................................... 87
1、Tomcat的優(yōu)化經(jīng)驗(yàn) .................................................................................................. 87
2、HTTP請求的GET與POST方式的區(qū)別 .............................................................. 87
3、解釋一下什么是servlet; .......................................................................................... 87
4、說一說Servlet的生命周期 .................................................................................... 87
5、Servlet的基本架構(gòu) .................................................................................................. 88
6、SERVLET API中forward() 與redirect()的區(qū)別? ............................................... 88
7、什么情況下調(diào)用doGet()和doPost()? ................................................................... 88
8、Request對象的主要方法: ..................................................................................... 88
9、forward 和redirect的區(qū)別 ...................................................................................... 89
10、request.getAttribute() 和 request.getParameter() 有何區(qū)別............................... 89
11. jsp有哪些內(nèi)置對象作用分別是什么 分別有什么方法? ................................ 89
12. jsp有哪些動作作用分別是什么 .......................................................................... 90
13、JSP的常用指令 ...................................................................................................... 90
14. JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別? ............................................. 91
15、兩種跳轉(zhuǎn)方式分別是什么有什么區(qū)別 ............................................................. 91
16、頁面間對象傳遞的方法 ......................................................................................... 91
17、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么? ................. 91
18、MVC的各個部分都有那些技術(shù)來實(shí)現(xiàn)如何實(shí)現(xiàn) ........................................... 91
19、我們在web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,
如何輸出一個某種編碼的字符串? ............................................................................. 92
20.現(xiàn)在輸入n個數(shù)字,以逗號,分開;然后可選擇升或者降序排序;按提交鍵就
在另一頁面顯示按什么排序,結(jié)果為,提供reset .................................................... 92
五. 數(shù)據(jù)庫部分 ...................................................................................................................... 92
1、用兩種方式根據(jù)部門號從高到低,工資從低到高列出每個員工的信息。 ....... 92
2、列出各個部門中工資高于本部門的平均工資的員工數(shù)和部門號,并按部門號排
序..................................................................................................................................... 93
3、存儲過程與觸發(fā)器必須講,經(jīng)常被面試到 ......................................................... 93
4、數(shù)據(jù)庫三范式是什么 ............................................................................................. 95
5、說出一些數(shù)據(jù)庫優(yōu)化方面的經(jīng)驗(yàn) ......................................................................... 96
6、union和union all有什么不同 ............................................................................... 97
7.分頁語句 ...................................................................................................................... 98
8.用一條SQL語句 查詢出每門課都大于80分的學(xué)生姓名................................... 101
9.所有部門之間的比賽組合 ........................................................................................ 102
10.每個月份的發(fā)生額都比101科目多的科目 .......................................................... 102
11.統(tǒng)計(jì)每年每月的信息 .............................................................................................. 104
12.顯示文章標(biāo)題,發(fā)帖人、最后回復(fù)時(shí)間 .............................................................. 105
篇三:Java面試題—WEB開發(fā)必看
以前的收藏,估計(jì)很少有這么全的面試題集了^_^
基礎(chǔ)知識:
1. C++或Java中的異常處理機(jī)制的簡單原理和應(yīng)用。 當(dāng)JAVA程序違反了JAVA的語義規(guī)則時(shí),JAVA虛擬機(jī)就會將發(fā)生的錯誤表示為一個異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置的語義檢查。例如數(shù)組下標(biāo)越界,會引發(fā)IndexOutOfBoundsException;訪問null的對象時(shí)會引發(fā)NullPointerException。另一種情況就是JAVA允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是java.lang.Thowable的子類。
2.Java的接口和C++的虛類的相同和不同處。
由于Java不支持多繼承,而有可能某個類或?qū)ο笠褂梅謩e在幾個類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩,現(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因?yàn)榻涌谥袥]有任何實(shí)現(xiàn)代碼。當(dāng)一個類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是publicstatic,所有方法默認(rèn)情況下是public.一個類可以實(shí)現(xiàn)多個接口。
3.垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。
Java語言中一個顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個垃圾回收機(jī)制,Java中的對象不再有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個單獨(dú)的低級別的線程運(yùn)行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時(shí)間沒有使用的對象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對某個對象或所有對象進(jìn)行垃圾回收;厥諜C(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
4.請說出你所知道的線程同步的方法。
wait():使一個線程處于等待狀態(tài),并且釋放所持有的對象的lock。
sleep():使一個正在運(yùn)行的線程處于睡眠狀態(tài),是一個靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。
notify():喚醒一個處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個等待狀態(tài)的線程,而是由JVM確定喚醒哪個線程,而且不是按優(yōu)先級。
Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個對象的鎖,而是讓它們競爭。
5.請講一講析構(gòu)函數(shù)和虛函數(shù)的用法和作用。
6.Error與Exception有什么區(qū)別?
Error表示系統(tǒng)級的錯誤和程序不必處理的異常,
Exception表示需要捕捉或者需要程序進(jìn)行處理的異常。
7.在java中一個類被聲明為final類型,表示了什么意思?
表示該類不能被繼承,是頂級類。
8.描述一下你最常用的編程風(fēng)格。
9.heap和stack有什么區(qū)別。
棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。
堆是棧的一個組成元素
10.如果系統(tǒng)要使用超大整數(shù)(超過long長度范圍),請你設(shè)計(jì)一個數(shù)據(jù)結(jié)構(gòu)來存儲這種超大型數(shù)字以及設(shè)計(jì)一種算法來實(shí)現(xiàn)超大整數(shù)加法運(yùn)算)。
publicclassBigInt()
{
int[]ArrOne=newArrOne[1000];
StringintString="";
publicint[]Arr(Strings)
{
intString=s;
for(inti=0;i<ArrOne.leght;i++)
{
11.如果要設(shè)計(jì)一個圖形系統(tǒng),請你設(shè)計(jì)基本的圖形元件(Point,Line,Rectangle,Triangle)的簡單實(shí)現(xiàn)
12,談?wù)刦inal,finally,finalize的區(qū)別。
final—修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時(shí)提供finally塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配的catch子句就會執(zhí)行,然后控制就會進(jìn)入finally塊(如果有的話)。
finalize—方法名。Java技術(shù)允許使用finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時(shí)對這個對象調(diào)用的。它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對象之前對這個對象調(diào)用的。
13,AnonymousInnerClass(匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)
匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能extends(繼承)其它類,但一個內(nèi)部類可以作為一個接口,由另一個內(nèi)部類實(shí)現(xiàn)。
14,StaticNestedClass和InnerClass的不同,說得越多越好(面試題有的很籠統(tǒng))。
NestedClass(一般是C++的說法),InnerClass(一般是JAVA的說法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見
http://www.frontfree.net/articles/services/view.aspid=704&page=1
注:靜態(tài)內(nèi)部類(InnerClass)意味著1創(chuàng)建一個static內(nèi)部類的對象,不需要一個外部類對象,2不能從一個static內(nèi)部類的一個對象訪問一個外部類對象
第四,&和&&的區(qū)別。
&是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。
15,HashMap和Hashtable的區(qū)別。
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
HashMap類沒有分類或者排序。它允許一個null鍵和多個null值。
Hashtable類似于HashMap,但是不允許null鍵和null值。它也比HashMap慢,因?yàn)樗峭降摹?/p>
16,Collection和Collections的區(qū)別。
篇四:java_web開發(fā)人員面試題及答案
java 面試題
一.選擇題(每題1分)
1. jsp 有幾個內(nèi)置對象?()(單選)
A 5個 B 6個C9個 D 8個 2.在JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)?()(多選)
A break Breturn C forward D finally
3. 四種會話跟蹤技術(shù),哪個范圍最大?()(單選)
A page B request C session Dapplication
4. java中有幾種方法可以實(shí)現(xiàn)一個線程?()(單選)
A 1種B 2種 C 3種 D 4種
5. 同步有幾種實(shí)現(xiàn)方法()(單選)
A 4種B 2種 C 3種 D 1種 6. xml有哪些解析技術(shù)()(多選)
ADOMBSAXCSTAXD JDOM
7. 下列說法正確的是()(多選) A 構(gòu)造器Constructor可被繼承
BString類不可以繼承 C 判斷兩個對象值相同用“==”
Dchar型變量中能存貯一個中文漢字
8.下面說法錯誤的是()(單選)
A Vector是線程安全的
Bfloat f=3.4是正確的
C StringBuffer的長度是可變的
D StringBuffer的長度是不可變的 9. 下列關(guān)于集合的說法正確的是()(多選)
AList 的具體實(shí)現(xiàn)包括 ArrayList 和 Vector
BMap 集合類用于存儲元素對(稱作"鍵"和"值"),其中每個鍵映射到一個值
C Set的元素是有序的
DHashtable是線程安全的。 10. 下列關(guān)于線程說法正確的是()(多選)
A調(diào)用sleep不會釋放對象鎖。
B調(diào)用wait方法導(dǎo)致本線程放棄對象鎖
C當(dāng)一個線程進(jìn)入一個對象的一個synchronized方法后,其它線程不可進(jìn)入此對象的其它方法
D notify():喚醒全部處于等待狀態(tài)的線程。
11. 給定JSP程序源碼如下,該JSP運(yùn)行后輸出的結(jié)果是()。(單選)
<%int count="1;%">
Count:<%=++count%>
A Count:1BCount:2 C1:2 D Count:
12在J2EE中的一個JSP文件中,有表達(dá)式<%=2+3%>,它將輸出()(單選)
a)2+3b)5c)23d)不會輸出,因?yàn)楸磉_(dá)式是錯誤的
13 在J2EE中,JSTL提供條件標(biāo)簽以支持JSP頁面的各種條件,其中()類似于Java語言的switch語句。(單選)
a)b)c)d)
14. 在進(jìn)行Java Web開發(fā)時(shí),假定一個變量保存在session中,要獲得這個變量的值,可以使用以下()語句。(單選)
a)application.getAttribute(“name”) b)pageContext.getAttribute(“name”)
c)session.getAttribute(“name”)
d)config.getInitParameter(“name”)
15)在J2EE中,編寫Servlet過濾器時(shí),()接口用于調(diào)用過濾器鏈中的下一個過濾器。()(單選)
a)Filterb)FilterConfigc)FilterChaind)Servlet
16) 關(guān)于視圖的描述正確的是() (單選)
a) 視圖是一種特殊的表,它存儲了用戶定制的數(shù)據(jù)。
b) 視圖僅用于用戶進(jìn)行查詢,不可以通過視圖對數(shù)據(jù)進(jìn)行修改。
c) 在sql server中可以通過用T-sql語句來創(chuàng)建,也可以通過企業(yè)管理器。
d) 創(chuàng)建視圖只能操作本機(jī)器上的數(shù)據(jù)庫表。
17)STRUTS框架中,()類在視圖層和控制層之間傳遞HTML表單數(shù)據(jù)。(單選) a) Action b) ActionForwardc) ActionFormd) ActionServlet
18)Struts控制器的主要任務(wù)是接受用戶請求、根據(jù)用戶請求調(diào)用對應(yīng)的模型組件、獲取業(yè)務(wù)邏輯執(zhí)行結(jié)果的根據(jù)處理結(jié)果選擇適合的視圖組件返回給用戶,實(shí)現(xiàn)Struts控制器的類中不包括()。(單選) a)ActionServletb)Actionc) ActionFormd)ActionForward
19)在OOD中,類和接口之間的關(guān)系稱之為()。(單選)
a) 泛化b)實(shí)現(xiàn)c) 關(guān)聯(lián)d) 繼承
20) 以下關(guān)于SessionFactory的說法哪些正確?()(多選)
A) 對于每個數(shù)據(jù)庫事務(wù),應(yīng)該創(chuàng)建一個SessionFactory對象
B) 一個SessionFactory對象對應(yīng)一個數(shù)據(jù)庫存儲源。
C) SessionFactory是重量級的對象,不應(yīng)該隨意創(chuàng)建。如果系統(tǒng)中只有一個數(shù)據(jù)庫存儲源只需要創(chuàng)建一個。
D) SessionFactory的load()方法用于加載持久化對象
21) 關(guān)于AOP錯誤的()(單選)
A)AOP將散落在系統(tǒng)中的“方面”代碼集中實(shí)現(xiàn)
B)AOP有助于提高系統(tǒng)可維護(hù)性
C)AOP已經(jīng)表現(xiàn)出將要替代面向?qū)ο蟮内厔?D)AOP是一種設(shè)計(jì)模式,Spring提供了一種實(shí)現(xiàn)
22) 依賴注入說法正確的(單選)
A)依賴注入的目標(biāo)是在代碼之外管理程序組建間的依賴關(guān)系
B)依賴注入即是“面向接口”的編程
C)依賴注入是面向?qū)ο蠹夹g(shù)的替代品
D)依賴注入的使用會增大程序的規(guī)模
23)以下哪些屬于Session的方法?()(多選)
A)load()
B)save()
C)()
D)update()
E)open()
F)close() 24) 下面那些是Hibernate的查詢方式()(多選)
A) sql B) hql C)Criteria
25) 以下數(shù)據(jù)結(jié)構(gòu)不屬于線性結(jié)構(gòu)的是()(單選)
A) 隊(duì)列 B) 線性表C)二叉樹 D) 棧
26)下列是文件讀寫的類是()(多選)
A)File Reader B) File C)FileWriter D) InputStream
27)數(shù)據(jù)庫技術(shù)中的“臟數(shù)據(jù)',是指()的數(shù)據(jù)。(單選)
A) 錯誤B回返C未提交D未提交的隨后又被撤消
28)在計(jì)算機(jī)中,—個字節(jié)是由多少個二進(jìn)制位組成的() (單選)
A). 4 B). 8 C).16 D). 24
29)設(shè)正x、y均為整型變量,且x=10 y=3,則以下語句printf("%d,%d ",x--,--y); 的輸出結(jié)果是()(單選) A).10,3 B). 9,3 C). 9,2 D).10,2
30) 下列不屬于面向?qū)ο蟮姆椒ㄊ牵ǎ▎芜x)
A).對象 B). 類 C). 繼承 D).過程調(diào)用
二. 填空(每空1分) 1. String s = new String("xyz");創(chuàng)建了____2_個String 對象?
2. Math.round(9.5)等於____10_ Math.round(-9.5)等於______ -9
3. try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會被執(zhí)行,什么時(shí)候被執(zhí)行,在return_________ ( 前還是后?)
4. 如何現(xiàn)實(shí)servlet的單線程模式<%@ page="" isthreadsafe="false">
5. 類變量必須帶的修飾符是 _________static____
6. final類可以修飾在屬性 , 方法 和 ______類_ 前面
7. Java默認(rèn)的包是________________java.lang.* ___
8.Hibernate里面怎樣實(shí)現(xiàn)類與類之間的關(guān)系___________________________表映射_______
9. Socket 編程服務(wù)器端用___________serverSocket_類來創(chuàng)建socket對象
三. 判斷題(每題2分)
1. 依賴注入即是“面向接口”的編程。錯
2. Overload和Override都是java多態(tài)的不同體現(xiàn)形式。對
3. String是最基本的數(shù)據(jù)類型錯
4. 啟動一個線程是用start()對
5. 接口可以繼承接口對
四.簡答題(每題4分)
1.下列程序打印結(jié)果是
int[] arr = {1,3,3,2,8};
String str = “”;
int i=0;
publicvoid doIt(){
for(;i<arr.length;){
if(arr[i]>arr[i+1]){
str=arr[i]+arr[i+1]+str;
break;
} elseif(arr[i]<arr[i+1]){
str=arr[i]+str+arr[i+1];
i++;
continue;
} else{
str+=arr[i];
i++;
}
}
System.out.println(i);
System.out.println(str);
}
i=2;str=5133
2. 將會打印出什么 package test; public class FatherClass
public FatherClass()
{ System.out.println("FatherClass Create"); }
類:package test;import test.FatherClass;
public class ChildClass extends FatherClass public ChildClass() { System.out.println("ChildClass Create"); }
public static void main(String[] args) { FatherClass fc = new FatherClass();
ChildClass cc = new ChildClass(); }}
輸出結(jié)果:
fatherClass Create
fatherClass Create
hildClass Create
3.下列程序?qū)是錯,如果錯請說明原因!
abstract class Name {
private String name;
public abstract boolean isStupidName(String name) {}
abstract method必須以分號結(jié)尾,且不帶花括號
4. 表:table1(FId,Fclass,Fscore),用最高效最簡單的SQL列出各班成績最高的列表,顯示班級,成績兩個字段。
select fclass,max(fscore) from table1 group by fclass,fid
5. 下面程序運(yùn)行結(jié)果是
String[] arr1 ={”a”,”b”,”1″,”c”,”b”};
List lst1 = new ArrayList();
lst1.add(”d”);
Collections.addAll(lst1,arr1);
System.out.println(lst1);
Setset1 = new HashSet();
set1.add(”d”);
Collections.addAll(set1, arr1);
System.out.println(set1);
運(yùn)行結(jié)果:
d, a, b, 1, c, b
篇五:JAVA開發(fā)工程師面試題
一、 概念題
1、 解釋什么是隊(duì)列(queue),什么棧(stack),有何區(qū)別?
隊(duì)列是一種特殊的線性表,他按照先進(jìn)先出的原則存儲數(shù)據(jù)。
棧是一種數(shù)據(jù)結(jié)構(gòu),它按照后進(jìn)先出的原則存儲數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時(shí)候從棧頂開始彈出數(shù)據(jù)。 2、 用C/C++或者Php,或Java,給出例子,解釋什么是異常(exception)?
3、 簡述HashMap、HashSet、HashTable的區(qū)別。 Hashtable類
Hashtable繼承Map接口,實(shí)現(xiàn)一個key-value映射的哈希表。任何非空(non-null)的對象都可作為key或者value。 HashMap類
HashMap和Hashtable類似,不同之處在于HashMap是非同步的,并且允許null,即null value和null key,null key只能有一個。 HashSet類
HashSet繼承Set接口。
Set是一種不包含重復(fù)的元素的Collection。 4、public、protect和private的區(qū)別是什么?
二、 數(shù)據(jù)庫相關(guān)題
試設(shè)計(jì)一個商品相關(guān)數(shù)據(jù)庫,要求包括商品類別、商品的基本信息,并完成下面的三個查詢。
1、請寫出創(chuàng)建相關(guān)表的SQL語句。
2. 使用標(biāo)準(zhǔn)SQL,得到2008年1月份入庫的所有商品信息。 3. 使用標(biāo)準(zhǔn)SQL,得到“Toy”分類下的所有商品信息。
4. 使用標(biāo)準(zhǔn)SQL,統(tǒng)計(jì)出所有包含商品價(jià)格低于100.00的分類。
三、 程序填空題。
閱讀下列說明、圖以及Java程序,將應(yīng)填入__(n)__處的字句寫在答題紙的對應(yīng)欄內(nèi)。 1、[說明]
某訂單管理系統(tǒng)的部分UML類圖如圖1-1所示
圖4-1 訂單管理系統(tǒng)的部分類圖
圖1-1中,Product表示產(chǎn) 品,ProductList表示所銷售產(chǎn)品的列表,Order表示產(chǎn)品訂單,0rderltem表示產(chǎn)品訂單中的一個條目,OrderList表示訂單列 表,SalesSystem提供訂單管理系統(tǒng)的操作接口。各個類的部分屬性和方法說明如表1-1所示。 表1-1
可以使用類java.util。ArrayList來實(shí)現(xiàn)對象的聚集關(guān)系,如圖4-1中OrderList與Order之間的聚集關(guān)系。for-each循環(huán)提供了一種遍歷對象集合的簡單方法。在for-each循環(huán)中,可以指定需要遍歷的對象集合以及用來接收集合中每個元素的變量,其語法如下: for(用來接收集合中元素的變量:需要遍歷的對象集合),如果要使用for-each循環(huán)來遍歷對象集合,那么包含該對象集合的類必須實(shí)現(xiàn)接口java.util.Iterable。Java程序1-1和Java程序1-2分別給出了類OrderList和方法statistic的Java代碼。 [Java程序1-1] import java.util.*;
public class OrderList __(1)__ {
private ArrayListorders; public OrderListO {
this.orders = new ArrayList(Order) 0; }
public void addOrder(Order order) { this.orders, add (order); }
public IteratoriteratorO {
return __(2)__;
}
public int getNunberOfOrders() { return this.orders. size(); }
}
[Java程序1-2]
import java.util.*;
public class SalesSystem { private ProductList catalog; private OrderList sales;
private static PrintWriter stdOut = new PrintWriter(System.out,true); public void statistic(){
for(Product product : __(3)__{ int number = 0;
for(Order order : __(4)__ {
for(__(5)__ : order){
if<product.equals(item.getProduct())) numbe r +=item.getQuantity(); } }
stdOut.println(product.getCode() + " " + product.getDescription() + " "
+ number + " " + number *product.getPrice()); }
}
//其余的方法未列出 }
2、[說明]
傳輸門是傳輸系統(tǒng)中的重要裝置。傳輸門具有 Open(打開)、Closed(關(guān)閉)、Opening(正在打開)、StayOpen(保持打開)、Closing(正在關(guān)閉)五種狀態(tài)。觸發(fā)狀態(tài)的轉(zhuǎn)換事件有 click、complete 和 timeout 三種。事件與其相應(yīng)的狀態(tài)轉(zhuǎn)換如圖 2-1 所示。
圖 2-1 傳輸門響應(yīng)事件與其狀態(tài)轉(zhuǎn)換圖
下面的[Java 代碼 1]與[Java 代碼 2]分別用兩種不同的設(shè)計(jì)思路對傳輸門進(jìn)行狀態(tài)模擬,請?zhí)钛a(bǔ)代碼中的空缺。 [Java 代碼 1]
public class Door {
public static final int CLOSED = 1; public static final int OPENING = 2; public static final int OPEN = 3; public static final int CLOSING = 4; public static final int STAYOPEN = 5;
private int state = CLOSED;//定義狀態(tài)變量,用不同的整數(shù)表示不同狀態(tài) private void setState(int state){this.state = state;} //設(shè)置傳輸門當(dāng)前狀態(tài)
public void getState(){
// 此處代碼省略,本方法輸出狀態(tài)字符串,
// 例如,當(dāng)前狀態(tài)為 CLOSED 時(shí),輸出字符串為”CLOSED” }
public void click() { //發(fā)生 click 事件時(shí)進(jìn)行狀態(tài)轉(zhuǎn)換 if ( (1) ) setState(OPENING);
else if ( (2) ) setState(CLOSING); else if ( (3) ) setState(STAYOPEN); //發(fā)生 timeout 事件時(shí)進(jìn)行狀態(tài)轉(zhuǎn)換
public void timeout(){ if (state == OPEN) setState(CLOSING); } public void complete(){ //發(fā)生 complete 事件時(shí)進(jìn)行狀態(tài)轉(zhuǎn)換 if (state == OPENING) setState(OPEN);
else if (state == CLOSING) setState(CLOSED); }
public static void main(String [] args){ Door aDoor = new Door(); aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete(); aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.click(); aDoor.getState(); return; } }
[Java 代碼 2]
public class Door {
public final DoorState CLOSED = new DoorClosed(this); public final DoorState OPENING = new DoorOpening(this); public final DoorState OPEN = new DoorOpen(this);
public final DoorState CLOSING = new DoorClosing(this); public final DoorState STAYOPEN = new DoorStayOpen(this); private DoorState state = CLOSED; //設(shè)置傳輸門當(dāng)前狀態(tài)
public void setState(DoorState state){ this.state = state;} public void getState(){ //根據(jù)當(dāng)前狀態(tài)輸出對應(yīng)的狀態(tài)字符串 System.out.println(state.getClass().getName()); }
public void click(){ (4) ;} //發(fā)生 click 事件時(shí)進(jìn)行狀態(tài)轉(zhuǎn)換 public void timeout(){ (5) ;}//發(fā)生 timeout 事件時(shí)進(jìn)行狀態(tài)轉(zhuǎn)換 public void complete(){ (6) ;}//發(fā)生 complete 事件時(shí)進(jìn)行狀態(tài)轉(zhuǎn)換 public static void main(String[] args){ Door aDoor = new Door(); aDoor.getState(); aDoor.click(); aDoor.getState(); aDoor.complete(); aDoor.getState(); aDoor.timeout(); aDoor.getState(); return; } }
【java開發(fā)面試技巧方法】相關(guān)文章:
java開發(fā)面試自我介紹08-02
面試提問的方法與技巧11-23
關(guān)于面試的方法及技巧11-23
關(guān)于面試技巧及方法11-23
關(guān)于面試的技巧方法11-25
java開發(fā)實(shí)習(xí)總結(jié)04-23
跳槽面試的準(zhǔn)備方法與技巧07-21
采購主管面試方法與技巧11-23