反射css
1 什麼是反射?html
反射是在運行狀態中,對於任意一個類,都可以知道這個類的全部屬性和方法;ajax
對於任意一個對象,都可以調用它的任意一個方法和屬性;這種動態獲取的信息正則表達式
以及動態調用對象的方法的功能稱爲 Java 語言的反射機制。算法
2.什麼是 Java 序列化?什麼狀況下須要序列化?spring
Java 序列化是爲了保存各類對象在內存中的狀態,而且能夠把保存的對象狀態數據庫
再讀出來。json
如下狀況須要使用 Java 序列化:後端
想把的內存中的對象狀態保存到一個文件中或者數據庫中時候;跨域
想用套接字在網絡上傳送對象的時候;
想經過 RMI(遠程方法調用)傳輸對象的時候。
3. 動態代理是什麼?有哪些應用?
動態代理是運行時動態生成代理類。
動態代理的應用有 spring aop、hibernate 數據查詢、測試框架的後端 mock、
rpc,
Java 註解對象獲取等。
4.怎麼實現動態代理?
JDK 原生動態代理和 cglib 動態代理。JDK 原生動態代理是基於接口實現的,而
cglib 是基於繼承當前類的子類實現的。
5. 爲何要使用克隆?
克隆的對象可能包含一些已經修改過的屬性,而 new 出來的對象的屬性都仍是
初始化時候的值,因此當須要一個新的對象來保存當前對象的「狀態」就靠克隆
方法了。
對象拷貝
6.如何實現對象克隆?
實現 Cloneable 接口並重寫 Object 類中的 clone() 方法。
實現 Serializable 接口,經過對象的序列化和反序列化實現克隆,能夠實現真正的深度克隆。
7.深拷貝和淺拷貝區別是什麼?
淺克隆:當對象被複制時只複製它自己和其中包含的值類型的成員變量,而引用
類型的成員對象並無複製。
深克隆:除了對象自己被複制外,對象所包含的全部成員變量也將複製。
Java Web
8.JSP 和 servlet 有什麼區別?
JSP 是 servlet 技術的擴展,本質上就是 servlet 的簡易方式。servlet 和 JSP 最
主要的不一樣點在於,servlet 的應用邏輯是在 Java 文件中,而且徹底從表示層中
的 html 裏分離開來,而 JSP 的狀況是 Java 和 html 能夠組合成一個擴展名爲
JSP 的文件。JSP 側重於視圖,servlet 主要用於控制邏輯。
9.JSP 有哪些內置對象?做用分別是什麼?
JSP 有 9 大內置對象:
request:封裝客戶端的請求,其中包含來自 get 或 post 請求的參數;
response:封裝服務器對客戶端的響應;
pageContext:經過該對象能夠獲取其餘對象;
session:封裝用戶會話的對象;
application:封裝服務器運行環境的對象;
out:輸出服務器響應的輸出流對象;
config:Web 應用的配置對象;
page:JSP 頁面自己(至關於 Java 程序中的 this);
exception:封裝頁面拋出異常的對象。
10. 說一下 JSP 的 4 種做用域?
page:表明與一個頁面相關的對象和屬性。
request:表明與客戶端發出的一個請求相關的對象和屬性。一個請求可能跨越多
個頁面,涉及多個 Web 組件;須要在頁面顯示的臨時數據能夠置於此做用域。
session:表明與某個用戶與服務器創建的一次會話相關的對象和屬性。跟某個用
戶相關的數據應該放在用戶本身的 session 中。
application:表明與整個 Web 應用程序相關的對象和屬性,它實質上是跨越整
個 Web 應用程序,包括多個頁面、請求和會話的一個全局做用域。
11. session 和 cookie 有什麼區別?
存儲位置不一樣:session 存儲在服務器端;cookie 存儲在瀏覽器端。
安全性不一樣:cookie 安全性通常,在瀏覽器存儲,能夠被僞造和修改。
容量和個數限制:cookie 有容量限制,每一個站點下的 cookie 也有個數限制。存儲的多樣性:session 能夠存儲在 Redis 中、數據庫中、應用程序中;而 cookie
只能存儲在瀏覽器中。
12. 說一下 session 的工做原理?
session 的工做原理是客戶端登陸完成以後,服務器會建立對應的 session,
session 建立完以後,會把 session 的 id 發送給客戶端,客戶端再存儲到瀏覽
器中。這樣客戶端每次訪問服務器時,都會帶着 sessionid,服務器拿到 sessionid
以後,在內存找到與之對應的 session 這樣就能夠正常工做了。
13.若是客戶端禁止 cookie 能實現 session 還能用嗎?
能夠用,session 只是依賴 cookie 存儲 sessionid,若是 cookie 被禁用了,能夠
使用 url 中添加 sessionid 的方式保證 session 能正常使用。
14.spring mvc 和 struts 的區別是什麼?
攔截級別:struts2 是類級別的攔截;spring mvc 是方法級別的攔截。
數據獨立性:spring mvc 的方法之間基本上獨立的,獨享 request 和 response
數據,請求數據經過參數獲取,處理結果經過 ModelMap 交回給框架,方法之
間不共享變量;而 struts2 雖然方法之間也是獨立的,但其全部 action 變量是
共享的,這不會影響程序運行,卻給咱們編碼和讀程序時帶來了必定的麻煩。
攔截機制:struts2 有以本身的 interceptor 機制,spring mvc 用的是獨立的 aop
方式,這樣致使 struts2 的配置文件量比 spring mvc 大。
對 ajax 的支持:spring mvc 集成了 ajax,全部 ajax 使用很方便,只須要一個注
解 @ResponseBody 就能夠實現了;而 struts2 通常須要安裝插件或者本身寫代
碼才行。
15.如何避免 SQL 注入?
使用預處理 PreparedStatement。
使用正則表達式過濾掉字符中的特殊字符。
16 什麼是 XSS 攻擊,如何避免?
XSS 攻擊:即跨站腳本攻擊,它是 Web 程序中常見的漏洞。原理是攻擊者往
Web 頁面裏插入惡意的腳本代碼(css 代碼、Javascript 代碼等),當用戶瀏覽
該頁面時,嵌入其中的腳本代碼會被執行,從而達到惡意攻擊用戶的目的,如盜
取用戶 cookie、破壞頁面結構、重定向到其餘網站等。
預防 XSS 的核心是必須對輸入的數據作過濾處理。
17.什麼是 CSRF 攻擊,如何避免?
CSRF:Cross-Site Request Forgery(中文:跨站請求僞造),能夠理解爲攻擊者盜用了你的身份,以你的名義發送惡意請求,好比:以你名義發送郵件、發消息、
購買商品,虛擬貨幣轉帳等。
防護手段:
驗證請求來源地址;
關鍵操做添加驗證碼;
在請求地址添加 token 並驗證。
異常
18. throw 和 throws 的區別?
throw:是真實拋出一個異常。
throws:是聲明可能會拋出一個異常。
19. final、finally、finalize 有什麼區別?
final:是修飾符,若是修飾類,此類不能被繼承;若是修飾方法和變量,則表示
此方法和此變量不能在被改變,只能使用。
finally:是 try{} catch{} finally{} 最後一部分,表示不論發生任何狀況都會執行,
finally 部分能夠省略,但若是 finally 部分存在,則必定會執行 finally 裏面的代
碼。
finalize: 是 Object 類的一個方法,在垃圾收集器執行的時候會調用被回收對象
的此方法。
20. try-catch-finally 中哪一個部分能夠省略?
try-catch-finally 其中 catch 和 finally 均可以被省略,可是不能同時省略,也就
是說有 try 的時候,必須後面跟一個 catch 或者 finally。
21.try-catch-finally 中,若是 catch 中 return 了,finally 還會執
行嗎?
finally 必定會執行,即便是 catch 中 return 了,catch 中的 return 會等 finally
中的代碼執行完以後,纔會執行。
22.常見的異常類有哪些?
NullPointerException 空指針異常
ClassNotFoundException 指定類不存在
NumberFormatException 字符串轉換爲數字異常
IndexOutOfBoundsException 數組下標越界異常
ClassCastException 數據類型轉換異常
FileNotFoundException 文件未找到異常
NoSuchMethodException 方法不存在異常IOException IO 異常
SocketException Socket 異常
網絡
23.http 響應碼 301 和 302 表明的是什麼?有什麼區別?
301:永久重定向。
302:暫時重定向。
它們的區別是,301 對搜索引擎優化(SEO)更加有利;302 有被提示爲網絡攔
截的風險。
24.forward 和 redirect 的區別?
forward 是轉發 和 redirect 是重定向:
地址欄 url 顯示:foward url 不會發生改變,redirect url 會發生改變;
數據共享:forward 能夠共享 request 裏的數據,redirect 不能共享;
效率:forward 比 redirect 效率高。
25. 簡述 tcp 和 udp 的區別?
tcp 和 udp 是 OSI 模型中的運輸層中的協議。
tcp 提供可靠的通訊傳輸,而 udp
則常被用於讓廣播和細節控制交給應用的通訊傳輸。
二者的區別大體以下:
tcp 面向鏈接,udp 面向非鏈接即發送數據前不須要創建連接;
tcp 提供可靠的服務(數據傳輸),udp 沒法保證;
tcp 面向字節流,udp 面向報文;
tcp 數據傳輸慢,udp 數據傳輸快;
26. tcp 爲何要三次握手,兩次不行嗎?爲何?
若是採用兩次握手,那麼只要服務器發出確認數據包就會創建鏈接,但因爲客戶
端此時並未響應服務器端的請求,那此時服務器端就會一直在等待客戶端,這樣
服務器端就白白浪費了必定的資源。若採用三次握手,服務器端沒有收到來自客
戶端的再此確認,則就會知道客戶端並無要求創建請求,就不會浪費服務器的
資源。
27.說一下 tcp 粘包是怎麼產生的?
tcp 粘包可能發生在發送端或者接收端,分別來看兩端各類產生粘包的緣由:
發送端粘包:發送端須要等緩衝區滿才發送出去,形成粘包;
接收方粘包:接收方不及時接收緩衝區的包,形成多個包接收。28. OSI 的七層模型都有哪些?
物理層:利用傳輸介質爲數據鏈路層提供物理鏈接,實現比特流的透明傳輸。
數據鏈路層:負責創建和管理節點間的鏈路。
網絡層:經過路由選擇算法,爲報文或分組經過通訊子網選擇最適當的路徑。
傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
會話層:向兩個實體的表示層提供創建和使用鏈接的方法。
表示層:處理用戶信息的表示問題,如編碼、數據格式轉換和加密解密等。
應用層:直接向用戶提供服務,完成用戶但願在網絡上完成的各類工做。
29. get 和 post 請求有哪些區別?
get 請求會被瀏覽器主動緩存,而 post 不會。
get 傳遞參數有大小限制,而 post 沒有。
post 參數傳輸更安全,get 的參數會明文限制在 url 上,post 不會。
30. 如何實現跨域?
實現跨域有如下幾種方案:
服務器端運行跨域 設置 CORS 等於 *;
在單個接口使用註解 @CrossOrigin 運行跨域;
使用 jsonp 跨域;
31. 說一下 JSONP 實現原理?
jsonp:JSON with Padding,它是利用 script 標籤的 src 鏈接能夠訪問不一樣源的特
性,加載遠程返回的「JS 函數」來執行的。