目前知識(shí)列出了個(gè)人的技術(shù)棧包含的內(nèi)容,后續(xù)慢慢補(bǔ)充文章
1java基礎(chǔ)
1.1集合
1.1.1Arrays.sort實(shí)現(xiàn)原理
comparable&Comparator的區(qū)別
對于需要排序的集合或者數(shù)組不是單純數(shù)字型時(shí)帜消,通痴醴疲可以使用comparator或者comparble嘱丢,以簡單的方式實(shí)現(xiàn)對象排序或者自定義排序川无。
Comparator強(qiáng)行對某個(gè)對象collection進(jìn)行整體排序的比較函數(shù)裹纳,可以將comparator傳遞給collections.sort悦昵。一個(gè)類實(shí)現(xiàn)了Comparatable接口則表明這個(gè)類的對象之間是可以相互比較的歧斟,這個(gè)類對象組成的結(jié)合就可以直接使用sort方法排序纯丸。
Java 6中使用的是mergeSort,而在java 7中静袖,內(nèi)部實(shí)現(xiàn)換成TimSort觉鼻,而對對象間比較的實(shí)現(xiàn)要求更加嚴(yán)格。
Timsort屬于穩(wěn)定的排序算法队橙,最大的特點(diǎn)是充分利用數(shù)組中已經(jīng)存在的順序坠陈。
1.1.2foreach&while
foreach依賴Ienumerable ,for依靠下標(biāo)定位。在固定長度或者長度不需要計(jì)算的時(shí)候for效率高捐康;在不確定長度或計(jì)算有性能損耗的時(shí)候用foreach;使用foreach會(huì)鎖定集合中的對象仇矾,期間不能修改。
1.1.3arrayList & LinkedList
1.1.4hashMap/hashtable
1.1.5treemap
1.2Math及double\float精度問題
采用BigDecimal(String val)
1.3動(dòng)態(tài)代理
都實(shí)現(xiàn)了map接口解总,主要區(qū)別線程安全性贮匕、同步(synchoronization)、速度』ǚ悖現(xiàn)在多線程可以采用ConcurrentHashMap刻盐,其采用鎖分段技術(shù)
HashMap的迭代器為Iterator,HashTable的迭代器是Enumerator不是fail-fast劳翰,當(dāng)有其他線程改變hashMap的結(jié)構(gòu)(增加或者移除元素)會(huì)拋出ConcurrentModificationException
Map.Entry\Bucket
hashing的概念
HashMap中解決碰撞的方法,hashCode返回相同出現(xiàn)碰撞敦锌,盡量使用String、int不可變類
equals和hashCode的應(yīng)用及其重要性
不可變對象的好處
HashMap多線程的條件競爭
重新調(diào)整HashMap的大小
參考文章www.importnew.com/7099.html
1.4反射
1.5cloneable原理佳簸,深拷貝or淺拷貝
1.6java NIO使用
netty\mina
1.7線程池
1.種類及其區(qū)別
2.使用場景
3.實(shí)現(xiàn)原理和線程調(diào)度過程
4.如何優(yōu)化乙墙、調(diào)優(yōu)
5.最大線程數(shù)目根據(jù)什么調(diào)整
1.8鎖,ReentrantLock
mutex互斥
悲觀鎖溺蕉、樂觀鎖
2算法&數(shù)據(jù)結(jié)構(gòu)&設(shè)計(jì)模式
2.1海量URL去重問題(布隆過濾器)
2.2數(shù)組和鏈表數(shù)據(jù)結(jié)構(gòu)描述及其時(shí)間復(fù)雜度
2.3二叉樹遍歷
2.4快速排序
3JVM
3.1內(nèi)存模型
3.2GC
4JUC伶丐、并發(fā)相關(guān)
4.1Volitle
4.2CAS
4.3threadlocal的原理、作用疯特,使用注意
ThreadLocal線程變量副本哗魂,在Spring中管理Request作用域中的Bean、事務(wù)管理漓雅、任務(wù)調(diào)度录别、AOP等模塊都有出現(xiàn)朽色。
4.4ThreadPoolExecutor
4.5synchronized和lock的區(qū)別
4.6concurrenthashMap
4.7Fork/Join框架及其實(shí)現(xiàn)原理
5Spring
5.1AOP與IOC的實(shí)現(xiàn)原理
5.2MVC的原理
1.controller是單例還是多例?如何保證并發(fā)的安全组题。
5.3BeanFactory&FactoryBean的區(qū)別
5.4cglib如何實(shí)現(xiàn)對接口的實(shí)現(xiàn)進(jìn)行代理
5.5事務(wù)的傳播葫男、隔離級(jí)別,實(shí)現(xiàn)原理
5.6ThreadLocal在spring中的應(yīng)用
5.7Mybatis的底層實(shí)現(xiàn)
5.8Spring-boot的特性崔列、優(yōu)勢及其適用場景
5.9spring-cloud
配置梢褐、熔斷、路由等
5.10spring-security
5.11spring-session
5.12quartz&timer的對比
6分布式
6.1理論&原理
6.1.1一致性赵讯、2PC盈咳、3PC
一致性:相互獨(dú)立的節(jié)點(diǎn)之間如何達(dá)成一項(xiàng)決議的問題。常見的一致性問題:數(shù)據(jù)庫事務(wù)提交边翼、leader選舉鱼响、序列號(hào)生成等
一致性需要滿足的條件:agreement全認(rèn)同;validity值合法组底;termination可結(jié)束丈积;asynchronous消息傳遞異步無序;fail-stop節(jié)點(diǎn)宕機(jī)债鸡;fail-recover節(jié)點(diǎn)宕機(jī)恢復(fù)江滨;network-partition網(wǎng)絡(luò)分化,網(wǎng)絡(luò)出現(xiàn)問題娘锁,將N個(gè)節(jié)點(diǎn)隔離成多個(gè)部分牙寞;byzntine failure拜占庭將軍問題,不按套路出牌拋出干擾決議的信息莫秆。
6.1.2選舉间雀、多數(shù)派和租約
election選舉是分布式系統(tǒng)實(shí)踐中常見的問題,通過打破節(jié)點(diǎn)之間的對等關(guān)系镊屎,選的leader(Master\cordinator)有助于實(shí)現(xiàn)事務(wù)的原子性惹挟、提升決議效率。
多數(shù)派quorum是在網(wǎng)絡(luò)分化的情況下達(dá)成決議一致性缝驳,在leader選舉的場景下幫助我們選出唯一的leader连锯。
租約(lease)在一定期限內(nèi)給予節(jié)點(diǎn)特定權(quán)利,也可以實(shí)現(xiàn)leader選舉用狱,保證在一個(gè)時(shí)刻最多只有一個(gè)leader运怖。為了避免在選舉的時(shí)候只使用心跳機(jī)制會(huì)由于網(wǎng)絡(luò)擁塞或者瞬斷出現(xiàn)雙主的問題。lease最初提出用于解決分布式緩存一致性問題夏伊,后在分布式鎖等多方面都有引用
選舉bully算法
6.1.3CAP
consistency數(shù)據(jù)一致性摇展;所有的讀都讀取到最新的數(shù)據(jù),又稱為原子性atomic溺忧、線性一致性linearizable咏连。
availability服務(wù)可用性盯孙;所有讀寫請求在一定時(shí)間內(nèi)得到響應(yīng),可終止祟滴、不會(huì)一直等待
partition-tolerance分區(qū)容錯(cuò)性振惰;在網(wǎng)絡(luò)分區(qū)的情況下,被分隔的節(jié)點(diǎn)仍能正常對外服務(wù)
6.1.4一致性協(xié)議
paxos垄懂、raft骑晶、ZAB
Raft將問題分解和具體化,leader統(tǒng)一處理變更操作請求埠偿,一致性協(xié)議的作用具化為保證節(jié)點(diǎn)操作日志副本(log replication)一致透罢,以term作為邏輯時(shí)鐘保證時(shí)序榜晦,節(jié)點(diǎn)運(yùn)行相同狀態(tài)機(jī)得到一致結(jié)果冠蒋。
ZAB zookerper的內(nèi)部用到的一致性協(xié)議,保證強(qiáng)一致性乾胶。
6.1.5paxos算法及其協(xié)議
paxos協(xié)議在節(jié)點(diǎn)宕機(jī)抖剿、消息無序或丟失、網(wǎng)絡(luò)分化的場景下保證決議的一致性協(xié)議识窿。
將節(jié)點(diǎn)分為兩類斩郎,proposer申請人、提案人喻频,參與決議的為acceptor缩宜。learner、leader
6.2消息(適用場景甥温、有哪些消息組件锻煌、消息丟失問題)
1.適用場景
2.都有哪些MQ,區(qū)別是什么
3.如何保證數(shù)據(jù)不丟失
4.MQ的連接是線程安全的嗎姻蚓?
6.3RMI
6.4RPC
6.5傳輸
6.6路由
6.7存儲(chǔ)
6.8緩存
memcached ehcachedredis
6.9接口冪等性
6.10熔斷宋梧、降級(jí)等機(jī)制
6.11dubbo
6.11.1應(yīng)用場景
6.11.2底層實(shí)現(xiàn)原理和機(jī)制
6.12zookeeper
分布式協(xié)調(diào)技術(shù)。
1.數(shù)據(jù)模型Znode
2.適用場景
分布式鎖服務(wù)狰挡、配置維護(hù)捂龄、組服務(wù)、分布式消息隊(duì)列加叁、分布式通知/協(xié)調(diào)
3.原理
4.watch機(jī)制
6.13數(shù)據(jù)的垂直拆分倦沧、水平拆分。
1.數(shù)據(jù)庫的分庫分表策略
2.如何解決全表查詢問題
6.14redis
1.并發(fā)競爭如何解決它匕?
2.Redis事務(wù)的CAS
3.緩存穿透的解決辦法
6.15分布式鎖
6.16分布式事務(wù)
7數(shù)據(jù)庫
7.1mysql的引擎
myISAM索引方式為非聚集
innoDB
區(qū)別:
MyISAM的索引文件和數(shù)據(jù)文件是分離的展融,索引文件保存數(shù)據(jù)記錄的地址。InnoDB中標(biāo)數(shù)據(jù)文件本身就是按照B+tree組織的索引結(jié)構(gòu)超凳,在葉節(jié)點(diǎn)data保存了完整的數(shù)據(jù)記錄愈污,索引的key就是主鍵耀态。所以MyISAM可以無主鍵innoDB必須有主鍵。
與MYISAM索引不同的是INNODB輔助索引data域存儲(chǔ)相應(yīng)記錄主鍵的值而不是地址暂雹,所以檢索需要兩遍索引首装。因?yàn)樗休o助索引都引用主索引,過長的主索引令輔助索引變得過大杭跪。另外使用非單調(diào)的主鍵會(huì)造成插入新紀(jì)錄的數(shù)據(jù)文件為了維持B+tree的特性而頻繁的分裂調(diào)整仙逻。
7.2innoDB的文件結(jié)構(gòu)
7.3索引(索引樹的維護(hù)、符合索引)
索引是幫助MYSQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)涧尿。索引的數(shù)據(jù)結(jié)構(gòu)系奉,常用的B+tree,每個(gè)葉子節(jié)點(diǎn)不但存放了索引鍵的相關(guān)信息還添加了相鄰葉子節(jié)點(diǎn)的指針姑廉。
B-tree/B+tree
主存存取原理(通過隨機(jī)讀寫RAM缺亮,通過地址總線與數(shù)據(jù)總線讀寫,不存在機(jī)械操作)
磁盤存取原理(磁盤IO存在機(jī)械運(yùn)動(dòng)損耗)
局部性原理與預(yù)讀(或讀取一頁或多頁【4k】的數(shù)據(jù)到主存)
詳見:http://blog.jobbole.com/24006
myISAM與innoDB都采用B+tree的索引數(shù)據(jù)結(jié)構(gòu)桥言,但是實(shí)現(xiàn)不相同萌踱。
7.4mysql的優(yōu)化
MYSql的優(yōu)化分為結(jié)構(gòu)優(yōu)化和查詢優(yōu)化。必須做好4項(xiàng)工作:數(shù)據(jù)庫設(shè)計(jì)号阿、sql語句優(yōu)化并鸵、數(shù)據(jù)庫參數(shù)配置、恰當(dāng)?shù)挠布Y源和操作系統(tǒng)扔涧。
結(jié)構(gòu)優(yōu)化中高性能索引策略
explain查看時(shí)cardinality索引基數(shù)
select_type simple不包括union或子查詢园担;primary一個(gè)需要union或者包含子查詢的select。
type查詢使用的類型枯夜,type=const表示通過索引一次就找到了;type=all表示為全表索引;type=rel認(rèn)為多個(gè)匹配行弯汰,聯(lián)合索引。順序:
system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL一般來說至少range最好是ref
possible_keys使用哪個(gè)索引找到的行如果為空卤档,則沒有相關(guān)的索引
key顯示使用的鍵蝙泼,如果沒有索引為nul.key=primary表示使用了主鍵;key=null表示沒有用到索引
key_len顯示使用鍵的長度
rows遍歷了多少行找到的劝枣,但是innodb不準(zhǔn)確
extra only index意味只用到索引樹汤踏。where
used使用上了where限制。impossible where標(biāo)識(shí)用不著where舔腾,一般就是沒有查詢出什么來溪胶。
1.最左前綴原理
7.5高并發(fā)如何安全的修改同一行數(shù)據(jù)?樂觀鎖稳诚、悲觀鎖哗脖?行級(jí)別的鎖有哪幾種?
7.6慢查詢?nèi)罩?/p>
配置my.ini
long_query_time=1
log-show-queries=路徑
7.7Semi-sync & group
replication
7.8主從復(fù)制
8大數(shù)據(jù)相關(guān)
8.1hadoop
8.2hive、Hbase
8.3storm才避、spark
8.4kafka
9應(yīng)用服務(wù)器
10工具&opts
10.1git
10.2mock
10.3jenkins
10.4Cat日志監(jiān)控
10.5postman或者RAP
10.6灰度
10.7docker/kubernetes
10.8linux