美团后端 二面面经
04.26二面,不同于一面的注重基础,二面开放题较多,会根据你的项目经历和回答进行提问
- 怎么理解微服务框架?单体架构、微服务架构的比较?二者是互斥的关系吗?
- (项目经历相关)系统可观测能力是指什么?
- 系统在运行过程中能够提供足够的信息和数据,让开发人员和运维人员能够清晰地了解系统的运行状态、性能指标、异常情况等,从而及时发现问题、定位问题并解决问题
- 提升系统可观测能力有什么好处?
- 快速定位问题
- 量化衡量系统性能
- 为下一次的优化提供方向:通过各项监控指标可找到当前系统的瓶颈,可作为下一次优化的评估指标及证明
- 提升用户体验
- select * from t where a=xx and b=xx and c=xx;
- Q1:这条语句可以怎么优化?
- 用explain命令明确问题所在
- 使用合适的索引
- 创建联合索引:如果 a、b、c 是经常用于查询条件的字段,可以创建一个联合索引,以加快查询速度
- 字段顺序优化:索引字段的顺序应该根据查询条件的频率进行优化,将最常用作为查询条件的字段放在索引的前面
- 避免函数操作(虽然此语句不存在此情况)
- 使用覆盖索引:如果查询的字段在索引中都有涵盖,可以避免访问数据行,提高查询性能
- 尽量避免使用 SELECT *,只选择需要的字段,减少 IO 开销
- 适时分页
- 缓存查询结果
- 定期维护数据库:定期清理无用数据,优化数据表结构,避免表过大导致查询性能下降
- Q2:如果只能在一个列上加索引,应该选择哪一个?
- 根据查询频率、字段区分度、数据类型和大小、更新频率来确定索引
- 此外还要看业务需求,根据具体的业务需求来选择创建索引的列
- Q3:相比于字符型为什么选择整形作为索引?
- 占用空间更小:整型数据类型通常比字符型数据类型占用的存储空间更小,这意味着索引的大小会更小,从而减少磁盘空间的占用和IO开销
- 空间更小会带来什么好处?
- 减少存储空间占用,降低IO开销
- 提高缓存效率:使用空间更小的整型作为索引可以提高索引数据在内存中的缓存效率,减少内存的占用和浪费
- 提升查询效率:索引数据占用的空间越小,索引的高速缓存命中率就越高,查询效率就越高
- 比较效率更高:整型数据的比较操作比字符型数据的比较操作更高效
- 排序效率更高:整型数据类型可以更方便地进行排序操作
- Q4:如果选择了a和b分别作为索引,但是分析索引没走a,走了b,我期望索引走a该怎么办?
- 先用explain分析为什么走了b
- 使用force index idx_a 强制走a
- 优化查询语句: 如果查询中 a 列的条件出现在 AND 连接的第一个位置,通常情况下会优先选择 a 索引进行查询。因此,可以优化查询语句,将 a 列的条件放在第一个位置: SELECT * FROM T WHERE a = xx AND b = xx;
- 强制排序:如果强制使用 a 索引后仍然无法满足性能要求,可以考虑对查询结果进行排序,以保证查询结果的正确性: SELECT * FROM (SELECT * FROM T WHERE a = xx AND b = xx ORDER BY a) AS temp;
- Q5:强制使用a索引可能会带来什么问题?
- 性能问题:强制使用 a 索引可能导致查询性能下降,因为可能存在更适合当前查询条件的其他索引,强制使用 a 索引可能不是最优的选择
- 一个好的代码应该具有什么样的特征?
- 清晰易懂, 模块化,可复用,可扩展性,文档完善
- 用文档记录代码功能可能会产生什么问题?
- 文档更新不及时,牛头不对马嘴,给后来人造成误解
- 后面懒得更新
- 抽象类和接口的应用场景?