- 博客(108)
- 收藏
- 关注
原创 Java 设计模式——实战指南:从理论到 SpringBoot 落地,面试项目双丰收
《Java设计模式实战指南:从理论到SpringBoot落地》是一篇聚焦实战的设计模式教程,结合5年项目经验总结出8个高频设计模式的应用场景。不同于传统理论讲解,本文通过SpringBoot框架下的真实项目案例(如单例模式与Spring Bean结合、策略模式实现支付系统),提供可直接运行的代码示例。内容涵盖设计模式核心原则、常见误区,并特别针对面试高频考点(如单例线程安全、Spring AOP代理模式)进行深度解析。帮助开发者避免"纸上谈兵",真正掌握设计模式在项目中的落地应用,提升代
2025-12-25 15:03:48
706
原创 基于 FRP + 云服务器实现安全可靠的远程桌面连接
本文介绍了一种利用FRP(Fast Reverse Proxy)和云服务器实现安全可靠远程桌面连接的方案。该方案解决了没有公网IP时无法使用Windows远程桌面的问题,同时避免了第三方远程工具的高成本和安全风险。文章详细讲解了FRP的工作原理、云服务器选购建议,并提供了FRP服务端和客户端的配置步骤,包括开机自启设置和安全建议。该方案成本低(云服务器月费约5-10元)、稳定性高,特别适合企业环境下受限的远程办公需求,所有操作均基于合法合规前提。
2025-12-22 17:53:47
757
原创 分布式消息队列kafka【六】—— kafka整合数据同步神器canal
本文介绍了分布式消息队列Kafka与数据同步工具Canal的整合方案。主要内容包括: 数据同步概述:解释了数据同步的概念、应用场景和技术选择标准,重点分析了传统同步方式的不足。 Canal简介:详细介绍了Canal作为基于MySQL binlog的增量数据订阅中间件,其工作原理、优点(实时性好、分布式、ACK机制)和缺点(仅支持增量同步、单消费端等)。 环境搭建指南: MySQL配置:开启binlog并设置ROW模式 Canal安装:包括服务部署、配置文件修改(端口、MySQL连接参数等) 权限配置:为Ca
2025-12-16 22:13:36
804
原创 分布式消息队列kafka【五】—— kafka海量日志收集实战
摘要 本文介绍了基于Kafka的海量日志收集实战方案,采用ELK技术栈架构(Filebeat+Kafka+Logstash+ES+Kibana)。重点分析了为何选用Kafka作为缓冲层缓解ES压力,以及Log4j2相比Logback的性能优势(18倍提升)。详细阐述了日志分级策略(app.log/error.log分离)、MDC线程变量等日志处理技术,并深入解析Filebeat轻量级采集原理及其与Logstash的协作关系。该架构通过多组件协同工作,实现了高性能、低延迟的海量日志收集、处理和分析全流程。
2025-12-16 16:19:04
905
原创 分布式消息队列kafka【四】—— 消费者进阶提升
本文介绍了Kafka消费者与消费者组的概念及其应用。Kafka消费者组采用一对多关系,一个消费者组可包含多个消费者,每个分区只能被组内一个消费者消费。文章阐述了Kafka如何同时支持点对点(P2P)和发布/订阅(Pub/Sub)两种消息投递模式:当消费者同属一组时为P2P模式(消息均衡分配);当消费者分属不同组时为Pub/Sub模式(消息广播)。通过Java代码示例展示了生产者发送消息和两种消费模式的实现,其中P2P模式消费者通过订阅主题实现消息独占消费。文中还通过图示说明了消费者动态增减时分区重新分配的过
2025-12-15 22:17:04
927
原创 分布式消息队列kafka【三】—— 生产者进阶提升
本文介绍了Kafka生产者的进阶知识,包括消息发送源码分析、配置参数详解和最佳实践。主要内容有: ProducerRecord结构解析:详细说明topic、partition、headers、key、value等字段含义 关键配置项说明:bootstrap.servers、序列化器、client.id等参数配置要点 线程安全性:KafkaProducer是线程安全的,而KafkaConsumer不是 发送消息方法:send()方法及其重载形式的使用 重试机制:通过retries参数配置,区分可重试异常和不可
2025-12-15 21:56:17
1175
原创 分布式消息队列kafka【二】—— 基础概念介绍和快速入门
本文介绍了分布式消息队列Kafka的核心概念与应用场景。Kafka作为高吞吐量的消息系统,其高性能源于顺序写、PageCache缓存和零拷贝技术。文章详细解析了Kafka的集群架构、Topic与Partition关系,以及通过分区实现消息有序性的机制。在应用层面,Kafka可有效实现异步处理、服务解耦、削峰填谷、海量日志收集、数据同步和实时计算等功能。特别强调了Kafka在日志收集和数据同步场景中的优势,同时指出其权衡可靠性与性能的特点。最后,文章通过架构图直观展示了Kafka的核心组件和消息流转过程。
2025-12-15 21:43:41
1166
原创 分布式消息队列kafka【一】—— 环境搭建及基本配置参数讲解
本文介绍了Kafka分布式消息队列的环境搭建和基本配置参数。主要内容包括:使用kafka_2.12版本、zookeeper-3.4.6协调服务和kafkaManager 2.0.0.2管控台搭建集群环境;详细说明了Kafka的安装配置步骤、kafka-manager可视化管控台的部署方法;提供了Kafka控制台操作验证脚本;重点解析了Kafka服务端关键配置参数,如zookeeper.connect、listeners、broker.id、log.dirs等参数的作用和配置方法。文章为Kafka集群的搭建和
2025-12-15 21:29:32
653
原创 JVM性能调优【二】—— 工具篇
本文总结了Java虚拟机(JVM)性能调优的常用工具,主要分为JDK内置工具和第三方工具两大类。JDK内置工具包括jps(查看JVM进程状态)、jstat(监控JVM运行状态)等监控工具,以及jinfo、jmap、jstack等故障排查工具。文章详细介绍了jps和jstat命令的使用方法、参数选项及输出信息解读,其中jstat特别适用于垃圾收集问题的定位。这些工具虽然部分被标记为"实验性",但在实际生产中非常实用。文章基于JDK 11编写,但大多数内容也适用于JDK 8,对Java开发者
2025-12-10 16:22:20
901
原创 JVM性能调优【一】—— 理论篇
本文详细介绍了JVM内存结构与类加载机制。主要内容包括: JVM内存结构详解 堆内存(新生代/老年代)与方法区的组成与作用 虚拟机栈、本地方法栈和程序计数器的工作原理 不同JDK版本中方法区的实现差异(永久代→元空间) 类加载过程 从.java文件编译为.class文件的过程 使用javap工具反编译查看class文件结构 类加载各阶段的具体工作内容 关键优化点 持久代被元空间替代的原因(内存分配问题) 字符串常量池的位置变化(JDK1.7后移至堆内存) 文章通过代码示例和内存结构图,直观展示了Java程序
2025-12-10 15:28:37
1128
原创 软考高级系统架构师【已过】——数据库系统篇
本文摘要:文章系统介绍了数据库系统的核心概念与设计过程。主要内容包括:1)数据库三级模式(内模式、概念模式、外模式)及其映射关系,保障了数据的逻辑独立性和物理独立性;2)分布式数据库的特性(分布性、可用性等)、分片模式及透明性分类;3)数据库设计流程(需求分析、概念结构设计、逻辑结构设计等阶段),重点讲解了E-R图建模方法(实体、属性、联系的表示)和概念结构设计中的冲突解决方法(属性冲突、命名冲突、结构冲突)。文章通过典型例题帮助理解关键知识点,适合数据库系统学习者快速掌握核心内容。
2025-12-08 17:06:49
812
原创 杭州2024.08 Java开发岗面试题分类整理【附面试技巧】
摘要 本文整理了2024年杭州Java开发岗位面试题,涵盖Java基础、数据库、缓存、分布式系统等核心技术领域。主要内容包括:Java集合框架、并发编程、JVM原理;MySQL索引优化、事务机制、分库分表;Redis数据结构、缓存问题解决方案;分布式事务、服务注册发现、消息中间件等高频考点。同时提供了面试技巧指导,帮助求职者系统准备Java开发岗位技术面试,掌握核心知识要点和实际应用场景。
2025-12-03 15:55:15
630
原创 杭州2023.09 Java开发岗面试题分类整理
本文整理了2023年杭州Java开发岗位的面试题目,涵盖了Java基础、集合、线程、锁、JVM、数据库、Redis、MQ等多个技术领域。内容包含JDK与JRE区别、HashMap原理、线程池工作原理、MySQL索引优化、Redis持久化机制等核心知识点,以及分布式锁、设计模式、Spring框架特性等高级话题。题目类型既有基础概念题,也有实际场景应用题,还包含算法题和系统设计题,全面考察Java开发者的技术深度和广度。
2025-11-24 10:27:35
38
原创 Java 设计模式——工厂模式:从原理到实战的系统指南
Java工厂模式指南:从原理到实践 工厂模式是创建型设计模式的核心,通过分离对象创建与使用逻辑来降低代码耦合度。文章系统介绍了三种工厂模式实现: 简单工厂模式:单一静态工厂类根据参数创建对象,适合简单场景但违反开闭原则 工厂方法模式:每个产品对应专属工厂类,易于扩展但可能造成工厂泛滥 抽象工厂模式:一个工厂生产多个关联产品,适合产品族场景 文章通过手机生产案例,详细展示了各种模式的代码实现、优缺点及适用场景,为企业级开发中的对象创建问题提供了系统解决方案。工厂模式虽结构简单,但能显著提升代码可维护性和扩展性
2025-10-16 16:08:51
699
原创 Java 设计模式——建造者模式:从原理到实战的极简指南
摘要: 建造者模式通过分离对象构建过程与对象本身,解决复杂对象创建时的参数混乱问题。核心优势包括:按需设置属性、提升代码可读性、支持链式调用。传统全参构造方法存在参数顺序依赖和灵活性不足的缺陷,而建造者模式通过手动编写建造者类或使用Lombok的@Builder注解实现优雅构建。适用场景包括多属性类、配置类构建及团队协作项目。进阶技巧涉及属性校验、默认值设置,需注意避免过度使用和线程安全问题。推荐优先使用Lombok简化实现,特殊需求可手写建造者类。
2025-10-16 14:12:45
564
原创 Java 设计模式——适配器模式进阶:原理深挖、框架应用与实战扩展
/ 上层目标接口:统一控制所有设备// 统一控制方法:deviceType区分设备类型(LIGHT/AIR_CONDITIONER)// 配置文件中指定的厂商(A/B)场景需求推荐实现方式理由适配单个类,且无需扩展多个适配者类适配器代码简洁,直接继承适配者类,无需手动组合对象适配多个类、需动态替换适配者对象对象适配器无单继承限制,支持多适配者组合,灵活性强目标接口方法多,仅需使用部分方法接口适配器通过抽象类空实现,避免实现无需的方法,减少代码冗余。
2025-10-16 13:59:20
1092
原创 Java 设计模式——适配器模式:从原理到3种实战的完整指南
Java适配器模式实战指南:3种实现方式解决接口兼容问题 适配器模式是一种结构型设计模式,用于解决接口不兼容问题。本文通过实际案例展示了三种适配器实现方式,并对比了非设计模式的原始方案。 核心场景: 硬件团队提供灯控SDK(LightService) 软件团队需统一控制接口(ControlDeviceBO)管理多种设备 原始方案问题: 业务逻辑与适配逻辑耦合 违反单一职责和开闭原则 直接依赖SDK实现,难以维护 三种适配器实现方案: 类适配器:通过继承实现适配 对象适配器:通过组合实现适配 接口适配器:通过
2025-10-16 13:48:16
1050
原创 Java 设计模式——代理模式:从静态代理到 Spring AOP 最优实现
本文探讨了Java代理模式的核心价值与实现方式。代理模式通过引入代理对象作为中间层,有效解耦业务逻辑与增强功能,解决传统写法中存在的耦合严重、代码冗余和职责混乱问题。 文章从静态代理和动态代理两个维度展开,详细介绍了三种实现方式: 静态代理:手动编写代理类,简单直观但扩展性差 JDK动态代理:基于接口运行时生成代理类,灵活性高 CGLIB动态代理:通过字节码技术代理普通类 重点分析了静态代理的实现过程,包括定义抽象接口、实现目标对象、创建代理对象等步骤,并对比了其优缺点。代理模式特别适用于需要在不修改业务代
2025-10-15 13:26:16
1006
原创 Java 设计模式—— 责任链模式:从原理到 SpringBoot 最优实现
责任链模式是一种解耦请求发送者与处理者的设计模式,通过链式结构实现多处理节点的灵活组合。本文介绍了两种Java实现方式:基于Spring事件驱动模型(利用@Order注解控制监听器执行顺序)和自定义抽象类实现(显式链式调用)。相比传统硬编码流程,责任链模式能更好地适应业务扩展,支持动态调整处理顺序和灵活控制异常流程。文章通过订单取消场景的代码示例,展示了如何将库存恢复、退款等步骤封装为独立处理节点,实现业务逻辑的解耦与复用。
2025-10-15 11:02:38
798
原创 Java 设计模式——策略模式:从 3 种写法到 SpringBoot 进阶
摘要 策略模式是一种解决"算法多样化且频繁切换"问题的设计模式,通过抽象定义、具体实现和工厂调度的三层结构实现解耦。文章对比了传统if-else写法的弊端(违反开闭原则、代码臃肿等),提出策略模式的核心价值在于避免硬编码,使代码更易扩展维护。在实战部分,介绍了三种实现方式,重点展示了非Spring项目下通过Map手动组装策略的完整代码示例,包括策略标识枚举定义、抽象接口设计和具体策略实现(如支付宝、微信支付)。策略模式特别适用于支付方式选择等需要动态切换业务逻辑的场景。
2025-09-17 13:50:25
1266
1
原创 Java 设计模式——观察者模式进阶:分布式场景扩展与实战配置
摘要:本文探讨了观察者模式在分布式环境下的扩展方案,重点介绍了基于消息队列的实现方式。通过RocketMQ+SpringBoot的实战配置,展示了订单服务作为发布者和库存、账户服务作为订阅者的完整流程。文章强调了解耦服务、支持高并发等优势,并提醒注意幂等性校验和分布式锁等关键问题。该方案有效解决了跨服务通知需求,为观察者模式在分布式架构中的落地提供了可行路径(150字)。
2025-09-17 10:20:11
803
原创 Java 设计模式——观察者模式:从 4 种写法到 SpringBoot 进阶
本文介绍了观察者模式在Java中的4种实现方式,重点推荐SpringBoot环境下的两种主流写法:1)通过接口注入自动装配观察者,实现业务解耦,支持执行顺序控制;2)利用Spring事件机制实现更灵活的事件发布/监听,支持异步和事务边界控制。文章还分析了传统JDK实现和Guava事件总线的优缺点,并针对复杂场景给出设计建议,帮助开发者根据不同需求选择最佳实现方案,实现业务模块间的松耦合通信。
2025-09-16 09:56:22
1104
原创 Java 设计模式——单例模式6种写法:从原理到 SpringBoot 落地
本文全面解析Java单例模式的6种实现方式,包括静态内部类、双重校验锁、枚举等。重点分析了各方案的优缺点、适用场景及实现原理,特别强调线程安全、懒加载和防破坏(反射/反序列化)等关键问题。其中静态内部类作为日常开发首选,双重校验锁适合高并发场景,枚举单例则是最安全的防破坏方案。文章还通过代码示例直观展示实现细节,为开发者提供从理论到实践的系统指导。
2025-09-15 16:59:29
1618
1
原创 Java 设计模式——原则:从理论约束到项目落地指南
文章摘要: Java设计模式六大原则是构建可维护、可扩展代码的基础方法论。本文系统讲解了单一职责、开闭原则、里氏替换等核心原则,通过实际案例展示如何落地应用。开闭原则是终极目标,强调通过扩展而非修改实现需求变化;里氏替换原则确保子类能安全替换父类;单一职责原则要求每个类/方法只做一件事。文章还结合SpringBoot等框架源码,说明设计原则在主流技术中的体现,并关联到策略模式等具体设计模式的应用场景。掌握这些原则能有效解决"需求多变"与"代码难改"的矛盾。
2025-09-15 14:19:16
652
原创 Java 设计模式——分类及功能:从理论分类到实战场景映射
设计模式按目的分为创建型(解决对象创建问题,如单例、工厂模式)、结构型(优化模块组合,如代理、适配器模式)和行为型(协调对象协作,如观察者、策略模式)。按作用范围分为类模式(静态继承,如模板方法)和对象模式(动态组合,如策略模式)。这些模式帮助开发者灵活应对项目中的创建、扩展和解耦需求,通过分类快速定位解决方案。文章结合Java实战场景,展示各模式如何解决具体开发痛点,如Spring单例、AOP代理等应用。
2025-09-15 13:06:46
515
原创 助力每一个未来的AI人工智能工程师——01.概述and特征提取
无法量化的事情,就无法优化!AI应用于具体的应用场景,有可能是文本、视频、电商…,把这些场景的东西,根据领域知识、经验和产品经理,把这些场景的东西用刚刚的方法量化,变成一个向量,之后,场景的差异就屏蔽掉了,然后走模型,得出想要的结果通过领域知识变成向量以后,所有场景就都是一样的,今日头条跳到淘宝也是可以的,只需要对领域做改变即可所以学AI最重要的是模型,场景量化是通过领域知识进行的,可以思考自己工作场景中什么东西可以向量化!场景——>向量——>模型,场景转换为向量的过程叫做特征工程传统模型。
2025-01-07 22:47:07
1079
原创 阿里某子公司一面笔试题——使用3个线程,一个线程打印X,一个线程打印Y,一个线程打印Z,需要连续的打印10个“XYZ“,在执行完成后打印Hello World
阿里某子公司一面笔试题——使用3个线程,一个线程打印X,一个线程打印Y,一个线程打印Z,需要连续的打印10个"XYZ",在执行完成后打印Hello World。
2024-10-27 16:12:00
361
1
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第四章——LockSupport与线程中断
指java.util.concurrent.locks.LockSupport类,功能非常强大!首先一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以Thread.stop,Thread.suspend,Thread.resume都已经被废弃了其次在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制——中断,也即中断标识协商机制。
2024-03-11 09:31:27
1187
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第十三章——ReentrantLock、ReentrantReadWriteLock、StampedLock讲解
*锁降级 ** 下面的示例代码摘自ReentrantReadWriteLock源码中:ReentrantReadWriteLock支持锁降级,遵循按照获取写锁,获取读锁再释放写锁的次序,写锁能够降级成为读锁,不支持锁升级* if (!* }* }* }* try {* }* }* }}代码中声明了一个volatile类型的cacheValid变量,保证其可见性首先获取读锁,如果cache不可用,则释放读锁。
2024-02-22 11:17:17
700
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第十二章——AbstractQueueSynchronizer之AQS【重要】
AQS同步队列的基本结构有阻塞就需要排队,实现排队必然需要队列AQS自身:state变量+CLH双端队列尝试加索加锁失败,线程入队列线程入队列后,进入阻塞状态。
2024-02-22 11:14:49
1244
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第十一章——Synchronized与锁升级
ps:图片来源于百度,若侵权,联系我删除没有锁:自由自在偏向锁:唯我独尊轻量锁:楚汉争霸重量锁:群雄逐鹿。
2024-02-22 11:05:12
778
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第十章——Java对象内存布局和对象头
对象头(Header)、实例数据(Instance Data) 和对齐填充(Padding)。
2024-02-22 10:48:48
1325
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第九章——聊聊ThreadLocal
ThreadLocal中ThreadLocalMap的数据结构和关系?ThreadLocal的key是弱引用,这是为什么?ThreadLocal内存泄漏问题你知道吗?ThreadLocal中最后为什么要加remove方法?返回此线程局部变量的当前线程的“初始值”。该方法将被调用的第一次一个线程访问与可变get()方法,除非线程先前调用的set(T)方法,在这种情况下initialValue方法将不被调用的线程。
2024-02-22 10:40:33
1195
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第八章——原子操作类之18罗汉增强
public final int get() //获取当前的值public final int getAndSet(int newValue) //获取当前的值,并设置新的值public final int getAndIncrement() //获取当前的值,并自增public final int getAndDecrement() //获取当前的值,并自减public final int getAndAdd(int delta) //获取当前的值,并加上预期的值。
2024-02-22 10:29:54
1132
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第七章——CAS
需要记住:CAS是靠硬件实现的从而在硬件层面提升效率,最底层还是交给硬件来保证原子性和可见性实现方式是基于硬件平台的汇编指令,在inter的CPU中,使用的是汇编指令compxchg指令核心思想:比较要更新变量V的值和预期值E,相等才会将V的值设为新值N,如果不相等自旋再来。
2024-02-22 10:22:08
1109
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第六章——volatile与JMM
volatile关键字保证可见性对一个被volatile关键字修饰的变量1写操作的话,这个变量的最新值会立即刷新回到主内存中2读操作的话,总是能够读取到这个变量的最新值,也就是这个变量最后被修改的值3当某个线程收到通知,去读取volatile修饰的变量的值的时候,线程私有工作内存的数据失效,需要重新回到主内存中去读取最新的数据volatile写之前的操作,都禁止重排序到volatile之后volatile读之后的操作,都禁止重排序到volatile之前。
2024-02-22 10:15:56
1212
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第五章——Java内存模型之JMM
我们定义的所有共享变量都储存在物理主内存中每个线程都有自己独立的工作内存,里面保证该线程使用到的共享变量的副本(主内存中该变量的一份拷贝)线程对共享变量所有的操作都必须先在线程自己的工作内存中进行后写回主内存,不能直接从主内存在读写(不能越级)不同线程之间也无法直接访问其他线程的工作内存中的变量,线程间变量值的传递需要通过主内存来进行(同级不能互相访问)。在Java语言里面,Happens-before的语义本质上是一种可见性。
2024-02-22 10:06:31
1023
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第三章——说说Java“锁“事
1-2:一个对象里面如果有多个 synchronized 方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法,其它线程都只能等待。换句话说,某一个时刻内,只能有唯一的一个线程去访问这些synchronized方法。锁的是当前对象this,被锁定后,其它线程都不能进入到当前对象的其它的synchronized方法3-4:加个普通方法后发现和同步锁无关换成两个对象后,不是同一把锁了,情况立即变化5-6: 都换成静态同步方法后,情况又变化。
2024-02-22 10:01:39
1402
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第二章——CompletableFuture
文章目录Future接口理论知识复习Future接口常用实现FutureTask异步任务Future接口能干什么相关接口目的Runnable接口和Callable接口区别Thread类构造方法本源的Future接口相关架构Future接口的继承关系构造方法CodeFuture编码实战和优缺点分析优点案例小总结缺点1案例小总结缺点2案例小总结结论想完成一些复杂的任务回调通知创建异步任务多个任务前后依赖可以组合处理(水煮鱼)对计算速度选最快...CompletableFuture引入CompletableFut
2024-02-22 09:50:35
1343
原创 bilibili尚硅谷周阳老师JUC并发编程与源码分析课程笔记第一章——线程基础知识复习
如果用户线程全部结束意味着程序需要完成的业务操作已经结束了,守护线程随着JVM一同结束工作。
2024-02-21 16:11:44
1519
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅