JAVA必背面試題和專案面試通關要點(帶答案)
一 資料庫
1.常問資料庫查詢、修改(SQL查詢包含篩選查詢、聚合查詢和連結查詢和優化問題,手寫SQL語句,例如四個球隊比賽,用SQL顯示所有比賽組合;舉例2:選擇重複項,然後去掉重複項;) 資料庫裡的密碼如何加密(md5);
(1)資料庫的密碼加密:單向加密,insert into users (username,password) values (‘mike’,MD5(‘guessme’));
(2)雙向加密:insert into users (username ,password) values (‘mike’,ENCODE(‘guessme’,’abanaafn’));
(3)SQL篩選查詢:select * from user where user_id in (select user_id from user group by user_id having count(user_id)>1) order by user_id desc;
(4)SQL聚合查詢:select user_id from user group by user_id;
(5)SQL銜接查詢:內連線.select s.name,m.mess from student s inner join mark m on s.id=m.studentid;左外連線:select s.name, m.mess from student s left join mark m on s.id=m.studentid;右外連線:select s.name, m.mess from student s right join mark m on s.id=m.studentid;全外連線:select s.name ,m.mess from student s full join mark m on s.id=m.studentid;
(6)球隊比賽組合:select count(*) from department as a ,department as b a.name<>b.name;
(7)SQL選擇重複語句:select id ,name from user where id in (select id from user group by id having count(1)>2);去除重複語句:select id from user group by id having count(*)>1;
(8)資料庫優化:prepareStatement比Statement效能高,一個sql發給伺服器去執行.涉及步驟:語法檢查,語義定義,編譯和快取.有外檢約束會影響插入和刪除功能,如果程式能保證資料的完整性,那麼設計資料庫的時候就去掉外來鍵.sql語句全部大寫,特別是列名和表名.
2. 如何實現資料庫分頁功能? SQL語句複雜的關聯表查詢,累計求和。
在不使用框架情況下,如何連線資料庫?
資料庫連線完之後,需要關閉的兩個介面是什麼?
關閉資料庫過程中最容易丟擲的異常是什麼?
(1)分頁:”select * from user limit “+(pageNo-1)*pageSize+”,”+pageSize;
(2)求和:select * from user1 union select * from user2;
(3)手動連線資料庫:Connection cn=null;PreparedStatement pst=null;Result rs=null;try{Class.forname(driverClassName);cn=DriverManager.getConnection(url,username,password);pst=cn.prepareStatement(“sql”);pst.setString(1,studentName);Result rs=pst.executeQuery();while(rs.next()){system.out.println();}catch(Exception e){e.printStackTrace();}finally{if(rs!=null){rs.close();}if(pst!=null){pst.close()}if(cn!=null){cn.close();}}}
(4)Result prepareStatement 結果集和sql傳輸
(5)Exception
3. Oracle索引的優缺點、檢視和儲存過程、連線符是什麼?預設埠是什麼?MySQL什麼是左連結、右連結和內連結?資料庫中查詢左連結、右連結和內連結結果是什麼?
資料庫的儲存原理,講一講?
(1)埠:1521;
(2)內連線就是左表和右表相同的資料.
外連線分為:左外連線、右外連線、全外連線
左外連線就是以左表為準,去匹配右表,左表有多少條資料,結果就是多少條資料
右外連線就是與左外連線反之,以右表為準,去匹配左表,右表有多少條資料,結果就是多少條資料。
全外連線資料條數不一定,相當與是左外連線 和右外連線 的綜合。
(3)oracle索引分為:聚集索引,非聚集索引,唯一索引;優點:方便查詢,在資料量大時排序更宜查詢;缺點:查詢時需要進行重新排序,減少了效率。物理索引缺點 建立索引效率低,只能建一個更有說服力的;
(4)連線符為”||”或CONCAT();
(5)檢視:其實就是一條查詢sql語句,用於顯示一個或多個表或其他檢視中的相關資料。檢視將一個查詢的結果作為一個表來使用,因此檢視可以被看作是儲存的查詢 或一個虛擬表。檢視來源於表,所有對檢視資料的修改最終都會被反映到檢視的基表中,這些修改必須服從基表的完整性約束,並同樣會觸發定義在基表上的觸發器
(6)儲存過程:oracle有系統儲存過程和自定義儲存過程,為了完成特定功能的sql語句集,經編譯後儲存在資料庫中,使用者通過特定的儲存過程名來執行
(7)儲存原理:當用戶建立索引時,oracle會自動的在表空間裡建立索引段來儲存索引的資料;
4. Char裡面可以存放漢字嗎?
(1)char型變數就是用來儲存Unicode編碼字元的,Unicode編碼字符集中包含了漢字,所以可以儲存漢字,如果某個特殊的漢字沒有包含在Unicode編碼字符集中,那麼char型變數就不能儲存,Unicode佔用兩個位元組,所以char型的變數也是佔用兩個位元組.
二 Java基礎
1. 說一下多型的表現形式?
(1)過載,重寫,過載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的引數列表各不相同
(2)重寫Override表示子類中的方法可以與父類中的某個方法的名稱和引數完全相同,通過子類建立的例項物件呼叫這個方法時,將呼叫子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向物件程式設計的多型性的一種表現,只能比父類丟擲更少的異常,或者是丟擲父類丟擲的異常的子異常,子類方法的訪問許可權只能比父類的更大,不能更小。如果父類的方法是private型別,那麼,子類則不存在覆蓋的限制,相當於子類中增加了一個全新的方法
2. 資料的加密模式?加密模式的順序?
(1)對稱式和非對稱式,順序:傳輸加密,資料儲存加密,資料完整型的鑑別,金鑰管理;
3. 問到hasshmap底層資料結構,arraylist-linklist區別和為什麼有這樣的區別;陣列的比較方法;基本型別和引用資料型別的區別;問介面和抽象類的區別;
(1)HashMap是執行緒序不安全的,不是同步的
HashMap可以讓你將空值作為一個表的條目的key或value
Hashmap實際上是一個數組和連結串列的結合體,在java程式語言中,最基本的結構就是兩種,一個是陣列,另外一個是模擬指標(引用),所有的資料結構都可以用這兩個基本結構來構造的,hashmap也不例外。Hashmap實際上是一個數組和連結串列的結合體.
(2)區別:ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構,對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標,.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料,若只對單條資料插入或刪除,ArrayList的速度反而優於LinkedList。但若是批 量隨機的插入刪除資料,LinkedList的速度大大優於ArrayList. 因為ArrayList每插入一條資料,要移動插入點及之後的所有資料。 這一點我做了實驗。在分別有200000條“記錄”的ArrayList和LinkedList的首位插入20000條資料,LinkedList耗時約 是ArrayList的20分之1。
4. 如何配置安裝jdk?如何判斷其配置成功?
(1)首先安裝JDK要看你電腦的位數,選擇32位或64位的jdk版本,建議使用1.6版本以上,1.7版本一下;
(2)從Oracle官網下載JDK安裝包。
(3)安裝包下載完成後,雙擊安裝包進行安裝,安裝路徑可以使用預設路徑。
(4)安裝完成後,還需要進行環境變數的配置,在系統環境變數的使用者變數裡面新增一個變數名為 JAVA_HOME環境變數,然後在變數值處填寫上JDK安裝目錄的bin資料夾的路徑,如:C:\ProgramFiles\Java \jdk1.7.0_79,然後再新增一個變數名為Path的變數,變數值填寫為%JAVA_HOME%\bin;即可。
(5)可以寫一個簡單的java程式來測試JDK是否已安裝成功:public class Test{public static void main(String args[]){System.out.println("This is a test program.");}}將上面的這段程式儲存為檔名為Test.java的檔案。(注意Test是程式的公共類,必須和檔名一致,包括大小寫)然後開啟命令提示符視窗,cd到你的Test.java所在目錄,然後鍵入下面的命令 :javac Test.java (回車)java Test 此時如果看到打印出來This is a test program.的話說明安裝成功了,如果沒有打印出這句話,你需要仔細檢查一下你的配置情況。
5. 手寫單例模式(餓漢和飽漢模式)和工廠模式?
(1)單例餓漢模式://餓漢式單例類.在類初始化時,已經自行例項化
2 public class Singleton1 {
3 //私有的預設構造子
4 private Singleton1() {}
5 //已經自行例項化
6 private static final Singleton1 single = new Singleton1();
7 //靜態工廠方法
8 public static Singleton1 getInstance() {
9 return single;
10 }
11 }
(2)懶漢模式://懶漢式單例類.在第一次呼叫的時候例項化
2 public class Singleton2 {
3 //私有的預設構造子
4 private Singleton2() {}
5 //注意,這裡沒有final
6 private static Singleton2 single=null;
7 //靜態工廠方法
8 public synchronized static Singleton2 getInstance() {
9 if (single == null) {
10 single = new Singleton2();
11 }
12 return single;
13 }
14 }
(3)工廠模式:
interface IFactory{
public IProduct createProduct();}
Class Factory implements IFactory{
public IProduct createProduct(){return new Product();}}
Public class client{
Public Static void main (String [] args){IFactory factory=new Factory();
IProduct product=factory.createProduct();
product.ProductMethod();}}
6. 手寫建立list,定義list,泛型?
(1)List list=new ArrayList();
(2)List<Student> list=new ArrayList<Student>();
(3)Student s=new Student();
(4)List.add(s);
7. 安全:hassmap和hasstable的區別?那個不安全?為什麼?怎麼便利hashmap?執行緒方面:執行緒有幾種狀態?談談多執行緒的安全問題;問到執行緒和同步?寫一個生產者和消費者模式; 考慮高併發的問題。
(1):區別:一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現;
(2)二.同步性:Hashtable是執行緒安全的,也就是說是同步的,而HashMap是執行緒序不安全的,不是同步的
(3)三.值:只有HashMap可以讓你將空值作為一個表的條目的key或value
(4)為什麼?最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異
(5)遍歷hashmap:兩種方式,Map map=new HashMap();
Iterator iter=map.entrySet().iterator();s
Iterator iter=map.keySet().iterator();
(6)執行緒通常有五種狀態,建立,就緒,執行,阻塞,和死亡;
第一是建立狀態。在生成執行緒物件,並沒有呼叫該物件的start方法,這是執行緒處於建立狀態手寫字串反轉和氣泡排序;
第二是就緒狀態。當呼叫了執行緒物件的start方法之後,該執行緒就進入了就緒狀態,但是此時執行緒排程程式還沒有把該執行緒設定為當前執行緒,此時處於就緒狀態。線上程執行之後,從等待或者睡眠中回來之後,也會處於就緒狀態。
第三是執行狀態。執行緒排程程式將處於就緒狀態的執行緒設定為當前執行緒,此時執行緒就進入了執行狀態,開始執行run函式當中的程式碼。
第四是阻塞狀態。執行緒正在執行的時候,被暫停,通常是為了等待某個時間的發生(比如說某項資源就緒)之後再繼續執行。sleep,suspend,wait等方法都可以導致執行緒阻塞。
第五是死亡狀態。如果一個執行緒的run方法執行結束或者呼叫stop方法後,該執行緒就會死亡。對於已經死亡的執行緒,無法再使用start方法令其進入就緒
(7)多執行緒的安全問題:總結來說,多個執行緒在執行同一段程式碼的時候,每次的執行結果和單執行緒執行的結果都是一樣的,不存在執行結果的二義性,就可以稱作是執行緒安全的。執行緒安全問 題多是由全域性變數和靜態變數引起的,當多個執行緒對共享資料只執行讀操作,不執行寫操作時,一般是執行緒安全的;當多個執行緒都執行寫操作時,需要考慮執行緒同步 來解決執行緒安全問題。
(8)執行緒和同步:說明Java執行緒的兩個特性,可見性和有序性。多個執行緒之間是不能直接傳遞資料互動的,它們之間的互動只能通過共享變數來實現.
java允許多執行緒併發控制,當多個執行緒同時操作一個可共享的資源變數時(如資料的增刪改查),
將會導致資料不準確,相互之間產生衝突,因此加入同步鎖以避免在該執行緒沒有完成操作之前,被其他執行緒的呼叫,
從而保證了該變數的唯一性和準確性
(9)生產者和消費者模式:儲存空間已滿,而生產者佔用著它,消費者等著生產者讓出空間從而去除產品,生產者等著消費者消費產品,從而向空間中新增產品。互相等待,從而發生死鎖。
(10)模式:1.wait()和notify();2.await()和signal(),即執行緒鎖的方式;3.阻塞佇列的方式;
(11)高併發:手段無非是切割(縱向,橫向)和負載均衡。縱向分隔主要是按業務(功能)來分,也就是所謂面向服務架構,橫向分隔方式比較多,主要依賴於所處理的物件屬性負載均衡則可以是映象(部署)分佈(同樣的功能部署幾份)和計算分佈(一個問題分幾個子問題在不同的機器上執行,然後合併結果)。當然,這些手段是可以綜合利用的,最終可以做成多流水線分散式計算模式;
8. list、map和set什時候用?彼此間的區別和聯絡?
(1)list列表是順序存放物件的,可以有相同的物件,通過索引存取;一般在能直接使用陣列的時候,就有使用列表
(2)set集合:集合是無序存放物件的,其中不能有重複的物件(唯一的,回憶高中時候數學中學習的集合特性),集合沒有索引,只能遍歷次存取;一般用於存放無序的(指順序不重要)不能重複的物件
(3)Map對映:對映,存放的是鍵與值的對映,其中鍵是唯一的(不能有重複物件),而值可以有重複的物件,存的時候,需要指定鍵和對應的值,取的時候可以根據鍵名取到值,也可以遍歷;一般在用於存放具有對應關係的鍵值對的時候用;
(4)三者的區別和聯絡:三者都是介面,List與Set具有相似性,它們都是單列元素的集合,list,set是繼承自collection,而map不是,list裡可以有重複元素,有先後順手,Set裡面不允許有重複的元素,而且無序,Map 儲存key-value值,value可多值。
9. java常見的資料型別是什麼和對應的包裝類是什麼?java的隱式型別?assert什麼時候使用?
(1)int, double, float, long, short, boolean, byte, char
(2)Integer.Double,Float,Long,Short,Boolean,Byte,Characher.
(3)java的隱式型別是int,byte,short,char都可以隱含轉換為int ,
(4)一般來說,assertion用於保證程式最基本、關鍵的正確性。assertion檢查通常在開發和測試時開啟。為了提高效能,在軟體釋出後,assertion檢查通常是關閉的;
10. object型別中有哪些方法?
(1)equals()、hashCode()、wait()、toString(),finalize(),notify(),notifyAll(),wait(),
11. final、finallly和finalize的區別?
(1)final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
內部類要訪問區域性變數,區域性變數必須定義成final型別,例如,一段程式碼……
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法
12. LinkedList和ArrayList的區別?繼承的介面?
(1)ArrayList是使用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及陣列元素移動等記憶體操作,所以索引資料快而插入資料慢
LinkedList使用雙向連結串列實現儲存,按序號索引資料需要進行前向或後向遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入速度較快。
LinkedList也是執行緒不安全的,LinkedList提供了一些方法,使得LinkedList可以被當作堆疊和佇列來使用
(2)list介面;ArrayList是最常用的List實現類,內部是通過陣列實現的,它允許對元素進行快速隨機訪問; Vector與ArrayList一樣,也是通過陣列實現的,不同的是它支援執行緒的同步,即某一時刻只有一個執行緒能夠寫Vector,避免多執行緒同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問ArrayList慢。LinkedList是用連結串列結構儲存資料的,很適合資料的動態插入和刪除,隨機訪問和遍歷速度比較慢。另外,介面中沒有定義的方法 get,remove,insertList,專門用於操作表頭和表尾元素,可以當作堆疊、佇列和雙向佇列使用。LinkedList沒有同步方法。如果 多個執行緒同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在建立 List時構造一個同步的List:
13. int和string是如何轉化的?
(1)int i = Integer.parseInt([String]);i = Integer.parseInt([String],[int radix]);或者int i = Integer.valueOf(my_str).intValue();int轉StringString s = String.valueOf(i);String s = Integer.toString(i);String s = "" + i;
15. 談談你對面向物件程式設計的理解?
(1)Java語言是純粹的面向物件的程式設計語言,這主要表現為Java完全支援面向物件的三種基本特徵:繼承、封裝和多型。Java語言完全以物件為中心,Java程式的最小程式單位是類,整個Java程式由一個一個的類組成;Java完全支援使用物件、類、繼承、封裝、訊息等基本概念來進行程式設計,允許從現實世界中客觀存在的事物(即物件)出發來構造軟體系統,在系統構造中 儘可能運用人類的自然思維方式。實際上,這些優勢是所有面向物件程式語言的共同特徵。而面向物件的方式實際上由OOA(面向物件分析)、OOD(面向物件 設計)和OOP(面向物件程式設計)三個部分有機組成,其中,OOA和OOD的結構需要使用一種方式來描述並記錄,目前業界統一採用UML(統一建模語言)來 描述並記錄OOA和OOD的結果。目前UML的最新版是2.0它一共包括13種類型的圖形,使用這13種圖形中的某些就可以很好地描述並記錄軟體分析、設 計的結果
16. 重寫和過載的區別?
(1)過載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的引數列表各不相同(即引數個數或型別不同);
(2)重寫Override表示子類中的方法可以與父類中的某個方法的名稱和引數完全相同,通過子類建立的例項物件呼叫這個方法時,將呼叫子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是面向物件程式設計的多型性的一種表現;只能比父類丟擲更少的異常,或者是丟擲父類丟擲的異常的子異常;子類方法的訪問許可權只能比父類的更大,不能更小。如果父類的方法是private型別,那麼,子類則不存在覆蓋的限制,相當於子類中增加了一個全新的方法;
17. sleep&wait區別和聯絡?
(1)這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類;sleep是Thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的程式碼中呼叫sleep。
(2)最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他執行緒可以使用同步控制塊或者方法。sleep不出讓系統資源;wait是進入執行緒等待池等待,出讓系統資源,其他執行緒可以佔用CPU。一般wait不會加時間限制,因為如果wait執行緒的 執行資源不夠,再出來也沒用,要等待其他執行緒呼叫notify/notifyAll喚醒等待池中的所有執行緒,才會進入就緒佇列等待OS分配系統資源。 sleep(milliseconds)可以用時間指定使它自動喚醒過來,如果時間不到只能呼叫interrupt()強行打斷;
18. string、stringbuffer和stringbuilder的區別?哪個更安全?為什麼?hashmap為什麼查詢的比較快?
(1)JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元資料。另外,String實現了equals方法;而StringBuffer沒有實現equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的結果為false。
(2)StringBuffer執行緒安全的可變字元序列。一個類似於 String 的字串緩衝區,但不能修改;通過某些方法呼叫可以改變該序列的長度和內容,可將字串緩衝區安全地用於多個執行緒。可以在必要時對這些方法進行同步,因此任意特定例項上的所有操作就好像是以序列順序發生的,該順序與所涉及的每個執行緒進行的方法呼叫順序一致;
(3)StringBuilder一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。(如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。但將 StringBuilder 的例項用於多個執行緒是不安全的。如果需要這樣的同步,則建議使用 StringBuffer。);
(4)HashMap是Hashtable的輕量級實現(非同步非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,在只有一個執行緒訪問的情況下,效率要高於Hashtable。
19. hashmap的陣列是hashcode定位的,有很多key得到的hashcode是相同的,這時候如何定位?
(1)Java採用了雜湊表的原理。雜湊演算法也稱為雜湊演算法,就是集合首先會呼叫該物件的hashcode方法;是將資料依特定演算法直接指定到一個地址上。關於雜湊演算法,這裡就不詳細介紹。可以這樣簡單理解,hashCode方法實際上返回的就是物件儲存位置的映像;hashcode相同但是物件並不同,所有儲存位置也不同;對於List集合、陣列而言,他就是一個累贅,不重要;但是對於HashMap、HashSet、HashTable而言,它變得異常重要。
20. string是否是基本資料型別?int和string是如何轉化的?
(1)基本資料型別包括byte、int、char、long、float、double、boolean和short;java.lang.String類是final型別的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類;
(2)int i = Integer.parseInt([String]);i = Integer.parseInt([String],[int radix]);或者int i = Integer.valueOf(my_str).intValue();int轉StringString s = String.valueOf(i);String s = Integer.toString(i);String s = "" + i;
三 Java Web
1. Jsp頁面便利集合?
(1)List<String> names = new LinkedList<String>();
(2)Set<String> set = new TreeSet<String>();
(3)Map<String, String> map = new HashMap<String, String>();
2. tomcat核心專案:tomacate出現亂碼如何解決?如何增加tomcat和jdk的記憶體?jdk的版本?
(1)Java的核心和class檔案是基於unicode的,這使Java程式具有良好的跨平臺性,但也帶來了一些中文亂碼問題的麻煩。原因主要有兩方面,Java和JSP檔案本身編譯時產生的亂碼問題和Java程式於其他媒介互動產生的亂碼問題。
(2)更改 D:\Tomcat\conf\server.xml,指定瀏覽器的編碼格式為“簡體中文;方法是找到 server.xml 中的:<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />
(3)另一種方法:更該 Java 程式,我的程式是這樣的:public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=GBK");
(4)增加tomcat記憶體的方法:linux下,在檔案{tomcat_home}/bin/catalina.sh的前面,增加如下設定:SET JAVA_OPTS=-Xms512m -Xmx1024m;表示初始化記憶體為512MB,可以使用的最大記憶體為1024MB;windows下,在tomcat_home}/bin/catalina.bat的前面,增加如下設定:SET JAVA_OPTS=-Xms512m -Xmx1024m;
(5)Jdk的版本:JDK分為三種不同的版本 JAVA SE(標準版)Java EE(企業版)Java ME(微型版)。
Java SE 以前稱為J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的 Java 應用程式。Java SE是基礎包,但是也包含了支援 Java Web 服務開發的類,併為 Java Platform,Enterprise Edition(Java EE)提供基礎。
JavaEE:這個版本以前稱為 J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程式。Java EE 是在 Java SE 的基礎上構建的,它提供 Web 服務、元件模型、管理和通訊 API,可以用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和 Web 2.0 應用程式。
JavaME:這個版本以前稱為 J2ME。Java ME 為在移動裝置和嵌入式裝置(比如手機、PDA、電視機頂盒和印表機)上執行的應用程式提供一個健壯且靈活的環境。Java ME 包括靈活的使用者介面、健壯的安全模型、許多內建的網路協議以及對可以動態下載的連網和離線應用程式的豐富支援。基於 Java ME 規範的應用程式只需編寫一次,就可以用於許多裝置,而且可以利用每個裝置的本機功能。
3. 談談對MVC的理解以及它的工作流程;
(1)MVC是一個設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型、檢視、控制器。它們各自處理自己的任務;
jsp+Servlet+JavaBean 就是一種基礎的基於mvc的開發模式;在MVC結構中,模型(Model)代表應用程式的資料(data)和用於控制訪問和修改這些資料的業務規則(business rule)。通常模型被用來作為對現實世界中一個處理過程的軟體近似,當定義一個模型時,可以採用一般的簡單的建模技術。
當模型發生改變時,它會通知視(View),並且為視提供查詢模型相關狀態的能力。同時,它也為控制器(Controller)提供訪問封裝在模型內部的應用程式功能的能力。
一個視(View)用來組織模型的內容。它從模型那裡獲得資料並指定這些資料如何表現。當模型變化時,視負責維持資料表現的一致性。視同時將使用者要求告知控制器(Controller)。
控制器(Controller)定義了應用程式的行為;它負責對來自視的使用者要求進行解釋,並把這些要求對映成相應的行為,這些行為由模型負責實現。在獨立執行的GUI客戶端,使用者要求可能是一些滑鼠單擊或是選單選擇操作。在一個Web應用程式中,它們的表現形式可能是一些來自客戶端的GET或POST的HTTP請求。模型所實現的行為包括處理業務和修改模型的狀態。根據使用者要求和模型行為的結果,控制器選擇一個視作為對使用者請求的應答。通常一組相關功能集對應一個控制器。
工作流程:一個請求傳送到action(作用:MVC中的C),action控制它傳送到哪個biz處理,如果用到資料庫,那麼biz在連線dao,然後返回要的資料,最後action在返回響應的頁面(比如jsp),因為是面向物件,所以實體domain在中間傳遞資料。
4. post和get以及get和load的區別?使用get應注意什麼?
(1)Get 方法通過 URL 請求來傳遞使用者的資料,將表單內各欄位名稱與其內容,以成對的字串連線,以URL字串本身傳遞資料引數,在伺服器端可以從'QUERY_STRING'這個變數中直接讀取,效率較高,但缺乏安全性,也無法來處理複雜的資料(只能是字串,比如在servlet/jsp中就無法處理髮揮java的比如vector之類的功能,輸的資料量非常小,一般限制在 2 KB 左右);
Post 方法通過 HTTP post 機制,將表單內各欄位名稱與其內容放置在 HTML 表頭(header)內一起傳送給伺服器端交由 action 屬效能所指的程式處理,該程式會通過標準輸入(stdin)方式,將表單的資料讀出並加以處理post方式:就傳輸方式講引數會被打包在資料報中傳輸,從CONTENT_LENGTH這個環境變數中讀取,便於傳送較大一些的資料,同時因為不暴露資料在瀏覽器的位址列中,安全性相對較高,但這樣的處理效率會受到影響。接收的最大資料有限制,IIS 4 中為 80 KB 位元組,IIS 5 中為 100 KB 位元組
(1)建議:除非你肯定你提交的資料可以一次性提交,否則請儘量用 Post 方法;Get 方式提交資料,會帶來安全問題;通過 Get 方式提交資料時,使用者名稱和密碼將出現在 URL 上;所以表單提交建議使用 Post 方法;Post 方法提交的表單頁面常見的問題是,該頁面如果重新整理的時候,會彈出一個對話方塊;
(2)Get與load的區別:總之對於get和load的根本區別,一句話,hibernate對於load方法認為該資料在資料庫中一定存在,可以放心的使用代理來延遲載入,如果在使用過程中發現了問題,只能拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回null;
5. java的九大內建物件和四大作用域;
(1)request 使用者端請求,一次請求.此請求會包含來自GET/POST請求的引數
response 網頁傳回使用者端的迴應
pageContext 網頁的屬性是在這裡管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet的構架部件
page JSP網頁本身
exception 針對錯誤網頁,未捕捉的例外
四大作用域:page物件表示當前一個JSP頁面,可以理解為一個物件本身,是代表與一個頁面相關的物件和屬性;一個頁面由一個編譯好的 Java servlet 類表示,
request是代表與 Web 客戶機發出的一個請求相關的物件和屬性。一個請求可能跨越多個頁面,涉及多個 Web 元件(由於 forward 指令和 include 動作的關係);使用者端請求
session是代表與用於某個 Web 客戶機的一個使用者體驗相關的物件和屬性。一個 Web 會話可以也經常會跨越多個客戶機請求 與請求有關的會話期
application是代表與整個 Web 應用程式相關的物件和屬性。這實質上是跨越整個 Web 應用程式,包括多個頁面、請求和會話的一個全域性作用域 正在執行的內容
四 Ajax
1. js裡面的button方法,提交的時候,如何將資料傳遞到資料庫?
(1)單擊button的時候,先執行客戶端的javascript程式碼,將JavaScript裡面的值賦值到form表單裡,然後通過表單提交的方式將資料提交到後臺,交給java方法處理,然後呼叫業務層和資料庫互動;
2. Ajax與jquery區別?ajax和servelet生命週期?
(1)區別:Ajax是一門技術,它提供了非同步更新的機制,使用客戶端與伺服器間交換資料而非整個頁面文件,實現頁面的區域性更新。jQuery是一個框架,它對JS(JS是一門前端語言。)進行了封裝,使其更方便使用。jQuery使得JS與Ajax的使用更方便
jsp負責客戶端顯示
servlet負責控制,轉向等
(2)生命週期:Servlet 生命週期:Servlet 載入--->例項化--->服務--->銷燬;
init():在Servlet的生命週期中,僅執行一次init()方法。它是在伺服器裝入Servlet時執行的,負責初始化Servlet物件。可以配置伺服器,以在啟動伺服器或客戶機首次訪問Servlet時裝入Servlet。
service():它是Servlet的核心,負責響應客戶的請求。每當一個客戶請求一個HttpServlet物件,該物件的Service()方法 就要呼叫,而且傳遞給這個方法一個“請求”(ServletRequest)物件和一個“響應”(ServletResponse)物件作為引數。在 HttpServlet中已存在Service()方法。預設的服務功能是呼叫與HTTP請求的方法相應的do功能。
destroy(): 僅執行一次,在伺服器端停止且解除安裝Servlet時執行該方法。當Servlet物件退出生命週期時,負責釋放佔用的資源。一個 Servlet在執行service()方法時可能會產生其他的執行緒,因此需要確認在呼叫destroy()方法時,這些執行緒已經終止或完成。
Ajax:ajax負責客戶端與伺服器直接聯絡,而不用jsp提交表單。一般ajax與servlet聯絡,也可直接與javabean聯絡
3. Jquery的常用標籤,常用選擇器。
(1)標籤: jquery常用標籤