面试总结之乐信(上)

 

面试内容:

一、画出项目 架构图

二、所处自己负责的业务模块,其中用到了哪些技术点

三、如何实现最终一致性分布式事务?

    1. 二阶段提交:

        a. 概念:参与者将操作成败通知协调者,再由协调者根据所有参与者的

        反馈情报决定各参与者是否要提交操作还是中止操作。

        b. 作用:主要保证了分布式事务的原⼦性;第一阶段为准备阶 段,第二阶段为提交阶段;

           

 

        c. 缺点:不仅要锁住参与者的所有资源,而且要锁住协调者资源,开销大。一句话总结就是:2PC效率很低,对高并发很不友好。

    2. 三阶段提交:

       a. 概念:三阶段提交协议在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段拆分成了两步:询问,然后再锁资源,最后真正提交。这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。

 

 

      b. 缺点:如果进入PreCommit后,Coordinator发出的是abort请求,假设只有一个Cohort收到并进行了abort操作,而其他对于系统状态未知的Cohort会根据3PC选择继续Commit,此时系统状态发生不一致性。

     3. 柔性事务:

     a. 概念:所谓柔性事务是相对强制锁表的刚性事务而言。流程入下:服务器A的事务如果执行顺利,那么事务A就先行提交,如果事务B也执行顺利利,则事务B也提交,整个事务就算完成。但是如果事务B执行失败,事务B本身回滚,这时事务A已经被提交,所以需要执行一个补偿操作,将已经提交的事务A执行的操作反操作,恢复到未执行前事务A的状态。

    b. 缺点:业务侵入性太强,还要补偿操作,缺乏普遍性,没法大规模推广。

    4. 消息最终⼀一致性解决⽅方案之RabbitMQ实现:

    a. 实现:发送方确认+消息持久化+消费者确认。

四.索引的B+树结构是咋样的?

    1. B-tree:

 

B-tree 利用了磁盘块的特性进行构建的树。每个磁盘块一个节点,每个节点包含了关键字。把树的节点关键字增多后树的层级比原来的二叉树少了,减少数据查找的次数和复杂度。

B-tree巧妙利⽤了磁盘预读原理,将一个节点的⼤小设为等于一个页(每⻚为4K),这样每个节点只需要一次I/O就可以完全载入。

B-tree 的数据可以存在任何节点中。

  2. B+tree:

 

 

B+tree 是 B-tree 的变种,B+tree 数据只存储在叶子节点中。这样在B

树的基础上每个节点存储的关键字数更多,树的层级更少所以查询数据更快,所有指关键字指针都存在叶子节点,所以每次查找的次数都相同所以查询速度更稳定。

五.说⾃己了解的设计模式?Spring中用到了哪些设计模式?⾃己有用过哪些设计模式吗?

  1. spring中的设计模式:

  a. 简单工厂:spring中的BeanFactory就是简单工厂模式的体 现, 根据传入一个唯一的标识来获得bean对象,但是否是在传入 参数后创建还是传入参数前创建这个要根据具体情况来定。

 b. 单例例模式: Spring下默认的bean均为singleton 。
 c. 代理理模式: 为其他对象提供一种代理以控制对这个对象的访问。 从结构上来看 和Decorator模式类似,但Proxy是控制,更像是一种对功能的限制,而Decorator是增加职责。 spring的Proxy模式在aop中有体现,比如JdkDynamicAopProxy和Cglib2AopProxy。
d. 观察者模式:定义对象间的一种一对多的依赖关系,当⼀个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。spring中Observer模式常用的地方是listener的实现。如ApplicationListener。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值