- 博客(51)
- 收藏
- 关注
原创 AQS和ReentrantLock
AQS通过一个FIFO(先进先出)的等待队列来管理多线程对资源的访问。它允许开发者通过继承AQS来创建具体的同步器,并利用AQS提供的模板方法来实现同步逻辑。功能:AQS主要提供了两部分功能,一是操作state变量(表示资源是否被占用),二是实现排队和阻塞机制。AQS并没有实现任何同步接口,它只是提供方法,调用这些方法可以实现锁和同步器。
2024-10-18 14:47:50
414
原创 死锁和活锁和线程饥饿
死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力作用,它们都将无法推进下去。原因:两个或两个以上的线程共同访问两个或多个相同的资源(如对象锁),并且每个线程都持有部分资源同时等待其他线程释放它所需要的资源,从而导致所有线程都无法继续执行。
2024-10-16 18:14:17
267
原创 CAS相关知识
了分层级的策略来优化性能,锁的状态由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁。以下是关于这些锁状态的详细解释:==无锁状态:==这是对象的初始状态,表示没有任何线程持有该对象的锁。==偏向锁:==偏向锁是为了优化只有一个线程访问同步块的场景。当一个线程首次获取锁时,锁会进入偏向锁状态,并在对象头中记录持有锁的线程ID。此后,该线程再次获取锁时,只需比较对象头中的线程ID,无需进行额外的CAS操作,从而降低了获取锁的开销。
2024-10-16 17:02:19
689
原创 threadlocal的相关知识
开放寻址法(线性探测法)是一种解决哈希冲突的方法,属于开放寻址法的一种具体实现方式哈希函数计算:首先,使用哈希函数计算键的哈希值,以确定其在哈希表中的初始位置。冲突检测:如果初始位置已被占用(即发生冲突),则使用线性探测法查找下一个空闲位置。线性探测:从发生冲突的位置开始,依次检查下一个位置是否为空。线性探测的增量序列通常为di=1, 2, 3, …, m-1(其中m为哈希表长度)。即,如果初始位置为x,则探测过程为x+1, x+2, x+3, …, 直到找到空位置。
2024-10-16 16:06:02
622
原创 Spring的启动,以及对于一些问题的思考
因为我在学习的时候,老师教的是,最好是按照标准去使用注解,为其分类,但是在大多数情况下,没什么区别,是这样吗?所以说,可以在这个类中使用 @Bean 这类注解来向容器注入一个 bean(我们常在@Configuration中也是这是这么做的),但是的确,很少有人会这么做,为什么?如果一个本应该被标记成 @Repository 的类被 标记成了@Component 那么程序在没有出现异常的情况下可以正常运行嘛?这就是一个最简单的,也是最常见的启动springboot项目的一个方式,首先是。
2024-10-14 15:07:27
305
原创 一些关于线程之间协作的心得
首先看代码当我看完这个答复之后,我觉得 join 其实和 线程之间的执行顺序,或者说调度息息相关,它在多线程并发执行以用来提高效率方面,好像没那么明显。
2024-09-23 17:47:24
263
原创 异常处理相关心得
没有人会点击一个接口之后,立马去看日志,当我们发现线程池中的任务执行失败的时候,很可能是1个小时以后的事情了,那个时候再去翻找日志太麻烦,所以说及时通知到群里才是最可靠的。
2024-09-03 18:32:00
501
1
原创 ThreadLocal的使用
这里为了更加还原真实的线上环境,直接就用了 拦截器+统一返回+全局异常捕获+ThreadLocal,项目还是比较完整的。
2024-06-21 11:50:19
464
原创 java11运行rocketmq
java11作为一个长期支持的版本,相信有很多人是在使用的,但是 rocketMQ 是java8开发的,所以 mq的相关的 sh脚本也是在 java8的环境下编写的,所以想要 在 11的环境下运行 rocketMQ,是需要做一些改变的。我的设备是 2核 2G 的centos7设备,一般情况下还会开启 redis 和 mysql 和 运行rocketmq的可视化界面的jar包, 所以 rocketmq 的 参数我调的很小 只有128m。一、runserver.sh。
2024-05-22 11:26:32
310
原创 validation的简单使用
那么问题就是怎么写,我们找一个现成的 @NotNull复制一下,改改代码validatedBy = {MobileValidator.class}//注意,这里是需要我们自己写的String message() default "手机号码有误";Class<?Class<?/*这两个泛型,前者是注解类型 ,后者是 要检验的值是什么类型*/@Override/*s就是前端传过来的值*/@Data@ToString@NotBlank(message = "名字不能为空")
2024-05-06 15:40:09
554
原创 mybatis使用xml中的if-else/choose
最近需要使用 xml 文件来实现一些增删改查,此文对 其中的 if-else 加以说明。然后在 xml 文件中写这个方法的具体实现。首先肯定是在 mapper 里面有一个方法。那么使用 xml 怎么来使用和接收呢?有一个引用类,假设叫 Student。
2024-04-19 17:13:20
2678
原创 定时任务--静态 和 动态
动态任务就是说,从数据库中读取循环时间,数据库中只要改动,那么项目中的循环时间就会随之改变,所以说项目中引用了 mybatisplus ,而库中存的内容很简单。随着项目的启动而启动,如果需要更改循环时间,需要重启应用。
2024-02-05 11:02:23
442
原创 用Integer当作锁的时候的注意事项
这里记录了对象的地址在值变化的时候就会使用到这里的原对象的地址,所以说地址最终是不会变的。使用 AtomicInteger 就可以了。前几天看到一个经典的面试题。下面使用另外一种方式。
2023-07-28 15:16:06
240
原创 Spring源码的一些理解---事务中的动态代理
spring 的事务和动态代理是息息相关的,也常常一不注意就事务失效,那么想弄明白失效的原因要从 spring 的动态代理说起。
2023-06-20 10:16:16
633
原创 reentrantLock的使用
那么有没有其他方法来解决这个并发问题呢,其实是有的,我们使用redis,其中有一个操作就是 原子性的增加/减。8个现成循环5次,也就是说,最终redis里面值应该是 100+40=140,但是结果是130。很简单,就是将redis里面的值拿出来以后,加一再放回去,但是如果是并发场景下呢?执行结果也肯定不会是 130-40=90。同样的,如果不加锁的情况下去执行 minusNum,往redis里面放一个值,num,值设置成100。我们这里使用 ApiFox来测试一下。这样也可以保证并发情况下的数据一致性。
2023-05-23 16:30:20
204
原创 DefaultSecurityFilterChain在编写了一些代码之后,消失了,等待大佬解答
但是当我写了一些代码之后,比如,利用数据库查询数据做用户的登录和校验,JWt解析token等操作之后,就找不到这个 DefaultSecurityFilterChain 了,如下。在一个新的项目中,加入springsecurity的依赖以后,是可以找到 DefaultSecurityFilterChain 的,如下。
2023-04-20 18:12:26
278
2
原创 spring.profiles.active的使用
那么我们就需要创建一个 名为 aplication-local-dev.properties 的配置文件。意思就是 项目启动后 使用 aplication-local-dev.properties 这个配置文件。而aplication-local-dev.properties 里面的配置信息才是最终注入到项目中的。这里的名字 local-dev prod 其实是可以随意命名的,没有规则上的限制。会有很多环境 这直接影响这配置文件里面的一些值。但是最好还是遵循命名的规范。比如数据库的连接信息等等。
2022-12-30 17:35:28
708
原创 jpa使用原生sql查询,或者使用Specification
使用这个的前提是: repository 继承 JpaSpecificationExecutor。三个判断条件写出来就解决了,所以这里记录一下如何适用 JPA 的原生 SQL。拼接 where mobile=“xxxxxx”有三个查询条件,如果适用 JPA 最常见的形式。如果采用最原生的 sql 哪一个筛选条件传值了。拼接 where endTime xxxxxx。拼接 where type = xxx。那么就拼接一下 sql 会方便很多。这样写出来的 原生SQL 是可以的。则需要加很多判断条件。
2022-12-22 17:33:55
1326
原创 feign的学习记录
开关改造代码feign自动实现负载均衡之前使用 restTemplate的时候 需要配加入注解 @LoadBalanced 才会被 ribbon拦截,才能够负载均衡,而现在直接使用 feign 直接就能够做负载均衡,因为 feign的内部集成了 ribbon在order的配置文件之内声明Feign的优化Feign其实只是将请求变成 地址,最终发送请求的 其实还是其他的一些组件默认使用的是 jdk自带的 URLConnection那么既然要使用 apache httpclient ,就需
2022-12-06 18:03:21
164
原创 nacos学习记录
父工程子工程在配置文件中写集群不论是 orderservice还是 userservice 都可以搭建集群即这样的话,这个服务就会加入到 HZ 集群中那么当HZ集群停掉了 ,那么才会访问其他集群的服务?错误,需要在配置一个地方,这样才可以,order的集群是 HZ 的时候,他会优先访问 HZ的user里面的实例,当 HZ里面的user实例停了,才会访问 其他地方的实例。例如在 HZ 集群中 有两个实例 那么一般来说是随机访问但是 我们可以设置权重一般实在 0-1 之间 那么当需要版
2022-12-06 09:36:01
97
原创 eureka
如果使用 restTemplate 的话 ,很多代码都是写死的 , 不能保证服务是可用的 所以有很多问题所以我们需要使用 eureka需要单独的一个 module ,依赖是服务注册在 userService模块中 引入依赖加配置先启动 注册中心 然后启动服务如果需要注册多个实例需要然后启动即可,这样的话 就会有两个实例 注册中心会如下显示既然实例已经注册完成 那么就可以通过名字来获取实例那么这里就不在使用 ip地址去发送请求 直接使用 实例的名字即可但是注册了两个实
2022-12-05 15:15:33
109
原创 redis持久化以及原理
在启动的时候 要制定配置文件配置文件中 指定了rdb文件的名字,默认情况下redis在哪里运行,那么他的rdb文件就会保存在哪里而且每次退出redis的时候,都会执行一次 bgsave而生成的文件名就是 这里的 dump.rdb当然在每次启动redis的时候,也会去读取这个rdb文件进行数据的恢复。如果在关闭reids后修改了这里的文件名,那么再次启动的时候,自然是做不了数据的回复的这里的 5 1 就是 5秒内 只要有 1 次的key的修改 那么就执行一次 bgsave操作压缩是要占用 cp
2022-12-01 10:48:52
288
原创 redis的特殊的数据结构
业务场景:规定一个中心点,以及距离,查询库中有哪些点是在这个距离内的,有按照 圆心半径查找的 也有按照 矩形查找的。在查询数据的时候,前端传入的参数带着上次最后一条数据,这样后端就可以知道从哪里开始往后查询多少条数据了。// 经度:116.322062纬度:39.894914。// 经度:116.378545纬度:39.865195。业务场景:附近的商家、附近的人、计算两点之间的距离等等。业务场景:任何使用到分页的时候都有可能发生。比如:附近的人、周围的美食、景点等等。
2022-12-01 10:26:04
453
原创 static final、static、@PostConstruct、构造方法、@AutoWired执行的顺序
那么在这个service类中 如果存在 static final / static / @PostConstruct 修饰的变量 或者是方法 执行顺序如何?即某个类的上面加入注解 @Service 交由spring容器管理。在执行业务的时候 一般的流程是 调用 service来执行。那么在项目启动的时候 执行的顺序是。
2022-11-28 11:54:01
1174
原创 redisson.tryLock()的参数的理解
就是说 A拿到了锁之后, 如果发生了一些异常错误,内部业务没能正常的执行,没能正常执行释放锁的操作,这个时候 这个超时施放时间才会起作用,也就是说,在A抢到锁之后,即便A的业务出现了堵塞,但是只要没发生一些异常情况,这里的超时施放时间是不起作用的,因为只要不发生异常,内部就会有一个 看门狗,每隔。从上面的图片可以看到,A抢过锁之后,执行业务,结束之后释放锁,释放锁的时候还 publish (发布)了一个信号,而有人发布,就有人订阅,发布人是A,订阅人是BCD…,所以说这里的择机再次抢夺是在BCD…
2022-11-09 11:57:43
10927
2
原创 8.3_springboot+spring data redis
package com.example;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.redis.core.StringRedisTemplate;import org.
2022-08-03 15:59:39
88
原创 7.21_SpringDataJPA下的mongo和mysql的模糊查询
7.21_SpringDataJPA下的mongo和mysql的模糊查询
2022-07-21 14:22:31
608
Maven项目间依赖构建
2025-04-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人