滴滴Java社招一面面经
面试题目
- coding, LRU。
- http请求头和响应头的结构?
- 常见http响应码? 502和504的区别?
- mysql innodb的索引结构?
- 以下情况的索引使用情况: create table myTest (a string, b int, c int, KEY a(a,b,c)); (1).select * from myTest where c=3 and a=“test” and b=5; (2).select * from myTest where a=“test” and b>5 and c=6; (3).select * from myTest where a=“test” order by b asc; (4).select * from myTest order by a asc, b desc; (5).select a,b,c from myTest where a like “te%” and b=5 and c=3;
- 某高并发电商系统,订单表日增量超过500万条,当前单表数据量已达数十亿,导致慢查询频发,分页查询深度偏移时性能急剧下降。如何优化?
- 聊项目。
参考解析
1. LRU实现:通常使用 HashMap + 双向链表 实现,HashMap用于O(1)查找,双向链表用于维护访问顺序。需注意多线程环境下的同步问题。
2. HTTP协议:请求头包含请求行、首部字段、空行、实体主体;响应头包含状态行、响应首部、空行、响应体。
3. 502与504区别:502 Bad Gateway是作为网关的服务器从上游收到无效响应;504 Gateway Timeout是作为网关的服务器在规定时间内未收到上游响应。
4. InnoDB索引:采用B+树结构,非叶子节点存储键值,叶子节点存储完整数据记录或主键(二级索引),支持高效的范围查询和稳定查询性能。
5. 索引分析提示:主要考察最左前缀匹配原则。注意范围查询(>、<)会导致后续索引列失效,但 a=... order by b 是典型的索引排序应用场景。
6. 数据库优化方案:
- 分库分表(如按订单ID或时间分片)。
- 深度分页优化:使用延迟关联(先ID定位再JOIN)或记录上次查询ID(书签分页)。
- 引入缓存(Redis)或搜索引擎(Elasticsearch)处理复杂搜索需求。