- 博客(51)
- 资源 (15)
- 收藏
- 关注
原创 记一次 Eclipse 打包的辛酸历程
上面针对这个项目的,打可执行包,以及创建主清单,打jar 包,然后 去运行,我都尝试成功了。另外,在这个项目启动的时候,带了一些 JVM 参数,需要在启动的时候配置。第一个Extract required libraries into generated JAR 为提取extract需要的依赖的库jar合成到jar文件里,引用的jar提取class到导出的jar里;ps:对于我遇到的这个项目,我开始一直选择的是第一个,打完 jar 后一直运行不成功,直到有人选择第三个成功了。
2022-12-08 14:31:06 1576
原创 jdbc 连接 oracle 数据库的一些使用细节
偶然的原因,第一次接触 jdbc 调用 oracle 数据库的场景,开始的时候,也是尝尽了苦头。包括 oracle 数据分页没有 limit ,字段会自动变成大写,类型转换异常,模糊查询等等。针对一条数据的单独查询,比如,根据 id 查询数据,有如下代码:
2022-12-08 13:53:52 957
原创 镜像服务不连接线上 redis,连接 localhost ,导致服务注册不上去
现象:服务打包完成后,本地代码测试没有问题,发布到线上,其他服务调用,报错:没有获得服务 …5:到这里,已经有点没有办法了,尝试了删除节点,重新发布,结果还是一样的问题;打包发布到线上环境,发现服务注册成功,问题得到解决。1:第一反应是检查 redis 相关配置,检查后,发现并没有变化,排除;3:检查相关代码,是不是有触发 redis 的部分,经检查,没有,排除;4:检查 maven 依赖,是否是因为版本导致冲突,经检查,没有,排除;2:检查线上服务的 相关配置,经过对比,发现也没问题;
2022-10-14 18:54:14 696
原创 AQS 之 CyclicBarrier 源码分析
1:字面意思是可循环使用(Cyclic)的屏障(Barrier)。让一组线程全部到达屏障时,屏障才会开门,被屏障拦截的线程才会继续运行。先到达的线程处于阻塞状态。2:使用场景:可以用于多线程计算数据,最后合并结果的场景。3:CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset()方法重置。4:一般和固定数目线程池配合使用,线程数目二者最好定义相同默认构造方法 :传入拦截的线程总数进入重载方法:另一个构造方法3:阻塞方法 await需要等待的线程
2022-06-08 18:09:04 184
原创 AQS 之 CountdownLatch 源码分析
1:CountDownLatch 允许一个或多个线程阻塞,等待其他线程完成操作。2:有一个计数器,表示需要等待的事件数量传入 int 整数,作为初始化计数器的值进入 Sync(count) 方法3:阻塞等待方法调用 await() 方法进入 acquireSharedInterruptibly(1) 方法进入 tryAcquireShared(1) 方法回到 acquireSharedInterruptibly(1) 方法进入 doAcquireSharedInterruptibly(1)
2022-06-08 16:21:37 94
原创 AQS 之 Semaphore 源码分析
信号量:用来限制能同时访问共享资源的线程上限。和锁不一样,锁只有一个共享资源;信号量的共享资源有多个,对访问的线程上限做限制。作用:可以做限流,只适合单机版,只限制线程数量,而不是限制资源数(tomcat 连接数)可以作用于数据库连接池,享元模式下的,性能和可读性更好Semaphore semaphore = new Semaphore(n);进入NonfairSync(permits) 方法调用父类的 NonfairSync(permits) 方法3:获取信号量调用 acquire()方法
2022-06-07 22:11:27 106
原创 AQS 之 ReentrantReadWriteLock 源码分析
1:读锁不支持条件变量,写锁支持2:重入时升级不支持:即持有读锁的情况下去获取写锁,会导致获取写锁永久等待3:重入时降级支持:即持有写锁的情况下允许去获取读锁(获取写锁前必须释放读锁)4:拥有两把锁,共用 AQS 的 state ,不同的是写锁状态占了 state 的低16位,而读锁使用的是 state 的高16位thread-0 调用 WriteLock 的 lock() 方法进入 acquire(1) 方法进入 tryAcquire(1) 方法2.2:thread-0 加读锁:成功我们假设
2022-06-07 17:43:12 95
原创 AQS之 ReentrantLock 源码分析
AQS,全称是 AbstractQueuedSynchronizer ,抽象类,是阻塞式锁和相关的同步器工具的框架。有以下特点:子类主要需要实现 AQS 中下面一些方法,默认抛出 UnsupportedOperationException由于 ReentrantLock 提供了两个同步器,实现公平锁 FairSync 和非公平锁 NonfairSync ,默认是非公平锁。假设当前只有 thread-0 线程来加锁,那么进入 lock() 方法此时又来了 thread-1 线程,同样先进入到 lock
2022-06-06 22:32:28 133
原创 JAVA 字节码全解
文章目录1:IDEA 如何查看字节码文件1.1:通过File-->Settings... 打开 External Tools 窗口1.2:点击图中的“+”,填写内容1.3:选择一个java文件,右键选择 External Tools-->查看字节码(这是自己定义的名),即可查看字节码。2:查看字节码文件(需要 jvm 基础)2.1:基本的字节码2.2:带有异常的字节码2.3:带有 finally 块2.4:了解具体的字节码指令含义3:语法糖1:IDEA 如何查看字节码文件对于 IDEA 查看
2022-05-07 19:40:59 2171
原创 SpringCloud Netflix 全组件安装以及实战
文章目录1:介绍2:代码地址1:介绍本接上篇博客,本篇博客主要是使用使用 Netflix 的一套组件。包括:注册中心 :Eureka远程调用 :Feign/RestTemplate手动下线: Actuator登录验证:Security限流降级: Hystrix服务网关:Zuul链路跟踪:Sleuth 和 zipkin健康检查:Admin配置中心:Config邮件发送:Mail消息总线:Bus2:代码地址代码链接:https://gitee.com/jiang-qikun/sp
2022-03-12 19:19:47 611
原创 SpringCloud Alibaba 全组件安装以及实战
文章目录1:介绍2:项目技术选型3: 项目启动1:介绍SpringCloud 的组件很多,但是基本上可以分成三大类,一家是 netflix ,一个比较火的 Alibaba ,还有一个就是 SpringCloud 的。Netflix 的那一套比较全,也是较早使用比较多的。但是,随着 SpringCLoud Alibaba 组件的一些兴起,使得我们有了更多的选择。2:项目技术选型注册中心 : nacos远程调用 : feign限流降级: sentinel服务网关:gateway链路跟踪: sk
2022-03-04 19:25:10 419
原创 zookeeper的安装和集群搭建
文章目录1:准备2:集群搭建2.1:源码下载2.2:上传到 rocketmq-151 中并解压文件夹2.3:修改配置文件2.4:创建持久化目录并创建 myid2.5:将源码复制到其余三台机器2.6:152,153,154 创建 myid 文件夹2.7:四台机器配置环境变量2.8:关闭防火墙2.9:启动客户端2.10:选主测试1:准备我们还是准备上次搭建 rocketmq 集群的四台虚拟机来搭建,分别是 rocketmq-151, rocketmq-152, rocketmq-153, rocketmq-
2022-02-24 20:17:18 1003
原创 Redis 的分片集群搭建-预分区(Redis 自带)
文章目录1:注意2:单机预分区分片集群搭建2.1:修改 redis 配置文件,修改节点数2.2:启动全部实例2.3:给主机分配槽位(分赃)2.4:启动客户端,继续测试2.5:关闭3:手动预分区分片集群搭建(分布式场景下)3.1:创建实例3.2:手动分配节点3.3:手动分配数据3.4:其他命令1:注意前面两篇博客我们分别搭建了 基于代理的两种不同的分片集群,但是redis 自身其实还有一种预分区的分片集群方式。预分区:1:哈希法一开始把魔术值设置的较大,比如10个,取模是10,模数值得范围是:0,1
2022-02-23 21:22:30 926
原创 Redis 的分片集群搭建-代理方式(Predixy)
文章目录1:注意2:搭建 Predixy 代理2.1:获取源码地址2.2:linux 中下载2.3:解压2.4:对配置文件进行修改2.5:启动哨兵2.6:启动两对主从2.7:启动 Predixy2.8:启动 Predixy 客户端,我们去添加一些数据1:注意1:Predixy 和 上一篇说的 twemproxy 有异曲同工之处,起到代理的作用。但是不要尝试编译Predixy,因为我们一般是centos,而它需要需要支持C++11的编译器,因此我们需要编译完成的。2: Predixy 作者写了对比
2022-02-23 20:08:19 1127
原创 Redis 的分片集群搭建-代理方式(twemproxy)
文章目录1: 为什么 Redis 要分片?2: 分片集群的方法3:使用 twemproxy 搭建3.1: 克隆 twemproxy 源码3.2:安装 automoke 和 libtool3.3:编译3.4:启动 Redis 服务3.5:启动代理服务器 twemproxy1: 为什么 Redis 要分片?我们知道,一般由于单点故障会造成的问题有三种,分别是 :1:单点故障 2:容量有限 3:连接数,CPU压力而 主从集群可以缓解 1 和 3 ,但是对 2 却有点力不从心因此,便想到了将
2022-02-23 16:22:58 2071
原创 Redis 的主从搭建(哨兵模式)
文章目录1:配置哨兵的配置文件2:启动三台实例,搭建主从3:启动三台哨兵,进行监控4:手动下线主,观察选主注意:本接内容基于上一篇博客,Redis 的主从搭建(无选主功能):[https://blog.csdn.net/qq_40230026/article/details/123064702](https://blog.csdn.net/qq_40230026/article/details/123064702)1:配置哨兵的配置文件和上篇博客一样,还是使用 6380,6381,6382 三台实例搭
2022-02-22 16:43:55 1349
原创 Redis 的主从搭建(无选主功能)
文章目录1:准备2:搭建2.1:将三台实例的配置文件复制出来2.2:对配置文件进行改造2.3:分别启动三台实例2.4:让 6381 追随 63802.5:让 6381追随 6380查看日志,进行分析2.6:让 6382 追随 63801:准备在我们 redis 搭建的基础上,我们按照上次的方式再次创建一个 6381,6382 的实例( 6380 已经创建过了),为了搭建的方便性,我们在一台机器上,三台实例来搭建 redis 的主从,分别是:6380 主6381 从6382 从2:搭建2.1:将
2022-02-22 15:32:03 365
原创 Redis配置文件常用配置项
文章目录1:自己本机访问经常设置的1.1:网络问题1.2:本机访问保护1.3:是否后台运行1.4:设置密码2:生产环境需要设置的2.1:redis 连接设置2.2:redis 连接设置2.3:移除策略2.4:添加 modules2.5:定义日志存放路径2.6:定义日志级别2.7: 存放 pidfile 路径2.8:tcp-keepalive2.9: timeout1:自己本机访问经常设置的1.1:网络问题注释掉 bind=127.0.0.1默认情况bind=127.0.0.1只能接受本机的访问请求
2022-02-22 12:37:56 464
原创 Redis 的布隆过滤器的安装及其使用
文章目录1:什么是布隆过滤器1.1:使用场景1.2:布隆过滤器2:布隆过滤器的安装 (不要下载 master 版本)2.1: 找到源码压缩包地址2.2:linux 系统中进行下载2.3:编译2.4:启动 redis 挂载 redisbloom.so2.5:启动 redis 客户端3:布隆过滤器的使用4:布隆过滤器被穿透1:什么是布隆过滤器1.1:使用场景redis 中有这么个场景:缓存中没有,直接去数据库访问,其实数据库中也没有,数据库白白的浪费性能以上就是 redis 的缓存穿透问题,布隆过滤器就
2022-02-22 10:08:45 3817 1
原创 Rocketmq 结合springboot的使用
文章目录1: 准备2:创建 一个 Spring boot 服务,书写代码2.1:Procuder 端-制造消息2.1.1:配置文件2.1.2:配置类2.1.3: controller 类2.2:Consumer 端-消费消息2.2.1:配置文件(和 Procuder 一样)2.2.2:监听消息类2.3:启动服务,测试功能2.3.1:调用接口,发送消息2.3.2:通过 rocketmq console 查看消息情况3:写在末尾1: 准备1:启动一个 rocketmq 的服务,我还是用上次搭建的那个 基于
2022-02-16 20:13:17 1913 1
原创 RocketMQ集群搭建:基于DLedger的主备切换
文章目录1:RocketMQ 的 DLedger 介绍1.1:引子1.2:DLedger 的作用1.3:DLedger 的选举的注意点2:基于DLedger的主备切换集群搭建2.1:机器准备2.2:四台机器启动 NameServer2.3:配置 rocketmq-151 的配置文件(主)2.4:配置 rocketmq-152 的配置文件(备)2.4:配置 rocketmq-153 的配置文件(备)2.5:配置 rocketmq-154 的配置文件(备)3:启动控制台,查看集群情况4:测试选主1:Rocke
2022-02-16 14:09:51 1876
原创 RocketMQ 的双主双从集群搭建
文章目录1:介绍2:准备2.1 准备虚拟机2.2 修改虚拟机的ip地址1:介绍1:本次搭建集群采用异步复制,主备有短暂消息延迟,毫秒级2:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master 宕机后,消费者仍然可以从 Slave消费,此过程对应用透明。不需要人工干预。3:Master 宕机,磁盘损坏情况,会丢失少量消息。这个是 rocket 3.5 之前都存在的,3.6之后可以支持主备切换,这个我们下次搭建。2:准备准备了 4台虚拟机,IP 地址准备设置成192.168.1
2022-02-15 22:16:31 3020
原创 Linux下 redis 的安装和启动
文章目录1:GitHub 下载源代码2:linux 上编译2.1: 将上传后的 redis 代码进行解压到 /usr/local 下(个人习惯)2.2: 安装 redis 编译 需要的 gcc 套件2.3: 编译 redis 文件夹3:redis 的启动3.1 查看 redis 是否启动3.2:1:GitHub 下载源代码redis 官网: https://redis.io/将下载好的 redis 源代码 通过 xftp 上传到 linux 服务器上,我这里用的不是最新版,是以前下载过的2:li
2022-02-14 19:04:42 1677
原创 RocketMQ 和 控制台的安装
文章目录1:rocketmq 的安装1.1:rocketmq 的下载1.2:rocketmq 源码的解压1.3:在Linux上安装Maven:编译使用1.4:编译 rocketmq 项目1.5:修改 runserver.sh 参数1.6:修改 runbroker.sh 参数1.7:启动nameserver1.8:启动 mqbroker1.9:测试消息发送使用`tool.sh`脚本执行测试程序2:安装过程中错误总结2.1: 编译时包无法在mirror上找到 提示502错误2.2:发送失败提示connect t
2022-02-14 14:17:50 2353 2
原创 RoctetMQ 如何保证顺序消费
文章目录1:背景2:发送端3:消费端1:背景在一些特殊的场景下,需要保证消息的顺序性,rocketMQ 提供了确实有效的解决方法。需要发送端和消费端同时保证才行。总结下来,需要满足下面几个条件:1:同一个Topic2:同一个Queue3:发消息的时候用同一个线程发送消息3:消费消息的时候用同一个线程消费一个 Queue 里面的消息,或者用提供的消息选择器 MessageListenerOrderly2:发送端示例代码: /** * 发送顺序消息 */ p
2022-02-10 20:18:26 2149
原创 详解 @Autowired
文章目录1:@Autowired 用法2:加在方法上,走设值注入,还是构造注入?1:@Autowired 用法先说结论:@Autowired可以加在实例字段上,但是会忽略静态字段。可以加在方法上,但是要求方法要有入参,不可以加在静态方法上具体查看:AutowiredAnnotationBeanPostProcessor 类buildAutowiringMetadata()方法2:加在方法上,走设值注入,还是构造注入?结论:走设值注入,具体自行验证...
2021-03-29 15:59:06 239
原创 设计模式大纲
1:单例模式:一般由spring的bean工厂保证饿汉式:类加载的时候就会创建懒汉式:使用时才创建,会造成线程不安全解决方法:方法上加锁,会降低效率同步代码快加锁,达不到单例效果,需要双重检查加锁。枚举单例:没有构造方法,可以防止序列化,也可以线程同步。内部类:内部类返回一个外部类实例,JVM只会加载一次类,加载外部类时也不会加载内部类2:策略模式java.util.Comparator接口和java.lang.Comparable接口需求:一开始是对int[]排序,然后又想对float
2021-02-26 16:17:01 86
原创 Java对象中实例数据发生的间隙填充alignment/padding gap条件是什么?
文章目录1: alignment/padding gapshi是什么?2: 验证什么条件下会出现alignment/padding gap3:结论1: alignment/padding gapshi是什么?先看一张图:对象分四部分:圈住的第一部分包括:8字节的makedown+4字节的类型指针圈住的第二部分是实例数据圈住的第三部分是8字节对齐,padding如果这些知识不清楚的话没必要往下看了,今天我们要说的是示例数据中出现alignment/padding gap的条件是什么?2: 验
2021-02-24 23:19:25 1232 7
原创 http 的 keep-alive 机制(链接复用)
文章目录1:什么是http 的 keep-alive 机制2:造成的问题:长时间不连接2.1:设置timeout造成的问题:NoHttpResponseException1:什么是http 的 keep-alive 机制可以看到每个 TCP 连接都要经过三次握手建立连接后才能发送数据,要经过四次挥手才能断开连接,如果每个 TCP 连接在 server 返回 response 后都立马断开,则发起多个 HTTP 请求就要多次创建断开 TCP, 这在 Http 请求很多的情况下无疑是很耗性能的, 如果在
2020-12-09 11:42:33 2057
转载 长链到短链转化
文章目录1:为什么将长链转化为短链?2:短链跳转的基本原理3:将长链转化为短链(Hash)3.1:hash3.1.1:hash算法的选取3.1.2hash后还是有点长3.1.3:解决hash冲突3.2:自增序列算法1:为什么将长链转化为短链?1、链接变短,在对内容长度有限制的平台发文,可编辑的文字就变多了(比如短信链接,微博链接等对字数有要求)2、我们经常需要将链接转成二维码的形式分享给他人,如果是长链的话二维码密集难识别3、便于用户粘贴复制,形式上比较美观2:短链跳转的基本原理在浏览器输入短链
2020-12-09 11:13:05 6966
原创 volatile和synchronized的底层实现原理
文章目录一:volatile1:字节码层面2:JVM层面3:CPU层面层面二:synchronized1:字节码层面2:JVM层面3:CPU层面一:volatile关于volatile的功能无非是两个:1:保证保证线程间变量的可见性2:防止指令重排序下面我们就从字节码层面,JVM层面,CPU层面来解析是如何做到的。1:字节码层面首先编写一个很简单的类:public class TestVolatile { int i; volatile int j;}编译并查看字节码:
2020-11-24 13:36:10 537 2
原创 React中浅拷贝和浅拷贝
文章目录1:深拷贝和浅拷贝的区别2:浅拷贝的使用最近,学习和使用了react+ts的一些基本语法,使用过程中遇到了深拷贝和浅拷贝的问题:修改数据后,控制台打印数据已经改变,但是页面却不显示。多亏了同事的帮忙,一言难尽。下面把问题简单记录下。1:深拷贝和浅拷贝的区别浅拷贝:两个变量都是指向一个地址,改变了一个变量,另一个变量也随之改变。这也是浅拷贝带来的副作用,两个变量会相互影响到,因为它们指向同一个地址。深拷贝:两个变量互相独立,指向的是不同的地址。好处是其中一个变量改变了,另外一个变量不受影响。
2020-11-18 09:37:52 441
原创 IDEA或者Webstorm提交代码报错fatal: remote origin already exists.
解决方法://移除关联的远程库git remote rm origin//连接新的远程库:注意,仓库名称git remote add origin https://github.com/XXX/XXXX git push -u origin main
2020-10-09 13:32:06 461
原创 IDEA或者Webstorm提交代码commit报错
类似这样的报错Commit failed with error 0 file committed, 3 files failed to commit: 样式和函数实现 > running pre-commit hook: npm run precommit > ant-design-pro@4.2.1 precommit 。。。 > lint-staged [STARTED] Preparing... [SUCCESS] Preparing.
2020-10-09 13:04:45 3681
原创 Linux下Docker及Docker-compose的安装及项目部署实战
文章目录1:Docker的安装2: Docker Compose的安装1:Docker的安装1:安装1: yum install -y yum-utils device-mapper-persistent-data lvm22: yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3: yum makecache fast4: yum -y instal
2020-09-09 14:03:56 541
原创 Linux下jdk,maven,tomacat和mysql的安装
文章目录1: jdk的安装2:tomcat的安装3:mysyl的安装1: jdk的安装2:tomcat的安装liunx的tomcat安装包:.tar.gz格式1:直接在Xftp中将安装包拖到home/mytest下2:进入命令行cd home/mytestlltar -zxvf tomcat文件名 -C /usr/local/ 解压文件夹3:完成后,进入到 cd/usr/localll4:进入到tomcat安装包中cd binll./startup.sh 启动
2020-09-01 23:44:23 264
原创 JVM一:JVM入门以及Class文件认识
从此篇博客开始,专注JVM相关内容,从浅到深.JVM入门什么是JVM其实:JVM是一种规范,人们常说Java是跨平台的语言,而JVM帮助屏蔽了不同操作系统的底层,是跨语言的平台.它不仅仅应用于Java语言,它是可以认识所有能编译成.class格式的文件(字节码文件).JVM和JDK,JRE的关系(面试有可能问)JVM的常见实现其中,我们目前安装JDk使用的是HotSpot,这个是oracle官方那个是用的,有很多实力公司不依赖oracle公司的这个,他们会根据JVM规范自己实现一些虚拟机,
2020-07-26 21:50:25 215 3
原创 Lamaba表达式学习及常用函数式接口
Lambda表达式一、Lambda表达式简介什么是Lambda?Lambda是JAVA 8添加的新特性,说白了,Lambda是一个匿名函数为什么使用Lambda使用Lambda表达式可以对一个接口的方法进行非常简洁的实现Lambda对接口的要求虽然可以使用Lambda表达式对某些接口进行简单的实现,但是并不是所有的接口都可以用Lambda表达式来实现,要求接口中定义的1:必须要实现的抽象方法只能是一个2:在JAVA8中 ,对接口加了一个新特性:default可以使用default对接口方
2020-07-25 17:45:08 509 2
原创 多线程与高并发六:线程池源码解析
ThreadPoolExecutor源码解析1、常用变量的解释// 1. `ctl`,可以看做一个int类型的数字,高3位表示线程池状态,低29位表示worker数量private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));// 2. `COUNT_BITS`,`Integer.SIZE`为32,所以`COUNT_BITS`为29private static final int COUNT_BITS = Integ
2020-07-25 14:22:37 95 2
原创 多线程与高并发五:等待队列及Executor和线程池详解
一:等待队列关于创建线程池的好处这里就不介绍了,直接上干货.首先,要想弄明白线程池,先要认识一些队列,这是线程池的基础.多线程容器,以后多考虑Queue,少考虑List,Set.这里来一道面试题:Queue相比较list比较好的地方? 有对多线程比较友好的接口,有以下方法:offer:----相当于add,会有返回值,成功了返回turepoll:取数据并且remove掉peek:取数据不remove掉BlockingQueue在线程池里是经常出现的队列:它是阻塞队列.多了下面的阻塞方法.p
2020-07-21 23:53:06 2798 1
maven 的windows 安装包,包括 3.6.3,3.6.0,3.5.4 三个版本
2022-11-27
nacos 的两个源码版本:分别是 nacos-1.4.3 和 nacos-2.0.4
2022-02-25
docker单机部署文件---bsbdj.rar
2020-09-11
rocketmq及其可视化控制台concle包下载.rar
2020-09-02
mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
2020-09-02
apache-tomcat-9.0.37.rar
2020-09-02
maven.rar=maven安装包+maven仓库
2020-07-01
apache-tomcat-9.0.13.rar
2020-07-01
eclipse-jee-mars-2-win32.zip
2020-07-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人