- 博客(26)
- 收藏
- 关注
原创 拆解DDD必知的六大核心概念:一篇文章让你彻底掌握领域驱动设计!
本文介绍了领域驱动设计(DDD)的六大核心概念:领域和子域(业务问题空间及其细分)、模型(业务概念的简化表示)、界限上下文(模型的范围边界)、聚合和实体(数据一致性单元)、值对象和领域事件(无标识对象和业务状态变化)。通过对话形式,用电商平台等实例生动解释了这些概念的区别与联系,帮助开发者理解如何用DDD解决复杂业务问题,并合理分配技术资源。文章强调好的领域模型应反映业务思维而非纯技术视角,界限上下文划分是战略决策的关键。
2025-07-01 16:46:42
169
原创 【实战剖析】深入ThreadLocal核心原理,彻底消灭多线程Bug!
本文深入剖析ThreadLocal的核心原理与应用。ThreadLocal通过为每个线程创建变量副本,实现线程隔离的数据共享机制。其底层通过ThreadLocalMap存储数据,ThreadLocal对象作为key。文章通过对话形式讲解ThreadLocal基础用法,解析源码实现,并指出其潜在的内存泄漏风险及解决方案(及时remove、static修饰等)。ThreadLocal特别适合Web请求上下文传递、线程安全变量管理等场景,正确使用能有效解决多线程并发问题。
2025-07-01 14:57:55
393
原创 揭秘Java序列化:7种方式全方位对比,哪种才是你的最佳选择?
本文通过对话形式对比了Java中7种常见序列化方式:Java原生序列化、JSON、XML、Protobuf、Kryo、Hessian和Avro。每种方式各有特点,适用于不同场景:Java原生简单但性能差,JSON灵活可读但体积大,Protobuf高效但需Schema定义,Kryo快速但跨语言支持弱。选择时需考虑性能、体积、兼容性、跨语言支持等需求。对于大多数项目,JSON和Protobuf是较优选择,而高性能场景可考虑Kryo或Avro。
2025-07-01 14:57:28
164
原创 【性能提升指南】Java GC调优实战:3招减少Minor GC频率,吞吐量提升50%!
Java GC调优实战摘要 本文通过对话形式介绍了Java垃圾回收调优技巧,重点解决Minor GC频繁问题。文章首先分析了Minor GC频繁的四大原因:年轻代空间过小、短周期对象过多、晋升阈值不合理及GC算法不匹配。随后提出三个核心优化策略:1)合理设置年轻代大小(-Xmn参数调整);2)优化对象分配(使用对象池、避免临时对象);3)调整GC算法(Parallel GC/G1 GC)及相关参数。最后强调需通过监控Minor GC频率、停顿时间等指标评估调优效果。全文以实战案例为基础,提供了具体的参数配置
2025-07-01 11:56:31
668
原创 Bean的生命周期是怎样的?
Spring Bean的生命周期主要包含以下阶段:1)实例化 - 通过反射创建Bean对象;2)属性注入 - 设置依赖项和属性值;3)初始化前 - 执行BeanPostProcessor前置处理;4)初始化 - 调用@PostConstruct、InitializingBean接口或自定义init-method;5)初始化后 - 执行BeanPostProcessor后置处理(如AOP代理);6)就绪 - 可供应用程序使用;7)销毁前 - 执行清理准备工作;8)销毁 - 调用@PreDestroy、Disp
2025-07-01 09:00:00
652
原创 领域驱动设计(DDD):从概念到实践
领域驱动设计(DDD)是一种以业务领域为中心的软件开发方法论,由Eric Evans于2004年提出。与传统技术导向架构不同,DDD强调通过领域专家与开发团队协作,建立反映业务现实的软件模型。其核心概念包括通用语言、限界上下文、领域模型等,将复杂系统划分为边界清晰的业务模块。DDD适用于业务复杂度高、需要长期演进的核心系统,能提高业务与技术的一致性,降低沟通成本,增强系统灵活性。虽然DDD需要团队投入时间深入理解业务,但正确应用能显著提升复杂业务系统的可维护性和扩展性。
2025-07-01 08:45:51
368
原创 【技术揭秘】一文读懂Java所有垃圾回收器,从入门到精通!
【Java垃圾回收器全面解析】文章摘要: 本文通过对话形式生动讲解了Java垃圾回收机制的发展历程和技术特点。从基础概念入手,介绍了年轻代和老年代的内存模型,并详细解析了Serial、ParNew等第一代单线程/多线程收集器,专注于高吞吐量的Parallel系列收集器,以及追求低延迟的CMS收集器。还提到了新一代区域化分代的G1收集器和超低延迟的ZGC、Shenandoah。文章对比了各类收集器的工作原理、优缺点和适用场景,帮助开发者根据应用需求选择合适的垃圾回收策略,解决内存溢出和高延迟等问题。
2025-06-30 18:00:19
535
原创 【震撼解密】一篇文章彻底搞懂MySQL索引优化,性能提升300%!
本文通过对话形式深入讲解MySQL索引优化技巧,帮助提升数据库性能300%。首先介绍了B+树索引结构及其优势,解释了聚簇索引与非聚簇索引的区别。通过案例分析,演示如何使用EXPLAIN诊断查询性能,并给出五大核心优化技巧:最左前缀原则、避免索引列计算、合理选择列顺序、利用覆盖索引、控制索引数量。文章以通俗易懂的方式,结合图表展示,为读者提供了一套完整的MySQL索引优化方法论。
2025-06-30 17:59:41
515
原创 什么是DI(依赖注入)?常见的注入方式有哪些?
摘要 依赖注入(DI)是IoC的一种实现方式,通过外部提供依赖对象而非由对象自行创建。Spring框架中主要提供四种注入方式:1)构造器注入(强制依赖,对象不变性);2)Setter注入(灵活可选依赖);3)字段注入(简洁但隐藏依赖);4)接口注入(较少使用)。通过组装电脑、餐厅厨师等生活类比,DI将组件创建与使用分离,提高代码可维护性。不同注入方式各有优劣,构造器注入推荐用于必需依赖,Setter注入适合可选依赖,而字段注入虽简便但应谨慎使用。
2025-06-30 15:30:00
568
原创 什么是IOC(控制反转)?—— 用生活实例解读Spring核心概念
本文通过生活实例生动解释了Spring框架中的IOC(控制反转)概念。IOC将对象创建和管理的控制权从程序转移到外部容器,就像餐厅就餐(无需自己做饭)、雇佣司机(无需亲自驾驶)或使用家具组装服务(无需自己动手)一样。这种模式带来了解耦、专注业务、灵活性和生命周期管理等优势。在代码层面,IOC使得开发者无需关注依赖对象的创建细节,就像生活中无需关心厨师如何烹饪或司机如何开车。Spring提供了BeanFactory和ApplicationContext两种IOC容器实现,支持不同的应用场景。理解IOC有助于编
2025-06-30 12:00:00
779
原创 Spring框架的各个模块及其功能:构建企业级应用的全套工具
Spring框架提供了一套完整的模块化工具集,用于构建企业级应用。其核心容器(Core Container)包括Beans、Core、Context和SpEL模块,提供IoC、依赖注入等基础功能。AOP模块实现面向切面编程,而数据访问/集成模块(JDBC、ORM、OXM、JMS等)简化了数据库操作和系统集成。Web模块支持MVC、WebSocket等开发,测试模块则提供测试支持。各模块协同工作,共同构成了一个灵活、高效的企业应用开发框架,使开发者能够专注于业务逻辑而非底层实现。
2025-06-30 09:00:00
603
原创 Netty学习路线图 - 第五阶段:Netty高级特性
Netty高级特性摘要 本文介绍了Netty的五大核心高级特性: 心跳检测机制:通过IdleStateHandler实现连接状态监控,客户端定时发送心跳包,服务器检测空闲连接及时释放资源。 TCP粘包/拆包解决方案: 固定长度解码器(FixedLengthFrameDecoder) 分隔符解码器(DelimiterBasedFrameDecoder) 最常用的长度字段解码器(LengthFieldBasedFrameDecoder) 内存管理:Netty使用ByteBuf对象池技术提升性能,需注意内存泄漏问
2025-06-29 16:57:47
721
原创 Netty学习路线图 - 第四阶段:Netty基础应用
本文是Netty学习系列的第四部分,通过实践案例讲解Netty基础应用。文章首先介绍如何搭建简单的Echo服务器和客户端,展示Netty的基本使用方式,包括创建处理器、配置线程池和启动服务。随后进阶实现HTTP服务器,利用Netty内置的HTTP编解码器简化开发。文章还计划涵盖WebSocket聊天室、自定义协议设计和编解码器应用等内容。通过从简单到复杂的案例演示,帮助读者掌握Netty的核心功能,为后续高级应用打下基础。
2025-06-29 16:56:49
653
原创 Netty学习路线图 - 第三阶段:Netty核心概念
本文是Netty学习系列的第三部分,重点介绍Netty的核心概念和组件。文章首先概述了Netty作为一个异步事件驱动网络框架的特性与优势,包括高性能、易用性、可扩展性和安全性。随后详细解析了Netty的分层架构设计(传输层、事件循环、通道管道、编解码器和应用层)及其模块化设计理念。文章还提供了Bootstrap和ServerBootstrap的配置示例,说明它们在客户端和服务器端应用中的不同使用方式。最后介绍了Netty的两个核心组件:Channel(网络连接抽象)和ChannelPipeline(处理器链
2025-06-29 16:40:52
697
原创 Netty学习路线图 - 第二阶段:Java NIO基础
本文是Netty学习系列的第二篇,重点讲解Java NIO的核心概念。文章详细介绍了Buffer、Channel和Selector三大核心组件,包括Buffer的基本属性和操作、Channel的类型和使用示例,以及Selector的多路复用机制。通过对比阻塞I/O(BIO)和非阻塞I/O(NIO)的差异,说明了NIO在并发处理上的优势。最后提供了基于NIO实现的Echo服务器代码示例,帮助读者理解NIO的实际应用。这些知识是理解Netty框架设计理念的基础,掌握NIO能更好地使用Netty进行高性能网络编程
2025-06-29 16:34:49
996
原创 Netty学习路线图 - 第一阶段:Java基础与网络编程基础
打好Java基础与网络编程基础是学习Netty的必经之路。在掌握了这些知识后,我们才能真正理解Netty的设计理念和实现机制,为后续深入学习Netty核心概念打下坚实基础。下一篇,我们将深入探讨Java NIO的核心概念与编程模型,敬请期待!作者:by.G如需转载,请注明出处。
2025-06-29 16:27:06
457
原创 【Java进阶必学】观察者模式详解:一行代码搞定数据变更自动通知
《Java观察者模式详解》 摘要:观察者模式是一种行为型设计模式,建立一对多的依赖关系,当主题对象状态变化时自动通知所有观察者。本文通过天气预报系统的生活实例,详细讲解了Java实现观察者模式的四种方式:1)基础实现(Subject/Observer接口);2)Java内置API(Observable类);3)事件参数和泛型的高级用法;4)Lambda表达式简化实现。文章还探讨了异步通知、线程安全、优先级等进阶应用,分析了松耦合、广播通信等优点,以及可能引起的性能问题等缺点。最后总结了该模式在GUI事件、消
2025-06-29 10:00:00
572
原创 24张图带你彻底理解Java线程池
线程池是Java并发编程中非常重要的工具,它通过复用线程、控制并发数等机制,有效解决了线程资源管理的问题。掌握线程池的原理和使用技巧,可以帮助我们构建高性能、稳定的并发应用。避免使用Executors创建线程池,自定义ThreadPoolExecutor以掌控参数合理设置工作队列容量,避免OOM风险根据任务特性设置线程数量,CPU密集型和IO密集型任务采用不同策略实现监控,及时发现并处理线程池异常状态优雅关闭线程池,避免资源泄露。
2025-06-29 02:02:07
726
原创 【Java高薪面试必备】一文吃透HashMap和线程安全Map,这10个高频问题帮你轻松应对面试官刁难
本文解析了面试中常见的HashMap及线程安全HashMap相关问题。HashMap基于哈希表实现键值对存储,允许null键值,但非线程安全。线程安全版本如ConcurrentHashMap采用分段锁机制提升并发性能,而Collections.synchronizedMap则通过全局锁实现简单同步。文章对比了两者在线程安全、性能及实现机制上的差异,建议高并发场景优先使用ConcurrentHashMap,并提供了其他线程安全解决方案。掌握这些知识点有助于应对Java集合框架和并发编程的面试考察。
2025-06-28 12:01:35
780
原创 【Java 面试必备】深入理解 HashMap 的核心知识
本文深入解析Java中的HashMap,包括其工作原理、哈希冲突处理、扩容机制等核心知识点。文章对比了HashMap与Hashtable、ConcurrentHashMap的区别,重点分析了put()和get()方法的实现原理,并强调使用自定义对象作为键时需重写hashCode()和equals()方法。同时详细讲解了负载因子对性能的影响,以及如何优化HashMap性能。最后总结了HashMap非线程安全的特性,建议在多线程环境下使用ConcurrentHashMap。文章内容全面,涵盖常见面试考点
2025-06-28 11:57:47
723
原创 Java-JDBC连接Mysql数据库
Class.forName() 参数放的是mysql中我们所使用包的的全类名。mysql驱动包使用8.0及以上版本 使用上方代码 注册驱动即可。// ResulSetMetaData 可以获取表中字段的总列数。// 使用getColumnCount方法获取返回的总列数。// 执行sql语句 返回resultSet结果集。具体事务Mysql以及帮我们做了。// 建议连接数据库的sql语句执行平台。代码大概为公式型代码 记住大概公式即可。在学习记忆时 分步骤来记忆。// 编辑sql语句。
2023-07-17 15:29:52
253
1
原创 PTA-出租-(20分)Java
输入在一行中给出一个由11位数字组成的手机号码。为输入的号码生成代码的前两行,其中。中的数字必须按递减顺序给出。
2023-04-03 16:39:08
330
1
原创 pyecharts_Map制作地图 并实现点击跳转以及风格配置设定
控制点击事件,原理就是把js跳转代码用open写入生成的html文件 'a'为追加输入 正好会追加到文件最后。char_id每个生成的html地图文件里面会有一个id可修改为自定义,用id追踪文件,实现跳转效果。“world"可以改为china或者河南 广东 各省份地图。详情可查看pyecharts帮助文档。.add的功能是添加数据,以及一些配置 .render()生成HTML文件。visualmap_opts控制视觉映射效果。各项配置可查看帮助文档。
2022-11-12 00:00:00
2837
1
原创 linux如何链接moba
1.查看虚拟机的ip地址:ipaddr2.修改动态ip为静态vi /etc/sysconfig/network-scripts/ifcfg-ens33注意:路径可以使用TAB键补齐代码配置文件BOOTPROTO=static在文档后增加:IPADDR=192.168.1.109(设置静态ip地址)GATEWAY=192.168.1.2 (设置网关)NETMASK=255.255.255.0(设置子网掩码)DNS1=192.168.1.109(设置域名解析)...
2022-05-15 19:24:21
487
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人