自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 IDEA接入deepseek API

本文介绍了如何在IntelliJ IDEA中接入DeepSeek API(以Codex为例)。步骤包括:1)在DeepSeek官网申请API Key;2)在IDEA安装CCGUI插件;3)配置API参数(需修改为deepseek-v4-flash模型,设置base_url等);4)输入API Key并创建对应模型;5)将提问模型切换为deepseek-v4-flash并启用完全自动化功能。完成配置后即可利用AI辅助代码开发。注意使用CC接入可能会报错,建议选择Codex接入方式。

2026-08-05 10:00:00 261

原创 【异常解决】Transaction rolled back because it has been marked as rollback-only

本文分析了Spring事务中常见的UnexpectedRollbackException异常原因:当嵌套事务内层抛出异常被外层捕获但未继续抛出时,事务被标记为回滚,而外层仍尝试提交导致冲突。通过代码示例展示了REQUIRED传播级别下的事务共享问题,并给出四种解决方案:1)让异常自然传播;2)调整异常捕获边界;3)改用REQUIRES_NEW独立事务;4)不推荐的手动清除回滚标记。文章强调需根据业务场景合理处理事务边界和异常传播机制。 (字数:149)

2026-07-06 10:30:00 244

原创 笔记本电脑睡眠唤醒后没有声音问题解决

【150字摘要】笔记本睡眠唤醒后无声问题可通过以下步骤解决:1.重启Windows音频服务;2.在设备管理器中禁用再启用声卡设备;3.若使用公版驱动,建议卸载后安装稳定版本。最彻底的解决方案是安装笔记本厂商提供的专用驱动(含定制电源管理配置),具体步骤包括:精确查询机型→官网下载对应驱动→彻底卸载旧驱动→按顺序安装Intel智音和Realtek驱动。作者通过安装厂商驱动最终解决了该问题,强调要避免使用公版驱动和第三方下载站。(150字)

2026-07-02 10:30:00 289

原创 【技术实战系列】一台电脑连接局域网内另一台电脑内的虚拟机

摘要 本文介绍如何通过端口转发实现笔记本访问台式机虚拟机的配置方法。首先确保设备处于同一局域网,测试网络连通性。然后在Windows主机使用netsh命令配置端口转发规则(如将12333端口转发至虚拟机22端口),并在防火墙开放对应端口。最后通过SSH工具测试连接。该方法可实现低配笔记本高效利用高配台式机的虚拟机资源,支持多台虚拟机通过不同端口映射访问。全文包含详细操作步骤和参数说明,适合开发者参考实施。

2026-06-22 10:30:00 192

原创 【技术实战系列】服务压测TPS抖动问题的排查

本文介绍了服务在测试环节进行压测的时候发现 TPS 抖动的的问题。以及从优化的角度出发对整个服务问题排查与解决的过程。

2026-06-04 11:23:19 168

原创 【看完不会我吃系列】一文读懂Spring定时任务

Spring 的定时任务主要通过 @Scheduled 注解或外部 quartz-scheduler 框架实现,@Scheduled 和 Quartz Scheduler 虽然都能实现定时任务,但定位完全不同:前者是 Spring 内嵌的轻量级调度工具,后者是独立的专业调度框架。它们的差异体现在架构、功能、可靠性等方方面面。本章我们一起来学习一下两者之间的区别。

2026-05-28 09:30:00 360

原创 【技术实战系列】redis单例安装

本文介绍了在Linux环境下安装Redis 7.2.0的详细步骤。主要内容包括:环境准备(安装编译工具)、下载解压源码、编译安装、创建配置和数据目录、修改关键配置参数(如绑定地址、端口、持久化等)、通过systemd服务管理Redis进程,以及创建专用用户运行Redis服务。最后提供了验证安装和卸载Redis的方法。文章为Redis初学者提供了完整的安装指南,适合作为学习Redis的入门教程。后续将介绍更多Redis相关知识。

2026-05-26 10:00:00 607

原创 【技术实战系列】log4j2自定义日志组件

本文介绍了如何在Log4j2中实现自定义日志格式转换器。通过继承LogEventPatternConverter类并使用@Plugin和@ConverterKeys注解,开发者可以创建自定义的日志格式转换组件。示例中的CommPatternConverter实现了特定格式的日志输出,包括消息长度、错误处理等功能。配置文件中使用%comm或%COMM占位符即可调用该转换器。这种机制适用于链路追踪ID、租户标识、用户信息等场景的日志格式化需求,为日志输出提供了高度定制化的解决方案。

2026-05-21 16:39:39 213

原创 【技术实战系列】TCP连接超时时间在端口错误时失效原理

摘要:TCP连接超时配置在IP错误和端口错误时表现不同。IP错误时,若路由不可达会快速失败,若静默黑洞则会触发TCP重传机制,超时配置生效;端口错误时,目标主机会立即返回RST报文,连接快速中断,不受超时参数控制。通过抓包分析验证了这一现象:IP错误会触发重传定时器,而端口错误则直接收到RST响应。这种差异源于TCP/IP协议栈对两种错误的不同处理机制。

2026-05-09 14:47:12 385

原创 【高等数学】第三讲:导数

本文系统介绍了导数的概念、定义及求导方法。首先从平均变化率引出瞬时变化率(导数)的极限定义,阐明导数描述函数在某点的变化率。其次分析了可导与连续的关系,指出可导必连续但连续未必可导。接着详细推导了基本初等函数(幂函数、三角函数、指数函数、对数函数)的导数公式,并介绍了反函数求导法则和复合函数的链式求导法则。最后讨论高阶导数概念及莱布尼茨公式。全文通过严格的数学推导,建立了完整的导数理论体系,为微积分学习奠定基础。

2026-04-13 12:02:14 547

原创 【高等数学】第二讲:函数极限

本文系统介绍了函数极限的核心概念与相关性质。首先阐述了邻域与去心邻域的定义及其在极限研究中的必要性。随后详细讲解了极限的严格定义、左右极限(单侧极限)的概念,以及函数极限的唯一性等重要性质。文章重点分析了无穷小量与无穷大量的定义、性质及其比较方法,并介绍了极限运算的基本法则和夹逼准则。最后,系统论述了函数连续性的定义与间断点分类(可去间断点、跳跃间断点、无穷间断点和振荡间断点),通过典型实例阐明了各类间断点的特征。全文为理解微积分核心概念——极限提供了系统而严谨的理论框架。

2026-04-07 09:00:00 515

原创 resources路径下的文件无法打入war包或jar包内

摘要:本文分析了Maven打包时HTML文件未被打入war包的问题。排查发现是由于pom.xml中显式定义的资源包含规则覆盖了默认行为,虽然配置了**/*.*但仍需注意匹配规则。解决方案是简化资源包含配置为单一**/*.*模式。文章还列举了其他可能原因:打包插件排除规则、生命周期未执行资源复制等,建议通过检查target/classes目录验证资源是否被正确复制。最终通过调整资源包含配置解决了该问题。(149字)

2026-03-26 11:45:37 299

原创 【高等数学】第一讲:函数与初等函数

本文系统介绍了高等数学中函数的基本概念与重要特性。首先阐述了函数的定义、表示法及三要素(定义域、对应法则、值域)。重点分析了函数的四大特性:有界性(包括上界、下界和有界函数)、单调性(严格/非严格单调递增递减)、奇偶性(偶函数、奇函数及分段函数的奇偶性判断)和周期性(周期定义及最小正周期)。详细讲解了初等函数,包括常数函数、幂函数、指数函数(特别是自然指数函数)和三角函数(sin、cos、tan函数),涵盖其定义域、值域、性质及诱导公式。最后介绍了复合函数的定义和复合条件。全文为深度学习所需的微积分基础提供

2026-03-23 14:05:58 491

原创 【技术实战系列】MybatisGenerator的使用

MyBatis Generator(MBG)是一款自动化代码生成工具,能够根据数据库表结构快速生成MyBatis所需的实体类、Mapper接口和SQL映射文件。本文介绍了两种使用方式:Maven插件方式(推荐)和Java主类方式。重点讲解了Maven插件的配置方法,包括pom.xml中的插件引入和generatorConfig.xml配置文件的编写要点,并说明了数据库驱动、文件覆盖策略等注意事项。通过MBG可以大幅减少重复编码工作,提高开发效率。

2026-03-18 17:37:57 305

原创 【线性代数】第二讲: 矩阵的行列式以及计算

本文介绍了矩阵行列式的概念及其几何意义,重点讲解了行列式的计算方法与应用。行列式表示线性变换对空间的缩放比例,其绝对值反映面积/体积变化倍数,符号表示空间定向变化。文章详细阐述二阶和三阶行列式的计算,以及行列式与线性方程组解的关系:行列式非零时有唯一解,为零时可能无解或无穷多解。此外,还介绍了行列式的性质(转置不变性、变号性、数乘性等)、克莱姆法则、余子式与代数余子式,以及拉普拉斯展开法等行列式计算技巧。行列式作为矩阵的重要属性,在判断方程组解的存在性和唯一性方面具有关键作用。

2026-03-12 13:57:24 870

原创 【异常解决】SLF4J: Class path contains multiple SLF4J bindings

SLF4J多重绑定警告解决方法摘要 当应用启动出现"SLF4J:Classpath contains multiple SLF4J bindings"警告时,说明项目中存在多个日志实现绑定。SLF4J作为日志门面需要配合单一实现使用,多个绑定会导致日志行为不可控。解决方法:1)通过mvn dependency:tree命令分析依赖树,找到冲突的日志实现jar包;2)在pom文件中排除多余的绑定依赖(如logback-classic、slf4j-log4j12等),仅保留一个实现;3)重新

2026-03-04 11:31:44 326

原创 【线性代数】学习指引

本文通过几何视角阐述线性代数的核心概念。首先解释了基向量与坐标系的关系:任何向量都可表示为基向量的线性组合,坐标即缩放因子。通过改变基向量可获得新的坐标系,但向量本身不变。其次介绍了张成空间的概念,即所有可能的线性组合构成的集合。线性变换被描述为向量的移动过程,并指出只需记录基向量变换后的位置就能确定整个变换。最后说明矩阵乘法对应线性变换的复合作用,通过追踪基向量的连续变换位置即可推导出复合矩阵。全文以直观的几何方法揭示了线性代数的本质原理。

2026-02-26 23:15:24 1218

原创 【线性代数】第一讲:矩阵与矩阵的运算

本文介绍了矩阵的基础知识和运算规则。主要内容包括:矩阵的定义、维度表示、元素定位等基本概念;特殊矩阵类型如行矩阵、列矩阵、方阵、单位阵等;矩阵的基本运算包括相等判断、加减法、乘法(强调可乘条件和"左行乘右列"规则)、转置运算等;特别指出了矩阵乘法不满足交换律等与数乘不同的性质。文章还介绍了对称矩阵的定义和性质,为线性代数学习提供了基础内容概述。

2026-02-25 17:34:31 1369

原创 【技术实战系列】windows系统如何模拟tail命令效果

本文介绍了在Windows系统下实现类似Linux中tail命令功能的多种方法。主要包括:1)使用PowerShell的Get-Content命令及其参数;2)通过GitBash调用Linux风格的tail命令;3)安装第三方工具如GNUWin32的tail工具、BareTail和TailforWindows等。文章详细说明了每种方法的安装配置步骤和使用示例,并对比了不同工具的优缺点。对于开发者而言,GitBash和GNUWin32工具更接近Linux原生体验,而PowerShell则无需额外安装即可使用。

2026-02-12 11:39:15 787

原创 VUE 请求代理地址localhost报错[HPM] Error occurred while trying to proxy request

vue报错,[HPM] Error occurred while trying to proxy request xxx from xxx to http://localhost:8080/api/ (ETIMEDOUT)问题解决

2026-02-03 14:13:29 755

原创 【源码解析系列】JAVA AQS队列源码解析第二章

​之前我们讲了【源码解析系列】JAVA AQS队列源码解析第一章,相信你通过这篇文已经对AQS队列有了比较深刻的理解。上一章我们重点讲了关于AQS队列部分线程进入队列和出队列的过程,以及线程获取锁(不超时不中断)的和释放锁的流程。今天我们一起开始探究AQS队列第二章内容,也就是线程支持超时获取锁和可中断获取锁部分的源码解析。

2026-02-01 19:36:45 613

原创 【源码解析系列】JAVA AQS队列源码解析第一章

今天我们要讲的是AQS队列含义,以及AQS队列源码的解析,希望通过阅读本文可以帮助你更好的理解java锁的实现原理,更好的在实际开发中运用java显示锁,本文为AQS队列解析系列第一章(不含全部源码解读),后续会逐步更新,敬请期待!

2026-01-26 17:37:12 688

原创 【技术实战系列】@Valid注解实战

本文介绍了JavaBean Validation规范中的@Valid注解在Spring项目中的实际应用。主要内容包括:1)依赖引入方式,区分SpringBoot和非SpringBoot项目;2)常用校验注解示例,涵盖空值、长度、数值、格式、时间等校验;3)自定义参数校验的实现方法,包括字段级和类级校验;4)@Valid注解的常见使用位置及异常信息优化处理;5)@Valid与Spring提供的@Validated注解的区别对比。文章通过代码示例详细展示了各种校验场景的实现方式,为开发者提供了实用的参数验证解决

2026-01-22 16:32:35 857

原创 【看完不会我吃系列】一文读懂ReentrantLock

前面我们学习了synchronized,那么在JDK1.5之前都是通过 synchronized关键字实现并发同步机制的,而JDK1.5以后Doug Lea大师开发了current 包的实现,通过AQS+CAS代码显示实现了隐式锁 synchronized 的机制。通过阅读文本,将会让你对开发中常用的ReentrantLock有更深的理解,从而打开current 包神奇的大门。

2026-01-20 09:30:18 589

原创 【看完不会我吃系列】一文读懂工厂模式

工厂模式将对象创建与使用分离,分为简单工厂、工厂方法和抽象工厂三种。简单工厂通过统一工厂类创建对象,但违反开闭原则;工厂方法通过子类决定实例化,符合开闭原则;抽象工厂创建产品族,保证兼容性但扩展性较差。工厂模式解决了直接new对象的紧耦合问题,提高了代码复用性和扩展性,在MyBatis、Spring等框架中广泛应用。三种模式各有利弊,应根据产品类型和扩展需求选择合适方案。

2026-01-18 17:49:48 716

原创 【看完不会我吃系列】一文读懂synchronized

​又到了一文读懂的系列了,之前我们初步认识了java线程锁的概念以及原理,那么在日常的工作中,我们如何使用java线程锁进行实际业务开发。这篇文章介绍了synchronized内置锁的使用,概念,以及原理简述。

2026-01-17 18:34:59 969

原创 【看完不会我吃系列】utf8mb4_general_ci和utf8mb4_bin的区别

MySQL中utf8mb4_general_ci和utf8mb4_bin两种排序规则的主要区别在于:前者不区分大小写和重音(基于Unicode权重比较),后者区分大小写和重音(直接比较二进制编码)。在查询、索引、排序和分组时表现不同,选择时应根据应用场景需求决定,需要语言友好性时选前者,需要精确匹配时选后者。

2026-01-15 11:47:47 1058

原创 【看完不会我吃系列】一文读懂java线程锁

本文介绍了Java线程锁的基本概念及其解决的三大问题:原子性、可见性和有序性。原子性问题源于多线程对共享变量的非原子操作,锁通过独占访问保证临界区代码的原子执行。可见性问题由CPU缓存导致,锁利用MESI协议和内存屏障确保修改对其他线程立即可见。有序性问题由指令重排序引起,锁通过插入内存屏障防止重排序。文章还对比了乐观锁和悲观锁的特性及适用场景,乐观锁适合读多写少场景,悲观锁则适用于高冲突环境。最后指出后续将深入探讨具体锁实现和AQS源码解析。

2026-01-14 13:40:48 908

原创 【包教包会系列】springboot将依赖jar打到指定位置

Spring Boot Fat Jar是一种自包含的可执行JAR文件,它将应用代码、所有依赖和内嵌服务器打包在一起,具有部署简单、环境一致和快速启动等优势,特别适合微服务架构。但缺点是增量更新依赖JAR时较为麻烦,可能因签名校验导致失败。相比之下,普通JAR通过maven-dependency-plugin或maven-assembly-plugin插件管理依赖,更适合需要频繁增量更新的场景,虽然部署复杂度较高。两种打包方式各有适用场景,开发者可根据项目需求选择。

2026-01-13 11:54:32 695

原创 【源码解析系列】一文读懂ThreadLocal源码

本文意在帮助你解读ThreadLocal源码

2026-01-11 21:23:07 982

原创 【看完不会我吃系列】一文读懂ThreadLocal

ThreadLocal通过为每个线程维护独立的ThreadLocalMap实现线程安全,其中ThreadLocal对象作为key,变量副本作为value。其核心原理是利用线程内部的ThreadLocalMap存储数据,采用弱引用包装key以避免内存泄漏。当ThreadLocal引用失效时,GC会回收弱引用的key,后续操作会自动清理value。但若ThreadLocal是全局静态变量或线程来自线程池,仍可能导致内存泄漏。解决方案包括使用remove()方法主动清理或确保ThreadLocal引用及时失效。合

2026-01-10 23:11:11 990

原创 【看完不会我吃系列】一文读懂单例模式

单例模式是一种确保类只有一个实例并提供全局访问点的设计模式。主要特点包括:私有构造方法、内部创建实例、提供静态访问方法。实现方式有:懒汉式(延迟加载但线程不安全)、饿汉式(立即加载线程安全)、双重检查锁(兼顾性能与安全)、静态内部类(利用类加载机制保证线程安全)、枚举方式(天然防反射和序列化攻击)。单例模式可减少资源消耗并提供全局访问点,但需注意防止反射和序列化破坏单例性。不同实现方式在懒加载、线程安全性和防御能力上各有特点,应根据具体场景选择合适方案。

2026-01-09 23:33:33 1173

原创 java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1 异常解决

摘要:前端传输生僻字导致服务端报错(MalformedInputException),初步判断是编码问题。Wireshark抓包时中文默认显示为点符号,需配置UTF-8才能正确显示。但前端发现即使选择UTF-8,生僻字仍无法正确传输。问题可能与生僻字的特殊编码处理有关,需进一步排查前后端编码配置是否一致。(99字)

2026-01-08 17:32:35 473

原创 【技术实战系列】mybatis拦截器ResultSetHandler实战

本文介绍了MyBatis的ResultSetHandler拦截器,主要用于处理查询结果集。该拦截器可以在结果集从数据库返回到Java对象的转换过程中进行干预,实现敏感数据脱敏等功能。文章详细说明了拦截器的执行时机、可拦截方法及核心功能,并提供了两个实战代码示例:一个通过SQL解析表名进行结果处理,另一个通过判断返回对象类型进行处理。ResultSetHandler拦截器是MyBatis四大组件拦截器之一,可用于结果集脱敏、数据转换、结果缓存等场景。

2026-01-08 12:51:20 613

原创 mybatis拦截器Executor详解

本文介绍了MyBatis中Executor拦截器的使用,相比ParameterHandler拦截器能获取更多上下文信息。文章详细说明了如何通过Executor拦截器实现对特定表(如subscriber表)的insert/update操作进行拦截处理,包括SQL类型判断、表名解析、参数处理等核心逻辑。提供了完整的代码示例,展示如何对敏感信息进行加密处理,并给出了表名解析的正则表达式实现方法。该拦截器可灵活控制拦截流程,只处理指定表和操作类型,其他情况直接放行。

2026-01-07 12:48:51 470

原创 mybatis拦截器ParameterHandler详解

摘要:本文介绍了使用MyBatis拦截器实现敏感数据加密的方案。通过ParameterHandler拦截器在执行SQL前对用户信息中的敏感字段(如用户名)进行SM2国密加密处理。详细说明了拦截器的实现方式,包括@Intercepts和@Signature注解的使用、参数处理逻辑以及加密方法实现。同时提供了在Spring和SpringBoot项目中配置拦截器的方法,并阐述了拦截器在MyBatis执行流程中的位置和作用时机。该方案能有效保障用户敏感信息在数据库存储时的安全性。

2026-01-06 20:47:23 595

原创 【包教包会系列】springboot打war包时将外部配置文件打入到war包内

本文介绍了如何使用maven-assembly-plugin插件将外部配置文件打包到war包中。首先在pom.xml中配置插件,指定执行阶段和描述文件路径。然后创建assembly描述文件(xxx.xml),定义文件打包规则:1)将classes目录内容放入WEB-INF/classes;2)将config目录下的文件(排除application.properties)放入WEB-INF/classes/config;3)将特定配置文件放入指定位置;4)处理运行时依赖,将jar包放入WEB-INF/lib并

2026-01-06 10:48:50 216

原创 sourceTree回滚提交和重置当前分支到此次提交的区别

摘要:本文介绍了使用SourceTree进行Git代码回滚和重置的几种方法。当本地提交出错时,可通过"回滚提交"撤销操作;若已推送远端,则需使用"重置当前分支到此次提交",提供软合并(保留本地改动)和强行合并(丢弃改动)两种模式。文章还分享了强制推送和更简单的替代方案:先删除远端分支再重新推送。最后提醒操作前注意备份,避免代码丢失风险。(149字)

2019-12-18 17:59:53 23594 2

原创 【看完不会我吃系列】一文读懂byte一个字节的数据大小范围为什么是-128~127

摘要:计算机通过补码机制实现负数和减法运算。基于同模原理,8位二进制将最高位作为符号位(0正1负),正数补码即本身,负数补码为对应正数取反加1。这种设计将-128到127映射到00000000~11111111,避免了±0的冗余,充分利用256种组合。补码既符合计算机的纯二进制运算逻辑,又满足人类对负数的数学认知需求,是连接硬件底层与高级编程的关键桥梁。

2019-02-25 11:39:07 20563 11

空空如也

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

TA关注的人

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