- 博客(847)
- 资源 (18)
- 收藏
- 关注
原创 为什么要equals方法和hashcode方法一起重写
对象不会被放入哈希集合,为了代码的健壮性、可维护性和遵守 Java 规范,。 这几乎是 Java 开发中的一条铁律。这个反例清晰地展示了只重写。类例子,并尝试将其放入。的工作原理:**。
2025-09-10 15:03:35
854
原创 redis key过期后会立马删除吗
场景删除机制延迟性Key 过期后被访问惰性删除立即删除实时(访问时触发)Key 过期后未被访问,但被定期删除抽中定期删除清理秒级延迟(取决于抽查频率和运气)Key 过期后长期未被访问且未被抽中可能滞留内存不确定(直到被访问或抽中)
2025-09-10 14:50:20
551
原创 Redis如果有大量的请求一时处理不完,这些请求会存放在哪里
你可以把整个过程想象成一个网红餐厅:TCP 内核队列 = 餐厅门外的等候区客人(请求)到来后,如果里面坐满了,先在门外的椅子上排队。和somaxconn就相当于门外等候区的座位数量。座位满了,新来的客人就会被劝离(连接被拒绝)。Redis 内部队列 = 餐厅内已下单但等待制作的订单客人已经被领进门坐下并点了菜(请求已被 Redis 接收并解析),但厨房(Redis 主线程)只有一个厨师,一次只能炒一盘菜。订单需要在厨房的订单栏上排队等待制作。
2025-09-09 09:29:03
486
原创 redis里多线程的应用具体在哪些场景
超高并发连接:当有数万个客户端同时连接时,网络 I/O 的总压力非常大。大流量管道(pipeline):客户端使用了 pipeline,一次发送大量命令,读取和解析这些命令包的开销很大。返回大量数据的操作:例如执行一个LRANGE命令获取上万个元素,将结果写回 socket 的网络输出量很大。重要结论:“慢”的不是CPU,而是I/O:多线程I/O解决的是网络读写这个瓶颈,而不是CPU计算瓶颈。命令执行本身在内存中极快,通常不是问题。命令执行仍是单线程。
2025-09-09 09:11:00
703
原创 redission实现读写锁的原理
Redisson 实现分布式读写锁的核心原理是 + ,在保证强一致性的同时实现高效的读并发(读不阻塞读,写阻塞读)。
2025-09-06 10:53:37
589
原创 hashmap计算key的hash的时候为什么要右移16位
而计算index或者说索引或者说桶的时候,是用hashmap的数组长度-1 & 上面计算的hash值,所以如果上面提到的hash值包含整个hash的32位信息的话,极大的减少了hash碰撞的可能性。hashmap计算key的hash的时候,右移16位目的是为了让低16位包含完整的hash值的信息,因为大部分情况下,hashmap的数组长度是小于2的16次方的,
2025-08-30 21:17:53
230
原创 java 和 synchronized里的CAS问题
java多线程自旋的CAS是什么意思,详细说明在 Java 多线程中,自旋的是一种,用于在高并发场景下实现线程安全。它结合了自旋(即线程在不断尝试获取资源时不会立即阻塞)和 CAS 原子操作,从而在一定条件下实现更高效的线程同步。Java 的java复制输出结果是:复制whileJava 中的 CAS 操作依赖于 sun.misc.Unsafe类,底层通过硬件指令(如 x86 架构的CMPXCHG指令)实现。以下是的方法的实现:java复制ABA。
2025-08-18 11:17:11
596
原创 IDEA中查看方法的调用链
标注⑤:调用关系树,譬如说:A方法中调用了B方法,B方法中调用了C方法和D方法.....(因为我们的项目有好多module,所以用这个的时候也会把调用JAR包,JDK中的方法显示出来,这个就很烦)解释说明:标注④:被调用关系树,譬如说:A方法被B方法和C方法调用,B方法又被D方法调用,C方法被E方法调用.....2.1把光标放在方法名上,右键,选择Analyze -->Data Flow to Here命令(如图)3 查看一个Java类、方法或变量的直接使用情况(和2的功能主要区别在于,2是调用链)
2024-08-25 13:14:42
1471
1
原创 MapStruct参数拷贝
我们上面代码里面可以看到,处理参数和返回参数都要经过不同的转换,这里面看似乎增加了不少工作量,主要是测试案例写的比较简单,真实场景中,如果你不区分,就有可能引起各种问题,如信息泄露等。所以定义了不同的层次,当然,根据需要选择。好了,上面就是基本用法了,至于更复杂的用法,推荐查看官网案例。2.添加转换接口类,可以按照不同业务写多个接口,加上注解。来拷贝对象,但是这不是完全的深拷贝,我们可以用。这上面只是简单的参数相同和集合映射的例子,我们先看看前面的部分代码。另外,上面我们使用了。
2024-06-26 08:37:54
542
原创 spring @Order注解
Order多个相同类型处理器的执行顺序:例如多个异常处理器处理相同类型的异常。多个切面(Aspect)的执行顺序:在 AOP 中控制不同切面的执行先后顺序。多个过滤器(Filter)的执行顺序:在 Spring Web 中控制过滤器的执行顺序。通过使用@Order注解,你可以明确指定这些组件的执行顺序,从而确保应用行为符合预期。
2024-06-18 20:44:02
551
原创 Springboot应用设置跳过SSL证书认证
虽然这个类在开发和测试环境中可能有用,但在生产环境中使用是不安全的,因为它会使你的应用程序容易受到各种 SSL/TLS 攻击。请确保在生产环境中进行适当的证书验证,以保护数据传输的安全性。
2024-06-18 10:50:21
2082
1
原创 jpa下hibernate的ddl-auto的各种属性
一般选择validate/update/none,绝对不能选 create, create-drop,update能帮助建表。如果希望实体类发生改动而数据库表做出相应的更改且不破坏数据库现有的数据,要将spring.jpa.hibernate.ddl-auto属性值设置为update。这里还有一点,就算把ddl-auto设置成update值,也不能识别对表结构的所有更改,往往只能识别出增加的字段,比如修改字段名,修改字段类型或者删除一个字段都是不能够识别的。
2024-06-18 10:15:12
2529
原创 CSRF 攻击详解
禁用 CSRF 保护有其合理的应用场景,特别是在开发 RESTful API、使用其他防护措施、内部应用和非浏览器客户端时。然而,需要谨慎对待这个决定,并确保在适当的场景中启用 CSRF 保护,以防范潜在的安全风险。
2024-05-22 22:09:28
4906
原创 spring validator使用
在开发现代应用程序时,数据验证是确保用户输入的正确性和应用程序数据完整性的关键方面。Spring Boot 提供了强大的数据验证机制,使开发者能够轻松地执行验证操作。本文将深入介绍 Spring Boot 中的 Validation,以及如何在应用程序中正确使用它。因Springboot的默认内置了(Spring boot 2.3以前版本),虽然也能做到数据校验,但是考虑到是一个抽象层,使得验证框架的具体实现变得可插拔。这意味着,除了,开发者可以选择其他符合 Bean Validation 规范的实现。
2024-05-16 22:23:07
878
原创 (适配器模式)当接口要加入新方法时,我后悔没有早点学设计模式了
通过适配器模式和策略模式,我们即可以保证具体的实现类实现共同的接口或继承共同的基类,同时,又能在新增功能(方法)的时候,尽可能的保证设计的清晰。不像之前那种破罐子破摔的方式,接口和实现类几乎脱离了关系,每个实现类,各玩儿各的。
2024-05-16 22:20:58
786
原创 CompletableFuture 异步关于异常的坑
在使用异步CompletableFuture时,无论是否有返回值都要调用get()/join()方法,避免程序执行报错了,仍然返回成功。结果:接口返回成功,控制台打印异步线程异常日志,主线程没有打印异常日志。结果:结果返回成功,控制台打印异步线程异常信息,主线程没有打印异常信息。结果:结果返回成功,控制台打印异步线程异常信息,主线程没有打印异常信息。处理,如果只是对异常做处理,不涉及对上一个异步任务结果的情况,调用。结果:接口返回失败,控制台打印异常日志。结果:接口返回成功,控制台打印异常信息。
2024-05-14 20:34:49
592
原创 SpringBoot接收参数的19种方式
https://juejin.cn/post/7343243744479625267?share_token=6D3AD82C-0404-47A7-949C-CA71F9BC9583
2024-05-14 20:31:42
398
原创 springboot @Async 失效的9种场景
这个问题还是比较有意思的,今天这篇文章总结了@Async注解失效的9种场景,希望对你会有所帮助。
2024-05-08 18:07:41
1377
转载 Spring 核心扩展点
一般情况下,Spring通过反射机制利用bean的class属性指定支线类去实例化bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在bean中提供大量的配置信息。使用场景:用户可以扩展这个类,来为要实例化的bean作一个代理,比如为该对象的所有的方法作一个拦截,在调用前后输出一行log,模仿。可以看到,该类用于执行各种驱动接口,在bean实例化之后,属性填充之后,通过执行以上红框标出的扩展接口,来获取对应容器的变量。其作用是在bean的初始化阶段,如果对一个方法标注了。
2024-04-04 21:31:08
119
转载 springcloud ConfigDataContextRefresher刷新central config
首次请求/adviser/loss/test接口,会发现返回=》张三:18,然后修改git上的配置,将年龄修改为20,再次请求/adviser/loss/test接口,发现配置并未更新。关于新版本的实现属实不太理解(功力尚浅),我个人也在学习和总结,后续如果有新的进展,我也会及时更新的,如果您有相关资料或见解,也烦请指教。在2处,重新加载配置,在当前的版本,有2中实现方式:一种是兼容旧版本的实现,一种是新版本的实现,这两种实现分别在。放入缓存中(缓存中没有则放入,有则返回原对象),然后调用。
2024-03-26 18:05:41
298
原创 @JsonProperty作用
JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。这里需要注意的是将对象转换成json字符串使用的方法是fasterxml.jackson提供的!jackson的maven依赖。
2024-03-25 17:01:18
1558
1
转载 OAuth2.0通俗易懂的解释
是目前最流行的授权机制,用来授权第三方应用,获取用户数据。这个标准比较抽象,使用了很多术语,初学者不容易理解。其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,OAuth 2.0 到底是什么。
2024-01-30 16:01:13
213
原创 谷歌浏览器启用实时字幕功能
您可对字幕进行自定义,以使其更便于阅读。使用字幕框上的箭头收起和展开字幕。选择字幕以将其移至浏览器中您偏好的位置。更改字幕字体、大小、颜色和不透明度。更改背景颜色和不透明度。在计算机上打开 Chrome。在右上角,依次选择“更多”图标设置。在“设置”页面底部,依次选择无障碍字幕偏好设置。在计算机的系统偏好设置中,选择您想使用的自定义项。
2024-01-05 20:32:38
18441
1
原创 TaskDecatator用法
方法的目的是让你可以在实际的任务执行之前,对任务进行一些额外的处理。只是一个自定义装饰行为的接口,具体的上下文传递逻辑需要根据你的实际应用场景来设计。例如,在执行异步操作时,你可能需要将主线程的一些上下文信息(比如用户身份验证令牌或请求上下文信息)传递给执行异步操作的线程。,它会捕获提交任务时当前线程的上下文,并在任务实际执行前将这个上下文设置到执行任务的线程中。方法中的逻辑会在你的任务代码之前执行,允许你设置或者修改线程的状态,以便这些状态可以在任务执行时被使用。方法,然后再执行你的任务代码。
2023-12-19 14:57:30
2086
原创 redis实际应用实现合集
首先需要把10个观众的id(具体是什么id可以根据实际业务情况自己定义)放到redis 的 set 集合里。从10名观众中抽取奖项,其中一等奖1人,二等奖2人,三等奖3人。插入10个观众,act:002是活动的名字,后面分别是观众id。从10个观众中随机抽2名幸运观众。需要用到redis的。
2023-12-11 21:20:44
309
原创 springsecurity为什么说使用JWT就可以disable csrf
这个方案的实现方法是,在设置 JWT 的同时,设置一个额外的 CSRF Token Cookie,并将这个 CSRF Token 也返回给前端。攻击者可以在他们控制的网站上构造一个请求,当用户访问这个网站时,这个请求会在用户的浏览器中执行,并带有用户对目标网站的凭证(例如,cookies)。例如,你应当使用 HTTPS 来防止 MITM 攻击,使用适当的策略和技术(例如,Content Security Policy,对用户输入的严格检查和清理)来防止 XSS 攻击。
2023-12-07 20:22:10
995
原创 一文秒懂 springsecurity6.2实现自定义登录页
springsecurity原理和基础这里暂时不讲,网上资料太多了,这个大家可以自行查找学习,基本上没什么太大区别,看几篇文章就了解了,这篇文章主要是针对自定义登录页做一个demo,通过这个小 demo,大家可以直接理解springsecurity 处理登录的流程。这里只是简单的创建了一个 user,实际情况下可以在这里查询 db 里的user,为了简单化流程,这里就略过查询 db 的逻辑了,大家可以自行根据 mybatis 处理这一块内容。
2023-12-06 11:30:51
3288
原创 Failed to resolve org.junit.platform:junit-platform-launcher:1.9.3
springboot 跑 unit test 的时候,如果报错如题的话,可以更改idea 里的 HTTP Proxy 配置为:Auto-detect proxy settings。
2023-12-04 13:45:54
1150
原创 Java通过central config 开关实现双写控制
最后获取开关的值可以配置在central config里,通过更改这个值就可以实现对双写的控制。
2023-11-14 19:52:05
285
转载 Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。我们前面提到的@Cacheable、@cacheEvict等也可以标注在接口上,这对于基于接口的代理来说是没有什么问题的,但是需要注意的是当我们设置proxy-target-class为true或者mode为aspectj时,是直接基于class进行操作的,定义在接口上的@Cacheable等Cache注解不会被识别到,那对应的Spring Cache也不会起作用了。下面是几个使用参数作为key的示例。
2023-11-14 10:33:36
1715
原创 线程安全问题解析
多线程问题的根本原因是由于多个线程同时操作了同一个对象的成员变量,而且这个变量没有做同步处理,这就会有多线程问题,所以如果一个对象没有成员变量,那么就不会有多线程问题,因为如果一个对象只有方法的话,那么方法是在线程自己的内存空间执行的(线程内存里有栈帧,就是用来执行方法),所以在方法内所产生的对象都是存储在线程自己的内存空间的,不存在线程安全问题。这时候线程2 修改的数据在save到主内存之前,线程1是可见的,也就是说线程1的修改被线程2覆盖掉了,就破坏了线程1的原子性。5. 线程执行方法的过程。
2023-11-10 14:36:26
329
转载 Redis key 过期通知
默认 notify-keyspace-events "" 修改为:notify-keyspace-events Ex。//通知效果如图 RedisKeyExpirationListener.onmessage。只有当key被删除时候 才会通知 并不是在key过期后就马上删除的。
2023-11-09 10:09:02
1170
原创 ThreadLocal用法
是的,使用同步可以解决问题,但是我们要看哪一种方式更合适,一般必须使用同步的场景是这个变量属于业务共享的,也就是说一个线程操作这个对象对别的线程是有业务影响的,是有业务逻辑关系的,再或者说其他线程操作这个变量要看当前线程操作的结果,比如商品库存,这个你总不能说用 ThreadLocal 去定义这个库存吧,那岂不是要疯了。这样,每个线程独立的拥有对象 t,虽然方法是公用的,但是里面的 t 对象是线程独有的,所有就解决了冲突问题。
2023-11-05 21:32:05
319
原创 springboot 配置文件加载顺序
属性:如果存在`spring.config.name`属性,Spring Boot会尝试加载与该属性值匹配的文件,无论其扩展名是`.properties`还是`.yml`。例如,如果`spring.config.name=myapp`,则会尝试加载`myapp.properties`或`myapp.yml`。`属性,Spring Boot会按照该属性指定的路径加载配置文件。可以指定单个文件的路径,也可以指定包含通配符的路径。
2023-10-28 21:41:48
493
mybatis逆向工程jar组件包
2018-01-24
c3p0-0.9.2.1和mchange-commons-java-0.2.3.3
2017-11-22
mercurial_extension.zip
2019-06-03
matlab-libsvm
2015-04-05
aspectjweaver-1.8.7和aopalliance1.0
2017-11-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人