2023.10.29 (二面相当硬核)
扬腾创新一面
- 自我介绍
- 换工作的原因是什么
- 物流开发平台是做什么,链路上都有哪些核心模块
- 一个单下过来,分配给哪个3PL,有什么要求吗,是怎么设计的
- 保证履约系统稳定性方面有做过什么事情
- 轨迹推送过程中的最终一致性如何保证
- 任职期间单量从多少变化到了多少
- 第三方OMS/ERP可以直接请求到3PL,为什么还要通过你们平台来做转发?
- Prometheus了解多少
- 只做接口层面的监控吗
- 告警是怎么实现的
- 下单链路中,从三方请求到你们,你们调用下游,再到下游调用3PL,整个流程是同步还是异步的(例如,第三方下单请求,需不需要等待3PL给你们响应成功)
- 3PL物流公司系统挂了的话,你们这边OpenAPI给三方也是返回失败的吗
- 数据库用的是MySQL吗,ADO 10w的单量是怎么存储的,有没有什么设计
- go里头函数参数传参,slice,map,string这些是值传递还是引用传递?
- 如果收到一个请求,里头有100个子任务,用go编码时直接创建100个协程并发处理,是否合适呢,会导致什么问题?
- Interface类型,要转成原本的类型,怎么才能安全进行转换?
11.2 约了二面
- 自我介绍
- 挑一个重点项目,主要在技术层面的挑战、难点以及自己做的有亮点的,以及遇到的一些技术难题,是如何克服的?
- 刚提到的数据一致性通过事务保证,处理逻辑是在同一个节点上,同一个服务上去处理的吗?
- 用事务在性能方面会不会有一些瓶颈?
- 里头提到的乐观锁,你是怎么设计的?
- 从data service回写数据到DB,分发不同协程去并发处理,针对budget主表和category子表,是不同数据在一个协程里头写2张表,还是2张表用不同协程去写数据
- Channel的缓存大小当时定的多少,是怎么设计?
- 刚刚乐观锁的设计,除了你用的version字段,稍微发散一下,还有无其它的方式?
- 假设这些写操作是在不同节点上执行的,怎么去保证一致性?
- 有了解过三阶段提交吗?两阶段(2PC)有什么弊端?
- 说有没有听说过那个叫Paxos算法?
- 围绕补偿事务这个机制,你能简单讲一下TCC吗?
- MySQL用的多吗,有没有遇到什么实际问题,比如主持延迟、深度分页等
- 慢查询你是如何优化的,针对这种情形,分几方面说说你的解决思路,例如SQL语句、表结构设计的优化
- 目前表的数据量有多少?分表后,总数据量有多少
- 那你们现在拆成了主表+副表(扩展表)的结构,怎么去满足业务需求呢?
- 是会采用2个协程,并发去查数据,然后再组装给到前端那边吗?
- 分表后,每个子表的数据量现在有多少,采用一下join方法去联表,会不会有一些性能方面的影响呢?
- MySQL的分表和分区有什么区别?什么情况采用分表,什么情况采用分区?两者可不可以结合起来使用呢,例如我先做分表,再去做分区?
- 在分区的情况下,我能不能在select语句里头指定查询条件,只查某个分区,去加快查询速度?
- 假设现在一张表里头,有id主键,有一个(a,b)的联合索引,你能不能说说这张表的底层数据结构是怎样的?
- Where a = ? / a in (…),这个SQL查询语句,在底层的查询过程是怎样的,树的遍历是个什么顺序?
- Offset 1000000 limit 10; 这种深度分页场景,底层的扫描过程是怎样的,有什么优化思路?
- B+树如果有3层,大概支持的数据量是多少?查询会走几次IO?
- 假设说现在有一张大表,几千万的存量数据,在线添加索引或加字段的情况下,会出现什么情况,会锁数据还是锁表吗?(上行锁还是表锁?)
- 对写操作会阻塞,那读操作呢?假设现在主从同步已经完毕的情况下
- 那换个问法,假设现在有一张存量数据5000w的表,你要往里头去加一列字段,再加一个索引,应该怎么去操作呢?
- 有用过消息队列吗?
- 基于MySQL和Redis,让你实现一个延时队列,在不考虑性能的情况下,你会怎么设计
- 那kafka为什么性能比较高,主要是那几方面的原理保证
- 有了解过sync.RWMutex的底层原理吗
- map为什么遍历是不保证有序的?
- 有了解它底层的BMap和bucket的一些机制吗?
- go的内存泄漏遇到过吗,大概会有哪些场景容易发生,怎么去避免?
- go的GC会自动关闭channel吗
- 假设现在需要你快速上手一门新语言,或一门新的技术,你的学习路线大概会是什么样
- 对新的工作有什么期待吗?
- 反问