滴滴后端一面
1. 请分享一个你在实习中遇到的最棘手的技术难题,你是如何分析和解决的?这个过程给你带来了哪些成长?
2. Go的channel是如何实现并发安全的?其底层数据结构是怎样的?谈谈无缓冲和有缓冲channel的区别及应用场景。
3. Go的垃圾回收三色标记法具体是如何工作的?它是如何实现并发标记的(STW具体发生在哪些阶段)?
4. 协程相比于线程的优势主要体现在哪些方面?在IO密集型和计算密集型任务中,它们各自表现如何?为什么?
5. 请详细解释一下MySQL的索引失效场景有哪些?什么是索引下推(Index Condition Pushdown)?
6. 在什么业务场景下你会选择使用时序数据库(如InfluxDB)或文档数据库(如MongoDB),而不是关系型数据库?
7. 谈谈你对CAP理论的理解。像Redis、MongoDB、Cassandra这类NoSQL数据库分别是在CAP中做了怎样的取舍?
8. Redis的分布式锁是如何实现的?请讨论一下setnx、Redlock等方案的优缺点和潜在风险。
9. 请详细阐述几种保证缓存与数据库数据一致性的方案(如Cache-Aside, Read-Through, Write-Through, Write-Back),并分析它们的优缺点和适用场景。
10. RabbitMQ中的Exchange有哪几种类型(Direct, Fanout, Topic, Headers)?它们的工作模式和应用场景有何不同?
11. 如何设计一个高可用的系统?请从服务发现、负载均衡、熔断、降级、限流等方面具体阐述。
12. 你了解gRPC吗?它相比于传统的RESTful API有哪些优势?
13. 一次完整的RPC调用过程是怎样的?请描述一下从客户端发起请求到接收到响应的全过程,包括Stub、序列化、网络传输等关键环节。
14. 核心代码模式算法题:删除有序链表中重复的元素-II