收集的面试题 二

本文介绍了Redis的持久化机制、Elasticsearch的使用场景、RabbitMQ工作模式以及MySQL的连接方式。还讨论了单点登录的实现方式,包括JWT与RSA,并探讨了SpringSecurity、SpringMVC、SpringBoot和SpringCloud的相关知识点。此外,涵盖了数据库事务、分词器、序列化、页面传值方式和事件委托等,深入解析了数据库的存储过程和Feign的作用。
摘要由CSDN通过智能技术生成

十一

1、Redis是什么,怎么持久化

Redis是一个高性能的内存数据库,以key-value方式存储数据,可以作为缓存使用。

Redis支持RDB和AOF两种持久化机制。持久化功能有效地避免因进程退出造成的数据丢失问题,下次重启时利用之前持久化的文件即可实现数据恢复。

RDB:RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。

触发机制

   手动触发分别对应save和bgsave命令

   save命令:阻塞当前Redis服务器,知道RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上不建议使用。

    DB saved on disk

    bgseve命令:Redis进程执行fork操作创建子进程,RDB持久化过程有子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。

        * Background saving started by pid 3151

        * DB saved on disk

        * RDB: 0 MB of memory used by copy-on-write

        * Background saving terminated with success

自动触发

        以下场景下会触发

       1)使用save相关配置,如“save m n”。表示m秒内数据集存在n次修改时,自动触发bgsave。

       2)如果从节点执行全量复制操作,主节点自动执行bgsave生成RDB文件并发送给从节点,更多细节见6.3节介绍的复制原理。

       3)执行debug reload命令重新加载Redis时,也会自动触发save操作。

       4)默认情况下执行shutdown命令时,如果没有开启AOF持久化功能则自动执行bgsave。

2、为什么使用elasticsearch

Elasticsearch具备以下特点:

        分布式,无需人工搭建集群

        Restful风格,一切API都遵循Rest原则,容易上手

        近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。

正排索引

        通过key找到value,如通过id找到文章

        查询内容时,需要逐条遍历,速度比较慢

倒排索引

        通过value找到key

        对内容进行分词,生成倒排索引

3、rabbitMQ的工作模式

工作队列,生产者将消息分发给多个消费者,如果生产者生产了100条消息,消费者1消费50条,消费者2消费50条,队列发送消息采用的是轮询方式,也就是先发给消费者1,再发给消费者2,依次往复。

因为队列默认采用是自动确认机制,消息发过去后就自动确认,队列不清楚每个消息具体什么时间处理完,所以平均分配消息数量。

实现能者多劳:

channel.basicQos(1);限制队列一次发一个消息给消费者,等消费者有了反馈,再发下一条

channel.basicAck 消费完消息后手动反馈,处理快的消费者就能处理更多消息

basicConsume 中的参数改为false

4、mysql的连接方式左连接和右连接是什么概念

left join

显示所有左表的数据,加上右表相关的数据,不相关的补空值

right join

显示所有右表的数据,加上左表相关的数据,不相关的补空值

5、代码连接mysql的工具是什么,mybatis的sql语句放在哪

JDBC,mybatis的sql语句可以写在mapper文件中,也可以通过注解写在dao层的方法上

6、单点登录怎么实现

登录成功后,将用户信息用JWT+RSA算法进行加密,保存到请求头中

在网关中添加全局过滤器,对请求进行拦截,获得请求头中的token,进行解码,成功就放行

7、gateway服务怎么跳转到别的服务的,普通用户登录后怎么访问的页面

  1. 客户端发送请求给Gateway网关,网关将请求发送给处理器映射(HandlerMapping)

  2. 网关通过路由的匹配,将请求发送给Web处理器处理,请求就需要经过一系列过滤器

  3. 过滤器分为“pre"前置和”post"后置两种,前置过滤器实现鉴权作用,后置过滤实现性能统计或日志收集

  4. 通过过滤器到达需要的服务

8、webSocket怎么实现传到前台的,还有什么其他方式吗

  1. websocket允许通过Javascript建立远程服务器的连接,从而实现客户端与服务器间的双向通信,在websocket中有两个方法
    1.send()向远程服务器发送数据
    2.close()关闭websocket连接
    websocket同时还定义了几个监听函数    
        1、onopen 当网络连接建立时触发该事件
        2、onerror 当网络发生错误时触发该事件
        3、onclose 当websocket被关闭时触发该事件
        4、onmessage 当websocket接收到服务器发来的消息的时触发的事件,也是通信中最重要的一个监听事件。msg.data
    websocket还定义了一个readyState属性,这个属性可以返回websocket所处的状态:
        1、CONNECTING(0) websocket正尝试与服务器建立连接
        2、OPEN(1) websocket与服务器已经建立连接
        3、CLOSING(2) websocket正在关闭与服务器的连接
        4、CLOSED(3) websocket已经关闭了与服务器的连接

websocket的url开头是ws,如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。

10、seata用到了吗,怎么实现的

Seata的分布式事务解决方案是业务层面的解决方案,只依赖于单台数据库的事务能力。Seata框架中一个分布式事务包含3中角色:

Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。

Transaction Manager (TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。

Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。

其中,TM是一个分布式事务的发起者和终结者,TC负责维护分布式事务的运行状态,而RM则负责本地事务的运行。

首先TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID。

XID 在微服务调用链路的上下文中传播。

RM 开始执行这个分支事务,RM首先解析这条SQL语句,生成对应的UNDO_LOG记录。下面是一条UNDO_LOG中的记录

RM在同一个本地事务中执行业务SQL和UNDO_LOG数据的插入。在提交这个本地事务前,RM会向TC申请关于这条记录的全局锁。如果申请不到,则说明有其他事务也在对这条记录进行操作,因此它会在一段时间内重试,重试失败则回滚本地事务,并向TC汇报本地事务执行失败

RM在事务提交前,申请到了相关记录的全局锁,因此直接提交本地事务,并向TC汇报本地事务执行成功。此时全局锁并没有释放,全局锁的释放取决于二阶段是提交命令还是回滚命令。

TC根据所有的分支事务执行结果,向RM下发提交或回滚命令。

RM如果收到TC的提交命令,首先立即释放相关记录的全局锁,然后把提交请求放入一个异步任务的队列中,马上返回提交成功的结果给 TC。异步队列中的提交请求真正执行时,只是删除相应 UNDO LOG 记录而已。

在at模式中需要在客户端的数据库中建如下的表,用来保存回滚的数据

seata的数据源代理通过对业务sql的解析,在业务sql执行前后生成前置镜像和后置镜像保存在undo_log中,业务sql的执行和undo_log的插入在一个本地事务中,这样就可以保证任何对业务数据的更新都有相

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值