1.JDK 和 JRE 有什麼區別?html
答:JRE是java運行時環境,包含了java虛擬機,java基礎類庫。是使用java語言編寫的程序運行所須要的軟件環境,是提供給想運行java程序的用戶使用的。java
2.== 和 equals 的區別是什麼?程序員
答:==是比較兩個對象的地址,equals是比較連個對象的內容web
3.兩個對象的 hashCode()相同,則 equals()也必定爲 true,對嗎?算法
答:不對!hashCode()相同,不表明連個對象就相同。hashCode值是從hash表中得來的,hash是一個函數,該函數的實現是一種算法,經過hash算法算出hash值,hash表就是 hash值組成的,一共有8個位置。spring
相反,equals()相同,hashCode()必定相同。這個是正確的!數據庫
4.final 在 java 中有什麼做用?編程
答:final的做用隨着所修飾的類型而不一樣:json
5.java 中的 Math.round(-1.5) 等於多少?設計模式
答:-1
計算方法:
總結:大於五所有加,等於五正數加, 小於五全不加
6.String 屬於基礎的數據類型嗎?
答:不是。String是一個對象,是java等編程語言的字符串。
7.java 中操做字符串都有哪些類?它們之間有什麼區別?
答:String、StringBuffer、StringBuilder
區別:String是不可變的對象,對每次對String類型的改變時都會生成一個新的對象,StringBuffer和StringBuilder是能夠改變對象的。
對於操做效率:StringBuilder > StringBuffer > String
對於線程安全:StringBuffer 是線程安全,可用於多線程;StringBuilder 是非線程安全,用於單線程
不頻繁的字符串操做使用 String。反之,StringBuffer 和 StringBuilder 都優於String
8.String str="i"與 String str=new String("i")同樣嗎?
答:不同,由於他們不是同一個對象。
9.如何將字符串反轉?
答:有多種方法。我列出3種方法。
第一種:
public class Main { public static void main(String[] args) { String s1 = "asdfghjkl"; System.out.println(new Main().swapWords(s1)); } public void swap(char[] arr, int begin, int end) { while (begin < end) { char temp = arr[begin]; arr[begin] = arr[end]; arr[end] = temp; begin++; end--; } } public String swapWords(String str) { char[] arr = str.toCharArray(); swap(arr, 0, arr.length - 1); int begin = 0; for (int i = 1; i < arr.length; i++) { if (arr[i] == ' ') { swap(arr, begin, i - 1); begin = i + 1; } } return new String(arr); } }
第二種:
public class Main { public static void main(String[] args) { String s1 = "asdfghjkl"; String[] s = s1.split(""); List<String> list = list = Arrays.asList(s); Collections.reverse(list); System.out.println(list); } }
第三種:
public class Main { public static void main(String[] args) { String s1 = "asdfghjkl"; System.out.println(new StringBuilder(s1).reverse().toString()); } }
10.String 類的經常使用方法都有那些?
答:下面列舉了20個經常使用方法。格式:返回類型 方法名 做用。
一、和長度有關:
二、和數組有關:
三、和判斷有關:
四、和改變內容有關:
五、和位置有關:
11.抽象類必需要有抽象方法嗎?(abstrace)
答:抽象類中不必定要包含抽象(abstrace)方法。也就是了,抽象中能夠沒有抽象(abstract)方法。反之,類中含有抽象方法,那麼類必須聲明爲抽象類。
12.普通類和抽象類有哪些區別?
答:
13.抽象類能使用 final 修飾嗎?
答:不能,抽象類中的抽象方法是將來繼承以後重寫方法,而用final修飾的類,沒法被繼承。
14.接口和抽象類有什麼區別?
答:
15.java 中 IO 流分爲幾種?
答:能夠分4種。
16.BIO、NIO、AIO 有什麼區別?
參考:https://blog.csdn.net/u010310183/article/details/81700405
17.Files的經常使用方法都有哪些?
參考:http://www.javashuo.com/article/p-dpmbvpaf-bn.html
18.java 容器都有哪些?
答:List、Set、Map
19.Collection 和 Collections 有什麼區別?
答:Collection是集合類的頂級接口,其派生了兩個子接口 Set 和 List。
Collections則是集合類的一個工具類/幫助類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜索以及線程安全等各類操做。
總的來講:Collection是一個接口,而Collections是個類。
20.List、Set、Map 之間的區別是什麼?
答:
21.HashMap 和 Hashtable 有什麼區別?
答:
22.如何決定使用 HashMap 仍是 TreeMap?
答:
23.說一下 HashMap 的實現原理?
答:
24.說一下 HashSet 的實現原理?
答:
25.ArrayList 和 LinkedList 的區別是什麼?
答:
26.如何實現數組和 List 之間的轉換?
答:
27.ArrayList 和 Vector 的區別是什麼?
答:
28.Array 和 ArrayList 有何區別?
答:Array 與 ArrayList 都是用來存儲數據的集合。ArrayList 底層是使用數組實現的,可是ArrayList對數組進行了封裝和功能擴展
29.在 Queue 中 poll()和 remove()有什麼區別?
答:
30.哪些集合類是線程安全的?
答:
31.迭代器 Iterator 是什麼?
答:
32.Iterator 怎麼使用?有什麼特色?
答:
33.Iterator 和 ListIterator 有什麼區別?
答:
34.怎麼確保一個集合不能被修改?
答:
35.並行和併發有什麼區別?
答:
36.線程和進程的區別?
答:
區別:地址空間、資源擁有
37.守護線程是什麼?
答:守護線程是個服務線程,服務於其餘線程
典型案例:垃圾回收線程
38.建立線程有哪幾種方式?
答:
39.說一下 runnable 和 callable 有什麼區別?
答:
40.線程有哪些狀態?
答:建立、就緒、運行、阻塞、死亡
41.sleep() 和 wait() 有什麼區別?
答:
42.notify()和 notifyAll()有什麼區別?
答:
43.線程的 run()和 start()有什麼區別?
答:
44.建立線程池有哪幾種方式?
45.線程池都有哪些狀態?
46.線程池中 submit()和 execute()方法有什麼區別?
47.在 java 程序中怎麼保證多線程的運行安全?
48.多線程鎖的升級原理是什麼?
49.什麼是死鎖?
50.怎麼防止死鎖?
51.ThreadLocal 是什麼?有哪些使用場景?
答:ThreadLocal用於保存某個線程共享變量。使用場景:解決數據庫鏈接,Session管理
52.說一下 synchronized 底層實現原理?
答:
53.synchronized 和 volatile 的區別是什麼?
54.synchronized 和 Lock 有什麼區別?
55.synchronized 和 ReentrantLock 區別是什麼?
56.說一下 atomic 的原理?
57.什麼是反射?
答:能夠將一個程序(類)在運行的時候得到該程序(類)的信息的機制,也就是得到在編譯期不可能得到的類的信息,由於這些信息是保存在Class對象中的,而這個Class對象是在程序運行時動態加載的
58.什麼是 java 序列化?什麼狀況下須要序列化?
答:系列化就是把java對象轉換爲字節序列的方法。
59.動態代理是什麼?有哪些應用?
答:
60.怎麼實現動態代理?
答:
61.爲何要使用克隆?
62.如何實現對象克隆?
63.深拷貝和淺拷貝區別是什麼?
一、jsp 和 servlet 有什麼區別?
jsp經編譯後就成了Servlet(Jsp的本質就是Servlet,JVM只能識別Java類,不能識別Jsp代碼,Web容器將Jsp的代碼編譯成JVM可以識別的java類)
jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制
Servlet中沒有內置對象,Jsp中的內置對象都是必須經過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象獲得。
二、session 和 cookie 有什麼區別?
cookie 以文本格式存儲在瀏覽器上,存儲量有限
session存儲在服務端,能夠無限量存儲多個變量而且比cookie更安全
一、throw 和 throws 的區別?
throw則是指拋出的一個具體異常類型
throws是用來聲明一個方法可能拋出的全部異常信息
二、異常是什麼?
異常是一個在程序執行期間發生的事件,它中斷正在執行的程序的正常指令流
三、異常處理的幾個關鍵字有哪些?
try、catch、finally、throw、throws
四、運行時異常都是什麼異常類型的子類?
Exception異常類
五、檢查異常是什麼?
簡單來講,你代碼尚未運行,編碼器就會檢查你的代碼,對可能出現的異常必須作出相對的處理
六、有哪些常見的檢查異常?
除了 RuntimeException與其子類,以及錯誤(Error).其餘的差很少都是檢查異常
七、異常傳播
這個從異常拋出到控制轉移給合適的異常處理語句的過程就叫作異常傳播
八、final、finally、finalize 有什麼區別?
final 用來修飾類、方法、變量
finally 只能用在 try catch 語法中,表示這段語句最終必定會被執行
九、try-catch-finally 中哪一個部分能夠省略?
catch和finally語句不能同時省略
一、http 響應碼 301 和 302 表明的是什麼?有什麼區別?
301表示網頁永久性轉移到另外一個地址
302表示臨時性轉移
區別
301是永久的重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址
302重定向是臨時的重定向,搜索引擎抓取新的內容而保留舊的網址
二、forward 和 redirect 的區別?
forward是服務器內部重定向
redirect是服務器收到請求後發送一個狀態頭給客戶,客戶將再請求一次
三、get 和 post 請求有哪些區別?
get請求的參數包含在URL中
post請求參數是放在請求body中
get請求傳參有長度限制,post請求沒有長度限制
get請求的參數只能是ASCII碼,post請求傳參沒有這個限制
四、如何實現跨域?
使用CORS技術
使用JSONP
五、什麼是json?
json是一種經量級的數據交換格式
9、設計模式
88.說一下你熟悉的設計模式?
單例模式
簡單工廠
工廠方法
代理模式
門面模式
相關概念:
一、AOP:面向切面編程
經過預編譯方式 和 運行期動態代理 實現程序功能的統一維護的一種技術
利用AOP
將業務邏輯的各部分之間的耦合度下降
提升程序的可重用性
不干擾源碼
二、IoC:控制反轉
是面向對象編程的一種設計原則
能夠減低代碼之間的耦合度‘
IoC是一種描述經過第三方去產生或獲取特定對象的方式
將類的建立 和 依賴關係 寫在配置文件裏,由配置文件注入,實現了鬆耦合
三、MVC:模型 - 視圖 - 控制器
是一種軟件規範
用一種 業務邏輯、數據、界面顯示分離的方法組織代碼
四、MVVM:模型 - 視圖 - 視圖模型
視圖經過視圖模型的dom監聽將事件綁定到模型上,而模型則經過數據綁定來管理視圖中的數據,視圖模型從中起到一個鏈接橋的做用
五、RESTful
一種軟件架構風格、設計風格、不是標準,只是提供了一組設計原則和約束條件
主要用於客戶端和服務端交互類的軟件
基於這個風格設計的軟件能夠更簡潔,更有層次,更易於實現緩存等機制
六、Vue生命週期
beforeCreate、create、beforeMount、mounted、beforUpdate、update、beforDestroy、destroyed
七、MyBatis
MyBatis 是一個支持定製化SQL、存儲過程以及高級映射的持久層框架
八、Hibernate
Hibernate是一個開放源碼的對象關係映射框架,它對JDBC進行了簡單封裝,它將POJO與數據庫表創建映射關係,是一個全自動的ORM框架
九、ORM:對象關係映射
是一種程序技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換
十、OOP:面向對象編程
它是一種計算機編程架構
十一、JPA:Java持久層API
是JDK註解或XML描述對象 - 關係表的映射關係
90.爲何要使用 spring?
答:spring是一個開源框架,是個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架
91.解釋一下什麼是 aop?
答:AOP即面向切面編程,是OOP編程的有效補充。使用AOP技術,能夠將一些系統性相關的編程工做,獨立提取出來,獨立實現,而後經過切面切入進系統。從而避免了在業務邏輯的代碼中混入不少的系統相關的邏輯——好比權限管理,事物管理,日誌記錄等等。
AOP分爲靜態AOP和動態AOP:
92.解釋一下什麼是 ioc?
答:即「控制反轉」,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味着將你設計好的對象交給容器控制,而不是傳統的在你的對象內部直接控制。
IoC很好的體現了面向對象設計法則之一—— 好萊塢法則:「別找咱們,咱們找你」;即由IoC容器幫對象找相應的依賴對象並注入,而不是由對象主動去找。
93.spring 有哪些主要模塊?
答:core模塊、aop模塊、data access模塊、web模塊、test模塊
94.spring 經常使用的注入方式有哪些?
答:詳細解析:http://www.javashuo.com/article/p-gdkynkay-kb.html
95.spring 中的 bean 是線程安全的嗎?
答:
96.spring 支持幾種 bean 的做用域?
答:singleton、prototype、request、session、globalSession五中做用域。
97.spring 自動裝配 bean 有哪些方式?
答:可分爲四種: