2.7 春招 教育初创三面 Golang 1h40min
面试官人非常好, 在我面试的里面是一个比较重实际 同时自己了解底层的原理, 结束时道新年快乐.
八股(闲聊):
- 学了什么课, 有编译原理 计算机组成吗(没有)
- 为什么要写Raft, 有什么应用
- Kafka使用了Raft吗, 我说前面用zk, 后面KRaft, 问我确定吗我说是
- Kafka中的KRaft与Raft什么不同(面试官觉得差不多, 我说了一些ISR)
- Kafka保证的是CP还是AP, etcd呢(我说看参数)
- 我看RPC框架有一个reqID, 怎么实现幂等性(我说db或者redis写id)
- 如果多个机器同时收到reqID怎么保证幂等性, 我说没有考虑
- 那考虑一下呢, 我说加锁或者撤销写入的id
- 如果多个请求同时打, 延迟到下一次失败重试吗(是)
- 这种消耗带宽了, 怎么优化(我说id标记两个阶段, 1阶段循环等, 这时候已经很难绷住了)
- 公司有微服务监控吗, 怎么重试一个流程
- Go的Cond和select用来干嘛的, 可以相互替换吗(含糊其辞)
- Cond chan可以共用吗(我说不可以 一个要mutex)
- select怎么监听的多个chan, 阻塞的时候会调度吗()
- 我说会, 那谁来通知这个读写事件(可能sysmon??绷不住了, 我说不会, 终于换问题了)
- TCP和UDP服务同时用一个端口可以运行吗, 会有什么问题(我说不会)
手撕:
- 本地IDE写一个server监听端口, 一个client读tcp字节流(api不熟, 但是写出来了)
继续八股:
- tcp建立的过程中, os层面怎么做的处理(我说了一些fd和处理句柄吧可能)
- 建立链接之后传输完成需要做什么处理(我defer关闭了一些链接)
- 直接defer会不会有什么问题(我不太会, 说可能panic, 但是也会关闭)
- 判断代码执行结果: 一个go协程里面赋值 + Unlock, 主协程Lock + print. (我答错了, 跑了一下说原因)
- 怎么修改, 我改成了wg, 他说用Lock怎么实现
- 我Lock两次成功了, 他说会不会有什么问题....
- SELECT a FROM b WHERE c IN (1,2,3) AND d LIKE 'str%' ORDER BY e DESC 怎么加索引....(不怎么会 我说d a, 讨论了几分钟)
- 这一条SELECT在MYSQL里面怎么执行
- 你刚说的宏观层的优化器 存储引擎, 这些子句具体怎么执行(...不会)
- 建立索引, 是否走索引是第一考虑因素吗...(我说是, 他说也可以考虑快速缩小结果集)
反问:
- 规模: 研发总共40人
- 三面过后还有技术面吗: 还有一面😅