1. 程式人生 > >java 面試視訊總結 (1)

java 面試視訊總結 (1)

1.執行緒的實現方式?

①實現方式

通過繼承Thread類實現一個執行緒

通過實現Runnable介面實現一個執行緒

②怎麼啟動?

Thread thread = new Thread(“繼承了Thread的物件/實現了Runnable的物件”);

thread.setName(“設定一個執行緒名稱”);

thread.start();

啟動執行緒使用start方法,而啟動後會執行run方法

③怎麼區分執行緒?z在一個系統中有多個執行緒,每個執行緒都會列印日誌檔案,怎麼區分是那個執行緒列印的?

thread.setName(“設定一個執行緒名稱”);這是一種規範,在建立執行緒完成以後,都需要設定名稱。

2.執行緒併發庫

Java通過Executors提供四種執行緒池,分別為:
newCachedThreadPool建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。
newFixedThreadPool 建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。
newScheduledThreadPool 建立一個定長執行緒池,支援定時及週期性任務執行。
newSingleThreadExecutor 建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先順序)執行。

執行緒池的作用?

  1. 限制執行緒的個數,不會導致由於執行緒過多導致系統執行緩慢或崩潰
  2. 執行緒池不需要每次都去建立,響應時間更快

3.什麼是設計模式?常用的設計模式有哪些?

設計模式是經過前人無數次的實踐總結出的,設計過程中可以重複使用、可以解決特定問題的設計方法。

單例模式:

飽漢模式:飽漢模式是一出來就建立單例項

飢漢模式:需要的時候才建立

  1. 構造方法私有化,讓除了自己類中能建立其他地方都不能建立,
  2. 在自己的類中建立一個單例項
  3. 提供一個方法獲取例項物件(建立時需要就行進行方法同步)

工廠模式:Spring的IOC就是使用的工廠模式

物件的建立交給一個工廠去建立。

代理模式:SpringAOP就是使用的動態代理

包裝模式

4.講一下HTTP get和post的區別

Get和post都是http的請求方式,使用者通過不同的http的請求方式完成對url的不同操作,具體點就是get用於獲取/查詢  資源資訊,而post一般用於更新  資源資訊

不同:1.提交引數形式

GET請求提交的資料會在位址列顯示出來,而Post請求不會再位址列顯示出來。GET提交請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),以?分割URL和傳輸資料,多個引數會用&連線;Post提交:把提交的資料放置在HTTP包的包體中。因此,GET提交的資料會在位址列中顯示,而Post提交,位址列不會改變

2.傳輸資料的大小

Http GET:請求由於瀏覽器對地址長度的限制而導致傳輸的資料有限制(最多隻能有1024位元組),而Post的請求不會因為地址長度限制而導致傳輸資料限制。

3.安全性

POST的安全性要比GET的安全性高。正如在(1)中提到,使用 Get的時候,引數會顯示在位址列上,而Post不會。所以,如果這些資料是中文資料而且是非敏感資料,那麼使用 get;如果使用者輸入的資料不是中文字元而且包含敏感資料,那麼還是使用 post為好。

4.安全的和冪等的

所謂安全的意味著該操作用於獲取資訊而非修改資訊。冪等的意味著對同一URL的多個請求應該返回同樣的結果。完整的定義並不像看起來那樣嚴格。換句話說,GET請求一般不應產生副作用。從根本上講,其目標是當用戶開啟一個連結時,她可以確信從自身的角度來看沒有改變資源。比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認為是安全的和冪等的,因為它總是返回當前的新聞。反之亦然。POST請求就不那麼輕鬆了。POST表示可能改變伺服器上的資源的請求。仍然以新聞站點為例,讀者對文章的註解應該通過POST請求實現,因為在註解提交之後站點已經不同了(比方說文章下面出現一條註解)。(這一條不太理解。

5.說一下對Servlet的理解?或servlet是什麼?

Servlet(Servlet Applet),全稱Java Servlet,是用Java編寫的伺服器端程式。而這些Servlet都要實現Servlet這個介面。其主要功能在於互動式的瀏覽和修改資料,生成動態Web內容。Servlet運行於支援Java的應用伺服器中。繼承HttpServlet 重寫doGet 和 doPost 方法或者你也可以重寫service方法完成對get和post請求響應。

Servlet的通俗理解?

Servlet是一個運行了面向請求/ 響應伺服器中的網路模組。

請求是客戶的一個呼叫,可能是遠端的。

請求包含了客戶要傳送給伺服器的資料。

響應是伺服器返回給客戶的回答該請求的資料。Servlet是一個JAVA物件,他以請求為輸入,分析其資料,執行一些邏輯運算,並給客戶發回一個響應。 
   另一方面,Servlet作為駐留在伺服器端HTTP明白的中間層,它們知道怎樣在HTTP中通過RMI或IIOP在EJB和客戶之間進行通訊。

6.簡單說一下Servlet的生命週期

1.servlet有良好的生存期的定義,包括載入和例項化、初始化、處理請求以及服務結束。這個生存期由 javax.servlet.Servlet介面的  init,service和   destroy方法表達。

2.載入 Servlet的 class---->例項化 Servlet----->呼叫 Servlet的 init完成初始化---->響應請求(Servlet的 service方法)----->Servlet容器關閉時(Servlet的destory方法)

3.Servlet啟動時,開始載入  servlet生命週期開始。Servlet被伺服器例項化後,容器執行其init方法,請求到達時執行其 service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,當伺服器決定將例項銷燬的時候(伺服器關閉)呼叫其 destroy方法。

7.servlet  API中的forward()和redirect()區別?

前者僅是容器中控制權的轉向, 在客戶端瀏覽器位址列中不會顯示出轉向後的地址; 後
者則是完全的跳轉瀏覽器將會得到跳轉的地址, 並重新發送請求連結Forward還是原來的請求而redirect是重新發送請求。 這樣, 從瀏覽器的位址列中可以看到跳轉後的連結地址。 所以, 前者更加高效, 在前者可以滿足需要時, 儘量使用 forward()方法, 並且, 這樣也有助於隱藏實際的連結。 在有些情況下, 比如, 需要跳轉到一個其它伺服器上的資源, 則必須使用sendRedirect()方法。 

  1. forward是伺服器端的轉向,而redirect是客戶端的跳轉
  2. 使用forward瀏覽器的地址不會發生改變,而redirect會發生改變
  3. Forward 在一次請求中完成,而redirect是重新發起請求
  4. Forward是在伺服器端完成,而不用客戶端重新發起請求,效率較高。

8.JSP 和Servlet的相同點和不同點

JSP是Servlet技術的擴充套件,所有的jsp檔案都會被翻譯為一個繼承HttpServlet的類。也就是說JSP最終也是一個Servlet。這個Servlet對外提供服務。

不同點:

1、JSP經編譯後變成Servlet
2、jsp側重於檢視,Servlet更擅長於邏輯控制
3、Servlet如果要實現html的功能,必須使用writer輸出對應的HTML。而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。

聯絡:

JSP是Servlet技術的擴充套件,本質上是Servlet的簡易方式。

9.JSP 有哪些內建物件?作用分別是什麼?分別有什麼方法?

9個內建物件:

request 使用者端請求。此請求會包含GET/POST請求的引數

response 網頁傳回使用者端的迴應

pageContext 網頁的屬性是在這裡管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config servlet 構架部件
page JSP 網頁本身
exception 針對錯誤網頁,未捕捉的例外
四大作用域:pageContext,request,session,application,可以通過jstl從四大作用域獲值。

JSP傳遞值,request,session,application,cookie都可以傳值。

11.session和cookie的區別

Session和cookie都是會話(session)跟蹤技術。Cookie是通過在客戶端記錄資訊確定使用者身份,session通過在伺服器端記錄資訊確定使用者身份。但是session的實現依賴於cookie,sessionId(session的唯一標識需要存放在客戶端)

區別:

  1. cookie資料存放在客戶的瀏覽器上,session資料存放在伺服器上。
  2. Cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應該使用session。
  3. session在一定時間內儲存在伺服器上,當訪問增多會佔伺服器效能。考慮到伺服器的效能方面,應該使用cookie
  4. 單個cookie儲存的資料不能超過4k,很多瀏覽器都限制一個站點最多儲存20個cookie。

個人建議:

將登陸資訊等重要資訊存放為session ,其他資訊如果需要保留,可以存放在cookie中。

購物車最好使用cookie,但是cookie是可以從客戶端禁用的,這時候就要使用cookie+資料庫的方式實現,當從cookie中不能取出資料時,就從資料庫取。

12.MVC的各部分有哪些技術實現?

M(model)模型  javabean

V(View)程式碼檢視  html  jsp

C(Control)控制器  Servlet Action

JSP+Servlet+javabean 最經典MVC模式,實際上就是model2的實現方式,就是把檢視和邏輯隔離開來,

Model1的方式  JSP +dao

Model2的方式 JSP+Servlet+Service+dao

使用struts2和springMVC這樣的MVC框架後,JSP+核心控制器+action+javabean