- 博客(43)
- 收藏
- 关注
原创 Spring Cloud Alibaba Sentinel实现熔断与限流
一、简介官网 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。是一个轻量级的流量控制、熔断降级Java库。(类似Hystrix)1.1 Sentinel主要特性:1.2 解决微服务中的问题:服务雪崩服务降级服务熔断服务限流1.3 sentinel组件由2部分组成核心库(Java 客户端):不依赖任何框架/
2020-07-30 22:44:18 249
原创 Solr 数据检索
一、简介 Solr是一个高性能,采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
2020-07-28 21:34:47 195
原创 Spring Cloud Alibaba Nacos服务注册和配置中心
一、简介1.1 Spring Cloud alibabaSpring Cloud Netflix项目进入维护模式 将模块置于维护模式,意味着Spring Cloud团队将不会再向模块添加新功能。我们将修复block级别的bug以及安全问题,我们也会考虑并审查社区的小型pull request.我们打算继续支持这些模块,直到Greenwich版本被普遍采用至少一年。于是便出现了Spring Cloud alibaba。功能:服务限流降级:默认支持Servlet、Feign、 RestTemp
2020-07-27 22:10:03 590
原创 Spring Cloud Sleuth分布式请求链路追踪
一、简介官网介绍及源码 在微服务框架中, 一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每个前段请求都会形成一复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin。一个分布式系统的完整调用链路:表示一条请求链路,一条链路通过Trace ld唯一标识,Span标识发起的请求信息,各span通过
2020-07-26 17:31:17 447
原创 Spring Cloud和Dubbo的区别
1.SpringCloud和DubboSpringCloud和Dubbo都是现在主流的微服务架构SpringCloud是Apache旗下的Spring体系下的微服务解决方案Dubbo是阿里系的分布式服务治理框架 从技术维度上,其实SpringCloud远远的超过Dubbo,Dubbo本身只是实现了服务治理,而SpringCloud现在以及有21个子项目以后还会更多所以其实很多人都会说Dubbo和SpringCloud是不公平的但是由于RPC以及注册中心元数据等原因,在技术选型的时候我们只能二者
2020-07-26 11:40:04 1000
原创 Windows cmd常用命令
cd \跳转到硬盘根目录cd c:\windows跳转到当前硬盘的其他文件夹cd /d e:\software跳转到其他硬盘的文件夹cd …跳转到上一层目录持续更新中…
2020-07-26 10:07:43 74
原创 Spring Cloud Stream消息驱动
一、简介Spring Cloud Stream中文指导手册 官方定义Spring Cloud Stream是一个构建消息驱动微服务的框架。 应用程序通过inputs或者outputs与Spring Cloud Stream中binder对象交互,通过我们配置来binding(绑定) 。而Spring Cloud Stream的binder对象负责与消息中间件交互。所以,我们只需要搞清楚如何与Spring Cloud Stream交互就可以方便使用消息驱动的方式。 通过使用Spring Integr
2020-07-23 20:45:37 191
原创 3、无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。方法一:哈希法思路:从下标0开始逐个取出字符串的字符,将字符作为key,下标作为value存入map中,然后下标逐渐增加,同时更新最长不重复子串的长度,即为map的size和length自身较大的。当map中包含该下标对应的key,即出现重复元素时,则将遍历下标移至map中存储的当前字符的下一个字符开始从新遍历搜索,同时要清空map,便于找下一个重复字符。public int lengthOfLongestSubstring(Strin
2020-07-22 23:03:36 101
原创 RabbitMQ 安装配置
注意:所选择的Erlang 与 RabbitMQ版本要对照,详情参考官方版本对照表。一、简介1.1 RabbitMQ MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信, 直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。
2020-07-21 23:13:03 226
原创 Spring Cloud Bus 消息总线
一、简介重要概念:总线 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题, 并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题 上的实例都知道的消息。 分布式自动刷新配置功能,Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新。解决单独使用Spring Cloud Config需要向每一个客户端服务单独发送POS
2020-07-21 21:04:23 168
原创 Error: A JNI error has occurred, please check your installation and try again
运行程序发现报这个错误,查了很多博客都说要重新安装jdk,其实不需要只用休改一下编译用的 jdk 版本即可。后台报错:Exception in thread "main" java.lang.UnsupportedClassVersionError: com/cn/thread/StartThread has been compiled by a more recent version of the Java Runtime (class file version 55.0), this versio
2020-07-20 08:00:10 906
原创 Spring Cloud Config分布式配置中心
一、简介1.1 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。如果没有的话,我们每个微服务自己带着一个application.yml, 上百个配置文件的管理…特别繁琐。所以Spring Cloud提供了ConfigServer来解决这个问题。1.2 Spring Cloud Config Spring Cloud Con
2020-07-19 22:27:00 125
原创 2、两数相加
题目:给出两个非空的链表用来表示两个非负的整数。其中它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。算法思路: 就像你在纸上计算两个数字的和那样,我们首先从最低有效位也就是列表 l1 和 l2 的表头开始相加。由于每位数字都应当处于 0…9 的范围内,我们计算两个数字的和时可能会出现 “溢出”。例如,5+7=12。在这种情况下,我们会将当前位的数值
2020-07-17 22:33:55 102
原创 Gateway网关
一、简介 Spring Cloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架 Gateway是在Spring生态系统之上构建的API网关服务,于Spring 5, Spring Boot 2和Project Reactor等技术。SpringCloud Gateway作为Spring Cloud生态系统中的网关,目标是替代Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集
2020-07-17 21:54:04 1075
原创 1、两数之和
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。方法一:暴力法暴力法很简单,遍历每个元素 x,并查找是否存在一个值与 target - x相等的目标元素。 public int[] twoSum(int[] nums, int target) { int[] result = new int[2]; for (int
2020-07-13 22:40:24 75
原创 Hystrix断路器
分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。 如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”. 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应
2020-07-12 21:17:41 147
原创 OpenFeign
简介 Feign是一 个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。 Feign旨在使编写Java Http客户端变得更容易。前面在使用Ribbon+ RestTem
2020-07-11 22:05:06 109
原创 面试题 17.13、恢复空格
题目:你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!" 已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表示,设计一个算法,把文章断开,要求未识别的字符最少,返回未识别的字符数。方法一:动态规划解题思路: dp
2020-07-10 21:51:46 168
原创 Ribbon 负载均衡
简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件 提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出LoadBalancer (简称LB)后面所有的机器, Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。
2020-07-10 19:43:10 177
原创 剑指 Offer 09、用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )题解: 维护两个栈,第一个栈支持插入操作,第二个栈支持删除操作。根据栈先进后出的特性,我们每次往第一个栈里插入元素后,第一个栈的顶部元素是最后插入的元素,第一个栈的底部元素是下一个待删除的元素,而栈删除元素只能从顶部删除,即后进先出原则。为了维护队列先进先出的特性,我们引入第二
2020-07-09 16:25:20 63
原创 209、长度最小的子数组
题目:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。方法一:暴力法 暴力法是最直观的方法。初始化子数组的最小长度为无穷大,枚举数组nums中的每个下标作为子数组的开始下标对于每个开始下标 i,需要找到大于或等于 i 的最小下标 j,使得从nums[i] 到nums[j] 的元素和大于或等于 s并更新子数组的最小长度(此时子数组的长度是 j-i+1)。一直枚举到给定数组最后一个元素的小标作
2020-07-09 16:13:31 136
原创 44、通配符匹配
题目: 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。方法一:动态规划 在给定的模式 p 中,只会有三种类型的字符出现,其中「小写字母」和「问号」的匹配是确定的,而「星号」的匹配是不确定的,因此我们需要枚举所有的
2020-07-09 10:58:00 579
原创 16.11、跳水板
题目:你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。返回的长度需要从小到大排列。题解首先考虑两种边界情况。如果 k=0,则不能建造任何跳水板,因此返回空数组。如果 shorter和 longer 相等,则建造的跳水板的长度是唯一的,都等于 shorter* k,因此返回长度为 1 的数组,数组中的元素为 shorter*k。然后考虑一般情况,即 shorte
2020-07-08 22:15:11 154
原创 分布式CAP定理
什么是CAP原则 CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。 CAP由Eric Brewer在2000年PODC会议上提出。该猜想在提出两年后被证明成立,成为我们熟知的CAP定理。C 数据一致性(Consistency):也叫做数据原子性系统在执行某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读到最新的值,这样的系统
2020-07-08 14:28:21 291
原创 Consul注册中心
简介Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面。 这些功能可以根据需要单独使用,也可以一起使用以构建完整的服务网格。 Consul需要一个数据平面,并支持代理和本机集成模型。 Consul附带了一个简单的内置代理,因此一切都可以直接使用,还支持Envoy等第三方代理集成。满足CP原则,即数据一致性和分区容错性,缺失了高可用的特点。Consul的主要特点服务发现:Consul的客户端可以注册服务,例如api或mysql,其他客户端可以使用Consul来发现给定
2020-07-08 12:57:43 237
原创 112.、路径总和
题目:给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。方法一:广度优先搜索思路:首先我们可以想到使用广度优先搜索的方式,记录从根节点到当前节点的路径和,以防止重复计算。这样我们使用两个队列,分别存储将要遍历的节点,以及根节点到这些节点的路径和即可。定义了一个TreeNode类作为树的节点:class TreeNode { int val; TreeNode left; Tre
2020-07-08 09:41:30 120
原创 Win10 下GitHub raw.githubusercontent.com无法连接
在C:\Windows\System32\drivers\etc目录下的hosts文件中添加一行IP映射即可。151.101.76.133 raw.githubusercontent.com这个IP可以通过域名查询网站查询得到,但是一般就选用这个即可。
2020-07-08 08:25:37 2249
原创 Zookeeper安装使用
简介 ZooKeeper 是一个高可用的分布式数据管理不系统协调框架。基于对 Paxos 算法的实现,使该框架保证了分布式环境中数据的强一致性,也正是基于这样的特性,使得 ZooKeeper 解决很多分布式问题。 Zookeeper 保证了CP(数据一致性和分区容错性) 当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的注册信息,但不能接受服务直接down掉不可用。也就是说,服务注册功能对可用性的要求要高于一致性。但是zk会出现这样一种情况,当master节点因为网络故障与其他
2020-07-07 11:40:27 135
原创 Spring Cloud 整合Zookeeper解决jar包冲突
启动后问题解决办法:取出Spring Cloud自带版本Zookeeper,添加自己使用版本依赖即可 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> <!--排除zk
2020-07-07 09:49:19 556
原创 63、不同路径 II
题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 来表示。 说明:m 和 n 的值均不超过 100。动态规划 我们用 f(i,j) 来表示从坐标 (0,0) 到坐标 (i,j) 的路径总数,u(i,j) 表示坐标(i,j) 是否可行,如果坐标
2020-07-07 08:46:32 307
原创 32、最长有效括号
题目:给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。方法1 不利用其他存储空间 在此方法中,我们利用两个计数器 left 和 right 。首先,我们从左到右遍历字符串,对于遇到的每个 ‘(’,我们增加 left 计数器,对于遇到的每个 ‘)’ ,我们增加 right 计数器。每当 left 计数器与 right 计数器相等时,我们计算当前有效字符串的长度,并且记录目前为止找到的最长子字符串。当 right 计数器比 left 计数器大时,我们将 left 和 ri
2020-07-05 10:36:40 96
原创 378、有序矩阵中第K小的元素
题目:给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素归并排序思路及算法 由题目给出的性质可知,这个矩阵的每一行均为一个有序数组。问题即转化为从这 n 个有序数组中找第 k 大的数,可以想到利用归并排序的做法,归并到第 k 个数即可停止。一般归并排序是两个数组归并,而本题是 nn 个数组归并,所以需要用小根堆维护,以优化时间复杂度。public int kthSmallest2(int[][] matrix, int k){ Priorit
2020-07-04 18:08:33 2220 1
原创 108、将有序数组转换为高度平衡二叉搜索树
此题首先可以确定选用的算法是递归对于二叉搜索树我们可以知道其左叶子节点值<根节点值<右叶子节点值,故二叉搜索树的中序遍历为一个升序数组。即题目给的有序数组。中序遍历:先遍历左子树,在遍历根节点,最后遍历右子树。如果不要求为平衡二叉搜索树的话,仅由一个升序数组,树的根节点就有多种不同的取值,就会产生很多个不同的二叉搜索树。如当升序数组为:[-10,-3,0,5,9]时,几种可能的情况为(还有其他情况,可以自己看一下,比较特殊):如果要求为平衡二叉搜索树的话,即左右子树的最大高度差要小
2020-07-04 17:00:37 162
原创 Idea中main方法不能正常运行
今天打开了一个以前的Java SE项目,点击run main()后发现main方法并没能够正常运行,也没报错,而且连控制台都没有弹出来。后来发现是因为Project Structure中发生了错误,没有配置输出文件路径:修改为自己项目的输出文件路径即可。...
2020-07-03 18:56:31 2868
转载 PriorityQueue方法详解
简介: Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。PriorityQueue介绍: PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评
2020-07-03 08:04:49 1812
原创 Failed to bind properties under ‘eureka.client.server-url‘ to java.util.Map
**Failed to bind properties under ‘eureka.client.service-url’ to java.util.Map <java.lang.String, java.lang.String>**以上错误表示yml配置文件缺少缩进。
2020-07-02 10:56:44 187
原创 718、求两个数组中公共的、长度最长的子数组的长度
方法一:动态规划 时间复杂度: O(N×M)。 空间复杂度: O(N×M)。 N 表示数组 A 的长度,M 表示数组 B 的长度。 空间复杂度还可以再优化,利用滚动数组可以优化到 O(min(N,M))。代码实现:public int findLength(int []A,int []B){ int n = A.length, m = B.length; int[][] dp = new int[n + 1][m + 1]; int ans =
2020-07-02 09:49:46 1218 1
转载 @Responsebody注解作用
1、@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。2、@RequestMapping("/login") @ResponseBody public User login(User user){ retur
2020-07-01 18:20:39 9858 1
原创 Eureka注册中心
什么是服务治理Spring Cloud封装了Netlix 公司开发的Eureka模块来实现服务治理在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用负载均衡、容错等,实现服务发现与注册。什么是服务注册与发现Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器它是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接。这样系
2020-07-01 10:58:28 190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人