
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
BIO:适合连接数少且活跃的场景(如数据库连接池)。非阻塞 NIO(无 Selector):不实用,仅用于理解概念。IO 多路复用(Selector + epoll):Java 高并发网络编程的基础,适合处理大量长连接。Netty:生产环境首选,几乎所有 Java 高性能网络中间件(Dubbo、RocketMQ、Elasticsearch)都基于 Netty。
HotSpot(最通用,JDK 11/17/21 LTS)。OpenJ9。Azul Zing(商业)或(免费)。GraalVM。JIT的出现,本质上是解决Java跨平台解释执行效率低下的痛点。它通过运行时动态编译热点代码,使得Java在保持“Write Once, Run Anywhere”能力的同时,获得了接近甚至局部超越传统静态编译语言的性能。可以说,没有JIT,Java不可能在服务器端和高性
Spring 的核心是 IoC(Inversion of Control,控制反转)容器,它将对象的创建、装配、管理交给 Spring 框架,从而降低组件之间的耦合度。理解其底层原理,需要从 IoC 思想、Bean 定义与注册、依赖注入机制、Bean 生命周期、循环依赖解决 等多个维度深入剖析。Spring 的 IoC 容器通过 反射 和 工厂模式 实现对象的动态创建与装配。以典型的为例,启动代码
DispatcherServlet 接收请求 → HandlerMapping 定位 → HandlerAdapter 执行 → 拦截器干预 → 返回 ModelAndView → ViewResolver 渲染 → 输出响应阶段组件源码方法接收请求定位处理器执行处理器视图解析视图渲染Viewrender()拦截器回调preHandlepostHandle。
容器启动:Tomcat 等启动,加载web.xml或通过 SPI 发现配置。根容器加载的被 Tomcat 调用,最终调用创建并存入。Web容器加载:作为 Servlet 的,其init()被 Tomcat 调用,最终进入。父子关联中从拿到根容器,并通过建立父子关联。Bean 注册:子容器refresh()→ 扫描 →等 Bean 被注册。→建立 URL 映射。策略初始化→加载 Spring MVC
在秒杀活动场景中,高并发和库存超卖是两个核心挑战。使用 Redis 的内存操作速度以及原子性能力,可以高效地处理库存扣减与请求过滤,再配合 Java 后端进行异步落库、限流等操作,即可实现一个较为可靠的秒杀下单功能。下面给出一种常见的实现方案。
StoreStore:保证屏障前的写先于屏障后的写,用于 volatile 写前。StoreLoad:最强屏障,保证写后读的可见性和顺序,用于 volatile 写后。另外还有LoadLoad和LoadStore,用于 volatile 读后。不同 CPU 架构对这些屏障的实际实现不同(x86 只有 StoreLoad 需要显式指令)。
概念抽象层面实现层面JMM 定义的可见性与顺序规则volatile 写规则对 volatile 写 happens-before 后续读StoreStore + StoreLoad 屏障volatile 读规则LoadLoad + LoadStore 屏障最终保证跨线程的可见性和禁止特定重排序具体 CPU 指令(x86: lock 前缀) + 缓存一致性协议(MESI)
特性volatile保证?底层实现关键点可见性✅ 是内存屏障 + 缓存一致性协议(如 MESI + RFO 机制)有序性✅ 是禁止指令重排序(通过内存屏障限制编译器和 CPU 重排)原子性❌ 否仅保证单次读/写原子,不保证复合操作步骤对应行号作用第一次检查(非同步)第 7 行性能优化,避免每次调用都加锁同步块入口第 8 行线程安全地创建单例第二次检查第 9 行防止多线程重复创建对象创建(含重排序风
角色作用提供互斥锁和可重入性提供等待/通知机制,让线程在条件不满足时释放锁并阻塞,条件满足时被唤醒调用流程核心await(): 释放锁 → 入条件队列 → 阻塞signal(): 出条件队列 → 入同步队列 → 等待锁 → 唤醒后重新竞争锁最终效果:线程既保证了临界区的互斥,又能高效地等待特定条件,避免无效循环和忙等。这正是Condition组合的强大之处。队列管理者存储内容节点转移方向AQS 同








