自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

翻译 Kafka与rabbitMQ的使用场景

列出业务最重要的几个特点深入到消息队列的细节中去比较等我们对这些中间件的特点非常熟悉之后,甚至可以把业务分解成不同的子业务,再根据不同的子业务的特征,引入不同的消息队列,即消息队列混用。这样,我们就可能会最大化我们的获益,最小化我们的成本。说了这么多,其实还有很多 Kafka 和 RabbitMQ 的比较没有说,比如二者集群的区别,占用资源多少的比较等。以后有机会可以再提提。总之,期待大家看完这篇文章后,能对 Kafka 和 RabbitMQ 的区别有了更细节性的了解。本文引用知乎上的一篇文章。

2023-09-19 10:36:22 652

原创 原子引用解决ABA问题

原子引用解决ABA问题

2022-10-26 19:16:41 279 1

原创 stream流的应用与并行流与函数式编程

stream并行流,一些sql小方法

2022-10-25 19:50:15 1130

原创 volatile关键字

volatile关键字的三大特性

2022-10-25 11:42:28 246

原创 单例模式的几种创建方式

单例模式

2022-10-25 10:22:08 1310 1

原创 mysql

mysql学习

2022-06-22 09:03:28 118

原创 Spring

spring的核心就是你IOC与AOP,先来看一下IOC:看这个图可以知道BeanFactory其实可以理解为容器,ApplicationContext实现了BeanFactory接口我们首先要创建一个BeanFactory,然后将解析的Bean的定义信息放入到BeanFactory中进行对象的创建。 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

2022-06-20 14:03:22 137

原创 Kafka消费消息自动提交与手动提交

自动提交offset消费者poll到消息后默认情况下,会自动向broker的_consumer_offsets主题提交当前主题-分区消费的偏移量。自动提交会丢消息: 因为如果消费者还没消费完poll下来的消息就自动提交了偏移量,那么此 时消费者挂了,于是下一个消费者会从已提交的offset的下一个位置开始消费消息。之前未被消费的消息就丢失掉了。手动提交offset手动提交分为手动同步提交与手动异步提交很多时候并不是说拉取到消息就算消费完成,而是需要将消息写入数据库、写入本地缓存,或者

2022-02-15 11:34:32 6645 1

原创 Kafka详解

kafka是一个分布式的,分区的消息(官方称之为commit log)服务。它提供一个消息系统应该 具备的功能,但是确有着独特的设计。可以这样来说,Kafka借鉴了JMS规范的思想,但是确 并 没有完全遵循JMS规范。我们先来看一下Kafka中相关术语:还有个副本的概念稍后讲名称 解释 Broker 消息中间件处理节点,⼀个Kafka节点就是⼀个broker,⼀个或者多个Broker可以组成⼀个Kafka集群 Topic Kafka根据topic对消息进⾏归类,发布到Kaf

2022-02-14 11:03:02 2432

原创 Kafka同步发送与异步发送消息

生产者同步发消息,在收到kafka的ack告知发送成功之前一直处于阻塞状态

2022-02-13 16:42:00 12898 19

原创 Redis底层数据结构之skipList(跳跃表)

关于跳跃表其实在 JUC 里面有一个并发容器就是利用跳跃表来实现的:ConcurrentSkipListMap。jdk的并发包中还有许多数据结构,最常用的又链表,哈希表等。先介绍一下跳表的相关特性:由很多层结构组成,level是通过一定的概率随机产生的(使用抛硬币的方式) 每一层都是一个有序的链表,默认是升序,也可以根据创建映射时所提供的Comparator进行排序,具体取决于使用的构造方法 最底层(Level 1)的链表包含所有元素 如果一个元素出现在Level i 的链表中,则它在Leve

2022-02-10 19:21:30 1112

原创 Redis的数据类型以及对应的底层数据结构

redis有五种主要的数据类型,还有几个特殊的数据类型,redis为了保证效率与安全等各方面性能,每一种数据类型底层都由多种编码格式构成,可以互相转换字符串对象 STRINGRedis 字符串命令用于管理 Redis 中的字符串值。字符串对象的encoding有三种格式:分别是int、raw、embstr。如果一个字符串对象保存的是整数值,并且这个整数可以用long类型标识,那么字符串对象会将整数值保存在ptr属性中,并将encoding设置为int。如:127.0.0.1:6379&

2022-02-09 11:46:33 1359

原创 Git的在idea使用教程以及自己发布项目到git仓库

首先下载好git,下载好的样子是这样的然后在idea配置好git的地址:然后在idea下载插件:先登录自己的git账号,新建一个仓库,然后就将自己已有的项目同步到git仓库:如果是第一次新建仓库会有一个很大的新建仓库按钮,新建好之后我们可以看到,git给的例子,这个例子的意思是,新建一个README.md文件,并且push到git仓库上,git的流程就是先pull(拉取代码)一下这一步主要目的就是怕自己现在要提交的代码和别人提交的代码冲突,然后commit(提交),然后p..

2022-01-18 16:23:55 3206

原创 FastJson应用

json的结构主要就是[],代表这是一个数组,{},代表这是一个对象,对象转成jsonString json=JSON.toJSONString(new BankTableHead().setTableHeadInfo("日期"));map集合转成jsonlist转成json

2022-01-17 20:28:21 1928

原创 中缀表达式转化成后缀表达式

第一步:初始化两个栈,运算符栈s1和存储中间结果的栈s2;第二步:从左至右扫描中缀表达式第三步:遇到操作数时,将其压入s2第四步:遇到运算符时,比较其与s1栈顶运算符的优先级如果s1为空,或栈顶运算符为左括号"(",则直接将此运算符入栈s1如果优先级比栈顶运算符的高也将运算符压入s1否则将s1栈顶的运算符弹出并压入s2中,再次转到转到第四步与s1中新的栈顶运算符比较第五步:遇到括号时如果是左括号,则直接压入s1如果是右括号,则依次弹出s1栈顶的运算符,并压入s2,直到遇到左括号为止,此时将

2022-01-06 11:23:04 244

原创 Arthas测试接口性能使用方法

首先下载,给个链接:windows选这个Release 2.0.3 (July 28, 2021) · alibaba/nacos · GitHub解压之后是这样:然后在这个页面直接cmd命令,进入命令行输入java -jar arthas-boot.jar然后选择你要测试的项目,然后输入trace+ 全限定类名+空格+方法名就可以获取运行时间,跟踪想要跟踪的方法,然后运行方法,前后端分离项目可以连开发环境调用,也可以直接postman调用爆红...

2021-12-24 11:33:41 915

原创 常用Sql语句

更新语句,@Update("update bank_file_info set save_type = #{saveType},format_type_id=#{formatTypeId} where id = #{fileId}")void updateSaveType(@Param("fileId") Integer fileId, @Param("saveType") Integer saveType, @Param("formatTypeId") Integer formatTypeId.

2021-12-23 13:54:00 610

原创 Datafaker批量往数据库插入数据测试性能使用方法

首先需要下载python,我这里给一个下载地址:Python Mirror 下载之后安装就可以使用,下边是一个github的使用方法doc/zh_CN/使用举例.md · 臭屁小米豆他爹/datafaker - Gitee.com然后安装datafaker,打开cmd命令行,然后输入,下载datafakerpip install datafaker安装成功之后就可以关闭命令行我们下载好的datafaker在Python的Scripts目录下,可以看到里边有一个bank_ta..

2021-12-22 10:05:02 1486

原创 SQL性能测试与优化:Explain

explain select surname,first_name form a,b where a.id=b.id 就像上边这个语句,就是在普通的Sql前边加个explain,一般是查询语句。id:SELECT识别符。这是SELECT的查询序列号。select_type:SELECT类型。SIMPLE: 简单SELECT(不使用UNION或子查询) PRIMARY: 最外面的SELECT UNION:UNION中的第二个或后面的SELECT语句 DEPENDENT UNION..

2021-12-16 15:46:16 329

原创 Spring常用注解

Spring部分1.声明bean的注解@Component 把普通pojo实例化到spring容器中(泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。)@Service 用于标注服务层,主要用来进行业务的逻辑处理(service层)@Repository 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件(dao层@Controller 用于标注控制层(展现层),相

2021-12-09 11:20:37 4052

原创 Java面试之多线程

1.刚才在写wait()的时候提到了sleep(),就说一下二者的区别。wait() sleep() 来自Object类 来自Thread类 wait():会释放同步锁,让其他线程进入synchronized代码块执行。 sleep():如果当前线程持有同步锁,那么sleep是不会让线程释放同步锁的。 wait()只能在同步控制方法或者同步控制块里使用,否则会出现IllegaMonitorStateException异常 sleep()可以在任何地方使用 恢复方式

2021-10-22 14:47:28 234

原创 Java面试之容器(一直更新一起共同进步)

1.java容器有哪些?这个图也不能说是完全的包含了所有的容器,只是相对全一些2.list,set,map的区别是什么? list set map 继承接口 Collection Collection 常见实现类 ArrayList,LinkedList,Vector HashSet,TreeSet,LinkedHashSet HashMap,HashTable,TreeMap 常见方法 add(),remove(),c.

2021-10-22 14:45:16 193

原创 Java面试之Error与Exception(更新java的异常处理方式)

1.Error与Exception有什么区别。Error 和 Exception 都是 Throwable 的子类,用于表示程序出现了不正常的情况。区别在于:Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题,比如内存溢出,不可能指望程序能处理这样的情况。Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题,也就是说,它表示如果程序运行正常,从不会发生的情况。2.throw和throws有什么区别?throws是用来声

2021-10-22 14:43:49 316

原创 Java面试之jvm(今日更新调优工具)

1.jvm主要组成部分及其作用?流程:首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交个底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。1.类加载器(

2021-10-22 14:41:51 86

原创 Mabatis详解之#{}与${}的区别

#{}与${}

2021-10-16 16:45:24 81 1

原创 RequestMapping与GetMapping PostMapping注解的使用以及RestController 及Controller,以及get和post的区别

RequestMapping

2021-10-15 16:15:05 3677 2

原创 SpringMvc详解之Response注解与axios(AJAX)异步请求结合vue

NIHAI

2021-10-14 20:47:27 500 4

原创 Redis详解之哨兵模式面试

现在我们搭建了一个redis集群,一主二从,一个主机两个从机,实现了主从复制读写分离,那么这时候如果主机宕机了怎么办呢?我们可以修改配置文件来操作剩下两个从机,使一个变成主机一个变成从机,不过这样太麻烦。所以Redis提供了一种机制就是哨兵模式。简单来说就是一个集群的服务器被哨兵监控(如何监控下边会说)了,如果主服务器挂了(如何确定下边会说)那么就通过选举(如何选举下边会说)来决定谁是老大,来保证系统的高可用。Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance)

2021-10-13 16:42:31 410 1

原创 Java面试题(更新创建一个对象占多少字节)

可变性:String类中使用final关键字字符串数组保存字符串,private final char value[],所以String对象是不可变的,而StringBuffer与StringBuilderd都继承自AbstractStringBuilder ,在AbstractStringBuilder中也是使用字符串数组保存字符串......

2021-10-12 22:19:34 986 1

原创 RabbitMq详解之AMQP协议

首先我们来看一下rabbitmq的执行流程:自己画的可能有点丑生产者发送消息:(1) 生产者连接到RabbitMQ Broker , 建立一个连接( Connection) ,开启一个信道(Channel)(2) 生产者声明一个交换器,并设置相关属性,比如交换机类型、是否持久化等(3) 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等( 4 ) 生产者通过路由键将交换器和队列绑定起来( 5 ) 生产者发送消息至RabbitMQ Broker,其中包含路.

2021-10-11 20:55:24 1340

原创 RabbitMq详解之使用Docker搭建集群

使用Docker搭建RabbitMq集群还是非常方便的,

2021-10-09 20:52:42 283

原创 SpringBoot集成Redis以及RedisConfig,RedisUtils

首先来谈一下Jedis和Lettuce,都是可以连接redis服务器,那么为什么springboot 2.0之后默认选择的都是Lettuce呢?因为当jedis实例去连接redis服务器的时候,每个线程都需要取连接redis服务器,当有多个线程的时候,不仅开销大需要反复的创建关闭jedis连接,而且线程也是不安全的,一个jedis实例更改redis服务器的时候会影响到另一个线程,当然也是可以使用线程池来解决,具体可以自行查看。因为Lettuce底层使用的式netty框架,netty有一个也行就是Ni

2021-10-07 17:47:20 940

原创 Docker启动以及常用命令及安装rabbitmq

最近在使用docker安装rabbitmq的时候发现好多docker的命令都忘了,写篇文章记录一下docker 启动systemctl start dockerdocker重启systemctl restart docker关闭dockersystemctl stop docker查看所有的镜像docker images查看正在运行的容器docker ps查看所有容器docker ps -a启动容器docker start 容器id (如果已...

2021-10-07 16:49:02 423 1

原创 Redis详解之Rddis配置文件详解(如有错误和缺失请联系补充)

首先关于redis配置文件的位置,window系统下解压就会看到,linux要看你将压缩文件放到哪个文件中,一般返稿usr/local/bin 目录下,下面就来正式查看redis的配置文件,基本涵盖的所有的配置,:这是最开始关于存储的单位的介绍,我们可以看到对unit单位的大小写是不敏感的2.包含,我们可以将多个配置文件组合成为一个,也就是一个配置文件可以包含多个配置文件3.network 网络配置 ,第一个就是绑定的ip ,可以看到上边给出了三个例子,我们现在绑定是本机,如果想要绑定远程.

2021-10-05 16:15:47 1139

原创 Redis详解之事务以及redis乐观锁

非常简单

2021-10-01 22:45:23 80

原创 Redis详解之特殊数据类型HyperLogLog

Redis 在 2.8.9 版本添加了 HyperLogLog 结构。Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。但是同样有一个缺点就是这个会有误差,标准误差是0.81%。这个就

2021-10-01 19:08:40 138

原创 Redis详解之特殊数据类型GEO及底层数据结构

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。Redis GEO 操作方法有:一共就只有这几个方法geoadd:添加地理位置的坐标。 geopos:获取地理位置的坐标。 geodist:计算两个位置之间的距离。 georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。 georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。 geohash:返回一个或多个位置对象的

2021-10-01 14:58:50 1083

原创 Redis数据类型详解之Strings类型以及特殊类型BitMap

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。还有三种特殊的数据类型。redis的strings是以key-value进行存储的,就相当于一个map,我们先来看一下基本的操作序号 ...

2021-09-30 15:20:15 231

原创 Linux的属主与属组详解

1.属主就是这个文件的拥有者,属组就是这个文件拥有者所在的组,对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。这么说可能不太了解,那么我们可以通过一个命令来分析一下上边所提到的几种身份。chmod 命令用于改变 linux 系统文件或目录的访问权限。用它控

2021-09-29 16:28:27 13096 3

原创 swagger2 使用教程

swagger2是一款用于前后端分离的api文档生成工具,话不多说直接上教程。1.第一步就是导入依赖;版本问题大家不要在意,会教大家一个忽略版本变化的方式。<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2..

2021-09-10 17:49:35 1492

空空如也

空空如也

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

TA关注的人

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