- 博客(71)
- 收藏
- 关注
原创 Spring的循环依赖问题
直接进入主题,众所周知,Spring是有三级缓存的,DefaultSingletonBeanFactory中的singletonObjects为一级缓存Map<BeanName, Object>,二级缓存为earlySingletonObjects半成品池也是根一级缓存一样的类型,三级缓存为singletonFactories,类型为Map<BeanName, ObjectFactory<?>>。spring进行扫描 -> 反射后封装成beanDefinitio
2022-05-11 21:34:48
4329
原创 Netty引用计数器踩坑
在使用Netty的channel或者channelContext进行write的时候如果发生了netty IllegalReferenceCountException: refCnt: 0,那就是引用计数器的问题在channelRead0()方法中的ctx.write(in),会报io.netty.util.IllegalReferenceCountException原因是这是因为Netty有引用计数器的原因,自从Netty 4开始,对象的生命周期由它们的引用计数(reference counts)管理
2022-05-05 16:44:00
317
原创 SpringCloud整合之中遇到的坑
最近在跟着谷粒商城做项目,但现在是2022年了,视频中的项目是20年,所以我选择了更新一下版本,使用的版本是Cloud2020,CloudAlibaba的是2021.1,SpringBoot版本用的2.5.13,Nacos根据alibaba文档上用的1.4.1。版本说明链接Nacos的配置中心在SpringBoot高版本后需要手动加入一个bootstrap依赖,否则不能发现引导文件 <!-- 根引导文件 --> <dependency>
2022-05-03 12:26:51
1789
原创 Java8 新特性 Colletor 收集器自定义
需要在一个乘机人数组中先按照乘机人类型分类,在对分组后的元素属性进行聚合,以达到一个 K -> V => ADT -> 张三;李四;王五,这样的Map结构,但是普通常用的流收集器是达不到这样的效果的,最后经过研究Collector并且参考资料后总结自定义一个收集器来操作运转,话不多说了,贴代码先贴一份demo demo代码// Bean对象,模拟@Data@Accessors(chain = true)class TestBean { public String name
2022-04-26 10:30:26
695
原创 注册中心 Nacos docker方式安装及数据库持久化
nacos 安装docker search nacos拉取docker pull docker.io/nacos/nacos-server启动docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server开启端口命令:firewall-cmd --zone=public --add-port=8848/tcp --permanent关闭端口命令:firewall-cmd --zone=pub
2022-04-24 15:45:53
362
转载 Spring源码最难问题《当Spring AOP遇上循环依赖》
前言问:Spring如何解决循环依赖答:Spring通过提前曝光机制,利用三级缓存解决循环依赖再问:Spring通过提前曝光,直接曝光到二级缓存已经可以解决循环依赖问题了,为什么一定要三级缓存?再细问:如果循环依赖的时候,所有类又都需要Spring AOP自动代理,那Spring如何提前曝光?曝光的是原始bean还是代理后的bean?源码分析进入正题,在Spring创建Bean的核心代码doGetBean中,在实例化bean之前,会先尝试从三级缓存获取bean,这也是Spring解决循环依赖的开
2022-03-16 23:54:32
250
转载 踩坑,spring事务,非事务方法与事务方法执行相互调用
写这篇文章的初衷呢就是最近遇到了一个spring事务的大坑.与其说是坑,还不如说是自己事务这块儿太薄弱导致的(自嘲下).项目环境 sprinigboot下面开始问题描述,发生的过程有点长,想直接看方案的直接跳过哦~;最近在做项目中有个业务是每天定时更新xx的数据,某条记录更新中数据出错,不影响整体数据,只需记录下来并回滚当条记录所关联的表数据; 好啊,这个简单,接到任务后,楼主我三下五除二就写完了,由于这个业务还是有些麻烦,我就在一个service里拆成了两个方法去执行,一个方法(A)是查询数据与验证
2022-02-27 21:27:16
421
转载 LocalDateTime和时间戳,Date,字符串互转
开发当中经常时间转换非常常见,最近的项目当中使用了LocalDateTime,特此记录下LocalDateTime的常用转换。LocalDateTime和时间戳互转 /** * 获取到毫秒级时间戳 * @param localDateTime 具体时间 * @return long 毫秒级时间戳 */ public static long toEpochMilli(LocalDateTime localDateTime){ retur
2022-02-11 19:36:31
1898
转载 Bloom filter(布隆过滤器)学习与使用总结
一、简介当我们使用主流数据结构如 Lists, Maps, Sets, Trees等等时,我可以得到确切的结果,无论这个数据存在或是不存在。概率数据结构能够提供一种基于内存的,快速的查找出一种可能而非确切的结果。这种概率数据结构就是布隆过滤器(Bloom filter)。布隆过滤器可以检查值是“可能在集合中”还是“绝对不在集合中”。定义Bloom过滤器实质上由长度为m的位向量或位列表(仅包含0或1位值的列表)组成,最初所有值均设置为0,如下所示:在哈希表中,我们使用单个哈希函数,因此仅获得单个索
2021-11-26 20:07:41
2718
转载 深入理解MySQL索引之B+Tree
正确的创建合适的索引,是提升数据库查询性能的基础。在正式讲解之前,对后面举例中使用的表结构先简单看一下:create table user( id bigint not null comment 'id' primary key, name varchar(200) null comment 'name', age bigint null comment 'age', gender int null comment 'ge
2021-09-27 15:17:17
357
1
转载 java8 Stream stream().filter()进行迭代及实现机制
前言本文为java8函数式编程读书笔记。提示:以下是本篇文章正文内容,下面案例可供参考一、使用迭代1.外部迭代先看一个示例:如果要计算从伦敦来的艺术家的人数,要使用外部迭代方式,通常我们会这么写int count = 0;for (Artist artist : allArtists) { if (artist.isFrom("London")) { count++; } }如上代码,for 循环其实是一个封装了迭代的语法糖,我们在这里多花点时间, 看看它的工作原理。首先
2021-09-17 19:45:49
1956
原创 关于Redisson的分布式锁
最近在工作中碰到分布式加锁的问题,平时一般用的reentrantlock已经无法满足分布式的需求的,目前市面上流行的分布式锁 zookeeper Redis 等待,现在是简要的学习了下 Redis的分布式锁,先凑活着用,先会用把,之后再去深入理解下原理,话不多说对于分布式锁的要求互斥性:分布式锁需要保证在不同节点的不同线程的互斥。这是最根本的。可重入性:同一个节点上的同一个线程如果获取了锁之后也可以再次获取这个锁。锁超时:和本地锁一样支持锁超时,防止死锁。高可用:加锁和解锁需要高效,同时也需要保
2021-09-08 23:59:00
1315
原创 使用 RedisTemplate Lettuce 自定义连接对象
之前使用Redis一直是在单服务器单库中进行,因为最近在一个需求中,需要用到一个Redis服务器中的多个库,每个库存放不同的数据。找了好久的文章都是直接在配置文件中写死 host, port, pass, database 等等,经过多篇文章综合整理,自己写了个简单的Redis连接池工具类小demo,可以自定义参数获得连接对象,话不多说上代码package com.example.Xiang.redis;import com.fasterxml.jackson.annotation.JsonAutoD
2021-08-08 15:22:40
1228
转载 java 快速排序
以下是通俗易懂的快速排序!摘自《啊哈!算法》,我将书中的C语言写成了Java语言。因为我觉得它真的很容易明白,所以我并将把他记录了下来,并分享给大家! 假设我们现在对“6 1 2 7 9 3 4 5 1 0 8”这10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被...
2021-08-03 20:42:54
274
原创 关于使用 stream 流对list对象集合进行细分组
之前使用的一直都是stream 的简单分组,Map<Integer, List<Order>> orderMap = orderService.list(new QueryWrapper<Order>().lambda().in(Order::getPlatformNo, orderNos).select(Order::getPlatformNo, Order::getPlatformId)).stream().collect(Collectors.groupingBy
2021-08-02 21:21:01
1138
转载 Linux虚拟机ip总是变
进入目录:cd /etc/sysconfig/network-scripts/cd /etc/sysconfig/network-scripts/vi ifcfg-ens*改第一个红框为static,第二红框为自己想设定的静态ip重启:reboot再查看ip是否已设定成功:ifconfig 回车
2021-07-04 21:31:08
354
转载 @PostConstruct注解
@PostConstruct基本:@PostConstruct注解好多人以为是Spring提供的。其实是Java自己的注解。Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中
2021-07-02 13:52:17
136
转载 HandlerInterceptor的preHandle、postHandle、afterCompletion方法的作用
public class MyHandlerInterceptor implements HandlerInterceptor {(1) preHandle方法是进行处理器拦截用的,顾名思义,该方法将在Controller处理之前进行调用。SpringMVC中的Interceptor拦截器是链式的,可以同时存在多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在Controller方法调用之前调用。(S
2021-07-02 08:48:16
2796
转载 消息队列和 RocketMQ 总结
消息队列扫盲消息队列顾名思义就是存放消息的队列,队列我就不解释了,别告诉我你连队列都不知道似啥吧?所以问题并不是消息队列是什么,而是消息队列为什么会出现?消息队列能用来干什么?用它来干这些事会带来什么好处?消息队列会带来副作用吗?消息队列为什么会出现?消息队列算是作为后端程序员的一个必备技能吧,因为分布式应用必定涉及到各个系统之间的通信问题,这个时候消息队列也应运而生了。可以说分布式的产生是消息队列的基础,而分布式怕是一个很古老的概念了吧,所以消息队列也是一个很古老的中间件了。消息队列能用来干什么
2021-06-30 14:57:49
930
原创 npm 安装 Vue-devtools 踩坑日记
网上的教程都是只会教你直接 clone 项目然后 npm install 后 npm run build 就ok了,虽然是这样,但真滴是没有良心,git 克隆的默认是开发版本,不完全稳定,我真醉了翻了半天的资料, npm 降级,node.js降级都试了最后才发现原来是Git版本克隆错了,克隆成开发板了,这么多教程也没一个提示的,服了服了搞了大半天,最后附上正确教程git clone -b v5.1.1 https://github.com/vuejs/vue-devtools.gitnpm
2021-06-16 15:04:58
2853
6
转载 yarn的安装和使用
yarn的简介: Yarn是facebook发布的一款取代npm的包管理工具。 yarn的特点: 速度超快。 Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。 超级安全。 在执行代码之前,Yar...
2021-06-13 14:43:38
732
原创 使用Stream流对集合中根据多个元素进行去重
最近工作中需要在有重复数据的数据表中查出数据集合并且不能重复,但由于数据量太大就不好用group by分组,这里用一次Stream的去重操作oldSegments.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>( Comparator.comparing(o -> o.getDptTime
2021-05-19 14:39:29
2241
原创 Mysql之IN 和 Exists 用法
Mysql之IN 和 Exists 用法1.基本用法IN:后面的子查询 是返回结果集的,换句话说执行次序和Exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.Exists:后面的子查询被称做相关子查询, 他是不返回列表的值的.只是返回一个ture或false的结果(这也是为什么子查询里是 "select 1 "的原因,当然也可以select任何东西) 其运行方式是先运行主查询一次。再去子查询里查询与其对应的结果,如果是ture则
2021-05-17 15:54:35
1164
转载 Docker:Docker Compose 详解
Docker Compose 概述与安装?前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具安装 Docker Compose安装 Docker
2021-05-09 15:44:44
181
转载 关于SpringBoot的@Scheduled的并发问题
由于SpringBoot自带的@Scheduled是一个阻塞执行的定时任务,所以效率会很慢,就会造成同一个时间段内只有一个定时任务在执行,其余的就会阻塞现有两个定时任务@Component("aa")public class aa { @Scheduled(cron = "0 44 17 * * ?") public void bb() { try { System.out.println("aa执行时间:" + new Date());
2021-05-06 16:34:18
1018
转载 消息队列(mq)是什么?
对于 MQ 来说,其实不管是 RocketMQ、Kafka 还是其他消息队列,它们的本质都是:一发一存一消费。下面我们以这个本质作为根,一起由浅入深地聊聊 MQ。01 从 MQ 的本质说起将 MQ 掰开了揉碎了来看,都是「一发一存一消费」,再直白点就是一个「转发器」。生产者先将消息投递一个叫做「队列」的容器中,然后再从这个容器中取出消息,最后再转发给消费者,仅此而已。上面这个图便是消息队列最原始的模型,它包含了两个关键词:消息和队列。1、消息:就是要传输的数据,可以是最简单的文本字符串,也可以
2021-05-04 08:51:33
1980
转载 CentOS7 docker部署springboot项目(两种方式)
首先,使用现在主流的IDE Idea创建一个最简单的springboot项目。比如随便带有一个@RestController的public String test1(){}的方法。使之可访问即可。需要一点预备知识,如 linux基本操作、docker安装及基本操作、docker镜像地址配置(否则下载会特别慢)、java 或 mvn命令启动springboot项目等,懂的人自然懂。两种方式,第一种方式成功了,有助于理解和运用第二种方式。第一种,不依赖docker插件,手动部署springboot到do
2021-05-03 22:10:06
641
转载 Linux CAT与ECHO命令详解 <<EOF EOF
Linux CAT与ECHO命令详解cat命令是Linux下的一个文本输出命令,通常是用于观看某个文件的内容的; cat主要有三大功能: 1.一次显示整个文件。 $ cat filename 2.从键盘创建一个文件。 $ cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件。 $cat file1 file2 > filecat具体命
2021-05-03 19:50:14
4650
转载 Docker三剑客实践之部署集群
前言DOCKER技术在推出后掀起了一阵容器化技术的热潮,容器化使得服务的部署变得极其简易,这为微服务和分布式计算提供了很大的便利。为了把容器化技术的优点发挥到极致,docker公司先后推出了三大技术:docker-machine,docker-compose,docker-swarm,可以说是几乎实现了容器化技术中所有可能需要的底层技术手段。在使用go语言实现了判题引擎并打包好docker镜像后,就需要进行分布式判题的编写,这次就让我们手动实践,尝试使用docker的三大杀器来部署一个多机器构成的判题
2021-05-03 19:42:40
368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人