自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(166)
  • 收藏
  • 关注

原创 Java AbstractQueueSynchronizer(AQS)源码总结从数据结构层面理解AQS

版本JDK8(JDK1.8)AbstractQueueSynchronizer虚拟类源码重点AbstractQueueSynchronizer虚拟类部分源码package java.util.concurrent.locks;import java.lang.invoke.MethodHandles;import java.lang.invoke.VarHandle;import java.util.ArrayList;import java.util.Collection;import

2021-10-22 14:45:58 409

原创 使用线程池的shutdown()使主线程等待子线程执行完所有任务是错误的

主线程给所有的子线程发送中断信号,而子线程当执行完手上的任务的时候就会先去检测是否已经收到了中断信号(其实就是一个布尔型的值,是否被设置了),如果已经检测到中断信号了,则不会去阻塞队列中取出新的任务,所以所有任务是不会执行完毕的。CountDownLatch有一个计数器,子线程负责将计数器减一,主线程负责调用await()等待,当某个子线程将计数器减为0的时候,就会唤醒主线程。Future.get()时是阻塞的,会等待子线程执行完毕主线程才能获取到结果,相当于主线程在等待该子线程。

2023-08-28 17:07:10 268

原创 maven私服打包不成功

配置多个mirror标签,默认也只生效第一个mirror标签,如果私服版本库不全,又想同时用其他仓库必须使用profile标签,再通过activeProfile激活多个profile配置,mirror配置可以清空,如下配置</</</</</</</</</</</</</</</</</</</</</</</</</</</

2023-08-24 09:35:38 642

原创 多页面应用多次引入同一个资源优化方法

项目是多页面应用,每个界面都会引入一次layui框架源码,造成未优化之前界面加载十分缓慢。

2023-08-24 00:04:44 295

原创 线程池执行带有自己定义的变量Runnable以及Callable任务时,必须每次都新建任务

其结果都为B,由于主线程会比子线程快速执行完,所以两次任务都用到的是同一个变量。

2023-07-22 14:35:27 155

原创 设计模式:干掉if else的几种方法

1.将所有的策略中存储在一个Map中,这样当我们需要增加逻辑时只需要增加一个put即可,代码可扩展性很强,而且getStrategy()里面的代码和使用getStrategy()方法的核心逻辑都无需修改。使用策略模式,可以发现策略模式和多态其实也没有多大的区别,但关键就在于getStrategy()方法,它的实现的多变,可以大大提高代码的可扩展性,无需修改了核心代码。2.策略名可以在最开始的配置代码中传入,如配置类中就传入。

2023-05-22 15:18:57 2522 1

原创 Linux操作系统基础知识命令参数详解

Linux操作系统

2023-02-24 13:50:57 1159

原创 Linux的sysstat(sar)的详细使用

Linux的sysstat(sar)的详细使用

2023-02-15 17:17:11 638 1

原创 Elasticsearch启动异常: No up-and-running site-local (private) addresses found

org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: No up-and-running site-local (private) addresses found, got [name:lo (lo), name:virbr0 (virbr0)]

2022-09-19 09:12:46 1089

原创 使用Java自己实现线程池

使用Java自己实现线程池

2022-06-14 17:30:22 917

原创 Java ClassLoader 虚拟类实现代码热替换

Java ClassLoader 虚拟类实现代码热替换,极简实现

2022-06-11 15:40:42 805

原创 Springboot两个关于配置文件的注解

文章目录@ConfigurationProperties注解中文乱码注意在类方法上使用@Value注解@ConfigurationProperties注解这个注解用于从配置文件中取值,如下通过在实体类上添加@ConfigurationProperties同时写上前缀myuser,使用的时候需要通过@Autowired注入然后才能看到读取了配置文件值@RestController@RequestMapping("/test")public class TestController { @Au

2022-04-28 16:40:26 1532

原创 打包Springboot项目并配置https协议访问

文章目录项目目录创建密钥文件将虚拟机文件传到宿主机启动项目打包项目部署项目项目目录项目非常简单,就是用来测试的HttpsApplication.class@SpringBootApplicationpublic class HttpsApplication { public static void main(String[] args) { SpringApplication.run(HttpsApplication.class); }}HttpsContr

2022-04-17 20:52:21 2054 2

原创 从零开始搭建Elasticsearch集群遇到的问题

文章目录安装Elasticsearch下载elasticsearch-8.1.2-linux-x86_64.tar.gz使用Xshell将文件传入虚拟机解压启动elasticsearch创建新用户和授权安装Elasticsearch下载elasticsearch-8.1.2-linux-x86_64.tar.gz链接:https://pan.baidu.com/s/1Ru85WpIq8uTfj0ucEftvJg提取码:wxcd下载得到elasticsearch-8.1.2-linux-x86_64

2022-04-10 17:11:07 2557

原创 使用AOP自己实现SpringCache的功能

文章目录总结自己实现SpringCache的功能项目地址项目结构自定义缓存AOP实现类自定义缓存实现类使用总结SpringCache定义了@Cacheable、@CachePut、@CacheEvict三个注解,分别对应查询、更新、删除时对缓存的处理只需要在Server类添加该注解,就可以通过AOP自动代理实现缓存查询、缓存更新、缓存删除,使用形式如下,@Cacheable、@CachePut会在unless条件成立时将返回值添加进缓存,而@Cacheable在有缓存时不会执行Server类方法。@

2022-04-04 19:38:38 658

原创 SpringCache的CacheManager接口和Cache接口

总结SpringCache定义了@Cacheable、@CachePut、@CacheEvict三个注解,分别对应查询、更新、删除时对缓存的处理只需要在Server类添加该注解,就可以通过AOP自动代理实现缓存查询、缓存更新、缓存删除,使用形式如下,@Cacheable、@CachePut会在unless条件成立时将返回值添加进缓存,而@Cacheable在有缓存时不会执行Server类方法。@CacheEvict会直接删除缓存名为value的缓存中的键值对的键为key的键值对 @Override

2022-04-03 19:37:53 2211

原创 SpringAOP的JoinPoint类

文章目录总结JoinPoint类方法Signature 类方法总结JointPoint类是AOP编程中用来描述切入点的类一般用法如下,通过JoinPoint可以获取被代理方法的各种信息,如方法参数,方法所在类的class对象,然后执行反射操作@Before(value = "pointcut()")public void before(JoinPoint joinPoint) { }JoinPoint类方法方法名作用Object getThis()获取代理类对象

2022-04-03 15:06:18 2247

原创 RocketMQ使用总结

文章目录消息发送普通消息同步消息异步消息单向消息顺序消息批量消息sql过滤事务消息重复消费问题防止消息丢失丢失消息发送普通消息生产者多次循环发送该消息,broker收到消息顺序会不一致,因为convertAndSend并没有等上一条信息发送完并收到响应再发送下一条消息@GetMapping("/send")public String send() { rocketMQTemplate.convertAndSend("topic","普通消息"); return "发送成功";}同步消息

2022-04-01 20:58:59 1858

原创 从零开始搭建Kafka集群遇到的问题

文章目录安装kafka下载kafka_2.12-3.1.0.tgz使用Xshell将文件传入虚拟机解压启动kafka使用kakfa自带的zookeeper修改kafka配置启动kafka使用kafka创建主题查看主题生产消息消费消息搭建kafka集群搭建zookeeper集群修改配置启动zookeeper集群搭建kafka集群修改配置启动kafka集群安装kafka下载kafka_2.12-3.1.0.tgz链接:https://pan.baidu.com/s/1TWROqaFLmqaXPcEYzUU

2022-03-29 19:09:40 3982

原创 Java实现Treap树

文章目录Treap树数据结构遍历查询增加删除完整代码Treap树Treap树是平衡二叉搜索树的一种实现方式,但它不是完全平衡的。平衡二叉搜索树的实现方式还有AVL树、红黑树、替罪羊树、伸展树数据结构Treap树的节点除了有二叉搜索树的class TreeNode { int value; int priority; TreeNode left; TreeNode right; public TreeNode(int value, int priority)

2022-03-08 16:22:31 474

原创 从零开始开发HTTP服务器遇到的问题(一)

文章目录初步尝试HTTP请求接收HTTP响应构建线程池示例线程池参数阻塞队列拒绝策略默认线程池初步尝试HTTP请求接收有两种策略,第一种如下,直接使用InputStream 进行接收,将bytes字节数组的长度设置大一点,可以一次性接收请求报文。public void receive() throws Exception { ServerSocket serverSocket = new ServerSocket(9000); Socket socket = serverSocket.accep

2022-03-04 14:37:15 676

原创 Dubbo使用总结

文章目录负载均衡使用负载均衡策略随机(random)轮询(round robin)最少活跃调用数(least active)一致性hash(consistent hash)集群容错集群容错策略失败自动切换(failover)快速失败(failfast)失败安全(failsafe)失败自动恢复(failback)并行调用OR(forking)广播调用AND(broadcast)服务分组多版本结果缓存缓存策略lruthreadlocal泛化调用回声测试负载均衡使用多个服务提供者配置,server.port

2022-03-01 16:56:29 1742

原创 @HystrixCommand注解不起作用

问题服务层加了@HystrixCommand,在我主动关闭消费者时不执行降级逻辑,而直接报错@Servicepublic class RibbonService { @Autowired RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "addServiceFallback") public String addService() { return restTemplate.ge

2022-02-27 21:07:10 1261 1

原创 从零开始搭建RabbitMQ集群遇到的问题

文章目录安装RabbitMQ安装el环境安装RabbitMQ安装RabbitMQ安装el环境RabbitMQ运行在el环境,所以安装RabbitMQ之前必须安装el环境,使用yum安装需要先进root权限yum -y updateyum install epel-releaseyum -y install erlang socat查看安装是否成功erl -version出现如下情况说明安装el环境成功了安装RabbitMQ进入网址https://github.com/rabbi

2022-02-26 22:11:04 2167

原创 关于Dubbo的mock=true降级无法调用降级类ServiceMock的解决方案

问题消费者使用mock=“true”,想调用TestServiceMock进行服务降级无法调用原因我的项目结构如下,首先要知道服务降级代码应该是谁执行的,服务降级是服务消费者也就是controller包处对应的服务执行的,因为我只是测试dubbo怎么使用,所以并没有分多模块,但完全可以把一个包理解为一个模块,再看下面配置文件为什么可以把一个包当成一个模块呢,因为我把配置文件的scan改成controller包然后启动一个服务器,即消费者,如果把scan改成service则可以启动服务提供者服务器

2022-02-25 18:47:41 1253

原创 从零开始搭建zookeeper+dubboAdmin+dubbo遇到的情况

文章目录前言下载zookeeper解压修改配置文件启动zookeeper下载dubboAdmin解压dubbo-admin-develop.zip修改配置mvn打包启动dubbo-admin服务器登录dubbo-admin使用dubbo简单构建负载均衡前言博主使用了虚拟机搭建了zookeeper集群,但是dubboAdmin在宿主机运行,无法连接到虚拟机里面的zookeeper集群,配置了防火墙也没用,但在宿主机上搭建zookeeper服务器,可以秒连接,可能是由于dubboAdmin设置了连接超时,如

2022-02-25 13:07:20 3280 4

原创 Linux 从零开始部署zookeeper集群遇到的问题

文章目录安装JDK环境安装zookeeper下载zookeeper解压修改配置启动服务器搭建集群修改配置启动三个Zookeeper进程安装JDK环境ZooKeeper是用Java编写的,运行在Java环境上,因此,在部署zk的机器上需要安装Java运行环境下面是JDK8的压缩包链接:https://pan.baidu.com/s/1oeEFRXHNCB8uHOB1mc86EQ提取码:64u0下载好后,使用Xshell进行传递文件给虚拟机,主机就是ifconfig里面的ens33里面的IP地址,选

2022-02-23 18:56:09 478

原创 Linux 从零开始部署RocketMQ集群遇到的问题

文章目录1.虚拟机ens33没有IP地址2.开始安装RocketMQ3.解压安装好的rocketmq-all-4.9.2-source-release.zip4.安装Maven5.构建RocketMQ之间必须安装JDK6.开始构建RocketMQ项目7. 启动namesrv8.启动Broker时内存不够1.虚拟机ens33没有IP地址使用ifconfig命令发现ens33没有IP地址,ens33地址就是用于主机和虚拟机里面的主机通信的IP地址有两种原因,如下:/etc/sysconfig/netw

2022-02-22 18:42:56 1996

原创 从零开始搭建Redis集群遇到的问题

文章目录安装Redis下载软件包使用Xshell将文件传入虚拟机解压并编译修改配置启动Redis使用RedisDesktopManager连接Redis主从复制搭建准备主机配置从机配置启动哨兵切换搭建修改配置关闭主redis观察主从切换Redis集群部署准备安装Redis下载软件包上官网https://redis.io/download安装下载得到redis-6.2.6.tar.gz文件使用Xshell将文件传入虚拟机使用sftp协议,主机ip是在命令行输入ifconfig中ens33中的ip

2022-02-21 00:22:00 1456

原创 JVM之内存区域与内存溢出异常

文章目录概述Java运行时数据区域程序计数器(Program Counter Register)虚拟机栈(VM Stack)本地方法栈(Native Method Stack)堆(Heap)方法区(Method Area)运行时常量池(Runtime Constant Pool)直接内存(DIrect Memory)参考概述Java运行时数据区域包括如下部分:线程独享程序计数器(Program Counter Register)虚拟机栈(VM Stack)本地方法栈(Native Method

2022-01-23 11:18:19 620 1

原创 Java InputStreamReader类

文章目录总结InputStreamReader类方法构造方法操作方法总结InputStreamReader是从字节流到字符流的桥梁, 它读取字节并使用指定的java.nio.charset.Charset将其解码为字符。它使用的字符集可以通过名称指定,也可以显式指定,或者可以接受平台的默认字符集,实质是通过字符集创建字符集解码器CharsetDecoder,通过解码器实现读取字节并转换成字符每次调用InputStreamReader的read方法之一都可能导致从底层字节输入流读取一个或多个字节,为了

2022-01-12 17:49:07 3474

原创 Java Reader虚拟类

总结Reader虚拟类是用于读取字符流的抽象类Reader虚拟类子类必须实现的方法是read(char[], int, int)和close(),但是,大多数子类将重写此处定义的一些方法,以提供更高的效率或附加功能Reader虚拟类数据结构public abstract class Reader implements Readable, Closeable { protected Object lock; private static final int maxSkipBufferSize

2022-01-12 17:19:43 255

原创 Java FileOutputStream类

总结FileOutputStream类用于将数据写入文件或文件描述符的输出流FileOutputStream用于写入原始字节流,如图像数据,如果要写入字符流,可以考虑使用FileWriterFileOutputStream类数据结构public class FileOutputStream extends OutputStream { private final FileDescriptor fd; private final String path; private vola

2022-01-12 16:38:49 4465

原创 Java SeekableByteChannel接口

总结SeekableByteChannel接口是一种维持了当前位置并允许改变位置的字节通道SeekableByteChannel接口它在文件中维持一个当前位置position,可以修改当前位置position在任意位置读取(读取越界会报错)和写入数据(写入越界会增加文件长度),当写入的字节超过其当前大小时,文件的大小会增加, 当调用truncate方法时,文件大小减小position(long)和 truncate(long size)方法返回调用者其本身,所以能够支持链式调用SeekableB

2022-01-12 16:05:03 810

原创 Java FileInputStream类

总结FileInputStream类方法方法名作用

2022-01-11 12:49:11 1405

原创 Java FileChannel虚拟类

文章目录总结FileChannel虚拟类方法打开文件选项总结FileChannel虚拟类方法方法名作用static FileChannel open(Path path, Set<? extends OpenOption> options, FileAttribute<?>… attrs)打开或创建文件,返回访问该文件的文件通道。 path是要打开或创建的文件路径和文件名,options打开文件选项,

2022-01-11 11:57:25 693

原创 Java CyclicBarrier类

总结CyclicBarrier类提供一个屏障方法,可以让指定数量的线程一起同步,在构造方法CyclicBarrier(int parties, Runnable barrierAction)的parties指定需要同步的线程数,barrierAction是当指定数目的线程同步的时候会自动执行barrierAction方法,由最后一个线程调用CyclicBarrier类实现原理非常简单,维持一个计数器计时器CyclicBarrier类方法方法名作用CyclicBarrier(i

2022-01-10 11:24:21 290

原创 数据库系统概念之索引与散列

文章目录基本概念索引类型索引好坏衡量标准顺序索引索引种类索引的更新B+树索引叶结点非叶结点平衡树范围查询结点分裂结点合并不唯一搜索码B+树文件组织批量加载自底向上B+树构建B树索引静态散列桶散列函数桶溢出偏斜闭地址动态散列可扩充散列多码访问多码索引位图索引位图操作基本概念索引是由于需要快速访问文件中的记录(行)这种需求而产生的,通过索引可以快速定位到文件中的某条记录在哪个块中索引类型有两种基本的索引类型:顺序索引:根据值的顺序对记录进行顺序排序,然后建立的索引,也可以是值不排序,但是对值的索引进

2022-01-04 16:53:32 2722

原创 Linux 基本命令

文章目录日期类命令重要的热键求助命令其他命令正确的关机方法Linux文件属性修改文件属性和权限目录和文件的权限意义文件和目录管理执行文件的路径遍历复制、删除与移动查看文件内容修改文件时间或创建新文件文件与目录的默认权限与隐藏属性文件的查找参考日期类命令date date +%Y/%m/%d date +%H:%M cal cal 2015 cal 10 2015 date 结果为Sun Jan 2 13:01:52 CST 2022date +%Y/

2022-01-02 17:03:47 676

原创 纠正对@DataTimeFormat和@JsonFormat的误解

纠正对@DataTimeFormat和@JsonFormat的误解

2021-12-30 21:28:27 745 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除