关系型数据库

  • 数据库范式

  • 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)。