自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 收藏
  • 关注

原创 面向对象设计模式详解

本文以汽车工厂为例,系统讲解了9种常用设计模式的实际应用。设计模式分为创建型(如单例模式、工厂方法模式)、结构型(如适配器模式、装饰器模式)和行为型(如观察者模式、策略模式)三大类。通过汽车制造场景的类比,文章生动展示了每种模式的核心思想、实现方式和适用场景,如单例模式类比工厂总控中心、工厂方法模式类比品牌生产线等。各种模式的代码示例和对比分析,使抽象的设计模式概念变得直观易懂,帮助开发者理解如何运用这些"最佳实践"构建更高效、灵活的软件系统。

2025-07-13 20:06:49 641

原创 UML类图完全解读

摘要:UML类图是程序员理解系统架构的重要工具,本文详细解读了UML类图的核心元素和关系。类图通过类名、属性和操作三部分表示类结构,接口则有两种表示方式。重点阐述了6种类之间的关系:依赖关系(临时性关联)、关联关系(结构化关系)、聚合关系(整体与部分,可独立存在)、组合关系(强聚合,生命周期绑定)、继承关系(is-a关系)和实现关系(接口与实现类)。通过代码示例和图示,帮助开发者掌握类图的绘制和理解方法。

2025-07-13 07:30:00 328

原创 Java ThreadLocal详解:从原理到实践

Java ThreadLocal 核心解析与实践指南 ThreadLocal 是 Java 提供的线程本地存储机制,为每个线程创建独立变量副本,实现线程隔离和无锁并发。其核心原理基于 Thread 类中的 ThreadLocalMap 数据结构,通过 ThreadLocal 实例作为 key 来存取线程专属数据。典型应用包括解决 SimpleDateFormat 线程安全问题、用户会话管理和数据库连接控制等场景。 需特别注意 ThreadLocal 的内存泄漏风险:由于 Entry 的 key 是弱引用而

2025-07-12 19:44:38 418

原创 HashMap底层原理详解

哈希桶数组(Table):初始长度为 ***16***(DEFAULT_INITIAL_CAPACITY),每个元素称为一个 “桶”(Bucket)。数组长度始终为 2 的幂次方(如 16、32、64...),通过位运算优化哈希冲突。链表:***当多个键的哈希值冲突时,冲突的元素以链表形式存储在同一个桶中。***JDK 8 之前采用头插法(新节点插入链表头部),JDK 8 改为尾插法(避免多线程扩容时的死循环)。红黑树:***当链表长度超过 8(TREEIFY_THRESHOLD)且数组长度 ≥ 6

2025-07-12 10:04:59 855

原创 史上最详细Java并发多线程(面试必备,一篇足矣)

本文介绍了Java线程的基础知识,主要内容包括:线程与进程的区别(线程共享进程内存空间,切换成本更低);三种线程创建方式(继承Thread类、实现Runnable接口、使用Callable和Future);线程的六种生命周期状态(NEW、RUNNABLE、BLOCKED等)及其转换条件;并发编程中的核心问题(非原子性、不可见性)及其产生原因。通过代码示例展示了非原子操作导致的计数错误问题,并解释了Java内存模型(JMM)对线程工作内存与主内存交互的规范,为理解多线程编程提供基础概念框架。

2025-07-11 20:48:38 359

原创 Java 并发编程系列(中篇):核心问题与基础解决方案

若线程 A 修改工作内存变量后未及时刷新到主内存,线程 B 读取的仍是主内存旧值,导致不可见性。在编译为机器指令时,可能会被重新排序,为了提高效率,在烧开水的同时洗茶壶和洗茶杯,这也是导致乱序性的根本原因。这里的工作内存是 JMM 的一个抽象概念,也叫本地内存,其存储了该线程读/写共享变量的副本。每条线程还有自己的工作内存,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量。:公平锁按请求顺序获取锁,非公平锁可能允许新线程 “插队”,性能更高但可能导致饥饿。,只要不影响单线程逻辑。

2025-06-22 11:47:54 720

原创 Python 中列表和元组的全面解析

列表和元组是 Python 中两种重要的数据结构,它们各有优缺点。列表是可变的,操作灵活,适用于需要动态修改元素的场景;元组是不可变的,性能较好,适用于存储不可变的数据。在实际编程中,应根据具体的需求选择合适的数据结构。

2025-06-16 18:29:04 347

原创 MongoDB 入门指南:安装、配置与 Navicat 连接教程

传统关系型数据库遵循ACID规则,即A (Atomicity) 原子性 ,C (Consistency) 一致性,I (Isolation) 独立性 ,D (Durability) 持久性。NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

2025-06-09 16:17:21 1744

原创 Java 并发编程系列(上篇):多线程深入解析

默认情况下,新建线程加入创建它的线程所在组(通常是。线程 1 每次循环尝试让步,线程 2 可能更频繁执行,但因调度不确定性,结果不绝对一致。运行后,两个线程交替输出,体现多线程并发执行特性,适合线程逻辑简单且无需复用的场景。线程组辅助批量操作,但现代并发更依赖线程池,线程组使用场景逐渐减少,了解即可。其实也可以这样理解,让A线程插队,当前线程main在A线程执行完毕后再执行。main 线程(用户线程)结束后,守护线程随之停止,不会无限循环。,聚焦多线程基础、线程状态、线程组与优先级、进程线程区别,以及。

2025-06-07 18:33:10 745

原创 一文搞懂JVM 垃圾回收机制

finalize()方法是Object类中的一个实例方法,其源码为protected void finalize() throws Throwable { }。它是对象销毁前的回调方法,Java 语言提供该机制,允许开发人员在对象被垃圾回收器回收之前,执行自定义的处理逻辑。当垃圾回收器发现某个对象不再被任何引用指向,即该对象即将被回收时,总会先调用这个对象的finalize()方法 ,并且一个对象的finalize()方法在其生命周期中只会被调用一次。

2025-06-03 18:56:27 871

原创 JVM 核心组件深度解析:堆、方法区、执行引擎与本地方法接口

堆内存通过分代回收机制高效管理对象生命周期;方法区为类元数据提供全局存储,确保类型信息的唯一性;执行引擎通过解释与编译的混合模式平衡启动速度与执行性能;本地方法接口打破语言边界,赋予 Java 调用底层系统的能力。理解这些组件的原理与协作,不仅能深入掌握 Java 的运行机制,更能在性能调优、内存故障排查中精准定位问题。无论是优化 GC 频率、分析热点代码,还是合理使用本地方法,JVM 的底层设计思想都为开发者提供了清晰的指引。

2025-05-31 14:00:42 1075

原创 Python 字符串入门指南

在 Python 中,字符串是由零个或多个字符组成的序列,可以使用单引号()、双引号()或三引号('''或""")来定义。# 使用单引号定义字符串# 使用双引号定义字符串# 使用三引号定义多行字符串message = """如果爱真的有颜色,那么一定是蓝色,蕾姆的蓝色"""在这个例子中,name1和name2是使用单引号和双引号定义的普通字符串,而message是使用三引号定义的多行字符串。

2025-05-29 16:50:04 566

原创 深入理解 JVM 运行时数据区

JVM 的运行时数据区作为 Java 程序运行的核心支撑,其各个组成部分紧密协作,共同为程序的高效、稳定运行保驾护航。从程序计数器的精准导航,到 Java 虚拟机栈和本地方法栈的高效执行,再到 Java 堆内存的对象存储与管理,以及方法区的元数据和代码存储,每一个环节都不可或缺。深入理解运行时数据区的工作原理和机制,对于我们编写高质量的 Java 代码、优化程序性能以及解决各种潜在的内存问题都具有至关重要的意义。

2025-05-24 11:14:30 920

原创 在Java项目中集成Deepseek大语言模型实践指南

通过以上步骤,我们成功在Java项目中集成了Deepseek大模型,实现了智能文本生成功能。该方案具有良好的可扩展性,可以根据业务需求进一步优化和扩展。采用这种方式集成大模型,不仅能够为应用提供强大的AI能力,还能保持代码的解耦和灵活性,为未来集成更多AI模型奠定基础。

2025-05-20 20:46:45 1253

原创 JVM 双亲委派机制

Java运行环境的核心由JDK、JRE和JVM构成。JDK是开发工具包,包含编译工具和JRE;JRE提供运行时环境,其核心是JVM,负责将Java字节码转换为机器指令,实现跨平台运行。JVM由类加载器子系统、运行时数据区、执行引擎和本地方法接口组成,采用双亲委派机制确保类加载的安全性和唯一性。类加载过程包括加载、验证、准备、解析和初始化五个阶段,触发时机包括实例化对象、访问静态成员、反射调用等。自定义类加载器可以打破双亲委派机制,实现特定加载逻辑。理解JVM类加载机制对优化程序性能和排查问题至关重要。

2025-05-17 19:09:54 927

原创 MyBatis-Plus 入门详解:从零搭建高效持久层

(简称 MP)是 MyBatis 的增强工具,在保留 MyBatis 原生功能的基础上,提供了全自动化的 CRUD 操作强大的分页插件代码生成器等功能,显著减少开发工作量。与原生 MyBatis 相比,MyBatis-Plus 的核心优势在于:无需编写 XML 文件:通过继承BaseMapper可直接使用通用 CRUD 方法。内置分页插件:简化分页查询逻辑。注解式开发:通过注解配置实体类与数据库表的映射关系。以下通过一个图书管理系统的代码示例,详解 MyBatis-Plus 的核心用法。

2025-03-03 18:11:56 440

原创 MyBatis 常见问题详解

MyBatis 是 Java 开发中广泛使用的持久层框架,尤其在需要灵活控制 SQL 的场景下备受青睐,以下是针对常见 MyBatis 面试问题的详细解答。

2025-02-18 11:25:02 636

原创 Git从入门到精通:全面掌握版本控制的核心技能

掌握Git不仅需要理解命令操作,更要培养良好的版本管理习惯。建议从简单的个人项目开始实践,逐步过渡到团队协作场景。记住:每个Git高手都经历过无数次的冲突解决和版本回退,关键是要保持学习热情,持续精进技能!

2025-02-04 19:21:53 424

原创 Spring Boot常用注解深度解析:从入门到精通

今天,这篇文章带你将深入理解Spring Boot中30+常用注解,通过代码示例和关系图,帮助你彻底掌握Spring核心注解的使用场景和内在联系。

2025-02-04 19:02:30 2299

原创 Spring Boot AOP 核心概念全面解析

     你也可以通过配置强制Spring使用CGLIB代理,即使目标类实现了接口, 通过理解动态代理的核心原理和 Spring 的实现机制,开可以更好地掌握 AOP 的底层运作方式

2025-02-03 14:31:25 670

原创 深入理解Spring事务管理

原子性(Atomicity):事务中的操作要么全部成功,要么全部失败一致性(Consistency):事务执行前后数据库状态保持一致隔离性(Isolation):并发事务之间相互隔离持久性(Durability):事务提交后数据永久保存说白了就是一组操作的集合,要么一起被执行,要么都不执行Spring事务管理通过@Transactional注解实现了声明式事务的优雅封装。正确配置传播机制和隔离级别可以帮助我们有效处理并发问题,而合理的超时与只读设置则能显著提升系统性能。

2025-02-01 15:54:53 559

原创 JWT入门

JWT不是银弹,但正确使用时确实能极大提升系统安全性和扩展性。深入理解各种签名算法的适用场景定期轮换加密密钥监控令牌使用情况,及时调整安全策略结合具体业务需求设计声明(claims)结构通过持续实践和优化,JWT将成为您构建现代Web应用的强大助力。

2025-02-01 13:59:46 458

原创 MyBatis 入门指南:从零开始掌握持久层框架

MyBatis是一款优秀的持久层框架,它通过XML 或注解将 SQL 语句与 Java 对象进行映射,简化了传统 JDBC 开发中繁琐的数据库操作流程。与 Hibernate 等全自动 ORM 框架不同,MyBatis 允许开发者直接编写 SQL,灵活控制查询逻辑,同时支持动态 SQL、缓存、插件扩展等特性,非常适合对 SQL 优化有要求的项目。核心优势灵活性强,可手动编写和优化 SQL通过配置文件管理 SQL,提升代码可维护性支持动态 SQL,适应复杂查询场景使用@Mapper。

2025-01-29 11:30:12 476

原创 从Spring请求处理到分层架构与IOC:注解详解与演进实战

掌握从基础请求处理到分层架构设计的完整路径,理解Spring的IoC容器与依赖注入机制,是构建松耦合、高可维护应用的关键。

2025-01-24 19:16:06 991

原创 Spring Boot整合Thymeleaf、JDBC Template与MyBatis配置详解

本文将详细介绍如何在Spring Boot项目中整合Thymeleaf模板引擎、JDBC Template和MyBatis,涵盖YAML配置、依赖版本匹配、项目结构设计及代码示例。

2025-01-22 20:02:20 893

原创 深入理解Spring Boot:启动方式、注解、配置文件与模板引擎

模板引擎是一种用于生成文本输出的工具,通常用于生成HTML页面。它允许你将代码和内容分离,从而使代码更清晰、更易于维护。介绍了SpringBoot的启动方式、核心注解的用法及含义、配置文件的书写格式以及模板引擎Freemarker的使用方法。通过这些内容,你应该能够更好地理解和应用SpringBoot进行开发。希望这篇博客能帮助你更好地理解SpringBoot的各种概念和用法。如果你有任何问题或建议,欢迎在评论区留言!

2025-01-19 23:47:30 1015

原创 Spring Boot 入门

SpringBoot是Spring框架的一个模块,旨在简化Spring应用的初始搭建以及开发过程。它通过提供默认配置和自动配置功能,使得开发者可以快速地创建独立的、生产级别的Spring应用程序,而无需进行繁琐的配置。看到这里,你已经了解了SpringBoot的基本概念、它与SpringMVC、Spring和SpringCloud之间的关系,以及为什么学习SpringBoot是如此重要。

2025-01-19 10:00:00 1311

原创 深入浅出JSON:数据交换的轻量级解决方案

JSON作为一种轻量级的数据交换格式,在前后端通信中扮演着重要角色。结合Axios,我们可以轻松实现前后端的数据交互。作为Java后端开发者,掌握JSON的生成与解析,能够帮助你构建更加高效、灵活的Web应用。

2025-01-18 17:23:30 1056

原创 Java Web 登录系统示例:过滤器技术与 JDBC 数据库连接

过滤器(Filter)是JavaWeb开发中的一个强大工具,它可以在请求到达Servlet之前或响应返回客户端之前对请求和响应进行拦截和处理。过滤器可以用来执行诸如字符编码设置、跨域资源共享(CORS)、日志记录、权限检查等任务。JDBC(JavaDatabaseConnectivity)是Java访问数据库的标准API,允许Java程序连接并操作各种数据库。用户交互用户在登录页面输入用户名和密码,点击登录按钮。请求处理前端通过AJAX将用户名和密码发送到。调用进行登录验证。

2025-01-18 15:47:42 1140

原创 JavaWeb会话技术:Cookie与Session详解

会话技术是指在Web应用中,服务器用来跟踪客户端状态的技术。它允许服务器在多个请求之间保存和传递用户信息,从而实现个性化体验和连续的交互。

2025-01-16 13:32:32 640

原创 Servlet详解

Servlet是JavaWeb开发中的重要组件,它运行在服务器端,用于处理客户端的请求并返回响应。Servlet是ServerApplet的缩写,全称JavaServlet。它是用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。

2025-01-14 18:51:11 1069

原创 JavaEE 前后端交互与数据库连接练习

前端页面: 使用HTML表单收集用户输入,并提交到Servlet。Servlet处理请求: 获取请求参数,调用DAO层方法查询数据库。数据库访问: 通过DAO层建立数据库连接,执行SQL查询,返回结果。页面跳转: 根据查询结果重定向到不同的页面。这个练习为我打下了JavaEE开发的基础,理解了MVC架构中各层的作用和交互方式。今后我将继续深入学习JavaEE,掌握更多高级功能和最佳实践。

2025-01-03 16:54:55 1169

原创 JavaEE第一个项目创建

我将为您详细介绍如何在IntelliJ IDEA中创建第一个JavaEE项目,包括项目的配置和Tomcat服务器的管理。首先,您需要安装IntelliJ IDEA。如果您是JavaEE的新手,请选择社区版即可。安装完成后,打开IDEA,您可以按照以下步骤创建JavaEE项目。

2024-12-25 18:52:22 489

原创 Trie --字典树/前缀树

Trie(读音为“try”)是一种树形数据结构,主要用于存储字符串集合,以便能够快速地检索字符串。Trie的每个节点代表一个字符,通过从根节点沿着边走向下一个节点,可以形成存储的字符串。Trie的特殊之处在于,它通过共享前缀来节省存储空间,以提高检索速度。Trie不仅可以用于单纯的字符串存储,还可以用于前缀匹配、自动补全、拼写检查等应用场景。它是一种高效的多路搜索树,特别适合用于处理大量字符串的情况。

2024-11-02 18:01:31 481

原创 Java--正则表达式入门指南

正则表达式在Java中是强大且灵活的工具,用于字符串的匹配和处理,必须掌握Pattern和Matcher类的用法。希望这篇博客能为您的Java正则表达式学习之旅提供帮助!

2024-11-02 17:29:48 1571

原创 Postman:高效的API测试工具

Postman是一款功能强大的API开发工具,允许开发者轻松创建、测试和管理API请求。它提供了一个用户友好的界面,可以发送各种类型的HTTP请求(如GET、POST、PUT、DELETE等),并查看响应结果。Postman支持多种数据格式,包括JSON、XML等,使得它成为开发和测试RESTful API的理想选择。Postman作为一款强大的API测试工具,为前后端分离开发中的后端接口测试提供了极大的便利。它不仅简化了API请求的构建过程,还支持自动化测试、环境管理和团队协作。

2024-10-30 17:32:53 1471

原创 Tomcat 11 下载/安装 与基本使用

Tomcat是一个轻量级的Web服务器,主要用于运行Java Servlet和JSP。它封装了HTTP协议,使得开发者能够更方便地构建和管理Web应用程序。由于其开源和跨平台的特性,Tomcat受到许多Java开发者的青睐。

2024-10-29 17:32:03 3018

原创 理解HTTP、HTTPS、TCP、UDP与OSI七层模型:网络访问的基础

1. HTTP(超文本传输协议)定义:HTTP是一种无状态的应用层协议,主要用于在Web浏览器和服务器之间传输数据。特点明文传输:数据以未加密的形式传输,容易被第三方截获。无连接性:每个请求都是独立的,服务器不保留连接状态。请求-响应模型:客户端发起请求,服务器返回响应。2. HTTPS(安全超文本传输协议)定义:HTTPS是在HTTP上增加了SSL/TLS加密层,以提供更高的安全性。特点加密传输:通过SSL/TLS对数据进行加密,确保数据在传输过程中不被窃取或篡改。身份认证。

2024-10-28 14:49:12 1546

原创 HTTP与HTTPS协议

HTTP协议是一种无状态的协议,意味着每一次请求都是独立的,服务器不会记录任何关于客户端的状态。HTTP的工作流程主要分为请求和响应两个部分。HTTP和HTTPS是现代互联网中不可或缺的协议。虽然HTTP仍然被广泛使用,但由于其安全性不足,越来越多的网站正在转向HTTPS,以保护用户数据和隐私。在选择使用哪种协议时,建议优先考虑安全性,以确保信息传输的安全和可靠。

2024-10-28 14:24:47 1369

原创 JDBC: Java数据库连接的桥梁

Java数据库连接(,简称JDBC)是Java提供的一种API,允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口,开发者可以利用这些接口执行SQL语句、处理结果集以及管理数据库连接。通过JDBC,Java应用程序能够轻松地进行增删改查操作(CRUD),使得数据库操作变得简单而高效。JDBC 是 Java 开发中必不可少的组成部分,它为开发者提供了一种灵活、标准化的方法与数据库交互。尽管存在一些缺点,但通过合理的设计和封装,可以最大限度地发挥 JDBC 的优势。

2024-10-27 22:00:09 1119

【Java虚拟机技术】JVM架构解析:类加载机制、内存模型与垃圾回收系统设计

内容概要:本文全面介绍了Java虚拟机(JVM)的组成、工作原理及其关键特性。JVM负责将Java字节码转换为机器码并执行,主要由类加载器、运行时数据区、执行引擎和本地库接口构成。类加载器负责加载字节码文件,采用双亲委派机制确保安全性。运行时数据区包括程序计数器、Java虚拟机栈、本地方法栈、Java堆和方法区,各司其职。执行引擎通过解释器和即时编译器(JIT)实现字节码的解释和编译。垃圾回收机制用于管理内存,包括标记-清除、标记-复制、标记-压缩等算法,以及分代收集策略,确保高效的内存管理和回收。此外,文章还介绍了多种垃圾回收器,如Serial、Parallel、CMS和G1,分析了它们的特点和应用场景。 适合人群:具备一定Java编程经验,希望深入了解JVM内部机制的开发人员,特别是从事Java应用性能优化的技术人员。 使用场景及目标:①理解JVM的类加载机制和双亲委派模型;②掌握JVM内存模型及各区域的作用;③了解执行引擎的工作原理,包括解释器和JIT编译器的区别;④深入探讨垃圾回收机制,学习如何选择合适的垃圾回收器以优化应用程序性能。 阅读建议:本文内容较为复杂,建议读者结合实际项目需求,逐步理解JVM的各个组成部分及其工作原理。对于垃圾回收机制,可以通过实验验证不同回收器的效果,以便更好地应用于实际开发中。

2025-07-12

【Java并发编程】多线程核心技术解析:性能优化与常见问题解决方案综述Java并发编程的核心

内容概要:本文详细介绍了Java并发编程的核心概念和技术。首先阐述了多线程的基本概念及其带来的性能提升与潜在问题,如安全性、性能开销等。接着深入探讨了并发执行与并行执行的区别,强调了微观串行、宏观并行的特点。文章重点讲解了并发编程中的三大核心问题:不可见性、乱序性、非原子性,并介绍了Java内存模型(JMM)、工作内存与主内存的关系,以及volatile关键字的作用。随后讨论了如何通过锁机制(如synchronized、ReentrantLock)和原子变量(如AtomicInteger)来保证操作的原子性。此外,还介绍了多种锁的概念,包括乐观锁、悲观锁、可重入锁、读写锁、分段锁、自旋锁、共享锁/独占锁、公平锁/非公平锁、偏向锁、轻量级锁、重量级锁等。最后,文章讲解了AQS框架、ReentrantLock的实现原理、JUC常用类(如ConcurrentHashMap、CopyOnWriteArrayList)、辅助类CountDownLatch以及线程池的相关知识。 适合人群:有一定Java编程基础,特别是对多线程编程感兴趣的开发者;工作1-3年的Java工程师。 使用场景及目标:①理解多线程编程的优势与挑战;②掌握解决并发编程中不可见性、乱序性、非原子性问题的方法;③学会使用锁机制和原子变量保证线程安全;④熟悉Java并发工具包中的常见类和接口;⑤了解线程池的工作原理及其配置。 阅读建议:由于本文内容涵盖面广且技术性强,建议读者

2025-07-12

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

TA关注的人

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