自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LiLiYuan.的博客

种一棵树最好的时间是十年前,其次是现在。

  • 博客(171)
  • 收藏
  • 关注

原创 Spring IoC & AOP 核心知识与原理(完整版)

IoC容器负责生产「原材料」(原始Bean对象),AOP机制负责对需要增强的原材料进行「精加工」(生成代理Bean),最终由IoC容器统一管理和对外提供「成品」(代理Bean)。解决「对象与对象之间」的依赖耦合问题,通过将对象的创建权交给容器,实现业务代码的解耦,让程序更易于测试、扩展和维护。IoC是Spring的骨架,所有功能都基于IoC容器展开。

2026-01-15 09:46:25 553

原创 【DataGrip打不开如何排查?】

先贴报错:。残留进程通常是因为之前的DataGrip没正常关闭(比如闪退、强制关闭、系统异常重启等)导致的。

2025-12-31 09:42:59 421

原创 【怎么理解maven中的镜像和仓库?】

把国外的东西,提前搬到国内仓库放着,你要的时候直接从国内拿,不用等跨国运输。镜像 = 在国内开了个分店,卖的东西和美国总店一样,但离你近,所以送货快!“别去美国那个慢吞吞的仓库了,去杭州那个仓库,东西一模一样,但快得多!这就是为什么配置镜像后速度能提升10-100倍的原因!我们用大白话、最直接的方式来解释这个问题。情况2:配置了镜像(就像国内超市有现货)情况1:没有镜像(就像网购国外直邮)好比GitHub vs Gitee。原因1:物理距离近(最核心!原因2:网络线路优化。用程序员能理解的例子。

2025-12-13 20:35:50 191

原创 【CapsLock 失效,Ctrl 键变成 CapsLock 的原因及解决方法】

许多笔记本电脑(尤其是联想、戴尔等品牌)在BIOS中默认开启了"Ctrl与CapsLock功能互换"选项,这是为了方便程序员和Linux用户的特殊设计。值可以自定义键盘键位。若该值被修改(如安装某些软件后),可能导致Ctrl与CapsLock互换。极少数情况下,键盘硬件本身损坏导致按键功能异常。:按住Shift键可临时输入大写,松开后恢复正常。Windows系统中,通过修改注册表的。

2025-12-13 14:29:43 1002

原创 【OOM是什么?怎么排查?】

OOM 是 JVM 抛出的要么是“内存分配太少,不够用”(比如堆内存设置太小,业务对象太多);要么是“内存泄漏”(对象用完后没被回收,一直占用内存,最终耗尽资源)。先看日志定类型,再抓快照找根源,配置不足就调整,内存泄漏就修复对 Java 开发来说,堆内存溢出(Java heap space)是重点,掌握“配置 JVM 参数自动生成快照→用 VisualVM/MAT 分析→修复内存泄漏/调整堆大小”的流程,就能解决 80% 以上的 OOM 问题。

2025-12-09 11:21:58 951

原创 【HashSet的本质是HashMap?】

HashSet 由 HashMap 实现,本质是“用 HashMap 的 key 实现 HashSet 的元素存储与去重,用固定空对象填充 HashMap 的 value”——核心目的是复用已有高效实现,减少开发维护成本,同时保持 Java 集合框架的设计一致性。简单说:HashMap 已经解决了“哈希表+去重”的核心问题,HashSet 不需要再造一遍轮子,只需要做一个“包装器”,把自己的方法转发给内部的 HashMap 即可。

2025-12-05 16:40:37 571

原创 【为什么加了锁会效率变低?Vector 是线程安全的,为什么现在不用了?】

要理解“加锁后效率变低”,核心是搞懂 synchronized,再加上锁本身的开销,最终导致效率下降。

2025-12-05 16:29:54 339

原创 【Lombok库常用注解】

Lombok是一个Java库,它通过注解的方式,在编译期自动生成样板代码,极大地减少了Java开发中冗长且重复的代码,如getter、setter、构造函数等,使代码更加简洁易读。

2025-11-24 13:27:42 427

原创 【匿名函数是什么?java中有匿名函数吗?】

无显式函数名:没有给函数起名字(比如是“命名函数”,是匿名函数);临时使用:通常作为参数传递(比如回调函数)或一次性执行,不用复用;语法简洁:省略函数名,聚焦核心逻辑(这是它的核心价值)。无显式名字、临时使用、简洁聚焦逻辑;Java 中没有独立的匿名函数(受“面向接口/类”设计限制);Java 通过两种方式实现匿名函数的效果:Java 8 前:匿名内部类(繁琐,依附接口/抽象类);Java 8 后:Lambda 表达式(简洁,依附函数式接口,推荐使用);

2025-11-17 16:36:30 791

原创 【JS中 箭头函数的核心优势:避免了传统匿名函数 this 指向混乱的问题、契合 Lambda 无副作用的特点】

/ 外部变量// 有副作用的函数:修改了外部变量 globalNum// 副作用:修改外部变量add(2, 3);// 15(外部环境被修改了)这个函数虽然能实现两数相加,但它修改了外层的globalNum,属于“有副作用”,不符合 Lambda 纯函数的思想。一个函数可以「解决了thisname: "张三",hobbies: ["篮球"],this.name = "李四";// 有副作用:修改了外部对象的属性。

2025-11-17 14:58:16 1011

原创 【什么是传统匿名函数?】

匿名」:函数没有自己的名字(比如是“命名函数”,是“匿名函数”);「传统」:相对于 ES6 箭头函数(() => {})而言,是 ES6 之前就存在的写法;function(参数) { 函数体 }(没有函数名,直接用function开头)。本质:无名字 +function关键字定义的函数,ES6 前的“匿名函数唯一写法”;核心用途:作为回调函数(如forEachsetTimeout)、赋值给变量复用、立即执行函数(IIFE);this动态绑定、有arguments对象、可作为构造函数;

2025-11-17 14:49:34 255

原创 【JS 有 lambda表达式吗】

JavaScript没有专门的Lambda表达式语法,但其箭头函数(() => {})完全实现了Lambda的核心功能。箭头函数作为匿名函数的简洁写法,完美契合Lambda表达式的三大特征:作为高阶函数参数、表达简单逻辑、实现纯函数。在数组操作(map/filter)、简化函数定义、异步回调等场景中,箭头函数与其他语言的Lambda表达式功能完全一致。虽然语法形式略有差异(使用=>符号而非lambda关键字),但JS箭头函数通过自动绑定this、不能用作构造函数等特性,充分体现了Lambda函数

2025-11-17 14:04:55 592

原创 Arrays类和List接口的关联

在Java中,Arrays类和List接口之间存在多方面的关联,它们相互配合,方便对数据集合进行操作。

2025-11-13 11:17:53 416

原创 StringBuilder 和 StringBuffer核心区别

单线程场景(90% 的开发场景,比如你的 SQL 拼接)优先用或字符串拼接/文本块(语法糖),性能最优、写法简洁;多线程场景(并发共享拼接)简单需求:用(自带锁,无需手动处理);高性能需求:用StringBuilder + 手动锁(比如或),锁粒度更灵活,避免全局锁的开销;线程安全换性能,无并发用 StringBuilder,有并发用 StringBuffer 或加锁的 StringBuilder。

2025-11-07 11:23:34 876

原创 【volatile】

想象有一个多人合作的项目,大家都在一个共享的办公室工作,办公室里有一块公共的白板,上面记录着项目的关键信息,比如项目进度、待办事项等。这块白板就好比是计算机内存中的共享变量。每个开发人员都有自己的办公桌(好比每个线程都有自己的工作内存),他们会时不时地去白板上查看信息,然后在自己的桌子上工作,完成一些任务后再把结果更新到白板上。但是,这里可能会出现一个问题:由于每个人都在自己的桌子上工作,有时候一个人更新了白板上的信息,其他人可能不会马上知道。

2025-10-17 15:04:27 155

原创 【Java序列化与反序列化详解】

→ 对象→字节序列;→ 字节序列→对象;(版本控制)、transient(排除临时字段);核心价值:支持数据持久化、网络传输、跨语言交互、缓存优化,是复杂Java程序(如分布式系统、客户端/服务器应用)的基础能力。

2025-10-16 17:20:52 775

原创 throw && throws

Java中throw和throws的区别: 用途:throw用于手动抛出异常,throws声明方法可能抛出的异常类型 语法:throw在方法体内使用,throws在方法声明中使用 处理:throw抛出的异常需要捕获,throws声明的异常由调用者处理 场景:throw用于主动抛出错误,throws用于传递受检异常 示例: void method() throws IOException { // 声明 if(error) throw new IOException(); // 抛出 }

2025-10-14 10:37:36 264

原创 静态方法没有独立的实例

静态方法没有独立的实例

2025-10-13 17:01:19 428

原创 【垃圾回收】

后,从程序逻辑上看这两个对象应该不再被使用,可被回收。但由于它们相互引用,按照引用计数法,它们的引用计数器值都不会变为0,导致这两个对象一直无法被回收,造成内存泄漏。所以,尽管引用计数法实现简单且判断效率较高,但由于这个严重缺陷,未被Java主流垃圾回收器采用。所指向的对象生命周期结束时,该对象的引用计数器值就会变为0,从而被认为是可回收对象。都指向同一个对象,该对象的引用计数器的值为2。引用计数法最大的问题在于无法处理对象之间的循环引用。,所以对象的引用计数器值减为1。,此时指向该对象的引用还剩。

2025-09-11 17:19:50 500

原创 【深入理解JVM】

JVM(Java虚拟机)是Java技术的核心,它实现了Java次编写,到处运行的平台无关性,通过将字节码转换为具体平台的机器指令。JVM负责内存管理,包括对象内存分配和垃圾回收,无需开发者手动管理内存释放。作为运行时环境,JVM通过解释执行或即时编译(JIT)技术执行字节码。其设计遵循Java规范,确保不同JVM实现上的程序兼容性。 关键JVM相关关键字: synchronized:实现线程同步,基于JVM的Monitor机制 volatile:保证变量可见性,防止指令重排序

2025-09-09 10:29:24 572

原创 【synchronized】

Java的synchronized关键字通过对象锁实现线程同步,确保线程安全。可使用方式包括修饰实例方法、静态方法或代码块,分别基于实例对象、Class对象或指定锁对象。JVM层面通过Monitor机制实现,字节码使用ACC_SYNCHRONIZED标志或monitorenter/monitorexit指令。JDK对锁进行了优化,包括偏向锁(减少同一线程重复获取的开销)、轻量级锁(CAS避免阻塞)和适应性自旋(动态调整自旋次数)。这些机制共同提升了多线程环境下的性能表现。

2025-09-04 09:42:44 877

原创 Java和数据库的关系

一个只会写Java代码但不懂数据库的工程师,就像一个物流调度员不知道仓库的容量、货架规则、叉车性能一样,他发出的指令很可能效率低下,甚至导致仓库瘫痪(数据库瓶颈)。数据库(MySQL, Oracle等) 就像一个专业的仓库,它有自己的管理体系、安保措施(权限)、货物摆放规则(索引)和进出流程(事务)。数据库本身是一个独立的、巨大的知识领域,但“数据库的使用、优化和深度理解”绝对是Java后端工程师进阶的核心组成部分。Java后端程序 就像是操作这个仓库的整个物流系统,包括下单、调度、打包、运输等。

2025-08-23 21:55:20 338

原创 (existing, replacement) -> existing

是 Java 中处理 Map 键冲突的合并函数,主要用于等需要处理重复键的场景。这是一个existingexisting当使用定义当时,如何处理值的冲突。

2025-07-04 17:21:20 403

原创 Comparator 比较器

假设存在。

2025-05-15 15:17:57 1462

原创 关于Stream

Stream API 通过中间操作和终止操作的组合,提供了一种高效、灵活且易读的方式来处理集合数据。掌握这些操作可以让你的代码更简洁、更具表现力。

2025-05-07 15:07:07 1196

原创 Filename too long 错误

Filename too long 错误表明文件名超出了文件系统或版本控制系统允许的最大长度。

2025-04-22 19:28:23 949

原创 SSM和SpringBoot有什么区别?

undefined.应用程序的度量指标,如请求的处理时间、吞吐量等。通过访问特定的 URL 路径(端点路径),就可以获取到相应的监控和管理信息。undefined.应用程序的配置信息,如环境变量、配置属性的值。总之,Spring Boot 是在 SSM 等传统框架基础上发展而来,更适合快速开发和部署现代化的 Java 应用。端点用于获取应用的健康状况, /actuator/info 端点用于获取应用的自定义信息。undefined.应用程序的健康状况,包括数据库连接、缓存状态等方面的健康检查结果。

2025-02-25 10:15:23 751

原创 Hosts 和 DNS

DNS(Domain Name System,域名系统)和 hosts 文件都与域名解析相关,它们相互协作又有各自的特点,下面为你详细介绍它们之间的关系。

2025-02-12 11:11:53 703

原创 在本地电脑安装多个JDK 随时切换

安装两个jdk随时切换

2025-02-07 09:52:27 626

原创 【回调函数】

回调函数是编程中一种重要的概念,特别是在处理异步操作时。它是一种在某个操作完成后执行的函数,这个操作可能是耗时的I/O操作,如网络请求或文件读写,也可能是任何需要在稍后执行的任务。

2024-09-10 17:22:47 386

原创 UNION 和 UNION ALL

语句必须有相同数量的列,并且每列的数据类型必须兼容。列的顺序和数据类型也必须一致,这样才能保证结果集的正确合并。中有重复的行,这些重复的行也会出现在合并后的结果集中。语句的结果合并成一个单一的结果集,包括所有重复的行。是一个SQL操作符,用于合并两个或多个。它的工作原理是将每个。会自动去除重复的行,而。会保留所有重复的行。

2024-07-11 10:23:13 949

原创 Java常用语法糖

Java 中引入了许多语法糖来简化代码,让编程更加直观和高效。

2024-05-23 14:06:16 510 2

原创 迭代器 增强for循环

这里的关键是,这个操作是安全的,因为它是由迭代器自己管理的。迭代器会记录下它所在的集合的状态,并在调用 remove() 方法时进行相应的更新,以避免并发修改异常。

2024-05-23 13:57:51 1464

原创 Stream API 和 Lambda表达式

总结来说,Java 8 Stream API提供了一种新的数据处理方式,而Lambda表达式提供了一种新的代码表达方式。两者结合使用,可以写出更简洁、高效的代码。在这个示例中,使用Stream API和Lambda表达式来处理一个字符串列表,筛选出以"A"开头并转换为大写的字符串,并将结果收集到一个新的列表中。

2024-05-21 13:37:50 466

原创 flatMap方法:扁平处理流

方法就像是这样一个助手:它帮你打开每个信封,取出所有的小纸条,并把它们放在一起,形成一个没有信封的、平铺的小纸条列表。这样,你就得到了一个包含所有小纸条的单一列表,而不是之前那些装有小纸条的多个信封。flatMap是一个流操作,它接受一个函数作为参数,这个函数会被应用到流中的每个元素上,并且这个函数返回的每个结果都是一个流。flatMap然后将这些流扁平化成一个流。现在,你想要把所有的小纸条都取出来,整理成一个新的、没有信封的列表。假设有一系列的信封,每个信封里面都装着一些小纸条。这些信封相当于我们的。

2024-05-21 10:57:43 548

原创 putIfAbsent() 方法

这个方法非常有用,特别是在不希望覆盖现有键值对的情况下,或者在需要检查键是否已经存在于。中,并返回之前与该键关联的值(如果有的话)。如果键不存在,则返回。接着,我们尝试添加 “cherry”,由于它不存在,所以添加成功,,也不会返回任何值。只有当键不存在时,它才会将指定的键值对添加到。返回了之前与 “apple” 关联的值(即 1),而没有修改。并添加了两个键值对。然后,尝试将 “apple” 添加到。中添加一个键值对,前提是这个键尚未存在于。接口的一个方法,它用于向。中,但由于它已经存在,

2024-05-17 09:22:39 740

原创 DataGrip搜索不到汉化插件

新增插件仓库:https://plugins.zhile.io。可能是没有配置插件仓库。

2024-01-16 16:10:37 1054

原创 Debug技巧-不启用前端访问后端

在日常开发中,我们经常会遇到各种问题需要调试,前后端都启动需要耗费一定的时间和内存,方便起见,可以直接用抓包数据访问后端,这里我们需要用到Postman或者ApiFox。

2023-11-01 10:47:42 724

原创 Git 常用

*注意:**git restore 是 Git 2.23 版本引入的一个命令,如果你使用的是较早版本的 Git,可能无法使用 git restore 命令,但你仍然可以使用。**注意:**git switch 是 Git 2.23 版本引入的一个新命令,如果使用的是 Git 的旧版本,可能无法使用 git switch 命令,但仍然可以使用。命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

2023-09-07 16:29:49 788

原创 JRebel and XRebel 区别

XRebel:请求过程中,各个部分代码性能监控。例如:方法执行时间,出现的异常,SQL执行时间,输出的Log,MQ执行时间等。JRebel:修改完代码,不想重启服务,期望代码直接生效。

2023-08-11 14:31:14 751

空空如也

空空如也

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

TA关注的人

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