一、面向對象的特徵?java
面向對象的三個基本特徵是:封裝、繼承、多態。web
二、抽象類和接口有什麼區別?spring
1)語法層面的區別:數據庫
2)設計層面的區別:編程
三、說說反射的用途及實現?設計模式
四、說說自定義註解的場景及實現數組
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
@interface MyAnno{
public String name() default "zhangsan";
public String email() default "hello@example.com";
}
複製代碼
class User{
@MyAnno(name = "zhang")
private String name;
@MyAnno(name = "zhang@example.com")
private String email;
@MyAnno(name = "sayHelloWorld")
public String sayHello(){
return "";
}
}
複製代碼
五、HTTP 請求的 GET 與 POST 方式的區別?瀏覽器
mp.weixin.qq.com/s?__biz=MzI…安全
六、session 與 cookie 區別?bash
COOKIE: 在網站中,http請求是無狀態的。也就是說即便第一次和服務器鏈接後而且登陸成功後,第二次請求服務器依然不能知道當前請求是哪一個用戶。cookie的出現就是爲了解決這個問題,第一次登陸後服務器返回一些數據(cookie)給瀏覽器,而後瀏覽器保存在本地,當該用戶發送第二次請求的時候,就會自動的把上次請求存儲的cookie數據自動的攜帶給服務器,服務器經過瀏覽器攜帶的數據就能判斷當前用戶是哪一個了。cookie存儲的數據量有限,不一樣的瀏覽器有不一樣的存儲大小,但通常不超過4KB。所以使用cookie只能存儲一些小量的數據。
SESSION: session和cookie的做用有點相似,都是爲了存儲用戶相關的信息。不一樣的是,cookie是存儲在本地瀏覽器,而session存儲在服務器。存儲在服務器的數據會更加的安全,不容易被竊取。但存儲在服務器也有必定的弊端,就是會佔用服務器的資源,但如今服務器已經發展至今,一些session信息仍是綽綽有餘的。
COOKIE和SESSION結合使用: 存儲在服務端:經過cookie存儲一個session_id,而後具體的數據則是保存在session中。若是用戶已經登陸,則服務器會在cookie中保存一個session_id,下次再次請求的時候,會把該session_id攜帶上來,服務器根據session_id在session庫中獲取用戶的session數據。就能知道該用戶究竟是誰,以及以前保存的一些狀態信息。
7. http與https的區別?
主要區別:
1)http是無狀態的超文本傳輸協議,是明文傳輸的;而https至關因而http協議+ssl/tls協議。他是經過證書認證的安全加密密文傳輸協議。
2)兩種協議的的鏈接方式是徹底不一樣的,端口號也不一樣;http端口號是80;https是443.
客戶端使用https方式與web服務器通訊時的步驟:
1)客戶端使用https的url訪問web服務器;要求與web服務器之間創建ssl通道。
2)web服務器收到請求後,會向客戶端發送一份網站證書(攜帶加密公鑰)。
3)客戶端與web服務器協商ssl/tls加密等級。
4)客戶端根據協商的加密等級,創建會話祕鑰,而後經過網站的公鑰對 密鑰進行加密,並傳輸給web服務器。
5)web服務器根據手中的私鑰解析出會話密鑰。
6)web服務器利用密鑰和客戶端通訊。
八、單例模式?
// 懶漢模式
public class Singleton{
private Singleton () {}
// 注意:須要關鍵字volatile修飾
private volatile static Singleton singleton;
// 注意:使用雙重檢驗鎖驗證
public static Singleton getInstance(){
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
複製代碼
// 餓漢模式
public class Singleton{
private Singleton (){}
private static Singleton singleton = new Singleton();
public static Singleton getInstance(){
return singleton;
}
}
複製代碼
// 兼顧懶漢和餓漢模式(使用內部類的形式,線程安全,還實現了懶加載)
public class Singleton(){
private Singleton () {}
private static class SingletonHolder{
private static final Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingleHolder.instance;
}
}
複製代碼
九、volatile 修飾符的有過什麼實踐?
實踐一: volatile 修飾 64位的long 和 double 變量,使其能原子性的進行讀寫操做。由於這兩種類型的操做是分爲2部分的,第一次讀取一個32位的,而後再讀取剩下的32位的,這個過程並非原子性的。加上volatile關鍵字能夠實現原子性操做(加鎖)。
實踐二:volatile修飾符經過設置內存屏障,實現變量的可見性。
十、快速排序
public class SuperClass {
public static void main(String[] args) {
int [] arr = {11, 4, 30, 2, -1, 9, 6, 7, 99, 77};
SuperClass superClass = new SuperClass();
superClass.sort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
/**
* 遞歸排序
* @param arry
*/
public void sort(int [] arry, int low, int high){
int pos = 0;
if (low < high){
pos = findPos(arry, low, high);
this.sort(arry, low, pos - 1);
this.sort(arry, pos + 1, high);
}
}
/**
* 尋找臨界點
* @param arr
* @param low
* @param high
* @return
*/
public int findPos(int [] arr, int low, int high){
int val = arr[low];
while (low < high){
while (low < high && val <= arr[high]){
high--;
}
arr[low] = arr[high];
while (low < high && val >= arr[low]){
low++;
}
arr[high] = arr[low];
}
// 找到第一個值,將第一個值做爲臨界點,將數組一分爲二
arr[low] = val;
return low;
}
}
複製代碼
十一、說一下本身對 IOC 、AOP 的理解?
事務管理、日誌的統一處理、權限的校驗、異常的處理都是能夠經過aop來進行統一處理。
複製代碼
十二、Spring 中用到了那些設計模式,講一下本身對於這些設計模式的理解?
1三、Spring Bean 的做用域和生命週期瞭解嗎?
5種做用域:singleton、prototype、request、session、application做用域。
生命週期:
-> 定義
-> 初始化(實現接口或配置init-method)
-> 使用
-> 銷燬(實現接口或配置destory-method)
1四、事務的特性?
事務:是指邏輯上的一組操做,這組操做不能被分割,要麼成功,要麼失敗。 四大特性:
1五、Spring 事務中的隔離級別?
如不考慮事務的隔離級別,則會引發髒讀、幻讀、不可重複讀。
1六、Spring 事務中的事務傳播行爲?
事務的傳播行爲:業務層方法之間的相互調用,事務的傳遞狀況。