记录面试遇到的面试题

68 阅读3分钟

1 .redis有那几种数据结构,有那些使用场景****

字符串(String)

 

特性:可变长度的字符串,最大长度为 512 MB。

应用场景:

存储简单的键值对,如用户信息、配置项等。

实现计数器,如网页点击数、点赞数等,通过 INCR 和 DECR 操作原子性地增减数值。

作为分布式锁的基础,例如使用 SETNX 实现互斥锁。

列表(List)

 

特性:双向链表,可以两端添加或弹出元素。

应用场景:

实现消息队列,例如工作队列(LPOP/RPOP 或 BLPOP/BRPOP)。

实现文章列表分页展示,最新消息列表等,LRANGE 命令可用于获取指定范围内的元素。

实现栈(push/pop)和队列(lpush/rpop 或 rpush/lpop)的行为。

哈希(Hash)

 

特性:键值对集合,存储对象属性结构化数据。

应用场景:

存储用户信息、产品详情等需要多维度属性的对象数据。

避免多次查询数据库以获取或更新整个对象的多个字段。

集合(Set)

 

特性:无序、唯一元素的集合。

应用场景:

实现标签系统,存储用户兴趣标签、文章标签等。

实现实时统计用户在线状态、共同好友、共同收藏等。

抽奖系统,例如 SPOP 可以随机抽出集合中的元素。

有序集合(Sorted Set,ZSet)

 

特性:与集合类似,但每个成员都关联一个分数,根据分数排序。

应用场景:

排行榜,如用户积分排名、商品销售热度排行等。

时间窗口限流,例如记录最近一段时间内用户的请求次数。

2.mysql怎么优化,如何避免回表

使用覆合索引将sql需要用的字段都添加就能避免回表

3.怎么避免用户在下单页面误触导致的二次下单

后台在处理订单时,确保幂等性设计,即同样的请求多次提交只产生一次有效订单。

为每个订单生成唯一的标识(如订单号或防重key),在提交订单请求时带上此标识,服务器端接收到请求后先检查此标识是否已经存在,若存在则认为是重复订单,不再处理新的下单请求。

4.mq用过哪几种,如何实现防止重复消费,消息堆积,消费异常

消费异常处理:

当消费失败时,将消息重新放回队列等待下次消费,配合退避策略(如指数退避)避免频繁重试。

设置最大重试次数,超过后转入死信队列。

处理消息堆积:

对生产者进行限流,避免短时间内大量消息涌入MQ,超出消费者的处理能力范围。

调整MQ的队列分区数量和消费者分配策略,合理利用集群资源。

防止重复消费:

给每条消息设置全局唯一的标识符(如消息ID),并在消费端记录已消费消息的ID,当接收到新消息时先检查该标识符是否已被消费过。