2018-05-11

  • JPA 多數(shù)據(jù)源實現(xiàn)

  • 線程同步方法

  • 有幾種線程池

  • CAS機制

CAS有3個操作數(shù),內(nèi)存值V,舊的預(yù)期值A(chǔ),要修改的新值B。當(dāng)且僅當(dāng)預(yù)期值A(chǔ)和內(nèi)存值V相同時,將內(nèi)存值V修改為B,否則什么都不做。
現(xiàn)代的CPU提供了特殊的指令,可以自動更新共享數(shù)據(jù),而且能夠檢測到其他線程的干擾,而 compareAndSet() 就用這些代替了鎖定。
CAS通過調(diào)用JNI的代碼實現(xiàn)的。JNI:Java Native Interface為JAVA本地調(diào)用,允許java調(diào)用其他語言。
而compareAndSwapInt就是借助C來調(diào)用CPU底層指令實現(xiàn)的。
下面從分析比較常用的CPU(intel x86)來解釋CAS的實現(xiàn)原理。
http://zl198751.iteye.com/blog/1848575

  • CAS 全稱

Compare and Swap(比較和交換)

  • 垃圾回收機制

可達性算法 新生代每清除一次記1 新生代 達到15歲 移動到老年代

新生代 使用 復(fù)制算法
每次按內(nèi)存容量將內(nèi)存劃分為等大小的兩塊。每次只使用其中一塊,當(dāng)這一塊內(nèi)存滿后將尚存活的對象復(fù)制到另一塊上去,把已使用的內(nèi)存清掉。
每次只使用其中一塊,在垃圾回收時,將正在使用的內(nèi)存中的存活對象復(fù)制到未使用的內(nèi)存塊中,之后,清除正在使用的內(nèi)存塊中的所有對象,交換兩個內(nèi)存的角色,完成垃圾回收

復(fù)制算法原理 (新生代)

Survivor區(qū),一塊叫From,一塊叫To,對象存在Eden和From塊。當(dāng)進行GC時,Eden存活的對象全移到To塊,而From中,存活的對象按年齡值確定去向,當(dāng)達到一定值(年齡閾值,通過-XX:MaxTenuringThreshold可設(shè)置)的對象會移到年老代中,沒有達到值的復(fù)制到To區(qū),經(jīng)過GC后,Eden和From被清空。
即若只分一塊Survivor,在清除Survivor區(qū)已死亡的對象時,因為此刻的Survivor區(qū)還有存活的對象,清除要比分兩塊Survivor麻煩,兩塊的情況,回收時只需將存活的對象移走,剩下的對象直接清理即可。
另外,分成兩塊Survivor,F(xiàn)rom和To分工明確,邏輯理解和技術(shù)實現(xiàn)較簡單。

標(biāo)記整理算法(老年代)

標(biāo)記:它的第一個階段與標(biāo)記/清除算法是一模一樣的,均是遍歷GC Roots,然后將存活的對象標(biāo)記。

整理:移動所有存活的對象,且按照內(nèi)存地址次序依次排列,然后將末端內(nèi)存地址以后的內(nèi)存全部回收。因此,第二階段才稱為整理階段。

  一般來說,大對象會被直接分配到老年代,所謂的大對象是指需要大量連續(xù)存儲空間的對象,最常見的一種大對象就是大數(shù)組,比如:
  byte[] data = new byte[4*1024*1024]
  這種一般會直接在老年代分配存儲空間。

- Java8開始使用G1 Java9正式G1 作為默認(rèn)的垃圾回收
- G1 原理就是 開始全局 使用 標(biāo)記整理算法  包括新生代和老年代   
  • 注冊中心保持高可用

Eureka

自我保護機制
心跳 可以設(shè)置1s 一次 剔除列表
Eureka Server在一定時間內(nèi)沒有接收到某個微服務(wù)實例的心跳,Eureka Server將會注銷該實例(默認(rèn)90秒)。但是當(dāng)網(wǎng)絡(luò)分區(qū)故障發(fā)生時,微服務(wù)與Eureka Server之間無法正常通信,以上行為可能變得非常危險了——因為微服務(wù)本身其實是健康的,此時本不應(yīng)該注銷這個微服務(wù)。

Eureka通過“自我保護模式”來解決這個問題——當(dāng)Eureka Server節(jié)點在短時間內(nèi)丟失過多客戶端時(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么這個節(jié)點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務(wù)注冊表中的信息,不再刪除服務(wù)注冊表中的數(shù)據(jù)(也就是不會注銷任何微服務(wù))。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后,該Eureka Server節(jié)點會自動退出自我保護模式。

綜上,自我保護模式是一種應(yīng)對網(wǎng)絡(luò)異常的安全保護措施。它的架構(gòu)哲學(xué)是寧可同時保留所有微服務(wù)(健康的微服務(wù)和不健康的微服務(wù)都會保留),也不盲目注銷任何健康的微服務(wù)。使用自我保護模式,可以讓Eureka集群更加的健壯、穩(wěn)定。


Consul

  • 最近印象深刻的項目

  • Redis中的數(shù)據(jù)結(jié)構(gòu)有哪些

簡單動態(tài)字符串
鏈表
字典
跳躍表
整數(shù)集合
壓縮列表
對象

  • 使用了zk 和redis 的什么

  • RPC框架比較

  • 三個詞語評價自己

  • Java中幾種Map

    -Hashtable(線程安全--廢棄)、LinkedHashMa(鏈表)、TreeMap(基于紅黑樹)、WeakHashMap、ConcurrentHashMap(線程安全)、HashMap(哈希表 非線程安全
  • 怎么形容Stream 函數(shù)式編程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,789評論 11 349
  • Java8張圖 11、字符串不變性 12、equals()方法、hashCode()方法的區(qū)別 13、...
    Miley_MOJIE閱讀 3,895評論 0 11
  • jvm原理 Java虛擬機是整個java平臺的基石,是java技術(shù)實現(xiàn)硬件無關(guān)和操作系統(tǒng)無關(guān)的關(guān)鍵環(huán)節(jié),是java...
    AI喬治閱讀 17,548評論 21 486
  • 第一種是直接從AppStore上獲取APP的版本號,然后已安裝的App版本號比較判斷是否需要更新,另一種是從服務(wù)器...
    CMD獨白閱讀 1,182評論 0 1
  • 憶那--那一天 念那--那一夜 望那--那一時 信那--那一刻 愛里愛外,家里家外, 心里心外,門里門外, 話里話...
    十二股水泉閱讀 301評論 0 1

友情鏈接更多精彩內(nèi)容