4、反射php
57.什麼是反射?java
反射機制指的是程序運行狀態中,對於任意一個類,都可以知道這個類的屬性和方法web
58.什麼是 java 序列化?什麼狀況下須要序列化?正則表達式
序列化是把java對象字節序列,能夠對對象進行讀寫操做;序列化做用:對象能夠做爲文件永久保存硬盤上;對象能夠在網絡上傳輸算法
59.動態代理是什麼?有哪些應用?spring
動態代理是給實現了某個接口的類的方法,加一些額外的處理;spring的AOP,加事務,加權限,加日誌。sql
60.怎麼實現動態代理?數據庫
一、原生JDK,必須藉助接口才能產生代理對象;二、CGLIB動態代理,不須要接口apache
5、對象拷貝json
61.爲何要使用克隆?
想對一個對象進行處理,又想保留原有的數據進行接下來的操做
62.如何實現對象克隆?
兩種方式:一、實現Cloneable接口並重寫object類中的clone()方法;二、實現Serializable接口,經過對象的序列化和反序列化實現克隆,能夠實現真正的深度克隆。
63.深拷貝和淺拷貝區別是什麼?
淺拷貝只是複製了對象的引用地址,兩個對象指向同一內存地址,因此其中一個改變值,另外一個也相應改變;
深拷貝是將對象及值複製過來,修改其中一個,另外一個值不會變。
6、Java Web
64.jsp 和 servlet 有什麼區別?
一、jsp編譯後變成servlet;二、jsp更擅長於頁面顯示,servlet更擅長於邏輯控制;三、servlet沒有內置對象,jsp內置對象都是經過HttpServletRequest和HttpServletResponse以及HttpServlet對象
65.jsp 有哪些內置對象?做用分別是什麼?
request:表示HttpServletRequest對象,能夠獲取瀏覽器請求的數據
response:表示HttpServletResponse對象,能夠設置瀏覽器響應數據
out:對象是javax.jsp.JspWriter的一個實例,用於向瀏覽器回送輸出數據
pageContext:表示一個javax.servlet.jsp.PageContext對象。該對象提供了對JSP頁面內全部的對象及名字空間(就是四大做用域空間,如page空間、request空間、session空間、application空間)的訪問,也就是說他能夠訪問到當前請求對應session中保存的信息,也能夠取當前應用所在的application的某一屬性值,它至關於頁面中全部功能的集大成者,包裝了通用的servlet相關功能的方法。
session:表示一個請求的javax.servlet.http.HttpSession對象。Session能夠存貯用戶的狀態信息
applicaton:表示一個javax.servle.ServletContext對象。相似於系統的全局變量,用於實現Web應用中的資源共享。
config:表示一個javax.servlet.ServletConfig對象。用於存放JSP編譯後的初始數據。
page:表示從該頁面產生的一個servlet實例,JSP網頁自己
exception:針對錯誤網頁,未捕捉的例外。表示JSP頁面運行時產生的異常和錯誤信息,該對象只有在錯誤頁面(page指令中設定isErrorPage爲true的頁面)中才可以使用。
66.說一下 jsp 的 4 種做用域?
page:僅可被當前響應jsp頁面訪問、request:同一個請求全部的servlet和jsp頁面訪問、session:同一個會話全部的servlet和jsp頁面訪問、application:同一個web應用全部的servlet和jsp頁面訪問;
67.session 和 cookie 有什麼區別?
session機制是一種服務器端的機制,使用相似於散列表的結構保存信息;
cookie數據存放在客戶的瀏覽器上,不安全,別人能夠分析存放在本地的cookie並進行cookie欺騙,單個cookie數據不能超過4K
68.說一下 session 的工做原理?
session內容是保存在服務器端,一般是保存在內存中,也能夠保存在文件或數據庫,客戶端跟服務端經過sessionId關聯,sessionId一般以Cookie的形式存儲在客戶端。每次HTTP請求,sessionId會隨着Cookie傳遞到服務器端,服務器就能夠經過sessionId取得對應信息
69.若是客戶端禁止 cookie 能實現 session 還能用嗎?
還能用,一般sessionId均由Cookie負責保存,HTTP交互除了cookie能夠攜帶信息,URL也能夠,或者表單隱藏字段
70.spring mvc 和 struts 的區別是什麼?
一、攔截機制不一樣。
struts2是類級別的攔截,每次請求就會建立一個Action,和spring整合時struts2的ActionBean注入做用域是原型模式prototype,經過setter,getter把request數據注入到屬性。springMVC是方法級別的攔截,一個方法對應一個request上下文,因此方法基本上獨立、獨享request和response,默認是單例模型,因此線程安全
二、底層框架不同
struts2採用Filter(StrutsPrepareAndExecuteFilter)實現,SpringMVC採用servlet(DispatcherServlet)實現。Filter在容器啓動以後即初始化;服務中止之後銷燬,晚於Servlet。Servlet在是在調用時初始化,先於Filter調用,服務中止後銷燬。
三、性能方面
struts2是類級別攔截,每次請求對應生成一個新的實例action,須要全部屬性值注入。而SpringMVC實現了零配置,SpringMVC是基於方法的攔截,有加載一次單例模式bean注入,因此SpringMVC比struct2性能更佳
四、配置方面
SpringMVC與spring是無縫的,項目的管理和安全性上也比struct2高
71.如何避免 sql 注入?
一、使用prepareStatement代替statement,二、使用正則表達式過濾傳入的參數
72.什麼是 XSS 攻擊,如何避免?
XSS誇站腳本攻擊,其惡意腳本都是來自於用戶的輸入,因此能夠對用戶的輸入進行過濾。
一、獲取用戶文本,使用innerText不使用innerHTML。二、對特殊符號& < > " ' / 等符號進行轉義成 & < > " ' /;
73.什麼是 CSRF 攻擊,如何避免?
CsRF誇站請求僞造,攻擊者經過僞造用戶瀏覽器的請求,向訪問一個用戶曾經認證訪問過的網站發送僞造請求,是目標網站誤認爲是用戶的真實操做而執行命令。
如何防範:
一、驗證HTTP Referer字段,HTTP頭中的Referer字段記錄了該 HTTP 請求的來源地址。二、請求地址中添加token並驗證。三、HTTP頭自定義屬性並驗證
7、異常
74.throw 和 throws 的區別?
throw是拋出一個具體的異常類型;throws是聲明方法可能拋出全部異常信息,是將異常往上傳
75.final、finally、finalize 有什麼區別?
final用來修飾類、方法或變量;finally做爲異常處理的一部分,只能用在try/catch語句中;finalize是Object類的一個方法,也就是每一個類都有這個方法,對象被回收時調用該方法
76.try-catch-finally 中哪一個部分能夠省略?
finally部分能夠省略
77.try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
必定執行
78.常見的異常類有哪些?
NullPointerException、IOException、ClassNotFoundeException、ArrayIndexOutOfBoundsException、FileNotFoundeException、NoSuchMethodException
8、網絡
79.http 響應碼 301 和 302 表明的是什麼?有什麼區別?
301表明永久性轉移;302表明暫時性轉移;區別:
一、301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換爲重定向以後的網址;
二、302表示舊地址A的資源還在(仍然能夠訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。
80.forward 和 redirect 的區別?
forward直接轉發方式(服務器內部重定向):客戶端和瀏覽器只發一次請求;redirect間接轉發,服務器收到請求後發送一個狀態頭給瀏覽器,瀏覽器將再次請求一次
81.簡述 tcp 和 udp的區別?
一、TCP面向鏈接;UDP是無鏈接;二、TCP提供可靠服務,無差錯,不丟失,不重複,且按序到達(TCP經過校驗和、重傳控制、序號標識、滑動窗口、確認應答實現可靠傳輸);UDP盡最大努力交付,即不保證可靠交付;三、UDP具備較好的實時性,工做效率比TCP高,適用於對高速傳輸和實時性有較高的通信或廣播通信;四、每一條TCP鏈接只能是點到點的,UDP支持一對一,一對多,多對一和多對多的交互通信;五、TCP對系統資源要求較多,UDP對系統資源要求較少。
82.tcp 爲何要三次握手,兩次不行嗎?爲何?
爲了防止已失效的鏈接請求報文段忽然又傳送到服務端,於是產生錯誤。
發生錯誤狀況:client發出的第一個鏈接請求報文段並無丟失,而是在某個網絡結點長時間的滯留了,以至延誤到鏈接釋放之後的某個時間纔到達server。原本這是一個早已失效的報文段。但server收到此失效的鏈接請求報文段後,就誤認爲是client再次發出的一個新的鏈接請求。因而就向client發出確認報文段,贊成創建鏈接。假設不採用「三次握手」,那麼只要server發出確認,新的鏈接就創建了。因爲如今client並無發出創建鏈接的請求,所以不會理睬server的確認,也不會向server發送ack包。但server卻覺得新的運輸鏈接已經創建,並一直等待client發來數據。這樣,server的不少資源就白白浪費掉了。採用「三次握手」的辦法能夠防止上述現象發生。例如剛纔那種狀況,client不會向server的確認發出確認。server因爲收不到確認,就知道client並無要求創建鏈接。
83.說一下 tcp 粘包是怎麼產生的?
tcp粘包是指若干包數據粘成一包;一、發送發緣由,TCP默認使用Nagle算法,Nagle算法主要作兩件事:1)只有上一個分組獲得確認,纔會發送下一個分組;2)收集多個小分組,在一個確認到來時一塊兒發送。因此Nagle算法有可能形成粘包現象。二、接收方緣由,TCP接收到分組時,並不會馬上送至應用層處理,或者說,應用層並不必定會當即處理;實際上,TCP將收到的分組保存至接收緩存裏,而後應用程序主動從緩存裏讀收到的分組。這樣一來,若是TCP接收分組的速度大於應用程序讀分組的速度,多個包就會被存至緩存,應用程序讀時,就會讀到多個首尾相接粘到一塊兒的包。
如何解決粘包現象?一、解決發送方粘包,1)發送產生是由於Nagle算法合併小數據包,咱們能夠經過關閉Nagle算法來解決,使用TCP_NODELAY選項來關閉Nagle算法。2)TCP提供了強制數據當即傳送的操做指令push,當填入數據後調用操做指令就能夠當即將數據發送,而沒必要等待發送緩衝區填充自動發送;3)數據包中加頭,頭部信息爲整個數據的長度(最普遍最經常使用);二、解決接收方粘包。1)解析數據包頭部信息,根據長度來接收;2)自定義數據格式:在數據中放入開始、結束標識;解析時根據格式抓取數據,缺點是數據內不能含有開始或結束標識;3)短鏈接傳輸,創建一次鏈接只傳輸一次數據就關閉;(不推薦)
84.OSI 的七層模型都有哪些?
應用層(HTTP、FTP)、表示層(數據的表示、安全、壓縮)、會話層(本地主機與遠程主機進行的會話)、傳輸層(TCP、UDP)、網絡層(邏輯地址尋址,ICMP IP)、數據鏈路層(硬件地址尋址,MAC地址訪問介質)、物理層(創建、維護、斷開物理鏈接)
85.get 和 post 請求有哪些區別?
一、get請求的參數是放在URL裏,post請求參數是放在請求body裏;二、get請求URL傳參有長度限制,而post請求沒有長度限制;三、get請求的參數只能是ASCII碼,因此中文須要URL編碼,而post請求沒有這個限制
86.如何實現跨域?
跨域,指的是瀏覽器不能執行其餘網站的腳本。它是由瀏覽器的同源策略形成的,是瀏覽器施加的安全限制。
一、JSONP:利用<script>標籤沒有跨域限制的「漏洞」,達到與第三方通信目的。當須要通信時,本地腳本動態建立一個<script>元素,地址指向第三方API網址,形如:
全部,經過Chrome查看全部JSONP發送的Get請求都是js類型,而非XHR。
要注意JSONP只支持GET請求,不支持POST請求。
二、apache設置反向代理(設置url映射解決跨域):
三、PHP端修改header(XHR2方式)
在php接口腳本中加入如下兩句便可:
header('Access-Control-Allow-Origin:*');//容許全部來源訪問
header('Access-Control-Allow-Method:POST,GET');//容許訪問的方式
4.cors
Cross-Origin Resource Sharing(CORS)跨域資源共享是一份瀏覽器技術的規範,提供了 Web 服務從不一樣域傳來沙盒腳本的方法,以避開瀏覽器的同源策略,確保安全的跨域數據傳輸。現代瀏覽器使用CORS在API容器如XMLHttpRequest來減小HTTP請求的風險來源。與 JSONP 不一樣,CORS 除了 GET 要求方法之外也支持其餘的 HTTP 要求。服務器通常須要增長以下響應頭的一種或幾種:
Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: X-PINGOTHER, Content-Type Access-Control-Max-Age: 86400
跨域請求默認不會攜帶Cookie信息,若是須要攜帶,請配置下述參數:
"Access-Control-Allow-Credentials": true // Ajax設置 "withCredentials": true
87.說一下 JSONP 實現原理?
jsonp主要是爲了解決跨域訪問問題,其返回的數據格式通常就是一個js腳本,腳本特色以下:
一、返回js腳本一般是服務端動態生成。二、整個腳本一般有且僅有一條語句,且是一個函數調用。三、腳本中調用到的函數,是頁面上存在的一個函數,其函數名經過get參數傳遞給服務端,服務端再將其回寫到js腳本中。四、函數的參數,是服務端處理後的結果數據,以json格式直接寫在腳本中。這也是jsonp得名的由來。
9、設計模式
88.說一下你熟悉的設計模式?
簡單工廠模式、工廠方法模式、抽象工廠模式、單例模式、原型模式、適配器模式、代理模式、迭代模式
89.簡單工廠和抽象工廠有什麼區別?
簡單工廠,類的建立依賴工廠類,添加新的功能時須要修改工廠類;
抽象工廠是提供建立一系列服務的對象的接口,