- 博客(50)
- 收藏
- 关注
原创 JavaWeb 核心:HttpServletRequest 请求行、请求头、请求参数完整梳理
本文全面梳理了JavaWeb中HttpServletRequest对象的三大核心组成部分:请求行、请求头和请求参数。请求行包含请求方法、URI和协议版本,可通过getMethod()、getRequestURI()等方法获取;请求头传递客户端环境信息,如User-Agent、Cookie等,使用getHeader()方法读取;请求参数则通过GET或POST方式传递键值对数据,可用getParameter()系列方法获取。文章详细介绍了各组件的定义、获取方式、典型应用场景及注意事项,并提供了示例代码,为Jav
2025-12-31 09:25:02
1189
原创 Servlet 全面解析(JavaWeb 核心)
本文全面解析了Servlet作为JavaWeb核心组件的关键特性。Servlet是运行在服务器端的Java类,负责处理HTTP请求并生成响应,具有以下特点:1)依赖Web服务器运行;2)基于HTTP协议;3)生命周期由服务器管理;4)默认多线程处理请求。文章详细介绍了Servlet的生命周期(初始化、处理请求、销毁)及对应方法,并提供了示例代码和流程图说明。同时解析了Servlet核心API,包括三大核心对象:HttpServletRequest(封装请求)、HttpServletResponse(封装响应
2025-12-30 10:02:14
809
原创 Web 状态管理核心技术详解 + JWT 双 Token (Access/Refresh Token) 自动登录
Web状态管理与JWT双Token技术解析 本文系统介绍了Web状态管理的核心技术,重点分析了客户端存储(Cookie/LocalStorage)、服务端存储(Session)和令牌机制(JWT)三大类解决方案。其中JWT作为无状态身份凭证,采用Header.Payload.Signature结构,具有分布式友好、跨域支持等优势,但存在无法主动吊销的缺陷。针对这一问题,文章详细阐述了Access/Refresh双Token机制实现自动登录的方案,通过短效Access Token和长效Refresh Toke
2025-12-30 10:00:45
1174
原创 Java NIO 详解(Channel+Buffer+Selector)
Java NIO(Non-blocking IO,非阻塞 IO)是 JDK 1.4 引入的新一代 IO 框架(位于 `java.nio` 及子包),核心目标是解决传统 IO(BIO)在高并发、大文件场景下的性能瓶颈。与传统 IO 的 “流模型” 不同,NIO 采用「通道 - 缓冲区(Channel-Buffer)」模型,支持非阻塞 IO和多路复用,是高性能网络编程(如 Netty、Tomcat)、大文件处理的核心基础。
2025-12-29 08:39:20
733
原创 Java IO 流完整解析:原理、分类、使用规范与最佳实践
Java IO 流解析:核心原理与分类使用 Java IO 是基于流(Stream)的数据传输机制,位于java.io包中,主要分为字节流和字符流。字节流处理二进制数据(如图片),核心类包括InputStream和OutputStream;字符流处理文本数据,核心类是Reader和Writer。流按方向分为输入/输出流,按功能分为节点流(直接操作数据源)和处理流(增强功能)。字节流示例展示了文件复制流程,使用缓冲区减少IO次数。处理流如缓冲流可优化性能,对象流支持序列化。
2025-12-29 08:35:23
894
原创 网络通信核心知识全解析:模型、协议与 TCP 机制
本文系统解析了网络通信的七层模型(OSI/RM),将其划分为独立标准化的功能模块:从底层的物理信号传输(物理层)、MAC地址寻址(数据链路层)、IP路由(网络层),到传输层的TCP/UDP协议、会话管理(会话层)、数据格式转换(表示层),直至面向用户的应用层协议(HTTP/FTP等)。文章通过;浏览器访问网站"的实例和;快递寄送;的生动比喻,清晰展示了各层协同工作的机制。重点强调了传输层的TCP可靠性机制(三次握手/四次挥手)和端口寻址功能.
2025-12-26 09:12:49
695
1
原创 布隆过滤器是什么?一篇文章看懂原理 + Java 实现
摘要:布隆过滤器是一种空间效率高的概率型数据结构,通过位数组和多个哈希函数快速判断元素是否存在集合中。其核心原理是将元素通过k个哈希函数映射到位数组的k个位置并置1,查询时检查这些位置是否为1(可能存在误判)。关键参数包括位数组长度m、哈希函数数k和预期元素数n,需平衡空间与误判率。优势是空间效率高、查询快,缺点是存在误判且不支持删除。适用于缓存防护、去重等场景。Java中可通过Guava或Redis实现,与哈希表相比更节省空间但不精确。扩展版计数布隆过滤器支持删除操作。
2025-12-25 09:11:34
1402
原创 Bitmap(位图):原理、实现与核心应用
Bitmap(位图)是一种基于位运算的高效数据结构,使用单个比特位表示元素的二元状态(存在/不存在)。其核心优势在于极致的空间效率,存储N个整数状态仅需N/8字节,比传统集合节省约97%空间。Bitmap底层通常用long[]数组存储,通过位运算实现O(1)时间复杂度的增删查操作,支持交集、并集、差集等集合运算。在Java中可通过手动实现(封装long[]数组)或使用开源库实现Bitmap,适用于海量数据去重、用户行为分析等场景。
2025-12-24 09:47:18
1339
原创 阿里巴巴 Druid 连接池:从入门到生产级配置
Druid 是功能全面、性能优异的数据库连接池,尤其适合需要监控、安全防护、定制化扩展的企业级应用。在 Spring Boot 项目中,结合 Druid 的监控能力,可快速定位数据库性能问题,是生产环境的首选连接池之一。
2025-12-23 09:12:54
1057
原创 从零开始学 Java 线程池:ThreadPoolExecutor 基础教程
线程池是 Java 并发编程中核心的组件,本质是管理一组可复用线程的池化技术,目的是解决线程频繁创建 / 销毁的性能开销、控制并发线程数量、统一管理线程生命周期等问题。
2025-12-22 09:35:12
819
原创 Java 阻塞队列详解(原理 + 场景 + 对比)
Java阻塞队列摘要 阻塞队列是Java并发编程中的核心工具,主要用于生产者-消费者模型,解决线程安全与阻塞等待问题。其特点包括:队列满时生产者阻塞,队列空时消费者阻塞,底层通过ReentrantLock和Condition实现线程安全。
2025-12-21 17:26:19
767
原创 JUC 在实际业务场景的落地实践
本文介绍了JUC在实际业务场景中的落地实践,重点分析了电商秒杀和支付回调两个典型场景。在电商秒杀场景中,通过LongAdder实现高并发库存计数,Semaphore进行接口限流,ThreadPoolExecutor处理异步订单,解决了高并发库存扣减和系统防垮问题。支付回调场景则采用单线程池确保顺序执行,配合ConcurrentHashMap实现幂等控制,解决了异步处理和消息顺序性问题。文中提供了详细的技术选型依据、流程图解和核心代码实现,并强调了关键注意事项,如信号量释放、原子性操作和线程池策略选择等。
2025-12-20 20:31:13
1593
原创 从入门到实战:Java JUC 并发工具包完全指南
JUC 是 java.util.concurrent 包的简称,从 Java 5 开始引入,专门用于解决并发编程中的线程同步、线程池、锁机制、并发集合等问题,是 Java 处理高并发场景的核心工具包。它弥补了传统 synchronized`关键字、Thread 类的局限性,提供了更高效、更灵活的并发编程方案。
2025-12-19 09:06:24
1462
原创 Java Set 集合深度解析:原理、实现与实战
Set 是 Java 集合框架(`java.util`)中 `Collection` 接口的子接口,核心特征是元素无序、不可重复(即不允许包含相等的元素),且最多包含一个 `null` 元素(具体实现类略有差异)。
2025-12-18 09:06:21
647
原创 Java Map 详解:原理、实现与使用场景
桶就是 HashMap 哈希桶数组里的一个存储单元,负责接收通过哈希计算分配过来的键值对节点,解决哈希冲突的链表 / 红黑树也都是在桶内部形成的。简单举个例子:把 HashMap 想象成一个带编号的快递柜,这个快递柜的每个独立格子就是一个桶。快递柜 = 哈希桶数组(table)快递柜有很多个格子,每个格子都有自己的编号(比如 0、1、2…15),对应 HashMap 数组的索引。桶 = 快递柜的单个格子每个格子(桶)的作用是存放 “属于自己” 的快递。
2025-12-17 08:56:47
1610
原创 Java List 完全指南:从接口特性到四大实现类深度解析
ArrayList:性能均衡,适合大多数场景;LinkedList:适合频繁增删的场景;:适合并发读多写少的场景;Vector:尽量避免使用,仅兼容旧代码。选择时需根据 “访问效率、修改频率、并发场景” 三大维度权衡。
2025-12-16 09:07:54
925
原创 Java 集合框架核心知识点总结(包含常见面试题)
单列数据用Collection体系(List 有序可重复、Set 无序去重、Queue 队列);键值对数据用Map体系(字典功能);多线程场景优先选 JUC 并发集合;特殊场景(优先级、延迟、枚举)选专用集合(PriorityQueue、DelayQueue、EnumMap 等)。掌握集合的底层结构(数组 / 链表 / 红黑树)和核心特性(线程安全、有序性、去重规则),是选型和性能优化的关键。
2025-12-15 09:11:29
1501
原创 深入理解 Redisson:分布式锁原理、特性与生产级应用(Java 版)
将复杂的分布式锁逻辑(原子操作、续期、重入、排队)封装成简单的 Java API,让开发者像用本地锁一样使用分布式锁。简单概括:Redisson 是 “智能钥匙管理系统”,Redis 是 “钥匙柜”,共享资源是 “公共卫生间”;核心原理:基于 Redis 哈希表 + Lua 脚本保证原子性,看门狗机制解决锁过期问题;关键用法:优先使用RLock,加锁用lock(),释放锁必须在finally中调用unlock();典型场景:库存扣减、重复下单、分布式任务调度、读写分离等。
2025-12-14 23:58:26
802
原创 Java 分布式锁全解析:实现方案、原理与生产选型指南
在 Java 分布式系统中,分布式锁是解决跨进程、跨节点资源竞争的核心工具(比如防止重复下单、库存超卖、并发修改共享数据等场景)。在分布式环境下保证同一时间只有一个节点 / 线程能持有锁,且满足高可用、高一致性、高性能。假设公司有一间公共卫生间(对应分布式系统的共享资源,比如库存、订单生成逻辑),全公司几百号人(对应分布式系统的多个服务实例,部署在不同机器上)都要使用。没有锁的混乱场景。
2025-12-13 11:42:40
676
原创 告别 synchronized 局限:Java Lock 接口详解与应用场景
Lock接口是 Java 并发编程中更灵活、更强大的锁机制,核心优势在于支持可中断、超时、公平锁和多条件变量等特性。其最常用的实现类几乎可以替代,适用于复杂并发场景;而更适合简单场景(代码简洁,无需手动管理锁),再后面可以使用分布式锁替代。实际开发中,需根据业务需求选择合适的锁机制。
2025-12-12 09:13:37
1032
原创 Java 同步关键字 synchronized:用法 + 场景 + 避坑指南
是 Java 最基础、最常用的线程同步方式,优点是简单易用、无需手动释放锁、JVM 自动优化,适合解决大多数线程安全问题(如简单的共享变量修改、方法同步)。其核心是通过 “锁对象” 实现互斥访问,结合 JDK 6 后的锁升级机制,在低竞争场景下性能优异,高竞争场景下可考虑用Lock接口或并发容器替代,若是多实例场景使用分布式锁。
2025-12-11 08:53:33
1227
原创 零基础学 Java 锁:从概念到代码,吃透 8 种常用锁
锁类型核心特性实现方式适用场景悲观锁阻塞竞争,冲突假设频繁写多、冲突频繁乐观锁无阻塞,冲突假设少,CAS 实现读多、冲突少(计数器、ID 生成)可重入锁同一线程可重复获取锁递归调用、多层锁嵌套公平锁按等待顺序分配,无饥饿对公平性要求高的场景非公平锁允许插队,效率高对效率要求高,可接受轻微不公平读写锁读 - 读共享,读 - 写 / 写 - 写互斥读多写少(缓存、统计)偏向锁单线程无竞争,开销最小synchronized 优化单线程重复加锁轻量级锁。
2025-12-10 09:02:32
1436
1
原创 从 0 到 1 学 Java 多线程:线程是什么?怎么用?如何保证安全?
当多个线程同时操作共享资源(如共享变量、文件、数据库连接)时,若未做同步控制,可能导致数据不一致(如超卖、计数错误),这就是线程不安全。示例(线程不安全)// 共享变量 count,多个线程同时自增@Overridei < 1000;// 非原子操作(读取→修改→写入)// 测试:2 个线程各自增 1000 次,预期结果 2000,实际可能小于 2000// 结果可能是 1500、1800 等线程是程序执行的最小单元,共享进程资源,独立拥有栈和程序计数器。
2025-12-09 08:33:54
997
原创 ThreadLocal 详解:Java 线程本地存储工具
是 Java 提供的,核心作用是为,让线程操作自己独有的数据,实现线程间状态隔离,避免多线程共享变量的竞争问题。
2025-12-08 09:45:15
1925
原创 介绍一下软件开发中常见的几种的架构模式
初期用「单体架构」快速落地;规模扩大后拆为「微服务架构」,搭配「API 网关」和「BFF」优化前后端交互;业务复杂时用「DDD」梳理核心逻辑;组件解耦、异步场景用「事件驱动架构」;微服务集群庞大时用「服务网格」管控通信。BFF(Backend For Frontend,前端专用后端)是一种架构模式,核心是为特定前端应用(如 Web 端、移动端、小程序)定制专属的中间层服务,用于适配前端需求与后端底层服务(如微服务、数据库、第三方 API)。
2025-12-07 18:38:49
1155
原创 注解 + 反射:Web 项目 Excel 一键导出工具 EnhancedExportExcelUtil 详解
是对基础的扩展封装,核心目标是简化 Excel 导出流程:通过反射 + 注解实现表头自动生成,直接对接 HTTP 响应完成浏览器下载,同时复用原有导出逻辑,兼顾易用性与兼容性。适用于 Web 项目中高频的 Excel 导出场景(如报表下载、数据批量导出)。通过注解 + 反射简化表头配置,HTTP 响应封装实现一键下载,继承复用保证核心逻辑稳定,大幅降低 Web 项目中 Excel 导出的开发成本。
2025-12-06 20:53:54
303
原创 如何用 Excel / Java 去解决Excel下拉列表选项数量限制的问题(兼容.xsl和.xlsx)
为什么会出现Excel 下拉列表出现选项数量限制问题,本质源于 Excel 数据验证功能的原生设计约束当通过 Excel 原生 “数据验证→序列” 直接输入选项(即显式列表字符长度限制:Excel 对显式列表的文本总长度限制为255 个字符(包括逗号分隔符)。若选项过多(如每个选项平均 5 字符,最多仅能容纳约 50 个选项),或单个选项过长,会因字符超限导致设置失败。选项数量隐性限制:即使字符未超限,Excel 对显式列表的选项数量也存在隐性约束(通常≤255 个),超过后下拉列表无法正常渲染。
2025-12-05 08:37:09
812
原创 使用 Apache POI 实现 Excel 文件读写(导入 导出)操作的工具类
Apache POI 是 Apache 基金会提供的用于操作 Microsoft Office 文档的 Java 库,支持 Excel(.xls/.xlsx)、Word、PPT 等格式。本文实现的工具类基于 Apache POI,封装了 Excel 文件的导入(读取)和导出(写入)核心功能,兼容 Excel 97-2003(.xls)和 Excel 2007+(.xlsx)格式,适用于常见的 Excel 数据处理场景。
2025-12-04 09:02:57
1560
原创 介绍java中常用于处理 Excel 文件的Apache POI
Apache POI 处理.xlsx文件(XSSF/SXSSF)的常用方法按照工作簿、工作表、行、单元格、样式、高级操作。
2025-12-03 08:48:11
1564
原创 java中常用的几种加密方式
不可逆(无法从摘要反推原始数据);相同输入必然得到相同输出,不同输入大概率得到不同输出(抗碰撞);输出长度固定(与输入长度无关);主要用于数据完整性校验(如文件校验)、密码存储(如用户密码加密存储)。两个不同的输入数据(明文),经过加密 / 哈希计算后,得到了相同的输出结果(密文 / 摘要)—— 这种 “不同输入→相同输出” 的现象被称为 “哈希碰撞”,而碰撞风险就是这种现象发生的概率及带来的安全隐患。
2025-12-02 08:29:23
1467
原创 java中基于 Hutool 工具库实现的图形验证码工具类
基于 Hutool 工具库实现的图形验证码工具类,适配 Spring 生态,提供的完整能力,支持登录、注册等场景的人机校验。
2025-12-01 09:17:44
902
原创 JSR-380 扩展:StringIn 字符串合法值校验注解设计与实现
实现@StringIn注解及其校验器,包含核心校验逻辑、消息插值优化、大小写兼容扩展、空值处理等关键特性,确保功能完整且易用。
2025-11-30 19:16:23
438
原创 基于JSR 380 实现自定义动态校验注解
基于JSR-380(Java Bean Validation 2.0)规范实现的自定义动态校验注解,核心作用是:通过SpEL(Spring Expression Language,Spring 表达式语言)编写灵活的校验规则,对实体类、字段或方法参数进行复杂逻辑校验(如多字段联动校验、动态条件校验),突破普通注解(如@NotNull@StringIn)的固定规则限制。注解需包含 JSR-380 强制属性(messagegroupspayload),并新增 SpEL 核心属性(value表达式、
2025-11-29 23:52:00
893
原创 java中实现一个统一处理请求头和参数格式的拦截器(包含介绍扁平参数与透传)
修改"X-Tenant-Id", // 租户ID(新增)"X-Operator-Type" // 操作人类型(新增)扁平参数是 “无嵌套、单层键值对” 的参数格式,通过 Jackson 解析 JSON 并拆解嵌套结构,能让 Feign 调用的 GET 请求参数符合 HTTP 规范,同时让下游服务更易接收,是解决 “复杂对象作为 GET 参数” 的关键方案。
2025-11-28 08:51:44
861
原创 什么是java的JSR 380?
JSR 380 是 Java 生态中参数校验的 “标准方案”,通过标准化注解 + 自动校验,解决了重复校验、规则不统一的问题,是服务间通信(如 Feign 调用)、接口参数校验的必备工具,配合 Spring Boot 可快速集成使用。
2025-11-27 08:56:11
1010
原创 java中实现一个接口访问日志统一记录组件的切面类(结合MongoDB)
/ 自定义注解:不需要记录日志的接口// 切入点表达式修改(排除带 @NoLog 的方法)
2025-11-26 08:45:16
1901
原创 java中设计一个全局拦截器(主要用于统一处理客户端标识、内部请求标识等全局上下文信息)
基于 Spring MVC 的,设计专注于客户端标识校验、内部请求识别、全局上下文初始化的全局拦截器。核心目标是统一处理请求来源合法性,沉淀关键上下文信息(如客户端 ID、请求类型、traceId 等),供业务层无感知复用,同时保障系统入口的安全性。/*** 全局拦截器配置(application.yml 中配置)*/@Component// 客户端白名单(外部请求必须在白名单内)// 请求头名称配置(可自定义)// 客户端ID请求头// 内部请求标识头(值为true/false)
2025-11-25 08:57:25
977
1
原创 java中设计一个多端 SaaS 平台接入统一认证拦截器
*** 终端类型枚举(支持多端差异化认证)*/APP("app", "移动端APP"),MINI_PROGRAM("mini", "微信小程序"),PC("pc", "PC网页端"),THIRD_PARTY("third", "第三方系统");// 构造器 + getter// 根据code获取枚举// getter/*** 免认证注解(标注在Controller方法上,跳过Token验证)*/实际开发中,统一认证拦截器的核心是 “先保证安全稳定,再追求功能扩展。
2025-11-24 10:35:27
724
原创 java中的Lambda表达式
一、介绍:Stream的“黄金搭档”Lambda 表达式是 Java 8 引入的,核心作用是(替代冗余的匿名内部类),也是 Stream 流式操作的 “黄金搭档”—— 没有 Lambda,Stream 的链式调用会变得臃肿难读。
2025-11-23 23:24:40
756
原创 java中的Stream流式操作
在 Java 8 及以上版本中Stream(流式操作)是处理集合(Collection)、数组等数据的高效工具,它基于函数式编程思想,提供了声明式(而非命令式)的数据处理方式,核心优势是简洁、高效、可并行。Stream 本质是数据的 “流水线”数据从数据源(集合、数组等)流入,经过一系列中间操作(过滤、映射、排序等)的 “加工”,最终通过终端操作(统计、收集、遍历等)输出结果(或无输出)。这个 “流水线” 可以用“工厂食品加工生产线”
2025-11-22 20:01:50
1990
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅