每天一套面试题Day19-阿里巴巴高频(3)

链接题目来自牛客

我的每日一套面试题专栏,每天更新一起打卡

13.消息队列如何保证消息不丢?

alt

14.消息队列如何保证不重复消费

幂等性是一个数学概念,在消息队列中的意思是: 无论同一条消息被消费多少次,产生的结果都和消费一次是一样的。

消息队列通过以下机制避免重复消费:1. 生产者端添加唯一消息ID实现发送幂等性;2. 消息队列服务端支持Exactly-Once语义(如Kafka事务消息);3. 消费者端采用去重机制(如数据库唯一索引、Redis原子操作记录已消费ID);4. 业务逻辑设计幂等处理(如状态检查、乐观锁);5. 正确维护消费位移,确保异常后能从正确位置恢复。

15.什么是进程和线程?进程和线程的区别?

进程是操作系统中资源分配的基本单位,线程是进程中执行的基本单位,进程拥有独立的内存空间,而线程共享进程的内存空间和资源。 内存空间 进程:拥有独立的内存空间。 线程:共享进程的内存空间。

资源开销 进程:创建和切换开销大。 线程:创建和切换开销小。

通信方式 进程:通过进程间通信(IPC)进行数据交换,如管道、消息队列、共享内存。 线程:通过共享内存直接通信,速度快但需注意同步。

并发性 进程:适合多任务并发,进程间隔离性好。 线程:适合多线程并发,资源共享效率高。

16.建索引时需注意哪些事项?

建索引时需注意以下事项:首先,选择合适的列进行索引,优先考虑经常用于查询条件、排序和连接的列;其次,避免在频繁更新的列上建立索引,以减少维护开销;此外,控制索引的数量,过多的索引会影响写入性能;同时,注意索引的选择性,选择性高的索引能更有效地过滤数据;最后,定期分析和优化索引,以适应数据和查询模式的变化

17.SQL 调优常见方法有哪些?

我的博客详解 先监控发现慢SQL,然后通过EXPLAIN分析执行计划,接着从索引和SQL语句本身这两个成本最低的方面入手进行优化。如果这些手段都达到了瓶颈,最后才会考虑读写分离、分库分表等架构层面的方案。

18.大表(千万级)查询 / 维护该怎么办?

千万级”是一个量级描述,通常指的是数据库表中数据行的数量。 千万级: 具体指 10,000,000 行级别的数据。

诊断与监控: 使用 EXPLAIN 分析慢查询SQL,使用数据库监控工具(如Prometheus, PMM)定位瓶颈。

基础优化:

优化SQL和索引: 这是投入产出比最高的步骤。

架构优化:

数据归档: 将数据库中不常使用但又有保留价值的历史数据,从主业务表中移动到专门的归档表或存储中,以保持主业务表的高效运行。

使用分区表: 如果数据有明显的范围特性(如时间),分区是很好的选择。

引入读写分离: 缓解主库压力。

终极方案:

分库分表: 当以上所有手段都无法满足性能要求时,再考虑这个最复杂但扩展性最强的方案。

19.深度分页、读写分离、分库分表后 SQL 该如何优化?

我的博客详解

  • 深度分页:核心问题是OFFSET效率低。首选方案是游标分页(基于ID或时间戳),其次是子查询优化,最后是业务上的限制。
  • 读写分离:核心问题是主从延迟。对于一致性要求高的场景,采用强制读主库的方案,并可以通过AOP注解实现。同时,业务设计上也可以做最终一致性的妥协。
  • 分库分表:这是架构上的重大变化,SQL优化思路完全不同。核心是一切围绕分片键进行
    • 首先要保证有全局ID。
    • 其次,所有查询尽量带上分片键,避免跨库查询。
    • 对于JOIN,采用业务层组装字段冗余
    • 对于聚合和复杂查询,交给异构索引库(如ES)OLAP系统 来处理。
#面试真题#
每日一套面试真题 文章被收录于专栏

记录刷过的面试真题

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-20 10:05
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务