2023 年初的猿辅导面试复盘

面试

一面(55 分钟)

面试官先介绍了一下面试流程,自我介绍、聊项目、写代码。

  • 你挑一个有亮点有挑战的项目说一下?
  • 为什么存储要从 TiDB 迁移到 MySQL?
  • 迁移过程中有遇到过什么问题或者有难度的挑战吗?
  • 说下这些问题(双写一致性、迁移前后数据核对)怎么解决的吧?
  • 你们整个系统还有什么其他的挑战吗?
  • 以你们的数据量,这个系统不一定要使用 TiDB 吧?
  • 传统的分库分表也可以做到对业务透明吧?
  • 那你们业务里长链接生成短链接的具体规则是怎样的?
  • 设计不锁表、数据版本不回绕的数据迁移方案具体是要解决怎样的问题呢?
    • 面试官这里就数据迁移的方案继续追问,大概拉扯了 5 分钟,多组问题;
    • 不难发现,要在简短的数十秒聊天中去介绍一套业界不广泛流行的技术方案,包括它解决的难点、如何解决,是非常困难的。简历上的信息以及口述的辅助需要找到合适的方法,引导面试官想象出来关键点,这是需要花时间打磨和改进的;
  • 这个数据同步不能用像 Redis 主从复制的那种机制吗?
    • 解决的问题不一样,Redis 主从复制有 RDB 生成的过程,是阻塞的;
  • 对什么技术或者方向感兴趣?
  • 怎么理解可观测性(Observability)?
  • Redis 有看过源码吗,贡献过什么 Feature?
  • Redis 6 里面的 Threaded I/O 是想解决什么问题?
  • 讲一下 WiscKey 论文,想解决的是什么场景问题? KV 分离能解决写放大的问题吗?
  • 对 LSM-Tree 的 Compaction 了解吗?有哪几种 Compaction 方式?
  • 对数据库的隔离级别了解吗?MVCC 和快照隔离级别有什么关联?

写代码

  • 一个有序数组,按某个位置进行旋转,如 [1,2,3,4,5] 变成 [3,4,5,1,2],在这个旋转后的数组中查找给定值;

反问

  • 部门里面目前在负责那些日志相关的事情,例如是要搭建日志平台,或者现有日志平台的运维方,还是负责使用方的接入?
  • 现在日志的体量大约是多少 PB,每天有多少日志需要采集收录?
  • 日志的采集现在是怎么做的呢?
  • 职位 OnCall 的情况如何?
  • 这个日志平台还未正式上线的话,以往业务团队是怎么查询的呢?

二面(1 小时 5 分钟)

  • 在做过的事情里面挑一块来讲一下吧;
  • 在这个项目里面你觉得哪些是比较有意思的?
  • 短链接唯一 ID 设计这块挑战是什么?
  • 针对相同长链接,会生成相同的还是不同的短链接,(两种方案分别是)怎么实现的?
  • 数据迁移的过程中遇到什么问题?
  • 为什么要为这些业务设计 ClickHouse 的存储?OLAP 和离线数仓的差别在哪里?
  • 除了 ClickHouse 还了解过哪些 OLAP 数据库?
  • 给团队做的基础组件有哪些比较有意思的聊一下?
  • 讲一下 Trace 的数据模型,什么是 Span,Trace ID 和 Span ID 是怎么设计的?
  • Metrics 的数据模型有了解吗?
  • LSM-Tree 和 B+ Tree 的本质区别是什么呢?
  • LSM-Tree 有很多实现,能不能用 B+ Tree 作为其中的一种方案呢?用 B+ Tree 代替原来的 SSTable 有什么好处呢?
  • InnoDB Buffer Pool 里 LRU 的实现有什么优化?
  • 介绍 HotRing,论文的实现以及针对什么样的场景和问题?

写代码

  • 用一个环形链表实现一个队列,新元素进入时可能需要扩容,但是不需要考虑缩容;

反问

  • 面试的职位未来是专注日志方向的吗?
  • 对可观测性 SaaS 平台的时间规划是怎样的,何时会希望推出产品,交付使用?
  • 这套 SaaS 平台面向的用户是内部用户还是外部用户呢?
  • 职位 Go 和 Java 都需要,Go 语言在团队里面是怎样发挥作用的呢,具体支撑哪些功能,平台还是底层实现?

三面(1 小时 15 分钟)

  • 自我介绍,挑一些具体问题讲一下;
  • 数据库迁移,双写阶段有写入失败时怎样处理?
  • 双写的几个阶段的目标分别是什么,某些阶段能不能省略不做?
  • 还有其他项目觉得比较有挑战的吗?
  • 讲解一下做过的可观测性方向的事情?
  • 监控和 Trace 是怎么做联动的?

写代码

  • 用两个栈对数据进行排序,例如第一个栈中当前有 [1,3,4,2,6,9,7],第二个栈为 [],利用这两个数据结构把数据排序,尽可能少申请空间或者使用额外的数据结构;

反问

  • 目前公司内可观测性,例如 Trace 和日志建设的完善程度如何?
  • 部署架构中都用了哪些 Agent 来辅助可观测性信息的采集,各是做什么的?
  • 除了 Kubernetes 还在用哪些容器调度管理的方案,没有能迁移的原因(想借此评估一下对统一可观测性架构设计的影响和难度)?