自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式 - 工厂设计模式

工厂设计模式它提供了一种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象工厂模式实现方式简单工厂模式:通过传入相关的类型来返回相应的类,这种方式比较单一,可扩展性相对较差工厂方法模式:通过实现类现实相应的方法来决定相应的返回结果,这种方式可扩展性比较强抽象工厂模式:及时上述两种模式的拓展,且支持细化产品,是工厂方法模式的升级版,当需要创建的产品有多个产品线时使用抽象工厂模式是比较好的选择应用场景解耦:分离职责,把复杂对象的创

2022-04-29 10:26:59 236

原创 设计模式 - 单例设计模式

单例设计模式通过单例设计模式可以保证系统中,应用该模式的类只有一个对象实例使用场景业务系统全局只需要一个对象实例,比如发号器、redis 连接对象等Spring IOC 容器中Bean 默认就是单例分类懒汉式:就是懒加载,延迟创建对象饿汉式:与懒汉相反,提前创建对象实现步骤私有化构造对象提供获取实例的构造方法饿汉式public class HungrySingleton { private static HungrySingleton singleton =

2022-04-29 10:23:22 212

原创 设计模式 - 六大原则及分类

单一职责原则一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因是现实高内聚、低耦合的指导方针解释:高内聚尽可能类的每个成员方法只完成一件事(最大限度的耦合)模块内部的代码,相互之间的联系越强,内聚就越高,模块的独立性就越好低耦合:减少类的内部,一个成员方法调用另一个成员方法,不要牵一发动全身开闭原则对扩展开放,对修改关闭,在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果里氏替换原则任何基类可以出现的地方,子类一定可以出

2022-04-26 16:52:25 297

原创 springboot - 多配置文件运行

修改配置文件修改配置文件,将原本的配置文件重命名,如图修改运行配置信息找到原始的启动类,本文的原始为EurekaServerApplication点击修改Edit configurations复制原始的Application对复制后的Aplication,重命名修改Program arguments 参数添加--spring.profiles.active=eureka8763这里的eureka8763 与你修改后的配置文件后缀相同点击apply 应用运行指定的配置文件切换

2022-04-22 18:02:42 505

原创 CAP 理论 - zookeeper 和 eureka 比较

前言著名的CAP 理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。由于分区容错性是分布式系统中必须要保证的,因此我们只能在A 和C 之间进行权衡。Zookeeper 保证CP在Zookeeper 中,当master 节点因为网络故障与其他节点失去联系是,剩余节点会重新进行leader 选举,但问题在于,选举leader 需要一定时间,且选举期间整个Zookeeper 集群不可用,这导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使Zookeeper 集群失

2022-04-22 17:28:13 2656

原创 CAP 理论

概述CAP即:Consistency(一致性)Availability(可用性)Partition tolerance(分区容忍性)一致性对于客户端的每次读操作,要么读到的是最新的数据,要么读取失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确。可用性任何客户端的请求都能得到响应数据,不会出现响应错误。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一

2022-04-22 17:04:59 309

原创 leetcode - 329. 矩阵中的最长递增路径

思路记忆化深搜记录每个点的最长距离:如果搜索到该点发现该点没有值,则该点记录为1如果搜索到该点发现有值,则该值为搜索到点的最长路径,则在该值基础上加1即可顺序遍历代码public class Solution { // 备忘录 int[][] memo; public int longestIncreasingPath(int[][] matrix) { if (null == matrix || matrix.length == 0

2022-04-21 15:39:57 107

原创 左程云 - 大厂刷题班 - 摆砖块

题目解答思路由于每层只能用一块或两块砖来摆,那么每层的长度只有两种情况:(1)数组最大值(2)数组最大值 + 数组最小值推论 :如果数组长度为奇数,则每层长度为数组最大值如果数组长度为偶数,则每层长度为数组最大值 + 数组最小值代码public class Solution { public int backAll(int[] arr) { if (null == arr || arr.length == 0) { return 0;

2022-04-21 11:54:17 169

原创 左程云 - 大厂刷题班 - 一种字符在左,另一种字符在右的最少交换次数

题目解答时间复杂度O(n)思路贪心算法,假设G在左B在右,将第一个G放在第一个位置,算需要几步,将第二个G放在第二个位置,算需要几步,以此类推。代码public class Solution { public static int minSteps(String s) { if (null == s || s.length() == 0) { return 0; } char[] chars = s.toC

2022-04-21 10:51:11 201

原创 左程云 - 大厂刷题班 - 绳子覆盖最多的点

题目解答解法1时间复杂度O(n * logn)二分法思路以数组的每一个点为绳子的末尾点,二分查找绳子中末尾点减绳子长度的点(起始点),结果为末尾点的坐标 - 起始点的坐标 + 1注:二分查找可以看leetcode 35代码public class Solution { public int CordCoverMaxPoint(int[] arr, int K) { if (null == arr || arr.length < 0 || K == 0)

2022-04-21 10:19:44 712

原创 工具类 - 实现List 集合对象的拷贝处理

工具类基于beanutils 实现@NoArgsConstructorpublic class BeanProUtils extends BeanUtils { /** * 实现List 集合对象的拷贝处理 * @param sources 原始对象集合 * @param target 目标对象集合 * @param <S> 源对象类型 * @param <T> 目标对象类型 * @return 拷贝后的L

2022-04-20 19:38:20 1326

原创 工具类 - 分页对象

@Datapublic class PageDTO<T> { public static final int DEFAULT_PAGE_SIZE = 10; /** * 每页显示个数 */ private Integer size; /** * 当前页数 */ private Integer cur; /** * 总页数 */ private Integer pages;

2022-04-20 19:07:37 239

原创 分布式 - Raft选举

背景分布式系统的挑战时序性:运行在不同网络下的机器中的进程如何判断一些事件的发生顺序。并发性:运行在不同网络下的机器中的进程如何共享资源,而互不打扰。比如访问共同的数据库。健壮性:应对网络的不稳定以及硬件的不稳定。一致性:如何保障无论访问哪个服务节点,都能获取相同的结果。分布式共识分布式系统中多个节点之间,彼此对某个状态达成一致结果的过程。分布式共识的应用逻辑时间的共识,来决定事件发生的顺序。互斥性的共识,用于决定谁正拥有访问的资源。协调者的共识,谁是当下的leader。.

2022-04-20 16:11:52 2124

原创 leetcode - 95. 不同的二叉搜索树 II

public class Solution { public List<TreeNode> generateTrees(int n) { if (n == 0) { return new LinkedList<>(); } return generateTrees(1, n); } private List<TreeNode> generateTrees(int start

2022-04-20 10:58:48 64

原创 leetcode - 105. 从前序与中序遍历序列构造二叉树

模板前序遍历 public TreeNode buildTree(int[] preOrder, int preL, int preR, int[] inOrder, int inL, int inR) { TreeNode root = new TreeNode(preOrder[preL]); root.left = buildTree(preOrder, preL + 1, preL + len, inOrder, inL, ind - 1);

2022-04-20 10:37:35 76

原创 leetcode - 124. 二叉树中的最大路径和

模板后序遍历 public int dfs(TreeNode root) { if (null == root) { return 0; } // 获取左边最大 int left = dfs(root.left); // 获取右边最大 int right = dfs(root.right); // 和临时变量比较 res = Math.max(Math.max(0

2022-04-20 10:05:08 198

原创 leetcode - 145. 二叉树的后序遍历

非递归public class Solution { public List<Integer> postorderTraversal(TreeNode root) { if (null == root) { return new ArrayList<>(); } ArrayList<Integer> res = new ArrayList<>(); Stack&

2022-04-20 09:46:57 190

原创 leetcode - 94. 二叉树的中序遍历

非递归public class Solution { public List<Integer> inorderTraversal(TreeNode root) { if (null == root) { return new ArrayList<>(); } ArrayList<Integer> res = new ArrayList<>(); Stack&lt

2022-04-20 09:29:30 61

原创 leetcode - 144. 二叉树的前序遍历

非递归public class Solution { public List<Integer> preorderTraversal(TreeNode root) { if (null == root) { return new ArrayList<>(); } List<Integer> res = new ArrayList<>(); Stack<Tre

2022-04-20 09:18:30 212

原创 leetcode - 912. 排序数组

插入排序(超时) public static int[] sortArray(int[] nums) { if (null == nums || nums.length <= 1) { return nums; } for (int i = 1; i < nums.length; i++) { int ind = findInd(nums, i - 1, nums[i]);

2022-04-19 15:49:53 68

原创 rocketmq - 功能 - 消费幂等

消费幂等消息队列 RocketMQ 消费者在接收到消息以后,有必要根据业务上的唯一 Key 对消息做幂等处理的必要性。消费幂等的必要性在互联网应用中,尤其在网络不稳定的情况下,消息队列 RocketMQ 的消息有可能会出现重复,这个重复简单可以概括为以下情况:发送时消息重复当一条消息已被成功发送到服务端并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。 如果此时生产者意识到消息发送失败并尝试再次发送消息,消费者后续会收到两条内容相同并且 Message ID 也相同的

2022-04-19 11:36:48 160

原创 rocketmq - 功能 - 死信队列

死信队列当一条消息初次消费失败,消息队列 RocketMQ 会自动进行消息重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列 RocketMQ 不会立刻将消息丢弃,而是将其发送到该消费者对应的特殊队列中。在消息队列 RocketMQ 中,这种正常情况下无法被消费的消息称为死信消息(Dead-Letter Message),存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)死信特性死信消息具有以下特性不会再被消费者正常消费。

2022-04-19 11:32:18 457

原创 rocketmq - 功能 - 消息重试

消息重试顺序消息的重试对于顺序消息,当消费者消费消息失败后,消息队列 RocketMQ 会自动不断进行消息重试(每次间隔时间为 1 秒),这时,应用会出现消息消费被阻塞的情况。因此,在使用顺序消息时,务必保证应用能够及时监控并处理消费失败的情况,避免阻塞现象的发生。无序消息的重试对于无序消息(普通、定时、延时、事务消息),当消费者消费消息失败时,您可以通过设置返回状态达到消息重试的结果。无序消息的重试只针对集群消费方式生效;广播方式不提供失败重试特性,即消费失败后,失败消息不再重试,继续消费新的消

2022-04-19 11:27:43 488

原创 rocketmq - 功能 - 负载均衡

负载均衡Producer负载均衡Producer端,每个实例在发消息的时候,默认会轮询所有的message queue发送,以达到让消息平均落在不同的queue上。而由于queue可以散落在不同的broker,所以消息就发送到不同的broker下,如下图:图中箭头线条上的标号代表顺序,发布方会把第一条消息发送至 Queue 0,然后第二条消息发送至 Queue 1,以此类推。Consumer负载均衡集群模式在集群消费模式下,每条消息只需要投递到订阅这个topic的Consumer Group下

2022-04-19 11:21:19 261

原创 rocketmq - 功能 - 高可用性机制

高可用性机制RocketMQ分布式集群是通过Master和Slave的配合达到高可用性的。Master和Slave的区别:在Broker的配置文件中,参数 brokerId的值为0表明这个Broker是Master,大于0表明这个Broker是 Slave,同时brokerRole参数也会说明这个Broker是Master还是Slave。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是 Producer只能和Master角色的Broker连接写入消息;Consu

2022-04-19 11:06:43 93

原创 rocketmq - 功能 - 消息存储

消息存储分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消费者返回ACK如果消息消费者在指定时间内成功返回ack,那么MQ认为消息消费成功,在存储中删除消息,即执行第6步;如果MQ在指定时间内没有收到ACK,则认为消息消费失败,会尝试重新push消息,重复执行4、5、6步骤MQ删除消息存储介质关系型数据库DBApache下开源的另外一款M

2022-04-19 10:45:58 414

原创 linux - 安装tomcat

下载选择官网进入,网址:https://tomcat.apache.org/选择xftp 上传至服务器解压tar -zxvf apache-tomcat-7.0.52.tar.gz运行进入tomcat的bin目录,输入执行./startup.sh启动Tomcat./startup.sh关闭关闭Tomcat。进入tomcat的bin目录,执行./shutdown.sh关闭./shutdown.sh有时可能会关闭失败,可以输入ps -ef|grep tomcat查看还在运行的to

2022-04-18 18:05:50 473

原创 dubbo - springboot整合

概述Provider:暴露服务方称之为“服务提供者”。Consumer:调用远程服务方称之为“服务消费者”。Registry:服务注册与发现的中心目录服务称之为“服务注册中心”。Monitor:统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。(可不配)搭建Registry (注册中心)见 https://blog.csdn.net/qq_39552758/article/details/124184267?spm=1001.2014.3001.5501创建dubbo 工程

2022-04-18 18:01:15 353

原创 linux - 安装zookeeper集群

准备工作安装JDK将Zookeeper上传到服务器解压Zookeeper,并创建data目录,将conf下的zoo_sample.cfg文件改名为zoo.cfgcd zookeeper-3.4.6mkdir datacd /zookeeper-3.4.6/conf/mv zoo_sample.cfg zoo.cfg建立/user/local/zookeeper-cluster,将解压后的Zookeeper复制到以下三个目录cp -rf zookeeper-3.4.6 /user

2022-04-14 23:15:03 1268

原创 springboot 整合rocketmq

消息生产者添加依赖(pom.xml)<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version></parent><properties> <

2022-04-14 17:53:02 423

原创 rocketmq - 消息发送样例

概述导入MQ客户端依赖<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.4.0</version></dependency>消息发送者步骤分析1.创建消息生产者producer,并制定生产者组名2.指定Nameserve

2022-04-14 16:17:17 291

原创 rocketmq - 集群监控平台搭建

概述RocketMQ有一个对其扩展的开源项目incubator-rocketmq-externals,这个项目中有一个子模块叫rocketmq-console,这个便是管理控制台项目了,先将incubator-rocketmq-externals拉到本地,因为我们需要自己对rocketmq-console进行编译打包运行。下载并编译打包git clone https://github.com/apache/rocketmq-externalscd rocketmq-consolemvn cl

2022-04-13 14:42:41 335

原创 rocketmq - mqadmin

使用方式进入RocketMQ安装位置,在bin目录下执行./mqadmin {command} {args}命令介绍Topic相关 名称 含义 命令选项 说明 updateTopic 创建更新Topic配置 -b Broker 地址,表示 topic 所在 Broker,只支持单台Broker,地址为ip:port -c cluster 名称,表示 topic 所在集群(集群可通过 clusterList 查询)

2022-04-13 14:07:27 441

原创 RocketMQ - 双主双从集群搭建

黑马程序员 rocketmq总体架构消息高可用采用2m-2s(同步双写)方式集群工作流程启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。收发消息前,先创建Topic,.

2022-04-13 13:54:05 504 1

原创 linux - mv

可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。mv [选项] 源文件或者目录 目标文件或者目录选项-b 如果已存在相同文件名,则覆盖前进行备份-f 如果已存在相同文件名,而用户不具有写的权限,则强制覆盖-i 如果已存在相同文件名,覆盖前提示用户进行确认-u 比较原文件与目标文件修改时间,如果目标文件较新则不覆盖-v 列出所有被移动或重命名的文件操作1. 文件改名# 将1.txt改成2.txtmv 1.txt 2.txt2. 移动文件# 将2.txt移动到d.

2022-04-12 17:20:20 980

原创 linux - cp

cpcp 命令,主要用来复制文件和目录,同时借助某些选项,还可以实现复制整个目录。cp [选项] 源文件 目标文件选项-a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;-d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;-i:询问,如果目标文件已经存在,则会询问是否覆盖;-l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;-s:把目标文件建立为源文件的软链接文件,而不是复制源文件;-p:复制后目标文件保留源文件的属性(包括所有者、所属组、

2022-04-12 16:40:20 215

原创 rocketmq - 简介

角色简介Producer:消息的发送者;举例:发信者Consumer:消息接收者;举例:收信者Broker:暂存和传输消息;举例:邮局NameServer:管理Broker;举例:各个邮局的管理机构Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以订阅一个或者多个Topic消息Message Queue:相当于是Topic的分区;用于并行发送和接收消息集群搭建方式集群特点NameServer是一个几乎无状态节点,可集群部署,节点之间无

2022-04-12 10:39:47 92

原创 linux - 安装rocketmq

1. 下载并上传到linux 服务器https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip下载地址2. 解压压缩包unzip rocketmq-all-4.4.0-source-release.zip3. 构建存放日志的目录mkdir rocketmqlogschmod 777 rocketmqlogs4. 启动 - 进到bin 目录启动names

2022-04-11 19:18:16 924

原创 linux - 安装maven

1. 下载https://maven.apache.org/download.cgi进入官网,download栏目,下载 apache-maven-3.8.4-bin.tar.gz,上传到linux服务器2. 进入文件目录,解压z代表gzip的压缩包;x代表解压;v代表显示过程信息;f代表后面接的是文件tar -zxvf apache-maven-3.8.4-bin.tar.gz3. 配置环境变量 vim /etc/profileexport MAVEN_HOME=/usr/local/ma

2022-04-11 18:49:43 1071

原创 linux - 安装jdk

1、需要到jdk官网上下载你想要的jdk版本,本例为jdk1.8ORACLE官网地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html2、在/usr/local下创建jdk文件夹cd /usr/localmkdir jdk3、上传jdk1.8包上传到指定目录,将其解压到jdk目录下tar -zxvf jdk-8u261-linux-x64.tar.gz4、设置环境变量1 . 编辑文件

2022-04-11 16:36:45 53

空空如也

空空如也

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

TA关注的人

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