本次更新:20180319
一墨叛、Mysql:
1.S鎖(共享鎖)令境、X鎖(排它鎖):select語(yǔ)句默認(rèn)加S鎖源请;
2.聚簇索引與非聚簇索引:聚簇索引關(guān)鍵字與值存在一起立肘,非聚簇指向主鍵索引馏臭;
3.b+tree:索引樹的深度相同野蝇,效率穩(wěn)定。
3.死鎖:鎖競(jìng)爭(zhēng),順序訪問表绕沈、拆分長(zhǎng)事務(wù)锐想,提前鎖定資源,降低隔離級(jí)別乍狐、添加索引赠摇。
4.定位死鎖:查看mysql日志,查看死鎖對(duì)應(yīng)的表浅蚪;
5.原子性實(shí)現(xiàn)原理:通過redo和undo日志藕帜,保存了未執(zhí)行的步驟以及回滾之前的未完成的操作。
6.隔離性實(shí)現(xiàn)原理:通過樂觀鎖和悲觀鎖實(shí)現(xiàn)惜傲,悲觀鎖如行鎖表鎖等洽故,樂觀鎖如版本id等。
二操漠、Redis:
1.redis與zk實(shí)現(xiàn)分布式鎖原理收津,區(qū)別;
red is超時(shí)后別的線程新加鎖然后被釋放浊伙,可以在val中添加唯一值撞秋。
2.redis cluster集群結(jié)構(gòu);
三嚣鄙、Nginx:
1.統(tǒng)計(jì)nginx訪問日志top10 ip地址吻贿;
2.vip如何實(shí)現(xiàn):lvs;
四哑子、dubbo + zk:
1.dubbo如何做負(fù)載均衡:zk維護(hù)目錄服務(wù)舅列,由算法支撐(如輪詢、隨機(jī))卧蜓;
2.dubbo + zk架構(gòu)圖帐要;
3.zk 的leader選舉;
五弥奸、并發(fā):
1.高并發(fā)場(chǎng)景高可用如何實(shí)現(xiàn)榨惠;
2.編寫代碼讓cpu負(fù)載超過75%;
3.偽共享:緩存行中存儲(chǔ)了兩個(gè)數(shù)據(jù)盛霎,分別在不同的核中寫操作赠橙,導(dǎo)致雙方的數(shù)據(jù)無效,解決方案:緩存行填充(使用volatile修飾的變量追加字節(jié)數(shù)至緩存行的容量)愤炸;
5.公平鎖(FIFO隊(duì)列)期揪、非公平鎖(隨機(jī)搶占);
6.實(shí)現(xiàn)同步的方式:
volatile(可見性、有序性规个、不保證原子性)
synchronize(原子性凤薛、有序性)
threadLocal
Lock
countdownLauch(AQS:通過cas維護(hù)volitile變量state實(shí)現(xiàn)同步)
cyclicBarrier
Smaphore
Future
Thread.join()
ReentrantLock的實(shí)現(xiàn)姓建?通過aqs與cas實(shí)現(xiàn)。
公平鎖與非公平鎖的實(shí)現(xiàn)枉侧?非公平鎖會(huì)去通過cas去獲取鎖引瀑,而公平鎖直接加入隊(duì)列。
六榨馁、事務(wù):
1.臟讀:讀到未提交數(shù)據(jù)憨栽;
2.不可重復(fù)讀:同一事務(wù)讀取兩次,第二次讀取到別人修改的數(shù)據(jù)翼虫;
3.幻讀:同一事務(wù)讀取兩次屑柔,第二次讀取到別人插入的數(shù)據(jù);
4.避免幻讀原理:使用gap鎖珍剑,在索引區(qū)間上下加鎖掸宛。
5.事務(wù)傳播行為:requireNew使用場(chǎng)景:轉(zhuǎn)賬A->B,A扣款操作新啟事務(wù)招拙;
七唧瘾、linux:
1.jmap:dump內(nèi)存快照,怎么分析别凤;
2.jstack出來的線程有哪些狀態(tài)饰序;
3.ps grep命令
八、單例:
1.懶加載:double check:使用synchronize(如何保證保證同步)保證同步规哪;
九求豫、查找:
1.手寫二分法查找;
十诉稍、鎖:
1.lock與synchronize區(qū)別:lock可以手動(dòng)釋放鎖資源等蝠嘉;
十一、GC:
1.GC區(qū)域劃分:年輕代杯巨、年老代蚤告、永久代。
2.young GC原因:young在分配對(duì)象時(shí)eden不足服爷、觸發(fā)young gc杜恰;
3.full gc 原因:
- 調(diào)用System.GC;
- 當(dāng)young區(qū)有晉升old层扶,old區(qū)不足時(shí)箫章,會(huì)觸發(fā)full gc烙荷;
- 永久代分配空間不足觸發(fā)镜会;
4.full gc處理:
- 原因:young區(qū)不足、old區(qū)不足终抽、代碼分配過多對(duì)象戳表、元空間不足桶至;
- 方案:升級(jí)硬件,查看young區(qū)8:1:1是否調(diào)整過匾旭,查看young:old 的1:2是否調(diào)整過镣屹,適當(dāng)調(diào)整old區(qū)域大小、優(yōu)化代碼价涝、增加機(jī)器女蜈;
- 步驟:ps -ef | grep java ,獲取java進(jìn)程,jstat -gcutil 獲取GC情況色瘩,jmap -dump生成堆信息分析伪窖,jmap -his查看對(duì)象分布情況。
十二居兆、代理:
1.JDK和CGLIB的區(qū)別淺談
十三覆山、序列化
jdk:序列化內(nèi)容包括類名,元數(shù)據(jù)泥栖,版本等信息簇宽,效率較低;
json:跨語(yǔ)言吧享,效率較低魏割;
hessian:以map的形式存儲(chǔ)字段,支持弱類型集合耙蔑;
msgpackage:按順序存儲(chǔ)字段见妒,不支持弱類型集合(注意按順序添加字段);
protobuf:需要編寫.proto文件(將字段與類型對(duì)應(yīng))甸陌,根據(jù)不同類型的數(shù)據(jù)采用不同的編碼方式须揣,跨語(yǔ)言,效率極高钱豁;
十四耻卡、服務(wù):
熔斷:服務(wù)可用率降低到一定比例時(shí)為了自保從而拒絕服務(wù);
降級(jí):在自保的過程中牲尺,停掉部分不重要的功能卵酪,通過fallback返回一個(gè)約定好的值;
限流:限制流量谤碳,通過配置線程池實(shí)現(xiàn)溃卡;
Hystrix的設(shè)計(jì)原則包括:
1.資源隔離(每個(gè)服務(wù)都配置相應(yīng)的線程池,隔離資源蜒简,防止雪崩)
2.熔斷器(通過服務(wù)的可用率是控制開關(guān))
3.命令模式(通過繼承command調(diào)用run方法邏輯瘸羡,并添加失敗后的降級(jí)邏輯)
Hystrix的內(nèi)部處理邏輯:先創(chuàng)建Command,在判斷熔斷器是否關(guān)閉搓茬,再獲取線程池執(zhí)行任務(wù)犹赖。
十五队他、分庫(kù)分表:
分庫(kù)后如何解決join問題:使用字典表做冗余、使用ES峻村。
**麸折、內(nèi)存模型
1.Integer占用多少個(gè)字節(jié);