美文网首页
2018-05-11

2018-05-11

作者: Gxgeek | 来源:发表于2018-05-11 01:18 被阅读0次
    • JPA 多数据源实现

    • 线程同步方法

    • 有几种线程池

    • CAS机制

    CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
    现代的CPU提供了特殊的指令,可以自动更新共享数据,而且能够检测到其他线程的干扰,而 compareAndSet() 就用这些代替了锁定。
    CAS通过调用JNI的代码实现的。JNI:Java Native Interface为JAVA本地调用,允许java调用其他语言。
    而compareAndSwapInt就是借助C来调用CPU底层指令实现的。
    下面从分析比较常用的CPU(intel x86)来解释CAS的实现原理。
    http://zl198751.iteye.com/blog/1848575

    • CAS 全称

    Compare and Swap(比较和交换)

    • 垃圾回收机制

    可达性算法 新生代每清除一次记1 新生代 达到15岁 移动到老年代

    新生代 使用 复制算法
    每次按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉。
    每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收

    复制算法原理 (新生代)

    Survivor区,一块叫From,一块叫To,对象存在Eden和From块。当进行GC时,Eden存活的对象全移到To块,而From中,存活的对象按年龄值确定去向,当达到一定值(年龄阈值,通过-XX:MaxTenuringThreshold可设置)的对象会移到年老代中,没有达到值的复制到To区,经过GC后,Eden和From被清空。
    即若只分一块Survivor,在清除Survivor区已死亡的对象时,因为此刻的Survivor区还有存活的对象,清除要比分两块Survivor麻烦,两块的情况,回收时只需将存活的对象移走,剩下的对象直接清理即可。
    另外,分成两块Survivor,From和To分工明确,逻辑理解和技术实现较简单。

    标记整理算法(老年代)

    标记:它的第一个阶段与标记/清除算法是一模一样的,均是遍历GC Roots,然后将存活的对象标记。

    整理:移动所有存活的对象,且按照内存地址次序依次排列,然后将末端内存地址以后的内存全部回收。因此,第二阶段才称为整理阶段。

      一般来说,大对象会被直接分配到老年代,所谓的大对象是指需要大量连续存储空间的对象,最常见的一种大对象就是大数组,比如:
      byte[] data = new byte[4*1024*1024]
      这种一般会直接在老年代分配存储空间。
    
    
    - Java8开始使用G1 Java9正式G1 作为默认的垃圾回收
    - G1 原理就是 开始全局 使用 标记整理算法  包括新生代和老年代   
    
    • 注册中心保持高可用

    Eureka

    自我保护机制
    心跳 可以设置1s 一次 剔除列表
    Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,以上行为可能变得非常危险了——因为微服务本身其实是健康的,此时本不应该注销这个微服务。
    
    Eureka通过“自我保护模式”来解决这个问题——当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
    
    综上,自我保护模式是一种应对网络异常的安全保护措施。它的架构哲学是宁可同时保留所有微服务(健康的微服务和不健康的微服务都会保留),也不盲目注销任何健康的微服务。使用自我保护模式,可以让Eureka集群更加的健壮、稳定。
    
    
    

    Consul

    • 最近印象深刻的项目

    • Redis中的数据结构有哪些

    简单动态字符串
    链表
    字典
    跳跃表
    整数集合
    压缩列表
    对象

    • 使用了zk 和redis 的什么

    • RPC框架比较

    • 三个词语评价自己

    • Java中几种Map

      -Hashtable(线程安全--废弃)、LinkedHashMa(链表)、TreeMap(基于红黑树)、WeakHashMap、ConcurrentHashMap(线程安全)、HashMap(哈希表 非线程安全
    • 怎么形容Stream 函数式编程

    相关文章

      网友评论

          本文标题:2018-05-11

          本文链接:https://www.haomeiwen.com/subject/jesxdftx.html