- 博客(134)
- 收藏
- 关注
原创 ArrayList与LinkedList的核心差异
摘要: 本文对比了Java中ArrayList与LinkedList的核心差异。ArrayList基于动态数组,支持O(1)随机访问,但扩容(1.5倍增长)和中间插入需数据拷贝(O(n));LinkedList基于双向链表,插入删除仅需修改指针(O(1)),但随机访问需遍历(O(n))。内存方面,ArrayList空间利用率高但可能预留冗余,LinkedList每个节点额外存储指针。适用场景:ArrayList适合读多写少的场景(如随机访问),LinkedList适合频繁增删(如队列)。需注意LinkedL
2025-06-12 15:40:54
616
原创 Java反射机制详解:原理、应用与实战场景
Java反射机制允许程序在运行时动态获取类信息并操作对象,是实现解耦和动态化的核心技术。通过Class、Method、Field等API,反射能动态加载类、创建对象、调用方法及访问私有成员。主要应用场景包括框架开发(如Spring IOC)、动态代理、插件系统、序列化/反序列化(如Jackson)等。尽管反射带来灵活性和扩展性,也存在性能损耗、安全隐患和维护困难等缺点。最佳实践建议缓存Class对象、避免高频调用并配合安全机制。反射是实现框架、工具和可扩展系统的关键技术支撑,但需权衡使用场景。
2025-06-12 10:01:11
514
原创 Java Lambda表达式详解
Lambda表达式是 JDK8引入的匿名函数,用于替代冗余的匿名内部类。它通过(参数) -> {逻辑}的简洁语法实现 行为传递,使代码更紧凑、可读性更强。只有一个抽象方法的接口(可使用注解强制校验)。Lambda本质是这些接口的实例化简写。✅ 推荐场景集合操作(遍历、过滤、映射)函数式接口实现(如线程、事件监听)简单行为参数化需求(如Comparator排序)❌ 慎用场景复杂多步骤业务逻辑(应拆分为独立方法)
2025-06-11 11:03:07
311
原创 乐观锁与悲观锁详解
**摘要:**悲观锁与乐观锁是两种并发控制策略。悲观锁假设高冲突概率,操作前强制加锁(如synchronized、SELECT FOR UPDATE),适用于写密集场景。乐观锁假设低冲突,通过版本号/CAS机制提交时校验(如AtomicInteger、数据库@Version),适合读密集场景。技术实现上,悲观锁需显式加/解锁,乐观锁需处理冲突逻辑。典型应用包括:金融转账(悲观锁保证强一致性)、商品点赞(乐观锁高性能)、库存扣减(混合方案:缓存乐观锁+数据库悲观锁)。选择策略需权衡冲突概率与性能需求。
2025-06-10 13:56:20
235
原创 Java Math类常用方法介绍
本文系统介绍了Java Math类的核心计算方法,包括:1) 基础运算(绝对值、极值、幂运算);2) 5种取整方法的差异,重点指出rint()的四舍五入采用"就近取偶"原则;3) 三角函数与角度弧度转换;4) 指数对数运算;5) 随机数生成的3个应用场景,包括区间整数、布尔值及8位随机字符串的实现技巧。所有方法均配有代码示例,突出关键细节,如rint(4.5)返回4.0的特殊性。
2025-06-06 17:07:41
191
原创 Java设计模式之单例模式详解
单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类仅有一个实例存在,并提供一个全局访问点供外部获取该实例。数学逻辑中的singleton定义为“有且仅有一个元素的集合”,在软件设计中则体现为对唯一实例的严格控制。
2025-06-06 14:48:34
1013
原创 Java Map排序全解析:HashMap、TreeMap与LinkedHashMap的排序
摘要:本文探讨Java三种常用Map(HashMap、TreeMap、LinkedHashMap)的排序特性与实现方式。HashMap可通过转换为TreeMap或使用Stream实现按键/值排序;TreeMap自然支持按键排序,也可自定义比较器;LinkedHashMap默认保留插入顺序,可通过访问顺序实现LRU缓存。文章还提供了高性能排序技巧,包括并行处理、复合排序和自定义对象排序方案,帮助开发者根据业务需求选择最优排序策略。
2025-06-05 16:38:31
305
原创 Spring Boot 整合 Redis 完全指南:从基础操作到实战应用
Spring Boot 与 Redis 的结合为开发者提供了强大的数据缓存和处理能力。五大核心数据类型的适用场景和操作方法 的高级用法分布式锁、发布订阅等高级功能生产环境最佳实践。
2025-05-30 14:25:53
439
原创 Spring Boot 2.x 与 Spring Boot 3.x 的核心区别详解
Spring Boot 3.0对比2.x升级指南 Spring Boot 3.0要求Java 17+,主要升级包括: 技术栈:Spring 6.x、Jakarta EE 9+命名空间(javax→jakarta)、Tomcat 10+/Jetty 11 新特性:原生支持GraalVM镜像(启动速度提升80%)、深度集成JDK 17特性(Record类等) 破坏性变更:Servlet/JPA包路径变更、安全配置重构、部分属性废弃 迁移建议:逐步升级(2.7→3.0→3.2)、全局替换javax为jakarta
2025-05-29 11:16:53
491
原创 RESTful风格请求方式详解与示例
摘要:本文以图书管理系统为例,详细介绍了RESTful API的五种请求方式(GET/POST/PUT/PATCH/DELETE)的具体实现。通过Spring Boot框架展示了每种请求的控制器代码示例,包括URI设计、请求参数处理和响应状态码设置。重点说明了GET查询(全部/单个)、POST新增、PUT全量更新、PATCH局部更新和DELETE删除的典型应用场景及注意事项,并提供了请求示例和响应格式。文章包含完整的环境准备步骤(依赖引入、实体类定义)和业务逻辑实现,可作为RESTful API开发的实践参
2025-05-29 10:41:34
562
原创 MyBatis vs MyBatis-Plus:核心区别与选型指南
框架适用场景不适用场景MyBatis1. 复杂 SQL 优化需求2. 存量项目维护需要快速开发 CRUD 功能的项目1. 新项目快速迭代2. 单表操作占比高需要深度定制 SQL 的复杂系统推荐策略中小型项目:直接使用 MyBatis-Plus,大幅提升开发效率。大型复杂系统:以 MyBatis 为核心,结合 MyBatis-Plus 的通用功能(如分页、代码生成)。混合使用。
2025-05-28 16:08:58
1542
原创 详解 Spring 中的 @Resource 与 @Autowired:区别与应用场景
摘要:本文深入对比了Spring框架中@Resource和@Autowired两个依赖注入注解的核心区别。@Autowired是Spring原生注解,默认按类型匹配,需配合@Qualifier处理多实现类场景;@Resource是Java标准注解,默认按名称匹配并回退到类型匹配。二者在来源、注入逻辑、灵活性等方面存在显著差异:@Autowired支持构造函数注入和可选依赖,而@Resource更适用于名称明确匹配的场景。建议在纯Spring项目中优先使用@Autowired,需要兼容性时选用@Resourc
2025-05-28 14:45:02
891
原创 正则表达式学习
本文简要介绍了正则表达式的基本语法和应用。主要内容包括:1)普通字符和元字符的匹配规则;2)量词控制匹配次数;3)字符集合的用法;4)通过手机号和邮箱示例演示实际应用;5)拆分复杂正则的方法。文中以表格形式清晰展示了各类符号的作用和示例,帮助读者快速掌握正则表达式的核心概念和使用技巧。
2025-05-27 15:57:16
458
原创 Java实现定时任务
本文介绍了Java中四种定时任务实现方式:1)Timer和TimerTask,简单但单线程执行易阻塞;2)ScheduledExecutorService,基于线程池支持多任务并发;3)Spring的@Scheduled注解,配置简便但需Spring框架支持;4)Quartz框架,功能强大适合复杂调度场景但需额外依赖。每种方式各有特点,可根据项目需求选择合适的定时任务方案。
2025-05-27 15:25:03
253
原创 Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
第一段报错信息看不出什么,但是由第二个报错信息可以看出,这个问题是因为Gradle版本和Java版本不一致导致的。我现在本地用的JAVA环境变量是Java21版本,项目加载的Gradle版本是7.4,Java21对于Gradle7.4来说太高了,所以我们需要下调Java的版本。然后点击ok应用Java版本。此报错出现在android加载新项目的时候,没有加载成功。Android Studio报错信息如下,提示了两个报错信息。可以看到,我这里用的java版本的确是Java21,我们将其改为Java17。
2025-05-06 10:42:05
482
原创 若依框架(6)快速修改若依框架的包名等
若依框架原本都是以ruoyi-xxx 等命名的,但是在我们自己编写项目时,有需要去修改这些命名,但是由于框架内部存在大量命名,手动命名就非常的繁琐,因此我们在这介绍一个工具去帮助我们快速的修改命名若依原本的目录结构和命名如下。
2025-03-12 20:29:06
1081
原创 若依框架(5)定时任务
若依为定时任务功能提供方便友好的web界面,实现动态管理定时任务。我们平常写定时任务,都是通过硬编码的形式去编写定时任务的。如下面代码每间隔5s执行一次打印@component")System.out.println("定时任务开始执行: " + new Date());通过硬编码的形式写的定时任务虽然没有问题,但是会有不好维护的情况,每一次需求变更,都需要找到代码位置去进行修改。这时我们就可以通过ruoyi的功能去实现动态定时任务。
2025-03-11 21:42:05
814
原创 若依框架(4)若依权限控制--框架控制
若依系统内置了强大的权限控制系统,这个权限控制系统,主要是为了,让不同角色的用户,对各个模块有不同的访问权限例如图书管理系统中,普通管理员能够访问,“图书管理”页面,而超级管理员才能够访问”用户管理“页面。
2025-03-11 21:27:17
796
原创 Redis设置密码(单次设置和永久设置)
即可完成单词设置redis密码,这种方式设置的密码,在你关闭redis-server后就会消失,下次再使用需要重新设置。去掉requirepass前面的#,然后将后面的foobared改成自己想改成的密码,然后保存退出即可完成永久修改。先运行redis-server.exe 再运行 redis-cli.exe,先后顺序不能乱!在redis-cli.exe的窗口里面执行,这里的123456是任意你想设置的密码。找到redis解压文件中的redis.windows.conf,双击用编辑器打开。
2025-02-07 21:25:50
560
原创 Could not move temporary workspace xxx to immutable location xxx
该报错是在build apk是产生的,Gradle尝试将临时工作空间移动到一个不可变的位置(即缓存位置),但失败了。这种情况可能由多种原因引起,包括文件权限问题、磁盘空间不足、缓存损坏等。 在磁盘空间足够的情况下,那就是android studio无权限去修改C盘 用户路径下的文件,这时候需要我们手动清理清理和重建项目:•在Android Studio中,选择Build -> Clean Project来清理项目。•然后选择Build -> Rebuild Project来重建项目。清除Gradl
2024-12-05 14:46:16
2008
原创 error: remote unpack failed: error Missing tree
对于该报错,官方的解释为可能为仓库损坏或网络问题等原因,但在我们实际开发过程中,绝大多数情况是因为,如前面所说,远程仓库有其他人提交的修改,如果不嫌撤回本地commit的话,我们是无法pull代码的。将本地修改代码先提交到暂存区,防止拉代码时,远程仓库代码和本地修改代码冲突。所以在pull之前,我们需先试用如下代码,撤回本地的上一次commit。撤回提交后,即可重新拉取远程仓库代码,命令如下。解决完可能出现的冲突后,即可重新走提交代码步骤。在拉取完代码后,可重新将本地修改代码重新取出。
2024-07-31 16:33:02
2839
原创 Could not install Gradle distribution from ‘https://services.gradle.org/distributions/gradle-8.7-bin
通过报错信息给出的下载链接 https://services.gradle.org/distributions/gradle-8.7-bin.zip,点击后即可进入下载,不过我测试后发现我需要科学上网才能下载。阿里云镜像 Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/腾讯云镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/此路径为阿里镜像源,国内可以快速下载。
2024-07-07 13:29:57
17222
12
原创 Hibernate下HQL与SQL查询
缺点:如果实体存在多个关联对象,转换构建BO的时候,如果用到关联对象的属性,而关联对象的ID又不一样,那么会对每个关联对象去执行一下Proxy对象的取值,产生一个SQL执行,更悲剧的是,对象自身执行了一个批量的查询,然后又会循环去根据ID再查询一下自身,最最不建议的方式。,相应的需要有几个参数赋值。但是通过SQL的查询,如果想得到BO的返回值,需要对执行的结果addScalar,转换为对应的字段,如果类型不匹配,还需要在addScalar时,指定对应的字段类型。
2024-03-15 20:51:06
1248
原创 如何使用Java来发送qq邮箱邮件
通过上述代码,只能发送一个简单的字符,但是qq邮箱也是支持html解析的,我们可以在其中设置html代码,让我们的邮件“精致”一点,只需要更改emails.setMsg()中的参数即可。(如果大家项目没有引入Redis,也可以用session代替,因为我这里是一整个业务流程,后续还需要对比验证码,所以需要用到换成,大家测试的话也可以去掉)点击开启后会跳转到另一个页面,同样找到“POP3/IMAP/SMTP/Exchange/CardDAV 服务”,然后点击生成授权码。进入设置页面后,再点击账号。
2024-03-15 10:03:24
2419
原创 Windows系统下的Minio的安装和运行
最后还需要创建一个buckets,用于存储文件,进行下述图片操作,然后直接输入bucket名即可。注:以上上传代码参考ruoyi,如有文件缺少情况,可以自行前往若依官网查看。通过上述图片步骤,即可下载 minio.exe 和 mc.exe两个文件。(2)将minio.exe 和 mc.exe文件移入 bin 目录当中。(1)在任意位置创建以下三个文件夹,例如我在E:\Minio下创建的。(3)直接在存放minio.exe文件的目录下启动cmd窗口’进行下载(这里给的网址是Minio中文官网)
2024-03-13 14:08:49
1803
原创 ‘Basic‘ attribute type should not be ‘Persistence Entity‘
解决实体类中编写另一个实体类报错
2024-03-10 13:28:29
899
原创 Could not initialize class com.baomidou.mybatisplus.core.toolkit.support.SerializedLambdaMeta
该问题是由mybatis-plus版本问题导致的,我报错时所用的mybatis-plus版本为3.4.3,将版本省级到3.5.1后问题解决,即修改maven过gradle的依赖版本即可。在调用mybatis-plus自带的list方法时出现报错,报错代码如下。可以看到是一段很正常的查询语句。但是却报了如标题所示的错误。修改后重新调用接口后问题解决。
2023-08-17 09:55:06
3028
1
原创 java、mysql多表查询 JOIN ON 语句
本文章案例是基于,SpringBoot + MyBatisPlus开发的项目我这里给出两个案例:(1)一个字段关联(2)多个字段关联### 二、一个字段关联现有一个Post类,数据库对应为tb_post,其中有一个user_id字段,对应sys_user表中的user_id字段,现需要将user_id对应的user_name查询出来和其他字段一起返回给前端。1、新建DTO类我们根据POST类,创建一个PostDTO类,PostDTO类中,复制Post的所有代码,只新增一行private
2023-07-31 17:19:06
735
原创 若依框架(3)最新前后端分离3.8.6版本集成mybatis-plus
若依的前后端分离版是采用的springboot + mybatis 进行开发的,有的同学习惯使用mybatis-plus了,就想将mubatis更换为mybatis-plus。那么我们话不多说,直接开始。
2023-07-31 10:20:11
2351
9
原创 VSCode超强代码补全插件——GPT Runner的安装与使用
GPT Runner是一个功能很强大的插件,其实际应用远不止我上面介绍的这些,我上面的介绍知识基于最简单的应用让大家快速上手这个插件。插件还可以将正在编辑的文件中的选中代码作为token去询问GPT,GPT也会根据你的问题对代码进行补全或者修改等操作。同时该插件也支持模型的配置,更多操作大家可以共同前往探索呀。
2023-07-25 10:04:36
9675
5
原创 Required URI template variable ‘productId‘ for method parameter type Integer is not present
Required URI template variable 'productId' for method parameter type Integer is not present
2023-07-10 14:02:16
1012
原创 若依框架(2)使用若依框架进行二次开发
细心的同学应该发现我这里并没有复制Controller文件,因为Controller文件并不在这个模块里面,而是在ruoyi-admin模块里面,重复刚才的动作,将Controller文件复制到ruoyi-admin的web/system下。因为就想我们普通的vue项目,你没有在路由里面设置对应的路径,你也访问不了那个组件。我这里还真报错了,后端改了各个报错的地方完成启动,但是前端我忘了又有需要改import路径的地方,在我们复制进views文件夹里面两个文件夹的index.view里面,我们找到其。
2023-06-13 13:45:39
48976
2
原创 nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhost:6379
上面截取的是idea控制台启动报错的信息,我截取了部分片段,即每段报错信息的开头,通过报错信息,我们能很直观的看到是因为无法连接Redis而抛出的异常。在项目启动时,我们需要Redis的配置和配置文件里面的配置保持一直。或者在Redis中设置与后端配置文件相同的密码。但是我的Redis是用的本地的Redis,而且我的Redis已经开启,那为什么会报错呢。但是我的Redis服务端并没有设置密码。通过以下命令查看Redis的密码。我去看了一下配置文件,我的配置文件里面是给Redis设置了密码的。
2023-06-13 10:19:13
3061
2
原创 Linux日期和时区
按照2022-01-01 10:00:00的格式显示日期[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传。使用date命令本体,武宣县,直接查看时间[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传。安装2022-01-01的格式显示日期[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传。通过date查看的日期时间是不准确的,这是因为:系统默认时区非中国的东八区。格式化字符串:通过特定的字符串标记,来控制显示的日期格式。
2023-06-08 13:14:32
552
原创 Linux用户和权限--su、sudo、chmod、chown
无论是Windows、MacOs、Linux均采用多用户的管理模式进行权限管理。在Linux系统中,拥有最大权限的账户名为: root(超级管理员)而在前期,我们一直使用的账户是普通的用户: igxiaroot用户拥有最大的系统操作权限,二普通用户在许多地方的权限是受限的普通用户无法在根目录下创建文件夹通过su - root 切换到root用户后,可以创建普通用户的权限,一般在其HOME目录内是不受限的一旦出了HOME目录,大多数地方,普通用户只有只读和执行权限,无修改权限。
2023-06-08 13:13:41
3106
原创 Linux常用基础命令--ls、cd、pwd、mkdir、touch、cat、more、cp、mv、which、find、grep、wc、echo、tail、vi、vim
vim是vi的加强版本,兼容vi的所有指令,不仅能编辑文本,而且还具有shell程序编辑的功能,可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。命令模式(Command mode):命令模式下,所敲击的案件编辑器都理解为命令,以命令驱动执行不同的功能。-h:表示以易于阅读的形式,列出文件大小,例如K,M,G(-h必须搭配-l使用)-a:展示所有文件,包括隐藏文件和文件夹等,以 . 开头的文件为隐藏文件。管道符的含义是:将管道符左边命令的结果,作为右边命令的输入。
2023-06-08 13:11:48
1701
原创 若依-分页查询失效
list是进行了分页操作的,如果我本函数的返回值就是getDataTable(list),那么我的分页查询出错不了一点。在使用若依框架开发管理后台的时候,由于业务逻辑的需要,自己定义了一个DTO类,将与数据库对应的entity类进行封装。在进行二次封装之后发现返回的数据没有进行分页,并且总数也只为10(数据库总共90多条数据,每页数据数量为10),也就是只有一页的数据。我的代码是带有startPage的,也就是startPage开启了我下面这行代码的分页。自己重新封装之后调用,前端可以正常分页。
2023-06-08 13:05:30
3417
原创 SpringBoot项目启动banner修改--佛祖保佑banner
在我们运行SpringBoot项目是,会出现一个Spring的标志,该标志即为本项目的默认Banner。这里我们准备的Banner.txt文件里面,就是我们展示的banner,是一种文字绘图方式形成的图片。现在我看这个Spring很不爽,看多了不想看它怎么办,能不能把它换掉,答案是可以的。2、将Banner.txt文件放入项目的resource包里面。我们将banner.txt文件复制到resource包里面。然后启动项目,就会发现我们的启动图标已经改变了。1、准备一个Banner.txt文件。
2023-06-02 17:10:36
1036
原创 若依框架(一)使用若依框架从0到1快速搭建springboot + vue 项目
在项目启动之前,我们现需要对配置文件进行修改,并打开特定应用,这里我们先打开ruoyi-admin模块下的application-druid.yml,将数据库链接地址和用户名密码更改为我们自己的。(我这里是已经进行二次开发的页面),未进行二次开发的登录账号和密码应该是admin和admin123,并且表单最上面展示的是若依管理系统。点击之后进入到gitee,点击 “克隆/下载”,选择下载方式,可以实用git命令进行git克隆,也可以直接选择下载zip,这里推荐新手就下载zip就可以了。
2023-06-02 16:52:15
11640
7
类似官网展示的单页html
2022-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人