关系型数据库
数据库范式
sql语句
字段类型
索引类型
B+ tree
mysql
主备模式
读写分离
数据库优化
存储引擎
事务
锁机制
慢查询
分表分库
远程表
自动备份
非关系型数据库
redis
itoo中redis使用
权限的token存放位置, 重在与redis的过期时间
考评二次登陆sessionid存放位置
教务选课
考试前题库信息
面试题
redis是什么
redis相比memcached有哪些优势
redis有哪五种基本数据类型
redis设置db数量
redis持久化设置方式,如何选择合适的持久化方式
set命令与setnx命令有哪什么区别
redis操作string类型,怎样指定有效期
redis操作string,怎样设置指定key的value值的子字符串
redis集群为什么至少是6台
redis集群中slot是什么,有什么作用
redis集群中选举容错机制是什么
redis集群最大节点个数是多少
redis集群如何选择数据库
什么是jedis,如何使用jedis操作redis数据库
redis回收策略
redis有哪几种数据淘汰策略
一个字符串类型的值能存储最大容量是多少
redis常见性能问题都有哪些,如何解决
pipeline有什么好处,为什么要用pipeline
redis同步机制
redis哈希槽概念
怎么理解redis事务
为什么要做redis分区
redis内存用完了会发生什么
redis是单线程的,如何提高多核cpu的利用率
一个Redis实例最多能存放多少的keys?List、Set、Sorted Set他们最多能存放多少元素?
都有哪些方法可以降低redis的内存使用情况
redis与其他key-value存储有什么不同
Redis key的过期时间和永久有效分别怎么设置?
分布式Redis是前期做还是后期规模上来了再做好?为什么?
消息队列
itoo中使用
教务选课
题库修改题后,通过后端,传回给学生页面(待完成)
面试题
RabbitMQ 中的 broker 是指什么?cluster 又是指什么?
- broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。
RAM node 和 disk node 的区别?
- RAM node 仅将 fabric(即 queue、exchange 和 binding等 RabbitMQ基础构件)相关元数据保存到内存中,但 disk node 会在内存和磁盘中均进行存储。RAM node 上唯一会存储到磁盘上的元数据是 cluster 中使用的 disk node 的地址。要求在 RabbitMQ cluster 中至少存在一个 disk node 。
RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?
- 可以认为是无限制,因为限制取决于机器的内存,但是消息过多会导致处理效率的下降。
RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用?
queue 具有自己的 erlang 进程;exchange 内部实现为保存 binding 关系的查找表;channel 是实际进行路由工作的实体,即负责按照 routing_key 将 message 投递给 queue 。由 AMQP 协议描述可知,channel 是真实 TCP 连接之上的虚拟连接,所有 AMQP 命令都是通过 channel 发送的,且每一个 channel 有唯一的 ID。一个 channel 只能被单独一个操作系统线程使用,故投递到特定 channel 上的 message 是有顺序的。但一个操作系统线程上允许使用多个 channel 。channel 号为 0 的 channel 用于处理所有对于当前 connection 全局有效的帧,而 1-65535 号 channel 用于处理和特定 channel 相关的帧。AMQP 协议给出的 channel 复用模型如下
其中每一个 channel 运行在一个独立的线程上,多线程共享同一个 socket。
vhost 是什么?起什么作用?
- vhost 可以理解为虚拟 broker ,即 mini-RabbitMQ server。其内部均含有独立的 queue、exchange 和 binding 等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从 RabbitMQ 的全局角度,vhost 可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的 vhost 中)。
在单 node 系统和多 node 构成的 cluster 系统中声明 queue、exchange ,以及进行 binding 会有什么不同?
- 当你在单 node 上声明 queue 时,只要该 node 上相关元数据进行了变更,你就会得到 Queue.Declare-ok 回应;而在 cluster 上声明 queue ,则要求 cluster 上的全部 node 都要进行元数据成功更新,才会得到 Queue.Declare-ok 回应。另外,若 node 类型为 RAM node 则变更的数据仅保存在内存中,若类型为 disk node 则还要变更保存在磁盘上的数据。
客户端连接到 cluster 中的任意 node 上是否都能正常工作?
- 答:是的。客户端感觉不到有何不同。
若 cluster 中拥有某个 queue 的 owner node 失效了,且该 queue 被声明具有 durable 属性,是否能够成功从其他 node 上重新声明该 queue ?
- 不能,在这种情况下,将得到 404 NOT_FOUND 错误。只能等 queue 所属的 node 恢复后才能使用该 queue 。但若该 queue 本身不具有 durable 属性,则可在其他 node 上重新声明。
cluster 中 node 的失效会对 consumer 产生什么影响?若是在 cluster 中创建了 mirrored queue ,这时 node 失效会对 consumer 产生什么影响?
- 若是 consumer 所连接的那个 node 失效(无论该 node 是否为 consumer 所订阅 queue 的 owner node),则 consumer 会在发现 TCP 连接断开时,按标准行为执行重连逻辑,并根据“Assume Nothing”原则重建相应的 fabric 即可。若是失效的 node 为 consumer 订阅 queue 的owner node,则 consumer 只能通过 Consumer Cancellation Notification 机制来检测与该 queue 订阅关系的终止,否则会出现傻等却没有任何消息来到的问题。
能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?
- 不能。第一,你无法控制所创建的 queue 实际分布在 cluster 里的哪个 node 上(一般使用 HAProxy + cluster 模型时都是这样),这可能会导致各种跨地域访问时的常见问题;第二,Erlang 的 OTP 通信框架对延迟的容忍度有限,这可能会触发各种超时,导致业务疲于处理;第三,在广域网上的连接失效问题将导致经典的“脑裂”问题,而 RabbitMQ 目前无法处理(该问题主要是说 Mnesia)。