第一篇:Java面試題總結(jié)
二、Get和Post的區(qū)別
1.get是從服務器上獲取數(shù)據(jù),post是向服務器傳送數(shù)據(jù),2.get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認為不受限制。
3.get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。4.在進行文件上傳時只能使用post而不能是get。
四、StringBuffer StringBuilder String 區(qū)別
String 字符串常量 不可變 使用字符串拼接時是不同的2個空間 StringBuffer 字符串變量 可變 線程安全 字符串拼接直接在字符串后追加 StringBuilder 字符串變量 可變 非線程安全 字符串拼接直接在字符串后追加
1.StringBuilder執(zhí)行效率高于StringBuffer高于String.2.String是一個常量,是不可變的,所以對于每一次+=賦值都會創(chuàng)建一個新的對象,StringBuffer和StringBuilder都是可變的,當進行字符串拼接時采用append方
法,在原來的基礎上進行追加,所以性能比String要高,又因為StringBuffer 是
線程安全的而StringBuilder是線程非安全的,所以StringBuilder的效率高于
StringBuffer.3.對于大數(shù)據(jù)量的字符串的拼接,采用StringBuffer,StringBuilder.七、Forword(請求轉(zhuǎn)發(fā))與Redirect(重定向)區(qū)別:
十四、List,Set,Collection,Collections 集合特點、框架
(寫在紙上)作業(yè) 總結(jié)錯誤
總結(jié)中級知識點圖(用電腦鍵wend文件)
第二篇:JAVA面試題
1、面向?qū)ο蟮乃膫€特征:封裝、繼承、多態(tài)、抽象
封裝:
繼承:子類繼承父類,除private修飾以外的所以方法和屬性 多態(tài):一個對象多種狀態(tài),可以把子類對象當作父類對象來看,一旦這樣做了,就只能
去調(diào)用父類中原有定義的屬性和方法,也就是子類中擴展的方法或?qū)傩跃筒荒苷{(diào)用了。
抽象:
2、abstractclass 和interface的區(qū)別
聲明方法的存在而不去實現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實例。然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向具體子類的一個實例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現(xiàn),否則它們也是抽象類為。取而代之,在子類中實現(xiàn)該方法。知道其行為的其它類可以在類中實現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現(xiàn)與子類相似,除了該實現(xiàn)類不能從接口定義中繼承行為。當類實現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運算符可以用來決定某對象的類是否實現(xiàn)了接口。
3、final、finally、finalize的區(qū)別
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。
4、匿名內(nèi)部類是否可以作為父類被其他類繼承,或做為接口被實現(xiàn)?
匿名內(nèi)部類不被繼承也不能被實現(xiàn),因為它沒有名字,而一個內(nèi)部類只要有名字就可以作為父類被繼承,也可以作為借口被實現(xiàn)。
5、多線程有幾種實現(xiàn)方法,同步有幾種實現(xiàn)方法,都是什么?
多線程有兩種實現(xiàn)方法,分別繼承繼承Thread類與實現(xiàn)runnable借口。
同步的實現(xiàn)方法有兩種,分別是synchronized,wait與notify。
6、string 與 stringbuffer的區(qū)別?
String的長度是不可變的,而stringbuffer的長度是可變的。如果你對字符中的內(nèi)容經(jīng)常進行操作,特別是內(nèi)容修改時,那么就要使用stringbuffer,如果最后需要使用string,那么使用stringbuffer的tostring()方法。
7、解析XML文件的幾種方式和區(qū)別
DOM:處理大型文件時其性能下降的非常厲害
SAX:SAX是事件驅(qū)動型的XML解析方式,它是順序讀取XML文件,不需要一次性全部裝載整個文件。
8、sleep()和wait()有什么區(qū)別?
sleep是線程類(Thread)的方法,導致此線程暫停執(zhí)行指定時間,給執(zhí)行機會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時后會自動恢復。調(diào)用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調(diào)用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態(tài)。
9、數(shù)組有沒有l(wèi)ength這個方法?string有沒有l(wèi)ength這個方法?
數(shù)組沒有l(wèi)ength()這個方法,有l(wèi)ength這個屬性
String有l(wèi)ength()這個方法
10、LinkedList、ArrayList和Vector的區(qū)別? ArrayList和Vector是采用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素總數(shù)大于實際存儲的數(shù)據(jù)個數(shù)以便增加和插入元素,二者都允許直接序號索引元素,但是插入數(shù)據(jù)要移動數(shù)組元素等內(nèi)存操作,所以它們索引數(shù)據(jù)快、插入數(shù)據(jù)慢。
Vector由于使用了synchronized同步方法(如add、insert、remove、set、equals、hashcode等操作),因此是線程安全,性能上比ArrayList要差。
LinkedList使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進行向前或向后遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入數(shù)度較快!LinkedList雙向鏈表,是指可以從first依次遍歷至last(從頭到尾),也可以從last遍歷至first(從尾到頭),但首尾沒有構(gòu)成環(huán),不同于雙向循環(huán)鏈表(注意區(qū)分):
11、hashmap與hashtable的區(qū)別?
都屬于Map接口的類,實現(xiàn)了將惟一鍵映射到特定的值上。
HashMap類沒有分類或者排序。它允許一個null鍵和多個null值。
Hashtable類似于HashMap,但是不允許null鍵和null值。它也比HashMap慢,因為它是同步的。
12、Jsp有哪些內(nèi)置對象,作用分別是什么?(至少能說出五個)
request表示HttpServletRequest對象。它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie, header, 和session數(shù)據(jù)的有用的方法。
response表示HttpServletResponse對象,并提供了幾個用于設置送回 瀏覽器的響應的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個實例,并提供了幾個方法使你能用于向瀏覽器回送輸出結(jié)果。
pageContext表示一個javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關的對象的API,并且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態(tài)信息
applicaton 表示一個javax.servle.ServletContext對象。這有助于查找有關servlet引擎和servlet環(huán)境的信息
config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet實例的初始化參數(shù)。
page表示從該頁面產(chǎn)生的一個servlet實例
13、Javaservletapi中forward()與redirect()的區(qū)別?
前者僅是容器中控制權的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward()方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務器上的資源,則必須使用sendRedirect()方法。
14、重載(overload)與重寫(override)的區(qū)別?
Overload:方法名相同,參數(shù)不同,與返回值無關
Override:方法名相同,參數(shù)相同,相同的返回值,建立在繼承的基礎之上
15、什么是單例模式,在程序中如何使用?
單例模式確保一個類只有一個實例 餓漢式單例類
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
懶漢式單例類
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if(instance==null)
instance=new Singleton();
return instance;
}
}
16、Servlet生命周期?
加載和實例化
初始化init()
請求處理service()
服務終止destroy()
17、spring中IOC與AOP的含義?
IOC:控制反轉(zhuǎn),是一種設計模式,一層含義控制權的轉(zhuǎn)移,由傳統(tǒng)的在程序中控制依賴轉(zhuǎn)移到由容器來控制,第二層是依賴注入將互相依賴的對象分離,在spring配置文件中描述它們的依賴關心,它們的依賴關系只是在使用的時候才建立
AOP:面向切面,是一種編程思想,oop的延續(xù),將系統(tǒng)中非核心的業(yè)務提取出來,進行單獨的處理,比如事務、日志和安全等
Spring的AOP和IOC都是為了解決系統(tǒng)代碼耦合度過高的問題,使用代碼重用性高,易于維護,不過AOP和IOC并不是spring中特有的,只是spring把它們應用的更靈活方便。
18、hibernate與JDBC的區(qū)別?
相同點:
1>兩者都是JAVA的數(shù)據(jù)庫操作中間件。
2>兩者對于數(shù)據(jù)庫進行直接操作的對象都不是線程安全的,都需要及時關閉。
3>兩者都可以對數(shù)據(jù)庫的更新操作進行顯式的事務處理。
不同點:
1>使用的SQL語言不同:JDBC使用的是基于關系型數(shù)據(jù)庫的標準SQL語言,Hibernate使用的是HQL(Hibernate query language)語言
2>操作的對象不同:JDBC操作的是數(shù)據(jù),將數(shù)據(jù)通過SQL語句直接傳送到數(shù)據(jù)庫中執(zhí)行,Hibernate操作的是持久化對象,由底層持久化對象的數(shù)據(jù)更新到數(shù)據(jù)庫中。3>數(shù)據(jù)狀態(tài)不同:JDBC操作的數(shù)據(jù)是“瞬時”的,變量的值無法與數(shù)據(jù)庫中的值保持一致,而Hibernate操作的數(shù)據(jù)是可持久的,即持久化對象的數(shù)據(jù)屬性的值是可以跟數(shù)據(jù)庫中的值保持一致的。
19、struts中的標簽庫有幾種,分別是?
有5種標簽,分別是:bean標簽庫、html標簽庫、logic標簽庫、tiles標簽庫nested標簽庫
20、Error與Exception有什么區(qū)別?
Error表示系統(tǒng)級的錯誤和程序不必處理的異常,Exception表示需要捕捉或者需要程序進行處理的異常。
21、Collection和Collections的區(qū)別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.Collections是針對集合類的一個幫助類,他提供一系列靜態(tài)方法實現(xiàn)對各種集合的搜索、排序、線程安全化等操作
22、GC是什么?為什么要有GC?(基礎)。
GC是垃圾收集器。Java程序員不用擔心內(nèi)存管理,因為垃圾收集器會自動進行管理。
要請求垃圾收集,可以調(diào)用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
23、啟動一個線程是用run()還是start()?
啟動一個線程是調(diào)用start()方法,使線程所代表的虛擬處理機處于可運行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會立即運行。run()方法可以產(chǎn)生必須退出的標志來停止一個線程。
24、&和&&的區(qū)別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。
25、heap和stack有什么區(qū)別。
棧是一種線形集合,其添加和刪除元素的操作應在同一段完成。棧按照后進先出的方
式進行處理。
堆是棧的一個組成元素
26、List, Set, Map是否繼承自Collection接口?
List,Set是,Map不是
27、MVC的各個部分都有那些技術來實現(xiàn)?如何實現(xiàn)?
MVC 是Model-View-Controller的簡寫。“Model” 代表的是應用的業(yè)務邏輯(通過JavaBean,EJB組件實現(xiàn)),“View” 是應用的表示面(由JSP頁面產(chǎn)生),“Controller” 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現(xiàn)。這些組件可以進行交互和重用。
28、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實例被實例化。而通常的內(nèi)部類需要在外部類實例化后才能實例化。
29、接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類
(concrete class)?
接口可以繼承接口。抽象類可以實現(xiàn)(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構(gòu)造函數(shù)
30、JSP和Servlet有哪些相同點和不同點,他們之間的聯(lián)系是什么?
JSP 是Servlet技術的擴展,本質(zhì)上是Servlet的簡易方式,更強調(diào)應用的外表表達。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點在于,Servlet的應用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯
31、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法? 不能,一個對象的一個synchronized方法只能由一個線程訪問。
32、運行時異常與一般異常有何異同?
異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
33、JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
動態(tài)INCLUDE用jsp:include動作實現(xiàn)
靜態(tài)INCLUDE用include偽碼實現(xiàn),定不會檢查所含文件的變化,適用于包含靜態(tài)頁面<%@ include file=“included.htm” %>
第三篇:2016年10月份java面試題總結(jié)
2016年10月Java面試常見筆試題
1、有哪些XML解析方法?
2、頁面間的參數(shù)傳遞方法有哪一些?
3、Session有什么作用?
4、JSP有哪些動作?作用分別是什么?
5、Ajax的基本原理是什么?
6、數(shù)據(jù)庫中存儲過程和函數(shù)的區(qū)別是什么?
7、用SQL實現(xiàn)分頁?
8、Hibernate的工作原理是什么?及為什么要用?
9、Public、private、protected和default的作用域是什么?
10、描述“重載”和“重寫”?
11、描述下“值傳遞”“引用傳遞”或他們的主要區(qū)別?
12、描述下set、list、Map各自的特點
13、String在Java里是固定的長度嗎?為什么可以用“+”連接
14、描述下Spring對于事務的配置與處理方法?
15、JS:
如何獲取頁面上的元素(至少兩種)如何獲取頁面上的元素數(shù)組
如何給該元素賦值
16、string 類是否可以被繼承?
17、String和StringBuffer的區(qū)別?
18、==與equals的區(qū)別
19、如何將“我愛你”變成“你愛我”
20、在你經(jīng)歷的項目中,是如何定義常量的?又是如何取值的?
21、開發(fā)當中如何輸出一個某種編碼的字符串?
22、Spring是什么?在你的實際項目中如何應用?
23、Struts 在你的項目中是如何運用的?
24、兩個項目之間如何實現(xiàn)數(shù)據(jù)共享?
25、Windows下tomcat如何部署工程?
26、Windows下啟動、關閉tomcat命令?
27、請寫出JSP的內(nèi)置對象,以及每個對象的常見使用場景(對象知道幾個寫幾個,場景每個對象寫一個)
28、請寫出Object類的方法以及方法作用
29、五大框架分別是什么?
30、九大隱士對象其中四個作用是什么?
31、常見的異常有哪些?
32、session cookie 的意義?
33、請描述session的原理
34、hibernate的五大接口是什么? 10月25日筆試題
1、請寫出JSP的內(nèi)置對象,以及每個對象的常見使用場景(對象知道幾個寫幾個,場景每個對象寫一個)
2、請寫出Object類的方法以及方法作用
3、五大框架分別是什么?
4、JSP九大內(nèi)置對象及四個作用域是什么?
5、常見的異常有哪些?
6、session cookie 的意義?
7、請描述session的原理
8、hibernate的五大接口是什么?
9、寫出一個冒泡排序算法的例子
10、用JavaScript寫一個功能,判斷頁面上,“Name”和“Age”兩個輸入框都必須填入內(nèi)容才能提交Form
11、Overload和Override的區(qū)別,Overloaded的方法是否可以改變返回值的類型?
12、Hibernate的緩存等級及其特點
13、什么是MVC?分析一下Struts是如何實現(xiàn)mvc的?
14、用簡短的代碼實現(xiàn)字符“s tr in g”到“s tr in g”轉(zhuǎn)換,即將多個空格轉(zhuǎn)換為一個空格
15、Hashtable和Hashmap的區(qū)別是什么?
16、簡單描述下面向?qū)ο蟮奶卣鳎⑴e例說明你對面向?qū)ο蟮睦斫猓?/p>
17、請說出你知道的線程同步方法
18、ArrayList和Hsahset的區(qū)別
19、什么是Ajax,簡單描述Ajax的工作過程和機制 20、Hibernate 延時加載的意義是什么?
21、Servlet的生命周期是什么?
22、Doget 和Dopost的區(qū)別是什么?
23、Hibernate的優(yōu)缺點是什么?
24、一級緩存和二級緩存各是如何用的?
25、Error和Exception有什么區(qū)別?
26、垃圾回收機制的原理?
27、多線程有幾種實現(xiàn)方法?同步有幾種實現(xiàn)方法?
28、Spring的工作原理是什么?
29、AOP是什么?
30、Set怎樣實現(xiàn)數(shù)據(jù)不重復?
31、集合有哪幾種,他們各自的區(qū)別是什么?
32、Hibernate與JDBC的區(qū)別是什么?
33、JSP與servlet的區(qū)別是什么?
34、用C標簽輸出1到100中5的倍數(shù)的數(shù)
35、Singleton的作用
36、接口與抽象類的區(qū)別
37、數(shù)據(jù)庫中刪除相同記錄的SQL語句是什么?
38、談談你對Struts 2的理解
第四篇:Java面試題個人總結(jié) + 答案
本人最近參加了大大小小很多公司的面試,在這里我把自己面試遇到的問題給大家說一下
JAVA基礎篇
1、在java類加載器中,系統(tǒng)類加載器和用戶自定義加載器那個先加載?(遇到這個問題時感覺很意外,沒有想到會問這樣的問題)
先加載系統(tǒng)類加載器
Java類加載器加載類順序依次為:
JVM類加載器:這個模式會加載JAVA_HOME/lib下的jar包
擴展類加載器:會加載JAVA_HOME/lib/ext下的jar包
系統(tǒng)類加載器:這個會去加載指定了classpath參數(shù)指定的jar文件
用戶自定義類加載器:sun提供的ClassLoader是可以被繼承的,允許用戶自己實現(xiàn)類加載器
2、堆和棧分別存放什么?
棧:基本數(shù)據(jù)類型和對象的引用
堆:對象和數(shù)組
3、String、StringBuffer、StringBuilder的區(qū)別
(1)String是不可變對象,也就是說每次修改String都是新建了一個對象并賦值(2)StringBuffer是字符緩沖區(qū),修改它不會新建對象,可以使用append()方法和delete()方法修改StringBuffer的值
(3)StringBuilder可以替代StringBuffer,它是一個單線程使用的類,和StringBuffer比速度快、效率高,但是是非安全的
(4)三者都是被final修飾的(這一點面試官的問我的時候一直在說,你確定嗎?搞得我有點虛)
4、Java的異常和錯誤有什么區(qū)別?
(1)Error Error是JVM的錯誤,這種錯誤會嚴重影響程序的運行,設計者不會設計程序代碼去捕捉這種錯誤,因為即使捕捉到也無法給予適當?shù)奶幚恚热鐑?nèi)存溢出。(2)Exception Exception包含了一般性的異常,這些異常同在在捕捉到之后便可做妥善的處理,以確保程序繼續(xù)運行。Exception有很多種分類,從Exception產(chǎn)生的時機上我們可以把Exception分為
①運行時異常
運行時異常是指程序運行過程中可能出現(xiàn)的非正常狀態(tài) ②非運行時異常
非運行時異常是指方法聲明時throws的異常
5、&和&&的區(qū)別
&是位運算符,表示按位與運算。&&是邏輯運算符,表示邏輯與。在條件判斷的時候&必須逐一檢查各個條件,&&具有短路功能,只要一個條件為false則不會進行后續(xù)的判斷。
6、abstract class和interface的區(qū)別
(1)abstract class是抽象類,聲明方法的存在而不去實現(xiàn)它的類叫做抽象類,它用于創(chuàng)建一個體現(xiàn)某些基本行為的類。抽象類中不能有構(gòu)造方法、不能有靜態(tài)方法,抽象類不能被實例化。抽象類中可以有變量、可以有普通方法、可以有抽象方法,在繼承抽象方法后,必須實現(xiàn)它的所有抽象方法。
(2)interface是接口,接口中的變量必須是靜態(tài)常量(static final),接口中的方法必須都是抽象方法(abstract),不過由于接口中所有變量、方法修飾符都一致,因可以不寫。接口的實現(xiàn)必須實現(xiàn)接口中所有的方法。
7、final、finally、finalize的區(qū)別
(1)final是用來描述變量、方法、類的關鍵字,表示變量值不可變、方法不可被重寫、類不可被繼承
(2)finally是異常處理的關鍵字,表示finally塊里面的代碼一定會被運行到(3)finalize是Object類中的protected方法,垃圾回收器執(zhí)行的時候會調(diào)用被回收的類的此方法。
8、接口是否可以繼承接口?抽象類是否可以實現(xiàn)接口?抽象類是否可以實現(xiàn)實體類?
(1)接口可以繼承接口
(2)抽象類里可以有普通方法,因此抽象類可以實現(xiàn)接口,只需要實現(xiàn)接口內(nèi)所有方法就可以了
(3)抽象類里可以有普通方法,變量也不需要是常量,因此抽象類可以實現(xiàn)實體類
9、一個”.java”源文件中是否可以包含多個類(非內(nèi)部類)?有什么限制?
可以。必須只有一個類名與文件名相同且該類以public修飾
10、java是怎么通過包名.類名來獲得該類的實例的?
通過Class.forName()方法
11、介紹一下集合?
①Collection:是最基本的集合接口,一個collection代表一組Object,即collection的元素。
②List:是collection的擴展,作用是收集對象,并以索引方式保留收集對象的順序。其元素有放入順序,元素可重復。
1)ArrayList:利用類似于數(shù)組的形式來存儲數(shù)據(jù),它的隨機訪問速度極快。
2)LinkedList:內(nèi)部實現(xiàn)是鏈表,它適合于在鏈表中間需要頻繁的插入和刪除操作。
3)Vector:與ArrayList相似,但是兩者不同,Vector主要用在事先不知道數(shù)組的大小,或者只是需要一個可以改變大小的數(shù)組的情況。
4)ArrayList與Vector的區(qū)別:
ArrayList是非線程安全的,效率高
Vector是基于線程安全的,效率低。
③Set:也是collection的擴展,在Set中的元素對象要求不能重復(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的)。常用實現(xiàn)類有HashSet和TreeSet。
1)HashSet:其核心是HashMap,HashSet中存放的值為HashMap中的key,這也就是HashSet不允許重復的原因。
2)TreeSet:底層由平衡二叉樹實現(xiàn),它會將投入其中的元素自動排序,這就要求投入其中的元素是可排序的,也就是說,存放的必須是同一種數(shù)據(jù)類型。其實現(xiàn)自動排序的實質(zhì)是compareable
public int compareTo(Object obj){ if(equals(obj)){
return 0;}else{ Return 1;} }
這個方法稱為比較器,可以比較兩個對象,如果對象都一致相等,則返回0 ④Map:沒有繼承collection接口,提供key到value的映射,也就是說,它是一種把鍵對象和值對象進行關聯(lián)的容器。
1)HashMap:key不允許重復,如果后面的key重復,則會覆蓋前面的值,key允許為null,但是只能有一個。
2)TreeMap:key如果是一個對象的話,這個對象所在的類一定要實現(xiàn)compareable接口,并且重寫compareTo方法。3)HashMap與HashTable比較:
HashMap:非線程安全,高效率,支持null HashTable:線程安全,低效率,不支持null
12、list、set和map的遍歷方法比較:
List:可以用for循環(huán)、for each循環(huán)和Iterator迭代。
Set:可以用for each循環(huán)和Iterator迭代。
Map:HashMap只能用Iterator迭代。
13、寫一個單例設計模式: Public class Apple{ Private static Apple apple;Private Apple(){ } Public static Apple getApple(){ If(null == apple){ apple = new Apple();return apple;}else{ return apple;} } }
14、說說static關鍵字:
Static表示“全局”或“靜態(tài)”的意思,可以用來修飾成員變量和成員方法,也可以形成靜態(tài)代碼塊,還可以用來修飾類,但只能修飾內(nèi)部類。
①static變量:被static修飾的變量叫靜態(tài)變量或者類變量;沒有被static修飾的變量叫實例變量。二者的區(qū)別是:
靜態(tài)變量:在內(nèi)存中只有一個拷貝(節(jié)省內(nèi)存),jvm只會為靜態(tài)分配一次內(nèi)存,而且在加載類的過程中就完成靜態(tài)變量的內(nèi)存分配。可用類名直接訪問(方便),也可以用對象來訪問(不推薦)。靜態(tài)變量一般用于對象之間需要共享值時。
實例變量:每創(chuàng)建一個實例,就會為實例分配一次內(nèi)存,實例變量在內(nèi)存中可以有多個拷貝,互不影響(靈活)。
②靜態(tài)方法:它可以直接通過“類名.靜態(tài)方法”來訪問,任何的實例亦可以調(diào)用。靜態(tài)方法中不能用this和super關鍵字。不能直接訪問所屬類的實例變量和實例方法,只能訪問所屬類的靜態(tài)變量和成員方法。
③static代碼塊:static代碼塊也叫靜態(tài)代碼塊,是在類中獨立于類成員的static語句塊,可以有多個,位置也可以隨便放,它不在任何的方法體內(nèi),jvm在加載類時會執(zhí)行這些靜態(tài)代碼塊,如果有多個,則會按照他們在類中出現(xiàn)的先后順序一次執(zhí)行它們,而且每個代碼塊只會執(zhí)行一次。
15、Servlet的生命周期:
①加載和實例化:在Servlet容器檢測到需要這個Servlet來響應第一個請求時,創(chuàng)建Servlet實例。
②初始化:在Servlet實例化后,容器將調(diào)用Servlet的init()方法初始化這個對象。
③請求處理:Servlet容器將調(diào)用Servlet的service()方法對請求進行處理。
④服務終止:當容器檢測到一個Servlet的實例應該從服務中被移除的時候,容器就會調(diào)用實例的destroy()方法
16、jsp九大內(nèi)置對象范圍比較:
排序為:Application > Session > Request > Page = Response = out = PageContext = config = exception。
Application:服務器啟動到停止這段時間。
Session:Http會話開始到結(jié)束這段時間(瀏覽器打開到關閉)
Request:Http請求開始到結(jié)束這段時間,即一個jsp頁面發(fā)出請求到另一個jsp頁面之間。
Page:頁面執(zhí)行,當前頁面從打開到關閉這段時間,它只能在同一個頁面中有效
Response:頁面執(zhí)行,包含了客戶請求的有關信息,但jsp中很少用到它。
Out:頁面執(zhí)行,向客戶端輸入內(nèi)容時常用的對象
PageContext:頁面執(zhí)行,取得任何范圍的參數(shù),通過它可以獲得out、Requset、Response、Session、application等對象。
Config:頁面執(zhí)行,取得服務器的配置信息。
Exception:僅在錯誤處理頁面
17、jsp和servlet的區(qū)別與聯(lián)系:
①JSP第一次運行的時候會編譯成Servlet,駐留在內(nèi)存中以供調(diào)用
②JSP是web開發(fā)技術,Servlet是服務器端運用的小程序 ③JSP更多的是進行頁面顯示,Servlet更多的是處理業(yè)務,即JSP是頁面,Servlet是實現(xiàn)JSP方法
④開發(fā)界面是JSP時,可以直接編寫:
out.println(“
18、final關鍵字的作用
(1)final修飾的基本數(shù)據(jù)類型的值不可被改變,final修飾的引用類型的引用不可變而引用的值還是可以變的
(2)final修飾的方法不可被重寫(3)final修飾的類不可被繼承
(4)final修飾的基本數(shù)據(jù)類型的形參在方法體內(nèi)不可以被重新賦值,final修飾的引用類型的形參不可以被賦予一個新的引用
數(shù)據(jù)庫方面
1、問你怎么同時更新一個表中的兩個字段?(假設表名為A,要更新的字段分別為name、age)
update A set name = ‘ 姚明’ , age = 35 where id = 10;
2、給student添加一個來自classes的外鍵:(這個很容易被我們自己忽視)
alter table student add constraint fk_stu_cls foreign key(cid)references classes(cid);
3、數(shù)據(jù)庫三范式:屬性唯
一、記錄唯
一、表唯一
4、查詢結(jié)果按tid排序(降序):select * from test order by tid desc;(默認是按升序的)
5、oracle的左外連接
Select * from dept d left outer join emp e on d.deptno = e.deptno
order by d.deptno,e.ename;
SSH框架
1、hibernate和JDBC相比有什么優(yōu)勢?
1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復性代碼。2.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程度的簡化DAO層的編碼工作
3.hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。
4.hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。
2、為什么要用struts?
JSP、Servlet、JavaBean技術的出現(xiàn)給我們構(gòu)建強大的企業(yè)應用系統(tǒng)提供了可能。但用這些技術構(gòu)建的系統(tǒng)非常的繁亂,所以在此之上,我們需要一個規(guī)則、一個把這些技術組織起來的規(guī)則,這就是框架,Struts便應運而生。
3、為什么要用spring?
AOP 讓開發(fā)人員可以創(chuàng)建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用 AOP 后,公共服務(比如日志、持久性、事務等)就可以分解成方面并應用到域?qū)ο笊希瑫r不會增加域?qū)ο蟮膶ο竽P偷膹碗s性。
IOC 允許創(chuàng)建一個可以構(gòu)造對象的應用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞倒置所表明的,IOC 就像反過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構(gòu)造(straight construction),每一個對象都是用其協(xié)作對象構(gòu)造的。因此是由容器管理協(xié)作對象(collaborator)。
Spring即使一個AOP框架,也是一IOC容器。Spring 最好的地方是它有助于您替換對象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的協(xié)作對象。
4、什么是MVC模式?有什么作用?
MVC全名Model View Controller,即模型-視圖-控制器,是一種非常經(jīng)典的軟件架構(gòu)模 式。從設計角度看,它將多個設計模式在一種解決方案中結(jié)合起來,用來解決許多設計問題。MVC模式把用戶界面交互分拆到不同的三個角色中,即:
(1)模型:持有所有的數(shù)據(jù)、狀態(tài)和程序邏輯,獨立于視圖和控制器。
(2)視圖:用來呈現(xiàn)模型。視圖通常直接從模型中取得它要顯示的狀態(tài)和數(shù)據(jù)。對于相同 的信息可以有多個不同的顯示形式或視圖。(3)控制器:位于視圖和模型中間,負責接收用戶的輸入,將輸入進行解析并反饋給模型,通常有一個模型具有一個控制器。
5、hibernate的三種狀態(tài):
瞬時狀態(tài)
持久狀態(tài)
游離狀態(tài)
6、C/S和B/S的區(qū)別:
優(yōu)點:
C/S:占用網(wǎng)速小,對于一些網(wǎng)速比較慢的電腦有明顯的優(yōu)勢。
B/S:不需要安裝客戶端,只需要瀏覽器就能打開。缺點:
C/S:需要安裝客戶端,有時候需要更新。
B/S:對網(wǎng)速的需求大,對于一些網(wǎng)速慢的電腦不適合。
7、struts2 的核心是什么?它與struts1有什么關系?
struts2的核心是WebWork,與struts1沒關系
8、列舉五個struts2中的攔截器: ①alias:實現(xiàn)在不同請求中相似參數(shù)別名的轉(zhuǎn)換。②autowiring:自動裝配的攔截器,主要用于當struts2和spring整合時,struts2可以使用自動裝配的方式來訪問spring容器中的bean。
③createSession:該攔截器負責創(chuàng)建一個httpSession對象,主要用于那些需要有httpSession對象才能正常工作的攔截器。
④debugging:當使用struts2的開發(fā)模式時,這個攔截器會提供更多的調(diào)試信息。
⑤exception:這個攔截器負責處理異常,它將異常映射為結(jié)果。
⑥fileUpload:這個攔截器主要用于文件上傳,它負責解析表單文件域中的內(nèi)容。
⑦i18n:支持國際化的攔截器,它負責把所選的語言、區(qū)域放入用戶session中。
⑧params:這是一個最基本的攔截器,它負責解析HTTP請求中的參數(shù),并將參數(shù)值設置成對應的Action屬性值。⑨t(yī)oken:防止重復提交,它檢查傳到Action中的token,從而防止多次提交。⑩validation:通過執(zhí)行XXXAction-validation.xml中定義的校驗器,從而完成數(shù)據(jù)校驗。
9、Spring注入方法:
①設值注入:通過setter訪問容器實現(xiàn)
②構(gòu)造注入:通過構(gòu)造函數(shù)實現(xiàn)
③P命名空間注入
10、spring實現(xiàn)注解的配置:
第五篇:java程序員面試題
1、你怎樣理解Struts,又那些配置文件,以及作用? 理解:http://ruixin.iteye.com/blog/899289 配置文件:struts.xml 作用:struts 框架mvc 實現(xiàn)低耦合,便于程序的維護~ 配置文件控制流程的轉(zhuǎn)向 很清晰~ 主要負責具體業(yè)務的實現(xiàn)和頁面的轉(zhuǎn)向~
2、怎么樣來捕獲數(shù)據(jù)庫中的異常?
3、如何處理網(wǎng)頁中的驗證信息,如何友好的進行處理?
4、用javaScript實現(xiàn)java中的監(jiān)聽器功能?
5、你對對日外包的看法?
6、數(shù)據(jù)庫連接方式由哪幾種?
Jdbc、連接池、hibernate
7、你清楚哪幾種設計模式,談談各種設計模式的類結(jié)構(gòu)。
8、談談jsp和sevlet的區(qū)別,以及它們性能上的區(qū)別。
jsp是servlet的一種簡化,jsp編譯后是“類servlet”。servlet 主要是用來處理業(yè)務層;
jsp 則是主要負責 表現(xiàn)層。
servlet完全是java程序代碼構(gòu)成,擅長于流程控制和事務處理,而通過servlet來生成動態(tài)網(wǎng)頁很不直觀; 對于靜態(tài)的html標簽,servlet都必須使用頁面輸出流逐行輸出。Servlet中沒有內(nèi)置對象。Jsp由html代碼和jsp標簽構(gòu)成可以方便地編寫動態(tài)網(wǎng)頁,在struts框架中,jsp位于MVC設計模式的視圖層,而servlet位于控制層。
總之,使用jsp只需要完成程序員需要輸出到客戶端的內(nèi)容,至于jsp中的java腳本如果鑲嵌到一個類中,由jsp容器完成,而servlet則是個完整的java類,這個類的service方法用于生成對客戶端的響應
9、如何來編寫存儲過程,如何優(yōu)化存儲過程,以及存儲過程和TSQL的區(qū)別。
10、提供的培訓,CMM-5軟件開發(fā)流程培訓、代碼編寫規(guī)范和業(yè)務流程培訓、對日語的培訓。
1、為什么要選擇這個行業(yè),和計算機專業(yè)的相比有什么優(yōu)勢?
2、Servlet是什么,以及生命周期?
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調(diào)用其destroy方法。
與cgi的區(qū)別在于servlet處于服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務于多個請求,并且其實例一般不會銷毀,而CGI對每個請求都產(chǎn)生新的進程,服務完成后就銷毀,所以效率上低于servlet。
3、怎么理解事務?
4、怎么理解MVC?
自己做自己的事情,主要強調(diào)分層,5、同時插入大量數(shù)據(jù),使用何種方法優(yōu)化?Batch
6、多個有關系得怎么樣操作?
7、你認為你還有什么優(yōu)點在前面沒有提到?
8、對加班的看法?
9、與上級意見不一致時怎么樣處理?10、11、12、13、14、15、16、17、18、19、20、21、22、23、你如何理解團隊精神?
你怎樣處理學習新技術和項目開發(fā)之間的矛盾? 怎樣去學習新技術?
作為一個初級程序員怎么樣彌補與有經(jīng)驗程序員之間的差距? 你對索引的理解,索引有幾種,什么時候用索引? 對Oracle理解?
怎樣優(yōu)化復雜的查詢語句? 你對Jdbc理解?
對Finally塊的理解和應用? 游標的理解? ResultSet 重載,重寫? 簽名
EJB的事務,Hibernate的事務? Struts的標簽? 重定向和跳轉(zhuǎn)? A、
a.地址欄不改變跳轉(zhuǎn)——服務器端跳轉(zhuǎn),服務器之間內(nèi)部轉(zhuǎn),相同的request,可傳參;
b.執(zhí)行到跳轉(zhuǎn)語句后無條件立刻跳轉(zhuǎn)——之后的代碼不再被執(zhí)行;
注意:如果使用forward跳轉(zhuǎn),則一定要在跳轉(zhuǎn)之前釋放掉全部的資源;
c.使用forward時,request設置的屬性依然能保留在下一個頁面(setAttribute);d.通過
e.地址中的”/”代表是:http://localhost:8080/Test B、response.sendRedirect(“地址”):效率低,速度慢
a.地址欄改變跳轉(zhuǎn)——客戶端跳轉(zhuǎn)(其中地址可以是任意的)
b.所有代碼執(zhí)行完畢之后再跳轉(zhuǎn),跳轉(zhuǎn)語句后面的代碼還是會執(zhí)行,除非在其后面加上return(return)需復雜一些。
<% Response.sendRedirect(“aa.jsp”);boolean b = true;
if(b){ Return;} System.out.println(“aaaaaaaaaa”);%>
c.不能保存request屬性——地址改變了,客戶端跳轉(zhuǎn),不同的request d.通過對URL地址的重寫傳遞參數(shù):
response.sendRedirect(“responseDemo04.jsp?id=mldn”);
e.地址中的”/”代表是:http://localhost:8080/
下面是兩種比較重要的跳轉(zhuǎn),我還是與上次的一次,把我做的筆記貼出來:24、25、Hibernate的左聯(lián)結(jié)和右連接,緩存,數(shù)據(jù)加載? 面向?qū)ο笕绾卫斫?
26、EJB中CMP和BMP,SessionBean的機制?27、28、29、對日外包是否有抵觸情緒? 如何減少Servlet的請求? 對設計模式了解多少?作過的項目中用過那些設計模式? 30、31、32、33、34、35、36、37、38、39、40、41、42、43、44、45、怎樣看待團隊合作,在團隊合作中你扮演什么樣的角色,遇到技術難題時怎么解決? Exception的層次結(jié)構(gòu)? EJB對數(shù)據(jù)庫的訪問機制? Struts中是否有事務處理? Hibernate的其它功能(除了ORM)? 如何提高數(shù)據(jù)庫中的數(shù)據(jù)查詢效率? 作為項目經(jīng)理如何對組內(nèi)成員分工? 描述一下你做過項目的流程。
加班到12點,突然有人來問你技術上的難題,你會如何處理? Oracle的冷備份、熱備份 Strurs中怎樣實現(xiàn) Hibernate怎樣實現(xiàn)ORM Spring 的事務處理機制
Strurs的驗證方式,Javascript的驗證的方式
一個是服務器端驗證,一個是客戶端驗證
Struts的工作機制 Delete/trancate的區(qū)別
trancate與delete都是刪除數(shù)據(jù),不同的是trancate是將表的所有數(shù)據(jù)都刪除,而delete可以有選擇地刪除數(shù)據(jù); delete刪除數(shù)據(jù)是記錄在日志中的,可以通過其將數(shù)據(jù)恢復,而trancate則是將整個表截斷,其操作是不記錄在日志里的。46、47、48、作為項目組長,你遇到的最大問題是什么?如何解決?
Ajax/內(nèi)嵌框架實現(xiàn)局部刷新,有什么差別?
Exception/Error的區(qū)別,在什么情況下可以拋出RuntimeException 父類不同
知道異常和錯誤最本質(zhì)的區(qū)別就是異常能被開發(fā)人員處理而錯誤時系統(tǒng)本來自帶的,一般無法處理也不需要我們程序員來處理。
在程序運行時候出錯而又不是系統(tǒng)原因差生的,一般是由于程序原因產(chǎn)生,比如程序?qū)懙牟粔驀乐敗⑼晟?/p>
典型的RuntimeException
有
ArithmeticException、ClassCastException、IndexOutOfBoundsException、NullPointerException、UnsupportedOperationException 等.49、50、51、52、53、54、55、56、57、58、59、Orcale 物化視圖(MV)
業(yè)務處理模塊中,是如何處理事務? Sql語句如何優(yōu)化 數(shù)據(jù)庫右連接
JDBC的連接關閉在哪?
Finally語句塊內(nèi)
錯誤處理模塊是放在哪個層的。接口能否繼承接口。
接口可以繼承接口..但是要使用extends~而不是用implements 抽象類能否繼承實體類。
抽象類是可以繼承實體類,但前提是實體類必須有明確的構(gòu)造函數(shù) 答案很明確,可以繼承。
項目中查詢時怎么樣實現(xiàn)的?
作為項目負責人你是管理這個團隊的?
在你做項目過程中遇到些什么問題,是怎么樣解決的?
Jquery中的幾種選擇器:
Javascript如何進行數(shù)字和字符串之間的轉(zhuǎn)換?
數(shù)字類型轉(zhuǎn)換成String類型用 對象=對象.toString()方法,字符串轉(zhuǎn)換成數(shù)字類型則是對象=Number(對象);