NingG +

基础原理系列:几个技术问题汇总(1)

0.概要

整理一些典型问题。

1.0526

参阅记录:personal 中信息。(更新:20190508)

1.1. MySQL 的主从结构,数据复制

MySQL ,M-S 结构中,默认是:异步单线程的结构

主从复制:异步复制、半同步复制、全同步复制:

半同步复制:单独说明一下

异步复制

半同步复制:改进版本 2PC(两阶段提交)

参考资料

1.2.Spring 事务,加在实现类 or 加在接口?

关于 Spring 事务:@Transactional

  1. Transactional 注解:可以被应用于「接口」和「接口方法」、「类」和「类的 public 方法」上。
  2. 动态代理机制选择:“proxy-target-class” 属性值来控制是基于接口的还是基于类的代理被创建。 <tx:annotation-driven transaction-manager=“transactionManager” proxy-target-class=“true”/> 注意:proxy-target-class属性值决定是基于接口的还是基于类的代理被创建。
    1. 若proxy-target-class=true,「基于类」的动态代理生效(这时需要cglib库)。
    2. 若proxy-target-class=false,或者省略,「基于接口」的代理(JDK 代理)。
  3. 兼容性:注解写到「接口方法」上,如果使用 cglib代理,则,「注解」失效,为了「保持兼容注解」最好都写到「实现类」上。
  4. Spring团队建议:在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。在接口上使用 @Transactional 注解,只能当你设置了基于接口的代理时它才生效。因为注解是 不能继承的,这就意味着如果正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装。
  5. @Transactional 的事务开启 ,或者是基于接口的 或者是基于类的代理被创建。所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的。 原因:(这也是为什么在项目中有些@Async并没有异步执行) spring 在扫描bean的时候会扫描方法上是否包含@Transactional注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的。此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用之前就会启动transaction。然而,如果这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,所以就不会启动transaction,我们看到的现象就是@Transactional注解无效。

更多细节,参考:http://mojito515.github.io/blog/2016/08/31/transactionalinspring/

1.3.设计模式

关于设计模式,几个核心问题:

  1. 有哪些?
  2. 分为几类?

设计模式:整体分为 3 类

  1. 创建型:封装了创建对象的过程,被调用方,只需要关注如何使用对象
    1. 工厂模式
    2. 原型模式
    3. 单例模式
  2. 结构型:对象的组成,以及对象间依赖关系
    1. 扩展性
      1. 外观模式
      2. 组成模式
      3. 代理模式
      4. 装饰模式
    2. 封装:
      1. 适配器模式
      2. 桥接模式
  3. 行为型对象的行为,涉及到算法和对象间职责的分配,行为模式描述了对象和类的模式
    1. 模板方法模式(Template Method)
    2. 观察者模式(Observer)
    3. 状态模式(State)
    4. 策略模式(Strategy)
    5. 职责链模式(Chain of Responsibility)
    6. 命令模式(Command)
    7. 访问者模式(Visitor)
    8. 调停者模式(Mediator)
    9. 备忘录模式(Memento)
    10. 迭代器模式(Iterator)
    11. 解释器模式(Interpreter)

更多细节,参考:

1.4.领域模型设计(DDD)

关于领域模型驱动设计,有没有深刻的理解?

更多细节,参考:

1.5.Nginx 网关,如何实现高可用?

Nginx 网关的高可用:Keepalived + VIP 方案,基于虚拟路由冗余协议实现

更多细节,参考:

同类文章:

微信搜索: 公众号 ningg ,即可联系我

Top