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 方案,基于虚拟路由冗余协议实现

更多细节,参考:

原文地址:https://ningg.top/computer-basic-theory-several-tech-points-20170816/
微信公众号 ningg, 联系我

同类文章:

微信搜索: 公众号 ningg, 联系我, 交个朋友.

Top