# 并发

10 篇文章

与「并发」相关的全部文章。

秒杀系统如何设计?

一、挑战 高并发、库存有限、防超卖、防刷。 二、优化手段 1. 前端 按钮置灰,防止重复提交。 答题/验证码防机器人。 2. 网关层 限流(用户维度、IP 维度)。 静态资源 CDN。 3. 应用层 Redis 预减库存,判断是否还有库存。 异步下单:请求写 MQ,消费者处理订单。 本地缓存挡热点商

服务降级和熔断的区别?

一、降级(Degrade) 主动关闭非核心功能,保证核心功能可用。 如大促时关闭评论、推荐,保交易。 是一种策略,通常按预设规则触发。 二、熔断(Circuit Breaker) 下游服务故障时,上游不再调用,直接返回降级结果。 类似电路保险丝,防止故障蔓延。 基于错误率、响应时间等指标自动触发。

常见的限流算法?

一、固定窗口 把时间分成固定窗口,窗口内计数,超过阈值限流。 - 优点:简单。 - 缺点:窗口边界可能突刺(如窗口末尾和下一个窗口开头各来一半,合起来超限)。 二、滑动窗口 把窗口分成多个小格子,随时间滑动,统计格子总数。 - 解决固定窗口的边界问题。 - 实现稍复杂。 三、漏桶算法 请求进桶,桶以

高并发下的缓存策略?

一、缓存层级 L1:浏览器缓存。 L2:CDN 缓存。 L3:Nginx/网关缓存。 L4:应用本地缓存(Caffeine、Guava)。 L5:分布式缓存(Redis)。 L6:数据库。 二、缓存更新策略 Cache Aside:应用先查缓存,没有查数据库,写入缓存。删除缓存(不是更新)。最常用。

高并发系统的优化手段有哪些?

一、前端优化 CDN 加速静态资源。 浏览器缓存、资源合并压缩。 页面懒加载、预加载。 二、网关层 Nginx 负载均衡,动静分离。 限流(令牌桶、漏桶)。 缓存静态页面。 三、应用层 多级缓存:本地缓存(Caffeine)+ 分布式缓存(Redis)。 异步化:消息队列削峰填谷。 线程池调优,合理

CountDownLatch 和 CyclicBarrier 的区别?

一、CountDownLatch 一个或多个线程等待其他线程完成后再继续。 用计数器实现,countDown() 减 1,await() 等待归零。 一次性,归零后不能重置。 场景:主线程等待多个子任务完成。 二、CyclicBarrier 一组线程互相等待,全部到达屏障点后一起继续。 可循环使用,

volatile 关键字的作用?

一、两大作用 可见性:被 volatile 修饰的变量,一个线程修改后其他线程立即可见。实现:写入时立即刷新主内存,读取时从主内存重新加载。 禁止指令重排:在读写操作前后插入内存屏障。 二、不保证原子性 volatile int count = 0; count++; // 不是原子操作,多线程

AQS 的原理是什么?

一、定义 AQS(AbstractQueuedSynchronizer)是 JUC 锁的基础框架,用一个 int 状态变量(state)和一个 FIFO 等待队列实现同步。 二、核心 state:同步状态,0 表示空闲,>0 表示被占用。 CLH 队列:未获取锁的线程封装成 Node 入队,自旋 +

线程池的核心参数与工作流程?

一、七大核心参数 corePoolSize:核心线程数,即使空闲也保留。 maximumPoolSize:最大线程数。 keepAliveTime:非核心线程空闲存活时间。 unit:时间单位。 workQueue:阻塞队列。 threadFactory:线程工厂。 handler:拒绝策略。 二、

synchronized 和 ReentrantLock 的区别?

一、底层实现 synchronized:JVM 级,字节码指令 monitorenter/monitorexit,依赖对象头的 Mark Word。 ReentrantLock:JDK 级,基于 AQS(AbstractQueuedSynchronizer)实现。 二、对比 维度 synchroni