Java面試個人總結200多題(二)

*聲明:
這是個人面試的總結,很多都是我自己百度的,答案僅供大家參考。

64.jsp 和 servlet 有什麼區別?
Servlet 適合動態輸出 Web 數據和業務邏輯處理,對於 html 頁面內容的修改非常不方便;Jsp 是在 Html 代碼中嵌入 Java 代碼,適合頁面的顯示
內置對象不同,獲取內置對象的方式不同

Servlet
一種服務器端的Java應用程序
由 Web 容器加載和管理
用於生成動態 Web 內容
負責處理客戶端請求

Jsp
是 Servlet 的擴展,本質上還是 Servlet
每個 Jsp 頁面就是一個 Servlet 實例
Jsp 頁面會被 Web 容器編譯成 Servlet,Servlet 再負責響應用戶請求

65.jsp 有哪些內置對象?作用分別是什麼?
1.HttpServletRequet類的Request對象:代表請求對象,主要用於接受客戶端通過HTTP協議連接傳輸服務器端的數據。
2.HttpSevletResponse類的Response對象:代表響應對象,主要用於向客戶端發送數據。
3.JspWriter類的out對象:主要用於向客戶端輸出數據,out的基類是jspWriter
4.HttpSession類的session對象:主要用來分別保存每個月的信息與請求關聯的會話;會話狀態的維持是web應用開發者必須面對的問題。
5.ServletContext類的application對象:主要用於保存用戶信息,代碼片段的運行環境;它是一個共享的內置對象,即一個容器中的多個用戶共享一個application
,故其保存的信息被所有用戶所共享。
6.PageContext類的PageContext對象:管理網頁屬性,爲jsp頁面包裝頁面的上下文,管理對屬於jsp的特殊可見部分中已經命名對象的訪問,它的創建和初始化都是由容器來完成的。
7.ServletConfig類的Config對象:代碼片段配置對象,標識Servlet的配置。
8.Object類的Page對象,處理jsp頁面,是object類的一個實例,指的是jsp實現類的實例
9.Exception對象:處理jsp文件執行時發生的錯誤和異常,只有在錯誤頁面裏才使用,前提是在頁面指令裏要有isErrorPage=true。

66.說一下 jsp 的 4 種作用域?
A。page當前頁面作用域,相當於 Java 關鍵字中 this。在這個作用域中存放的屬性值,只能在當前頁面中取出。
B。request請求作用域,範圍是從請求創建到請求消亡這段時間,一個請求可以涉及的多個頁面。jsp:forwardjsp:include跳轉到其他頁面,也在作用域範圍。
C。session會話作用域,範圍是一段客戶端和服務端持續連接的時間,用戶在會話有效期內多次請求所涉及的頁面。seesion會話器,服務端爲第一次建立連接的客戶端分配一段有效期內的屬性內存空間。
D。application全局作用域,範圍是服務端Web應用啓動到停止,整個Web應用中所有請求所涉及的頁面。當服務器開啓時,會創建一個公共內存區域,任何客戶端都可以在這個公共內存區域存取值。

67.session 和 cookie 有什麼區別?
Session是在無狀態的HTTP協議下,服務端記錄用戶狀態時用於標識具體用戶的機制
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息。

1、數據存儲位置:cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。

2、安全性:cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙,考慮到安全應當使用session。

3、服務器性能:session會在一定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能,考慮到減輕服務器性能方面,應當使用cookie。

4、數據大小:單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。

5、信息重要程度:可以考慮將登陸信息等重要信息存放爲session,其他信息如果需要保留,可以放在cookie中。

68.說一下 session 的工作原理?
第一種:
A。 當用戶訪問到一個服務器,如果服務器啓用Session,服務器就要爲該用戶創建一個SESSION,在創建這個SESSION的時候,服務器首先檢查這個用戶發來的請求裏是否包含了一個SESSION ID,如果包含了一個SESSION ID則說明之前該用戶已經登陸過併爲此用戶創建過SESSION,那服務器就按照這個SESSION ID把這個SESSION在服務器的內存中查找出來,如果客戶端請求裏不包含有SESSION ID,則爲該客戶端創建一個SESSION並生成一個與此SESSION相關的SESSION ID。這個SESSION ID是唯一的、不重複的、不容易找到規律的字符串,這個SESSION ID將被在本次響應中返回到客戶端保存,而保存這個SESSION ID的正是COOKIE,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器

第二種:
B。Session內容保存在服務器端的,通常是保存在內存中,當然也可以保存在文件、數據庫等等。客戶端跟服務器端通過SessionId來關聯,
SessionId通常以Cookie的形式存儲在客戶端。每次HTTP請求,SessionId都會隨着Cookie被傳遞到服務器端,這行就可以通過SessionId取到對應的信息,來判斷這個請求來自於哪個客戶端/用戶。

69.如果客戶端禁止 cookie 能實現 session 還能用嗎?
不能,如果瀏覽器禁止cookie,那麼客戶端訪問服務端時無法攜帶sessionid,服務端無法識別用戶身份,便無法進行會話控制,session失效。

70.spring mvc 和 struts 的區別是什麼?
A。springMvc基於方法級別的攔截,效率高,無縫銜接spring,底層是採用servlet實現
B。struts是基於類級別攔截,效率低,底層採用filter實現

71.如何避免 sql 注入?
A 。校驗參數的數據格式是否合法(可以使用正則或特殊字符的判斷)
B。對進入數據庫的特殊字符進行轉義處理,或編碼轉換
C。預編譯 SQL(Java 中使用 PreparedStatement),參數化查詢方式,避免 SQL 拼接
D。發佈前,利用工具進行 SQL 注入檢測
E。報錯信息不要包含 SQL 信息輸出到 Web 頁面

72.什麼是 XSS 攻擊,如何避免?
跨站腳本攻擊,
A.前端對 html 標籤屬性、css 屬性賦值的地方進行校驗
B.web 頁面中可由用戶輸入的地方,如果對輸入的數據轉義、過濾處理
C.後臺輸出頁面的時候,也需要對輸出內容進行轉義、過濾處理(因爲攻擊者可能通過其他方式把惡意腳本寫入數據庫)
73.什麼是 CSRF 攻擊,如何避免?
跨站點請求僞造。
CSRF 漏洞進行檢測的工具,如 CSRFTester、CSRF Request Builder…
驗證 HTTP Referer 字段
添加並驗證 token
添加自定義 http 請求頭
敏感操作添加驗證碼
使用 post 請求

七、異常
74.throw 和 throws 的區別?
A。throw用在方法內,表示拋出具體異常
B。throws 用在方法後面,表示 拋出異常由調用者處理

75.final、finally、finalize 有什麼區別?
final:修飾方法,方法不可以重寫,修飾類,類不能被繼承,修飾變量,變量不能被修改
finally:保證代碼一定要被執行的一種機制
finallyze: Object的一個方法,保證對象在被垃圾收集前完成特定資源的回收

76.try-catch-finally 中哪個部分可以省略?
catch 和 finally 語句塊可以省略其中一個。

77.try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?
會執行,在return之前執行

78.常見的異常類有哪些?
類型轉換異常
索引越界異常
運行時異常
IO異常
SQL異常

八、網絡
79.http 響應碼 301 和 302 代表的是什麼?有什麼區別?
301:永久重定向;302:暫時重定向。
 301比較常用的場景是使用域名跳轉。
  比如,我們訪問 http://www.baidu.com 會跳轉到 https://www.baidu.com,發送請求之後,就會返回301狀態碼,然後返回一個location,提示新的地址,瀏覽器就會拿着這個新的地址去訪問。

302用來做臨時跳轉
  比如未登陸的用戶訪問用戶中心重定向到登錄頁面。
  訪問404頁面會重新定向到首頁。
它們的區別是,301 對搜索引擎優化(SEO)更加有利;302 有被提示爲網絡攔截的風險。

80.forward 和 redirect 的區別?
forward又叫轉發,redirect叫做重定向。

81.簡述 tcp 和 udp的區別?
A。UDP是面向無連接的通訊協議,UDP數據包括目的端口號和源端口號信息。
B。TCP是面向連接的通訊協議,通過三次握手建立連接,通訊完成時四次揮手
82.tcp 爲什麼要三次握手,兩次不行嗎?爲什麼?
第一次握手: A給B打電話說,你可以聽到我說話嗎?
第二次握手: B收到了A的信息,然後對A說: 我可以聽得到你說話啊,你能聽得到我說話嗎?
第三次握手: A收到了B的信息,然後說可以的,我要給你發信息啦!
如果兩次,那麼B無法確定B的信息A是否能收到,所以如果B先說話,可能後面的A都收不到,會出現問題 。
  如果四次,那麼就造成了浪費,因爲在三次結束之後,就已經可以保證A可以給B發信息,A可以收到B的信息; B可以給A發信息,B可以收到A的信息。
83.說一下 tcp 粘包是怎麼產生的?
84.OSI 的七層模型都有哪些?
應用層,表示層,物理層,會話層,傳輸層,網絡層,鏈路層
85.get 和 post 請求有哪些區別?
瀏覽器在發送get請求時會將header和data一起發送給服務器,服務器返回200狀態碼,而在發送post請求時,會先將header發送給服務器,服務器返回100,之後再將data發送給服務器,服務器返回200 OK
86.如何實現跨域?
1、jsonp
利用了 script 不受同源策略的限制
缺點:只能 get 方式,易受到 XSS攻擊

2、CORS(Cross-Origin Resource Sharing),跨域資源共享
當使用XMLHttpRequest發送請求時,如果瀏覽器發現違反了同源策略就會自動加上一個請求頭 origin;
後端在接受到請求後確定響應後會在後端在接受到請求後確定響應後會在 Response Headers 中加入一個屬性 Access-Control-Allow-Origin;
瀏覽器判斷響應中的 Access-Control-Allow-Origin 值是否和當前的地址相同,匹配成功後才繼續響應處理,否則報錯
缺點:忽略 cookie,瀏覽器版本有一定要求

3、代理跨域請求
前端向發送請求,經過代理,請求需要的服務器資源
缺點:需要額外的代理服務器

4、Html5 postMessage 方法
允許來自不同源的腳本採用異步方式進行有限的通信,可以實現跨文本、多窗口、跨域消息傳遞
缺點:瀏覽器版本要求,部分瀏覽器要配置放開跨域限制

5、修改 document.domain 跨子域
相同主域名下的不同子域名資源,設置 document.domain 爲 相同的一級域名
缺點:同一一級域名;相同協議;相同端口

87.說一下 JSONP 實現原理?
九、設計模式
88.說一下你熟悉的設計模式?
89.簡單工廠和抽象工廠有什麼區別?
簡單工廠模式
是由一個工廠對象創建產品實例,簡單工廠模式的工廠類一般是使用靜態方法,通過不同的參數的創建不同的對象實例
可以生產結構中的任意產品,不能增加新的產品

抽象工廠模式
提供一個創建一系列相關或相互依賴對象的接口,而無需制定他們具體的類,生產多個系列產品
生產不同產品族的全部產品,不能新增產品,可以新增產品族

十、Spring/Spring MVC
90.爲什麼要使用 spring?
A。方便解耦簡化開發
B。聲明式事務支持
C。便於集成各種優秀框架
D。方便測試
91.解釋一下什麼是 aop?
通過預編譯和運行期動態代理實現統一功能維護,將事務,日誌,安全等一些業務邏輯相對獨立的功能抽取出來,通過spring配置將功能插入,提高複用性。

92.解釋一下什麼是 ioc?
控制反轉,將對象的創建,初始化,銷燬交給spring容器去管理。

93.spring 有哪些主要模塊?
7個模塊,1.spring web ,2.spring web mvc ,3.spring core ,4.spring context .5.spring
DAO 6.spring ORM 7.spring AOP
94.spring 常用的注入方式有哪些?
setter,構造方法,註解
95.spring 中的 bean 是線程安全的嗎?
不是線程安全的
96.spring 支持幾種 bean 的作用域?
singleton:單例模式, prototype:原型模式 ,request ,session,global-session
97.spring 自動裝配 bean 有哪些方式?
no:默認方式,手動裝配方式,需要通過ref設定bean的依賴關係
byName:根據bean的名字進行裝配,當一個bean的名稱和其他bean的屬性一致,則自動裝配
byType:根據bean的類型進行裝配,當一個bean的屬性類型與其他bean的屬性的數據類型一致,則自動裝配
constructor:根據構造器進行裝配,與 byType 類似,如果bean的構造器有與其他bean類型相同的屬性,則進行自動裝配
autodetect:如果有默認構造器,則以constructor方式進行裝配,否則以byType方式進行裝配

98.spring 事務實現方式有哪些?
1.基於註解, 2.事務代理工廠 3.AOP 方式
99.說一下 spring 的事務隔離?
A.髒讀,事務A讀取了事務B未提交的數據
B.幻讀,事務A讀取了,事務B插入的數據,導致數據不一致
C.不可重複讀,一個事務中兩次讀取的內容不一致
髒讀 :一個事務讀到了另一個事務的未提交的數據
不可重複讀 :一個事務讀到了另一個事務已經提交的 update 的數據導致多次查詢結果不一致.
虛幻讀 :一個事務讀到了另一個事務已經提交的 insert 的數據導致多次查詢結果不一致.
事務的ACID
A.原子性,事務操作要麼成功,要麼失敗
B.一致性,一個事務,數據前後完整性一致
C.隔離性,多個事務,各個事務之間是相互隔離的,不能被其他事務干擾
D.持久性,事務一旦提交對數據的改變將是永久的
100.說一下 spring mvc 運行流程?
這個大家百度找圖吧。。
101.spring mvc 有哪些組件?
略過了。
102.@RequestMapping 的作用是什麼?
用來處理地址請求映射的
103.@Autowired 的作用是什麼?
用來裝配Bean的

十一、Spring Boot/Spring Cloud
1.如何使用Spring Boot實現異常處理?
Spring提供了一種非常有用的方法,可以使用ControllerAdvice處理異常。我們將實現一個ControlerAdvice類,它將處理控制器類拋出的所有異常。
104.什麼是 spring boot?
是spring的一站式解決方案,降低了對spring的配置的要求

105.爲什麼要用 spring boot?
A.簡化開發
B.沒有了XML配置
C.內置了Tomcat
D.能夠獨立運行
E。簡化監控

106.spring boot 核心配置文件是什麼?
application 和bootstrap
107.spring boot 配置文件有哪幾種類型?它們有什麼區別?
YML 和 Properties 書寫格式不同
108.spring boot 有哪些方式可以實現熱部署?
Spring Loaded
Spring-boot-devtools
1.運行 Spring Boot 有哪幾種方式?
1)打包用命令或者放到容器中運行
2)用 Maven/ Gradle 插件運行
3)直接執行 main 方法運行
2、開啓 Spring Boot 特性有哪幾種方式?
1)繼承spring-boot-starter-parent項目
2)導入spring-boot-dependencies項目依賴
3。保護 Spring Boot 應用有哪些方法?
在生產中使用HTTPS
使用Snyk檢查你的依賴關係
升級到最新版本
啓用CSRF保護
使用內容安全策略防止XSS攻擊
4.Spring Boot 2.X 有什麼新特性?與 1.X 有什麼區別?
配置變更
JDK 版本升級
第三方類庫升級
響應式 Spring 編程支持
HTTP/2 支持
配置屬性綁定
109.jpa 和 hibernate 有什麼區別?
以簡單的理解爲JPA是標準接口,Hibernate是實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章