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