- 博客(37)
- 收藏
- 关注
原创 一文让你搞懂:为什么重写equals方法的时候要同时重写hashCode方法
在Java中,重写equals方法时通常需要同时重写hashCode方法,以确保对象在基于哈希表的集合(如HashMap、HashSet)中能够正确工作。hashCode方法用于生成对象的哈希码,而equals方法用于判断两个对象是否相等。根据规则,如果两个对象通过equals方法判断为相等,它们的hashCode值也必须相等。如果只重写equals方法而不重写hashCode方法,可能会导致哈希集合无法正确去重,因为集合在判断对象是否相等时,首先比较的是哈希码,只有在哈希码相等时才会调用equals方法。
2025-05-14 10:40:34
931
原创 微服务系统监控 Spring Boot Admin 的介绍与详细使用
Spring Boot Admin(SBA)是一个用于管理和监控Spring Boot应用程序的开源工具,提供了用户友好的Web界面,支持应用程序监控、集中式配置管理、日志管理、通知告警以及安全性控制等功能。本文详细介绍了如何在Spring Boot项目中集成SBA,包括服务端和客户端的配置步骤。服务端通过添加依赖、编写启动类和配置文件来启动监控服务,客户端则通过添加依赖和配置管理端点来暴露监控信息。此外,文章还扩展了日志管理和邮箱告警功能的配置方法,帮助开发者更好地监控和管理微服务系统。
2025-05-14 09:26:42
1013
原创 SpringCloud服务拆分:Nacos服务注册中心 + LoadBalancer服务负载均衡使用
本篇文章主要是使用Nacos来注册服务实例,使用Nacos来管理这些服务实例,然后使用LoadBalancer让服务消费方负载均衡调用服务提供方。这里有一些代码准备,Contorller的代码我就不贴了,贴一个order服务远程调用user服务,获取订单对应的用户信息。这里使用的是RestTemplate来进行调用远程服务,后续会用OpenFeign来进行替换优化。
2025-05-08 19:07:03
1475
原创 创建线程的几种方式
优点:编码简单缺点:线程类已经继承了 Thread 类无法继承其他类了,功能不能通过继承拓展(单继承的局限性)t.start();i < 100;i++ ){System.out.println("main线程" + i);// main线程输出放在上面 就变成有先后顺序了,因为是 main 线程驱动的子线程运行@Overridei < 100;i++ ) {System.out.println("子线程输出:"+i);t1.start();
2025-05-05 11:10:16
1141
原创 一文让你清楚ArrayList和LinkedList有什么区别 以及 他们的底层原理、源码解析
在Java开发中,ArrayList和LinkedList是最比较的两种集合类型。它们虽然都实现了List接口,但底层实现和性能特点却大相径庭。了解它们的底层原理和适用场景,能够帮助我们在实际开发中做出更优的选择。本文将通过源码解析和性能对比,带你彻底理解二者的核心差异。ArrayList和LinkedList各有优劣,没有绝对的“更好”,只有“更适合”。理解它们的底层原理和性能特点,能够帮助我们在实际开发中根据具体需求做出合理选择。例如,实现一个需要快速随机访问的只读列表时,ArrayList是更优解。
2025-04-29 16:07:46
913
原创 一文教你如何使用AOP实现异步记录操作日志
Q:为什么需要操作日志?A:在业务系统开发中,操作日志记录是审计追踪和故障排查的重要依据。Q:为什么要使用AOP进行切面操作开发?A:没有任何代码侵入,只需一个注解即可搞定;维护成本低,与业务逻辑相隔。有关AOP和自定义注解的内容可以详细看这篇文章:如何使用AOP实现鉴权?我们这里自定义一个Log注解,要求用在方法上面,当然你也可以指定用在类上面(在Target中添加),但是我们为了区分粒度更小一些,我们最好用在方法上。
2025-04-16 19:12:41
816
2
原创 一文教你实现vue-router动态路由菜单
在后台管理系统或复杂前端应用中,动态路由菜单是不可缺少的。它需要根据用户权限、业务场景动态展示不同的导航结构。本文将手把手教你如何利用Vue Router的meta字段和Ant Design Vue的菜单组件,实现灵活的动态路由菜单。在没有实现动态路由的时候,你只能重新在头部菜单栏一个一个再添加上你需要展示的菜单项,但使用动态路由后,你不再需要在routes.ts中写一遍,再到头部菜单栏写一遍。本篇文章代码是使用ant-design-vue组件和vue-router完成的。
2025-04-16 09:36:39
1207
1
原创 SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题
我们上一节当中,我们把token保存到了local storage当中,每次发起请求的时候,请求头会携带上这个token去请求后端,来校验我们的用户身份,但是当我们服务器端重启时,我们的token就丢失掉了,我们就无法识别到这个token。sa-token存储token的原理是,如果你没有配置redis,那么就会存到本地的JVM当中。Sa-Token + Redis组合拳 通过将会话数据到这里我们就成功集成了redis,让redis保持我们用户的登录态,我们项目在每次重启时,前端的就不用每次去重新登录。
2025-04-07 11:47:22
1163
3
原创 RGB十六进制颜色码缺失问题解析、原理、场景与修复方案(腾讯云数据万象获取主色素缺失解决方案)
在日常开发中,你是否遇到过这样的场景?调用云服务API获取图片主色调时,返回的十六进制颜色码时而5位、时而4位,甚至出现诡异的3位简写形态。这种"薛定谔的颜色代码"让前端显示频频出错,我们该如何破局?本文将带你深入剖析问题根源,并手把手实现一套全场景自适应补全算法。通过本文的探索,我们不仅解决了API返回颜色码的解析难题,更深入理解了数字色彩的本质。在编程世界中,每一个看似简单的十六进制代码,都承载着计算机科学的精妙结合。
2025-04-07 10:11:23
549
3
原创 SpringBoot项目Sa-token框架整合JWT
SpringBoot整合sa-token在上一个篇章当中,我们在SpringBoot项目中整合了sa-token框架,并且实现了无cookie登录态(博客链接:SpringBoot整合sa-token),这一小节我们来整合我们来整合jwt,让我们的token更加安全。
2025-04-03 18:31:44
1198
2
原创 SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程)
SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程),后端我们要在登录的接口中要返回StpUtil.login方法给出的token值,我们要在返回的UserVO对象中添加SaTokenInfo对象,前端我们要在点击登录按钮的时候,调用后端书写的接口,我们要保存返回的token值到本地,我们每次调用请求的时候都在请求头上携带上这个token值,这样后端就能认出我们是谁了。
2025-04-03 17:59:53
1704
1
原创 执行mvn help:system一直超时build失败问题【已解决】
结果环境变量、本地仓库、setting配置都配好后,用管理员身份在终端执行mvn help:system后却显示一直failed失败,原因找不到仓库资源,超时了。由于Maven是好久以前安装的,版本有点低,所以今天我重新安装了一下,安装的是3.8.8版本的。造成这样情况的原因是setting里面的镜像mirror仓库太杂了,建议把其他的全部清空,下面是我的setting.xml配置文件。再次执行就成功了。
2025-03-22 14:17:37
350
原创 SpringBoot3.x解决Bean不存在问题
出现了A component required a bean of type ‘XXService‘ that could not found、Unsatisfied dependency expressed through 这样的报错,系统化检查清单确认类是否在组件扫描路径内检查是否缺少@Service/@Component等注解验证依赖注入方式是否正确SpringBoot 3.x用户需检查自动配置机制多模块项目确保子模块正确配置通过系统性地排查这些关键点,90%以上的Bean未找到问题都能得到有效解决。
2025-03-22 13:41:32
952
原创 一个前端可以一键生成后端所有请求的方法(不用手搓版)
我们大家一般自己开发一个平台,前端后端都要我们自己干,后端写了一遍的接口,前端又要去写一遍,那些方法名、请求参数、返回值、参数类型、返回值类型,我们又要去想该起写什么名字好呢😥…这无疑又是一个巨大的工程,今天我给大家带来一款新的方法,让我们可以在前端一键生成后端的接口,所需要的全部参数类型,我们从此解放双手,解放大脑,干更多有意义的事情😎。🔥 划重点:本文手把手教你实现前端零代码对接接口,解放双手拒绝CV!基于OpenAPI规范的自动化解决方案,3分钟完成前后端接口联调!优势对比:✅ 自动处理路径参数
2025-03-14 11:15:00
984
原创 如何给SpringBoot项目配置全局异常处理器?
我们进行自定义异常类来区分各种异常,比如业务异常、系统异常等等。自定义异常类一般继承,然后去扩展一些特定的属性和方法,用来提供详细的错误信息,方便程序员进行调试。更优雅的报错信息:自定义异常类可以自定义的错误信息,方便我们进行调试代码。可以区分不同类型的异常:通过自定义异常类,我们可以将不同类型的异常归类,并根据需要采取不同的处理方式。提供更灵活的异常处理:自定义异常类可以定义自己的处理逻辑,使得异常处理更加灵活和方便。/*** 自定义异常类*//*** 错误码*/
2025-03-14 11:00:00
1567
2
原创 如何开发一个简易的SDK?
首先我们先来说一说什么是SDK?SDK是指软件开发工具包,也称为开发包或者开发工具包。SDK通常是由一个或多个软件开发工具组成的集合,用于帮助开发者创建、测试和部署软件应用程序。通俗来说,SDK就是一个jar包,里面包含各种函数,方法,可以直接引入到maven仓库中使用。至此,大功告成😎!!!我们可以按照该流程,创建属于自己的一套常用的工具类,或者是一些其他的方法,我们可以在项目中引入这些SDK,让自己的项目看起来更加高端大气上档次。——👦[作者]:向阳256。
2024-12-16 13:51:40
2278
原创 如何使用AOP实现鉴权?
AOP(Aspect Oriented Programming),是OOP的延续,也是Spring框架中的一个重要内容,简单的说他就是把我们程序重复的代码抽取出来,在需要执行的时候使用动态代理技术在不修改源码的基础上,对我们的已有方法进行增强。
2024-12-16 13:49:33
930
原创 如何生成模拟数据?选择最合适的生成模拟数据方法!
假如我们在开发一个用户管理平台,在我们开发完其中的用户相关接口后,我们需要插入一些用户假数据对接口进行测试,我们要面临下面三个问题。我们该如何生成这些假数据呢?我们生成这些假数据的效率如何呢吗,我们该如何选择这些方法?我们如何提高生成、插入这些假数据的速率呢?下面我们来以此解决这些问题。
2024-11-11 09:42:41
1449
原创 Redis安装与使用 + Springboot整合Redis
Redis(Remote Dictionary Server)是一个开源的内存数据库,遵守 BSD 协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。对于Redis的安装和使用,以及如何在 Springboot 中整合和使用Redis就介绍到这里啦,下一次我会为大家介绍一款操作 Redis 的可视化工具,让使用 Redis 更加方便。——👦[作者]:向阳256——⏳[更新]:2024.11.3。
2024-11-03 10:15:00
1123
原创 VSCode—配置自定义代码片段
在使用VSCode的时候,我们总是书写很多重复的代码片段,例如创建一个vue3初始模板文件的时候,需要从头开始书写template、script、style这些固定重复的代码😢,这个时候我们只需要配置一个自定义代码片段即可解决问题!废话不多说,我们直接开始😎!
2024-10-20 11:00:00
967
3
原创 SpringBoot项目整合Knife4J
首先我们要明白我们为什么要去使用API文档,在前后端脱离开发的情况下,前端程序员无法实时的知道后端接口开发的进度,后端程序员总不能每开发完一个接口或者更新一次接口就去wx上去跟前端程序员说,嘿!哥们哥们,我新增了一个接口,这个接口是这样这样子…这样沟通的成本也太高了,而且有时候还说不明白,搞得双方都很难受😢,在这样的情况下,API文档应运而生。API 文档是开发者了解 API 功能和如何正确使用的主要来源。它提供了详细的指导,包括请求格式、参数说明、响应结构。
2024-10-20 10:30:00
2037
原创 一键生成PPT的AI工具-Kimi!
啊!是PPT,我们都要完蛋了。大家上大学像是进入了一个巨大的PPT,上课看PPT,下课做PPT。每天都在跟PPT作斗争,PPT对于博主我而言简直就是不可预知的“自然灾害”,有时候突然被要求做一个PPT, 但是没有艺术细胞的我,简直就是赶鸭子上架,要逼死人了😢!虽然各位对PPT的怨念很深,但是我们还是要意识到PPT的重要性,让我来介绍一下今天的主角Kimi。
2024-09-27 11:20:22
8711
3
原创 一款非常好用的工具库:Hutool
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
2024-09-25 11:27:48
1315
原创 什么是圈复杂度?如何降低圈复杂度?
首先我们先了解一下什么是圈复杂度。圈复杂度(Cyclomatic Complexity, CC)是一种用于评估代码复杂性的软件度量方法,圈复杂度也称为条件复杂度。一般情况下,代码的分支 / 判断越多,圈复杂度越高。一般情况下,代码圈复杂度建议
2024-09-16 17:48:09
3516
1
原创 前后端分离开发的跨域问题
CORS,全称为“跨域资源共享”(Cross-Origin Resource Sharing),是一种机制,它使用额外的 HTTP 头来告诉浏览器允许一个网页从另一个域(不同于该网页所在的域)请求资源。这样可以在服务器和客户端之间进行安全的跨域通信。
2024-09-10 23:04:52
1328
原创 利用反射判断一个实体类中的部分属性是否为空
😀大家好!我是向阳🌞,一个想成为优秀全栈开发工程师的有志青年!📔今天给大家介绍的是如何利用反射来判断一个实体类中的部分属性是否为空(或者不为空)
2024-08-23 16:36:28
571
原创 力扣第18题:四数之和
力扣第18题:四数之和。接下来我们开始循环,我们做三数之和时候采用一个循环,两个指针就可以求得解,但是我们求四数之和时,一个循环是显然不够用的,我们需要采取双循环来遍历前面两个数,再使用双指针来决定后面两个数。当然我们还可以进一步缩减循环次数,我们可以在每一重循环中判断当前循环的所对应的最大值和最小值。双指针那块的流程在前面三数之和中已经叙述过,这里就不再赘述,可以在博主的主页中进行查看。输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]首先,我们对数组进行排序,避免去重操作消耗大
2024-07-10 14:54:42
762
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人