一、Java 基礎
1.JDK 和 JRE 有什麼區別?
jdk(開發執行環境),jre(執行環境)
2.== 和 equals 的區別是什麼?
1、基礎數據就是值的比較,參照數據就是記憶體地址值的比較
3.兩個物件的 hashCode()相同,則 equals()也一定爲 true,對嗎?
不對,hashCode可能會衝突
4.final 在 java 中有什麼作用?
修飾類不讓繼承,修飾方法不讓重寫,第一次賦值後後不做修改
5.java 中的 Math.round(-1.5) 等於多少?
-1
6.String 屬於基礎的數據型別嗎?
不是
7.java 中操作字串都有哪些類?它們之間有什麼區別?
sting(不可變字串),stingbuffer(執行緒安全),stringbudiller(執行緒不安全)
8.String str="i"與 String str=new String(「i」)一樣嗎?
不一樣
9.如何將字串反轉?
public static String reverse(String str){
if(str==null&&str.length<=1){
return str;
}
return reverse(str.substring(1)+str.charAt9(0));
}
10.String 類的常用方法都有那些?
反轉,大寫,小寫,打斷,字元大小,遮蔽空格
11.抽象類必須要有抽象方法嗎?
不是
12.普通類和抽象類有哪些區別?
普通類可以範例化,介面不能被範例化(沒有構造方法),抽象類可以範例化但是必須實現所有抽象方法的子類物件,介面也是指向所有介面方法
13.抽象類能使用 final 修飾嗎?
不可以
14.介面和抽象類有什麼區別?
介面不能被範例化(沒有構造方法),抽象類可以範例化但是必須實現所有抽象方法的子類物件,介面也是指向所有介面方法
13.抽象類能使用 final 修飾嗎?
15.java 中 IO 流分爲幾種?
輸入位元組流,輸入字元流,輸出位元組流,輸出字元流
16.BIO、NIO、AIO 有什麼區別?
同步阻塞,同步非阻塞,非同步非阻塞
17.Files的常用方法都有哪些?
移動,複製,查詢檔案
二、容器
18.java 容器都有哪些?
collection(list(arraylist(查詢快),linkedlist(插入快)),set(hashset(hash演算法插入值),treeset(可以排序))),map(hashmap,treemap,LinkedHashMap)
19.Collection 和 Collections 有什麼區別?
一個是介面,一個工具類
21.HashMap 和 Hashtable 有什麼區別?
執行緒安全(hashtable),hashmap(執行緒不安全),concurrenthashmap(加一個分段鎖,將數據分一段一段,各不影響的情況下對數據進行操作)
22.如何決定使用 HashMap 還是 TreeMap?
是否需要排序
23.說一下 HashMap 的實現原理?
HashMap 基於 Hash 演算法實現的,我們通過 put(key,value)儲存,get(key)來獲取。當傳入 key 時,HashMap 會根據 key. hashCode() 計算出 hash 值,根據 hash 值將 value 儲存在 bucket 裡。當計算出的 hash 值相同時,我們稱之爲 hash 衝突,HashMap 的做法是用鏈表和紅黑樹儲存相同 hash 值的 value。當 hash 衝突的個數比較少時,使用鏈表否則使用紅黑樹。
25.ArrayList 和 LinkedList 的區別是什麼?
1、一個是陣列一個鏈表,查詢快,刪除快的區別
27.ArrayList 和 Vector 的區別是什麼?
執行緒安全(arraylist擴容50%,vector(擴容100%))
28.Array 和 ArrayList 有何區別?
一個數組範例化需要定義長度
三、多執行緒
35.並行和併發有什麼區別?
單核只能併發,多核就是相當於多個人做事。
36.執行緒和進程的區別?
進程資源分配的最小單位,執行緒執行運算的最小單位,一個進程有多個執行緒,執行緒消耗低
37.守護執行緒是什麼?
守護執行緒是程式執行的時候在後台提供一種通用服務的執行緒。所有使用者執行緒停止,進程會停掉所有守護執行緒,退出程式。
Java中把執行緒設定爲守護執行緒的方法:在 start 執行緒之前呼叫執行緒的 setDaemon(true) 方法。
38.建立執行緒有哪幾種方式?
繼承thred,實際runnable,callable(有返回值)
40.執行緒有哪些狀態?
新建,執行,就緒,死亡,阻塞
41.sleep() 和 wait() 有什麼區別?
sleep是thred,不會釋放物件鎖,wait是object類,釋放鎖後等待喚醒
42.notify()和 notifyAll()有什麼區別?
喚醒單個跟喚醒全部
43.執行緒的 run()和 start()有什麼區別?
run是thred的一個普通方法,如果直接呼叫就是按順序執行,不符合多執行緒,而start是正在意義上的執行緒啓動
44.建立執行緒池有哪幾種方式?
定長執行緒池,可快取的執行緒池,定長執行緒池,單執行緒執行緒池
47.在 java 程式中怎麼保證多執行緒的執行安全?
原子性:一個或者多個操作在 CPU 執行的過程中不被中斷的特性
可見性:一個執行緒對共用變數的修改,另外一個執行緒能夠立刻看到
有序性:程式執行的順序按照程式碼的先後順序執行
48.多執行緒鎖的升級原理是什麼?
JDK Atomic開頭的原子類、synchronized、LOCK,可以解決原子性問題
synchronized、volatile、LOCK,可以解決可見性問題
Happens-Before 規則可以解決有序性問題
49.什麼是死鎖?
兩個或以上的執行緒在執行過程中,由於競爭資源造成的現象
50.怎麼防止死鎖?
1、互斥,2、請求保持一致,3、不可剝奪,4、回圈等待。
51.ThreadLocal 是什麼?有哪些使用場景?
ThreadLocal 是執行緒本地儲存,在每個執行緒中都建立了一個 ThreadLocalMap 物件,每個執行緒可以存取自己內部 ThreadLocalMap 物件內的 value
53.synchronized 和 volatile 的區別是什麼?
執行緒安全問題
54.synchronized 和 Lock 有什麼區別?
一個是不需要手動釋放鎖後,一個是自己可以釋放鎖(unlock)
55.synchronized 和 ReentrantLock 區別是什麼?
synchronized 競爭鎖時會一直等待;ReentrantLock 可以嘗試獲取鎖,並得到獲取結果
synchronized 獲取鎖無法設定超時;ReentrantLock 可以設定獲取鎖的超時時間
synchronized 無法實現公平鎖;ReentrantLock 可以滿足公平鎖,即先等待先獲取到鎖
synchronized 控制等待和喚醒需要結合加鎖物件的 wait() 和 notify()、notifyAll();ReentrantLock 控制等待和喚醒需要結合 Condition 的 await() 和 signal()、signalAll() 方法
synchronized 是 JVM 層面實現的;ReentrantLock 是 JDK 程式碼層面實現
synchronized 在加鎖程式碼塊執行完或者出現異常,自動釋放鎖;ReentrantLock 不會自動釋放鎖,需要在 finally{} 程式碼塊顯示釋放
56.說一下 atomic 的原理?
CAS解決原子性問題,在VEN(但V=E是替換N,不相等),v不等於E,已經被更新,會返回失敗
四、反射
57.什麼是反射?
通過forclassname,類。class,this.getclass獲取到類裏面的所有方法,構造器等
58.什麼是 java 序列化?什麼情況下需要序列化?
字串轉化物件
59.動態代理是什麼?有哪些應用?
動態代理:當想要給實現了某個介面的類中的方法,加一些額外的處理。比如說加日誌,加事務等。可以給這個類建立一個代理,故名思議就是建立一個新的類,這個類不僅包含原來類方法的功能,而且還在原來的基礎上新增了額外處理的新類。這個代理類並不是定義好的,是動態生成的。具有解耦意義,靈活,擴充套件性強
60.怎麼實現動態代理?
動態代理實現:首先必須定義一個介面,還要有一個InvocationHandler(將實現介面的類的物件傳遞給它)處理類。再有一個工具類Proxy(習慣性將其稱爲代理類,因爲呼叫他的newInstance()可以產生代理物件,其實他只是一個產生代理物件的工具類)。利用到InvocationHandler,拼接代理類原始碼,將其編譯生成代理類的二進制碼,利用載入器載入,並將其範例化產生代理物件,最後返回。
六、Java Web
64.jsp 和 servlet 有什麼區別?
jsp就是特別的servlet+html
65.jsp 有哪些內建物件?作用分別是什麼?
request,reqesone,page,pageContest,out,application,session,config,exction
66.說一下 jsp 的 4 種作用域?
page,request,session,application
67.session 和 cookie 有什麼區別?
一個在瀏覽器,一個在伺服器,一個是ASCLL,一個是任何數據都可以儲存,儲存時間一個可以長期儲存,一個不可以,隱祕性的區別,一個支援跨域,一個不支援。
七、異常
74.throw 和 throws 的區別?
拋出具體,一個不管是什麼異常都拋出
八、網路
80.forward 和 redirect 的區別?
重定向(伺服器二次),轉發(一次用戶端)
81.簡述 tcp 和 udp的區別?
1、udp面向無連線,數據量大,不穩定性
2、tcp面向連接穩定,安全
84.OSI 的七層模型都有哪些?
物理層、數據鏈路層、網路層、傳輸層、對談層、表達層、應用層
85.get 和 post 請求有哪些區別?
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
GET請求只能進行url編碼,而POST支援多種編碼方式。
GET請求參數會被完整保留在瀏覽器歷史記錄裡,而POST中的參數不會被保留。
GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
對參數的數據型別,GET只接受ASCII字元,而POST沒有限制。
GET比POST更不安全,因爲參數直接暴露在URL上,所以不能用來傳遞敏感資訊。
GET參數通過URL傳遞,POST放在Request body中。
86.如何實現跨域?
jsonp,cros,nginx跨域(在組態檔中add_header,在陪proxy_pass路徑)
九、設計模式
建立型模式,共五種:
工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:
適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行爲型模式,共十一種:
策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄 模式、狀態模式、存取者模式、中介者模式、直譯器模式。
90.爲什麼要使用 spring?
通過AOP面向切面將非核心部分的共同的部分單獨處理,還有IOC(控制反轉)將建立物件交給第三方,並依依賴注入
93.spring 有哪些主要模組?
96.spring 支援幾種 bean 的作用域?
單例,原型,request,session,global-session
98.spring 事務實現方式有哪些?
程式設計式事務,宣告式事務(在數據源設定,Acpert.aop的設定,事務增強,事務,aop的切入點)
99.說一下 spring 的事務隔離?
預設,未提交讀,提交讀,可重複讀,序列化
100.說一下 spring mvc 執行流程?
前端控制器獲取請求或呼叫hashermapper對應的對映器處理器,返回hasherexcerptionChain,前端控制器獲取對應的haher,再對應的適配器處理器返回對應的modelAndVew,前端控制器再獲取通過試圖解析器解析防護veiw在用戶端渲染
104.什麼是 spring boot?
減少許多檔案的設定,封裝許多框架的使用方法。
108.spring boot 有哪些方式可以實現熱部署?
debug,外掛
111.spring cloud 斷路器的作用是什麼?
發起請求是通過Hystrix的執行緒池來走的,不同的服務走不同的執行緒池,實現了不同服務呼叫的隔離,避免了服務雪崩的問題
112.spring cloud 的核心元件有哪些?
nacos:服務註冊於發現。
Feign:基於動態代理機制 機製,根據註解和選擇的機器,拼接請求 url 地址,發起請求。
nginx:實現負載均衡,從一個服務的多臺機器中選擇一臺。
Hystrix:提供執行緒池,不同的服務走不同的執行緒池,實現了不同服務呼叫的隔離,避免了服務雪崩的問題。
gateway:閘道器管理,由 Zuul 閘道器轉發請求給對應的服務。
125.mybatis 中 #{}和 ${}的區別是什麼?
1、防止sql注入
135.rabbitmq 的使用場景有哪些?
訂單系統:使用者下單後,訂單系統完成持久化處理,將訊息寫入訊息佇列,返回使用者訂單下單成功。
庫存系統:訂閱下單的訊息,獲取下單訊息,進行庫操作。
就算庫存系統出現故障,訊息佇列也能保證訊息的可靠投遞,不會導致訊息丟失
136.rabbitmq 有哪些重要的角色?
生產者,消費者,代理
137.rabbitmq 有哪些重要的元件?
連線管理器,通道,佇列,交換器,路由器,系結器
139.rabbitmq 的訊息是怎麼發送的?
用戶端和服務的建立一個tcp連線並獲取認證,用戶端與rabbitmq建立一個通道,所有的資訊都有通道傳輸
140.rabbitmq 怎麼保證訊息的穩定性?
發送者確認模式
141.rabbitmq 怎麼避免訊息丟失?
訊息持久化,ack確認模式,訊息補償機制 機製,叢集映象
142.要保證訊息持久化成功的條件有哪些?
宣告佇列必須設定持久化 durable 設定爲 true.
訊息推播投遞模式必須設定持久化,deliveryMode 設定爲 2(持久)。
訊息已經到達持久化交換器。
訊息已經到達持久化佇列。
143.rabbitmq 持久化有什麼缺點?
減低伺服器的吞吐量
144.rabbitmq 有幾種廣播型別?
1 fanout: 所有bind到此exchange的queue都可以接收訊息
(純廣播,系結到RabbitMQ的接受者都能收到訊息);
2 direct: 通過routingKey和exchange決定的那個唯一的queue可以接收訊息;
3 topic: 所有符合routingKey(此時可以是一個表達式)的routingKey所bind的queue可以接收訊息;
145.rabbitmq 怎麼實現延遲訊息佇列?
RabbitMQ-delayed-message-exchange
146.rabbitmq 叢集有什麼用?
高可用:某個伺服器出現問題,整個 RabbitMQ 還可以繼續使用;
高容量:叢集可以承載更多的訊息量。
147.rabbitmq 節點的型別有哪些?
各節點之間使用「–link」連線,此屬性不能忽略。
各節點使用的 erlang cookie 值必須相同,此值相當於「祕鑰」的功能,用於各節點的認證。
整個叢集中必須包含一個磁碟節點
157.zookeeper 是什麼?
158.zookeeper 都有哪些功能?
159.zookeeper 有幾種部署模式?
160.zookeeper 怎麼保證主從節點的狀態同步?
161.叢集中爲什麼要有主節點?
162.叢集中有 3 台伺服器,其中一個節點宕機,這個時候 zookeeper 還可以使用嗎?
163.說一下 zookeeper 的通知機制 機製?
十七、MySql
164.數據庫的三範式是什麼?
第一範式,列屬性不可再分,第二範式,在第一範式下,要求實體的屬性完全依賴於主關鍵字,第三範式,在第二範式下,任何非主屬性不依賴於其它非主屬性
165.一張自增表裏面總共有 7 條數據,刪除了最後 2 條數據,重新啓動 mysql 數據庫,又插入了一條數據,此時 id 是幾?
166.如何獲取當前數據庫版本?
167.說一下 ACID 是什麼?
168.char 和 varchar 的區別是什麼?
169.float 和 double 的區別是什麼?
170.mysql 的內連線、左連線、右連線有什麼區別?
171.mysql 索引是怎麼實現的?
172.怎麼驗證 mysql 的索引是否滿足需求?
173.說一下數據庫的事務隔離?
174.說一下 mysql 常用的引擎?
175.說一下 mysql 的行鎖和表鎖?
176.說一下樂觀鎖和悲觀鎖?
177.mysql 問題排查都有哪些手段?
178.如何做 mysql 的效能優化?
十八、Redis
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 常見的效能問題有哪些?該如何解決?
209、分佈式事務的解決
1、2pc,tcc,本地訊息表,mq事務訊息
2pc:如果事務在每個參與者上都執行成功,事務協調者發送通知讓參與者提交事務;否則,協調者發送通知讓參與者回滾事務。
tcc:TCC 其實就是採用的補償機制 機製,其核心思想是:針對每個操作,都要註冊一個與其對應的確認和補償(復原)操作
本地訊息:在分佈式事務操作的一方完成寫業務數據的操作之後向本地訊息表發送一個訊息,本地事務能保證這個訊息一定會被寫入本地訊息表中。
之後將本地訊息表中的訊息轉發到 Kafka 等訊息佇列中,如果轉發成功則將訊息從本地訊息表中刪除,否則繼續重新轉發。
在分佈式事務操作的另一方從訊息佇列中讀取一個訊息,並執行訊息中的操作
事務訊息:
RocketMQ :第一階段Prepared訊息,會拿到訊息的地址。 第二階段執行本地事務,第三階段通過第一階段拿到的地址去存取訊息,並修改狀態。