1. 程式人生 > >部分面試題總結-java後臺

部分面試題總結-java後臺

1、Nginx負載均衡

輪詢: 預設的,每一個請求按順序逐一分配到不同的後端伺服器,如果後端伺服器掛了則能自動剔除
ip_hash: 請求按照IP的hash結果分配,這樣來自一個IP的訪客固定訪問一個後端伺服器,有效解決了動態網頁存在的session共享問題
weight: weight是設定權重,用於後端伺服器效能不均的情況,訪問比例約等於權重之比
fair: 比上面兩個更智慧的演算法,可以根據頁面大小和載入時間長短智慧地進行均衡,也就是根據後端伺服器的響應時間來分配請求響應時間短的優先分配。Nginx本身不支援fair,支援要下載額外的模組。
url_hash: 按照url的hash來分配請求,使每個url定向到同一個後端伺服器,可以進一步提高後端快取伺服器的效率。

2、Session載入實體物件的過程

1、Session在呼叫資料庫查詢功能之前,首先會在一級快取中通過實體型別和主鍵進行查詢,如果一級快取查詢命中且資料狀態合法
則直接返回。
2、如果一級快取沒有命中,接下來Session會在當前NonExists記錄(相當於查詢黑名單,如果出現重複的無效查詢可以迅速做出判斷,
從而提升效能)進行查詢,如果NonExists中存在同樣的查詢條件,則返回null;
3、如果一級快取查詢失敗則查詢二級快取,如果二級快取命中則直接返回。
4、如果之前的查詢都未命中,則發出SQL語句,如果查詢未發現對應記錄則將此次查詢新增到Session的NonExists中加以記錄,並返回Null
5、根據對映配置和SQL語句得到ResultSet,並建立對應的實體物件。
6、將物件納入Session(一級快取)的管理。
7、如果有對應的攔截器,則執行攔截器的onload方法。
8、如果開啟並設定了要使用二級快取,則將資料物件納入快取。
9、返回資料物件。

3、Servlet和CGI的區別

Servlet位於處理伺服器程序中,通過多執行緒方式執行其Service方法,一個例項可以服務於多個請求,並且其例項一般不會銷燬,而
CGI對每個請求都產生新的執行緒,服務完成後就銷燬,效率上低於Servlet。

4、Servlet介面有哪些方法

init
service
destroy
getSetvletInfo
getServletConfig

5、Servlet啟動過程

1、Web容器載入Servlet並將其例項化後,Servlet生命週期開始
2、容器執行其init方法進行Servlet初始化
3、請求到達時呼叫Servlet的service方法,service方法會呼叫與請求對應的doget和dopost方法
4、當伺服器關閉或者專案被解除安裝時伺服器會將Servlet例項銷燬,會呼叫destroy方法

6、轉發(forward)和重定向(redirect)的區別

**forward:**是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容直接讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器傳送的內容是哪來的,所以地址還是原來的地址
**redirect:**是伺服器端傳送一個狀態碼,告訴瀏覽器重新去請求那個地址,因此從瀏覽器的位址列中可以看到跳轉後的連線地址。不能跨域訪問。

7、選擇Spring框架的原因

非侵入式: 支援基於POJO的程式設計模式,不強制性的要求實現Spring框架中的介面或繼承Spring框架中的類。
IOC容器: IOC容器幫助應用程式管理物件以及物件之間的依賴關係,物件之間的依賴關係如果發生了改變只需要修改配置檔案而不是修改程式碼,因為程式碼的修改可能意味著專案的重新構建和完整的迴歸測試。有了IOC容器,程式設計師再也不需要自己編寫工廠、單例等模式。
AOP: 面向切面程式設計,通過配置的方式將橫切關注功能動態新增到目的碼上,進一步實現了業務邏輯和系統服務之間的分離。另一方面有了AOP程式設計師可以省去很多自己寫代理類的工作。
MVC: 為WEB表示層提供了更好的方案。
事務管理: Spring能接納多種持久層技術。

8、什麼是Spring Beans?

Spring Beans是形成Spring應用的主幹java物件。它們被Spring IOC容器初始化,裝配和管理。這些Bean通過容器中配置的元資料建立。

9、IOC容器配置bean的方式

1、基於XML檔案進行配置
2、基於註解進行配置
3、基於Java程式進行配置

10、Spring bean的生命週期?

1、IOC容器找到Bean的定義並例項化該Bean
2、IOC容器對Bean進行依賴注入
3、如果Bean實現了對應的介面,就將Bean中物件傳給相應的方法
4、如果有和Bean關聯的物件,則這些物件的方法被呼叫
5、銷燬Bean例項時,如果實現了特定的介面就呼叫Destroy方法

11、Spring中的自動裝配有哪些限制?

1、如果使用了構造器注入或者Setter注入,那麼將覆蓋自動裝配的依賴關係。
2、基本資料型別的值、字串字面量、類字面量無法使用自動裝配。
3、優先考慮使用顯式的裝配來進行更精確的依賴注入而不是使用自動裝配。

12、大型網站在架構上應當考慮哪些問題?

分層:將系統橫向切分成若干個切面,每個層面只承擔單一的職責。
分割:對軟體的縱向切分
分散式:可以使用Hadoop和MapReduce計算框架處理
叢集:可以有更多的伺服器提供相同的服務,更好地提供對併發的支援。
快取:用空間換時間
非同步
冗餘

13、http請求報文格式?

請求行
訊息頭部
空行
請求正文

14、HTTP狀態碼含義?

1XX:資訊提示
2XX:成功
3XX:重定向
4XX:客戶端錯誤
5XX:伺服器錯誤

15、getParameter和getAttribute方法有什麼區別?

getAttribute()獲取在請求物件中設定的屬性,該物件返回物件為Object物件
getParamter方法是獲取指定的請求引數值,返回值為String型別字串

16、Session和Cookie的區別

1、cookie儲存在客戶端,session儲存在伺服器端
2、session會在一定時間內儲存在伺服器上,比較佔用伺服器的效能
3、單個cookie在客戶端的限制是3K
4、登陸資訊等重要資訊存放為session,其他可以存到cookie裡

17、Spring 事務隔離級別

1、ISOLATION_DEFAULT:後端資料庫預設的隔離級別
2、ISOLATION_READ_UNCOMMITTED:最低的隔離級別,允許讀取尚未提交的資料變更,可能會導致髒讀、幻讀和不可重複讀
3、ISOLATION_READ_COMMITTED:允許讀取併發事務已經提交的資料,可能會導致幻讀和不可重複讀
4、ISOLATION_REPEATABLE_READ:對同一欄位的多次讀取結果都是一致的,除非資料是被本身事務所修改,可能導致幻讀
5、ISOLATION_SERIALIZABLE:最高的隔離級別,完全服從ACID。所有事務依次逐個執行,這樣事務之間完全不可能產生干擾,會嚴重影響效能。

18、Spring 事務傳播級別

支援當前事務的情況
REQUIRED:如果當前存在事務,則加入該事務,如果沒有事務,則建立一個新的事務。
SUPPORTS:如果當前存在事務,則加入該事務,如果沒有事務,則以非事務的方式繼續執行。
MANDATORY:如果當前存在事務,則加入該事務,如果沒有事務,則丟擲異常。
不支援當前事務的情況
REQUIRED_NEW:建立一個新的事務,如果當前存在事務,則把當前事務掛起。
NOT_SUPPORTED:以非事務的方式執行,如果存在事務,則把當前事務掛起。
NEVER:以非事務方式執行,如果存在當前事務,則丟擲異常。
其他情況
NESTED:如果當前存在事務,則建立一個事務作為當前事務的巢狀事務來執行,如果沒有事務則等價於REQUIRED

19、Spring MVC流程

使用者傳送資訊到dispactherServlet前端控制器,載入xml配置檔案
通過路徑對映找到HandlerMapper處理器對映器,返回資訊到dispatcherServlet前端控制器
通過路徑對映找到HandlerAdapter處理器介面卡,交由處理器處理
處理完成返回一個ModelAndView物件到HandlerAdapter,再返回dispatcherServlet
通過ViewReoslve檢視解析器解析,返回View物件到dispatcherServlet
傳送資料到request域,在頁面上顯示

20、如何獲取Cookie

使用request物件的getcookie方法

21、通過部署描述檔案xml可以配置那些功能?

1、配置Servlet訪問URL
2、配置Web容器,Servlet的初始化引數
3、配置歡迎、錯誤頁面
4、Servlet載入優先順序
5、Web配置監聽器、過濾器
6、設定會話過期時間

22、JSP有哪些動作?作用?

1、在頁面請求時引入一個檔案。
2、尋找或者例項化一個JavaBean。
3、設定JavaBean的屬性。
4、輸出某個JavaBean的屬性。
5、把請求轉到一個新的頁面。
6、在請求轉發與include中進行頁面傳參。

23、jsp和Servlet區別

1、JSP在本質上就是Servlet,建立方式不一樣。
2、Servlet完全是Java程式碼構成,擅長流程控制,JSP由HTML程式碼和JSP標籤組成,可以方便地編寫動態網頁
3、在實際應用中採用Servlet來控制業務流程,而採用JSP來生成動態網頁

24、用什麼方法使伺服器關閉之後,session所儲存的資訊不會丟失?

使用cookie實現,伺服器端將需要儲存的資訊,通過Cookie並寫入客戶端磁碟中,下次訪問時提交即可

25、Servlet生命週期

1、init方法:伺服器初始化Servlet,開始只調用一次
2、Service方法:初始化完畢,Servlet物件呼叫該方法響應客戶的請求
3、destroy方法:呼叫該方法消滅Servlet物件

26、dao是什麼及作用

DAO是資料庫訪問介面,負責管理與資料庫操作物件,將與資料維護與操作的方法通過DAO封裝方法,使得這些操作可以從系統的業務邏輯中獨立出來。

27、什麼是Servlet?

用Java編寫的伺服器端程式,由伺服器端呼叫和執行的Java類。當用戶請求傳送請求到伺服器時,伺服器可能將請求資訊傳送Servlet,並讓Servlet建立起伺服器返回給客戶端的響應。

28、HTTP的GET和POST請求區別

1、get通過URL提交資料,資料可以在URL中看到。POST資料放置在HTML Headler中,無法再位址列中看到
2、get方式提交的資料最多隻能有1024位元組,POST沒有此限制
3、get一般用作小資料的請求,POST用作大資料的請求

29、什麼時候呼叫doget或dopost方法?

根據客戶端請求方式

30、哪些方法能提高JDBC效能?

1、儘量使用資料連線池,避免使用DriverManager.getConnection()
2、合理配置連線池引數,合理設定資料連線池的初始大小
3、選擇合適的事務等級
4、及時關閉連線

31、實現會話跟蹤有哪幾種方式?

1、URL重寫
2、隱藏表單域
3、Cookie
4、Session

32、瀏覽器頁面和Tomcat的互動過程

1、將JSP頁面翻譯成一個Servlet,這個Servlet是一個java檔案,同時也是一個完整的Java程式
2、再由Java編譯器對這個Servlet進行編譯,得到class檔案
3、再由JVM直譯器來執行class檔案,生成向客戶端傳送的應答,然後傳送給客戶端

33、JSP九大內建物件

response,request,page,out,pageContext,exception,session,application,config

34、IOC是怎樣實現的?

1、讀取標註或配置檔案,取到類名
2、使用反射基於類名例項化對應對應的物件例項
3、將物件例項,通過建構函式或者setter傳出

35、Spring配置Bean有幾種方式?

1、在XML檔案中顯式配置
2、在Java介面和類中實現配置
3、隱式Bean的發現機制和自動裝配機制(優先)

36、Spring有哪些事件?

1、上下文更新事件:會在ApplicationContext被初始化或者更新時釋出
2、上下文開始事件:容器呼叫ConfigurableApplicationContext的start方法開始/重新開始容器觸發該事件
3、上下文停止事件:容器呼叫ConfigurableApplicationContext的Stop方法停止容器觸發該事件
4、上下文關閉事件:當ApplicationContext被關閉時觸發此事件,容器被關閉時,其管理的所有單例Bean被銷燬。
5、請求處理事件:在Web應用中,當一個http請求結束時觸發此事件