自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法:ACM模式输入、输出

1)当左右节点中存在最后一个节点结束【对于当前节点的右边叶子节点在上一层已经构建好了】2)避免左节点为最后一个节点 不能使用2*i+2判断 使用2*i+1 然后判断右节点。

2025-04-06 16:32:23 141

原创 Aop实现简单基于日志记录

【代码】Aop实现简单基于日志记录。

2025-03-14 20:20:15 293

原创 深拷贝和浅拷贝

浅拷贝就只是拷贝了外部的对象 对于对象内部的引用对象还是用的原来的 这样就导致了修改拷贝对象的内部引用对象 导致原来对象的内部对象也改变。创建一个新对象,但不复制对象内部的引用指向的对象。复制的是对原始对象内存地址的引用。改变新对象内部的引用所指向的对象会影响原始对象。创建一个新对象,并递归地复制原始对象及其引用的所有对象。新对象和原始对象完全独立,修改一个不会影响另一个。简单讲:深拷贝相当于递归拷贝 对于其中的对象类型也进行拷贝新的 不用旧的。

2025-02-28 12:08:27 493

原创 Java 重写接口并注入重写父类(oauth2的登录流程)

3、因为在类DaoAuthenticationProvider中UserDetailsService是通过setter赋值的 而不是注入的方式 因此如果不该写setter 将新的实现类注入 就默认用旧版的 这样之前的逻辑就都失效了。一、重写了UserDetailService的loadUserByUserName 实现了密码校验以及用户信息扩展。三、将改写的接口实现注入到继承类中(否则 UserDeatil的实现类并不会生效)1:会从加载ioc中加载接口以及相关的实现类(已经注入了在第一步)

2025-02-27 18:40:06 182

原创 线程同步辅助类的使用

1、必须使用semaphore.acquire();否则线程数量不会被限制 和普通线程一样。2、如果不执行semaphore.release();线程永远占用一个数量。1、可以理解成countDown()一次就减一 直到0结束。1、调用一次await() 就加1 到达指定数量结束。3、最多指定数量的线程 执行完释放后 进入新的线程。线程池是线程不变 这里是位置不变 线程改变。

2025-02-26 22:57:01 230

原创 工具类:序列化反序列化

【代码】工具类:序列化反序列化。

2025-02-26 17:51:03 80

原创 Java语法:重写第三方类的方法和第三方接口实现类的不同

这里以oauth2协议+springSecurity框架的账户密码和微信扫码登陆为例。一方面是密码登录改写UserDeatilService的实现方法loadUserByUsername();另一方面是改写类DaoAuthenticationProvider的方法additionalAuthenticationChecks()。

2025-02-26 12:52:17 234

原创 分布式锁基于数据库实现

实现分布式锁的方案有很多,常用的如下:1、基于数据库实现分布锁利用数据库主键唯一性的特点,或利用数据库唯一索引、行级锁的特点,多个线程同时去更新相同的记录,谁更新成功谁就抢到锁。2、基于redis实现锁redis提供了分布式锁的实现方案,比如:SETNX、set nx、redisson等。拿SETNX举例说明,SETNX命令的工作过程是去set一个不存在的key,多个线程去设置同一个key只会有一个线程设置成功,设置成功的的线程拿到锁。3、使用zookeeper实现。

2025-02-25 22:52:26 332

原创 Leecode刷题:LCR 076. 数组中的第 K 个最大元素

ps:对于所有数都相同会出现死循环。

2025-02-23 22:32:21 217

原创 Leecode刷题:209. 长度最小的子数组(ACM)

1)当水果有k+1种 不满足 =>缩=>当只有两种水果了=>扩 =>发现没有找到临界点满足【两种水果最大】2)由于求最大 因此可以记录所有满足条件的窗口求最大值 而求值最小 需要找刚好不满足的情况下的窗口+1。1) 滑动窗口 left=0 right=0 开始 left表示左端 right表示右端。1)首先一定要大于=>大于不一定是最小=>缩到刚好不满足=>当前窗口+1。2)while循环固定判断右端是否超出,未超出则加入窗口 (最后++)对比水果成篮 找最大的窗口。

2025-02-23 20:18:59 184

原创 Leecode刷题:443. 压缩字符串(ACM)

特殊的count>1 先记录count 然后重置count=1。所有新节点遇到就记录 然后更新count。1、双指针【记录不同节点】类似。2、记录次数[count记录]3、最后一个节点一定记录。

2025-02-23 19:28:11 152

原创 八股文实战之JUC:ArrayList不安全性

CopyOnWriteArrayList原理: 写入的时候(可能存在覆盖操作) =====>读写分离的思想(写入时复制一份给调用者 调用者写完 直接插入即可【防止写入时覆盖,造成数据问题】)lock锁。多个线程调用的时候(比如list),在读取的时候是固定的,但在写入的时候(可能存在覆盖操作)verctor原理:使用synchronized(效率低,因为只能允许一个线程操作)学习方案记录:1、先回用 2、货比三家、找不同解决方案 3、分析源码。源码:将整个列表复制一份然后插入数据 然后更新。

2025-02-22 22:16:18 292

原创 八股文实战之JUC:静态方法的锁和普通方法的锁

1、对于staic同步方法锁住的是class类模板(Class对象) 对象是线程(调用者) 调用者只有获取资源的锁才能调用。2、普通同步方法 锁住的资源是class对象 对象是线程(调用者)2、进程只有获取锁 才能访问锁对应的方法等资源。1、锁住的东西不同可以视作不同的锁。3、如果锁不同 就不存在锁竞争。

2025-02-22 21:25:19 182

原创 八股文实战之JUC:生产者消费者问题(虚假唤醒)

3)相应的wait和notify都需要修改成对应的对象,因为wait的目标是获取获取锁住对象的线程,即synchronized的对象的线程。1、对于wait需要使用while,防止虚假唤醒。1)常见的对于方法默认是实例对象this。2)如果不是this需要自己指定对象。

2025-02-22 19:55:27 207

原创 mydb:TM实现

TM就是事务管理:实现对于事务的新增(active)、事务的状态修改(commit、abort)、事务的状态判断。

2025-02-12 22:30:40 175

原创 java语法:Mysql使用

而普通查询是获取表1的所有行去和整个表2的所有行比较where条件 因此更加复杂。普通连接查询(join)=内连接查询(inner join)left join 和 left outer join等价。返回所有数据 如何(左或右)不存在 则返回null。外连接(全连接) 返回所有 不存在返回null。左边数据一定返回 还会返回右边匹配的数据。内连接 没有左右内连接 内连接等同连接。左连接 等价 左外连接 (右同理)ps:左内连接/右内连接 不存在。区别是 内连接是先连接然后去查询。

2024-08-02 11:42:22 260

原创 java语法:雪花算法生成随机id

生成的字符串形式的 ID 更类似于 UUID(Universally Unique Identifier)的格式。ID 由时间戳、数据中心 ID、机器 ID 和序列号四部分组成,确保 ID 的唯一性。这是核心方法,用于生成全局唯一的 64 位长整型 ID。通常用于生成一些特定格式的编号,如订单号、商品编号等。方法生成 ID,并将其转换为字符串形式返回。方法生成 ID,并将其转换为字符串形式返回。返回值为 UUID 风格的字符串 ID。返回值为 ID 的字符串表示。返回值为长整型 ID。

2024-06-28 22:28:58 693 1

原创 java技术:knife4j实现后端swagger文档

lombok依赖。

2024-06-28 22:20:44 390

原创 js:flex弹性布局

第二轴是否拉伸以及如何排列 默认是拉伸 /* align-items: stretch;/* 区别两边间隔占0.5 中间间隔占1 */flex-direction: row-reverse;ps:相当于justify-content中间隔方式。ps:相当于justify-content中对齐方式。/* 所有间隔相等 *//* 起点对其 *//* 终点对齐*/第一轴如何排列(假设:设置的轴称为第一轴)设置轴线:横轴 不轴内逆转。换行/列 是否轴外逆转。

2024-05-31 14:50:36 1141

原创 java技术:mq消息队列

可以理解成接收器仍然是接收队列 只是将队列和相应的交换机绑定起来,同时给交换机设置属性。接收消息: 给交换机设置不同的属性blue,yellow。发送消息时也设置属性key。接收消息: 给交换机设置不同的属性通配符。发送消息时也设置属性key。(后面两种一样,设置相应交换机即可)只是key不同 这个为" "发送方将消息发送至交换机(其他三种都是如此发送)接收方只需要接收相应的队列(区别于其他两种)ps:上述的发送接收前提是创建好了队列。ps:创建交换机同时绑定队列。

2024-05-30 13:24:45 513

原创 python:pycharm虚拟解释器报错环境位置目录为空

如果选不了 查看项目路径是否带中文,如果没中文也不行,最好不要放桌面,放不带中文的一个盘下。虚拟解释器要选到虚拟解释器目录下python.exe。

2024-05-24 21:23:49 2316

原创 java技术:oauth2协议

fuction:管理访问控制及哪些请求需要认证,以及需要哪些权限。

2024-05-23 17:16:42 1562

原创 java网络:过滤器修改请求头

如oauth2的过滤器即使order值比较大 仍会先执行。基于HttpServletRequest。有时候存在使用@Order(1) 不生效。

2024-05-23 16:26:49 603

原创 java报错:Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.cloud.gate

而gateway是包含spring-boot-starter-webflux这个包的 如果使用第一种 需要排除pring-boot-starter-webflux。1、上面的代码:基于spring-boot-starter-web。2、基于spring-boot-starter-webflux。上面是security的访问配置。

2024-05-22 21:26:17 1043

原创 java技术:全局异常处理器、常用枚举、以及字段赋值

ps:对于异常处理一般是throw new Exception(e),可以静态化输出。全局异常处理类处理不同的异常都返回异常类型RestErrorResponse。RestErrorResponse定义:(前端沟通定义)

2024-05-18 13:42:08 271 1

原创 java技术:spring-secrity实现认证、授权

加载security前会加载的过滤器 可设置校验的接口匹配 这里的.antMatchers("/**").anonymous()时放行所有 既所有接口都会进入auth校验。.antMatchers("/r/**").authenticated()//访问/r开始的请求需要认证通过。.antMatchers("/**").anonymous()//放行接口。

2024-05-18 10:53:09 1014 1

原创 java技术:nacos

二、nacos加载顺序(优先级相反)5、重新创建一个(挂载配置)

2024-05-15 19:10:34 413

原创 java技术:aop切面

aop类型:@Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行@Before:前置通知,此注解标注的通知方法在目标方法前被执行@After :后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行@AfterReturning : 返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行@AfterThrowing : 异常后通知,此注解标注的通知方法发生异常后执行区别:Around()环绕通知 传参使用ProceedingJ

2024-05-06 09:56:07 400

原创 java报错:java.lang.IllegalStateException: Method has too many Body parameters

feign调用将参数指定。

2024-04-15 12:11:06 176

原创 gitignore:常用说明

/src则只会忽略同级目录下src文件夹及其内容 不包括子文件夹。文件中添加忽略该文件的规则,以防止将其重新添加到版本控制中。文件夹,但不包括子文件夹中的内容。都会被匹配,同时它们的子文件夹中的内容也会被忽略。文件夹及其子文件夹中的内容。不会被匹配,它的子文件夹中的内容不会被忽略。的文件夹,无论其所在的层级如何。的文件夹以及其子文件夹中的内容。3、提交并推送gitignore文件。:这个模式匹配任意层级的目录下的。:这个模式匹配任意层级的目录下的。或者直接在仓库删除(推荐),以忽略指定的文件。

2024-04-11 20:58:04 358

原创 git:常用cmd命令

git branch。

2024-04-11 20:53:21 699

原创 java语法:sql相关

中ids不能是空列表 否则报错。

2024-04-11 16:53:03 453

原创 java语法:后端接收json对象

JSON.parseObject(jsonPlan,Plan.class) 将json字符串转成抽象的实体类 JSONObject。JSONObject.parseObject(jsonPlan,Plan.class) 将json字符串转成指定的实体类。中不包括某个字段(如name),而使用object.getString("name")就会报错。获取实体类的json字符串。二、如何将json转成实体类。一、接收json格式对象。fastjson依赖。

2024-04-10 21:54:59 1012

原创 java报错:程序包XXXXXX不存在,但pom文件没报错

直接找不到的包在生命周期重新install;

2024-04-09 21:15:22 326

原创 java技术:发生跨域解决

【代码】java之浏览器发生跨域解决。

2024-03-27 18:00:03 270

原创 Java语法:请求参数设置

当请求中没有提供该参数时,方法参数将使用默认值。注解将请求参数的值绑定到方法参数上,可以将参数值自动转换为方法参数的类型。,表示参数是可选的,如果请求中没有提供该参数,方法参数将会使用默认值或。如果请求中没有提供该参数,将会抛出异常。,表示如果请求中没有名为"page"的参数,将使用默认值1。注解可以从请求的查询字符串中获取对应参数的值。,表示从请求中获取名为"id"的参数值。注解可以从表单数据中获取指定参数的值。获取查询参数:通过指定参数名称,:指定请求参数的名称。:指定参数的默认值。

2024-03-27 12:14:47 459

原创 java报错:多模块启动报错Failed to determine a suitable driver class

原因多模块冲突 用idea分别打开启动。

2024-03-25 22:43:37 305

原创 java技术:引入jar包

ps:部署直接部署(jar包加载就行)二、点击模块-->依赖-->加号。三、选择lib下的jar包。

2024-03-25 22:31:41 424

原创 docker配置镜像加速后容器和镜像消失

后来发现在/etc/docker/daemon.json中可以配置镜像源还可以配置docker默认加载路径,不填就是默认/var/lib/docker(这个路径对于我的服务器而言为空,于是需要改到新的路径/root/docker_root)符号链接挂载:将默认路径(/var/lib/docker)挂载到新路径(/root/docker_root)这样访问/var/lib/docker就直接转移到访问/root/docker_root。此时配置了docker默认加载路径和镜像加速器。至此,容器镜像恢复!

2024-03-23 10:28:02 1731 1

原创 mysql容器启动失败,云服务器磁盘空间清理

目录下的日志文件可能会占据大量空间。你可以检查并删除旧的日志文件,或者使用日志轮转工具来管理和限制日志文件的大小。注意,确保不要删除正在使用的日志文件。目录下的软件包缓存可能会占用相当大的空间。在某些 Linux 发行版中,可以使用包管理器来自动清理过期的软件包缓存。目录下可能存在临时文件,这些文件可以清理。确保只删除不再需要的临时文件,以免影响正在运行的应用程序。如果你有不再使用的应用程序或扩展,可以删除相应的目录和文件。删除旧的和不再需要的邮件可以释放磁盘空间。目录下创建自己的子目录以扩展功能,例如。

2024-03-18 10:16:20 215

空空如也

空空如也

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

TA关注的人

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