- 博客(316)
- 资源 (6)
- 收藏
- 关注
原创 Java CAS和AQS的实现原理
CAS(Compare And Swap)是一种并发控制机制,用于解决多线程并发访问共享资源时的数据一致性问题。在Java中,CAS操作通常使用Atomic类来实现。例如,可以使用java.util.concurrent.atomic.AtomicInteger类来实现对整数类型的原子操作。Atomic类提供了一系列的原子操作方法,例如getAndAdd、getAndSet、compareAndSet等,可以用于实现CAS操作。/***/
2023-05-24 14:05:58
321
原创 idea插件 Bito – GPT-4 & ChatGPT AI写代码 分析代码 生成测试用例
Bito官网 https://bito.ai/Bito AI是一款通用的人工智能辅助工具,基于最新的ChatGPT实现,开发者可以提出任何技术问题,根据自然语言提示生成代码。Bito AI可以用于编写代码、理解语法、编写测试用例、分析解释代码、注释代码、检查安全性,甚至解释高级概念。
2023-04-26 09:50:29
589
2
原创 MySQL索引合并Index Merge 一条SQL使用多个索引情况分析,以及索引合并失效情况
MySQL在5.0版本加入了索引合并优化(Index Merge),索引合并可以同时查询多个索引的范围扫描,并将其结果合并为一个。索引合并只可以合并来自单个表的索引扫描,而不支持跨多个表的扫描。合并可以生成其基础扫描的并集(unions)、交集(intersections)或交集的并集(unions-of-intersections)。
2023-04-23 14:47:16
373
原创 swagger文件上传接口没有选择文件按钮问题解决 使用@RequestPart注解
@RequestPart注解用在multipart/form-data表单提交请求的方法上,用于修饰MultipartFile类型的参数。当请求类型为multipart/form-data时,@RequestParam只能接收String类型的name-value值。
2023-04-18 18:07:35
227
原创 MySQL 查询表中重复数据
SELECT user_mobile FROM `t_user` GROUP BY user_mobile HAVING COUNT( user_mobile ) > 1;
2023-03-06 10:09:40
194
原创 更新 TKK 失败,请检查网络连接。谷歌翻译 translation插件不能用解决办法 亲测有效
修改hosts文件,将谷歌翻译网址域名指向可用IP地址。在hosts文件加入两行配置:172.217.194.90 translate.google.com172.217.194.90 translate.googleapis.com
2023-03-02 10:21:22
558
1
原创 系统CPU飙升 三步快速定位问题
找到最耗CPU的进程top -c找到最耗CPU的线程top -Hp 查看堆栈jstack | grep '' -C100 --color
2023-02-27 15:36:37
80
原创 数据压缩方案之高性能集合 IntObjectHashMap
IntObjectHashMap没有和JDK的HashMap一样,使用链表法来解决hash冲突,而是使用了线性探测策略的开放寻址法,由于使用开放寻址,在hash碰撞较为严重的场合,其查询性能比HashMap会更好,但是其扩缩容的代价会比HashMap更大,性能更糟。IntObjectHashMap的value就是真实的value,不像HashMap内部维护的Node,也会更节约内存。以及其他包下的集合,org.antlr.v4.runtime.misc.IntSet 也可以压缩数据。经测算,存入1万数据,
2023-02-22 13:43:40
99
原创 MySQL查询表的所有字段名
MySQL查询表的所有字段名。SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '数据库名' AND TABLE_NAME = '表名';
2023-02-21 11:23:40
212
原创 Spring SpringBoot启动时 @ComponentScan 排除指定Bean初始化
Spring SpringBoot启动时 @ComponentScan 排除指定Bean初始化。@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {OrderService.class, ProductService.class}))
2023-02-21 09:17:16
230
原创 分布式一致性Session方案
Session一般译作会话,用户访问web应用时,服务端会给每一个用户(浏览器)创建一个Session对象。缺点:每次http请求都携带Session占外网带宽,Session存储的数据大小受Cookie限制。缺点:Session同步需要占用内网带宽,如果服务比较多性能直线下降,也无法水平扩展。方案三 服务端同步Session,使用Tomcat同步复制保存Session。缺点:服务端重启后Session丢失,服务端水平扩展需要rehash。缺点:需要修改服务端代码。
2023-02-20 13:53:42
41
原创 在桌面点击html文档跳转到指定网站
在windows桌面新建一个html文档,然后文档内容如下: location.replace("https://www.baidu.com");然后点击百度.html,就会打开浏览器并跳转到百度。
2023-02-17 11:08:43
268
原创 update inner join set、update set where如何使用一个表中的字段更新另一个表中字段,MySQL
update inner join set 和 update set from ,如何使用一个表中的字段更新另一个表中字段,MySQL和SqlServer不一样。
2023-02-09 11:17:35
217
原创 使用线程池时,多线程之间上下文参数传递失效解决办法
问题描述在执行业务代码时,有时候需要异步处理一些业务,在异步线程中获取当前登录的用户信息失败。因为用户信息是在过滤器或拦截器中解析出来并设置到ThreadLocal中的,子线程是无法获取到ThreadLocal中的值的。虽然可以使用InheritableThreadLocal替代ThreadLocal,但是只能在新创建的线程中使用。对于线程池也会失效,因为线程池中的线程是由线程池创建好并可重复利用,这时InheritableThreadLocal的值传递就失去意义了。解决办法自定义线程池和线程池执
2023-01-12 14:52:49
456
原创 Thread.sleep(0) 有什么用
Thread.sleep()是native方法。一个线程在运行native方法后,返回到Java线程时,必须进行一次safepoint检查。程序只有达到safepoint才会STW,从而进行GC。Thread.sleep(0)可以让线程进入safepoint检查,从而触发GC。
2023-01-09 10:48:55
145
原创 什么是Cherry-Pick IDEA中怎么使用Cherry-Pick
Cherry-Pick可以将一个分支的某些commit,合并到另一个分支。在不需要merge整个分支的时候适合使用。
2023-01-06 11:12:06
763
原创 Java 使用CountDownLatch实现网络同步请求,异步同时获取商品信息组装
CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
2023-01-04 14:23:45
147
原创 fastjson 将字符串转Java对象 日期序列化异常 日期格式报错解决
com.alibaba.fastjson.JSONException: For input string: "2022-12" at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:693) at com.alibaba.fastjson.JSON.parseObject(JSON.java:395) at com.alibaba.fastjson.JSON.parseObject(JSO
2022-12-15 10:10:02
1127
原创 Java 集合多条件多规则排序 升序 降序 空值处理
List orderShopList = list.stream().sorted(Comparator // 先按数量降序(由于是降序,nullsFirst()方法会将null值放在后面) .comparing(Shop::getCount, Comparator.nullsFirst(Integer::compareTo).reversed()) // 然后按价格升序(由于是升序,
2022-12-02 09:56:43
1040
原创 基于Spring Validation自定义校验注解
自定义一个校验注解,针对字符串参数校验,校验逻辑是字符串必须是"xzh"。String message() default "必须是xzh";Class
2022-11-23 17:19:55
950
原创 分布式场景下接口的限流、幂等、防止重复提交
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Limiter { /** * 限制时间(秒) * * @return */ long limitTime() default 2L; /** * 限制后的返回内容 * * @return */ String
2022-11-22 16:26:33
426
原创 Java 日志中找不到自定义线程的原因,线程名显示不全
原因是日志中使用固定长度格式展示线程名,长度固定为15位字符,在[]里面。当线程名超过15位时会截取,删除最前面的字符直到线程名等于15位字符。eg:线程名为xzhThreadExecutor-0,会变为[hreadExecutor-0]当线程名不足15位时会补全,自动填充空字符直到达到15位字符。eg:线程名为xzhThread-0,会变为[ xzhThread-0]
2022-11-14 09:57:40
255
原创 Redis单线程为什么还能这么快
1.命令执行基于内存操作,一条命令在内存里操作的时间是几十纳秒。2.命令执行是单线程操作,没有线程切换开销。3.基于IO多路复用机制提升Redis的I/O利用率。4.高效的数据结构,比如:SDS的空间预分配;Hash的渐进式扩容机制;ZSet的跳跃表结构。5.合理的数据编码,比如:String存储数字采用int的编码,存储非数字采用raw编码。
2022-10-27 17:02:30
592
原创 如何解决高并发下的库存争抢问题?
原子操作单库修改,几乎无锁竞争,性能好,但性能有上限,可能数据库单点故障。拆分key可以将数据量比较大的key-value,拆分为多个key-value,分拆单次操作的压力,将操作压力平摊到多个redis实例中,降低对单个redis的IO影响。令牌队列类似于令牌限流,将对库存的竞争转换为对令牌的竞争,拿到令牌才可拿库存。自旋互斥超时锁可以对多线程进行互斥,实现同个类型的数据只有一个线程在运行。CAS乐观锁无锁竞争的原子操作,事务执行期间相关的缓存没有修改才会提交成功。Redis
2022-10-27 10:52:10
434
原创 Pulsar订阅模式类型SubscriptionType
独占模式(Exclusive)只允许有一个Consumer加入Subscription ,有其他Consumer试图订阅都会报错,如果该Consumer出现故障了就会停止消费。Pulsar默认是独占模式(Exclusive)。共享模式(Shared)允许多个Consumer加入同一个Subscription,如果Consumer连接异常,就由其他Consumer来接受消息。灾备模式(Failover)当存在多个Consumer时,按字典顺序排序,第一个Consumer被初始化为唯一接受消息的
2022-10-24 15:29:03
622
原创 长轮询和长连接
长轮询客户端向服务端发送请求,服务器端不会直接响应,而是先将这个请求挂起,然后判断服务器端数据是否有更新。如果有更新,则响应,如果一直没有数据,则达到等待超时时间才返回。案例:消息队列、配置中心等长连接长连接即HTML5 SSE,客户端和服务端建立连接后不进行断开,后续的交互一直复用这条连接通道,连接不会主动关闭。案例:视频播放
2022-10-17 16:18:30
110
原创 Spring Boot整合Pulsar生产和消费消息 简单示例代码
@PostConstruct public void initPulsarProducer() throws PulsarClientException { // 构造Pulsar client PulsarClient client = PulsarClient.builder() .serviceUrl(url) .build(); // 创建生产者producer
2022-10-11 15:18:43
886
1
原创 Java获取HTTP请求参数 包括form表单、json格式、xml格式
Java获取HTTP请求参数 包括form表单、json格式、xml格式,并将参数转为map或json等格式
2022-08-23 11:15:21
1658
原创 微服务注册中心的注册表如何更好的防止读写并发冲突
Eureka通过注册表的多级缓存结构防止读写并发冲突;Nacos通过CopyOnWrite机制解决读写并发冲突;Zookeeper使用分布式共享锁实现分布式协调服务解决读写并发冲突:
2022-08-19 11:33:42
463
原创 RocketMQ NameServer如何保证数据最终一致
NameServer是RocketMQ的命名服务(路由中心、注册中心),提供更新和发现Broker服务的功能,是几乎无状态节点,可集群部署。NameServer节点之间互不通信,路由变化也不会马上通知客户端(生产者和消费者)。既然NameServer的节点之间互不通信,变更也不发送通知,那又是如何保证数据最终一致的呢?.........
2022-08-18 16:26:37
691
原创 Nacos 概念介绍 配置模型
命名空间用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之⼀是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如数据库配置、限流阈值、降级开关)隔离等。如果在没有指定 Namespace 的情况下,默认使用 public 命名空间。...
2022-08-17 17:22:47
211
原创 MySQL热点行更新
首先限制打到MySQL的流量前端加验证码、移动图像、回答问题等,限制同一用户的点击频率。后端添加缓存,读写都采用缓存操作,每隔一定时间将结果更新到数据库,对前端请求限流和降级。将请求放入消息队列,顺序将更新请求发送到数据库执行。MySQL层面将热点数据拆分,分在不同的库不同的表中,分散热点数据。将update转为insert,在一次db交互中完成。MySQL参数调优,innodb_flush_log_at_trx_commit = 0,innodb_thread_concurrency = 2
2022-08-17 13:37:22
694
原创 Spring Cloud Gateway 使用 HystrixGatewayFilterFactory 熔断降级
{ "timestamp": "2022-08-16T01:23:11.939+0000", "path": "/user-server/open/a", "status": 504, "error": "Gateway Timeout", "message": "Response took longer than configured timeout"}
2022-08-16 09:31:13
554
原创 无锁缓存方案
缓存通常使用key-value的map数据结构来实现,并发读写缓存时可能会出现数据不一致问题,此时就需要引入读写锁。当吞吐量很高时(每秒20w写,1k读),锁会成为潜在瓶颈,导致Map访问效率极低。这时可以将map水平拆分(类似于数据库里的分库,把一个库锁变成多个库锁,来提高并发,降低锁冲突。)key%n → 多个map。极致做法是map → array,一条数据一把锁,但这样内存装不下。...
2022-08-15 10:50:34
229
转载 Spring AOP 源码解析
代理模式很简单,接口 + 真实实现类 + 代理类,其中 真实实现类 和 代理类 都要实现接口,实例化的时候要使用代理类。所以,Spring AOP 需要做的是生成这么一个代理类,然后替换掉真实实现类来对外提供服务。...
2022-08-12 11:14:25
96
转载 Spring IOC 容器源码分析
Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。...
2022-08-12 10:51:01
87
SublimeText4下载
2021-04-07
Git下载 64位 官方正式版 windows Git-2.31.1-64-bit.exe
2021-04-07
JDK11下载 64位 官方正式版 jdk-11.0.10_windows-x64_bin.exe
2021-04-07
JDK1.8下载 64位 官方正式版 jdk-8u191-windows-x64.exe
2021-04-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人