1. 程式人生 > >java面試題整理(三年以下)

java面試題整理(三年以下)

1、作為一個java初級程式設計師必備技能
a.熟悉java基礎、面向物件、JVM、IO流程、多執行緒、集合框架
b.熟悉JSP、Servlet、Spring、Hibernate、SpringMVC
c.熟悉Http協議、Socket、WebService及網路程式設計
d.熟悉Maven及Linux常用命令
e.專案相關知識

2、&與&&的區別(|與||)
&與&&都是邏輯運算子,都是判斷兩邊同時滿足為真,如果判斷條件中有一個為假,則整個判斷不通過;
但是&&當第一個條件不成之後,後面的條件也不會執行,
而&則還是繼續執行,直到整個條件執行完為止

3、使用final關鍵字修飾一個變數,是引用不能變,還是引用的物件不能變
使用final關鍵字修飾一個變數時,是指引用變數不能變,
引用變數所指向的物件中的內容還是可以改變的
一旦宣告物件,物件存放在堆裡,一旦存放在堆裡,java虛擬機器會分配一個唯一的記憶體地址,
它的地址不可以改變,而物件內容是可以改變的

4、靜態變數與例項變數的區別
a.靜態變數前要加static關鍵字,而例項不加
b.在程式執行時的區別,例項變數屬於某個物件的屬性,必須建立這個例項物件,
其中的例項變數才會分配空間,才能使用這個例項變數
c.靜態變數不屬於某個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的
位元組碼,不用建立任何例項物件,靜態變數就會被分配空間,靜態變數就可以使用了
d.例項變數必須建立物件後才可以通過這個物件來使用,靜態變數則可以通過類名來引用
e.靜態變數使用時,通過類名.名稱,例項變數必須要初始化才能使用。例項變數是例項化
後才分配空間,而靜態變數當類載入時才會分配空間
f.靜態方法不可以呼叫非static方法的,而非static方法可以引用static方法

5、==與equals有什麼區別
==判斷值型別,內容是否相等,判斷引用型別時,是判斷地址是否相等
equals判斷內容是否相等

6、Integer與int的區別
a.int值型別,Integer是引用型別
b.int預設值是0,Integer預設值null
c.Integer還有parseInt等方法

7、訪問修飾符作用域
public:本類、同一包類、子孫類、其他包類
protected:本類、同一包類、子孫類
預設:本類、同一包類
private:本類

ps:利用反射可以獲取類的私有構造方法,屬性和方法(Declared?)

8、面向物件(封裝、繼承、多型)
a.過載與重寫的區別
過載是同一個類中,方法名是相同的,但是引數或個數不同,與返回值型別沒有關係
重寫是在多個類中,產生繼承關係,父類與子類的方法必須相同
b.介面與抽象類的區別
不同
實現介面關鍵字是interface,而定義抽象類關鍵字是abstract
介面中成員不能有私有,抽象類可以
介面中定義的成員,是public static final型別,抽象類沒有
介面中不能有普通方法,抽象類可以
相同
兩者都不能new

9、final、finally、finalize的區別
final用於宣告屬性、方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承
內部類要訪問區域性變數,區域性變數必須定義成final型別
finally是異常處理語句結構的一部分,表示總是執行
finalize是Object類的一個方法,垃圾回收機制,當垃圾回收的時候會呼叫此方法

10、String、StringBuffer與StringBuilder的區別
a.String是字串常量
b.StringBuffer是字串變數(執行緒安全)
c.StringBuilder是字串變數(非執行緒安全)

11、你用過的object類的直接子類有哪些,object類的常用方法有那些
a.clone方法
保護方法,實現物件的淺複製,只有實現了Cloneable接口才可以呼叫該方法,否則丟擲
CloneNotSupportedException異常。
b.getClass方法
final方法,獲得執行時的型別
c.toString方法
該方法用得比較多,一般子類都有覆蓋
d.finalize
該方法用於釋放資源,很少使用
e.equals
f.hashcode
g.notify、notifyall
h.wait

12、陣列有沒有length()方法,String有沒有length()方法
陣列沒有length()方法,但是有length屬性,String有length()方法

13、淺談hashCode方法:

Set和Map(鍵)不重複的底層實現原理,hashCode方法返回值是int(雜湊碼),也是判斷值是否相等,不過它相對於equals方法來說,判斷的不是特別全面,所以效率上是比equals方法高的,equals方法相等,hashCode就肯定相等,但是equals方法不相等,hashCode方法就肯定不相等,也就是說hashCode不相等,equals方法就肯定不相等,所以Set和Map底層判斷是否重複,先用hashCode判斷再用equals判斷

14、異常
a、Error和Exception的聯絡
Error和Exception都繼承於Throwable,RuntimeException繼承自Exception
b、Error和Exception的區別
Error類一般是指與虛擬機器相關的問題,如系統崩潰、虛擬機器錯誤、記憶體不足、方法呼叫棧溢位等,對於這類錯誤,
java編譯器不去檢查他們,建議讓程式終止。
Exception類表示程式可以處理的異常,可以捕獲且可能恢復,遇到這類異常建議修復,而不是終止。

15、多執行緒
a.多執行緒是指從軟體或者硬體上實現多個執行緒併發的技術,提高效率
b.程序是作業系統級別的,分配記憶體的任務單位
c.執行緒是程式內部的,共享程序記憶體的執行單位

16、執行緒的五個基本狀態
a.新建狀態:執行緒建立後進入新建狀態,繼承Thread類,重寫run()方法
b.就緒狀態:當呼叫執行緒物件start()方法,進入就緒狀態,隨時等待cpu排程執行
c.執行狀態:當cpu開始排程處於就緒狀態的執行緒,進入執行狀態
d.阻塞狀態:執行狀態的執行緒因某原因,暫時放棄對cpu的使用權,停止執行,直到再次放入就緒狀態,才有機會執行,阻塞三分種
1、等待阻塞:wait()
2、同步阻塞:synchronized
3、其他阻塞:sleep()、join()、I/O請求、死亡
e.死亡狀態

17、關於執行緒其他基礎知識
a、yield()失去cpu,回到就緒狀態,把cpu交給同優先順序的執行緒,yield()依然是隨機的,該執行緒仍然可能會進入執行狀態
b、關於停止一個執行緒,boolean來退出run()方法的迴圈或取消任務
c、sleep()休眠讓給其他執行緒,不釋放物件鎖,需catch捕獲異常。
d、wait()暫停執行,釋放物件鎖
e、join()優先執行

18、執行緒同步與非同步
a.同步:當前執行緒執行完後下一個執行緒接著執行
b.非同步:在一個應用程式中,同時有多個不同的執行路徑(ajax)

19、什麼是執行緒不安全
多個執行緒共享同一個資料會受到其他執行緒干擾

20、如何建立一個執行緒,繼承Thread類或者實現Runnable介面,並重寫run方法,呼叫start(),進入就緒狀態30

ps:也有一個特殊的方式實現多執行緒,就是繼承Callable介面,利用Future獲取返回值,這種多執行緒是有返回值的,

所以個人所知道的是三種
 

21、集合框架
a、Collection與Collections的區別
Collection是Set(LinkedHashSet、HashSet、TreeSet)、
List(ArrayList(陣列)、Vector、LinkedList(連結串列實現))、
Queue(PriorityQueue)的根介面,Collections是提供集合操作的工具類。
b、Map(Hashtable、LinkedHashMap、HashMap(陣列+連結串列)、TreeMap)
c、迭代器
d、Set無序不重複、List有序重複、Map鍵值對

22、什麼是陣列,什麼是連結串列
a.陣列就是相同資料型別的元素按照一定順序排列的集合
特點:佔用記憶體大,查詢簡單,增刪困難
b.連結串列是一種物理儲存單元上非連續、非順序的儲存結構
特點:記憶體寬鬆,相對陣列查詢困難,增刪容易

23、什麼是雜湊表
間距前兩者優點,連結串列與陣列的組成,map是由雜湊表實現

24、ArrayList與Vector的區別
這兩個類都實現了List介面繼承了Collection介面,都是有序的集合,底層實現方式都是動態的
陣列。
區別:ArrayList執行緒不安全,多執行緒建議Vector

25、HashMap與HashTable的區別
都實現了Map介面,HashMap是HashTable的輕量級實現,HashMap可以儲存null鍵值對,HashTable不可以,
HashMap執行緒不安全,效率比較高,HashTable執行緒安全

26、HashSet與TreeSet的區別
a.HashSet不重複,無序
b.TreeSet不重複,有序

27、泛型
引數化型別,安全簡單,編譯期間會檢查型別安全,並且所有的強制型別轉換都是自動和隱式的,以提高程式碼重用率

28、Collection的方法
a.sort()
b.addAll()
c.max()
d.min()
e.copy()

29、集合陣列優缺點
陣列必須定義長度,只能裝同一型別
集合不需要

30、TCP/IP具體通訊(轉載)
利用TCP/IP協議族進行網路通訊時,會通過分層順序與對方進行通訊。傳送端從應用層往下走,接收端則往應用層往上走。
我們用HTTP舉例來說明,首先作為傳送端的客戶端在應用層(HTTP協議)發出一個想看某個Web頁面的HTTP請求。
接著,為了傳輸方便,在傳輸層(TCP協議)把從應用層處收到的資料(HTTP請求報文)進行分割,
並在各個報文上打上標記序號及埠號後轉發給網路層。在網路層(IP協議),增加作為通訊目的地的MAC地址後轉發給鏈路層。
這樣一來,發往網路的通訊請求就準備齊全了。接收端的伺服器在鏈路層接收到資料,按序往上層傳送,一直到應用層。
當傳輸到應用層,才能算真正接收到由客戶端傳送過來的HTTP請求。

---------------------

第30條來自CSDN博主朋友,

請點選:https://blog.csdn.net/agzhchren/article/details/79173491?utm_source=copy 

31、Xml(報文)與Json的區別
a.相同點:兩者都是資料交換格式
b.xml是重量級、json是輕量級
c.xml比較佔頻寬、json佔頻寬小,易於壓縮
d.json在webservice用的比較少、xml用的較多

32、TCP與UDP區別
UDP:
a.是面向無連線,將資料來源的封裝在資料包中,不需要建立連線
b.每個資料包的大小限制在64k內
c.因無連線,是不可靠協議
d.不需要建立連線,速度快
TCP:
a.建立連線,形成傳輸資料的通道
b.在連線中進行大資料量傳輸,以位元組流的方式
c.通過三次握手完成連線,是可靠協議
d.必須建立連線,效率會較低

33、說說三次握手
第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入SYN_SEND狀態,等待伺服器確認;
SYN: 同步序列編號(Synchronize Sequence Numbers)
第二次握手:伺服器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態;
第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手。

34、什麼是Webservice
Webservice就是提供不同的平臺相互通訊,基於Soap協議。
Web service就是一個應用程式,它向外界暴露一個能夠通過Web進行呼叫的API
SOAP是一個簡單基於xml的輕量協議,使用者web上交換結構化資訊和型別資訊
soap請求是Http Post的一個專用版本,遵循一種特殊的xml訊息格式
Content-type設定為:text/xml任何資料都可以xml化

35、WebService實現原理是
HTTP協議+XML

36、HTTP協議是什麼
對客戶端和服務端之間資料傳輸的格式規範,格式稱之為"超文字傳輸協議"

37、什麼是http協議無狀態協議,怎麼解決http協議無狀態
a.無狀態協議對於事務處理沒有記憶功能,缺少狀態意味著如果後續處理需要前面的資訊
b.通過Cookie或者Session儲存

38、http狀態碼

200:請求成功

500:語法錯誤

502:錯誤閘道器

404:請求頁面不存在

39、http協議由什麼組成
請求報文包含三部分
a.請求行(包含請求方法、URI、Http版本資訊)
b.請求首部欄位
c.請求內容實體
響應報文包含三部分
a.響應行(包含http版本、狀態碼、狀態碼的原因短語)
b.響應首部欄位
c.響應內容實體

40、http協議請求方式
a.GET:用於請求訪問已經被URI(統一資源識別符號)識別的資源,可以通過URL傳參給伺服器
b.POST:用於傳輸資訊給伺服器,主要功能與GET方法類似,但一般推薦使用POST方式
c.PUT:傳輸檔案,報文主體中包含檔案內容,儲存到對應URI位置
d.HEAD:獲得報文首部,與GET方法類似,只是不返回報文主體,一般用於驗證URI是否有效
e.DELETE:刪除檔案,與PUT方法相反,刪除對應URI位置的檔案

41、HTTP1.0與HTTP1.1的區別
1.0每次請求結束後都會關閉連線,然後傳送新的請求就會重新建立連線,這樣會導致很多問題,
1.1每次連線可以傳送多個請求。

42、HTTP協議實現原理機制

43、http與https的區別
https具有安全通訊線路認證,完全性的保護

44、Http協議有哪些特徵
a.支援客戶/伺服器模式
b.簡單快捷
c.靈活
d.無連線
e.無狀態

45、Servlet的執行流程,doGet和doPost的區別
a、例項化,初始化(init()),處理請求,進行銷燬(destroy())
b、doGet處理get請求,doPost處理Post請求,doGet用於位址列提交,doPost用於表單提交

46、Jsp中重定向與轉發的區別
a.重定向是客戶端行為,轉發是伺服器行為
b.重定向會導致request物件丟失,轉發不會
c.重定向向伺服器產生兩次請求,轉發產生一次請求,重定向時可以轉發到專案以外的網站
轉發只能在當前專案裡轉發
d.轉發url不會變request.getRequestDispatch().forward()
e.重定向url會改變response.getRedirect()

47、Jsp和Servlet的區別
a.Jsp的可讀性強,容易維護,並且jsp最後會編譯成servlet
b.Servlet容易除錯
c.Jsp更多的是用於表示層,寫html程式碼

48、Session常用方法
getSession、set/getAttribute等

49、Jsp九大內建物件
a.Request:對當前請求進行封裝
b.Response:返回伺服器端資訊給使用者
c.Session:瀏覽器會話物件,瀏覽器範圍內有效
d.Application:應用程式物件,對整個web工程都有效
e.Page:當前頁面物件,也就是this
f.PageContext:只對當前jsp頁面有效,裡面封裝了基本的request和session的物件
g.Out:頁面列印物件,在jsp頁面列印字串
h.Config:單個Servlet的配置物件,相當於servletConfig物件
i.Excepetion:錯誤頁面的exception物件

50、Jsp三大指令
a.Page:指令是針對當前頁面的指令
b.Include:用於指定如何包含另一個頁面
c.Taglib:用於定義和指定自定義標籤

51、Jsp七大動作
a.Forward:執行頁面跳轉,將請求的處理轉發到另一個頁面
b.Include:用於動態引入一個jsp頁面
c.Param:用於傳遞引數
d.Plugin:用於下載javaBean或applet到客戶端執行
e.useBean:用於javaBean
f.setProperty:修改javaBean例項的屬性值
g.getProperty:獲取javeBean例項的屬性值

52、獲取頁面的元素和值有幾種方式
a.request.getParameter()返回客戶端的請求引數與值
b.request.getParameterNames()返回所有可用屬性名的列舉
c.request.getParameterValues()返回包含引數的所有值的陣列

53、jsp與javaScript的區別
a.前者服務端基於java,後者客戶端基於html
b.Servlet是獨立於平臺和協議的服務端的java應用程式,可以動態生成web頁面,
並採用響應和請求的模式提供web服務
c.JavaScript是一種解釋性語言,用於與html頁面提供互動

54、Jsp執行原理
客戶端發出請求,jsp引擎將jsp頁面翻譯成servlet的java原始檔,在tomcat中將
原始檔編譯成class檔案,並載入到記憶體中執行,把結果返回給客戶端

55、Html和Servlet的異同
a.html是靜態,servlet是動態
b.html頁面有伺服器直接返回
c.servlet是用來處理客戶請求,並返回html頁面

56、會話跟蹤有那些,它們的區別是什麼
a.Cookie、session和application
b.Cookie是http物件,客戶端與服務端都可以操縱
c.cookie是在客戶端保持狀態,session是在伺服器保持狀態,
由於cookie儲存在客戶端本地,所有資料容易竊取
d.當訪問量很多,使用session則會降低伺服器效能,application作用域整個工程只有一個,
可以在不同瀏覽器共享資料,所有人都可以共享,所以application是不安全的

57、session和application的作用
a.Session用於客戶端與伺服器之間保持狀態的解決方案,資料儲存在伺服器中,底層是cookie實現的
b.application的作用域整個工程只有一個,可以在不同瀏覽器之間共享資料所有人都可以共享,
所以application是不安全的

58、request、response、session和application是怎麼用的
a.Request是客戶端向伺服器傳送請求
b.Response是服務端對客戶端請求做出的響應
c.Session在Servlet中不能直接使用,需要通過getSession()建立
d.Application不能直接建立,存在於伺服器記憶體中,由伺服器建立或者銷燬

59、為什麼在session少放物件
因為session底層是cookie實現,當客戶端禁用cookie後,session也會失效,
所以儘量少向session中儲存資訊,
session儲存在伺服器端,大量session會降低伺服器效能

60、Jsp頁面跳轉
forward和redirect

61、什麼是Spring
Spring是開發Java企業級軟體的開放開源輕量級的框架,它解決了業務邏輯層和其他各層之間
耦合的問題,因此它將面向介面程式設計思想貫穿了整個應用系統

62、IOC(DI)
控制反轉,促進低耦合,使用物件需要例項化,而IOC是將控制權反轉給Spring,作用是實現了
程式的解耦

63、AOP
允許程式模組化橫向切割關注點,應用物件只需實現它們應該做的完成業務邏輯,
它們並不負責其他系統關注點(例如日誌或者事務支援)

64、Spring的底層實現機制
使用Demo4j(解析XML)和Java的反射機制

65、AOP用到了什麼代理
JDK動態代理:對實現了介面的類生成代理
CGLib代理機制:對類生成代理

66、動態代理與靜態代理區別
靜態代理:由程式設計師或特定工具自動生成原始碼,再對其編譯。在程式執行前,
代理類的.class檔案就已經存在
動態代理:在程式執行時,運用反射機制建立而成

67、Spring注入方式有哪些
a.Set注入
b.構造器注入
c.靜態工廠的方法注入
d.例項工廠的方法注入

68、Spring常用註解
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

69、Spring優缺點
a.優點:降低了元件之間的耦合性,實現了軟體各層之間的解耦
可以使用容器提供的眾多服務,如事務管理,訊息服務等
容器提供單例模式支援
容器提供AOP技術,利用它很容易實現許可權攔截、執行期監控等功能
spring對於眾多主流應用框架提供支援hibernate、struts等
spring屬於低入侵式設計,程式碼的汙染極低
spring的DI機制降低了業務物件替換的複雜性
spring高度開放,不強制完全依賴spring
b.缺點:使用了大量反射機制,很佔記憶體

70、Spring工作流程
a.瀏覽器發出一個請求
b.請求首先進入DispatcherServlet主控制器
c.主控制器呼叫handlerMapping元件根據請求找到對映的Controller處理執行
d.Controller處理方法,將返回結果給ViewResolver元件
e.ViewResolver元件根據Controller返回結果定位試圖jsp,將模型資料傳遞到jsp
f.由jsp生成響應結果,給瀏覽器輸出

71、Spring作用域
a.singleton:單例模式,在整個容器中,Bean只有一個例項
b.prototype:原型模式,每次通過getBean()獲取Bean,產生一個例項
c.request:每次http請求,request定義的Bean都將產生一個例項,
只有在web應用中使用Spring才有效
d.session:對於每次http session,session定義的Bean都將產生一個新例項,
只有在web應用中使用Spring才有效
e.globalsession:每個全域性http session,session定義的Bean都將產生一個新例項,
典型情況下,僅在使用portlet context的時候有效
只有在web應用中使用Spring才有效

72、什麼是hibernate
hibernate是一個基於ORM持久框架,可以讓程式設計師以面向物件的思想操作資料庫,
提高生產效率

73、什麼是ORM
orm是一種思想,物件關係對映,是物件關係模型,如hibernate,
以面向物件方式程式設計,封裝了JDBC

74、Hibernate中get和load的區別
a.效能好不會發出SQL語句,但是如果查id之外的值會報錯.報錯可控 不會出現NULL
b.不管你用不用這個物件都會發出SQL語句,所以效能差,但是可以查物件的所有值.報錯不可控  查不到物件的話 會報NULL.

75、hibernate的三種狀態
a.臨時狀態
b.持久化狀態
c.遊離狀態

76、orm與jdbc的區別
a.jdbc只是一個java操作資料庫的規範介面
b.orm是一種思想,物件關係對映
c.jdbc是從底層訪問資料庫伺服器,比較安全
d.orm是物件關係模型,如hibernate,以面向物件方式程式設計,封裝了jdbc

77、hibernate懶載入,幾種禁用方法
a.資料量過大,用快取不合適,為減少系統資源消耗,hibernate用懶載入來彌補這種缺陷。
b.使用代理物件Hibernate.initialize("代理物件")
對映檔案新增lazy="false"
在web.xml中配置openSessionInView過濾掉

78、hibernate有幾種查詢
a.屬性查詢
b.引數查詢
c.命名引數查詢
d.關聯查詢
e.分頁查詢
f.統計函式

79、hibernate優缺點
a.優點
程式更加面向物件
提高生產率
方便移植
無侵入性
b.缺點
效率比jdbc略差
不適合批量操作

80、hibernate快取機制
a.hibernate快取機制包括兩大類:hibernate一級快取和hibernate二級快取
b.hibernate一級快取又稱為"session的快取"
session內建不能被解除安裝,session的快取是事務範圍的快取
一級快取中,持久化類的每個例項都具有一個唯一的OID
c.hibernate二級快取又稱為"sessionFactory的快取"
二級快取就是SessionFactory級別的快取,顧名思義,就是查詢的時候會把查詢結果快取到二級快取中,
如果同一個sessionFactory建立的某個session執行了相同的操作,
hibernate就會從二級快取中拿結果,而不會再去連線資料庫,
二級快取是可選的,是一個可配置的外掛

81、hibernate延遲載入
當Hibernate從資料庫中載入某個物件時,不載入關聯的物件,而只是生成了代理物件

82、hibernate工作原理及為什麼要用
工作原理
a.讀取並解析配置檔案
b.讀取並解析對映資訊
c.建立sessionFactory
d.開啟session
e.建立事務transaction
f.持久化操作
g.提交事務
h.關閉session
i.關閉sessionFactory
為什麼用
j.對jdbc訪問資料庫程式碼進行了封裝,簡化程式碼開發量
k.優秀的orm實現並且使用java反射機制,而不是位元組碼增強程式來實現透明性
l.對映靈活性很出色,支援各種關係

83、什麼是MyBatis
前身是iBatis,升級版本名稱叫MyBatis,MyBatis是以純sql操作資料的持久層框架

84、MyBatis與Hibernate區別
a.hibernate是面向物件的思想操作資料庫,不需寫sql語句,自動生成,
而MyBatis是以純sql操作資料庫,MyBatis容易優化
b.MyBatis移植性差

85、設計模式(一共23種)
a.單例模式
b.代理模式
c.工廠模式
d.抽象工廠模式

86、什麼是單例模式
單例分類:懶漢式單例、餓漢式單例
單例特點:
a.單例類只能有一個例項
b.單例類必須自己建立自己的唯一例項
c.單例類必須給所有其他物件提供這一例項

87、懶漢模式和餓漢模式的區別
a.餓漢模式一旦載入,就把單例模式初始化完成
b.懶漢模式,當呼叫getInstance的時候,就會去初始化單例
c.懶漢執行緒不安全,因其是方法內部例項化,當多個執行緒訪問會造成執行緒不安全

88、linux常用命令
a.gat:檢視某個檔案
b.cp:拷貝
c.ls:檢視當前目錄檔案
d.pwd:檢視當前路徑
e.tail:檢視日誌
f.grep:搜尋日誌
g.ifconfig:檢視ip等資訊
h.cd ..返回上一級
i.mkdir:建立資料夾(可建立多個)
j.mv:移動檔案
k:touch:建立檔案
l.cat:檢視檔案
m.echo(輸出字串) "內容" >>(追加,>表示覆蓋) 
n.rm( -rf:無提示):刪除

89.struts2執行流程
a.客戶端瀏覽器發出HTTP請求。
b.根據web.xml配置,該請求被FilterDispatcher接收。
c.根據struts.xml配置,找到需要呼叫的Action類和方法, 並通過IoC方式,將值注入給Aciton。
d.Action呼叫業務邏輯元件處理業務邏輯,這一步包含表單驗證。
e.Action執行完畢,根據struts.xml中的配置找到對應的返回結果result,並跳轉到相應頁面。
f.返回HTTP響應到客戶端瀏覽器。

90、事務
事務是資料庫系統執行的邏輯單位,四大特性
ACID
a.原子性:事務是最小的執行單位,不可分割
b.一致性:事務如果中間被割裂可能導致資料不一致性,資料必須完全一直,這一點由原子性保障
c.隔離性:併發事務之間不能相互影響
d.永續性:事務一旦提交,資料的修改就會永久儲存在儲存器中

91、鎖
當併發事務同時訪問一個資源,有可能導致資料不一致,為保證一致性,需要一種機制順序化。