- 博客(61)
- 收藏
- 关注
原创 算法:ACM模式输入、输出
1)当左右节点中存在最后一个节点结束【对于当前节点的右边叶子节点在上一层已经构建好了】2)避免左节点为最后一个节点 不能使用2*i+2判断 使用2*i+1 然后判断右节点。
2025-04-06 16:32:23
141
原创 深拷贝和浅拷贝
浅拷贝就只是拷贝了外部的对象 对于对象内部的引用对象还是用的原来的 这样就导致了修改拷贝对象的内部引用对象 导致原来对象的内部对象也改变。创建一个新对象,但不复制对象内部的引用指向的对象。复制的是对原始对象内存地址的引用。改变新对象内部的引用所指向的对象会影响原始对象。创建一个新对象,并递归地复制原始对象及其引用的所有对象。新对象和原始对象完全独立,修改一个不会影响另一个。简单讲:深拷贝相当于递归拷贝 对于其中的对象类型也进行拷贝新的 不用旧的。
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
原创 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刷题: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
原创 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
原创 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的过滤器即使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技术: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
原创 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语法:请求参数设置
当请求中没有提供该参数时,方法参数将使用默认值。注解将请求参数的值绑定到方法参数上,可以将参数值自动转换为方法参数的类型。,表示参数是可选的,如果请求中没有提供该参数,方法参数将会使用默认值或。如果请求中没有提供该参数,将会抛出异常。,表示如果请求中没有名为"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
原创 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关注的人