端点科技一面面经

面经

写面经,攒人品

  1. 自我介绍
  2. 项目介绍
  3. 项目中使用到的技术(亮点)
  4. 分布式锁
    1. redis实现与zk实现的区别
    2. redis单机挂的情况
    3. 多应用服务器抢占redis锁,造成redis服务器CPU飙红
  5. Rocketmq - 使用场景
  6. 索引
  7. B+树
    1. 结构
    2. 如何优化查询
    3. 原理等
  8. CountDownLatch原理
  9. 线程池
    1. 线程池的参数
  10. 非阻塞IO与阻塞IO

写面经,攒人品


解答

分布式锁

redis实现与zk实现的区别

redis单机挂的情况

  redis单机挂的情况下,考虑使用集群作为分布式锁的载体,使用redlock作为分布式锁的实现,这里的集群采用redis cluster而不采用主从复制模式,主从复制模式下,故障转移可能导致锁丢失,cluster的几率小很多。

多应用服务器抢占redis锁,造成redis服务器CPU飙红

  redlock模式下,加分布式锁是给每一台redis服务器一台一台加锁的,加锁成功一半以后,就认为是分布式加锁成功。
  检查当前锁状态只是一次读而已,写入锁也只是一次写入。本质上就是读写,另外单次锁状态的读取和写入数据量都很小。理论上来说你的业务量没有大到一定程度,锁的操作不会带来redis服务器的太多压力,如果有,那么你的其他业务的读写可能更要值得关注了。另外真有问题,就锁这一块的读写也不会引起CPU飙升。

RocketMQ使用场景

mysql中索引结构

  索引结构分为两种,Hash索引和B+树索引。

B+树

结构

如何优化查询

  减少IO次数。

CountDownLatch原理

线程池

非阻塞IO与阻塞IO