第一篇:Java筆試可能出現(xiàn)問題及答案之J2EE-JAVA程序員JAVA工程師面試必看
-JAVA程序員JAVA工程師面試必看
Java筆試可能出現(xiàn)問題及答案之J2EE,MVC方面(轉(zhuǎn)載)(連載)
J2EE,MVC方面
114、MVC的各個部分都有那些技術(shù)來實(shí)現(xiàn)?如何實(shí)現(xiàn)?
答:MVC是Model-View-Controller的簡寫?!癕odel” 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)),“View” 是應(yīng)用的表示面(由JSP頁面產(chǎn)生),“Controller” 是提供應(yīng)用的處理過程控制(一般是一個Servlet),通過這種設(shè)計模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
115、J2EE是什么?
答:Je22是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級應(yīng)用模型(enterpriese application model).在這樣的一個應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。
116、WEB SERVICE名詞解釋。JSWDL開發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。答:Web Service描述語言WSDL
SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協(xié)議。UDDI 的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。
117、J2EE是技術(shù)還是平臺還是框架?
答:J2EE本身是一個標(biāo)準(zhǔn),一個為企業(yè)分布式應(yīng)用的開發(fā)提供的標(biāo)準(zhǔn)平臺。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)。
118、STRUTS的應(yīng)用(如STRUTS架構(gòu))
答:Struts是采用Java Servlet/JavaServer Pages技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的framework。采用Struts能開發(fā)出基于MVC(Model-View-Controller)設(shè)計模式的應(yīng)用構(gòu)架。Struts有如下的主要功能:
一.包含一個controller servlet,能將用戶的請求發(fā)送到相應(yīng)的Action對象。
二.JSP自由tag庫,并且在controller servlet中提供關(guān)聯(lián)支持,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。
三.提供了一系列實(shí)用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
119、WEB SERVICE名詞解釋。JSWDL開發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。答:Web ServiceWeb Service是基于網(wǎng)絡(luò)的、分布式的模塊化組件,它執(zhí)行特定的任務(wù),遵守具體的技術(shù)規(guī)范,這些規(guī)范使得Web Service能與其他兼容的組件進(jìn)行互操作。
JAXP(Java API for XML Parsing)定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當(dāng)你需要改變具體的實(shí)現(xiàn)時候也不需要修改代碼。
JAXM(Java API for XML Messaging)是為SOAP通信提供訪問方法和傳輸機(jī)制的API。
WSDL是一種 XML 格式,用于將網(wǎng)絡(luò)服務(wù)描述為一組端點(diǎn),這些端點(diǎn)對包含面向文檔信息或面向過程信息的消息進(jìn)行操作。這種格式首先對操作和消息進(jìn)行抽象描述,然后將其綁定到具體的網(wǎng)絡(luò)協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(服務(wù))。
SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協(xié)議。UDDI 的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。
120、C/S 與 B/S 區(qū)別:
答:有如下八個方面的不同:
1.硬件環(huán)境不同:
C/S 一般建立在專用的網(wǎng)絡(luò)上, 小范圍里的網(wǎng)絡(luò)環(huán)境, 局域網(wǎng)之間再通過專門服務(wù)器提供連接和數(shù)據(jù)交換服務(wù).B/S 建立在廣域網(wǎng)之上的, 不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng), 租用設(shè)備.信息自己管理.有比C/S更強(qiáng)的適應(yīng)范圍, 一般只要有操作系統(tǒng)和瀏覽器就行
2.對安全要求不同
C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強(qiáng).一般高度機(jī)密的信息系統(tǒng)采用C/S 結(jié)構(gòu)適宜.可以通過B/S發(fā)布部分可公開信息.B/S 建立在廣域網(wǎng)之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
3.對程序架構(gòu)不同
C/S 程序可以更加注重流程, 可以對權(quán)限多層次校驗, 對系統(tǒng)運(yùn)行速度可以較少考慮.B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優(yōu)化的基礎(chǔ)之上.比C/S有更高的要求 B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng).SUN 和IBM推的JavaBean 構(gòu)件技術(shù)等,使 B/S更加成熟.4.軟件重用不同
C/S 程序可以不可避免的整體性考慮, 構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好.B/S 對的多重結(jié)構(gòu),要求構(gòu)件相對獨(dú)立的功能.能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子
5.系統(tǒng)維護(hù)不同
C/S 程序由于整體性, 必須整體考察, 處理出現(xiàn)的問題以及系統(tǒng)升級.升級難.可能是再做一個全新的系統(tǒng)
B/S 構(gòu)件組成,方面構(gòu)件個別的更換,實(shí)現(xiàn)系統(tǒng)的無縫升級.系統(tǒng)維護(hù)開銷減到最小.用戶從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級.6.處理問題不同
C/S 程序可以處理用戶面固定, 并且在相同區(qū)域, 安全要求高需求, 與操作系統(tǒng)相關(guān).應(yīng)該都是相同的系統(tǒng)
B/S 建立在廣域網(wǎng)上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的.與操作系統(tǒng)平臺關(guān)系最小.7.用戶接口不同
C/S 多是建立的Window平臺上,表現(xiàn)方法有限,對程序員普遍要求較高
B/S 建立在瀏覽器上, 有更加豐富和生動的表現(xiàn)方式與用戶交流.并且大部分難度減低,減低開發(fā)成本.8.信息流不同
C/S 程序一般是典型的中央集權(quán)的機(jī)械式處理, 交互性相對低
B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。
121、什么是web容器
答:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個環(huán)境,使JSP,SERVLET直接更容器中的環(huán)境變量接**互,不必關(guān)注其它系統(tǒng)問題。主要有WEB服務(wù)器來實(shí)現(xiàn)。例如:
TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。122、什么是EJB容器
答:Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿足J2EE規(guī)范的EJB放入該容器,馬上就會被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接口來獲得系統(tǒng)級別的服務(wù)。例如郵件服務(wù)、事務(wù)管理
123、什么是JNDI
答:(Java Naming & Directory Interface)JAVA命名目錄服務(wù)。主要提供的功能是:提供一個目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。124、什么是JMS
答:(Java Message Service)JAVA消息服務(wù)。主要實(shí)現(xiàn)各個應(yīng)用程序之間的通訊。包括點(diǎn)對點(diǎn)和廣播。125、什么是JTA
答:(Java Transaction API)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。
126、什么是JAF
答:(Java Action FrameWork)JAVA安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet對象請求中介協(xié)議)他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺計算機(jī)上運(yùn)行一個程序,它提供股票分析服務(wù),我們可以在本地計算機(jī)上實(shí)現(xiàn)對其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI是JAVA特有的。
127、MVC的各個部分都有那些技術(shù)來實(shí)現(xiàn)?如何實(shí)現(xiàn)?
答:MVC是Model-View-Controller的簡寫?!癕odel” 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)),“View” 是應(yīng)用的表示面(由JSP頁面產(chǎn)生),“Controller” 是提供應(yīng)用的處理過程控制(一般是一個Servlet),通過這種設(shè)計模型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
-JAVA程序員JAVA工程師面試必看
第二篇:Java之reference-JAVA程序員JAVA工程師面試必看
-JAVA程序員JAVA工程師面試必看
Reference
Java世界泰山北斗級大作《Thinking In Java》切入Java就提出“Everything is Object”。在Java這個充滿Object的世界中,reference是一切謎題的根源,所有的故事都是從這里開始的。
Reference是什么?
如果你和我一樣在進(jìn)入Java世界之前曾經(jīng)浪跡于C/C++世界,就一定不會對指針陌生。談到指針,往日種種不堪回首的經(jīng)歷一下子涌上心頭,這里不是抱怨的地方,讓我們暫時忘記指針的痛苦,回憶一下最初接觸指針的甜蜜吧!還記得你看過的教科書中,如何講解指針嗎?留在我印象中的一種說法是,指針就是地址,如同門牌號碼一樣,有了地址,你可以輕而易舉找到一個人家,而不必費(fèi)盡心力的大海撈針。
C++登上歷史舞臺,reference也隨之而來,容我問個小問題,指針和reference區(qū)別何在?我的答案來自于在C++世界享譽(yù)盛名的《More Effective C++》。
1.2.3.4.沒有null reference。reference必須有初值。使用reference要比使用指針效率高。因為reference不需要測試其有效性。指針可以重新賦值,而reference總是指向它最初獲得的對象
設(shè)計選擇:
當(dāng)你指向你需要指向的某個東西,而且絕不會改指向其它東西,或是當(dāng)你實(shí)作一個運(yùn)算符而其語法需要無法有指針達(dá)成,你就應(yīng)該選擇reference。其它任何時候,請采用指針。
這和Java有什么關(guān)系?
初學(xué)Java,鑒于reference的名稱,我毫不猶豫的將它和C++中的reference等同起來。不過,我錯了。在Java中,reference可以隨心所欲的賦值置空,對比一下上面列出的差異,就不難發(fā)現(xiàn),Java的reference如果要與C/C++對應(yīng),它不過是一個穿著reference外衣的指針而已。
于是,所有關(guān)于C中關(guān)于指針的理解方式,可以照搬到Java中,簡而言之,reference就是一個地址。我們可以把它想象成一個把手,抓住它,就抓住了我們想要操縱的數(shù)據(jù)。如同掌握C的關(guān)鍵在于掌握指針,探索Java的鑰匙就是reference。
一段小程序
我知道,太多的文字總是令人犯困,那就來段代碼吧!
public class ReferenceTricks {
public static void main(String[] args){
ReferenceTricks r = new ReferenceTricks();
// reset integer
r.i = 0;
System.out.println(“Before changeInteger:” + r.i);
changeInteger(r);
System.out.println(“After changeInteger:” + r.i);
// just for format
System.out.println();
// reset integer
r.i = 0;
System.out.println(“Before changeReference:” + r.i);
changeReference(r);
System.out.println(“After changeReference:” + r.i);
}
private static void changeReference(ReferenceTricks r){
r = new ReferenceTricks();
r.i = 5;
System.out.println(“In changeReference: ” + r.i);
}
private static void changeInteger(ReferenceTricks r){
r.i = 5;
System.out.println(“In changeInteger:” + r.i);
}
public int i;
}
對不起,我知道,把一個字段設(shè)成public是一種不好的編碼習(xí)慣,這里只是為了說明問題。
如果你有興趣自己運(yùn)行一下這個程序,我等你!
OK,你已經(jīng)運(yùn)行過了嗎?結(jié)果如何?是否如你預(yù)期?下面是我在自己的機(jī)器上運(yùn)行的結(jié)果:
Before changeInteger:0
In changeInteger:5
After changeInteger:5
Before changeReference:0
In changeReference: 5
After changeReference:0
這里,我們關(guān)注的是兩個change——changeReference和changeInteger。從輸出的內(nèi)容中,我們可以看出,兩個方法在調(diào)用前和調(diào)用中完全一樣,差異出現(xiàn)在調(diào)用后的結(jié)果。
糊涂的講解
先讓我們來分析一下changeInteger的行為。
前面說過了,Java中的reference就是一個地址,它指向了一個內(nèi)存空間,這個空間存放著一個對象的相關(guān)信息。這里我們暫時不去關(guān)心這個內(nèi)存具體如何排布,只要知道,通過地址,我們可以找到r這個對象的i字段,然后我們給它賦成5。既然這個字段的內(nèi)容得到了修改,從函數(shù)中返回之后,它自然就是改動后的結(jié)果了,所以調(diào)用之后,r對象的i字段依然是5。下圖展示了changeInteger調(diào)用前后內(nèi)存變化。
Reference +--------+Reference +--------+
---------->| i = 0|---------->| i = 5|
|--------||--------|
| Memory || Memory |
||||
||||
+--------++--------+
調(diào)用changeInteger之前調(diào)用changeInteger之后
讓我們把目光轉(zhuǎn)向changeReference。
從代碼上,我們可以看出,同changeInteger之間的差別僅僅在于多了這么一句。
r = new ReferenceTricks();
這條語句的作用是分配一塊新的內(nèi)存,然后將r指向它。
執(zhí)行完這條語句,r就不再是原來的r,但它依然是一個ReferenceTricks的對象,所以我們依然可以對這個r的i字段賦值。到此為止,一切都是那么自然。
Reference +--------++--------+
---------->| i = 0|| i = 0|
|--------||--------|
| Memory || Memory |
||Reference |--------|
||---------->| i = 5|
+--------++--------+
調(diào)用changeReference之前調(diào)用changeReference之后
順著這個思路繼續(xù)下去的話,執(zhí)行完changeReference,輸出的r的i字段,那么應(yīng)該是應(yīng)該是新內(nèi)存中的i,所以應(yīng)該是5。至于那塊被我們拋棄的內(nèi)存,Java的GC功能自然會替我們善后的。
事與愿違。
實(shí)際的結(jié)果我們已經(jīng)看到了,輸出的是0。
肯定哪個地方錯了,究竟是哪個地方呢?
參數(shù)傳遞的秘密
知道方法參數(shù)如何傳遞嗎?
記得剛開始學(xué)編程那會兒,老師教導(dǎo),所謂參數(shù),有形式參數(shù)和實(shí)際參數(shù)之分,參數(shù)列表中寫的那些東西都叫形式參數(shù),在實(shí)際調(diào)用的時候,它們會被實(shí)際參數(shù)所替代。
編譯程序不可能知道每次調(diào)用的實(shí)際參數(shù)都是什么,于是寫編譯器的高手就出個辦法,讓實(shí)際參數(shù)按照一定順序放到一個大家都可以找得到的地方,以此作為方法調(diào)用的一種約定。所謂“沒有規(guī)矩,不成方圓”,有了這個規(guī)矩,大家協(xié)作起來就容易多了。這個公共數(shù)據(jù)區(qū),現(xiàn)在編譯器的選擇通常是“棧”,而所謂的順序就是形式參數(shù)聲明的順序。
顯然,程序運(yùn)行的過程中,作為實(shí)際參數(shù)的變量可能遍布于內(nèi)存的各個位置,而并不一定要老老實(shí)實(shí)的呆在棧里。為了守“規(guī)矩”,程序只好將變量復(fù)制一份到棧中,也就是通常所說的將參數(shù)壓入棧中。
打起精神,謎底就要揭曉了。
我剛才說什么來著?將變量復(fù)制一份到棧中,沒錯,“復(fù)制”!
這就是所謂的值傳遞。
C語言的曠世經(jīng)典《The C Programming Language》開篇的第一章中,談到實(shí)際參數(shù)時說,“在C中,所有函數(shù)的實(shí)際參數(shù)都是傳?值?的”。
馬上會有人站出來,“錯了,還有傳地址,比如以指針傳遞就是傳地址”。
不錯,傳指針就是傳地址。在把指針視為地址的時候,是否考慮過這樣一個問題,它也是一個變量。前面的討論中說過了,參數(shù)傳遞必須要把參數(shù)壓入棧中,作為地址的指針也不例外。所以,必須把這個指針也復(fù)制一份。函數(shù)中對于指針操作實(shí)際上是對于這個指針副本的操作。
Java的reference等于C的指針。所以,在Java的方法調(diào)用中,reference也要復(fù)制一份壓入堆棧。在方法中對reference的操作就是對這個reference副本的操作。
謎底揭曉
好,讓我們回到最初的問題上。
在changeReference中對于reference的賦值實(shí)際上是對這個reference的副本進(jìn)行賦值,而對于reference的本尊沒有產(chǎn)生絲毫的影響。
回到調(diào)用點(diǎn),本尊醒來,它并不知道自己睡去的這段時間內(nèi)發(fā)生過什么,所以只好當(dāng)作什么都沒發(fā)生過一般。就這樣,副本消失了,在方法中對它的修改也就煙消云散了。
也許你會問出這樣的問題,“聽了你的解釋,我反而對changeInteger感到迷惑了,既然是對于副本的操作,為什么changeInteger可以運(yùn)作正常?”
呵呵,很有趣的大腦短路現(xiàn)象。
好,那我就用前面的說法解釋一下changeInteger的運(yùn)作。
所謂復(fù)制,其結(jié)果必然是副本完全等同于本尊。reference復(fù)制的結(jié)果必然是兩個reference指向同一塊內(nèi)存空間。
雖然在方法中對于副本的操作并不會影響到本尊,但對內(nèi)存空間的修改確實(shí)實(shí)實(shí)在在的。
回到調(diào)用點(diǎn),雖然本尊依然不知道曾經(jīng)發(fā)生過的一切,但它按照原來的方式訪問內(nèi)存的時候,取到的確是經(jīng)過方法修改之后的內(nèi)容。
于是方法可以把自己的影響擴(kuò)展到方法之外。
多說幾句
這個問題起源于我對C/C++中同樣問題的思考。同C/C++相比,在changeReference中對reference賦值可能并不會造成什么很嚴(yán)重的后果,而在C/C++中,這么做卻會造成臭名昭著的“內(nèi)存泄漏”,根本的原因在于Java擁有了可愛的GC功能。即便這樣,我仍不推薦使用這種的手法,畢竟GC已經(jīng)很忙了,我們怎么好意思再麻煩人家。
在C/C++中,這個問題還可以繼續(xù)引申。既然在函數(shù)中對于指針直接賦值行不通,那么如何在函數(shù)中修改指針呢?答案很簡單,指針的指針,也就是把原來的指針看作一個普通的數(shù)據(jù),把一個指向它的指針傳到函數(shù)中就可以了。
同樣的問題到了Java中就沒有那么美妙的解決方案了,因為Java中可沒有reference的reference這樣的語法??赡艿淖兺ň褪菍eference進(jìn)行封裝成類。至于值不值,公道自在人心。
?
?
? ?
? ? 評論 09:50瀏覽(171)評論(1)分類:收藏相關(guān)推薦
2008-06-27
public class ReferenceTricks {
public static void main(String[] args){
ReferenceTricks r = new ReferenceTricks();
// reset integer
r.i = 0;
System.out.println(“Before changeInteger:” + r.i);
changeInteger(r);
System.out.println(“After changeInteger:” + r.i);
// just for format
System.out.println();
// reset integer
r.i = 0;
System.out.println(“Before changeReference:” + r.i);
changeReference(r);
System.out.println(“After changeReference:” + r.i);
}
private static void changeReference(ReferenceTricks r){
r = new ReferenceTricks();
r.i = 5;
System.out.println(“In changeReference: ” + r.i);
}
private static void changeInteger(ReferenceTricks r){
r.i = 5;
System.out.println(“In changeInteger:” + r.i);
}
public
舉的例子不太相符,用來理解java傳 參機(jī)制倒是不錯的例子
-JAVA程序員JAVA工程師面試必看
第三篇:java程序員(筆試)
筆試
一. 選擇題
1.從“員工”表的“姓名”字段中找出名字包含“瑪麗”的人,下面的哪條select語句正確()
A.Select*from 員工 where姓名 =“__瑪麗__” B.Select*from 員工 where姓名 =“%瑪麗__” C.Select*from 員工 where姓名 like“__瑪麗%” D.Select*from 員工 where姓名 like“%瑪麗%”
二. 多選題
6.下面哪兩個設(shè)置一個jsp頁的content type? A.
7.下面描述正確的是()
A.Statement 繼承自PreparedStatement B.ResultSet繼承自Statement C.CallableStatement繼承自PreparedStatement D.PreparedStatement繼承自Statement 8.下列屬于jsp中注釋的有()A.<%----%> B.// C./*
*/ D. 三.排序
9.典型的JDBC程序按()順序編寫。A.釋放資源
B.獲得與數(shù)據(jù)庫連接
C.創(chuàng)建不同類型的Statement D.如果有結(jié)果集,處理結(jié)果集
10.以下哪些是定義在ResultSet中用于Cursor定位的方法: A.next()B.beforeFirst()C.afterLast()D.isBeforeFirst()
E.absolute(int)F.relative(int)四.判斷題
11.
錯誤
正確
12.statement 執(zhí)行query得到resultSet對象,必須執(zhí)行next方法才可以取出第一條記錄
錯誤
正確
五.解答題
13.如何獲得數(shù)組的長度?
14.try{}里有一個return語句,那么緊跟在這個try后的finally()里的語句是否執(zhí)行,何時執(zhí)行?
15.列出java 基本數(shù)據(jù)類型
16.在java 中,如何跳出當(dāng)前的多重嵌套循環(huán)?
17.描述使用JDBC連接數(shù)據(jù)庫的過程
18.jsp 中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
19.兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別?
20.http 協(xié)議默認(rèn)端口是______tomcat服務(wù)器的默認(rèn)端口是___________
21.HTTP 提交請求的方式有兩種,分別是_______和__________
22.簡單說明page, request,session, application 的作用范圍
23.簡單說明Vector 和hashtable 的區(qū)別
24.簡單闡述幾種表單的提交方法(非方式)。
25.如何在HTML頁面中嵌套其他頁面
26.現(xiàn)有客戶信息表如下:
(1).用一條Sql 語句,查詢訂單大于1000元的用戶名
六.程序題(手寫代碼)
1.現(xiàn)有1,2,3,4幾個數(shù)字,這幾個數(shù)字能組成多少個不重復(fù)的三位數(shù)?分別是多少?
2.輸入一個字符串,里面包含英文字母,空格,數(shù)字,分割這個字符串,并且計算出英文字母,空格,數(shù)字各有多少個?
第四篇:JAVA時間格式化處理-JAVA程序員JAVA工程師面試必看
-JAVA程序員JAVA工程師面試必看
JAVA時間格式化處理 日期格式化
import java.util.Date;import java.text.SimpleDateFormat;class dayTime { public static void main(String args[]){ Date nowTime=new Date();System.out.println(nowTime);SimpleDateFormat time=new SimpleDateFormat(“yyyy MM dd HH mm ss”);System.out.println(time.format(nowTime));} }
2007-05-17 09:54 轉(zhuǎn)載地址
http://tb.blog.csdn.net/TrackBack.aspx?PostId=3809041、通過MessageFormat轉(zhuǎn)化
String dateTime = MessageFormat.format(“{0,date,yyyy-MM-dd-HH-mm:ss:ms}” , new Object[] { new java.sql.Date(System.currentTimeMillis())});說明: yyyy-MM-dd-HH-mm:ss:ms 年yyyy 月MM 日dd 時(大寫為24進(jìn)制,小寫為12進(jìn)制)分mm 秒ss 微妙ms
2、修改數(shù)據(jù)庫時用
queryDataSet.setDate(“dateField”, new java.sql.Date(new java.util.Date().getTime()));queryDataSet.setDate(“dateField”, new java.sql.Date.valueOf(“2005-05-03”));
3、通過SimpleDateFormat 轉(zhuǎn)化
SimpleDateFormat dateFm = new SimpleDateFormat(“yyyy-MM-dd”);//格式化當(dāng)前系統(tǒng)日期 String dateTime = dateFm.format(new java.util.Date());
4、具體討論
Java 語言的Calendar(日歷),Date(日期), 和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個基本但是非常重要的部分.日期是商業(yè)邏輯計算一個關(guān)鍵的部分.所有的開發(fā)者都應(yīng)該能夠計算未來的日期, 定制日期的顯示格式, 并將文本數(shù)據(jù)解析成日期對象.我們寫了兩篇文章, 這是第一篇, 我們將大概的學(xué)習(xí)日期, 日期格式, 日期的解析和日期的計算.我們將討論下面的類:
1、具體類(和抽象類相對)java.util.Date
2、抽象類java.text.DateFormat 和它的一個具體子類,java.text.SimpleDateFormat
3、抽象類java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar
具體類可以被實(shí)例化, 但是抽象類卻不能.你首先必須實(shí)現(xiàn)抽象類的一個具體子類.Date 類從Java 開發(fā)包(JDK)1.0 就開始進(jìn)化, 當(dāng)時它只包含了幾個取得或者設(shè)置一個日期數(shù)據(jù)的各個部分的方法, 比如說月, 日, 和年.這些方法現(xiàn)在遭到了批評并且已經(jīng)被轉(zhuǎn)移到了Calendar類里去了, 我們將在本文中進(jìn)一步討論它.這種改進(jìn)旨在更好的處理日期數(shù)據(jù)的國際化格式.就象在JDK 1.1中一樣, Date 類實(shí)際上只是一個包裹類, 它包含的是一個長整型數(shù)據(jù), 表示的是從GMT(格林尼治標(biāo)準(zhǔn)時間)1970年, 1 月 1日00:00:00這一刻之前或者是之后經(jīng)歷的毫秒數(shù).一、創(chuàng)建一個日期對象
讓我們看一個使用系統(tǒng)的當(dāng)前日期和時間創(chuàng)建一個日期對象并返回一個長整數(shù)的簡單例子.這個時間通常被稱為Java 虛擬機(jī)(JVM)主機(jī)環(huán)境的系統(tǒng)時間.//-----------------------import java.util.Date;
public class DateExample1 { public static void main(String[] args){ // Get the system date/time Date date = new Date();
System.out.println(date.getTime());} } //-----------------------
在星期六, 2001年9月29日, 下午大約是6:50的樣子, 上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1001803809710.在這個例子中,值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個日期對象, 這個構(gòu)造函數(shù)沒有接受任何參數(shù).而這個構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis()方法來從系統(tǒng)獲取日期.那么, 現(xiàn)在我們已經(jīng)知道了如何獲取從1970年1月1日開始經(jīng)歷的毫秒數(shù)了.我們?nèi)绾尾拍芤砸环N用戶明白的格式來顯示這個日期呢? 在這里類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了.二、日期數(shù)據(jù)的定制格式 假如我們希望定制日期數(shù)據(jù)的格式, 比方星期六-9月-29日-2001年.下面的例子展示了如何完成這個工作:
//-----------------------import java.text.SimpleDateFormat;import java.util.Date;
public class DateExample2 {
public static void main(String[] args){
SimpleDateFormat bartDateFormat = new SimpleDateFormat(“EEEE-MMMM-dd-yyyy”);
Date date = new Date();
System.out.println(bartDateFormat.format(date));} } //-----------------------
只要通過向SimpleDateFormat 的構(gòu)造函數(shù)傳遞格式字符串“EEE-MMMM-dd-yyyy”, 我們就能夠指明自己想要的格式.你應(yīng)該可以看見, 格式字符串中的ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個部分.EEEE是星期, MMMM是月, dd是日, yyyy是年.字符的個數(shù)決定了日期是如何格式化的.傳遞“EE-MM-dd-yy”會顯示 Sat-09-29-01.請察看Sun 公司的Web 站點(diǎn)獲取日期格式化選項的完整的指示.三、將文本數(shù)據(jù)解析成日期對象
假設(shè)我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數(shù)據(jù)創(chuàng)建一個日期對象.我們將再次以格式化字符串“MM-dd-yyyy” 調(diào)用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數(shù)據(jù).我們的例子, 顯示在下面, 將解析文本字符串“9-29-2001”并創(chuàng)建一個值為001736000000 的日期對象.//-----------------------import java.text.SimpleDateFormat;import java.util.Date;
public class DateExample3 {
public static void main(String[] args){ // Create a date formatter that can parse dates of // the form MM-dd-yyyy.SimpleDateFormat bartDateFormat = new SimpleDateFormat(“MM-dd-yyyy”);
// Create a string containing a text date to be parsed.String dateStringToParse = “9-29-2001”;
try { // Parse the text version of the date.// We have to perform the parse method in a // try-catch construct in case dateStringToParse // does not contain a date in the format we are expecting.Date date = bartDateFormat.parse(dateStringToParse);
// Now send the parsed date as a long value // to the system output.System.out.println(date.getTime());} catch(Exception ex){ System.out.println(ex.getMessage());} } } //-----------------------
四、使用標(biāo)準(zhǔn)的日期格式化過程
既然我們已經(jīng)可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內(nèi)建的格式化過程.方法 DateFormat.getDateTimeInstance()讓我們得以用幾種不同的方法獲得標(biāo)準(zhǔn)的日期格式化過程.在下面的例子中, 我們獲取了四個內(nèi)建的日期格式化過程.它們包括一個短的, 中等的, 長的, 和完整的日期格式.//-----------------------import java.text.DateFormat;import java.util.Date;
public class DateExample4 {
public static void main(String[] args){ Date date = new Date();
DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
System.out.println(shortDateFormat.format(date));System.out.println(mediumDateFormat.format(date));System.out.println(longDateFormat.format(date));System.out.println(fullDateFormat.format(date));} } //-----------------------
注意我們在對 getDateTimeInstance的每次調(diào)用中都傳遞了兩個值.第一個參數(shù)是日期風(fēng)格, 而第二個參數(shù)是時間風(fēng)格.它們都是基本數(shù)據(jù)類型int(整型).考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL.要知道獲取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司W(wǎng)eb 站點(diǎn)上的解釋.運(yùn)行我們的例子程序的時候, 它將向標(biāo)準(zhǔn)輸出設(shè)備輸出下面的內(nèi)容: 9/29/01 8:44 PM Sep 29, 2001 8:44:45 PM September 29, 2001 8:44:45 PM EDT Saturday, September 29, 2001 8:44:45 PM EDT
五、Calendar 類
我們現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個日期對象了, 但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢, 比如說小時, 日, 或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類.就如我們前面提到的那樣, Calendar 類中的方法替代了Date 類中被人唾罵的方法.假設(shè)你想要設(shè)置, 獲取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天.為了演示這個過程, 我們將使用具體的子類 java.util.GregorianCalendar.考慮下面的例子, 它計算得到下面的第十個星期五是13號.//-----------------------import java.util.GregorianCalendar;import java.util.Date;import java.text.DateFormat;
public class DateExample5 {
public static void main(String[] args){ DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
// Create our Gregorian Calendar.GregorianCalendar cal = new GregorianCalendar();
// Set the date and time of our calendar // to the system&s date and time cal.setTime(new Date());
System.out.println(“System Date: ” + dateFormat.format(cal.getTime()));
// Set the day of week to FRIDAY cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);System.out.println(“After Setting Day of Week to Friday: ” + dateFormat.format(cal.getTime()));
int friday13Counter = 0;
while(friday13Counter <= 10){
// Go to the next Friday by adding 7 days.cal.add(GregorianCalendar.DAY_OF_MONTH, 7);
// If the day of month is 13 we have // another Friday the 13th.if(cal.get(GregorianCalendar.DAY_OF_MONTH)== 13){ friday13Counter++;System.out.println(dateFormat.format(cal.getTime()));} } } } //-----------------------
在這個例子中我們作了有趣的函數(shù)調(diào)用: cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);和: cal.add(GregorianCalendar.DAY_OF_MONTH, 7);
set 方法能夠讓我們通過簡單的設(shè)置星期中的哪一天這個域來將我們的時間調(diào)整為星期五.注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強(qiáng)代碼的可讀性.add 方法讓我們能夠在日期上加上數(shù)值.潤年的所有復(fù)雜的計算都由這個方法自動處理.我們這個例子的輸出結(jié)果是: System Date: Saturday, September 29, 2001 當(dāng)我們將它設(shè)置成星期五以后就成了: Friday, September 28, 2001 Friday, September 13, 2002 Friday, December 13, 2002 Friday, June 13, 2003 Friday, February 13, 2004 Friday, August 13, 2004 Friday, May 13, 2005 Friday, January 13, 2006 Friday, October 13, 2006 Friday, April 13, 2007 Friday, July 13, 2007 Friday, June 13, 2008
六、時間掌握在你的手里
有了這些Date 和Calendar 類的例子, 你應(yīng)該能夠使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 創(chuàng)建許多方法了.5、具體討論2 這里只討論java中對日期的幾個簡單類: 1.java.util.Date 2.java.text.DateFormat(Abstract),java.text.SimpleDateFormat 3.java.util.Calendar(Abstract),java.util。GregorianCalendar 首先看一下Date類,Date中只提供了幾個獲得本地時間的方法,具體用法見下: import java.util.Date; public class DateFormatTest { public DateFormatTest(){ }
public static void main(String[] args){ Date dt=new Date();
String localeString=dt.toLocaleString(); String gmtString=dt.toGMTString(); System.out.println(localeString); System.out.println(gmtString); System.out.println(dt.getTime());
System.out.println(System.currentTimeMillis()); } } 輸出結(jié)果為: 2004-12-31 9:34:04 31 Dec 2004 01:34:04 GMT 1104456844281 1104456844500 從結(jié)果中可以看到,dt.getTime()與System.currentTimeMillis()這兩個方法得到的時間是相同的。因為Date的構(gòu)造函數(shù)中調(diào)用了System.currentTimeMillis()方法來從系統(tǒng)獲得當(dāng)前時間。其結(jié)果實(shí)際上是從1970年1月1日開始到當(dāng)前所經(jīng)歷的毫秒數(shù)。以下的例子展示的是一個簡單的格式化日期的代碼: import java.text.*; import java.util.Locale; import java.util.Date; public class DateFormatTest { public DateFormatTest(){ }
public static void main(String[] args){ DateFormat df=DateFormat.getDateInstance();
SimpleDateFormat defaultSDF=new SimpleDateFormat(); SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd”); System.out.println(new Date());
System.out.println(df.format(new Date())); System.out.println(defaultSDF.format(new Date())); System.out.println(sdf.format(new Date())); }}
輸出結(jié)果是:
Fri Dec 31 09:48:19 CST 2004 2004-12-31 04-12-31 上午9:48 2004-12-31
SimpleDateFormat的構(gòu)造函數(shù)中String中字符的含義列如下表: Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 1996; 96 M Month in year Month July; Jul; 07 w Week in year Number 27 W Week in month Number 2 D Day in year Number 189 d Day in month Number 10 F Day of week in month Number 2 E Day in week Text Tuesday; Tue a Am/pm marker Text PM H Hour in day(0-23)Number 0 k Hour in day(1-24)Number 24 K Hour in am/pm(0-11)Number 0 h Hour in am/pm(1-12)Number 12 m Minute in hour Number 30 s Second in minute Number 55 S Millisecond Number 978 z Time zone General time zone Pacific Standard Time; PST; GMT-08:00 Z Time zone RFC 822 time zon 上面展示的例子是將Date格式化成我們想要的格式,通常還會遇到需要將有些已經(jīng)格式好的String再解析成Date的問題。在下面的文章中將會講到。import java.text.*;import java.util.Locale;import java.util.Date;public class DateFormatTest { public DateFormatTest(){ } public static void main(String[] args){ String dateToparse=“30-12-2004”;
SimpleDateFormat sdf=new SimpleDateFormat(“dd-MM-yyyy”)Date dt=new Date()try{ dt=sdf.parse(dateToparse)System.out.print(dt)}catch(Exception e){ e.printStackTrace();}}}-JAVA程序員JAVA工程師面試必看
第五篇:JAVA程序員筆試題目(模版)
JAVA程序員筆試題目
1、有一個Vector對象,其中每一個元素都是一個String對象,請用For循環(huán)或者While循環(huán)輸出Vector中的元素,要求格式為:“第i個元素為:aaa”
2、答:
3、Iterator it=Vector.iterat();
4、While(it.hasNext()){
5、String temp=(String)it.next();System.out.print(第一個元素為:);System.out.println(temp);6、7、}
8、Jsp有哪些內(nèi)置對象,作用分別是什么?
9、答:request,response,pageContext,session,application,out.config,page,exception等
10、在try {}里面有一個return語句,那么緊跟在try{}后的finally{}里面的 code是否會被執(zhí)行,是什么時候執(zhí)行,在return之前還是之后。答:
11、面向?qū)ο蟮幕咎卣魇鞘裁矗?/p>
12、答:繼承,封裝,多態(tài),13、頁面之間傳遞參數(shù)的方法有哪些?
14、答:利用request,pageContext,session,application,cookie對象都可以
15、Servlet中什么時候調(diào)用doGet()和doPost()?這兩種方法有什么不同?
16、答:當(dāng)表單是用get方法提交時,調(diào)用doGet(),反之調(diào)用doPost();
17、頁面中有一個名稱為unitprice的type=text的對象。要求輸入的數(shù)據(jù)不能為空,寫一個函數(shù)實(shí)現(xiàn)該功能,如果為空是給出提示。(用JavaScript語言寫出)答: