自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三两肉的博客

一个爱好编程的胖子

  • 博客(92)
  • 资源 (1)
  • 收藏
  • 关注

原创 深入理解 HTTPS RSA 握手:从原理到流程的完整解析

本文深入解析HTTPS中基于RSA的TLS握手过程,从加密、认证、完整性三大安全目标出发,详解四次握手流程、三个随机数作用及会话密钥生成机制,剖析数字证书验证与信任链原理,并指出RSA不支持前向保密的缺陷,揭示为何ECDHE成为主流。全面掌握HTTPS安全基石。

2026-01-08 17:09:18 699

原创 从明文到加密:HTTP与HTTPS核心知识全解析

本文深入解析HTTP与HTTPS的核心差异,揭示HTTPS如何通过SSL/TLS协议、CA证书和混合加密机制,解决HTTP的窃听、篡改与冒充三大安全问题,全面科普网络安全关键技术。

2026-01-07 15:56:58 633

原创 HTTP/1.1到HTTP/3:互联网通信协议的三代演进之路

HTTP/1.1奠定基础,HTTP/2优化性能,HTTP/3颠覆底层。从队头阻塞到多路复用,从TCP到QUIC,三代协议演进推动互联网通信迈向低延迟、高并发、强安全的新时代。

2026-01-05 16:17:54 694

原创 HTTP 缓存详解

HTTP缓存是提升网页性能的核心机制,通过“强制缓存”和“协商缓存”减少请求、节省带宽。强制缓存由浏览器判断是否过期(如Cache-Control),未过期则直接使用本地资源;过期后进入协商缓存,服务器通过Etag或Last-Modified判定资源是否变更,可复用则返回304。合理配置缓存策略,能显著提升加载速度与用户体验。

2026-01-05 14:57:50 861

原创 RFC规范解释、URL 与 Body 、GET/POST 的核心区别详解

本文深入解析RFC规范下GET与POST的本质区别:GET语义为“只读”,安全且幂等,适用于获取资源;POST为“写操作”,不安全也不幂等,用于提交数据。详解URL与Body用法误区,并揭示安全、幂等属性对开发的影响,助你避开常见坑,写出更规范的接口。

2026-01-05 11:32:31 844

原创 TCP Keepalive 与 HTTP Keep-Alive介绍与区别详解!

TCP Keepalive与HTTP Keep-Alive虽名称相似,但本质不同:前者是TCP层的连接存活探测机制,用于检测“僵死”连接;后者是HTTP层的长连接复用技术,旨在提升性能。二者分属内核与应用层,目标与实现迥异,不可混淆。

2026-01-05 10:38:56 699

原创 Linux 网络包的 “快递分拣”:从发送到接收的内核协作全景

本文以“快递分拣”为喻,详解Linux网络包从发送到接收的内核协作流程。通过系统调用、sk_buff封装、协议栈分层处理及硬/软中断协同,展现数据如何在应用层、内核与网卡间高效流转,揭示零拷贝、中断分工与分层设计等核心机制,呈现Linux网络栈精密高效的运作全景。(238字)

2025-12-26 16:44:51 881

原创 从输入网址到网页显示:一场数据包的 “闯关之旅”

从输入网址到网页显示,数据包历经URL解析、DNS查询、TCP握手、IP路由、MAC转发等九步“闯关”,跨越应用层至物理层,协同完成一场网络世界的精密协作之旅。

2025-12-26 11:52:34 866

原创 网络基础知识随记:TCP/IP 网络模型—从分层逻辑到核心知识点

本文系统梳理了TCP/IP网络模型的分层架构与核心原理。模型采用四层设计:应用层(HTTP/FTP等协议)提供用户功能,传输层(TCP/UDP)确保应用间可靠传输,网络层(IP协议)负责跨设备寻址路由,网络接口层处理物理链路传输。关键概念包括端口号、IP地址、子网掩码、MAC地址等。数据传输通过逐层封装/解封装实现,各层传输单位不同(报文/段/包/帧)。这种分层设计通过标准化和职责分离,有效解决了设备兼容性问题,是互联网通信的基础架构。掌握各层功能与交互逻辑,对理解网络工作原理至关重要。

2025-11-25 14:45:18 447

原创 网络基础知识随记:TCP 的最大报文段长度 (MSS) 详解

摘要:TCP的MSS(最大报文段长度)在标准以太网中通常为1460字节,计算公式为MSS=MTU(1500)-IP头(20)-TCP头(20)。通过三次握手协商确定,避免IP分片并优化传输效率。不同网络环境(如PPPoE、无线网络)的MSS值会随MTU变化。MSS控制数据段大小,平衡协议头开销与传输性能,是TCP协议的关键参数。

2025-11-25 13:59:09 598

原创 JDK 21 字符串拼接最佳实践:场景化选择最优方案

JDK 21 字符串拼接需按场景选择最优方案:静态拼接用`+`,编译器自动优化;单线程动态拼接优选`StringBuilder`;格式化模板结合`formatted()`与文本块,提升可读性;集合拼接用`String.join()`或Stream;多线程场景选`StringBuffer`保障安全。

2025-11-20 14:57:32 522

原创 Redisson 分布式锁深度解析:API 使用与底层源码探秘

本文深入解析Redisson分布式锁的使用与源码实现,涵盖可重入锁、公平锁、读写锁、红锁等核心API的应用场景与配置方法,并通过Lua脚本、Hash结构和看门狗机制剖析其原子性、重入性与自动续期原理,助力开发者高效安全地实现分布式并发控制。

2025-11-20 11:11:34 409

原创 深入理解 Java 类加载器:双亲委派机制源码解析

简介: 本文深入解析Java类加载器与双亲委派机制,从Bootstrap到自定义加载器,剖析loadClass源码,揭示类加载的线程安全、缓存机制与委派逻辑,并探讨SPI、Tomcat、OSGi等场景下打破双亲委派的原理与实践价值

2025-11-07 18:15:16 1158

原创 Java 设计模式之备忘录模式:优雅保存与恢复对象状态

备忘录模式在不破坏封装性的前提下,捕获并保存对象状态,支持后续恢复。适用于撤销操作、事务回滚等场景,核心角色包括原发器、备忘录和负责人,实现灵活的状态管理。

2025-10-29 18:15:17 577

原创 Java 设计模式之访问者模式:灵活处理对象集合的操作

访问者模式是一种行为型设计模式,它将数据结构与数据操作分离,在不修改对象结构的情况下为其添加新操作。该模式包含抽象访问者、具体访问者、抽象元素、具体元素和对象结构五个角色。通过公司员工系统的示例展示了访问者模式的实现方式:定义Employee抽象元素及其具体子类(Engineer和Manager),创建Visitor接口和具体访问者(SalaryCalculator和PerformanceEvaluator),使用Company类作为对象结构管理员工集合。这种模式使操作扩展更灵活,符合开闭原则,在编译器AS

2025-10-29 17:16:34 629

原创 Java 设计模式之迭代器模式:优雅遍历集合元素

迭代器模式是一种行为型设计模式,它将集合对象的遍历行为分离出来,封装成独立迭代器对象,实现遍历逻辑与集合的解耦。该模式包含抽象迭代器、具体迭代器、抽象聚合和具体聚合四个角色,可提供统一遍历接口并隐藏集合内部实现。Java集合框架大量应用了此模式,如Iterator接口和ArrayList的iterator()方法。迭代器模式的优点包括支持多种遍历方式、简化聚合类设计等,但会增加系统复杂度。理解此模式有助于设计更灵活的集合遍历方案。

2025-10-29 16:52:16 601

原创 Java 设计模式之工厂模式:对象创建的艺术(含 UML 图解)

工厂模式是Java中经典的创建型设计模式,通过封装对象创建过程实现"创建与使用分离"。文章介绍了三种工厂模式:1)简单工厂模式:通过一个工厂类根据参数创建不同产品,实现简单但违反开闭原则;2)工厂方法模式:为每个产品创建对应工厂类,遵循开闭原则但增加复杂度;3)抽象工厂模式:创建产品族,适合复杂系统但扩展性受限。文中通过计算器、日志记录器等代码示例,结合UML图解,详细阐述了各模式的实现方式、适用场景及优缺点。工厂模式能有效降低耦合、提高扩展性和统一管理对象创建,是Java开发中的重要设

2025-10-27 18:02:58 1030

原创 Java 设计模式之中介者模式:解耦复杂交互的架构艺术(含 UML 图解)

本文介绍了Java设计模式中的中介者模式(Mediator Pattern),该模式通过引入中介对象来解耦复杂系统中多个对象间的交互。文章以聊天室为例,展示了中介者模式的4个核心角色:抽象中介者、具体中介者、抽象同事类和具体同事类,并提供了UML类图和完整代码实现。通过中介者模式,对象间无需直接通信,而是通过中介者协调,从而降低耦合度,使系统更易于维护和扩展。示例中,用户消息通过微信群聊(中介者)转发给其他用户,验证了该模式的有效性。

2025-10-27 17:32:18 849

原创 Java 设计模式之策略模式:灵活切换算法的艺术

策略模式是一种行为型设计模式,通过定义算法族并封装每个算法,使其可以相互替换,实现算法的灵活切换。本文以购物车支付系统为例,演示了策略模式的实现方式:1)定义PaymentStrategy接口作为抽象策略;2)实现微信、支付宝、银行卡等具体支付策略;3)通过ShoppingCart环境类动态切换支付方式。该模式将算法与使用解耦,避免了条件语句的硬编码,提高了系统的扩展性和可维护性。在实际开发中,策略模式适用于需要动态切换算法或行为的场景,如支付方式、排序算法等。

2025-10-24 18:03:52 1123

原创 Java 设计模式之观察者模式:构建松耦合的事件响应系统

摘要:观察者模式是一种松耦合的设计模式,用于构建一对多的对象依赖关系。当被观察者(Subject)状态变化时,所有注册的观察者(Observer)会自动收到通知并更新。文章以气象站系统为例,展示Java实现:定义Observer接口(update方法)和Subject接口(注册/移除观察者方法),具体实现WeatherStation作为被观察者,多个Display面板作为观察者。该模式适用于事件驱动系统,如UI更新、数据监控等场景,能有效降低对象间的直接依赖。

2025-10-24 17:32:20 906

原创 Java 设计模式之状态模式:让对象的行为随状态优雅变化

Java状态模式是一种行为型设计模式,允许对象根据内部状态改变行为。它通过将状态封装成独立类,避免了复杂的条件判断,使代码更清晰易维护。以电商订单为例,订单状态(待支付、已支付、已发货、已完成)各自实现抽象状态接口,定义该状态下的合法操作。环境类(订单)维护当前状态引用,将操作委托给状态对象处理。这种模式实现了状态转换的优雅管理,提升了代码的可扩展性和可读性。

2025-10-23 16:39:27 973

原创 Java 设计模式之责任链模式:优雅处理请求的艺术

责任链模式是一种解耦请求发送者和接收者的行为型设计模式,通过构建处理者对象链来处理请求。本文以请假审批系统为例,展示了如何实现责任链模式:创建请求类、抽象处理者、具体处理者(部门主管、经理、总经理),并设置处理链。该模式提高了系统灵活性,支持多级处理流程,常见于审批系统、日志处理和过滤器等场景。优点包括降低耦合度和符合开闭原则,但可能存在请求未处理或调试复杂的问题。Java中的Servlet Filter和Spring Interceptor等都是责任链模式的典型应用。

2025-10-23 10:59:03 700

原创 JDK21 ArrayList 源码深度解析:从底层实现到性能优化

本文解析了JDK21中ArrayList的核心实现机制。ArrayList基于动态数组实现,支持快速随机访问(RandomAccess接口)。关键点包括:1)默认容量10,使用DEFAULTCAPACITY_EMPTY_ELEMENTDATA标记;2)扩容机制通过grow()实现,按旧容量的1.5倍增长;3)添加元素时涉及数组拷贝和扩容判断;4)通过modCount实现快速失败机制。理解这些底层细节有助于优化ArrayList的使用性能。

2025-10-09 14:57:58 691

原创 内存溢出与内存泄漏:解析与解决方案

内存溢出与内存泄漏是程序开发中常见的内存问题。内存泄漏指已分配的内存未被释放,导致内存逐渐耗尽;内存溢出则是申请内存时空间不足,引发程序崩溃。本文通过Java代码示例展示了两种现象的表现形式,并分析了常见场景:静态集合滥用、未关闭资源等会导致内存泄漏,而大数据加载、大对象创建等会引发内存溢出。解决方案包括使用内存分析工具、规范资源管理、优化数据处理流程以及调整JVM参数等。良好的编程习惯和内存监控能有效预防这些问题,确保程序稳定运行。

2025-09-26 17:29:25 968

原创 六大设计原则详解:构建高质量代码的基石

六大设计原则详述

2025-08-25 12:01:58 933

原创 深入理解 HashMap:从源码到应用的全方位解析

HashMap 是 Java 中常用的数据结构之一,它以键值对的形式存储数据,并且能够在常数时间内完成基本操作。然而,要真正掌握 HashMap 的核心原理,需要深入理解其哈希冲突的解决办法、哈希算法、容量设计、扩容过程、数据结构以及线程安全等方面。本文将从源码角度出发,全面解析 HashMap 的工作机制。

2025-06-05 14:35:55 1029

原创 Java 中 ArrayList、Vector、LinkedList 的核心区别与应用场景

摘要: Java集合框架中,ArrayList、Vector和LinkedList作为List接口的主要实现,各有特点。ArrayList和Vector基于动态数组,支持快速随机访问(O(1)),但插入删除需移动元素(O(n));LinkedList采用双向链表,插入删除高效(O(1)),但随机访问慢(O(n))。Vector通过同步方法实现线程安全,但性能较差;ArrayList和LinkedList则非线程安全。ArrayList扩容1.5倍,Vector默认2倍。LinkedList还实现Deque接

2025-06-04 11:12:27 977

原创 Java中为什么不能使用for循环遍历list过程中去执行list.remove()删除方法,为什么会报错?

在Java中,使用for循环遍历List时直接调用remove()方法会导致ConcurrentModificationException异常。这是因为增强for循环(for-each)依赖迭代器实现,而普通for循环删除元素会导致索引错乱。正确的删除方式包括:使用迭代器的remove()方法、Java 8的removeIf()方法,或采用倒序遍历普通for循环。这些方法能安全删除元素,避免遍历时出现异常或逻辑错误。

2025-06-04 10:24:59 804

原创 Java 中的 synchronized 和 Lock:如何保证线程安全

Java提供了synchronized和Lock两种机制保证线程安全,前者通过对象监视器和锁升级机制实现同步,后者基于AQS框架提供了更灵活的锁操作。synchronized是JVM内置的同步原语,具有可重入性和自动锁释放特性;而Lock接口(如ReentrantLock)则支持公平/非公平锁、可中断获取等高级功能,需要手动释放锁。两者底层实现都基于线程安全三要素(原子性、可见性、有序性),开发者可根据场景选择——简单同步用synchronized,复杂需求用Lock。

2025-05-29 17:25:29 892

原创 Java 中的 ThreadLocal 详解:从基础到源码

本文深入解析Java中的ThreadLocal机制。ThreadLocal为每个线程提供独立的变量副本,实现线程封闭,避免同步问题。文章从基本使用(get/set/remove方法)开始,详细剖析底层实现原理:ThreadLocalMap作为核心数据结构,采用弱引用的Entry数组存储键值对。特别强调内存泄漏风险(因值对象强引用长期存在)及其解决方案,建议及时调用remove()和使用static修饰。最后介绍典型应用场景如数据库连接管理和用户会话存储,并指出在线程池中的注意事项。通过源码分析和代码示例,全

2025-05-29 15:49:02 929

原创 MySQL 索引详解:从基础到原理

MySQL索引详解摘要 本文全面介绍了MySQL索引的核心概念、类型及优化策略。主要内容包括: 索引概述:定义、作用与代价 常见索引类型:普通索引、唯一索引、主键索引、复合索引、全文索引和空间索引 底层数据结构:B-Tree/B+Tree索引原理,InnoDB的聚簇/辅助索引结构 优化策略:最左前缀原则、索引选择性与基数分析、避免索引失效的方法 通过SQL示例和原理分析,帮助开发者合理设计索引以提升查询性能。

2025-05-29 15:29:06 1142

原创 Spring Boot 启动流程深度解析:从源码到实践

本文深入解析了Spring Boot的启动流程,从源码层面剖析了其核心机制。启动入口从@SpringBootApplication注解的main方法开始,通过SpringApplication.run()方法执行初始化,推断应用类型并加载初始器和监听器。run()方法的核心逻辑包括:准备环境、创建上下文、刷新上下文、发布启动事件等关键步骤。Spring Boot通过事件机制在不同启动阶段发布事件,允许开发者介入。文章通过详细代码示例展示了SpringApplication初始化、环境准备和上下文创建等核心流

2025-05-28 18:17:54 1806

原创 SpringBoot 自动装配原理深度解析:从源码到实践

SpringBoot自动装配机制基于"约定大于配置"理念,核心通过@EnableAutoConfiguration注解触发。AutoConfigurationImportSelector负责处理自动装配流程,从META-INF/spring.factories加载候选配置类,并配合条件注解(如@ConditionalOnClass)进行智能筛选。这种机制减少了样板配置,使开发者只需关注必要差异,体现了SpringBoot的智能化设计理念。

2025-05-28 18:12:14 1349

原创 过滤器和拦截器有什么区别?

摘要: 过滤器(Filter)和拦截器(Interceptor)是Web开发中用于请求处理的两种组件,但存在显著差异: 技术定位:Filter基于Servlet规范,在容器层面处理请求;Interceptor是Spring MVC特有,基于AOP实现。 执行时机:Filter优先触发,处理请求/响应原始数据;Interceptor在控制器前后介入,可访问Spring上下文。 功能场景:Filter适合通用底层处理(如编码、跨域);Interceptor适合业务级控制(如权限、日志)。 注册方式:Filter

2025-05-27 11:16:07 955

原创 Spring 循环依赖:从原理到解决方案的全面解析

本文全面解析Spring框架中的循环依赖问题,主要包括以下内容:1. 定义和分类循环依赖,分为构造器、setter和字段注入三种类型;2. 详细阐述Spring通过三级缓存机制处理setter/字段循环依赖的原理和工作流程;3. 分析构造器循环依赖无法自动解决的原因;4. 提供多种解决方案,包括setter注入替代、@Lazy注解和模块化设计;5. 介绍排查工具和源码分析;6. 总结循环依赖的本质是"早期暴露"机制,强调合理设计依赖关系的重要性。全文深入浅出地讲解了Spring循环依赖的

2025-05-26 14:46:04 1201

原创 Java 序列化与反序列化深度解析

Java 序列化与反序列化深度解析:本文全面介绍了Java对象序列化(对象→字节流)与反序列化(字节流→对象)的核心概念、应用场景及实现细节。重点阐述了必须实现Serializable接口的原因、显式指定serialVersionUID的重要性,以及通过transient字段和自定义方法控制序列化过程。文章还分析了序列化在数据持久化、分布式系统和深拷贝中的应用,并指出版本兼容性和安全风险等注意事项,最后提出最佳实践建议,包括合理使用serialVersionUID、处理敏感字段和考虑替代方案等。

2025-05-26 11:52:11 1209

原创 字符编码详解:ASCII、Latin1、Unicode、UTF-8 与 GBK

字符编码是计算机处理文本的基础,常见的编码包括ASCII、Latin1、Unicode、UTF-8和GBK。ASCII是最早的编码标准,仅支持英文字符;Latin1扩展了ASCII,支持西欧语言;Unicode为全球字符提供统一编码,而UTF-8是其最常用的实现方式,具有兼容性和灵活性;GBK是中文专用编码,适用于特定场景。在实际应用中,UTF-8因其全球支持和高效性成为首选,尤其在多语言环境中。理解这些编码的特点和区别,有助于解决乱码和编码转换问题,确保文本处理的准确性。

2025-05-23 16:12:16 1242

原创 Redis数据结构详解

Redis 提供了多种数据结构,包括字符串、列表、集合、有序集合、哈希、位图、HyperLogLog、流和地理空间索引。字符串是最基本的数据类型,适用于缓存、计数器和分布式锁等场景。列表是有序集合,常用于消息队列和任务调度。集合是无序且唯一的元素集合,适合标签系统和社交网络。有序集合在集合基础上增加了分数概念,适用于排行榜和延时队列。哈希用于存储键值对映射,适合对象存储和会话管理。位图基于字符串的二进制位操作,适用于存在性判断和用户签到。每种数据结构都有其特定的应用场景和注意事项,合理选择和使用这些数据结构

2025-05-14 16:26:58 1363

原创 Spring @Lazy注解详解

@Lazy注解是Spring框架中的一个标记注解,主要用于延迟Bean的初始化。其核心作用包括:1)延迟初始化Bean,避免Spring容器在启动时立即创建所有单例Bean,从而优化资源使用和启动时间;2)解决Bean之间的循环依赖问题。@Lazy通过代理机制实现延迟加载,Spring在容器启动时生成代理对象,并在首次访问时触发实际Bean的创建和依赖注入。该注解可以应用于类、方法、构造器、参数和字段上,但需注意代理开销、配置复杂性以及测试调试中的潜在问题。合理使用@Lazy注解可以有效提升应用性能并解决循

2025-05-14 11:18:52 936

原创 Spring自动装配详解

Spring 自动装配通过依赖注入(DI)机制,简化了对象依赖关系的管理,减少了手动配置的工作量。常见的自动装配方式包括按类型装配(By Type)、按名称装配(By Name)、构造器装配(Constructor)以及使用 @Autowired 注解。按类型装配通过匹配属性类型注入 Bean,要求类型唯一;按名称装配则通过属性名匹配 Bean 名称,适用于多个同类型 Bean 的场景;构造器装配通过构造方法注入依赖,适合强制依赖的场景;@Autowired 注解则支持多种注入方式,灵活性高。Spring

2025-05-13 11:22:03 1281

mybatis-3.5.3.pdf

mybatis操作指南

2021-01-29

空空如也

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

TA关注的人

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