自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

weixin_37926313的博客

创建MFC工程

  • 博客(56)
  • 收藏
  • 关注

原创 JDK 自带命令行诊断工具复习

场景推荐工具注意事项快速看进程jps容器内执行GC 监控长期观察趋势内存泄漏jmap -dump+ MAT避免高峰使用线程问题jstack结合 CPU 分析综合诊断jcmd优先使用。

2025-12-22 21:43:18 631

原创 JVM 类加载机制复习

阶段核心作用面试关键词加载获取字节码,生成 Class 对象ClassLoader、双亲委派验证保证字节码安全合法准备static 字段分配内存 + 零值零值 vs 赋值解析符号引用 → 直接引用静态解析 vs 动态分派初始化执行<clinit>主动使用、7 种触发条件。

2025-12-18 21:35:41 952

原创 WeakHashMap 学习

是 Java 标准库(java.util包)中的一种特殊Map实现。键(Key)被包装为弱引用(WeakReference),当某个键对象不再被任何强引用持有时,即使它还在中,也会在下一次垃圾回收(GC)时被自动移除。这使得成为一种自动清理的 Map,非常适合用于缓存或元数据映射等场景。维度说明本质key 为弱引用的 Map核心机制依赖 JVM GC + ReferenceQueue自动清理在下次访问时触发(懒清理)线程安全❌ 不安全(需外部同步)生产可用✅ 但仅限特定场景(元数据、防泄漏)

2025-12-13 21:21:39 871

原创 堆转储 探索

堆转储(Heap Dump)是 JVM 在某一时刻整个堆内存的快照,以.hprof文件形式保存。所有存活对象的实例对象的类信息对象之间的引用关系对象占用的内存大小本该被回收的对象,因被意外强引用而无法释放,持续占用堆内存。堆转储能让你“看到”这些不该存在的对象及其引用链。步骤关键动作1️⃣ 生成堆转储或jcmd2️⃣ 打开分析使用 Eclipse MAT3️⃣ 定位大对象查看,按 Retained Heap 排序4️⃣ 追溯引用链。

2025-12-11 21:30:35 580

原创 JVM 运行时数据区的各个组件分别存储什么内容

区域是否线程共享存储内容是否在 JVM 堆中GC 相关堆(Heap)是对象实例、数组、字符串常量池是是(主要 GC 区域)元空间(Metaspace)是类元数据、方法字节码、运行时常量池否(本地内存)类卸载时回收,频率低虚拟机栈否局部变量、方法调用栈帧否方法结束自动释放本地方法栈否native 方法调用信息否同上程序计数器否当前执行指令地址否无。

2025-12-11 21:07:32 938

原创 JVM 堆内存如何GC,GC时发生了什么

JVM 把对象按“寿命”分代管理:短命的在年轻代快速回收,长寿的进老年代集中处理。GC 是内存不足时的“清洁行动”,Young GC 是日常打扫,Full GC 是全城大扫除——我们要做的,就是让大扫除永不发生。

2025-12-09 21:41:23 871 2

原创 JVM 元空间

参数作用生产建议首次 Full GC 触发阈值设为稳态使用量(如 256m)元空间硬上限必须设置,容器中尤其关键🌟黄金法则“可观测 + 有上限 + 留余量”在生产环境中,永远不要依赖 JVM 的默认无限制行为。通过合理配置这两个参数,你不仅能避免 Metaspace OOM,还能减少不必要的 Full GC,提升应用的稳定性与性能。

2025-12-09 20:59:28 928 1

原创 JVM 参数

JVM 调优 = 监控 + 分析 + 调整Java 8 推荐使用G1 GC(尤其堆 > 4G)GC 日志是调优的黄金数据面试重点:内存模型、GC 算法对比、OOM 排查、参数含义。

2025-12-08 21:30:40 1075 1

原创 JVM 复习

✅基础配置(避免堆扩容抖动)设置(防止 Metaspace OOM)开启详细 GC 日志(故障排查必备)✅GC 选择Web 服务:CMS(精细调参)或 G1(推荐)批处理:Parallel GC大堆(> 8G):G1✅监控告警监控 Minor GC 频率、Full GC 次数、老年代使用率Full GC > 0 立即告警老年代使用率 > 70% 持续增长告警✅应急手段熟练使用jstatjmapjstack掌握 Arthas 线上诊断。

2025-12-07 21:49:11 999

原创 认识 Java 中的锁升级机制

锁升级是 JVM 的“安全网”,但真正的高手从不依赖安全网。理解原理:知道 JVM 如何优化,也知其局限规避竞争:通过无状态设计、分片、异步化减少锁需求工具驱动:用 JFR、Arthas 验证假设,而非猜测权衡取舍:在一致性、性能、复杂度间找到平衡点“最好的并发控制,是没有并发控制。—— 通过架构设计从根本上消灭锁,才是高级工程师的终极追求。

2025-12-02 21:19:29 993 1

原创 线程池监控是什么

强调“可观测性”理念:监控不是目的,而是保障 SLO 的手段。区分“指标”与“日志”:指标用于聚合告警,日志用于追踪单次任务。提到“拒绝策略监控”:很多候选人忽略这点,但它是关键故障信号。知道如何动态调参:结合监控数据 + 动态配置中心(如 Nacos)实现弹性伸缩。警惕“虚假指标”:如不可靠,需自行计数。生产级线程池监控,本质是将黑盒变为白盒的过程。一个没有监控的线程池,就像一辆没有仪表盘的汽车——你不知道它何时会抛锚。

2025-11-29 22:19:51 623

原创 AQS 学习理解

Override@Override💡 这展示了 AQS 的可定制性:你可以定义任意获取规则。维度说明本质基于 state + CLH 队列的同步框架核心机制CAS 修改 state + 阻塞/唤醒线程队列使用模式独占(Exclusive) / 共享(Shared)代表类优势高性能、可中断、可超时、可公平、可共享适用场景需要精细控制线程同步行为的高并发系统✅面试建议当被问到“AQS 原理”时,不要只背概念,应结合ReentrantLock 或 Semaphore 的源码。

2025-11-28 21:33:37 880

原创 synchronized 与 ReentrantLock 复习

维度结论原理基于 JVM Monitor,基于 AQS选型原则默认用,特殊需求才用性能低竞争下更优;高竞争下两者接近安全性更安全(自动释放);更灵活但易错💡终极建议在 90% 的业务代码中,已足够。只有当你明确需要中断、超时、公平性或多条件等待时,才考虑。

2025-11-27 20:29:37 852 1

原创 分布式 学习

分布式系统(Distributed System)是指由多个相互连接的节点(通常是独立的计算机或服务实例)组成的系统,这些节点通过网络协同工作,对外表现为一个统一的整体。用户或客户端通常感知不到内部的复杂性。分布式出现原因:业务增长 + 单体瓶颈 + 技术成熟。核心挑战:一致性、容错、通信、协调。关键技术:CAP、Raft/Paxos、2PC/TCC/Saga、服务发现、负载均衡。Java 实践:ZooKeeper、Seata、Dubbo、Spring Cloud Alibaba 等生态工具链成熟。

2025-11-26 20:41:52 849

原创 遇到大SQL怎么处理

初级开发者高级开发者“怎么让这条 SQL 跑快点?“为什么会有这条 SQL?能不能不存在?优化索引、加 hint拆分职责、分层架构、CQRS关注单点性能关注系统可维护性、演进成本、团队效率🎯记住:最优解不是“优化大 SQL”,而是“让大 SQL 消失”。

2025-11-25 21:46:29 806

原创 悲观锁复习

悲观锁是一种并发控制策略,假设并发冲突必然发生,因此在读取数据时就主动加锁,阻止其他事务修改(甚至读取),直到当前事务完成。在 PostgreSQL 中,悲观锁通过 SQL 语句如实现,底层依赖于行级排他锁(Row-Level Exclusive Lock)和MVCC(多版本并发控制)的协同机制。悲观锁 =+ 事务 + 索引优化在 PostgreSQL 中,它是保障强一致性的可靠手段,适用于低并发、高价值、强事务场景。但在高并发互联网系统中,应将其作为兜底方案,配合缓存、队列、限流等手段使用。

2025-11-24 20:41:35 783

原创 乐观锁是什么

要点说明核心机制version 字段 + 更新时 WHERE 条件校验冲突发现SQL 影响行数为 0 或 JPA 抛出异常Spring Boot 实现@Version注解 +适用场景低频写、高并发读、允许用户重试面试亮点原理清晰 + 场景真实 + 异常处理策略掌握乐观锁,不仅是对数据库并发控制的理解,更是对系统设计权衡能力的体现。

2025-11-23 09:47:29 530

原创 接口幂等性(Idempotency)

幂等性(Idempotence):一个操作无论执行一次还是多次,其结果都完全相同,不会产生副作用。对同一个请求(含相同参数、用户、业务标识等),重复调用 N 次,和调用 1 次的效果一致。“在分布式系统中,网络不可靠是常态,幂等性不是可选项,而是保障数据一致性的底线设计。

2025-11-21 21:18:22 581

原创 synchronized ReentrantLock ConcurrentHashMap 三种常用锁复习

锁类型定位适用场景面试关键词默认、安全、简洁小粒度同步、DCL 单例锁升级、JMM、volatile 必要性灵活、可控、强大超时、中断、复杂同步AQS、CLH 队列、公平性高效、封装、无感缓存、状态共享、懒加载锁分段、volatile 读、computeIfAbsent掌握这些原理 + 场景 + 话术,你不仅能写出正确代码,更能展示架构思维与工程权衡能力——这才是高级工程师的核心竞争力。

2025-11-20 21:07:24 53

原创 并发问题 锁复习 一

锁类型底层机制是否可重入是否可中断适用场景✅❌简单同步AQS + CAS✅✅复杂控制AQS(读写分离)✅✅读多写少Stamp + 乐观读✅(写锁)✅高性能读🔑核心思想锁不是目的,而是手段。真正的目标是在保证正确性的前提下,最大化并发性能。

2025-11-19 22:11:16 864

原创 Nacos 配置中心与本地代码工程配置文件之间的优先级关系

Nacos 配置中心 ≻ 本地 application.yml ≻ bootstrap.yml(功能不同)原理上:Nacos 配置通过 Bootstrap Context 注入高优先级 PropertySource。实践中:Nacos 用于生产环境集中管理 + 动态更新,本地配置用于开发默认值。架构上:这是云原生“配置外置”理念的核心体现,提升系统弹性与可运维性。合理利用这一优先级机制,能让你的微服务既灵活又安全,真正实现“一次构建,随处部署”的 DevOps 目标。

2025-11-18 21:15:46 1109

原创 CompletableFuture 学习

是Future的增强版,实现了Future和非阻塞异步计算链式调用(Fluent API)任务组合与编排异常处理与降级自定义线程池执行✅ 它是 Java 原生对响应式编程(Reactive Programming)和函数式编程的支持。✅强烈推荐使用微服务聚合(BFF 层)异步流水线(订单、支付、审批流)高并发 I/O 场景(HTTP/RPC 调用)需要超时、降级、重试的容错场景❌不推荐使用简单后台任务(用Runnable即可)CPU 密集型计算(考虑或并行流)

2025-11-17 21:53:46 941

原创 AOP Aspect 相关注解

注解/表达式作用示例@Aspect标记切面类@Pointcut定义可复用切点@Around环绕通知(最强大)可控制是否执行原方法@Before@After前置/后置通知无法阻止方法执行按方法签名匹配匹配带注解的方法within()匹配包或类&&, `!场景推荐方式全局日志、监控+ 包路径权限、审计、缓存自定义注解 +接口限流、幂等注解 + 组合切点事务管理直接用(Spring 已实现)🚀最佳实践优先使用自定义注解 + AOP,语义清晰;切点表达式尽量精确,避免性能问题;

2025-11-16 22:24:51 862

原创 AOP 与 Aspect

AOP(面向切面编程)是一种编程范式,旨在将横切关注点(cross-cutting concerns)从主业务逻辑中分离出来,提高模块化程度。它是一种思想或方法论。Aspect(切面)是 AOP 中的具体实现单元,是对横切关注点的模块化封装。一个切面通常包含通知(Advice)和切点(Pointcut),用于定义“在何处”、“以何种方式”织入额外逻辑。维度AOPAspect性质编程范式 / 设计思想具体代码模块 / 类范围整体架构层面实现细节层面内容。

2025-11-16 20:49:04 628

原创 AOP 与 Aspect 复习

在传统的 OOP(面向对象编程)中,业务逻辑被封装在类和方法中。但有些功能(如日志记录、事务管理、安全检查、性能监控等)会横跨多个模块,无法很好地封装到单一类中,这类功能称为“横切关注点”。代码重复业务逻辑与非业务逻辑耦合难以维护和扩展@ServiceSystem.out.println("正在查询用户: " + id);System.out.println("正在删除用户: " + id);@Aspect@Component// 定义切入点:UserService 中所有方法。

2025-11-15 21:49:52 738

原创 线程池原理复习

线程池不是简单的“多线程工具”,而是一个微型操作系统—— 它调度任务、管理资源、处理异常、实施背压。在高并发下保持系统稳定快速定位线程阻塞、任务堆积问题设计出具备弹性、可观测、可运维的异步架构如果你正在构建金融、电商、物联网等关键系统,对线程池的理解深度,直接决定系统的 SLA 水平。

2025-11-14 22:06:03 746

原创 CPU 缓存 高并发探索

🔹核心观点“在高并发系统中,瓶颈往往不在算法,而在缓存。我们写的每一行 Java 代码,最终都在和 CPU 缓存博弈。🔹技术亮点伪共享是“隐形性能杀手”,@Contended是 JDK 提供的精准手术刀LongAdder通过分片 + 缓存行隔离,实现近线性扩展Disruptor 的极致性能,一半功劳归于缓存友好设计🔹延伸思考“未来随着 CXL、存算一体等新技术发展,缓存层级可能重构,但‘局部性’和‘一致性’的权衡,永远是并发系统的底层命题。

2025-11-13 21:31:43 666 1

原创 “系统性”学习高并发路线

🔑不要追求“知道所有技术”,而要追求“理解问题本质 + 能设计方案 + 能落地验证”从问题出发:先想“如果线上 QPS 突增 10 倍,我的系统哪里会崩?动手驱动:每个知识点都配一个 mini 项目或实验闭环验证:学完就压测、就监控、就写文档持续迭代:高并发没有终点,只有不断逼近最优解。

2025-11-12 22:07:21 970

原创 JAVA后端动态代理复习

动态代理是一种在运行时动态生成代理对象的技术,用于拦截对目标对象方法的调用,并在调用前后插入增强逻辑(如日志、事务、权限控制等),而无需修改原始类代码。它是AOP(面向切面编程)的核心实现机制。@Aspect@Component// 伪代码:从 SecurityContext 获取if (!throw new AccessDeniedException("权限不足,需要角色: " + requiredRole);

2025-11-12 20:42:40 1077

原创 Spring Boot 的全局异常处理

/ 基础业务异常// 具体业务异常(可选,便于分类处理)super(1001, "用户不存在: " + userId);super(1002, "商品库存不足,SKU=" + skuId + ", 需求量=" + required);super(1003, "用户今日订单已达上限: " + userId);✅ 异常类携带语义化错误码(如 1001=用户不存在),便于前端/客户端做差异化提示或埋点。“在项目中,全局异常处理采用+ 自定义异常体系。

2025-11-11 21:16:13 865

原创 SQL 注入复习

在 MyBatis 项目中,SQL 注入的核心防线是正确区分#{}和${}的使用场景。所有用户输入的‘值’必须用#{};任何动态‘标识符’(表名、字段名、排序)必须经过白名单校验;禁止前端直接传字段名,改为传业务语义参数(如 sortType=NAME)。此外,通过SQL 审计插件 + 数据库最小权限 + WAF构建三层防护,确保即使出现疏漏,也能兜底止损。安全不是功能,而是架构的一部分。

2025-11-10 21:42:35 883

原创 MyBatis 插件

Component))@Autowired@Override// 只审计 DMLif (!try {// 执行原 SQL// 构建审计日志// 异步保存log.error("审计异常", e);throw e;// ... 工具方法:脱敏、取用户、取 IP、解析表名等“MyBatis 插件不是炫技,而是工程化思维的体现。它让我们在不修改一行业务代码的前提下,实现系统级能力的统一管控。

2025-11-10 21:25:57 911

原创 大模型 AIGC、Agent、MCP、RAG、Function Call分别是什么?

定义:人工智能生成内容,泛指由 AI 自动生成文本、图像、音频、视频等内容。原理基础:依赖于大规模预训练语言模型(LLM)、扩散模型(如 Stable Diffusion)、语音合成模型等。典型应用文本创作(新闻稿、小说、营销文案)图像生成(Midjourney、DALL·E)视频生成(Sora、Runway)音乐/语音合成(ElevenLabs)✅定位:AIGC 是目标层——即“要做什么”,是大模型能力的最终输出形态。

2025-11-09 19:57:18 1066

原创 Redis学习笔记

是一个开源的、基于内存的高性能键值(Key-Value)存储系统,常被用作缓存、消息队列、分布式锁、会话存储等。它支持多种数据结构(如 String、Hash、List、Set、Sorted Set、Bitmap、HyperLogLog、Geospatial 等),并提供丰富的操作命令。维度结论是否值得用?✅ 在绝大多数高并发、分布式系统中,Redis 是不可或缺的基础设施能否替代数据库?❌ 不能!它是缓存/加速层,数据最终一致性仍依赖 DB学习成本?

2025-11-08 22:47:00 922

原创 什么是CSV 注入,应该怎么防护?

/ 半角// 全角// 其他潜在混淆字符(可选)'﹦', '₌'));// 检查首字符是否为危险字符(忽略前后空格?根据业务决定)// 方案1:添加单引号前缀(推荐,Excel 会显示原始内容)// 方案2:添加制表符(\t),但可能影响对齐风险点说明半角字符是经典触发符全角字符在特定条件下可被 Excel 识别或转换混淆字符如﹦₌可用于绕过简单黑名单防御核心对所有用户输入字段首字符进行全角/半角危险符检测,并添加转义不要依赖 CSV 库自动处理。

2025-11-08 21:45:23 657

原创 Java 如何防止 DoS 攻击

/ 事件循环组:boss 处理连接请求,worker 处理读写(线程数=CPU核心数*2,避免线程冗余)try {// 限制服务器最大等待连接数(backlog:TCP 半连接队列大小,默认128,需结合系统参数调整)// 开启 TCP 保活,检测无效连接// 关闭 Nagle 算法,提升实时性(非必需,根据业务调整)@Override// 空闲连接检测:60秒无读写则关闭连接(防止长连接占用)// 后续业务处理器...});最小权限原则。

2025-11-06 21:37:54 703

原创 CountDownLatch 使用

✅Do初始化CountDownLatch(count = 任务数);在finally块中调用;使用避免无限等待;结合或线程安全集合收集结果;线程池使用有界队列 + 自定义拒绝策略。❌Don't不要在任务中直接操作主线程逻辑;不要复用已归零的;不要忽略。

2025-11-06 21:12:11 925

原创 Nacos 是什么?

如果你在构建新微服务系统Nacos 是国内首选,尤其适合 Spring Cloud Alibaba 或 Dubbo 用户。如果你已有 Eureka + Config 架构:可评估迁移到 Nacos,降低组件数量,提升运维效率。如果你需要强审计、多语言、多云支持:可对比Consul或Apollo。在 K8s 环境中:Nacos 可与 ConfigMap/Secret 互补,用于动态业务配置(而非基础设施配置)。🌟一句话总结。

2025-11-05 21:19:29 618

原创 以Java语言为例,解释因为正则可能出现的ReDos攻击

项目说明ReDoS 实质利用 Java 正则引擎的回溯机制,通过恶意输入触发指数级计算高危正则特征嵌套量词(a+)+、模糊匹配.*与量词组合、交替项重叠 `(aJava 风险点无超时机制,默认引擎易受攻击最佳实践1. 避免危险正则2. 限制输入长度3. 使用 RE2J4. 超时包装(谨慎使用)🔐安全原则永远不要对不可信用户输入直接使用复杂正则表达式进行匹配,尤其是在 Web 请求、日志解析、表单校验等高频路径中。通过合理设计和工具选择,ReDoS 在 Java 中是完全可以预防的。

2025-11-03 21:10:34 658

原创 SpringBoot 集成 RabbitMQ

下面是一个完整的commonproducerconsumer整个项目采用,符合生产级标准。

2025-10-28 13:41:34 186

SpringBoot 集成 RabbitMQ

SpringBoot 集成 RabbitMQ 直接结合本地 RabbitMQ 使用

2025-10-28

windows 环境 rabbitmq-server-4.1.4.zip 二进制包

rabbitmq_server

2025-10-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除