困状态不好的一次

  1. Redis 大key 热key原因 导致的问题,如何解决。热key说了本地缓存和分key还被追问了
  2. Mysql ACID各自咋保障的【锁和MVCC 管并发,保障隔离性。三者合力,达成一致性。】
  3. 介绍实习Redis架构
  4. redis集群如何路由 和 扩容缩容的?
  5. rpc和http区别 rpc是服务间 Https c/s架构一般
  6. rpc设计,我提到了负载均衡、序列化、通信协议、注册中心
  7. 追问: 负载均衡如何监控节点down机
  8. 补充:我没提到rpc可能存在链式调用情况,追问链式调用会发生什么问题 我:服务雪崩
  9. 服务雪崩如何解决 有用过什么框架嘛 sentinel
  10. 一个用户ID如何在rpc链式调用中传递呢
  11. 进程编程做过嘛 举例子
  12. 我说了僵尸进程 ,追问如何解决僵尸进程 我说kill - 9 编写代码及时wait掉子进程
  13. concurrenthashmap没有提到CAS 只说了sychronized
  14. 矩阵dp[i][j]=min(dp[i-1][j]+dp[i][j-1])+grid[i][j]追问如何优化空间复杂度

13. flux 为啥用这个

Redis大key:

导致的问题:

  1. 内存不均:在集群模式下,可能导致某个数据分片内存占用远高于其他节点,影响集群稳定性。
  2. 阻塞操作:使用 DEL 删除大 Key 会阻塞 Redis 服务进程,导致其他命令超时。KEYS, HGETALL, LRANGE 等命令也会长时间阻塞。【使用 UNLINK 命令代替 DEL。UNLINK 会在后台异步删除,不会阻塞主线程。使用 MEMORY USAGE 命令查找大 Key,并使用 SCAN 类命令(如 HSCAN, SSCAN)渐进式处理。】
  3. 网络拥塞:一次查询大 Key 会占用大量带宽,影响其他请求。
  4. 数据迁移困难:在集群扩容或缩容时,大 Key 的迁移会非常耗时,容易导致迁移失败。

Redis热key:导致的问题:

  1. 流量倾斜:在集群模式下,大量请求会集中打到某一个数据分片上,导致该分片 CPU 和网络负载过高,成为系统瓶颈。
  2. 缓存击穿:如果热 Key 突然过期,海量请求会同时穿透到数据库,可能导致数据库瞬时压力过大而宕机。

Flux 是 Reactor 库的核心类,代表一个**异步的、能够发出 0 到 N 个元素的序列流**。核心是**发布-订阅**模型。.subscribe()订阅flux,采用streamobsever接收,具体是onNext和 onComplete,onComplete 是一个基于事件的通知,通过回调机制告诉订阅者流已经完成。sse.send分块把序列流传给前端。

我们使用 Reactor 的 Flux 时,订阅后通过 Subscriber(而不是 StreamObserver)来接收事件。Flux 是一个发布者,它发出数据流,我们通过订阅(subscribe)这个发布者来消费数据。在订阅时,我们提供一个 Subscriber(或者通过 lambda 表达式提供回调函数)来处理数据流中的元素、错误和完成信号。你提到 SSE(Server-Sent Events),确实可以通过 Flux 来发送服务器端事件流。在 Spring 中,我们可以使用 Flux 作为返回类型,并设置媒体类型为 "text/event-stream",然后 Spring 会将其转换为 SSE 流。每个元素都会被发送到前端,直到 onComplete 事件发生,前端会收到一个完成信号。

  1. Segment(分段锁) 在Java 8之前,ConcurrentHashMap使用分段锁技术。它将整个哈希表分成多个段(Segment),每个段是一个独立的哈希表,拥有自己的锁。段的结构ConcurrentHashMap内部包含一个Segment数组,每个Segment是一个类似于HashMap的结构,即一个数组加链表。每个Segment继承自ReentrantLock,因此每个段都是一个可重入锁。

并发操作当进行put、remove等操作时,只需要锁定当前操作所在的段,其他段不会被锁定。

在Java 8及之后的版本中,ConcurrentHashMap放弃了分段锁,转而使用CAS操作和synchronized关键字来实现线程安全。CAS是一种无锁技术,它通过硬件指令来保证操作的原子性。

插入节点:当向一个空的桶中插入节点时,使用CAS来设置节点【比如数组的引用、节点的引用等。】,如果失败则重试或转为使用synchronized锁。

与synchronized的结合当多个线程竞争同一个桶时,ConcurrentHashMap会使用synchronized关键字来锁定桶中的第一个节点,从而保证线程安全。由于锁的粒度很小(只有一个桶),所以并发性能很好。

#找工作中的小确幸##秋招踩过的“雷”,希望你别再踩#
全部评论

相关推荐

威猛的香菇在秋招:感觉假的…测开怎么可能才13k
点赞 评论 收藏
分享
10-13 16:58
门头沟学院 Java
面了100年面试不知...:一周七天,一天去一家上班😍😍😍
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

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