---恢復內容開始---css
1.JDK 和 JRE 有什麼區別?html
答:JRE是java運行時環境,包含了java虛擬機,java基礎類庫。是使用java語言編寫的程序運行所須要的軟件環境,是提供給想運行java程序的用戶使用的。java
2.== 和 equals 的區別是什麼?mysql
答:==是比較兩個對象的地址,equals是比較連個對象的內容程序員
3.兩個對象的 hashCode()相同,則 equals()也必定爲 true,對嗎?web
答:不對!hashCode()相同,不表明連個對象就相同。hashCode值是從hash表中得來的,hash是一個函數,該函數的實現是一種算法,經過hash算法算出hash值,hash表就是 hash值組成的,一共有8個位置。ajax
相反,equals()相同,hashCode()必定相同。這個是正確的!正則表達式
4.final 在 java 中有什麼做用?redis
答:final的做用隨着所修飾的類型而不一樣:算法
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?
答:對於在 Map 中插入、刪除、定位一個元素這類操做,HashMap 是最好的選擇,由於相對而言 HashMap 的插入會更快,但若是你要對一個 key 集合進行有序的遍歷,那 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 有什麼區別?
答:runnable 沒有返回值,callable 能夠拿到有返回值,callable 能夠看做是 runnable 的補充。
40.線程有哪些狀態?
答:建立、就緒、運行、阻塞、死亡
41.sleep() 和 wait() 有什麼區別?
答:
42.notify()和 notifyAll()有什麼區別?
答:
43.線程的 run()和 start()有什麼區別?
答:
44.建立線程池有哪幾種方式?
答:
線程池建立有七種方式,最核心的是最後一種:
45.線程池都有哪些狀態?
答:
46.線程池中 submit()和 execute()方法有什麼區別?
答:
Callable 類型的任務能夠獲取執行的返回值,而 Runnable 執行無返回值。
47.在 java 程序中怎麼保證多線程的運行安全?
答:
手動鎖Java示例代碼以下:
Lock lock = new ReentrantLock(); lock.lock(); try { System. out. println("得到鎖"); } catch (Exception e) { // TODO: handle exception } finally { System. out. println("釋放鎖"); lock. unlock(); }
48.多線程鎖的升級原理是什麼?
答:
synchronized 鎖升級原理:在鎖對象的對象頭裏面有一個 threadid 字段,在第一次訪問的時候 threadid 爲空,jvm 讓其持有偏向鎖,並將 threadid 設置爲其線程 id,再次進入的時候會先判斷 threadid 是否與其線程 id 一致,若是一致則能夠直接使用此對象,若是不一致,則升級偏向鎖爲輕量級鎖,經過自旋循環必定次數來獲取鎖,執行必定次數以後,若是尚未正常獲取到要使用的對象,此時就會把鎖從輕量級升級爲重量級鎖,此過程就構成了 synchronized 鎖的升級。
鎖的升級的目的:鎖升級是爲了減低了鎖帶來的性能消耗。在 Java 6 以後優化 synchronized 的實現方式,使用了偏向鎖升級爲輕量級鎖再升級到重量級鎖的方式,從而減低了鎖帶來的性能消耗。
49.什麼是死鎖?
答:當線程 A 持有獨佔鎖a,並嘗試去獲取獨佔鎖 b 的同時,線程 B 持有獨佔鎖 b,並嘗試獲取獨佔鎖 a 的狀況下,就會發生 AB 兩個線程因爲互相持有對方須要的鎖,而發生的阻塞現象,咱們稱爲死鎖。
50.怎麼防止死鎖?
答:
51.ThreadLocal 是什麼?有哪些使用場景?
答:ThreadLocal用於保存某個線程共享變量。使用場景:解決數據庫鏈接,Session管理
52.說一下 synchronized 底層實現原理?
答:synchronized 是由一對 monitorenter/monitorexit 指令實現的,monitor 對象是同步的基本實現單元。在 Java 6 以前,monitor 的實現徹底是依靠操做系統內部的互斥鎖,由於須要進行用戶態到內核態的切換,因此同步操做是一個無差異的重量級操做,性能也很低。但在 Java 6 的時候,Java 虛擬機 對此進行了大刀闊斧地改進,提供了三種不一樣的 monitor 實現,也就是常說的三種不一樣的鎖:偏向鎖(Biased Locking)、輕量級鎖和重量級鎖,大大改進了其性能。
53.synchronized 和 volatile 的區別是什麼?
答:
54.synchronized 和 Lock 有什麼區別?
55.synchronized 和 ReentrantLock 區別是什麼?
答:
synchronized 早期的實現比較低效,對比 ReentrantLock,大多數場景性能都相差較大,可是在 Java 6 中對 synchronized 進行了很是多的改進。
主要區別以下:
56.說一下 atomic 的原理?
答:atomic 主要利用 CAS (Compare And Wwap) 和 volatile 和 native 方法來保證原子操做,從而避免 synchronized 的高開銷,執行效率大爲提高。
57.什麼是反射?
答:能夠將一個程序(類)在運行的時候得到該程序(類)的信息的機制,也就是得到在編譯期不可能得到的類的信息,由於這些信息是保存在Class對象中的,而這個Class對象是在程序運行時動態加載的
58.什麼是 java 序列化?什麼狀況下須要序列化?
答:系列化就是把java對象轉換爲字節序列的方法。
59.動態代理是什麼?有哪些應用?
答:動態代理是運行時動態生成代理類。
60.怎麼實現動態代理?
答:
61.爲何要使用克隆?
答:克隆的對象可能包含一些已經修改過的屬性,而 new 出來的對象的屬性都仍是初始化時候的值,因此當須要一個新的對象來保存當前對象的「狀態」就靠克隆方法了。
62.如何實現對象克隆?
答:
63.深拷貝和淺拷貝區別是什麼?
答:
64.jsp 和 servlet 有什麼區別?
答:
65.jsp 有哪些內置對象?做用分別是什麼?
66.說一下 jsp 的 4 種做用域?
67.session 和 cookie 有什麼區別?
答:
68.說一下 session 的工做原理?
答:session 的工做原理是客戶端登陸完成以後,服務器會建立對應的 session,session 建立完以後,會把 session 的 id 發送給客戶端,客戶端再存儲到瀏覽器中。這樣客戶端每次訪問服務器時,都會帶着 sessionid,服務器拿到 sessionid 以後,在內存找到與之對應的 session 這樣就能夠正常工做了
69.若是客戶端禁止 cookie 能實現 session 還能用嗎?
答:能夠用,session 只是依賴 cookie 存儲 sessionid,若是 cookie 被禁用了,可使用 url 中添加 sessionid 的方式保證 session 能正常使用
70.spring mvc 和 struts 的區別是什麼?
答:
71.如何避免 sql 注入?
答:
72.什麼是 XSS 攻擊,如何避免?
答:
XSS 攻擊:即跨站腳本攻擊,它是 Web 程序中常見的漏洞。原理是攻擊者往 Web 頁面裏插入惡意的腳本代碼(css 代碼、Javascript 代碼等),當用戶瀏覽該頁面時,嵌入其中的腳本代碼會被執行,從而達到惡意攻擊用戶的目的,如盜取用戶 cookie、破壞頁面結構、重定向到其餘網站等。
預防 XSS 的核心是必須對輸入的數據作過濾處理。
73.什麼是 CSRF 攻擊,如何避免?
答:
CSRF:Cross-Site Request Forgery(中文:跨站請求僞造),能夠理解爲攻擊者盜用了你的身份,以你的名義發送惡意請求,好比:以你名義發送郵件、發消息、購買商品,虛擬貨幣轉帳等。
防護手段:
74.throw 和 throws 的區別?
答:
75.final、finally、finalize 有什麼區別?
答:
76.try-catch-finally 中哪一個部分能夠省略?
答:try-catch-finally 其中 catch 和 finally 均可以被省略,可是不能同時省略,也就是說有 try 的時候,必須後面跟一個 catch 或者 finally
77.try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
答:必定會, catch 中 return會等finally中的代碼執行完以後纔會執行
78.常見的異常類有哪些?
79.http 響應碼 301 和 302 表明的是什麼?有什麼區別?
答:
80.forward 和 redirect 的區別?
答:
81.簡述 tcp 和 udp的區別?
答:
tcp 和 udp 是 OSI 模型中的運輸層中的協議。tcp 提供可靠的通訊傳輸,而 udp 則常被用於讓廣播和細節控制交給應用的通訊傳輸。
二者的區別大體以下:
82.tcp 爲何要三次握手,兩次不行嗎?爲何?
答:
若是採用兩次握手,那麼只要服務器發出確認數據包就會創建鏈接,但因爲客戶端此時並未響應服務器端的請求,那此時服務器端就會一直在等待客戶端,這樣服務器端就白白浪費了必定的資源。若採用三次握手,服務器端沒有收到來自客戶端的再此確認,則就會知道客戶端並無要求創建請求,就不會浪費服務器的資源
83.說一下 tcp 粘包是怎麼產生的?
答:
tcp 粘包可能發生在發送端或者接收端,分別來看兩端各類產生粘包的緣由:
84.OSI 的七層模型都有哪些?
答:
85.get 和 post 請求有哪些區別?
答:
86.如何實現跨域?
答:
87.說一下 JSONP 實現原理?
答:jsonp是一種輕量級的數據交換格式。
jsonp:JSON with Padding,它是利用script標籤的 src 鏈接能夠訪問不一樣源的特性,加載遠程返回的「JS 函數」來執行的。
9、設計模式
88.說一下你熟悉的設計模式?
答:
89.簡單工廠和抽象工廠有什麼區別?
答:
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 是線程安全的嗎?
答:
spring 中的 bean 默認是單例模式,spring 框架並無對單例 bean 進行多線程的封裝處理。
實際上大部分時候 spring bean 無狀態的(好比 dao 類),全部某種程度上來講 bean 也是安全的,但若是 bean 有狀態的話(好比 view model 對象),那就要開發者本身去保證線程安全了,最簡單的就是改變 bean 的做用域,把「singleton」變動爲「prototype」,這樣請求 bean 至關於 new Bean()了,因此就能夠保證線程安全了。
96.spring 支持幾種 bean 的做用域?
答:singleton、prototype、request、session、globalSession五中做用域。
97.spring 自動裝配 bean 有哪些方式?
答:可分爲四種:
98.spring 事務實現方式有哪些?
答:
99.說一下 spring 的事務隔離?
答:
spring 有五大隔離級別,默認值爲 ISOLATION_DEFAULT(使用數據庫的設置),其餘四個隔離級別和數據庫的隔離級別一致:
100.說一下 spring mvc 運行流程?
答:
101.spring mvc 有哪些組件?
答:
102.@RequestMapping 的做用是什麼?
答:將 http 請求映射到相應的類/方法上
103.@Autowired 的做用是什麼?
答:@Autowired 它能夠對類成員變量、方法及構造函數進行標註,完成自動裝配的工做,經過@Autowired 的使用來消除 set/get 方法
104.什麼是 spring boot?
答:Spring Boot是一個構建在Spring框架頂部的項目。它提供了一種更簡單、更快捷的方法來設置、配置和運行簡單和基於Web的應用程序。
105.爲何要用 spring boot?
答:
106.spring boot 核心配置文件是什麼?
spring boot 核心的兩個配置文件:
107.spring boot 配置文件有哪幾種類型?它們有什麼區別?
配置文件有 . properties 格式和 . yml 格式,它們主要的區別是書法風格不一樣。
. properties 配置以下:
spring. RabbitMQ. port=5672
. yml 配置以下:
spring:
RabbitMQ:
port: 5672
. yml 格式不支持 @PropertySource 註解導入
108.spring boot 有哪些方式能夠實現熱部署?
109.jpa 和 hibernate 有什麼區別?
jpa 全稱 Java Persistence API,是 Java 持久化接口規範,hibernate 屬於 jpa 的具體實現。
110.什麼是 spring cloud?
spring cloud 是一系列框架的有序集合。它利用 spring boot 的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,均可以用 spring boot 的開發風格作到一鍵啓動和部署
111.spring cloud 斷路器的做用是什麼?
在分佈式架構中,斷路器模式的做用也是相似的,當某個服務單元發生故障(相似用電器發生短路)以後,經過斷路器的故障監控(相似熔斷保險絲),向調用方返回一個錯誤響應,而不是長時間的等待。這樣就不會使得線程因調用故障服務被長時間佔用不釋放,避免了故障在分佈式系統中的蔓延
112.spring cloud 的核心組件有哪些?
113.爲何要使用 hibernate?
114.什麼是 ORM 框架?
115.hibernate 中如何在控制檯查看打印的 sql 語句?
116.hibernate 有幾種查詢方式?
117.hibernate 實體類能夠被定義爲 final 嗎?
118.在 hibernate 中使用 Integer 和 int 作映射有什麼區別?
119.hibernate 是如何工做的?
120.get()和 load()的區別?
121.說一下 hibernate 的緩存機制?
122.hibernate 對象有哪些狀態?
123.在 hibernate 中 getCurrentSession 和 openSession 的區別是什麼?
124.hibernate 實體類必需要有無參構造函數嗎?爲何?
125.mybatis 中 #{}和 ${}的區別是什麼?
126.mybatis 有幾種分頁方式?
127.RowBounds 是一次性查詢所有結果嗎?爲何?
128.mybatis 邏輯分頁和物理分頁的區別是什麼?
129.mybatis 是否支持延遲加載?延遲加載的原理是什麼?
130.說一下 mybatis 的一級緩存和二級緩存?
131.mybatis 和 hibernate 的區別有哪些?
132.mybatis 有哪些執行器(Executor)?
133.mybatis 分頁插件的實現原理是什麼?
134.mybatis 如何編寫一個自定義插件?
十4、RabbitMQ
135.rabbitmq 的使用場景有哪些?
136.rabbitmq 有哪些重要的角色?
137.rabbitmq 有哪些重要的組件?
138.rabbitmq 中 vhost 的做用是什麼?
139.rabbitmq 的消息是怎麼發送的?
140.rabbitmq 怎麼保證消息的穩定性?
141.rabbitmq 怎麼避免消息丟失?
142.要保證消息持久化成功的條件有哪些?
143.rabbitmq 持久化有什麼缺點?
144.rabbitmq 有幾種廣播類型?
145.rabbitmq 怎麼實現延遲消息隊列?
146.rabbitmq 集羣有什麼用?
147.rabbitmq 節點的類型有哪些?
148.rabbitmq 集羣搭建須要注意哪些問題?
149.rabbitmq 每一個節點是其餘節點的完整拷貝嗎?爲何?
150.rabbitmq 集羣中惟一一個磁盤節點崩潰了會發生什麼狀況?
151.rabbitmq 對集羣節點中止順序有要求嗎?
十5、Kafka
152.kafka 能夠脫離 zookeeper 單獨使用嗎?爲何?
153.kafka 有幾種數據保留的策略?
154.kafka 同時設置了 7 天和 10G 清除數據,到第五天的時候消息達到了 10G,這個時候 kafka 將如何處理?
155.什麼狀況會致使 kafka 運行變慢?
156.使用 kafka 集羣須要注意什麼?
十6、Zookeeper
157.zookeeper 是什麼?
158.zookeeper 都有哪些功能?
159.zookeeper 有幾種部署模式?
160.zookeeper 怎麼保證主從節點的狀態同步?
161.集羣中爲何要有主節點?
162.集羣中有 3 臺服務器,其中一個節點宕機,這個時候 zookeeper 還可使用嗎?
163.說一下 zookeeper 的通知機制?
164.數據庫的三範式是什麼?
165.一張自增表裏面總共有 7 條數據,刪除了最後 2 條數據,重啓 mysql 數據庫,又插入了一條數據,此時 id 是幾?
166.如何獲取當前數據庫版本?
使用 select version() 獲取當前 MySQL 數據庫版本。
select version()
167.說一下 ACID 是什麼?
168.char 和 varchar 的區別是什麼?
chat 優勢:效率高;缺點:佔用空間;適用場景:存儲密碼的 md5 值,固定長度的,使用 char 很是合適。
因此,從空間上考慮 varcahr 比較合適;從效率上考慮 char 比較合適,兩者使用須要權衡
169.float 和 double 的區別是什麼?
170.mysql 的內鏈接、左鏈接、右鏈接有什麼區別?
內鏈接關鍵字:inner join;左鏈接:left join;右鏈接:right join。 內鏈接是把匹配的關聯數據顯示出來;左鏈接是左邊的表所有顯示出來,右邊的表顯示出符合條件的數據;右鏈接正好相反
171.mysql 索引是怎麼實現的?
索引是知足某種特定查找算法的數據結構,而這些數據結構會以某種方式指向數據,從而實現高效查找數據。 具體來講 MySQL 中的索引,不一樣的數據引擎實現有所不一樣,但目前主流的數據庫引擎的索引都是 B+ 樹實現的,B+ 樹的搜索效率,能夠到達二分法的性能,找到數據區域以後就找到了完整的數據結構了,全部索引的性能也是更好的
172.怎麼驗證 mysql 的索引是否知足需求?
使用 explain 查看 SQL 是如何執行查詢語句的,從而分析你的索引是否知足需求。
explain 語法:
explain select * from table where type=1
173.說一下數據庫的事務隔離?
MySQL 的事務隔離是在 MySQL. ini 配置文件裏添加的,在文件的最後添加:
transaction-isolation = REPEATABLE-READ
可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。
髒讀 :表示一個事務可以讀取另外一個事務中還未提交的數據。好比,某個事務嘗試插入記錄 A,此時該事務還未提交,而後另外一個事務嘗試讀取到了記錄 A。
不可重複讀 :是指在一個事務內,屢次讀同一數據。
幻讀 :指同一個事務內屢次查詢返回的結果集不同。好比同一個事務 A 第一次查詢時候有 n 條記錄,可是第二次同等條件下查詢卻有 n+1 條記錄,這就好像產生了幻覺。發生幻讀的緣由也是另一個事務新增或者刪除或者修改了第一個事務結果集裏面的數據,同一個記錄的數據內容被修改了,全部數據行的記錄就變多或者變少了
174.說一下 mysql 經常使用的引擎?
175.說一下 mysql 的行鎖和表鎖?
MyISAM 只支持表鎖,InnoDB 支持表鎖和行鎖,默認爲行鎖
176.說一下樂觀鎖和悲觀鎖?
數據庫的樂觀鎖須要本身實現,在表裏面添加一個 version 字段,每次修改爲功值加 1,這樣每次修改的時候先對比一下,本身擁有的 version 和數據庫如今的 version 是否一致,若是不一致就不修改,這樣就實現了樂觀鎖
177.mysql 問題排查都有哪些手段?
178.如何作 mysql 的性能優化?
179.redis 是什麼?都有哪些使用場景?
180.redis 有哪些功能?
181.redis 和 memecache 有什麼區別?
182.redis 爲何是單線程的?
183.什麼是緩存穿透?怎麼解決?
184.redis 支持的數據類型有哪些?
185.redis 支持的 java 客戶端都有哪些?
186.jedis 和 redisson 有哪些區別?
187.怎麼保證緩存和數據庫數據的一致性?
188.redis 持久化有幾種方式?
189.redis 怎麼實現分佈式鎖?
190.redis 分佈式鎖有什麼缺陷?
191.redis 如何作內存優化?
192.redis 淘汰策略有哪些?
193.redis 常見的性能問題有哪些?該如何解決?
194.說一下 jvm 的主要組成部分?及其做用?
答:
組件的做用: 首先經過類加載器(ClassLoader)會把 Java 代碼轉換成字節碼,運行時數據區(Runtime Data Area)再把字節碼加載到內存中,而字節碼文件只是 JVM 的一套指令集規範,並不能直接交個底層操做系統去執行,所以須要特定的命令解析器執行引擎(Execution Engine),將字節碼翻譯成底層系統指令,再交由 CPU 去執行,而這個過程當中須要調用其餘語言的本地庫接口(Native Interface)來實現整個程序的功能
195.說一下 jvm 運行時數據區?
不一樣虛擬機的運行時數據區可能略微有所不一樣,但都會聽從 Java 虛擬機規範, Java 虛擬機規範規定的區域分爲如下 5 個部分:
196.說一下堆棧的區別?
197.隊列和棧是什麼?有什麼區別?
198.什麼是雙親委派模型?
在介紹雙親委派模型以前先說下類加載器。對於任意一個類,都須要由加載它的類加載器和這個類自己一同確立在 JVM 中的惟一性,每個類加載器,都有一個獨立的類名稱空間。類加載器就是根據指定全限定名稱將 class 文件加載到 JVM 內存,而後再轉化爲 class 對象。
類加載器分類:
雙親委派模型:若是一個類加載器收到了類加載的請求,它首先不會本身去加載這個類,而是把這個請求委派給父類加載器去完成,每一層的類加載器都是如此,這樣全部的加載請求都會被傳送到頂層的啓動類加載器中,只有當父加載沒法完成加載請求(它的搜索範圍中沒找到所需的類)時,子加載器纔會嘗試去加載類
199.說一下類加載的執行過程?
類裝載分爲如下 5 個步驟:
200.怎麼判斷對象是否能夠被回收?
通常有兩種方法來判斷:
201.java 中都有哪些引用類型?
202.說一下 jvm 有哪些垃圾回收算法?
203.說一下 jvm 有哪些垃圾回收器?
204.詳細介紹一下 CMS 垃圾回收器?
CMS 是英文 Concurrent Mark-Sweep 的簡稱,是以犧牲吞吐量爲代價來得到最短回收停頓時間的垃圾回收器。對於要求服務器響應速度的應用上,這種垃圾回收器很是適合。在啓動 JVM 的參數加上「-XX:+UseConcMarkSweepGC」來指定使用 CMS 垃圾回收器
CMS 使用的是標記-清除的算法實現的,因此在 gc 的時候回產生大量的內存碎片,當剩餘內存不能知足程序運行要求時,系統將會出現 Concurrent Mode Failure,臨時 CMS 會採用 Serial Old 回收器進行垃圾清除,此時的性能將會被下降
205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什麼區別?
新生代垃圾回收器通常採用的是複製算法,複製算法的優勢是效率高,缺點是內存利用率低;老年代回收器通常採用的是標記-整理的算法進行垃圾回收
206.簡述分代垃圾回收器是怎麼工做的?
分代回收器有兩個分區:老生代和新生代,新生代默認的空間佔比總空間的 1/3,老生代的默認佔比是 2/3
新生代使用的是複製算法,新生代裏有 3 個分區:Eden、To Survivor、From Survivor,它們的默認佔比是 8:1:1,它的執行流程以下:
每次在 From Survivor 到 To Survivor 移動時都存活的對象,年齡就 +1,當年齡到達 15(默認配置是 15)時,升級爲老生代。大對象也會直接進入老生代。 老生代當空間佔用到達某個值以後就會觸發全局垃圾收回,通常使用標記整理的執行算法。以上這些循環往復就構成了整個分代垃圾回收的總體執行流程
207.說一下 jvm 調優的工具?
JDK 自帶了不少監控工具,都位於 JDK 的 bin 目錄下,其中最經常使用的是 jconsole 和 jvisualvm 這兩款視圖監控工具
208.經常使用的 jvm 調優的參數都有哪些?