SCME技術方向面試題(2017)
一、JAVA基礎面試題
1、面向物件的特徵有哪些方面
封裝、 繼承、 多型
2、String是最基本的資料型別嗎?
String不是基本資料型別,Java中的基本資料型別包括byte、int、char、long、float、double、boolean和short。
3、int 和 Integer 有什麼區別?
Java 提供兩種不同的型別:引用型別和原始型別(或內建型別)。Int是java的原始資料型別,Integer是java為int提供的封裝類。
4、String 和StringBuffer的區別?
JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。
5、執行時異常與一般異常有何異同?
異常表示程式執行過程中可能出現的非正常狀態,執行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見執行錯誤。java編譯器要求方法必須宣告丟擲可能發生的非執行時異常,但是並不要求必須宣告丟擲未被捕獲的執行時異常。
6、說出ArrayList,Vector, LinkedList的儲存效能和特性?
ArrayList和Vector都是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢,Vector由於使用了synchronized方法(執行緒安全),通常效能上較ArrayList差,而LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
7、Collection
Collection是集合類的上級介面,繼承與他的介面主要有Set 和List。Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作。
8、&和&&的區別?
&是位運算子,表示按位與運算,&&是邏輯運算子,表示邏輯與(and)。
9、HashMap和Hashtable的區別?
HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable。HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
10、final, finally, finalize的區別?
final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。
11、sleep() 和 wait() 有什麼區別?
sleep是執行緒類(Thread)的方法,導致此執行緒暫停執行指定時間,給執行機會給其他執行緒,但是監控狀態依然保持,到時後會自動恢復。呼叫sleep不會釋放物件鎖。
wait是Object類的方法,對此物件呼叫wait方法導致本執行緒放棄物件鎖,進入等待此物件的等待鎖定池,只有針對此物件發出notify方法(或notifyAll)後本執行緒才進入物件鎖定池準備獲得物件鎖進入執行狀態。
12、Overload和Override的區別?Overloaded的方法是否可以改變返回值的型別?
方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding)。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被“遮蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別,則稱為方法的過載(Overloading)。Overloaded的方法是可以改變返回值的型別。
13、error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。exception 表示一種設計或實現問題。也就是說,它表示如果程式執行正常,從不會發生的情況。
14、同步和非同步有何異同,在什麼情況下分別使用他們?
如果資料將線上程間共享。例如正在寫的資料以後可能被另一個執行緒讀到,或者正在讀的資料可能已經被另一個執行緒寫過了,那麼這些資料就是共享資料,必須進行同步存取。
當應用程式在物件上呼叫了一個需要花費很長時間來執行的方法,並且不希望讓程式等待方法的返回時,就應該使用非同步程式設計,在很多情況下采用非同步途徑往往更有效率。
15、abstract class和interface有什麼區別?
宣告方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立一個變數,其型別是一個抽象類,並讓它指向具體子類的一個例項。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何物件上呼叫介面的方法。由於有抽象類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面。
16、heap和stack有什麼區別?
棧是一種線形集合,其新增和刪除元素的操作應在同一段完成。棧按照後進先出的方式進行處理。堆是棧的一個組成元素。
17、Static Nested Class 和 Inner Class的不同?
Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項被例項化。而通常的內部類需要在外部類例項化後才能例項化。
18、什麼時候用assert?
assertion(斷言)在軟體開發中是一種常用的除錯方式,很多開發語言中都支援這種機制。在實現中,assertion就是在程式中的一條語句,它對一個boolean表示式進行檢查,一個正確程式必須保證這個boolean表示式的值為true;如果該值為false,說明程式已經處於不正確的狀態下,系統將給出警告或退出。一般來說,assertion用於保證程式最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高效能,在軟體釋出後,assertion檢查通常是關閉的。
19、GC是什麼? 為什麼要有GC?
GC是垃圾收集的意思(Gabage Collection),記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導致程式或系統的不穩定甚至崩潰,Java提供的GC功能可以自動監測物件是否超過作用域從而達到自動回收記憶體的目的,Java語言沒有提供釋放已分配記憶體的顯示操作方法。
20、short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換型別)
short s1 = 1; s1 += 1;(可以正確編譯)
21、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
22、String s = new String("xyz");建立了幾個String Object?
兩個
23、Java有沒有goto?
java中的保留字,現在沒有在java中使用。
24、啟動一個執行緒是用run()還是start()?
啟動一個執行緒是呼叫start()方法,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由JVM排程並執行。這並不意味著執行緒就會立即執行。run()方法可以產生必須退出的標誌來停止一個執行緒。
25、介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的建構函式。
26、List, Set, Map是否繼承自Collection介面?
List,Set是,Map不是
27、陣列有沒有length()這個方法? String有沒有length()這個方法?
陣列沒有length()這個方法,有length的屬性。String有length()這個方法。
28、Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一物件equals()在類中被覆蓋,為的是當兩個分離的物件的內容和型別相配的話,返回true。
29、構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被過載Overloading。
30、是否可以繼承String類?
String類是final類故不可以繼承。
31、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數表示式。因此傳遞給 switch 和 case 語句的引數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
32、try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?
會執行,在return前執行。
33、程式設計題: 用最有效率的方法算出2乘以8等於幾?
2 << 3
34、兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
35、當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
是值傳遞。Java 程式語言只有值傳遞引數。當一個物件例項作為一個引數被傳遞到方法中時,引數的值就是對該物件的引用。物件的內容可以在被呼叫的方法中改變,但物件的引用是永遠不會改變的。
36、當一個執行緒進入一個物件的一個synchronized方法後,其它執行緒是否可進入此物件的其它方法?
不能,一個物件的一個synchronized方法只能由一個執行緒訪問。
37、請說出你所知道的執行緒同步的方法?
wait():使一個執行緒處於等待狀態,並且釋放所持有的物件的lock。
sleep():使一個正在執行的執行緒處於睡眠狀態,是一個靜態方法,呼叫此方法要捕捉InterruptedException異常。
notify():喚醒一個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某一個等待狀態的執行緒,而是由JVM確定喚醒哪個執行緒,而且不是按優先順序。
Allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒一個物件的鎖,而是讓它們競爭。
38、你所知道的集合類都有哪些?主要方法?
最常用的集合類是 List 和 Map。 List 的具體實現包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構建、儲存和操作任何型別物件的元素列表。 List 適用於按數值索引訪問元素的情形。
Map 提供了一個更通用的元素儲存方法。 Map 集合類用於儲存元素對(稱作“鍵”和“值”),其中每個鍵對映到一個值。
39、描述一下JVM載入class檔案的原理機制?
JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java執行時系統元件。它負責在執行時查詢和裝入類檔案的類。
40、char型變數中能不能存貯一箇中文漢字?為什麼?
能夠定義成為一箇中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一箇中文是沒問題的
41、多執行緒有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面
同步的實現方面有兩種,分別是synchronized,wait與notify
42、j2ee常用的設計模式?說明工廠模式。
Java中的23種設計模式:
Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),
Adapter(介面卡模式), Bridge(橋樑模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(直譯器模式), Visitor(訪問者模式),
Iterator(迭代子模式), Mediator(調停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某一個類的例項,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然後需要定義一個工廠類,工廠類可以根據條件生成不同的子類例項。當得到子類的例項後,開發人員可以呼叫基類中的方法而不必考慮到底返回的是哪一個子類的例項。
43、一個“.java”原始檔中是否可以包括多個類(不是內部類)?有什麼限制?
可以。必須只有一個類名與檔名相同。
44、java中有幾種型別的流?JDK為每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
位元組流,字元流。位元組流繼承於InputStream OutputStream,字元流繼承於InputStreamReader OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高效能和使用方便。
45、java中實現多型的機制是什麼?
方法的重寫Overriding和過載Overloading是Java多型性的不同表現。重寫Overriding是父類與子類之間多型性的一種表現,過載Overloading是一個類中多型性的一種表現。
46、什麼是java序列化,如何實現java序列化?
序列化就是一種用來處理物件流的機制,所謂物件流也就是將物件的內容進行流化。可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。序列化是為了解決在對物件流進行讀寫操作時所引發的問題。
序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是為了標註該物件是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(物件流)物件,接著,使用ObjectOutputStream物件的writeObject(Object obj)方法就可以將引數為obj的物件寫出(即儲存其狀態),要恢復的話則用輸入流。
47、是否可以從一個static方法內部發出對非static方法的呼叫?
不可以,如果其中包含物件的method();不能保證物件初始化.
48、在JAVA中,如何跳出當前的多重巢狀迴圈?
用break; return 方法。
49、List、Map、Set三個介面,存取元素時,各有什麼特點?
List 以特定次序來持有元素,可有重複元素。Set 無法擁有重複元素,內部排序。Map 儲存key-value值,value可多值。
50、說出一些常用的類,包,介面,請各舉5個?
常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql
常用的介面:Remote List Map Document NodeList
51、BS與CS的聯絡與區別?
C/S是Client/Server的縮寫。伺服器通常採用高效能的PC、工作站或小型機,並採用大型資料庫系統,如Oracle、Sybase、Informix或 SQL Server。客戶端需要安裝專用的客戶端軟體。
B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器(Browser),如Netscape Navigator或Internet Explorer,伺服器安裝Oracle、Sybase、Informix或 SQL Server等資料庫。在這種結構下,使用者介面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要事務邏輯在伺服器端實現。瀏覽器通過Web Server 同資料庫進行資料互動
52、java中實現多型的機制是什麼?
靠的是父類或介面定義的引用變數可以指向子類或具體實現類的例項物件,而程式呼叫的方法在執行期才動態繫結,就是引用變數所指向的具體例項物件的方法,也就是記憶體里正在執行的那個物件的方法,而不是引用變數的型別中定義的方法。
53、String s = "Hello";s = s + " world!";這兩行程式碼執行後,原始的String物件中的內容到底變了沒有?
原始的String物件內容沒有改變
54、如何把一段逗號分割的字串轉換成一個數組?
可以呼叫字串中的方法split方法完成;
55、error和exception有什麼區別?
Error(錯誤)表示系統級的錯誤和程式不必處理的異常,是java執行環境中的內部錯誤或者硬體問題,比如,記憶體資源不足等,對於這種錯誤,程式基本無能為力,除了退出執行外別無選擇。
Exception(違例)表示需要捕捉或者需要程式進行處理的異常,它處理的是因為程式設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程式必須處理的。
56、請寫出你最常見到的5個runtimeexception?
NullPointerException、NumberFormatException、ArrayIndexOutOfBoundsException、ClassCastException 、
ArithmeticException
- 多執行緒有幾種實現方法?同步有幾種實現方法?
java中實現多線可以使用2種方法,第一種繼承Thread類,第二種實現Runnable介面;同步實現可以使用同步方法或同步塊
58、執行緒的基本狀態以及狀態之間的關係?
狀態:就緒,執行,synchronize阻塞,wait和sleep掛起,結束。wait必須在synchronized內部呼叫。
呼叫執行緒的start方法後執行緒進入就緒狀態,執行緒排程系統將就緒狀態的執行緒轉為執行狀態,遇到synchronized語句時,由執行狀態轉為阻塞,當synchronized獲得鎖後,由阻塞轉為執行,在這種情況可以呼叫wait方法轉為掛起狀態,當執行緒關聯的程式碼執行完後,執行緒變為結束狀態
59、介紹Collection框架的結構?
Collection是集合框架的頂層介面,從它派生出List和Set,ArrayList和Vector實現List介面,HashSet和TreeSet實現Set介面;Map集合為獨立的,派生出HashMap和HashTable集合
60、ArrayList和Vector的區別?
1.Vector是執行緒安全的,也就是說是同步的,而ArrayList是執行緒序不安全的,不是同步的數
2.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半
61、HashMap和Hashtable的區別?
1. hashtable是同步的 hashmap不是
2. hashtable不允許null hashmap允許
62、List, Set,Map是否繼承自Collection介面?
List和Set繼承至Collection介面,而Map不是
63、位元組流與字元流的區別?
位元組流是最基本的,採用ASCII編碼,所有的InputStream和OutputStream的子類都是,主要用在處理二進位制資料,它是按位元組來處理的;
64、Class.forName的作用?
Class.forName的作用是動態載入類
65、Statement和PreparedStatement的區別?
區別一:PreparedStatement可以執行帶引數的SQL語句,區別二:執行預編譯的SQL語句,效率高於Statement,
區別三:可以預防SQL注入的漏洞;
66、介紹JDBC API的作用?
DriverManager:用於管理JDBC驅動並建立與資料庫的連線
Connection:用於管理資料庫連線並建立Statement物件
Statement:用於執行SQL語句
ResultSet:用於處理查詢返回的結果集
CallableStatement:用於執行儲存過程
67、log4j的日誌級別?
log4j的日誌級別從高到低:error、warn、info、debug
68、談談對反射機制的理解?
Reflection 是 Java 程式開發語言的特徵之一,它允許執行中的 Java 程式對自身進行檢查,或者說“自審”,並能直接操作程式的內部屬性
69、JDBC中如何管理事事務?
Connection.setAutoCommit(false);
Connection.rollback(); 回滾事務
Connection.commit(); 提交事務
70、super和this的區別?
this表示當前物件,也就是當前類物件,super表示當前類的父類。
71、如何得到查詢結果集中的欄位資訊?
使用ResultMetaDate
72、TCP和UDP的區別?
(1)TCP是面向連線的傳輸控制協議,而UDP提供了無連線的資料報服務;
(2)TCP具有高可靠性,確保傳輸資料的正確性,不出現丟失或亂序;UDP在傳輸資料前不建立連線,不對資料報進行檢查與修改,無須等待對方的應答,所以會出現分組丟失、重複、亂序,應用程式需要負責傳輸可靠性方面的所有工作;
(3)也正因為以上特徵,UDP具有較好的實時性,工作效率較TCP協議高;
(4)UDP段結構比TCP的段結構簡單,因此網路開銷也小。
73、throw和throws的區別?
throw是語句丟擲一個異常,throws是方法可能丟擲異常的宣告
74、super.getClass()方法獲取的是什麼?
獲取父類對應的Class物件
二、JAVA WEB面試題
1、說出Servlet的生命週期?
Servlet被伺服器例項化後,容器執行其init方法,請求到達時執行其service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將例項銷燬的時候呼叫其destroy方法。
2、forward 和redirect的區別?
forward是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器傳送的內容是從哪兒來的,所以它的位址列中還是原來的地址。
redirect就是服務端根據邏輯,傳送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有引數重新請求,所以session,request引數都可以獲取。
3、JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,適合用於包含動態頁面,並且可以帶引數。
靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面<%@ include file="included.htm" %>
4、說出資料連線池的工作機制是什麼?
J2EE伺服器啟動時會建立一定數量的池連線,並一直維持不少於此數目的池連線。客戶端程式需要連線時,池驅動程式會返回一個未使用的池連線並將其表記為忙。如果當前沒有空閒連線,池驅動程式就新建一定數量的連線,新建連線的數量有配置引數決定。當使用的池連線呼叫完成後,池驅動程式將此連線表記為空閒,其他呼叫就可以使用這個連線。
5、JSP的內建物件及方法?
request表示HttpServletRequest物件。它包含了有關瀏覽器請求的資訊,並且提供了幾個用於獲取cookie, header, 和session資料的有用的方法。
response表示HttpServletResponse物件,並提供了幾個用於設定送回 瀏覽器的響應的方法(如cookies,頭資訊等)
out物件是javax.jsp.JspWriter的一個例項,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。
pageContext表示一個javax.servlet.jsp.PageContext物件。它是用於方便存取各種範圍的名字空間、servlet相關的物件的API,並且包裝了通用的servlet相關功能的方法。
session表示一個請求的javax.servlet.http.HttpSession物件。Session可以存貯使用者的狀態資訊
applicaton 表示一個javax.servle.ServletContext物件。這有助於查詢有關servlet引擎和servlet環境的資訊
config表示一個javax.servlet.ServletConfig物件。該物件用於存取servlet例項的初始化引數。
page表示從該頁面產生的一個servlet例項
6、JSP的常用指令?
<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>
<%@include file=”filename”%>
<%@taglib prefix=”c”uri=”http://……”%>
7、什麼情況下呼叫doGet()和doPost()?
Jsp頁面中的form標籤裡的method屬性為get時呼叫doGet(),為post時呼叫doPost()
8、如何現實servlet的單執行緒模式?
<%@ page isThreadSafe=”false”%>
9、頁面間物件傳遞的方法?
request,session,application,cookie等
10、JSP和Servlet有哪些相同點和不同點,他們之間的聯絡是什麼?
JSP是Servlet技術的擴充套件,本質上是Servlet的簡易方式,更強調應用的外表表達。JSP編譯後是"類servlet"。Servlet和JSP最主要的不同點在於,Servlet的應用邏輯是在Java檔案中,並且完全從表示層中的HTML裡分離開來。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。JSP側重於檢視,Servlet主要用於控制邏輯。
11、作用域物件的描述?
page否是代表與一個頁面相關的物件和屬性。一個頁面由一個編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機發出的一個請求相關的物件和屬性。一個請求可能跨越多個頁面,涉及多個 Web 元件(由於 forward 指令和 include 動作的關係)
session是是代表與用於某個 Web 客戶機的一個使用者體驗相關的物件和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求
application是是代表與整個 Web 應用程式相關的物件和屬性。這實質上是跨越整個 Web 應用程式,包括多個頁面、請求和會話的一個全域性作用域
12、Request物件的主要方法?
setAttribute(String name,Object):設定名字為name的request的引數值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request物件所有屬性的名字集合,結果是一個列舉的例項
getCookies():返回客戶端的所有Cookie物件,結果是一個Cookie陣列
getCharacterEncoding():返回請求中的字元編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協議定義的檔案頭資訊
getHeaders(String name):返回指定名字的request Header的所有值,結果是一個列舉的例項
getHeaderNames():返回所以request Header的名字,結果是一個列舉的例項
getInputStream():返回請求的輸入流,用於獲得請求中的資料
getMethod():獲得客戶端向伺服器端傳送資料的方法
getParameter(String name):獲得客戶端傳送給伺服器端的有name指定的引數值
getParameterNames():獲得客戶端傳送給伺服器端的所有引數的名字,結果是一個列舉的例項
getParameterValues(String name):獲得有name指定的引數的所有值
getProtocol():獲取客戶端向伺服器端傳送資料所依據的協議名稱
getQueryString():獲得查詢字串
getRequestURI():獲取發出請求字串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關Session
getServerName():獲取伺服器的名字
getServletPath():獲取客戶端所請求的指令碼檔案的路徑
getServerPort():獲取伺服器的埠號
removeAttribute(String name):刪除請求中的一個屬性
13、J2EE是技術還是平臺還是框架?
2EE本身是一個標準,一個為企業分散式應用的開發提供的標準平臺。
J2EE也是一個框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術
14、Servlet執行時一般實現哪幾個方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
15、MVC的各個部分都有那些技術來實現?如何實現?
MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB元件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的元件實現。這些元件可以進行互動和重用。
16、jsp有哪些動作?作用分別是什麼?
JSP共有以下6種基本動作 jsp:include:在頁面被請求的時候引入一個檔案。 jsp:useBean:尋找或者例項化一個JavaBean。 jsp:setProperty:設定JavaBean的屬性。 jsp:getProperty:輸出某個JavaBean的屬性。 jsp:forward:把請求轉到一個新的頁面。 jsp:plugin:根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記。
17、什麼是struts框架?
Struts是採用Java Servlet/JavaServer Pages技術,開發Web應用程式的開放原始碼的framework。 採用Struts能開發出基於MVC(Model-View-Controller)設計模式的應用構架。 Struts有如下的主要功能: 一.包含一個controller servlet,能將使用者的請求傳送到相應的Action物件。 二.JSP自由tag庫,並且在controller servlet中提供關聯支援,幫助開發員建立互動式表單應用。 三.提供了一系列實用物件:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和訊息。
18、HTTP請求的GET與POST方式的區別?
1.GET 方法
GET 方法提交資料不安全,資料置於請求行,客戶端位址列可見;
GET 方法提交的資料大小限制在255 個字元之內
GET 方法不可以設定書籤
2.POST 方法
POST 方法提交資料安全,資料置於訊息主體內,客戶端不可見
POST 方法提交的資料大小沒有限制
19、談談model1和model2理解?
就是jsp+javabean和jsp+servlet+javabean兩種模式,前者是純JSP,後者是簡單的MVC,
是SUN公司對於MVC模式所先後推出的二種規範,第一種是JSP MODEL1,第二種則是JSP MODEL2.
MODEL1在一定程式上實現了MVC,即JSP是控制層與表示層合二為一了,BEAN則為模式層.這樣的效果顯然不如將控制層單獨劃分出來的好.而MODEL2則是將控制層(SERVLET)單獨的劃分出來了,專門負責業務流程的控制,接受頁面的請求,建立所需的JAVABEAN例項,並將處理後的資料再返回給JSP
20、我們在web應用開發過程中獲取請求引數值經常遇到亂碼問題,解決辦法有哪些?
呼叫request物件的setCharacterEncoding方法
21、如何驗證使用者是否登入?如何安全退出?
當用戶登陸成功將使用者物件儲存至Session中,通過從Session中判斷來驗證使用者是否登陸;當退出系統需要將使用者物件從Session中清除
22、Tomcat的優化經驗?
去掉對web.xml的監視,把jsp提前編輯成Servlet。
有富餘實體記憶體的情況,加大tomcat使用的jvm的記憶體
23、cookie和session的作用、區別、應用範圍,session的工作原理?
Cookie:主要用在儲存客戶端,其值在客戶端與服務端之間傳送,不安全,儲存的資料量有限。
Session:儲存在服務端,每一個session在服務端有一個sessionID作一個標識。儲存的資料量大,安全性高。佔用服務端的記憶體資源。
24、jstl是什麼?優點有哪些?
JSTL(JSP Standard Tag Library ,JSP標準標籤庫)是一個不斷完善的開放原始碼的JSP標籤庫,由四個定製標記庫(core、format、xml 和 sql)和一對通用標記庫驗證器(ScriptFreeTLV 和 PermittedTaglibsTLV)組成。優點有:
1、 在應用程式伺服器之間提供了一致的介面,最大程式地提高了WEB應用在各應用伺服器之間的移植。
2、 簡化了JSP和WEB應用程式的開發。
3、 以一種統一的方式減少了JSP中的scriptlet程式碼數量,可以達到沒有任何scriptlet程式碼的程式。在我們公司的專案中是不允許有任何的scriptlet程式碼出現在JSP中。
4、 允許JSP設計工具與WEB應用程式開發的進一步整合。相信不久就會有支援JSTL的IDE開發工具出現。
25、說說Struts框架的優點?
a、實現MVC模式,結構清晰,使開發者只需關注業務邏輯的實現。
b、有豐富的tag可以用,能大大提夠開發效率,縮短開發時間。
c、頁面導航。通過一個配置檔案,即可把握整個系統各部分之間的聯絡,這對於後期的維護有很大的好處
d、提供Exception處理機制
e、支援L18N
26、為什麼要用struts?
JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。
27、struts1與sturts2的區別(struts2是struts1和webwork的結合體)?
1、struts1要求Action類繼承一個抽象基類,而不是介面。
struts2的action類可以實現一個action介面,也可以實現其他介面。
2、sturts1 action是單例模式,執行緒是安全的。
struts2 action執行緒是不安全的,action為每一個請求都生成了一個例項。
3、sturts1過去依賴serlet API,不容易測試。
struts2不依賴於容器,允許Action脫離容器單獨被測試。
4、Struts1 使用ActionForm物件捕獲輸入。所有的ActionForm必須繼承一個基類。
Struts 2直接使用Action屬性作為輸入屬性,消除了對第二個輸入物件的需求。
5、Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本物件圖遍歷,但是對集合和索引屬性的支援很弱。
Struts2可以使用JSTL,但是也支援一個更強大和靈活的表示式語言--"Object Graph Notation Language" (OGNL).
6、Struts 1使用標準JSP機制把物件繫結到頁面中來訪問。
Struts 2 使用 "ValueStack"技術,使taglib能夠訪問值而不需要把你的頁面(view)和物件繫結起來。
7、Struts 1 ActionForm 屬性通常都是String型別。Struts1使用Commons-Beanutils進行型別轉換。
Struts2 使用OGNL進行型別轉換。提供基本和常用物件的轉換器。
8、Struts 1支援在ActionForm的validate方法中手動校驗,或者通過Commons Validator的擴充套件來校驗。
Struts2支援通過validate方法和XWork校驗框架來進行校驗。
9、Struts1支援每一個模組有單獨的Request Processors(生命週期),但是模組中的所有Action必須共享相同的生命週期。
Struts2支援通過攔截器堆疊(Interceptor Stacks)為每一個Action建立不同的生命週期。堆疊能夠根據需要和不同的Action一起使用。
28、過濾器和攔截器的區別?
1、攔截器是基於java的反射機制的,而過濾器是基於函式回撥
2、過濾器依賴於servlet容器,而攔截器不依賴於servlet容器
3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用
4、攔截器可以訪問action上下文、值棧裡的物件,而過濾器不能
5、在action的生命週期中,攔截器可以多次被呼叫,而過濾器只在容器初始化時呼叫一次
29、div+css實現頁面佈局的優勢?
A、顯示和內容實現分離
B、有利於搜尋引擎搜尋
C、有利於維護和程式的擴充套件
30、hidden表單域有什麼作用?
A、多個表單的區分
B、多個提交按鈕
31、jsp有哪些內建物件?
pageContex, request, session, application, out, exception, config, page
32、request的作用有哪些?
獲取客戶端傳遞的引數值
獲取客戶端請求頭資訊
獲取會話
獲取轉發物件
可作為容器使用, 利用setAttribute()和getAttribute()方法進行引數傳遞
33、session有什麼作用?
因為http協議是無狀態的協議,但我們需要儲存客戶端在多次請求之間狀態資訊的時候,我們需要session來維護客戶端的狀態Session物件類似於一個容器,可以存放任何物件,以供不同頁面間共享資料
34、cookie被禁止後怎樣使用session?
URL重寫,對所有頁面涉及的連線都使用url重寫方式。從而將JsessionID以引數的方式連結到URL後面。保證每次頁面提交時伺服器都能獲得sessionID,從而維持和客戶端的狀態。
35、專案開發經歷了哪幾個階段?
專案立項、專案計劃、需求分析、系統設計、編碼、測試、釋出部署
36、談談專案的體系統架構:(客戶層,表示層)web層,業務層,資料層?
客戶層:瀏覽器,Applet小應用程式,在客戶度允許
表示層:html靜態頁面,jsp頁面,servlet在伺服器上執行;
業務層:實現業務邏輯,伺服器提供系統級服務,如事務管理,安全性,並非控制
資料層:如dao部分,實現對資料的增刪改查等。
37、瀏覽器和WEB伺服器是用什麼協議通迅的?
應用層使用的是 HTTP協議,傳輸和路由使用的是TCP/IP
38、網路通訊中,埠有什麼含義。埠的取值範圍?
埠用於區分基於TCP/IP通訊的不同應用程式, 每個基於TCP/IP應用程式都會向作業系統申請註冊一個服務,這個服務用埠表示。本質上說,埠就是一段記憶體中的緩衝區。可以認為是計算機與外界交流的出口。
建議使用者使用的埠號 1024-----65535系統使用的埠範圍0 --- 1024
39、說出3個常見協議的預設埠?
Web伺服器80,ftp 21,telenet 23,smtp 25
40、socket是什麼,它有什麼作用?
Socket是通訊的端點,是客戶端和伺服器進行通訊的端點
41、JDBC訪問資料庫的基本步驟是什麼?
1) 載入驅動
2) 通過DriverManager物件獲取連線物件Connection
3) 通過連線物件獲取會話
4) 通過會話進行資料的增刪改查,封裝物件
5) 關閉資源
42、jsp是如何被容器呼叫和執行的?
1)由JSP引擎將JSP頁面翻譯成JAVA程式碼
2)將JAVA程式碼編譯成class位元組碼檔案
3)載入到容器
4)由容器例項化成物件
5)初始化階段相關的方法是jspInit()
6)請求到達,呼叫服務階段相關的方法是_jspService()
7)銷燬階段相關的方法是jspDestroy()
43、編寫一個servlet的基本步驟?
1)新建一個類繼承於HttpServlet
2) 重寫其中的doGet和doPost方法
3)完成servlet的註冊。在web.xml中加入<serlvet><servlet-mapping>標記
44、為什麼要為servlet配置URL對映?
Servlet註冊包括兩部分,第一,容器如何找到Servlet,利用
<servlet>
<servlet-name></servlet-name>Servlet名字
<servlet-class></servlet-class>Servlet類的全路徑
</servlet>
完成。
第二,客戶端如何找到當前的Servlet。利用
<servlet-mapping>
<servlet-name></servlet-name>Servlet名字
<url-pattern></ url-pattern >客戶端請求路徑
</servlet-mapping>
完成。
配置URL的主要作用是客戶端通過什麼路徑能去找到Servlet
45、servlet是執行緒安全的嗎?為什麼?
不安全。因為Servlet物件在整個過程中,至始至終只有一個物件。以節約伺服器資源的消耗,這就意味著很多個執行緒會同時訪問一個Servlet物件。所以執行緒不安全。
46、你是如何處理servlet執行緒安全問題的?
解決Servlet執行緒安全問題方法有三種
1)編寫Servlet類的時候,實現SingleThreadModel介面,將Servlet變成單執行緒機制。
2)涉及對共享資源訪問的時候,使用synchronized同步加鎖,實現共享資源的保護。
3)儘量不在Servlet中定義成員變數,使用區域性變數。
在三種方法中,最好使用第三種,這樣執行緒安全,並且效能最高。
47、如何得到客戶端的請求引數?
request.getParameter()單個數據
request.getParameterValues()一組資料
request.getParameterMap()返回所有的鍵值對
48、response物件的作用?
Response物件是對伺服器的響應資訊作出的一個封裝物件。主要作用有:
1)可以從response中獲得輸出流物件,從而可以向客戶端輸出資訊
2)可以實現重定向,response.sendRedirect();
3) 可以設定響應頭和狀態碼。
4)可以實現URL重寫
49、session物件是什麼時候產生的,什麼時候銷燬的?
當用戶訪問web容器,而容器呼叫了request.getSession()方法後,產生Session物件。用以儲存客戶端在伺服器上的資訊。同時給這個Session分配一個唯一的標識ID。併產生一個set-cookies的響應頭,以JsessionID作為鍵,標識ID作為值向客戶端的cookie中寫入內容,當客戶端下次再發出請求時,就會將這個JsessionID以請求頭的方式向伺服器進行傳送。而容器讀取了JsessionID請求頭後,就會根據這個ID找到相對應的Session物件,從而維持伺服器和客戶端的狀態。
銷燬session方法有三種
1)session超時
2)呼叫session物件的invalidate()方法
3)web容器關閉或崩潰
程式能控制是前二種。
50、Http協議是無狀態的,伺服器是用什麼方式為一個客戶端儲存狀態的?
Hidden表單域 cookie session URL重寫
51、servlet或jsp能同時響應多個客戶端的請求嗎?是通過什麼方式做到的?
能夠。多執行緒
52、請簡述servlet多執行緒的實現方式?
每次客戶端請求過來的時候,WEB容器會產生一個執行緒來處理這個請求,這樣就實現了servlet多執行緒。
53、談談監聽器的原理、配置及使用。你在專案中是怎麼用的?
用於監聽請求,會話,上下檔案物件相關事件,並在事件發生後作出處理。
只要寫一個類實現相應的監聽器介面,就寫了一個相應的監聽處理類。
54、一個頁面中有兩個form,如何處理提交?
可以使用提交按鈕的名稱來判斷,也可以使用hidden隱藏表單進行值的區分。
55、CSS有哪幾中選擇器?有什麼區別?