自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java实战】复杂5层嵌套结构Excel导出方案对比:为何我最终选择了EasyPoi?(含一对多自动合并、金额格式化)

在企业级 B 端系统中,复杂报表导出是一个非常高频的需求。最近在做一个财务报销系统时,遇到了一个极具挑战性的导出需求。业务背景我们需要导出一个“扁平化”但包含“层级关系”的报销详情表。数据结构深度达到了 5 层:客户 -> 最终客户 -> 项目 -> 人员 -> 费用明细导出要求一对多展示:一个客户对应多个最终客户,一个最终客户对应多个项目,以此类推。单元格自动合并:为了视觉清晰,左侧相同的父级信息(如客户名称)必须纵向合并。数据统计:每一层级都有对应的小计金额(如:个人总额、项目总额)。

2025-12-18 17:09:02 711

原创 ES6(ECMAScript 2015)完全指南:从基础特性到异步解决方案(附实战)

本文全面解析ES6(ECMAScript 2015)的核心特性及其在现代前端开发中的关键作用。ES6通过引入let/const、箭头函数、模板字符串等语法优化,解决了旧版JS的变量提升、作用域混乱等问题;提供解构赋值、扩展运算符等高效数据处理方式;以Promise和async/await为核心重构异步编程模式,彻底解决回调地狱;并通过类和模块化特性支撑大型项目开发。文章采用理论讲解+实战演示的方式,详细剖析9大高频功能,并展示其在Vue项目中的实际应用,强调ES6作为现代前端基石的重要地位,建议开发者通过实

2025-10-28 17:23:54 961

原创 一文吃透 Java Stream+Lambda+Collectors:从基础到实战(学生场景全解析)

Lambda 是“逻辑核心”:通过简洁语法实现函数式接口,为 Stream 和 Collectors 注入业务规则;Stream 是“处理框架”:以链式调用构建处理流水线,惰性求值优化性能;Collectors 是“结果载体”:提供丰富收集器,将流结果转换为实用数据结构。三者协同,使代码从“命令式”的循环嵌套转变为“声明式”的清晰链式调用,大幅提升开发效率和代码可读性,是 Java 开发者必须掌握的核心技能。

2025-10-28 15:59:55 1116

原创 Vue路由两种模式深度解析+Vue+SpringBoot生产部署全流程(附Nginx配置)

vue,nginx

2025-10-28 09:36:03 735

原创 Java 前后端加密与编码技术:从概念到实战场景全解析

哈希算法(如 MD5、SHA 系列)是将任意长度的数据通过哈希函数映射为固定长度哈希值不可逆:无法从哈希值反推原始数据;唯一性:不同数据大概率生成不同哈希值(存在极小“碰撞”概率)。Base64 是一种编码方式(不是加密!),将二进制数据(如图片、文件)转换为由 64 个可打印字符(A-Z、a-z、0-9、+、/)组成的字符串,解决二进制数据在文本协议(如 HTTP、JSON)中传输的兼容性问题。对称加密(如 AES)使用同一密钥。

2025-10-24 11:30:35 1048

原创 批量更新操作全攻略:从JDBC原理到多框架实现(MyBatis/MyBatis-Plus/Nutz)

在后端开发中,批量更新(如批量指派需求、批量修改状态)是高频场景。若用for循环+单条SQL实现,会因频繁网络交互导致性能骤降(10万条数据需10万次数据库请求)。本文从底层原理出发,梳理JDBC批量更新核心逻辑,并给出MyBatis、MyBatis-Plus、Nutz等主流框架的实战方案,附带避坑指南,新手也能直接复用。同MyBatis的CASE WHEN方案,MP可通过@Update框架选择中小批量(<1万条):MyBatis-Plus(简洁);

2025-10-20 17:58:21 399

原创 用 Spring Boot 类比,一次性搞懂 Vue 3 目录结构(附对应关系表)

很多前端开发者可能同时接触过 Java 后端,而 Vue 3 和 Spring Boot 作为前后端各自的主流框架,在工程化设计理念上高度一致(比如「配置与业务分离」「组件复用」「标准化目录」)。用 Spring Boot 类比 Vue 3 目录,能帮你跳过「纯前端概念」的壁垒,从熟悉的后端视角快速掌握 Vue 3 代码组织逻辑——毕竟,前后端的工程化本质是相通的。配置与业务分离根目录()负责配置,src/负责业务代码;对应 Spring Boot 的pom.xml负责配置,负责业务代码。

2025-10-16 11:39:09 360

原创 前端工具链核心组件:create-vue 与 Vite 解析(含 Java 类比)

工具链关系create-vue(搭骨架)→ 依赖Vite(做构建),对应 Java 生态的(搭骨架)→ 依赖(做构建)。升级价值:解决传统前端工具“启动慢、配置繁”的问题,同时保证生产环境产物性能,是现代 Vue 项目的标准技术栈。适用场景:所有 Vue 3 项目(推荐),尤其适合中大型项目(开发效率提升更明显)。

2025-10-16 11:28:04 375

原创 Vue3中ref与reactive实战指南:使用场景与代码示例

ref和reactive没有绝对的“优劣”,核心是按场景选型优先用ref:基本类型、需整体替换的数据;优先用reactive:复杂对象、数组列表;解构需响应性:搭配toRefs。掌握两者的本质差异和场景边界,能有效避免“响应性丢失”等问题,提升Vue3开发效率。建议结合本文代码示例动手实践,加深理解!#Vue3 #ref与reactive #响应式系统 #前端开发 #Vue实战。

2025-10-16 11:12:31 516

原创 vue3都有哪些升级相比vue2-核心响应式系统重构

通过上述代码可发现,以下操作无法触发视图更新,本质是的 API 限制:类别非响应式操作原因分析对象操作1. 直接新增属性(2. 直接删除属性(只能劫持已存在属性,无法拦截属性的“新增/删除”数组操作1. 直接修改索引(this.items[0] = '草莓'2. 修改数组长度(无法监听数组的“索引变化”和“长度变化”嵌套对象先加空对象再加属性(this.user.addr.city = '北京'空对象初始化时未被劫持,后续新增属性也无法响应Vue 从到Proxy。

2025-10-14 15:58:11 1052

原创 复习基础:int i=0;i=i++;int i=0;i=++i;

i = i++:后缀自增导致 “先取值、再自增、最后用旧值赋值”,结果为0。i = ++i:前缀自增导致 “先自增、再取值、最后用新值赋值”,结果为1。这种差异的核心是自增操作与赋值操作的执行顺序:后缀自增的 “取值” 在自增之前,前缀自增的 “取值” 在自增之后。从 JVM 底层看,两个语句的结果差异源于字节码指令的执行顺序:i = i++iload(取旧值)→iinc(自增)→istore(用旧值覆盖)→ 结果0。i = ++iiinc(自增)→iload(取新值)→istore。

2025-09-04 16:58:51 930

原创 实际项目中redis的实际使用场景有哪些

Redis在Java项目中最核心的价值是高性能和分布式支持,上述场景覆盖了缓存、锁、计数、消息、存储等多个维度。实际开发中需结合业务特点选择合适的场景,并注意Redis的持久化(AOF/RDB)、集群(主从/哨兵/Cluster)配置,确保高可用。

2025-08-29 17:29:40 955

原创 HTTP和HTTPS的区别,对称加密非对称加密区别

正确的部分:浏览器确实会获取服务器证书,且后续请求 / 响应会加密传输 —— 这是 HTTPS 的核心结果。需要补全的部分证书不是 “拿来就用”,而是要先验证合法性(防止伪造);加密不是 “直接加密请求”,而是先通过非对称加密协商 “对称密钥”,再用对称密钥加密实际数据;整个过程的核心是「TLS/SSL 握手」,它解决了 “如何安全共享密钥” 和 “如何确认服务器身份” 两个关键问题(这也是 HTTPS 防窃取、防篡改的根本)。TCP 连基础,握手验身份 + 协商密钥,对称加密传数据。

2025-08-29 17:24:16 1003

原创 工厂模式详解

当系统需要创建“一系列相关或相互依赖的产品族”时(而非单一产品),工厂方法模式已无法满足,此时需要抽象工厂模式。例如:手机工厂不仅生产手机(Phone),还生产耳机(Earphone)——IPhone与AirPods是一个产品族,与是另一个产品族。抽象工厂模式的核心是“创建产品族”,而非单一产品。解耦:分离“对象创建”与“对象使用”,客户端无需依赖具体产品类,只需依赖工厂和抽象产品。可维护:对象创建逻辑集中在工厂,修改时只需改工厂,无需改所有客户端。可扩展。

2025-08-27 11:27:45 805

原创 mybatis缓存、流程、流程涉及到的设计模式

角色作用生命周期建造者模式工具类,读取配置文件并构建 构建完 后即可丢弃(短期对象)工厂接口,创建 实例全局单例,贯穿应用生命周期会话接口,代表与数据库的一次交互一次数据库操作对应一个实例,使用后需关闭(短期对象)步骤 2:构建 核心逻辑: 解析配置流,创建 (全局配置中心),最终生成 (默认实现类) 代码实现:步骤 3:创建 核心逻辑: 从 (数据源)获取数据库连接 创建 (事务管理器)并绑定连接 创建 (执行器,负责 SQL 执行与缓存

2025-08-26 16:52:54 1012

原创 java -jar后面常用参数(面试被问答)

java -jar。

2025-08-22 16:20:40 389

原创 spring事务传播行为有哪几种

Spring 定义了 7 种事务传播行为(propagation behavior),用于描述当一个事务方法被另一个事务方法调用时,如何处理两个方法之间的事务边界(例如:是否新建事务、是否加入现有事务、是否以非事务方式执行等)。这些传播行为通过。

2025-08-22 15:25:27 1020

原创 反射在项目中实际使用

这个方法实现了多层次的用户信息获取机制,优先使用令牌验证,失败后则通过用户ID查找用户缓存,确保在各种情况下都能尽可能获取到用户信息。方法首先尝试从请求头中获取CSRF令牌,如果存在有效的令牌,则直接使用该令牌从tokenService中获取用户信息。这段代码是一个获取用户信息的方法,主要功能是从不同来源获取并返回用户信息对象。如果成功获取到用户信息,则设置CSRF令牌并将用户信息添加到tokenService中缓存。主要实现思路是:1.扫描离职用户;在终止待办的时候调用的是底层接口:对应的核心代码是。

2025-08-22 10:05:36 366

原创 springboot⽣命周期全流程

启动阶段通过。

2025-06-03 17:00:19 1095

原创 springboot中定时任务的原理

核心机制:基于 Spring 的 AOP 和任务调度框架,通过注解扫描和触发器实现定时执行。适用场景:单机环境下的简单定时任务(如数据同步、缓存刷新)。注意事项:分布式环境需防重复执行,耗时任务需异步处理,避免阻塞默认线程池。我可以理解为一个线程不断扫描需要执行的任务,然后判断任务是否执行?你的直觉很准确,但 Spring 的定时任务实现更接近"观察者模式":任务注册到调度器,触发器作为观察者在特定时间点通知调度器执行任务。这种设计比轮询扫描更高效,尤其在任务数量较多时。

2025-05-26 09:28:11 1823

原创 springboot中日志加载机制

Spring Boot的日志配置之所以能够在应用启动早期就完成,主要依靠监听关键事件,并与环境配置(Environment)紧密配合。这种实现方式保证了日志系统能够在其他组件需要使用日志之前就完成初始化,同时还支持通过配置文件灵活调整日志行为。springboot的启动流程Spring Boot 的启动流程是一个精心设计的过程,涉及多个关键阶段和组件。一切从main方法调用是启动的核心方法,负责创建并刷新应用上下文。2. 创建实例run()方法内部会创建推断应用类型判断应用是REACTIVE。

2025-05-21 17:41:37 1691

原创 水平越权和垂直越权,以及ruoyi框架中如何解决

水平越权是“同级别用户互访资源”,核心在于未校验资源归属;垂直越权是“低权限用户访问高权限功能”,核心在于未校验角色权限。两者均属于权限控制漏洞,需在后端代码中严格实现“身份认证+授权校验”,避免依赖前端或简单的参数校验。在Spring Boot等框架中,可结合Security组件、自定义注解、AOP等技术实现细粒度的权限管理,确保每个请求都经过完整的权限校验流程。结合ruoyi框架的实际解决方法在Ruoyi 框架。

2025-04-11 14:34:33 3706 1

空空如也

空空如也

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

TA关注的人

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