1.面向對象的特徵:
封裝,繼承,多肽
2.final, finally, finalize 的區別
final關鍵字能夠用來修飾 變量,方法,類 不可修改的
finally 與try catch 一塊兒使用,表示必定會被執行的,一般會作一些釋放資源的動做。固然這個必定會被執行是針對虛擬機還在運行的狀態下而言的,若是存在 System.exit(0)那就 GG了
finalize 是Object中的方法,該方法是在gc啓動後,對象被回收的時候調用的。
3.int 和 Integer 有什麼區別
int是基本上數據類型,默認值是0,Integer是int類型的包裝類,默認值是null
Integer和int作比較是會自動拆箱 Integer i = 128 和 int i1= 128 i=i1 true
Integer和Integer作比較時,在-128 和 127 之間 Integer會對數字進行緩存,第二次再次賦值的時候實際上是拿的緩存的值(不是new)
涉及到new的不會相等,比較的時候不會涉及到拆箱過程java
4.重載和重寫的區別
overloading & overwrite
重載是在一個類中包含多個方法名稱相同參數個數或者類型不一樣的方法
重寫發生在子父類或者子類與接口中,方法名稱,參數列表,返回值類型都相同
關於重寫:子類不能重寫父類中的final修飾的方法;子類不是抽象類,則必須實現父類中的abstract方法mysql
5.抽象類和接口有什麼區別
抽象類是用來捕捉子類通用特性的,不能被實例化,只能被用做超類
接口是抽象方法的集合,若是一個類實現某個接口,則它就繼承了這個接口的全部抽象方法,必須所有實現。
區別:
1.抽象類能夠有默認的方法實現,接口不能夠
2.子類需使用extends關鍵字來繼承抽象類,若是子類非抽象類,則須要重寫抽象類中的全部方法, 接口的實現須要使用 implements 方法必須所有實現
3.抽象類能夠有構造器,接口不能有
4.抽象類中方法的修飾符能夠是public protected default 接口中默認是public 且沒法使用其餘修飾符sql
6.說說反射的用途及實現
java的反射機制是指在運行狀態下,對於任何一個類,均可以根據它的字節碼信息獲取該類的全部屬性,方法,對於任何一個對象,均可以調用他的任何一個方法,這種動態獲取信息,動態調用方法的功能稱之爲反射機制
用途:JDBC數據庫驅動的加載,根據Class構造對象數據庫
7.HTTP 請求的 GET 與 POST 方式的區別後端
1.get請求通常是從服務器獲取數據,post是向服務器提供數據
2.get請求帶參數須要將參數拼接到URL上 post會將參數封裝在head中
3.get請求傳輸的數據量受不一樣瀏覽器影響,通常爲2kb post請求傳遞參數不受限制
4.get請求安全性較低,post請求安全性較高
5.get請求瀏覽器會緩存數據,回退不會再次請求服務器, post請求的參數不會被緩存數組
http:基於TCP/IP的數據在萬維網中如何通訊的協議
Get和Post請求的底層也是TCP/IP 也就是說都是TCP鏈接,底層並沒有差異,應爲Http規則和瀏覽器的限制,致使出現了一些不一樣點瀏覽器
8.session 與 cookie 區別緩存
1.cookie數據存放在客戶的瀏覽器上,session數據存放在服務器上
2.cookie不安全,數據存放在用戶本地,存在被竊取進行cookie欺騙的風險
3.session會在必定時間內保存在服務器上,當訪問量增多時,會增長服務器的性能消耗
4.單個cookie保存的數據不能超過4k,不少瀏覽器都限制一個站點最多保存20個cookie安全
9.JDBC 流程服務器
1.加載數據庫鏈接驅動
Class.forName("com.mysql.jdbc.Driver");
2.獲取數據庫鏈接
Connection conn = DriverManager.getConnection(url, user, password);
3.根據SQL獲取sql會話對象,有2種方式 Statement、PreparedStatement
conn.prepareStatement()
4.執行SQL處理結果集,執行SQL前若是有參數值就設置參數值setXXX()
5.關閉結果集,關閉會話,關閉鏈接
10.MVC 設計思想
MVC(Model View Controller) 是一種分層架構模式,包含三個核心部件:
Model: 模型 全部的用戶數據、狀態以及程序邏輯,獨立於視圖和控制器
View: 視圖 呈現模型,視圖會從模型中拿到須要展示的狀態以及數據,對於相同的數據能夠有多種不一樣的顯示形式
Controller:控制器 負責獲取用戶的輸入信息,進行解析並反饋給模型
優勢:程序經過M和V的代碼分離,實現了先後端代碼分離,使項目開發的分工更加明確,各層之間的耦合性下降了,模型實現複用,可維護性高
11.equals 與 == 的區別
equals是Object類的方法,用於比較兩個對象是否相等,咱們通常判斷POJO對象是否相等,注重的是對象的各個屬性是否相同,這就須要重寫equals方法,而 == 是java中的比較運算符,判斷兩個對象是不是同一個對象,比較的是地址值
集合
12.List 和 Set 區別
List和Set繼承自接口Collection接口,
list中能夠容許重複對象 set不能夠
list中能夠插入多個null
list是一個有序容器,保持了每一個元素的插入順序,輸出順序就是插入順序
list的經常使用實現類有ArrayList LinkedList Vector
ArrayList 底層是數組結構,提供了使用索引隨機訪問的而方法,隨機查詢速度效率很高,可是若是包含大量新增元素或刪除元素的場景,則效率不如LinkedList,涉及到數組的copy和複製
LinkedList底層是鏈表結構,每一個元素會維護一個pre 和 next,個元素之間是手拉手的結構。
Set接口則不能有重複數據
無序,這裏的無序指的是不會按照存入的順序 輸出
Set接口比較經常使用的幾個實現類以下
HashSet,LinkedHashSet,TreeSet
HashSet的底層是HashMap 只是Map的value被設置成固定的數據
一樣LinkedHashSet的底層也是LinkedHashMap,TreeSet的底層是TreeMap
13.List 和 Map 區別
List是單列集合,存儲的數據有序且可重複,
Map是雙列集合存值是Key-Value,存儲的數據無序,key不可重複
Map經常使用的實現類有 HashMap TreeMap HashTable LinkedHashMap
HashMap 是最經常使用的Map,他根據鍵的hashcode值存儲數據,根據鍵能夠直接獲取它的值,具備很快的訪問速度。HashMap最多隻能容許一條記錄的鍵爲null,容許多條記錄的值爲null,是線程不一樣步的。
TreeMap 可以把它保存的記錄根據鍵排序,默認是按照升序排序,也能夠指定排序的比較器,當用Iterator遍歷TreeMap的時候,獲得的記錄是排過序的,TreeMap不容許key的值爲null,線程不一樣步。
HashTable 與HashMap相似,不一樣的是Key 和 Value的值均不容許爲null,它是線程同步的,所以HashTable的效率要低於HashMap
LinkedHashMap 保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先獲得的記錄確定是先插入的,在遍歷的時候會比HashMap慢,key和Value能夠爲null,線程不一樣步
14.Arraylist 與 LinkedList 區別
ArrayList是實現了基於動態數組的數據結構,LinkedList是基於鏈表的數據結構,LinkedList是雙向鏈表,有next也有previous
對於隨機訪問元素,不管是get和set,ArrayList的性能都會理論上優於LinkedList,由於LinkedList須要移動指針
對於新增和刪除操做 add和remove LinkedList的性能理論比較佔優點,
15.ArrayList 與 Vector 區別
1.Vector是線程安全的,ArrayList是線程不安全的,Vector對集合的元素操做都添加了synchronized,保證了線程安全
2.Vector和ArrayList本質上都是Object[] 數組,ArrayList提供了size方法,Vector提供了elementCount屬性,他們做用是記錄集合元素內有效元素的個數
3.Vector和ArrayList的擴容不同,Vector默認擴容是增加一倍,ArrayList是增加自身的50%
4.因爲底層都是數組結構,所以大量的add或者remove都會致使內部數組的數據copy操做,效率會受到影響
16.HashMap 和 Hashtable 的區別
HashMap和HashTable都實現了Map接口,用於存儲雙列數據的集合,二者區別主要有如下幾點:線程安全性,同步,效率
1.HashMap幾乎能夠等價於HashTable,除了HashMap是非同步的,並能夠接收null的鍵和值。
2.HashMap是非synchronized,而HashTable是synchronized,這意味着HashTable是線程安全的,多個線程能夠共享一個HashTable,而若是沒有正確的同步的話,多線程環境下是不能共享HashMap的,Java1.5版本提供了ConcurrentHashMap,它能夠更好的替代HashTable。
3.HashMap和HashTable的底層都是數組+鏈表的結構,HashTable實現線程安全的方式是,在修改數據時鎖住整個HashTable,所以效率低,ConcurentHashMap底層是分段數組+鏈表,線程安全。經過把Map的整個數組分紅N個Segment(片斷),讀數據不加鎖,ConcurrentHashMap容許多個線程修改操做併發進行,關鍵在於使用了鎖分離,不一樣片斷的數據存在不一樣的鎖。
17.HashSet 和 HashMap 區別
HashSet是Set接口的實現類,是單列集合,存儲的元素不可重複,能夠存儲null,無序
HashMap是Map接口的實現類,是雙列集合,存儲的鍵值不可重複,如鍵已存在則值會被覆蓋。一樣無序,能夠存儲null鍵和null值
HashSet的底層是HashMap,只是將數據存儲在HashMap的鍵上,HashMap的value存的是默認的數據,HashMap的底層結構是 數組+鏈表結構 鍵的存儲位置根據鍵的hashcode值存在數組上,值存儲於該鍵對應的鏈表上
18.HashMap 和 ConcurrentHashMap 的區別
HashMap是java.util下的類,ConcurrentHashMap 是java.util.concurrent包下的類
HashMap底層是數組+鏈表的數據結構,ConcurrentHashMap底層一樣是數組+鏈表可是與HashMap不一樣的是,ConcurrentHashMap最外層不是一個大的數組,而是一個個segment數組,每一個片斷包含一個與HashMap數據結構類似,在修改ConcurrentHashMap時,會先鎖住key值所在的segment,所以ConcurrentHashMap是線程安全的。ConcurrentHashMap與HashTable的不一樣就在於HashTable在修改元素時是鎖住整個數組,而ConcurrentHashMap是採用分段鎖。
19.HashMap 的工做原理及代碼實現 HashMap是由數組+鏈表組成的,數組是HashMap的主體,鏈表則是主要是爲了解決哈希衝突而存在的,根據存儲元素的key的hashcode值計算出在數組上的存儲位置,即獲取數組的索引,該位置不存在Entry事會將數據存儲於此,若是Entry存在,會檢查是否該索引位置是否包含鏈表,若是包含則會遍歷鏈表key值存在則覆蓋,不存在新增。