- IOC控制反轉(zhuǎn)的優(yōu)點?
將對象的創(chuàng)建權(quán)交付于IOC容器進行托管役纹,使得具有如下優(yōu)點- a. 統(tǒng)一管理;
- b. 以工廠模式對用戶提供對象暇唾,羅列對象組供用戶進行挑選促脉,使得邏輯更清晰辰斋;
- c. 不需要用戶直接new對象,可以在獲取對象的時候做些額外的操作(getBean()方法進行);
- IOC控制反轉(zhuǎn)的優(yōu)點?
- dubbo 提供者和dubbo的消費者是如何進行通信的瘸味,dubbo提供者數(shù)據(jù)變更宫仗,消費者如何感知?
- a. Dubbo啟動時旁仿,Consumer和Provider都會把自身的URL格式化為字符串藕夫,然后注冊到zookeeper相應(yīng)節(jié)點下,作為一個臨時節(jié)點枯冈,當(dāng)連斷開時汁胆,節(jié)點被刪除;
- b. Consumer在啟動時霜幼,不僅僅會注冊自身到 …/consumers/目錄下嫩码,同時還會訂閱…/providers目錄,實時獲取其上Provider的URL字符串信息罪既。
- c. Provider和Consumer向Zookeeper注冊臨時節(jié)點铸题,當(dāng)連接斷開時刪除相應(yīng)的注冊節(jié)點。
-
d. Consumer訂閱Providers節(jié)點的子節(jié)點琢感,實時感知Provider的變化情況丢间,實時同步自身的Invoker對象,保證RPC的可用性驹针。
- dubbo 提供者和dubbo的消費者是如何進行通信的瘸味,dubbo提供者數(shù)據(jù)變更宫仗,消費者如何感知?
- CGLIB和JDK提供的InvocationHandler代理對象生成對應(yīng)代理情況是在哪個步驟中完成的烘挫?
CGLIB是在代碼運行時對字節(jié)碼進行修改和動態(tài)生成,繼承子類覆寫目標(biāo)類方法柬甥,JDK提供的則需要有接口類作為前提饮六,在運行時動態(tài)生成。
- CGLIB和JDK提供的InvocationHandler代理對象生成對應(yīng)代理情況是在哪個步驟中完成的烘挫?
4.JWT如何在token上做對WEB服務(wù)器無狀態(tài)處理苛蒲?
JWT的token分為三部分:header卤橄、payload、signature臂外,signature對header和payload數(shù)據(jù)進行簽名窟扑。5.1 MYSQL的協(xié)議格式?
總體流程
===========傳輸層協(xié)議================
1. 三次握手建立 TCP 連接漏健。
===========應(yīng)用層協(xié)議================
2. 建立 MySQL 連接嚎货,也就是認證階段。
服務(wù)端 -> 客戶端:發(fā)送握手初始化包 (Handshake Initialization Packet)蔫浆。
客戶端 -> 服務(wù)端:發(fā)送驗證包 (Client Authentication Packet)殖属。
服務(wù)端 -> 客戶端:認證結(jié)果消息。
3. 認證通過之后克懊,客戶端開始與服務(wù)端之間交互忱辅,也就是命令執(zhí)行階段七蜘。
客戶端 -> 服務(wù)端:發(fā)送命令包 (Command Packet)谭溉。
服務(wù)端 -> 客戶端:發(fā)送回應(yīng)包 (OK Packet, or Error Packet, or Result Set Packet)墙懂。
4. 斷開 MySQL 連接。
客戶端 -> 服務(wù)器:發(fā)送退出命令包扮念。
==========傳輸層協(xié)議==================
5. 四次握手斷開 TCP 連接
服務(wù)端發(fā)送至客戶端的協(xié)議格式:
協(xié)議版本號:服務(wù)端所使用的mysql協(xié)議的版本號
服務(wù)器線程ID:服務(wù)端為此客戶端所創(chuàng)建的線程的ID
挑戰(zhàn)隨機數(shù):MySQL數(shù)據(jù)庫用戶認證采用的是挑戰(zhàn)/應(yīng)答的方式损搬,服務(wù)器生成該挑戰(zhàn)數(shù)并發(fā)送給客戶端,由客戶端進行處理并返回相應(yīng)結(jié)果柜与,然后服務(wù)器檢查是否與預(yù)期的結(jié)果相同巧勤,從而完成用戶認證的過程。
服務(wù)器權(quán)能標(biāo)志:用于與客戶端協(xié)商通訊方式
客戶端發(fā)送至服務(wù)器端:
客戶端權(quán)能標(biāo)志:客戶端收到服務(wù)器發(fā)來的初始化報文后弄匕,會對服務(wù)器發(fā)送的權(quán)能標(biāo)志進行修改颅悉,保留自身所支持的功能,然后將權(quán)能標(biāo)返回給服務(wù)器迁匠,從而保證服務(wù)器與客戶端通訊的兼容性剩瓶。
消息長度:客戶端發(fā)送請求時所支持的最大消息長度值
字符編碼表示通訊過程中使用的字符編碼,與服務(wù)器在認證報文中發(fā)送的相同
用戶名:客戶端登陸的用戶名
挑戰(zhàn)認證數(shù)據(jù):客戶端用戶密碼使用服務(wù)器發(fā)送的挑戰(zhàn)隨機數(shù)進行加密后城丧,生成挑戰(zhàn)認證數(shù)據(jù)延曙,返回給服務(wù)器用于服務(wù)端的認證
認證流程:
服務(wù)器發(fā)送隨機字符串 (scramble) 給客戶端。
客戶端作如下計算亡哄,然后客戶端將 token 發(fā)送給服務(wù)端枝缔。
stage1_hash = SHA1(明文密碼)
token = SHA1(scramble + SHA1(stage1_hash)) XOR stage1_hash
服務(wù)端作如下計算,比對 SHA1(stage1_hash) 和 mysql.user.password 是否相同蚊惯。
stage1_hash = token XOR SHA1(scramble + mysql.user.password)
-
5.2 MYSQL的innodb引擎重要的幾個參數(shù)優(yōu)化愿卸?
內(nèi)存優(yōu)化參數(shù):- innodb_buffer_pool_size:主要緩存innodb表的索引,數(shù)據(jù)截型,插入數(shù)據(jù)時的緩沖擦酌,建議設(shè)置成內(nèi)存的60%~70%。
- innodb_additional_mem_pool_size:存放Innodb的內(nèi)部目錄菠劝,這個值不用分配太大赊舶,系統(tǒng)可以自動調(diào)。通常設(shè)置16M夠用了赶诊,如果表比較多笼平,可以適當(dāng)?shù)脑龃蟆?br> 日志優(yōu)化參數(shù)
- innodb_log_file_size:這個值分配的大小和數(shù)據(jù)庫的寫入速度,事務(wù)大小舔痪,異常重啟后的恢復(fù)有很大的關(guān)系寓调。一般取256M可以兼顧性能和recovery的速度。
- innodb_log_buffer_size:事務(wù)在內(nèi)存中的緩沖锄码,也就是日志緩沖區(qū)的大小夺英, 默認設(shè)置即可晌涕,具有大量事務(wù)的可以考慮設(shè)置為16M
- innodb_flush_logs_at_trx_commit:這個參數(shù)只有3個值(0:每秒寫入,1每次提交寫入痛悯,2事務(wù)提交會觸發(fā)log buffer 到log file的刷新余黎,但并不會觸發(fā)磁盤文件系統(tǒng)到磁盤的同步。此外载萌,每秒會有一次文件系統(tǒng)到磁盤同步操作).默認為1惧财,性能更高的可以設(shè)置為0或是2,這樣可以適當(dāng)?shù)臏p少磁盤IO(但會丟失一秒鐘的事務(wù)扭仁。)垮衷,游戲庫的MySQL建議設(shè)置為0。主庫請不要更改了乖坠。
IO分配 - innodb_file_per_table:使每個Innodb的表搀突,有自已獨立的表空間。如刪除文件后可以回收那部分空間熊泵。默認是關(guān)閉的仰迁,建議打開(innodb_file_per_table=1)
- innodb_open_files:限制Innodb能打開的表的數(shù)據(jù)。
- innodb_data_home_dir:放置表空間數(shù)據(jù)的目錄戈次,默認在mysql的數(shù)據(jù)目錄轩勘,設(shè)置到和MySQL安裝文件不同的分區(qū)可以提高性能。
6.zookeeper如何保證數(shù)據(jù)一致性怯邪?
Paxos算法(參考后續(xù)文章《Paxos算法》)比較復(fù)雜绊寻,為了簡化實現(xiàn),Zookeeper使用了一種叫ZAB(ZooKeeper Atomic
Broadcast悬秉,ZooKeeper原子消息廣播協(xié)議)的算法協(xié)議澄步。基于ZAB算法和泌,Zookeeper集群保證數(shù)據(jù)更新的一致性村缸,并且通過集群方式保證了Zookeeper系統(tǒng)高可用。但是Zookeeper系統(tǒng)中所有服務(wù)器都存儲相同的數(shù)據(jù)武氓,也就是數(shù)據(jù)沒有分片存儲梯皿,因此不滿足分區(qū)耐受性。
因為Zookeeper系統(tǒng)的多臺服務(wù)器存儲相同的數(shù)據(jù)并且每次數(shù)據(jù)更新都要所有服務(wù)器投票表決县恕, 所以和一般的分布式系統(tǒng)相反东羹,Zookeeper集群的性能會隨著服務(wù)器數(shù)量的增加而下降。7.kafka如何保證數(shù)據(jù)一致性及重試不出現(xiàn)數(shù)據(jù)重復(fù)機制忠烛、kafka的partition的幾種優(yōu)點属提?
參考后續(xù)文章《kafka基礎(chǔ)原理》