- 博客(109)
- 资源 (3)
- 收藏
- 关注
原创 MongoDB概述以及安装
文章目录前言MongoDB 基本概念详解MongoDB都有哪些特点?为什么要引入 MongoDB?MongoDB和关系型数据库的差异?MongoDB安装获取安装包进行解压添加到系统执行路径下面( ~/.bashrc)创建数据目录启动MongoDB服务客户端使用( mongo shell, 用来操作MongoDB的javascript客户端界面 )连接服务设置密码停服务exit 退出 mongo以授权模式启动授权方式连接连上之后就可以进行操作:安全说明通过命令访问 MongoDBUI客户端访问前言记录Mo
2022-01-17 23:15:34
899
原创 kafka常见生产问题及解决方案
文章目录前言理想线上环境规划JVM参数设置线上问题及优化消息丢失情况消息发送端消息消费端消息重复消费消息发送端消息消费端消息乱序消息积压延时队列消息回溯分区数越多吞吐量越高吗消息传递保障kafka生产者的幂等性kafka的事务kafka高性能的原因前言记录Kafka入门理想线上环境规划JVM参数设置kafka是scala语言开发,运行在JVM上,需要对JVM参数合理设置,参看JVM调优专题 修改bin/kafka-start-server.sh中的jvm设置,假设机器是32G内存,可以如下设置:
2022-01-09 23:12:12
1615
原创 kafka底层设计原理
文章目录前言架构图Kafka总控制器ControllerController选举机制Partition副本选举Leader机制消费者消费消息的offset记录机制消费者Rebalance机制Rebalance过程如下第一阶段:选择组协调器第二阶段:加入消费组JOIN GROUP第三阶段( SYNC GROUP)消费者Rebalance分区分配策略:producer发布消息机制剖析写入方式消息路由写入流程HW与LEO详解日志分段存储zookeeper节点数据图前言记录Kafka入门架构图Kafka总
2022-01-09 22:35:13
369
原创 kafka集群版入门
文章目录前言背景kafka集群实战集群消费ProducersConsumers消费顺序Java客户端访问Kafka引入maven依赖消息发送端代码消息接收端代码Spring Boot整合Kafka引入spring boot kafka依赖application.yml配置如下发送者代码消费者代码前言记录Kafka入门背景于kafka来说,一个单独的broker意味着kafka集群中只有一个节点。要想增加kafka集群中的节点数量,只需要多启动 几个broker实例即可。在一台机器上同时启动三个bro
2022-01-03 23:19:42
192
原创 Kafka单机版入门
文章目录前言背景Kafka的使用场景Kafka基本概念基础的消息(Message)相关术语kafka基本使用安装前的环境准备第一步:下载安装包第二步:修改配置第三步:启动服务server.properties核心配置第四步:创建主题第五步:发送消息第六步:消费消息可以这么来理解Topic,Partition和Broker为什么要对Topic下数据进行分区存储?前言记录Kafka入门背景Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica
2022-01-03 22:46:50
1007
原创 RocketMQ实际项目中的问题以及解决方案
文章目录前言使用RocketMQ如何保证消息不丢失?哪些环节会有丢消息的可能?RocketMQ消息零丢失方案生产者使用事务消息机制保证消息零丢失为什么要发送个half消息?有什么用?half消息如果写入失败了怎么办?订单系统写数据库失败了怎么办?half消息写入成功后RocketMQ挂了怎么办?下单成功后如何优雅的等待支付成功?事务消息机制的作用RocketMQ配置同步刷盘+Dledger主从架构保证MQ自身不会丢消息前言记录RocketMQ使用RocketMQ如何保证消息不丢失?哪些环节会有丢消息
2021-12-28 23:07:50
2127
原创 RocketMQ高阶面试
文章目录前言基础概念消息模型(Message Model)消息生产者(Producer)消息消费者(Consumer)主题(Topic)代理服务器(Broker Server)Raft算法名字服务(Name Server)消息(Message)消息存储何时存储消息消息存储介质磁盘保存文件慢吗?零拷贝技术加速文件读写消息存储结构刷盘机制消息主从复制负载均衡Producer负载均衡Consumer负载均衡消息重试如何让消息进行重试重试消息如何处理重试次数MessageId配置覆盖死信队列死信队列的特征:消息幂等
2021-12-28 22:48:54
237
原创 RocketMQ原生API使用
文章目录前言RocketMQ原生API使用测试环境搭建RocketMQ的编程模型RocketMQ的消息样例基本样例顺序消息广播消息延迟消息批量消息过滤消息事务消息事务消息的实现机制事务消息的作用ACL权限控制前言记录RocketMQRocketMQ原生API使用使用RocketMQ的原生API开发是最简单也是目前看来最牢靠的方式。这里我们用SpringBoot来搭建一系列消息生产者和消息消费者,来访问我们之前搭建的RocketMQ集群。测试环境搭建首先创建一个基于Maven的SpringBoot
2021-12-27 22:53:29
683
原创 RocketMQ集群搭建
文章目录前言快速搭建RocketMQ集群机器环境创建用户系统配置关闭防火墙安装java安装RocketMQ配置RocketMQ集群配置第一组broker-a配置第二组Broker-b启动RocketMQ先启动nameServer再启动broker启动状态检查测试mqadmin管理工具命令行快速验证搭建管理控制台前言记录RocketMQ快速搭建RocketMQ集群机器环境准备三台机器,root密码 root ;IP地址:192.168.232.128 worker1 192.168.232.12
2021-12-27 22:09:37
592
原创 RocketMQ入门
文章目录前言MQ介绍什么是MQ?为什么要用MQ?MQ的优点:MQ的缺点MQ产品比较RocketMQ简介快速安装RocketMQ快速运行RocketMQRocketMQ由以下这几个组件组成启动NameServer启动Broker命令行快速验证关闭RocketMQ服务RocketMQ集群架构RocketMQ集群中的各个角色总结前言记录RocketMQMQ介绍什么是MQ?为什么要用MQ?MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排队,
2021-12-26 23:28:10
179
原创 RabbitMQ 高级特性
文章目录前言消息的可靠投递confirm 确认模式return 退回模式消息接收确认总结:消息可靠性总结消费端限流TTL设置TTL死信队列消息成为死信的三种情况队列绑定死信交换机死信队列小结延迟队列消息幂等性保障消息幂等性保障--乐观锁机制消息积压前言记录RabbitMQ消息的可靠投递在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。rabbitmq 整个消息投递的路径为:producer—&
2021-12-26 22:58:54
216
原创 SpringBoot 整合 RabbitMQ
文章目录前言SpringBoot 整合 RabbitMQ生产端消费端注意事项:前言记录RabbitMQSpringBoot 整合 RabbitMQ生产端创建生产者SpringBoot工程引入start,依赖坐标<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-a
2021-12-26 22:38:44
93
原创 Spring整合RabbitMQ示例代码
文章目录前言生产者引入依赖配置文件整合spring和rabbitMQ测试消费者引入依赖配置文件整合spring和rabbitMQ测试前言记录RabbitMQ生产者引入依赖<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifa
2021-12-23 22:52:37
175
原创 CentOS7安装RabbitMQ
文章目录前言上传软件安装Erlang安装RabbitMQ开启管理界面及配置开启管理界面修改默认配置信息启动设置配置文件配置虚拟主机及用户角色说明:Virtual Hosts配置创建Virtual Hosts前言记录RabbitMQ上传软件erlang18.31.el7.centos.x86_64.rpmsocat1.7.3.25.el7.lux.x86_64.rpmrabbitmqserver3.6.51.noarch.rpm安装Erlangrpm -ivh erlang-18
2021-12-23 22:39:51
159
原创 RabbitMQ入门篇
文章目录前言MQ 的基本概念MQ 的优势MQ 的劣势常见的 MQ 产品RabbitMQRabbitMQ 简介RabbitMQ 中的相关概念:RabbitMQ工作模式Work queues 工作队列模式Pub/Sub 订阅模式Routing 路由模式Topics 通配符模式工作模式总结消息确认生产者前言记录RabbitMQMQ 的基本概念MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信MQ 的优势应用解耦 提高系统容错性和可维
2021-12-23 22:31:18
133
原创 中间件redis缓存设计和性能优化
文章目录前言多级缓存架构缓存设计缓存穿透缓存穿透问题解决方案:布隆过滤器缓存击穿缓存雪崩热点缓存key重建优化缓存与数据库双写不一致解决方案:开发规范与性能优化键值设计key名设计value设计bigkey的危害:bigkey的产生如何优化bigkey命令使用前言记录redis入门多级缓存架构缓存设计缓存穿透缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储 层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失
2021-12-21 21:39:49
1318
原创 中间件redis6.0新特性
文章目录前言多线程Client Side CacheAclsACL设置有两种方式:ACL存储有两种方式,但是两种方式不能同时配置,否则直接报错退出进程前言记录redis入门多线程redis 6.0 提供了多线程的支持,redis 6 以前的版本,严格来说也是多线程,只不过执行用户 命令的请求时单线程模型,还有一些线程用来执行后台任务, 比如 unlink 删除 大key,rdb持久 化等。redis 6.0 提供了多线程的读写IO, 但是最终执行用户命令的线程依然是单线程的,这样,就没有 多线程
2021-12-19 22:40:41
619
原创 中间件Redis设计原理
文章目录前言Redis 基本特性Redis应用场景Redis核心编码结构StringRedisDb 数据结构ListziplistquicklistHashSetintsetSetZSetGeoHash算法GeoHash经纬度编码GeoHash经纬度编码GeoHash经纬度编码GeoHash经纬度编码GeoHash优缺点前言记录redis入门Redis 基本特性关系型的键值对数据库,可以根据键以O(1) 的时间复杂度取出或插入关联值Redis 的数据是存在内存中的键值对中键的类型可以是字符串,
2021-12-19 22:27:37
345
原创 中间件redis集群水平扩展
文章目录前言启动集群启动整个集群客户端连接8001端口的redis实例查看集群状态集群操作增加redis实例查看redis集群的命令帮助配置8007为集群主节点配置8008为8007的从节点删除8008从节点删除8007主节点前言记录redis入门Redis3.0以后的版本虽然有了集群功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,今天就来redis高可用集群如何做水平扩展,原始集群(见下图)由6个节点组成,6个节点分布在三台机器上,采用三主三从的模式。启动集群
2021-12-18 21:38:49
147
原创 中间件redis集群高阶面试
文章目录前言Redis集群方案比较Redis高可用集群搭建Java操作redis集群集群的Spring Boot整合Redis连接代码Redis集群原理分析槽位定位算法跳转重定位Redis集群节点间的通信机制网络抖动Redis集群选举原理分析集群脑裂数据丢失问题集群是否完整才能对外提供服务Redis集群为什么至少需要三个master节点,并且推荐节点数为奇数?Redis集群对批量操作命令的支持哨兵leader选举流程前言记录redis入门Redis集群方案比较哨兵模式在redis3.0以前的版
2021-12-18 21:15:37
925
原创 中间件redis哨兵架构方式
文章目录前言Redis哨兵高可用架构redis哨兵架构搭建步骤哨兵的Jedis连接代码:哨兵的Spring Boot整合Redis连接代码StringRedisTemplate与RedisTemplate详解在 RedisTemplate中提供了几个常用的接口方法的使用RedisTemplate中定义了对5种数据结构操作Redis客户端命令对应的RedisTemplate中的方法列表String类型结构Hash结构List结构Set结构前言记录redis入门Redis哨兵高可用架构sentinel
2021-12-18 14:53:51
167
原创 中间件redis主从架构方式
文章目录前言Redis主从架构redis主从架构搭建,配置从节点步骤:Redis主从工作原理主从复制(全量复制)流程图:数据部分复制主从复制(部分复制,断点续传)流程图:Jedis连接代码示例:redis管道与调用lua脚本,代码示例上面已经给出:管道(Pipeline)Redis Lua脚本前言记录redis入门Redis主从架构redis主从架构搭建,配置从节点步骤:复制一份redis.conf文件将相关配置修改为如下值:port 6379pidfile /var/run/redi
2021-12-17 23:42:36
199
原创 中间件Redis持久化方式
文章目录前言RDB(Redis DataBase)快照(snapshot)bgsave的写时复制(COW)机制AOF(append-only file)AOF重写RDB 和 AOF ,我应该用哪一个?Redis 4.0 混合持久化Redis数据备份策略:前言记录redis入门RDB(Redis DataBase)快照(snapshot)在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。你可以对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个改
2021-12-17 23:12:26
155
原创 中间件redis数据结构高阶面试
文章目录前言Redis是单线程吗?Redis 单线程为什么还能这么快?Redis 单线程如何处理那么多的并发客户端连接?其他高级命令前言记录redis入门Redis是单线程吗?Redis 的单线程主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外 提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。Redis 单线程为什么还能这么快?因为它所有的数据都在内存中,所有的运算都是内存级别的
2021-12-16 23:36:31
1014
原创 中间件Redis安装
文章目录前言Redis安装前言记录redis入门Redis安装下载地址:http://redis.io/download安装步骤:安装gccyum install gcc把下载好的redis‐5.0.3.tar.gz放在/usr/local文件夹下,并解压wget http://download.redis.io/releases/redis‐5.0.3.tar.gztar xzf redis‐5.0.3.tar.gzcd redis‐5.0.3 1011 # 进入到解压好的redi
2021-12-16 22:55:09
122
原创 面试题之为什么局部内部类和匿名内部类只能访问局部final变量
文章目录前言一、为什么局部内部类和匿名内部类只能访问局部final变量前言该系列为准备面试时候准备记录一、为什么局部内部类和匿名内部类只能访问局部final变量public class Test { public static void main(String[] args) { } } //局部final变量a,b public void test(final int b) { //jdk8在这里做了优化, 不用写,语法糖,但实际上也是有 的,也不能修改 f
2021-12-11 22:47:20
164
原创 面试题之final关键字
文章目录前言一、final作用域二、作用域对应的特性1,修饰成员变量2,修饰局部变量3,修饰基本类型数据和引用类型数据前言该系列为准备面试时候准备记录一、final作用域修饰类:表示类不可被继承修饰方法:表示方法不可被子类覆盖,但是可以重载修饰变量:表示变量一旦被赋值就不可以更改它的值二、作用域对应的特性1,修饰成员变量如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。如果final修饰的是成员变量,可以在非静态初始化块、声明该变量或者构造器
2021-12-11 22:38:02
669
原创 面试题之==和equals比较
文章目录前言一、hashCode与equals的关系二、hashCode介绍三、为什么要有hashCode四、特性前言该系列为准备面试时候准备记录提示:以下是本篇文章正文内容一、hashCode与equals的关系主要考察hashCode与equals的关系二、hashCode介绍hashCode() 的作用是获取哈希码,也称为散列码,它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,Java中的任
2021-12-11 22:26:19
93
原创 面试题之区分JDK JRE JVM
JDK JRE JVM的区别JDK:Java Develpment Kit java 开发工具JRE:Java Runtime Environment java运行时环境JVM:java Virtual Machine java 虚拟机
2021-12-11 17:23:08
7056
原创 面试题之面向对象
面向对象什么是面向对象?对比面向过程,是两种不同的处理问题的角度。面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者(对象)、及各自需要做什么,面向过程比较直接高效,而面向对象更易于复用、扩展和维护。面向对象三大特性封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,内部细节对外部调用透明,外部调用无需修改或者关心内部实现。javabean的属性私有,提供getset对外访问,因为属性的赋值或者获取逻辑只能由javabean本身决定。而不能由外部胡乱修改。
2021-12-11 17:16:45
336
转载 java多线程内存模型和工作原理
多线程内存模型每个线程都有自己的工作内存(类似于前面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。Java内存模型具备一些先天的“有序性”,即不需要通过任何手段就能够得到保证的有序性,这个通常也称为happens-before 原则。如果两个操作的执行次序无法从happens-before原则推导出来,那么它们就不能保证它们的有序性,虚拟机可以随意地对它们进行重排序数据同步八大原子操作lock(锁定):作用于
2021-10-31 23:22:24
381
原创 XXL-JOB从入门到源码(三)
前言XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。目前介入使用的公司已达400+,拥有非常活跃的社区氛围。开源社区地址 XXL开源社区任务详解基础配置执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 “执行器管理” 进行设置;任务描述:任务的描述信息,便于任务管理;负责人:任务的负
2021-10-13 22:52:45
201
原创 XXL-JOB从入门到源码(二)
前言XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。目前介入使用的公司已达400+,拥有非常活跃的社区氛围。开源社区地址 XXL开源社区发布第一个任务hello word永远是第一个测试项目,开发第一个任务“Hello World”。新建一个 “GLUE模式(Java)” 运行模式的任务为例。新建任务登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。然后,参考下面截图中任务的参数配置,点击保存
2021-10-13 22:29:25
144
原创 XXL-JOB从入门到源码(一)
前言XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。目前介入使用的公司已达400+,拥有非常活跃的社区氛围。开源社区地址 XXL开源社区XXL-JOB 入门依赖环境Maven3+Jdk1.8+Mysql5.7+源码下载源码仓库地址一源码仓库地址二数据库初始化请下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可。“调度数据库初始化SQL脚本” 位置为:/xxl-job
2021-10-13 22:10:53
457
原创 云e办前端项目--前端VUE之小技巧
前言一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。组件小技巧标签template标签template下一班不配置多个div,这样布局比较麻烦,比较优雅的处理就是先放一个div,然后在div里面可以随意发挥后续补充...
2021-10-04 11:47:53
342
原创 云e办前端项目--前端VUE之computed
前言一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。待补充...
2021-10-03 22:26:36
218
原创 云e办前端项目--前端VUE路由之导航守卫
前言一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。待补充...
2021-10-03 22:18:07
94
原创 云e办前端项目--前端VUE路由之Vuex
前言一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。安装npm install vuex --save验证在package.json中查看"dependencies": { "axios": "^0.21.1", "core-js": "^3.6.5",
2021-10-03 22:03:58
175
原创 云e办前端项目--前端VUE路由之replace or push
前言一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。replace or pushreplace和push都可以作为路由跳转,他们的区别就是:replace 不能后退回上一级链接,进行页面跳转不会形成history,不可返回到上一层push 可以后退回上一级链接,进行页面跳转回形成h
2021-10-03 21:31:25
117
原创 云e办前端项目--前端VUE路由之prototype
前言一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。replace or pushreplace和push都可以作为路由跳转,他们的区别就是:replace 不能后退回上一级链接,进行页面跳转不会形成history,不可返回到上一层push 可以后退回上一级链接,进行页面跳转回形成h
2021-10-03 21:08:06
360
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人