服務(wù)端備忘

消息隊(duì)列

  1. kafka

  • 核心概念:
    Broker:服務(wù)器節(jié)點(diǎn)為broker
    Topic:消息類別
    Partition:一個(gè)Topic分隔為1個(gè)或多個(gè)Partition,單個(gè)Partition中是有序的,如果需要保證topic有序需要將partition設(shè)置為1
    Producer:
    Consumer:
    Counsumer Group: 消費(fèi)者再平衡rebalance,將分區(qū)分配給對(duì)應(yīng)的消費(fèi)者湿酸。一個(gè)分區(qū)對(duì)于同一個(gè)消費(fèi)組只對(duì)應(yīng)一個(gè)消費(fèi)者,但是可以對(duì)應(yīng)多個(gè)不同消費(fèi)組的消費(fèi)者
    Leader:
    Follwer:

  • kafka使用Zookeeper來(lái)做協(xié)調(diào)服務(wù)闲擦,controller來(lái)負(fù)責(zé)partition的分配和leader選舉

  • ISR: in sync replicas 同步副本

  • AR: assigned replicas

  • OSR: out sync replicas

  • AR = ISR + OSR

  • 順序?qū)懀?/p>

  • 零拷貝

  • mmap

  • 多副本同步, 集群拓展,高可用

  • partition分區(qū)數(shù)決定了同組消費(fèi)者個(gè)數(shù)的上限

  • 消費(fèi)組保存了offset
    Kafka的分區(qū)數(shù)和消費(fèi)者個(gè)數(shù)
    參考

   spring.kafka.producer.acks取值:
   - acks=0 生產(chǎn)者不會(huì)等待來(lái)自服務(wù)器的任何確認(rèn)究抓,該記錄將立即添加到套接字緩沖區(qū)并視為已發(fā)送邪财,這種情況下,無(wú)法保證服務(wù)器已經(jīng)收到記錄应狱,并且重試配置也不會(huì)生效(因?yàn)榭蛻舳送ǔ2粫?huì)知道任何故障)
   - acks=1 這意味著leader會(huì)將記錄寫入本地日志共郭,但無(wú)需等待所有副本服務(wù)器的完全確認(rèn)即可做出回應(yīng),在這種情況下疾呻,如果leader在確認(rèn)記錄后立即失敗除嘹,但在將數(shù)據(jù)復(fù)制到所有副本服務(wù)器之前,則記錄將會(huì)丟失
   - acks=all 這意味著leader將等待完整的同步副本集以確認(rèn)記錄岸蜗,這保證了只要至少一個(gè)副本服務(wù)器任然存活就不會(huì)丟失尉咕,這是最強(qiáng)有力的保證,相當(dāng)于acks=-1的設(shè)置

kafka消費(fèi)模式
AbstractMessageListenerContainer.AckMode的枚舉中定義

  • MANUAL
  • MANUAL_IMMEDIATE
  • RECORD
  • TIME
  • COUNT

kafka高可用
20道經(jīng)典的Kafka面試題詳解
kafka面試題
kafka為什么這么快
kafka&RocketMq順序消費(fèi)
kafka集成springboot
kafka集成springcloud todo

kafka的文件系統(tǒng)結(jié)構(gòu)設(shè)計(jì):


文件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
  1. RocketMQ

Broker: 集群中的節(jié)點(diǎn)
NameServer:無(wú)狀態(tài)節(jié)點(diǎn)璃岳,集群部署年缎,節(jié)點(diǎn)之間無(wú)信息同步,主要是維護(hù)Broker的信息铃慷,Topic信息晦款,broker會(huì)定時(shí)發(fā)送心跳信息到NameServer
Topic:主題
Tag:標(biāo)簽
Queue:隊(duì)列,一個(gè)topic會(huì)對(duì)應(yīng)多個(gè)Queue,順序消息的話需要設(shè)置為順序消費(fèi)枚冗,發(fā)送時(shí)通過(guò)隊(duì)列選擇器將數(shù)據(jù)發(fā)送到同一個(gè)隊(duì)列

事務(wù)消息: 流程: 
1.發(fā)送half消息 
2.執(zhí)行本地事務(wù) 
3.根據(jù)本地事務(wù)成功或者失敗發(fā)送狀態(tài) 
4.如果因?yàn)榫W(wǎng)絡(luò)等其他因素沒(méi)有收到事務(wù)執(zhí)行的狀態(tài),mq服務(wù)端通過(guò)回查接口獲取事務(wù)的執(zhí)行狀態(tài)



RocketMQ架構(gòu)設(shè)計(jì)圖


架構(gòu)設(shè)計(jì)圖

參考


MySQL

1.數(shù)據(jù)庫(kù)分表分庫(kù)蛇损,shardingjdbc 
  概念:1.邏輯表  2.廣播表 
2.mvcc機(jī)制  multi version concurrency control 
3.索引底層數(shù)據(jù)結(jié)構(gòu)
  b+樹(shù)赁温,b樹(shù)
4.redolog undolog
5.事務(wù)隔離級(jí)別
  讀未提交 Read Uncommitted
  讀已提交 Read Committed
  可重復(fù)讀-mysql默認(rèn)隔離級(jí)別 Repeatable Read
  串行化 Serial
6.鎖機(jī)制
  間隙鎖,可重復(fù)讀機(jī)制下的鎖機(jī)制淤齐,主鍵命中記錄為行鎖股囊,否則鎖區(qū)間
  行鎖
  表鎖
7.索引失效情況
8.物理結(jié)構(gòu) 最小的存儲(chǔ)單位是頁(yè)
9.索引分類
  1.聚族索引 2.非聚族索引  
MVCC
  • trx_id: 事務(wù)id,遞增的
  • roll_pointer 回滾指針,指向undolog中的上一個(gè)版本的位置
  • 可重復(fù)讀Repeatable Read和讀已提交Read Committed隔離級(jí)別下的實(shí)現(xiàn)
  • ReadView: 讀視圖更啄,RR在第一次select時(shí)生成ReadView稚疹,RC在每次select是都會(huì)生成一個(gè)新的ReadView
  • 參考
間隙鎖
  • 記錄鎖、間隙鎖祭务、臨鍵鎖内狗,都屬于排它鎖;
  • 記錄鎖就是鎖住一行記錄义锥;
  • 間隙鎖只有在事務(wù)隔離級(jí)別 RR 中才會(huì)產(chǎn)生柳沙;
  • 唯一索引只有鎖住多條記錄或者一條不存在的記錄的時(shí)候,才會(huì)產(chǎn)生間隙鎖拌倍,指定給某條存在的記錄加鎖的時(shí)候赂鲤,只會(huì)加記錄鎖噪径,不會(huì)產(chǎn)生間隙鎖;
  • 普通索引不管是鎖住單條数初,還是多條記錄找爱,都會(huì)產(chǎn)生間隙鎖;
    間隙鎖會(huì)封鎖該條記錄相鄰兩個(gè)鍵之間的空白區(qū)域泡孩,防止其它事務(wù)在這個(gè)區(qū)域內(nèi)插入车摄、修改、刪除數(shù)據(jù)珍德,這是為了防止出現(xiàn) 幻讀 現(xiàn)象练般;
  • 普通索引的間隙,優(yōu)先以普通索引排序锈候,然后再根據(jù)主鍵索引排序(多普通索引情況還未研究)薄料;
  • 事務(wù)級(jí)別是RC(讀已提交)級(jí)別的話,間隙鎖將會(huì)失效
  • 參考
  • MySQL加鎖問(wèn)題
索引失效情況
  • 查詢條件 or ,not in ,<> ,is null, is not null
  • 隱式類型轉(zhuǎn)換(不同的字符集或者不同的數(shù)據(jù)類型)
  • like查詢非前綴匹配
  • 復(fù)合索引沒(méi)有用左列字段
  • 對(duì)where字段進(jìn)行函數(shù)操作
  • 參考

分表分庫(kù)
shardingjdbc實(shí)戰(zhàn)
京東shardingjdbc
shardingjdbc實(shí)戰(zhàn)問(wèn)題分析
shardingjdbc


redis

1.數(shù)據(jù)結(jié)構(gòu)
  String
  Hash
  BitMap
  List
    可靠隊(duì)列泵琳。RPOPLPUSH,LREM
  Set
  ZSet skipList跳表
  Geo
  Pub-sub

  jedis,lettuces
2.redis的持久化機(jī)制
  RDB:快照摄职,會(huì)有丟失情況
  AOF:寫命令的日志追加,文件過(guò)大
3.內(nèi)存淘汰策略
  內(nèi)存淘汰機(jī)制:
     A:定時(shí)刪除获列,在設(shè)置了過(guò)期時(shí)間的key中隨機(jī)抽取一部分谷市,將過(guò)期的刪除掉,如果過(guò)期的比例達(dá)到一定值則繼續(xù)此動(dòng)作
     B:惰性刪除
  LRU:最近最少使用
  LFU: 使用頻率最低
  a.no-evication
  b.allkeys-lru
  c.volatile-lru
  d.allkeys-random
  e.volatile-random
  f.allkeys-lfu 
  j.volatile-lfu
  k.volatile-ttl
 4.一致性hash
 5.部署模式
  1.單點(diǎn)
  2.主從击孩,一主多從迫悠,需要手動(dòng)切換
  3.集群 16384個(gè)槽,crc16算法計(jì)算屬于哪個(gè)槽巩梢。然后定向到哪一臺(tái)服務(wù)器
  4.哨兵模式
    a.哨兵是一個(gè)單獨(dú)的進(jìn)程创泄。原理是哨兵通過(guò)發(fā)送命令,等待服務(wù)器響應(yīng)括蝠,從而監(jiān)控運(yùn)行的多個(gè)redis實(shí)例鞠抑,
    b.failover故障切換,主觀下線:一個(gè)哨兵檢測(cè)到主服務(wù)器不可用忌警,當(dāng)多個(gè)哨兵都監(jiān)測(cè)到哨兵不可用時(shí)就會(huì)發(fā)起一次投票搁拙,進(jìn)行failover.切換成功,通過(guò)發(fā)布訂閱通知主服務(wù)器切換法绵,成為客觀下線箕速。
    c.哨兵除了監(jiān)控redis服務(wù)器外,各個(gè)哨兵節(jié)點(diǎn)也會(huì)進(jìn)行監(jiān)控礼烈。
    d.哨兵模式部署弧满,1主2從3哨兵
  5.redission
  6.分布式鎖
    setNX set if not exist ,如果不存在的話設(shè)置成功,如果存在則設(shè)置失敗此熬,加鎖失敗
  7.緩存穿透 明顯不存的數(shù)據(jù)庭呜。布隆過(guò)濾器或者緩存控制
  8.緩存擊穿 熱點(diǎn)數(shù)據(jù)失效導(dǎo)致數(shù)據(jù)擊穿緩存請(qǐng)求數(shù)據(jù)庫(kù)滑进,提前更新,分布式鎖
  9.緩存雪崩 緩存同時(shí)失效募谎。導(dǎo)致請(qǐng)求到數(shù)據(jù)庫(kù)扶关,從而拖垮數(shù)據(jù)庫(kù),分散過(guò)期時(shí)間数冬。
  10.熱點(diǎn)數(shù)據(jù)全部集中到一臺(tái)redis服務(wù)器节槐,可以使用隨機(jī)值將數(shù)據(jù)分布到多臺(tái)服務(wù)器,減少請(qǐng)求傾斜
  11.緩存一致性問(wèn)題 [https://blog.csdn.net/hukaijun/article/details/81010475]
     1.更新數(shù)據(jù)拐纱,刪除緩存
     2.刪除緩存铜异,更新數(shù)據(jù)庫(kù) 延時(shí)雙刪(del cache,udate database,sleep,del cache)
     3.cache aside pattern: 
       a.失效Missing: 從數(shù)據(jù)查詢,加載到緩存
       b.命中Hit: 返回
       c.更新:更新數(shù)據(jù)庫(kù)秸架,失效緩存

redis集群模式傳送門
redis集群模式為什么不使用一致性哈希揍庄,而采用分配哈希槽的模式 答案


zookeeper

分布式協(xié)調(diào)服務(wù),kafka. dubbo. 
zookeeper分布式鎖原理:
  利于zookeeper的臨時(shí)順序節(jié)點(diǎn)东抹,第一個(gè)客戶端創(chuàng)建臨時(shí)順序節(jié)點(diǎn)蚂子,創(chuàng)建成功則加鎖成功,后續(xù)的客戶端查詢是否為集合中的第一個(gè)節(jié)點(diǎn)缭黔,如果不是一個(gè)節(jié)點(diǎn)食茎,會(huì)監(jiān)控前一個(gè)節(jié)點(diǎn)是否被刪除,刪除代表釋放了鎖馏谨。判斷是否為第一個(gè)節(jié)點(diǎn)别渔,如果是則加鎖成功。[https://www.cnblogs.com/ysw-go/p/11444993.html]

InterProcessMutex lock = InterProcessMutex(client,"/lock/my_lock")
lock.acqiure();// 獲取鎖
lock.release();// 釋放鎖

JVM

[https://www.cnblogs.com/chenpt/p/9803298.html]
jvm內(nèi)存模型
1.java虛擬機(jī)棧:線程私有 棧幀惧互,局部變量钠糊、操作數(shù)棧、動(dòng)態(tài)鏈接壹哺、方法出口
2.本地方法棧:線程私有
3.程序計(jì)數(shù)器:線程私有  當(dāng)前線程的行號(hào)指示器
4.堆:線程共享
  年輕代:survivor區(qū),Eden區(qū)
  老年代:
5.方法區(qū):線程共享 類信息艘刚,常量管宵,靜態(tài)變量,運(yùn)行時(shí)常量池

內(nèi)存分配:
   方法逃逸攀甚,鎖消除箩朴,鎖粗化
   即時(shí)編譯JIT
   棧上分配-> TLAB(Thread Local Allocation Buffer線程本地分配緩存區(qū)) -> 是否需要分配到老年代,如果不需要?jiǎng)t分配到Eden區(qū)
   TLAB:默認(rèn)占用Eden區(qū)的1%
   
GC垃圾回收
1.垃圾回收判斷機(jī)制:
  a.可達(dá)性分析秋度,GCROOT引用鏈炸庞,一個(gè)對(duì)象到GCRoot沒(méi)有任何引用鏈時(shí)則認(rèn)為對(duì)象不可用,可以作為GCRoot對(duì)象的有荚斯,虛擬機(jī)棧中引用的對(duì)象埠居,常量查牌,靜態(tài)屬性,native引用的對(duì)象
  b.引用計(jì)數(shù)法滥壕,相互引用問(wèn)題
2.垃圾回收算法
  a.復(fù)制回收算法纸颜,主要是年輕代
  b.標(biāo)記清除,會(huì)產(chǎn)生內(nèi)存碎片
  c.標(biāo)記整理  老年代 CMS收集器 
  d.分代回收
3.垃圾回收器
  a.serial
  b.ParNew
  c.Parallel Scavenge 
  d.serial Old 作為CMS收集器的后備方案绎橘,在并發(fā)收集Concurent Mode Failure時(shí)使用胁孙。
  e.parallel old
  f.CMS
    A:初始標(biāo)記。B:并發(fā)標(biāo)記 C:重新標(biāo)記 D:并發(fā)清除
  j.G1 (garbage first)
    A:可預(yù)測(cè)的停頓称鳞,將堆內(nèi)存劃分為多個(gè)Region區(qū)域涮较,根據(jù)允許的時(shí)間,收集部分Region冈止,從而能在指定時(shí)間內(nèi)完成垃圾回收
 4.垃圾回收概念
   a.并行:多個(gè)線程同時(shí)收集
   b.并發(fā):垃圾回收線程工作的同時(shí)狂票,用戶線程可以繼續(xù)運(yùn)行
   c.吞吐量:CPU運(yùn)行用戶代碼的時(shí)間與CPU總運(yùn)行時(shí)間的比值
   d.STW:Stop the world 
   方法區(qū)垃圾回收
   A.廢棄常量和無(wú)用的類
        回收條件:a.該類的實(shí)例都已經(jīng)被回收 b.加載該類的ClassLoader被回收 c.該類對(duì)應(yīng)的Class沒(méi)有在任何地方引用,無(wú)法通過(guò)反射訪問(wèn)該類的方法
 5.jvm調(diào)優(yōu) 
   [https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html] 參數(shù)詳解
   -Xmx 最大堆
   -Xms 最小堆
   -Xmn 年輕代
   -Xss 棧大小

6.java類加載過(guò)程
加載 -> 驗(yàn)證 -> 準(zhǔn)備 -> 解析 -> 初始化

7.雙親委派機(jī)制:
  當(dāng)某個(gè)類加載器需要加載某個(gè).class文件時(shí)靶瘸,它首先把這個(gè)任務(wù)委托給他的上級(jí)類加載器苫亦,遞歸這個(gè)操作,如果上級(jí)的類加載器沒(méi)有加載怨咪,自己才會(huì)去加載這個(gè)類屋剑。
   


   

JVM 鎖升級(jí)過(guò)程:

  • jdk1.6之前,synchronized是只有兩種鎖狀態(tài)诗眨,無(wú)鎖和重量級(jí)鎖唉匾,加鎖依賴操作系統(tǒng)的互斥量mutex,因此效率低下。
  • jdk1.6之后匠楚,對(duì)synchronized進(jìn)行了優(yōu)化巍膘,鎖的狀態(tài)分為四種,無(wú)鎖芋簿、偏向鎖峡懈、輕量級(jí)鎖、重量級(jí)鎖与斤。
  • 無(wú)鎖:默認(rèn)就是無(wú)鎖狀態(tài)
  • 偏向鎖:當(dāng)一個(gè)線程訪問(wèn)同步代碼塊時(shí)肪康,就會(huì)將鎖狀態(tài)置為偏向鎖狀態(tài)
  • 輕量級(jí)鎖:當(dāng)存在鎖競(jìng)爭(zhēng)(鎖競(jìng)爭(zhēng)的定義:如果多個(gè)線程輪流獲取鎖,并且每次獲取都很順利撩穿,不存在阻塞磷支,那就不存在鎖競(jìng)爭(zhēng),只有當(dāng)某個(gè)線程嘗試獲取鎖時(shí)食寡,發(fā)現(xiàn)鎖已經(jīng)被占用雾狈,只能等待其釋放,這才發(fā)生了競(jìng)爭(zhēng))抵皱,偏向鎖將會(huì)升級(jí)為輕量級(jí)鎖善榛,沒(méi)有搶到鎖的線程將自旋獲取鎖(通過(guò)CAS操作將markWord中的線程id修改為自己線程id),這就是一種忙等待的狀態(tài)辩蛋。會(huì)消耗CPU
  • 重量級(jí)鎖:當(dāng)鎖競(jìng)爭(zhēng)比較嚴(yán)重的時(shí)候(自旋次數(shù)達(dá)到一定的次數(shù),默認(rèn)是10次锭弊,可以通過(guò)jvm[-XX:PreBlockSpin=<n>]參數(shù)修改)堪澎,鎖將升級(jí)為重量級(jí)鎖,這時(shí)候,其他線程想要獲取鎖的線程將處于阻塞狀態(tài)味滞。

G1收集器可調(diào)參數(shù)

  • 暫停時(shí)間: -XX:MaxGcPauseMills 默認(rèn)是200ms,垃圾回收器會(huì)盡量達(dá)成這個(gè)時(shí)間
  • Region大小 -XX:G1RegionHeapSize,來(lái)指定樱蛤,若未指定則默認(rèn)最多生成2048塊,每塊的大小需要為2的冪次方剑鞍,如1,2,4,8,16,32昨凡,最大值為32M。Region的大小主要是關(guān)系到Humongous Object的判定蚁署,當(dāng)一個(gè)對(duì)象超過(guò)Region大小的一半時(shí)便脊,則為巨型對(duì)象,那么其會(huì)至少獨(dú)占一個(gè)Region光戈,如果一個(gè)放不下哪痰,會(huì)占用連續(xù)的多個(gè)Region。當(dāng)一個(gè)Humongous Region放入了一個(gè)巨型對(duì)象久妆,可能還有不少剩余空間晌杰,但是不能用于存放其他對(duì)象,這些空間就浪費(fèi)了筷弦。所以如果應(yīng)用里有很多大小差不多的巨型對(duì)象肋演,可以適當(dāng)調(diào)整Region的大小,盡量讓他們以普通對(duì)象的形式分配烂琴,合理利用Region空間
  • 新生代比例:-XX:G1NewSizePercent爹殊,默認(rèn)值5%,上限值-XX:G1MaxNewSizePercent(默認(rèn)值60%)
  • 參考來(lái)源

Java基礎(chǔ)

HashMap原理
   數(shù)組加鏈表
   默認(rèn)大小是16
   擴(kuò)容 2的冪次方
   負(fù)載因子 0.75
   數(shù)組不可變奸绷,所以如果在知道容量大小的情況下梗夸,初始化容量。減少因?yàn)閿?shù)組復(fù)制導(dǎo)致的開(kāi)銷号醉。
   線程不安全绒瘦,線程安全版本ConcurrentHashMap.
   1.8優(yōu)化,鏈表的長(zhǎng)度大于8時(shí)扣癣,鏈表轉(zhuǎn)為紅黑樹(shù),小于6時(shí)會(huì)轉(zhuǎn)回鏈表
ConcurrentHashMap
   線程安全
   1.7通過(guò)分段鎖機(jī)制
   1.8轉(zhuǎn)為通過(guò)CAS加synchronized憨降。數(shù)據(jù)結(jié)構(gòu)也轉(zhuǎn)為紅黑樹(shù)
ArrayList&LinedkList
   ArrayList:
     數(shù)組實(shí)現(xiàn)父虑,支持隨機(jī)訪問(wèn),搜索和讀取效率高授药。刪除數(shù)據(jù)效率低士嚎,因?yàn)橐苿?dòng)后面的數(shù)據(jù)呜魄,默認(rèn)容量為10,擴(kuò)容1.5倍莱衩。
   LinkedList:
     鏈表實(shí)現(xiàn)爵嗅,不支持隨機(jī)訪問(wèn),搜索效率低笨蚁。插入刪除效率高睹晒。
CAS
   無(wú)鎖化
   自旋 消耗CPU
volatile:
   內(nèi)存屏障,禁止指令重排括细,內(nèi)存可見(jiàn)性伪很,對(duì)volatile修飾的變量的修改會(huì)立即同步到主內(nèi)存,讀取時(shí)也會(huì)直接從主內(nèi)存讀取奋单,而不會(huì)讀取工作內(nèi)存

鎖升級(jí)
- 偏向鎖:?jiǎn)蝹€(gè)線程锉试,Java偏向鎖旨在對(duì)于無(wú)并發(fā)爭(zhēng)用的前提下,進(jìn)行真正意義上的無(wú)鎖同步
- 輕量級(jí)鎖:多于一個(gè)線程競(jìng)爭(zhēng)時(shí)會(huì)升級(jí)為輕量級(jí)鎖
- 重量級(jí)鎖: 有實(shí)際競(jìng)爭(zhēng)览濒,且鎖競(jìng)爭(zhēng)時(shí)間長(zhǎng)

鎖粗化呆盖,鎖消除
- 在開(kāi)啟逃逸分析和鎖消除的情況下(-server -XX:+DoEscapeAnalysis -XX:+EliminateLocks),如果編譯器認(rèn)為鎖定區(qū)域沒(méi)有逃出作用域贷笛,不存在共享數(shù)據(jù)競(jìng)爭(zhēng)問(wèn)題就會(huì)消除不必要的加鎖
   
   
單例模式应又,雙重檢查鎖機(jī)制
1.懶漢模式
2.餓漢模式
public class SafeDoubleCheckedLocking {
    private volatile static Instance instance;

    public static Instance getInstance() {
        if (instance == null) {
            synchronized (SafeDoubleCheckedLocking.class) {
                if (instance == null)
                    instance = new Instance();//instance為volatile,現(xiàn)在沒(méi)問(wèn)題了
            }
        }
        return instance;
    }
}

線程池
1.線程池核心參數(shù)
  核心線程數(shù)
  最大線程數(shù)
  隊(duì)列
  拒絕策略
    a.直接丟棄 discard 
    b.丟棄最老的 discardOldest
    c.拋出異常 abort   
    d.調(diào)用線程執(zhí)行 callerRunPolicy
  keepAliveTime:線程的空閑存活時(shí)間
  
 

線程池execute時(shí)的邏輯:

  • 如果此時(shí)線程池中的數(shù)量小于corePoolSize昨忆,即使線程池中的線程都處于空閑狀態(tài)丁频,也要?jiǎng)?chuàng)建新的線程來(lái)處理被添加的任務(wù)。
    如果此時(shí)線程池中的數(shù)量等于 corePoolSize邑贴,但是緩沖隊(duì)列 workQueue未滿席里,那么任務(wù)被放入緩沖隊(duì)列。
  • 如果此時(shí)線程池中的數(shù)量大于corePoolSize拢驾,緩沖隊(duì)列workQueue滿奖磁,并且線程池中的數(shù)量小于maxPoolSize,建新的線程來(lái)處理被添加的任務(wù)繁疤。
  • 如果此時(shí)線程池中的數(shù)量大于corePoolSize咖为,緩沖隊(duì)列workQueue滿,并且線程池中的數(shù)量等于maxPoolSize稠腊,那么通過(guò)handler所指定的策略來(lái)處理此任務(wù)躁染。也就是:處理任務(wù)的優(yōu)先級(jí)為:核心線程corePoolSize、任務(wù)隊(duì)列workQueue架忌、最大線程 maximumPoolSize吞彤,如果三者都滿了,使用handler處理被拒絕的任務(wù)。
  • 當(dāng)線程池中的線程數(shù)量大于corePoolSize時(shí)饰恕,如果某線程空閑時(shí)間超過(guò)keepAliveTime挠羔,線程將被終止。這樣埋嵌,線程池可以動(dòng)態(tài)的調(diào)整池中的線程數(shù)破加。

線程的幾個(gè)狀態(tài) 參考

image.png

image.png


springboot

springboot自動(dòng)配置原理
@EnableAutoConfiguration
加載META-INF下的spring.factories下的EnableAutoConfiguration的值,將這些值作為自動(dòng)配置類導(dǎo)入到spring容器中雹嗦。這些自動(dòng)配置類通過(guò)@Condition條件式注解加載相應(yīng)的bean到spring容器


BeanFactory,FactoryBean,ApplicationContext

spring ioc 
依賴注入范舀,控制反轉(zhuǎn),將對(duì)象的創(chuàng)建獲取交給spring容器來(lái)管理俐银。降低耦合


springboot 生命周期
Bean實(shí)例化
↓
bean屬性注入
↓
BeanNameAware.setBeanName
↓
BeanFactoryAware.setBeanFactory
↓
ApplicationContextAware.setApplicationContext
↓ bean的初始化
BeanPostProcessor.postProcessBeforeInitialization
↓
IninitalizingBean.afterPropertiesSet
↓
init-method
↓
BeanPostProcessor.postProcessAfterInitialization
↓
bean的使用
↓ bean的銷毀
DisposableBean.Destory
↓
destory-method方法


AOP:基于動(dòng)態(tài)代理模式
jdk動(dòng)態(tài)代理:實(shí)現(xiàn)接口
cglib動(dòng)態(tài)代理:字節(jié)碼生成技術(shù)尿背,繼承類,對(duì)final類無(wú)效

動(dòng)態(tài)代理:實(shí)現(xiàn)InvocationHandler
靜態(tài)代理:實(shí)現(xiàn)相同的接口


springboot自動(dòng)裝配原理
spring如何解決循環(huán)依賴問(wèn)題

一級(jí)緩存:
/** 保存所有的singletonBean的實(shí)例 */
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);

二級(jí)緩存:
/** 保存所有早期創(chuàng)建的Bean對(duì)象捶惜,這個(gè)Bean還沒(méi)有完成依賴注入 */
private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16);
三級(jí)緩存:
/** singletonBean的生產(chǎn)工廠*/
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);
 
/** 保存所有已經(jīng)完成初始化的Bean的名字(name) */
private final Set<String> registeredSingletons = new LinkedHashSet<String>(64);
 
/** 標(biāo)識(shí)指定name的Bean對(duì)象是否處于創(chuàng)建狀態(tài)  這個(gè)狀態(tài)非常重要 */
private final Set<String> singletonsCurrentlyInCreation =
    Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>(16));


spring cloud

注冊(cè)中心
  eureka,consul,zookeeper田藐,nacos
網(wǎng)關(guān)
  springcloud gateway,zuul
斷路器
  hystrix,sentinel
  hystrix:基于線程隔離、信號(hào)量吱七,控制影響范圍汽久。斷路器,當(dāng)失敗次數(shù)達(dá)到一定比例后會(huì)開(kāi)啟熔斷踊餐,返回fallback,定時(shí)探測(cè)景醇,當(dāng)服務(wù)恢復(fù)后,可以關(guān)閉熔斷機(jī)制吝岭。命令模式三痰。hystrixCommand
openFeign
ribbon
springcloud Bus,Stream
配置中心
  nacos,spring config,disconf,阿波羅,consul
鏈路追蹤
  zipkin,sluth
  
  
  
分布式事務(wù)
zookeeper和eureka
CAP定理,一致性窜管,可用性散劫,分區(qū)容錯(cuò)性,只能同時(shí)滿足兩項(xiàng)
BASE理論:基本可用幕帆,軟狀態(tài)获搏,最終一致性
seta:強(qiáng)一致性方案
基于消息表的最終一致性
基于事務(wù)消息
兩階段提交
spring cloud 組件

consul配置中心
consul注冊(cè)中心
eureka注冊(cè)中心心跳機(jī)制
Hystrix
Feign


Dubbo

Dubbo官方文檔

Dubbo架構(gòu)圖


Dubbo Arctitecture

Dubbo注解配置示例
Dubbo SPI
Dubbo 負(fù)載均衡

  • 最少活躍數(shù)LeastActive: 發(fā)送請(qǐng)求數(shù)據(jù)減去返回請(qǐng)求數(shù)的值越少的優(yōu)先調(diào)用,能者多勞
    sPI

ElasticSearch


golang

channel
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末失乾,一起剝皮案震驚了整個(gè)濱河市常熙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碱茁,老刑警劉巖裸卫,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纽竣,居然都是意外死亡墓贿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)募壕,“玉大人,你說(shuō)我怎么就攤上這事语盈〔障冢” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵刀荒,是天一觀的道長(zhǎng)代嗤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)缠借,這世上最難降的妖魔是什么干毅? 我笑而不...
    開(kāi)封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮泼返,結(jié)果婚禮上硝逢,老公的妹妹穿的比我還像新娘。我一直安慰自己绅喉,他們只是感情好渠鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著柴罐,像睡著了一般徽缚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上革屠,一...
    開(kāi)封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天凿试,我揣著相機(jī)與錄音,去河邊找鬼似芝。 笑死那婉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的国觉。 我是一名探鬼主播吧恃,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼麻诀!你這毒婦竟也來(lái)了痕寓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蝇闭,失蹤者是張志新(化名)和其女友劉穎呻率,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呻引,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡礼仗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片元践。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡韭脊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出单旁,到底是詐尸還是另有隱情沪羔,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布象浑,位于F島的核電站蔫饰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏愉豺。R本人自食惡果不足惜篓吁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚪拦。 院中可真熱鬧杖剪,春花似錦、人聲如沸外盯。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饱苟。三九已至孩擂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間箱熬,已是汗流浹背类垦。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留城须,地道東北人蚤认。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像糕伐,于是被迫代替她去往敵國(guó)和親砰琢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一良瞧、Java 基礎(chǔ)知識(shí) 1陪汽、Object 類相關(guān)方法 getClass 獲取當(dāng)前運(yùn)行時(shí)對(duì)象的 Class 對(duì)象。 ...
    李大本事就是我閱讀 758評(píng)論 0 0
  • 一褥蚯、Java 基礎(chǔ)知識(shí) 1挚冤、Object 類相關(guān)方法 getClass獲取當(dāng)前運(yùn)行時(shí)對(duì)象的 Class 對(duì)象。 h...
    AYSAML閱讀 10,818評(píng)論 2 21
  • [TOC] 6.1 協(xié)議設(shè)計(jì) 在實(shí)際應(yīng)用中赞庶, Kafka 經(jīng)常被用作高性能训挡、可擴(kuò)展的消息中間件 澳骤。 Kafka 自...
    tracy_668閱讀 1,190評(píng)論 0 6
  • [TOC]DelayedOperationPurgatory是一個(gè)相對(duì)獨(dú)立的組件,它的主要功能是管理延遲操作澜薄。De...
    tracy_668閱讀 1,432評(píng)論 0 2
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理为肮,服務(wù)發(fā)現(xiàn),斷路器肤京,智...
    卡卡羅2017閱讀 134,702評(píng)論 18 139