自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 cxf报错 Cannot find any registered HttpDestinationFactory from the Bus

错误信息:Cannot find any registered HttpDestinationFactory from the Bus.报错主要是因为缺少jetty依赖一般添加如下依赖即可<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <

2021-01-13 16:17:33 18

原创 缺少org.apache.commons.collections.CollectionUtils?

也许你正在寻找的jar是apache commons-collections: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> </dependency>要么&l

2021-01-08 13:46:39 40

原创 Redis IO多路复用技术以及epoll实现原理

系列文章目录文章目录系列文章目录前言1. redis是基于缓存的2. Redis为什么这么快?3.IO多路复用技术4.Redis线程模型4.1 I/O多路复用程序、文件事件分派器前言redis 是一个单线程却性能非常好的内存数据库, 主要用来作为缓存系统。 redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。1. redis是基于缓存的官方文档介绍说,Redis的操作都是基于内存的,CPU不是 Redis性能瓶颈,,Redis的瓶颈是机器内存和网络带宽。Reds是C语言

2021-01-07 20:39:02 38

原创 IO模型详解

系列文章目录文章目录系列文章目录1、理解用户空间和内核空间2.PIO与DMA3.缓存IO和直接IO3.1缓存IO4.磁盘IO和网络IO对比5.同步IO和异步IO6.阻塞IO和非阻塞IO1、理解用户空间和内核空间简单说,Kernel space 是 Linux 内核的运行空间,User space 是用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃了,内核也不受影响。虚拟内存被操作系统划分成两块:内核空间和用户空间,内核空间是内核代码运行的地方,用户空间是用户程序代码运行的地方。当进程

2021-01-07 14:37:02 24

原创 Queue集合之PriorityBlockingQueue详解

集合系列文章文章目录集合系列文章前言1、PriorityBlockingQueue是什么?2、查看类图接口3.源码解析3.1 构造器3.2 offer操作3.2.1 扩容3.2.2 建堆算法3.2.3 图文解释3.3 poll操作3.3.1 dequeue出队源码3.3.2 siftDownComparable堆调整源码总结前言1、PriorityBlockingQueue是什么?集合中无界优先队列 priorityBlockingQueue内部使用堆算法保证每次出队都是优先级最高的元素,元素入

2021-01-05 16:58:09 36 1

转载 HashMap之1.7和1.8的区别

HashMap是我们开发中经常使用到的集合,jdk1.8相对于1.7底层实现发生了一些改变。1.8主要优化减少了Hash冲突 ,提高哈希表的存、取效率。底层数据结构不一样,1.7是数组+链表,1.8则是数组+链表+红黑树结构(当链表长度大于8,转为红黑树)。JDK1.8中resize()方法在表为空时,创建表;在表不为空时,扩容;而JDK1.7中resize()方法负责扩容,inflateTable()负责创建表。1.8中没有区分键为null的情况,而1.7版本中对于键为null的情况调用putFo

2020-12-30 17:10:33 34

原创 jdk1.7下HashMap的头插法问题

jdk1.7,hashmap才用的是头插法,虽然hashmap并不是线程安全的容器,但是在并发情况下,使用hashmap会带来一个问题:并发情况下,如果插入元素的两个线程都调用了rehash方法,即扩容方法,会导致链表成环的问题。hashmap成环原因的代码出现在transfer代码中,也就是扩容之后的数据迁移部分(如下):/** * Transfers all entries from current table to newTable. */ void transfer

2020-12-30 14:41:34 115

原创 mybatis的一级缓存详解

文章目录1、mybatis一级缓存是什么2、代码示例2.1.结果展示:2.2.现象解析3、有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据3.1代码如下:3.2结果:4、总结1、mybatis一级缓存是什么使用缓存可以使应用更快的获取数据,避免频繁的数据库交互,尤其是在查询越多、缓存命中率越高的情况下,使用缓存的作用就越明显。MyBatis作为持久化框架,提供了非常强大的查询缓存特性,可以非常方便的配置和定制使用。 一级缓存(也叫本地缓存)默认会启用,并且不能控制,因此很少提

2020-12-28 15:44:58 17

原创 kafka集群搭建和操作详解

1.kafka官网https://kafka.apache.org/2.下载地址wget https://mirror.bit.edu.cn/apache/kafka/2.7.0/kafka_2.12-2.7.0.tgz3.解压并复制三个kafkatar zxvf kafka_2.12-2.7.0.tgzcp -r kafka_2.12-2.7.0 kafka01cp -r kafka_2.12-2.7.0 kafka02cp -r kafka_2.12-2.7.0 kafka034.修

2020-12-27 14:58:46 73

转载 Java中Bitmap的实现

说bitmap之前,我们要明白数字在内存中的表示,如果说byte用8个二进制位表示,即可以表示2^8 = 256个数,每个byte占8位,即每个byte占8行,在内存中这样形象的表示:---------------1 1 1 0 1 1 1 1 ---------------1 0 1 1 1 1 1 1 ---------------0 0 0 0 1 1 1 1 ---------------....而bitmap结构,充分利用了每一行所有的位数,它将每个位置作为一个数,那么一行就可

2020-12-23 14:52:58 44

原创 队列顺序消费例子

1.orderProducerpackage com.redis.example.demo.rocketmq.provider;import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocketmq.client.producer.MessageQueueSelector;import org.apache.rocketmq.client.producer.SendResult;import

2020-12-18 08:34:11 24

原创 jenkins创建工作流

1.新建item2.创建流水线3.保持最大构建数4.git parameter5.凭据参数6. git project url7. docker tag8. 脚本pipeline { agent any environment { HARBOR_HOST="192.168.**.**" HARBOR_USER="Jenkins" HARBOR_PASS="****" BUILD_TARGET="ta

2020-12-16 16:43:49 28 1

转载 【rocketmq系列】第三篇消息过滤机制

本文主要阐述 ClassFilter过滤机制实现。文章目录一、ClassFilter 消息过滤机制 FilterServer详解2.1 ClassFilter模式 消息过滤类注册机制DefaultMQPushConsumerImpl#subscribeMQClientInstance#sendHeartbeatToAllBrokerWithLock重点关注MQClientInstance#uploadFilterClassSource方法继续进入MQClientInstance#uploadFilter

2020-12-10 17:55:05 49

原创 Github PageHelper 原理解析

对数据库的日常操作,都离不开增删改查。如果一次查询的纪录很多,那我们必须采用分页的方式。对于一个Springboot项目,访问和查询MySQL数据库,持久化框架可以使用MyBatis,分页工具可以使用github的 PageHelper。我们来看一下PageHelper的使用方法:@Servicepublic class UserServiceImpl implements UserService { @Resource private UserMapper userMapper;

2020-12-02 10:49:46 34

原创 tomcat架构解析

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201128124708557.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2IxMzAzMTEwMzM1,size_16,color_FFFFFF,t_70#pic_center) * Server 表示整个servlet容器,因此Tomcat容器中...

2020-11-28 12:47:54 52

原创 rocketmq系列第二篇【消息消费源码解析】

消息消费的原理对于我们理解消息队列的运行十分有帮助,今天我们来了解rocketmq的push模式消费。1.消费入口PushConsumerimport java.util.List;import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;import org.apach

2020-11-23 11:13:55 36

原创 Java使用Cipher类实现加密的过程详解

文章目录前言一、简单实现加解密1.1加密1.2、解密1.3 代码解释2. Cipher类2.1 Cipher类提供了加密和解密的功能。2.2 Cipher对象需要初始化2.3 加密或解密前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、简单实现加解密1.1加密/** * 加密 * * @param

2020-11-16 13:50:28 168

原创 Thread.join的作用和原理

Thread.join的作用和原理文章目录Thread.join的作用和原理前言一、Thread.join的作用Java中如何让多线程按照自己指定的顺序执行?1.join不被注释的情况2.join注释的情况二、Thread.join的实现原理1.线程是如何被阻塞的?又是通过什么方法唤醒的呢?先来看看Thread.join方法做了什么事情三、什么时候会使用Thread.join前言简单了解thread.join的作用一、Thread.join的作用Java中如何让多线程按照自己指定的顺序执行?

2020-11-07 15:14:36 26

原创 策略模式、模版方法模式、观察者模式

文章目录前言一、策略模式二、模板方法模式Spring 中的应用3.观察者模式JDK 中的源码实现前言设计模式是解决问题的方案,从大神的代码中学习对设计模式的使用,可以有效提升个人编码及设计代码的能力,下面看一下几个主要的设计模式:策略模式、模板方法模式、迭代器模式、观察者模式 及 责任链模式一、策略模式定义一系列算法,封装每个算法 并使它们可以互换。该模式的主要角色如下:Strategy 接口:用于定义一个算法族,它们都具有 behavior()方法;Context:使用该算法的类,持有

2020-10-22 22:21:27 16

原创 dos2unix unexpected token `$‘{\r‘‘

在使用linux命令的时候,遇到了编码的问题,需要使用dos2unix命令将文件转换为unix格式。报错信息:【unexpected token `$’{\r’’】dos2unix命令dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件

2020-10-15 17:08:35 61

原创 linux ps aux各列的含义

linux ps aux 各列的含义文章目录linux ps aux 各列的含义ps aux | more各列的解释:ps aux | moreUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDaimin 13362 99.1 13.6 12942520 12641232 ? R 13:12 445:48 /usr/local

2020-10-07 15:09:34 81

转载 理解 Linux 的虚拟内存

理解 Linux 的虚拟内存文章目录理解 Linux 的虚拟内存前言一、虚拟内存二、分页和页表三、内存寻址和分配四、功能4.1进程内存管理4.2数据共享4.3 SWAP前言毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一。我想主要是由于内存的重要”战略地位”。CPU太快,但容量小且功能单一,其他 I/O 硬件支持各种花式功能,可是相对于 CPU,它们又太慢。于是它们之间就需要一种润滑剂来作为缓冲,这就是内存大显身手的地方。而在现代操作系统中,多任务已是标配。多任务并行,大大提升了 CPU 利用

2020-10-07 15:05:39 30

转载 Reactor模型详解

文章目录前言一、经典的同步阻塞模型二、单reactor单线程设计1.代码示例三、单reactor多线程设计四、多reactor多线程设计五、Reactor模型结构图总结前言说到NIO、Netty,Reactor模型一定是绕不开的,因为这种模式架构太经典了,但是好多人在学习的时候,往往会忽视基础的学习,一上来就是Netty,各种高大上,但是却没有静下心来好好看看Netty的基石——Reactor模型。本文就带着大家看看Reactor模型,让大家对Reactor模型有个浅显而又感性的认识。一、经典的同

2020-09-30 10:18:42 244

原创 log4j日志配置示例

一、 Log4j简介Log4j有三个主要的组件:Loggers(记录器):日志类别和级别;Appenders (输出源):日志要输出的地方;Layouts(布局):日志以何种形式输出1.1 LoggersLoggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:

2020-09-22 17:08:20 18

原创 与 MySQL 因“CST” 时区导致时间差了13 小时

CST 时区名为 CST 的时区是一个很混乱的时区,有四种含义:美国中部时间 Central Standard Time (USA) UTC-05:00 / UTC-06:00澳大利亚中部时间 Central Standard Time (Australia) UTC+09:30中国标准时 China Standard Time UTC+08:00古巴标准时 Cuba Standard Time UTC-04:00美国从“3月11日”至“11月7日”实行夏令时,美国中部时间改为 UTC-05:0

2020-09-21 14:53:23 43

原创 rocketmq系列第一篇【发送源码解析】

1.发送消息入口:2.com.alibaba.rocketmq.client.producer.DefaultMQProducer#send(com.alibaba.rocketmq.common.message.Message)3.com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl#sendDefaultImpl4.发送消息核心代码5.获取topic信息6.根据一定的算法选择消息队列,默认是随机递增取模算法,还可以选择h

2020-09-20 12:33:37 63

原创 idea添加类的模版

总是要创建一些模版类,节省开发时间idea >> preference >> Editor >> File And Code Templates添加模版,例如枚举类Enum/*** xxx.com* Copyright (C) 2013-${YEAR}All Rights Reserved.*/#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

2020-09-16 14:16:46 32

原创 rocketmq使用详情

1.下载rocketmq:rocketmq下载地址2.解压 unzip rocketmq-all-4.7.1-bin-release.zip3.启动mqnamesrvcd rocketmq-all-4.7.1-bin-release启动namesrvbin/mqnamesrvJava HotSpot™ 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated a

2020-09-15 22:21:08 38

原创 springboot @Scheduled使用 任务并发进行

1.1 同一任务的同步执行(下次任务执行将在本次任务执行完毕后的下一次配置时间开始)1.2 同一任务的异步执行(下次任务将在下一个配置时间开始,不等待当前任务执行完毕)在任务运行的时候遇到问题,定时任务没15分钟执行一次,在上一次任务超过下一次任务的开始时间后才运行结束,那么下一次任务就直接跳过,到下下次的任务的时间点到达后才会执行,这就会导致部分任务没有执行,所以需要多个任务并发执行才可以。2.1 多任务并发执行首先,要想使用@Scheduled注解,首先要在启动类上添加注解@EnableSche

2020-09-11 09:54:30 163

原创 测试redis管道(pipeline)性能 碾压

@BeforeEach public void start() { start = System.currentTimeMillis(); System.out.println("@Before"); } /** * 无pipeline 耗时:843ms */ @Test public void testNoPipeline() { //连接redis服务器,192.168.0.100:6...

2020-09-01 16:28:52 102

原创 大表结构修改操作

当需要对表进行ddl操作如加索引、增删列时,数据量小时直接在线修改表结构影响不大当表达到百万、千万数据就不能直接在线修改表结构下面是具体的过程:1、备份数据select * from bq_order into outfile '/home/admin/order.txt';mysql> select * from bq_order into outfile '/home/admin/order.txt';Query OK, 10001000 rows affected (1 min 3

2020-08-28 14:02:39 46

原创 存储过程调用问题【missing parameter type】

missing parameter type,调用存储过程的时候遇到这个问题,后来查看jdbc代码,发现是创建存储过程的时候,【是否入参出参】,【参数名称】和【参数类型】中间都要有个空格,不然java代码是无法正常执行的,但是直接命令执行存储过程是正常的。以后需要多注意。存储过程CREATE DEFINER=`root`@`%` PROCEDURE `p`(IN `time_interval_minute` int,IN `start_time` datetime, OUT `flag` int)BE

2020-08-21 10:35:10 119

原创 elasticsearch7.3.0集群并设置密码

1.生成证书bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""/usr/local/opt/es7301/config/elastic-certificates.p122.拷贝到另外两台服务器cp es7301/config/elastic-certificates.p12 es7302/config/cp es7301/config/elastic-certificates.p12 es73

2020-08-17 20:12:36 1330 1

原创 @Autowire 和 @Resource理解

@Resource@Resource默认按byName自动注入。既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常。 @Resource

2020-08-13 18:15:43 42

原创 创建es集群

mac 环境,es6.6.0 * 3es下载 : https://repo.huaweicloud.com/elasticsearch/7.2.0/?C=N&O=Dik分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zippinyin分词器下载地址:https://github.com/medcl/elastic

2020-07-12 13:16:26 112

原创 shardingjdbc使用详解

1.在已有的项目中添加jar包依赖<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.0.0-RC1</version>

2020-07-01 23:56:53 217

原创 【源码解析】mybatis的查询调用过程

mybatis的查询调用过程,其中涉及到了工厂设计、jdk动态代理。1.【获取mapper】:DefaultSqlSession#getMapper2. MapperRegistry#getMapper3. 【获取mapper代理对象】MapperProxyFactory#newInstance4. 利用动态代理来创建mapper的代理对象,在调用method方法的时候会触发其invoke方法的执行5. 【findUserById】执行代理对象的查询方法6. 【动态代理】MapperProxy#

2020-06-14 13:09:12 105

转载 Spring扩展接口

bean的生命周期过程的接口Spring为容器内的bean生命周期提供了大量的扩展接口。可以实现这些接口,在Spring bean生命周期过程中对bean实例进行扩展。。ApplicationContext中bean的生命周期Spring中一个bean被创建过程的执行流程。BeanFactoryPostProcessorSpring IoC容器允许BeanFactoryPostProcessor在容器实例化任何bean之前读取bean的定义(配置元数据),并可以修改它。同时可以定义多个BeanF

2020-06-06 15:04:10 178

转载 如何进行code review

代码的设计是否符合设计要求业务逻辑是否正确:业务流程是否按照详细设计的流程走,不要出现原本是先A流程后B流程而设计的时候出现先B后A,或者丢失流程。某些传入参数是否合理:判断某些接口的参数输入是否是冗余的,比如输入A字段可以满足A接口里面的所有操作,那么多输入一个B就冗余的。某些判断是否合理,比如某些参数的输入金额是否可以为0的判断等等。是否有异常处理机制,一个好的代码设计应该考虑各种异常并对相应的异常做出合理的处理,比如接口的可重入,当代码检测到有重入的这种情况,怎样去做这种异常处理使得调用方能

2020-05-25 14:22:48 103 1

原创 dubbo系列第一篇【服务远程调用的源码解析】

1.十层架构图:重点:服务降级,集群容错, 服务路由,负载均衡,2.总结:(1)【MockClusterInvoker】若没有指定mock属性,或其值为false,则没有降级功能,如果有,则判断是否以force开头,是则强制降级,不需要远程调用,如果不是force开头,则进行远程调用,如果出现异常(如超时异常或发生程序异常)则进行服务降级(2)【AbstractClusterInvoker】服务路由(3) 获取负载均衡策略(4)【FailoverClusterInvoker】集群容错:(5)

2020-05-25 07:48:47 178

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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