自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么?Spring AOP 的依赖竟然偷偷改名了!Spring Boot 4.x 升级避坑指南

摘要: 使用Spring Boot 4.x学习AOP时,发现标准依赖spring-boot-starter-aop无法引入,排查后发现该依赖在4.x版本中已更名为spring-boot-starter-aspectj。官方虽未明确公告,但实际变更已生效。解决方案为替换依赖名称,Maven和Gradle配置示例已提供。

2026-06-30 12:10:55 492

原创 【JVM类加载&双亲委派模型&垃圾回收机制】

本文介绍了JVM类加载机制和垃圾回收机制。类加载分为加载、验证、准备、解析和初始化5个步骤,采用双亲委派模型确保标准库类优先加载。垃圾回收主要针对堆内存中的对象,通过可达性分析识别垃圾,采用分代回收策略:新生代使用复制算法,老年代使用标记-整理算法。垃圾回收解决了内存泄漏问题,但会引发STW(程序暂停)现象。文章还对比了引用计数和可达性分析两种垃圾识别方法,以及标记-清除、复制算法和标记-整理三种内存释放方式的优缺点。

2026-03-08 08:00:00 443

原创 【用最简单的话,讲清 HTTPS 加密】

HTTPS是在HTTP基础上引入加密层(SSL)的安全协议,解决了HTTP明文传输易被篡改的问题。加密方式包括对称加密(同一密钥)和非对称加密(公钥私钥配对)。HTTPS工作过程先通过非对称加密传输对称密钥,再用对称加密保护数据。为防止中间人攻击,引入了证书机制,包含服务器信息和公钥,确保通信安全。当证书异常时浏览器会提示警告,有效防止黑客窃取密钥或篡改数据。

2026-03-05 20:09:05 497

原创 【HTTP 协议格式 + Fiddler 抓包入门】

HTTP协议是应用层最主流的超文本传输协议,1991年诞生至今已发展到HTTP/3版本。文章详细介绍了HTTP协议格式,包括请求和响应的四部分结构:首行、头部、空行和正文。通过Fiddler抓包工具演示了如何捕获和分析HTTP数据包,并解析了URL的组成要素及其编码规则。重点对比了GET和POST两种最常见请求方法的区别:GET主要用于获取资源,请求参数在URL中;POST用于提交数据,参数在请求体中。文章还列举了HTTP各版本的发展历程和特点,帮助读者全面理解这一基础网络协议的工作原理。

2026-03-03 08:00:00 1100

原创 【IP协议&NAT机制&数据链路层相关知识】

本文介绍了IP协议的核心功能和关键技术。IP协议主要完成地址管理和路由选择两大任务,其报头包含版本、服务类型、生存时间等关键字段。IPv4地址采用32位整数表示,通过点分十进制形式呈现,但面临地址不足问题,解决方案包括动态分配、NAT机制(主流)和IPv6(尚未普及)。网段划分将IP分为网络号和主机号,通过子网掩码实现。路由选择采用渐进式寻路方式。数据链路层的以太网协议采用特定帧格式,包含MAC地址等信息。文章还介绍了特殊IP地址的用途,展现了互联网协议栈的基本架构和工作原理。

2026-02-25 00:19:33 644

原创 【TCP 协议的相关特性】

本文介绍了TCP协议的关键特性及其工作机制。首先阐述了TCP报文格式,包括16位端口号、4位可变长报头和6位标志位等核心字段。重点讲解了TCP确保可靠传输的两大机制:确认应答机制通过序号和确认序号实现数据包有序传输,超时重传机制则通过重传丢失数据包来对抗网络丢包问题。文章详细解析了TCP连接管理的"三次握手"建立连接过程和"四次挥手"断开连接过程,说明了这些交互步骤的必要性和实际意义。最后指出TCP通过序号管理、超时重传和连接控制等机制,实现了面向连接的可靠数据传输

2026-02-22 04:25:11 1073 1

原创 【UDP的报文结构】

UDP是一种无连接、不可靠传输的网络协议,采用面向数据报的方式实现全双工通信。其数据报结构由8字节报头和载荷组成,最大传输长度为64KB。UDP通过简单的CRC校验算法确保数据完整性,但存在极小概率的校验失败可能。相比TCP,UDP不提供可靠性保障,但传输效率更高。此外,摘要还介绍了更高精度的MD5校验算法及其定长、分散和不可逆的特性,说明其在数据校验和加密中的应用价值。UDP适用于对实时性要求高但允许少量丢包的应用场景。

2026-02-07 16:43:59 997

原创 【初识网络通讯中的一些基础概念】

本文摘要: 网络通信基础概念解析,涵盖IP地址、端口号、协议分层等核心内容。IP地址通过点分十进制表示设备网络位置,端口号标识主机上的应用程序。协议分层采用TCP/IP五层模型(应用层、传输层、网络层、数据链路层、物理层),各层实现不同功能并相互封装。数据通信涉及封装(打包发送)和分用(拆解接收)过程。客户端主动发起请求,服务器被动响应,二者角色可互换。通信模式包括一问一答、一问多答等多种形式。网络协议确保不同设备间的有效通信,分层设计提高了协议的灵活性和可维护性。

2026-02-04 08:00:00 1021

原创 【File,InputStream,OutputStream类的用法】

Java中的File类用于抽象描述文件和目录路径,支持绝对/相对路径。常用方法包括获取路径信息(getPath)、判断文件属性(exists/isFile)、创建删除文件(createNewFile/delete)以及目录操作(mkdir/listFiles)等。InputStream和OutputStream是字节流读写类,其中InputStream是抽象类需通过子类实例化。字符流Reader/Writer则以字符为单位处理数据,避免字符截断问题。文件操作示例演示了路径获取、文件创建删除、目录遍历文件移动

2026-01-30 16:25:51 1195

原创 【IO与文件及存储常识】

摘要 本文系统介绍了计算机中的IO、存储和文件三大核心概念。IO指计算机与外部设备的数据交互,包括输入和输出两种操作。存储设备分为CPU寄存器/缓存、内存和硬盘三类,它们在速度、容量、价格和数据持久性上存在显著差异。文件系统采用树形结构组织,通过绝对路径和相对路径定位文件。文件可分为文本文件和二进制文件,编码方式不同会导致乱码问题。操作系统将硬件设备也抽象为文件概念,实现接口统一性。这些基础概念对理解计算机工作原理至关重要。

2026-01-21 20:00:00 711

原创 CAS&多线程环境使用哈希表

本文聚焦 CAS 机制与多线程哈希表核心使用要点。CAS(Compare and swap)通过比较内存值与预期值并匹配更新的原子操作保障线程安全,应用于 JUC 的 atomic 类,其 ABA 问题可通过版本号解决。哈希表方面,HashMap 无锁、线程不安全但支持 null 值;HashTable 以全表锁实现线程安全,效率低且已淘汰,不支持 null 值;ConcurrentHashMap 优化锁机制(锁桶 + CAS)与扩容方式,线程安全高效,不支持 null 值,是多线程场景首选。

2025-12-22 08:00:00 749

原创 Java多线程案例--初识线程池

本文介绍了线程池的概念及其在Java标准库中的实现方式。线程池通过复用线程解决频繁创建销毁线程导致的效率问题。标准库提供ExecutorService接口和Executors工厂类来创建四种线程池:固定大小、动态增长、单线程和定时任务线程池。ThreadPoolExecutor则允许更细致的参数定制,包括核心线程数、最大线程数、空闲时间和拒绝策略等。文章还通过模拟实现一个固定大小的线程池,展示了线程池的基本工作原理,使用阻塞队列管理任务并复用线程执行。

2025-12-13 08:00:00 726

原创 Java多线程案例--定时器

Java定时器实现原理与模拟 摘要:本文介绍了Java标准库中的Timer定时器实现原理,并通过代码示例演示了如何模拟实现一个简单的定时器。Timer类通过schedule方法添加任务,使用TimerTask封装要执行的任务内容和延迟时间。关键实现包括:1)使用优先级队列管理任务,按执行时间排序;2)通过线程轮询检查任务执行时间;3)采用wait/notify机制优化等待过程。文章详细讲解了任务调度、线程安全处理等核心问题,并提供了完整的模拟实现代码,包括任务比较、队列操作和时间判断等关键逻辑。

2025-12-04 02:08:17 966

原创 Java多线程案例--阻塞式队列

本文介绍了阻塞队列的概念及其在生产者消费者模型中的应用。阻塞队列是一种线程安全的队列,具有当队列满时入队阻塞、队列空时出队阻塞的特性。文章通过Java标准库中的ArrayBlockingQueue和LinkedBlockingQueue实现示例,展示了生产快消费慢的场景。最后详细讲解了如何基于普通队列实现阻塞队列,包括使用synchronized保证线程安全,以及通过wait/notify机制实现阻塞功能,特别强调了wait条件判断需要使用while循环而非if语句的重要性。阻塞队列能有效解耦生产者和消费者

2025-11-24 13:14:13 676

原创 Java多线程案例--单例模式

单例模式确保类只有一个实例,分为饿汉和懒汉两种实现方式。饿汉模式在类加载时就创建实例,实现简单但可能造成资源浪费;懒汉模式在首次使用时创建实例,更节省资源但需要考虑线程安全问题。线程安全的懒汉模式通过双重检查锁和volatile关键字来优化性能。两种方式都通过私有化构造方法防止外部实例化,提供静态方法获取唯一实例。

2025-11-23 13:15:55 328

原创 Java中线程安全问题的原因和解决方案

本文探讨了Java中的线程安全问题及其解决方案。多个线程同时修改共享资源会导致线程不安全,如两个线程对同一static变量进行50万次自增,结果会小于预期的100万。这是由于++操作的非原子性(读-改-写)被线程抢占式执行打断。解决方案包括使用synchronized同步块保证原子性,要求使用同一锁对象。synchronized具有可重入特性,但不当使用仍可能导致死锁(如两个线程互相持有对方需要的锁)。此外还介绍了volatile关键字解决内存可见性问题(防止JVM优化导致线程读取过时数据)和指令重排序问题

2025-10-25 19:36:51 673

原创 Java 线程的几种状态

Java线程状态包括NEW(新建未启动)、RUNNABLE(可运行或正在运行)、BLOCKED(锁竞争阻塞)、WAITING(无限等待)、TIMED_WAITING(限时等待)和TERMINATED(终止)。状态转换条件:调用start()从NEW到RUNNABLE;锁竞争失败从RUNNABLE到BLOCKED;获取锁后返回RUNNABLE;调用sleep()等进入TIMED_WAITING;超时或中断返回RUNNABLE;执行完毕或异常则变为TERMINATED。这些状态描述了线程完整的生命周期。

2025-10-19 15:10:39 384

原创 Thread 类的基本用法

本文介绍了Java中线程创建与操作的基本方法。主要内容包括:1)通过继承Thread类或实现Runnable接口创建线程;2)使用匿名内部类和Lambda表达式简化线程创建;3)线程中断机制(interrupt)及标志位使用;4)线程等待(join)方法实现线程顺序执行;5)线程休眠(sleep)控制执行速度;6)获取线程实例信息(name、id)的方法。文章通过HelloWorld示例演示了线程的基本操作,并解释了相关概念如标志位、抢占式执行等。

2025-10-19 14:00:03 696

原创 进程和线程的区别和联系

本文通过月饼的比喻生动解释了进程和线程的关系:将月饼堆比作进程,吃月饼的人比作线程。指出线程作为进程的执行单元,能提高任务处理效率,但过多线程可能导致资源争夺冲突。文章强调需要合理分配进程和线程数量,在提高吞吐量的同时避免资源竞争,并总结出线程是进程的组成部分、都支持并发执行、引入线程能降低开销等核心要点。

2025-10-14 02:13:06 178

原创 进程调度的基本过程

冯诺依曼体系是现代计算机的基础架构,由运算器、控制器、存储器、输入和输出设备五大部件组成。CPU集成了运算器和控制器,存储器分为内存(运存)和外存(硬盘等),而输入输出设备如键盘、鼠标、显示器等实现人机交互。该体系核心在于运算控制与存储分离。CPU执行分为取指令、译码、执行和写回四个步骤。进程调度通过分时复用技术,使少量CPU核心能处理大量进程,涉及状态管理、优先级调整、记账信息和上下文保存等机制,确保系统高效运行。不同设备通过灵活调整进程优先级实现性能优化。

2025-10-04 00:15:09 541

原创 数据结构Java--8

本文介绍了二叉搜索树(BST)的基本概念和实现方法,包括查找、插入和删除操作,并分析了单支BST的效率问题。随后讲解了Map和Set两种高效搜索容器,其中Map采用Key-Value模型,Set采用Key模型,重点阐述了TreeMap和TreeSet基于红黑树的实现。最后介绍了哈希表原理,包括哈希函数、冲突解决方法(开散列和闭散列)以及哈希桶的实现,对比了HashMap(哈希桶)和TreeMap(红黑树)的性能差异。文章还提供了Java中HashSet和HashMap的具体使用方法。

2025-08-27 22:10:22 1005

原创 数据结构Java--7

本文介绍了常见的排序算法及其特性。主要内容包括:插入排序(稳定,O(N²))、希尔排序(不稳定,优化插入排序)、选择排序(不稳定,O(N²))、堆排序(不稳定,O(NlogN))、冒泡排序(稳定,O(N²))、快速排序(不稳定,O(NlogN))和归并排序(稳定,O(NlogN))。重点分析了各算法的实现原理、时间/空间复杂度及稳定性,其中快速排序通过"三数取中"优化基准选择,归并排序采用分治思想。文章还对比了不同算法的适用场景,如插入排序对接近有序数据效率高,归并排序适合外排序等。

2025-08-08 03:28:58 791 1

原创 数据结构Java--6

优先级队列是一种支持按优先级处理元素的数据结构,适用于需要优先处理高优先级任务的场景。堆是实现优先级队列的常用结构,分为大根堆和小根堆。文章详细介绍了堆的创建、插入、删除等操作,包括向下调整和向上调整算法。在Java中,PriorityQueue默认建立小根堆,可通过比较器或Lambda表达式实现大根堆。文章提供了完整的代码实现,包括堆的基本操作和PriorityQueue的使用方法。

2025-08-01 17:58:44 840

原创 数据结构Java--5

本文系统介绍了树形数据结构,重点阐述二叉树特性及操作。树结构需满足子树不相交、唯一父节点等条件,其基本概念包括度、叶子节点、层次等。二叉树作为特殊树形结构,要求节点度≤2且子树有序,包含满二叉树和完全二叉树两种特殊形式。文章详细讲解了二叉树的5个重要性质,并介绍了孩子表示法的存储实现。在操作方面,重点演示了前序、中序、后序和层序遍历的递归实现方法,其中层序遍历需借助队列完成。通过代码示例展示了二叉树的创建和四种遍历方式的实现过程。

2025-07-27 01:50:48 748

原创 数据结构Java--4

栈stack 队列queue 双端队列deque 集合框架图

2025-07-18 21:18:52 590

原创 数据结构Java--3

链表 LinkedList

2025-07-17 17:32:26 354

原创 数据结构Java--2

顺序表

2025-07-09 23:07:01 855

原创 数据结构Java--1

数据结构是一门单独的学科,并不区分语言。本博客以Java为例子,我会尽可能的用简单易懂的语言来总结和解释我所学习的内容。另外在这里给喜欢阅读的小伙伴推荐一本书,程杰老师的《大话数据结构》这本书通篇都是白话,阅读难度不大,适合刚接触数据结构的小白。本系列博客都将在JDK1.8 和 Intellij IDEA 的环境下进行演示和运行。

2025-07-05 19:20:51 1067

原创 Java基础语法实现简易图书管理系统

Java简易图书管理系统

2025-03-18 22:07:04 741

原创 Java基础语法,面向对象-6

抽象类接口

2025-03-18 14:14:06 833

原创 Java基础语法,面向对象-5

多态

2025-03-15 16:39:04 833

原创 Java基础语法,面向对象-4

面向对象----继承

2025-03-11 00:56:16 1050

原创 Java基础语法,面向对象-3

如果我们写了很多的类全部直接存放在src文件夹里,这样会导致有联系直接的类和其他无联系直接的类关系很混乱。所以这个时候我们利用包。在IntelliJ IDEA中我们可以右键src文件夹来创建包(package) IDEA 2022在现阶段包的定义类似于我们Windows操作系统里的文件夹一样,包名尽量指定成唯一的名字,我们也可以在包中再创建包以实现多层分割的效果。这里我们创建了两个包,可以根据我们创建的项目路径找到他们,可以发现创建包实际上就是创建一个文件夹。

2025-03-05 00:40:42 945

原创 Java基础语法,面向对象-2

如果在变量前面加上了this.,那么他就代表着这个变量是类里的成员变量,从而达到对成员变量修改的目的,这样即使和方法形参的名字有重复也不会有问题,而且还提高了代码的阅读性,让人看到this.就明白,这个变量是成员变量,而并非形参,哪个对象调用就是哪个对象的引用类型。可以发现我们在实例化的时候并没有传参,于是编译器就调用了不带参数的构造方法,然后用了不带参数的构造方法里的this引用,通过this传了三个参数,最后找到带三个参数的构造方法。但是在对象和类中,成员变量是可以不进行手动的初始化的。

2025-02-28 12:00:00 921

原创 Java基础语法,面向对象-1

面向对象是一种思想举个例子,假设你是一个大老板,有一天你的车坏了,这个时候你叫你的秘书去买一辆新的车,你只需要告诉你的秘书你想要什么车,但是对于秘书来说要做的事情有很多。。。然而作为老板的你只关心结果,并不在意秘书买车的过程,这个时候其实画绿色圈起来的内容是和你无关的,你不需要关注其中的细节,这其实就是面向对象的思想。就像我们使用洗衣机一样,我们只在意衣服是否洗干净,我们不会去研究洗衣机到底是怎么把衣服洗干净,或是研究洗衣机要转几圈能把衣服洗干净这种问题。

2025-02-25 12:36:04 872

原创 C语言扫雷简易版教程

C语言扫雷简易版

2024-12-01 14:14:46 1265

原创 C语言的三子棋简单小游戏教程

三子棋

2024-11-29 12:25:54 1160

空空如也

空空如也

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

TA关注的人

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