- 博客(56)
- 收藏
- 关注

原创 秒懂Dijkstra算法
Dijkstra算法是解决图中路径问题的,但只能解决一个点到所有点的所有最短路径。主要有几步:首先有个dis最短路径的数组,这个数组的含义是,目标点到其他点的路径; 其次需要维护一个vis数组,看是否更新过这个点。 遍历所有点,然后找当前没有访问过点的最小值。 然后更新此点到其他点的距离。看文字感觉有点复杂,举个栗子就清晰了。假设默认找从0到其他点的最短路径,dis数组为0 -> i 的最短距离。如果dis[2]就是0到2的最短距离,如果dis[100]就是0到100的最短距离。
2021-08-08 18:23:31
299

原创 rand5()得到rand3()或rand7()类型题:通过rand n()实现rand m()
1、rand5()得到rand3()或rand7()类型题通过rand5实现rand3很好实现,rand5的取值为[1,2,3,4,5]的值,但是rand3的取值[1,2,3],由此可得,当rand5随机到4,5时可以重新随机,因为每次随机到的概率是相同的。所以随机到[1,2,3]的概率也是相同的,随机也符合rand3的随机数。代码如下:int rand3() { int n = 5; // rand5 [1,2,3,4,5] while (n > 3) {
2021-07-21 21:30:44
2300
1

原创 回文串实现--轻松理解Manacher算法
首先说一下什么是回文串?回文串就是一个字符串的逆序和正序相同,此字符串就是回文串。比如:abcdedc中的 cdedc就是会问串。那么回文串问题怎么解决呢?前置操作:因为回文串分为奇数串和偶数串,比如奇数串为:abcba这样是以c为中心向两边扩,直接遍历字符串就行了,但是如果遇到偶数串的时候直接遍历,判断两边字符是否相等就不行了,比如abba这样的字符,以两个b之间的位置作为中心,这样就需要添加辅助的字符,所以我们拿到字符串时,需要对字符串进行处理,把字符串的每个位置都插入其他字符,比如#a#b
2021-07-10 19:21:17
190
2

原创 leetcode-1202. 交换字符串中的元素-并查集+优先队列
给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b]表示字符串中的两个索引(编号从 0 开始)。你可以 任意多次交换 在 pairs 中任意一对索引处的字符。返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。示例 1:输入:s = “dcab”, pairs = [[0,3],[1,2]]输出:“bacd”解释:交换 s[0] 和 s[3], s = “bcad”交换 s[1] 和 s[2], s = “bacd”示例 2
2021-01-11 15:55:51
133

原创 沙箱支付宝实现支付
什么是沙箱?沙箱是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。其为一个独立的虚拟环境,可以用来测试不受信任的应用程序或上网行为。 (沙箱就是通过加支付宝支付,只是测试使用)如何使用沙箱环境?注册登录支付宝开放平台:https://openhome.a...
2020-04-06 16:45:43
6468
8

原创 Hystrix面试总结
为什么要使用断路器Hystrix?在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC)。为了保证其高可用,单个服务有必须集群部署。由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务累计,导致服务瘫痪,甚至导致服务“雪崩”。为了解决这个问题出现了短路器,相当于现实生活中...
2020-03-26 21:35:21
9499
原创 子数组最大累加和问题
10,-8,4,5,-9,-3,6,12,-6],此数组的最大累计和子数组为:[6,12]1、首先计算出一个前缀最大数组,Max(当前元素,前面的和+当前元素);什么是子数组:一个数组中连续的一段元素,就是这个数组的子数组。计算可得:[10,2,6,11,2,-1,6,18,12]2、由上数组可知,最大子数组累加和为18。3、我们可以通过常量,代替临时数组。
2023-08-25 22:22:52
367
原创 交换两个数的值
注:交换两个数时,不能使用同一块内存空间(两个对象不能相同),如果为同一块内存结果则会为0。3、符合结合律【(a ^ b) ^ c = a ^ (b ^ c)】提到交换两个数的值,通常我们会想到使用一个变量记录。由上可得 a = 5;b = 10 成功交换。那么有没有方法,不使用变量就可以交换两个数呢?2、符合交换律【a ^ b = b ^ a】这样其实会创建一个多余的变量。
2023-06-13 22:28:00
635
原创 HashMap底层原理面试题
问题1:hashmap底层数据结构,1.7和1.8有何不同?1.7数组 + 链表,1.8数组 +(链表 | 红黑树)问题2:为何要用红黑树?为何一上来不树状?树化阈值为何是8?何时会退化为链表?红黑树用来避免Dos攻击,防止链表过长时性能下降,树化应当是偶然情况。 hash表的查找更新的时间复杂度是O(1),而红黑树的查找、更新时间复杂度为O(log n)红黑树的数据结构为TreeNode占用空间不普通链表使用的Node的大,如非必要,尽量使用链表。 hash值如果足够随机,则在has.
2021-12-09 23:14:14
1119
原创 设计模式的目的
编写代码过程中,程序员面临着来自 耦合性,内聚性以及可维护性,重用性,灵活行等多方面的挑战,设计模式是为了让程序,具有更好的代码重用性(即:相同功能的代码,不用多次编写) 可读性(即:编程规范行,便于其他程序员阅读和理解) 可扩展性(即:当需要增加新的功能是,非常的方便,称为可维护性) 可靠性(即:当我们增加新的功能后,对原来的功能没影响) 使程序员呈现高内聚,低耦合的特性(对以上四...
2020-05-28 15:47:18
505
原创 如何读tomcat源码项目
1、首先下载tomcat源码包。2、把源码包解压并创建home文件夹,然后把config和webapps剪切进去3、在项目根目录创建pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" .
2020-05-15 21:59:16
489
原创 Sentinel --- 分布式系统的流量方卫兵
Sentinel是什么?随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel具有以下特性:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游...
2020-04-06 21:29:38
237
原创 git操作简述
Git是一个开源的分布式版本控制工具,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是为了帮助管理项目版本开发而开发的一个开放源码的版本控制软件。以下是几个git的操作命令git init 初始化创建 .git git remote add origin 远程仓库地址 git add . 添加文件 git commit -m "注释" 把add的文件添加到本地仓...
2020-04-05 20:13:37
391
原创 tomcat启动流程
时序流程图:源码解析Lifecycle:由于所有的组件均存在初始化、启动、停止等生命周期方法,拥有生命周期的管理的特性,所以Tomcat在设计的时候,基于生命周期管理抽象成了一个接口Lifecycle,而组件server、service、container、executor、connection组件,都实现了一个生命周期的接口,从而具有了以下生命周期的核心方法:init():初始...
2020-04-05 19:46:46
134
原创 tomcat-容器(Catalina)
Tomcat是一个由一系列可配置的组件构成的web容器,而Catalina是Tomcat的Servlet容器。Catalina是Servlet容器实现的,他通过松耦合的方式集成coyote,以完成按照请求协议进行数据读写。同时,他还包括我们的启动入口、shell程序等。Catalina地位Tomcat的模块分成结构图,如下:Tomcat本质上就是一款Servlet容器,因此C...
2020-04-05 15:46:26
2314
原创 tomcat-连接器
架构介绍coyote是tomcat的连接器框架的名称,是tomcat服务器提供的客户端访问的外部接口。客户端通过coyote与服务器建立连接、发送请求并接受响应。 coyote封装了底层的网络通信(socket请求以及响应处理),为Catalina容器提供统一的接口,使Catalina容器与具体的请求协议及IO操作方式完全解耦。coyote将socket输入转换封装为request对象,交...
2020-04-05 13:34:29
234
原创 设计模式七大原则-单一职责原则
基本介绍对类来说的,即一个类应该只负责一项职责,如果A负责两个不同职责;职责1,职责2,当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2。反例:public class SingleResponsibility { public static void main(String[] args) { // TODO Auto-gen...
2020-03-31 23:24:04
158
原创 HTTP协议概述
什么是协议呢?协议其实就是我们约定的规则,干什么都有干什么的规则,工作有劳动合同,买房有买房的规则。什么是网络协议呢?网络协议就是数据在网络上传输的规则;http、pop3、pop、imap、ftp,流媒体协议。HTTP协议?HTTP(htyper text transform protocal)超文本传输协议:如何在互联 网上传输超文本,HTML:(htype...
2020-03-29 21:35:56
177
原创 主要的电商模式
B2B模式B2B ( Business to Business)是指进行电子商务交易的供需双方都是商家(或企业、公司),她(他)们使用了互联网的技术或各种商务网络平台,完成商务交易的过程。电子商务是现代 B2B marketing的一种具体主要的表现形式。案例:阿里巴巴、慧聪网C2C模式C2C即 Customer(Consumer) to Customer(Consumer...
2020-03-29 20:31:28
647
原创 Nacos 与其他注册中心对比
Nacos 很强大,是支持 CP 和 AP 切换的。一般C是所有节点在同一时刻看到的数据是一致的;而A的定义是所有的请求都会收到响应。何时选择使用何种模式?一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如SpringCloud和Dubbo服务,都适用与AP模式,AP...
2020-03-29 17:00:43
1466
2
原创 Nacos 入门安装
Nacos 名字由来前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。(注册配置服务)安装 Nacosgithub:https://github.com/alibaba/Nacos 官方文档:https://nacos.io/zh-cn/index.html安装环境并运行本地java8 +Maven 环境 下载 ...
2020-03-29 16:09:39
155
原创 SpringCloud Alibaba入门简介
SpringCloud Alibaba 能做什么?服务限流降级:默认支持Servlet、Feign、RestTemplate、Dubbo和RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控。 服务注册与发现:适配SpringCloud服务注册与发现标准,默认集成了Ribbon的支持。 分布式配置管理:支持分布式系统中的外部...
2020-03-29 16:01:56
197
原创 SpringCloud Sleuth入门介绍
为什么要用SpringCloud Sleuth?微服务的现状随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。多服务协同工作在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果复杂的调用链条容易出错在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服...
2020-03-29 12:46:20
236
原创 SpringCloud Stream 分组消费与持久化
什么是SpringCloud Stream?Spring Cloud Stream 是一个构建消息驱动微服务的框架。应用程序通过inputs或者outputs来与 Spring Cloud Stream 中binder交互,通过我们配置来 binding ,而 Spring Cloud Stream 的 binder 负责与消息中间件交互。所以,我们只需要搞清楚如何与 Spring...
2020-03-29 12:12:49
774
原创 SpringCloud Config分布式配置中心
SpringCloud Config能解决什么问题?微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要有配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。SpringCloud提供了ConfigServer来解决这个问题。SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持...
2020-03-28 20:27:48
110
原创 Hystrix服务熔断
熔断机制概念熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长是,会进行服务的降级,而且熔断该节点微服务的调用,快速返回错误的响应信息。当检测到节点微服务调用响应正常后,恢复调用链路。在springcloud框架里,熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况。当失败的调用到一定阈值,缺省是5秒内20次调用失败...
2020-03-27 09:28:49
259
原创 Hystrix服务降级实现方式
服务降级后有三种方法调用第一种在方法头上用注解实现, @HystrixCommand(fallbackMethod = "paymentTimeOutFallBackMethod", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilli...
2020-03-26 22:10:53
364
原创 Feign是什么?
Feign能干什么?Feign旨在是编写Java Http客户端变得更加容易。之前使用Ribbon+RestTemplate时,利用RESTTemplate请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,有偶遇对于服务依赖的调用可能不止一处,往往一个借口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封...
2020-03-26 13:26:37
3615
原创 什么是ribbon?
springcloud ribbon是基于Netflix ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflixf发布的开源项目,主要功能是提供醍醐的的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如:连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则...
2020-03-26 12:03:07
2603
原创 Eureka、Zookeeper、Consul的异同点
三者区别:组件名 语言 CAP 服务监控检查 对外暴露接口 springcloud集成 Eureka Java AP 可配支持 HTTP 已集成 Consul Go CP 支持 HTTP/DNS 已集成 Zookeeper Java CP 支持 客户端 已集...
2020-03-25 14:16:11
133
原创 consul使用
Consul简介:Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网络,总之Consul提供了一种完整的服务网格解决方案。它具有很多优点。包括:基于 raft 协议,比较简洁;支持健康检查,同时支持 HTTP 和...
2020-03-24 21:17:17
248
原创 zookeeper代替eureka与springcloud整合
1、创建服务1.2 引入zookeeper依赖,代替eureka<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"...
2020-03-24 20:52:19
176
原创 什么是Eureka?
什么是服务治理?springcloud封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的rpc远程调用框架中,管理每个服务于服务之间的依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务与服务之间得依赖管理,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。什么是服务注册与发现?Eureka采用C/S的设计架构,Eureka server 作为服...
2020-03-24 20:44:55
3765
1
原创 RestTemplate
RestTemplate提供了多种便捷访问远程http服务的方法,是一种简单便捷的访问restful服务模板类,是spring提供的用于访问Rest服务的客户端模板工具类使用方法:使用RestTemplate访问restful接口非常简单粗暴无脑,(url,requestMap,responseBean.class)这三个参数分别代表:REST请求地址、请求参数、HTTP响应转换呗...
2020-03-23 21:51:52
193
1
原创 Maven中dependencyManagement和dependencies区别?
Maven使用dependencyManagement元素提供了一种管理依赖版本号的方式。通常会在一个组织或项目的最顶层的父pom中看到dependencyManagement元素。使用pom.xml中的dependencyManagement元素能让所有在子项目中引用一个依赖不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement...
2020-03-23 20:13:56
366
原创 什么是微服务架构?
微服务架构是一种架构模式,他提倡将单一应用程序划分成一组小的服务,服务直接相互协调、相互配合,为用户提供最终价值。每个服务运行在其中独立的进程中,服务于服务间采用轻量级的通信机制相互协作(SpringCloud通常是基于HTTP协议的Rsetful API)。每个服务都围绕着具体业务进行架构,并且能够被独立的部署到生产环境、类生产环境等。另外,应道尽量避免统一的、集中式的服务管理机制,对具体的一个...
2020-03-23 19:25:46
381
原创 SpringCloud版本对应以及选择
springcloud版本是需要和springboot版本对应的,要不然会出现一大堆的问题。首先查看springcloud官网:springcloud官网现在springcloud最新是hoxton,对应的springboot的版本为2.2.x。也可以查看其它对应的版本。也可以访问https://start.spring.io/actuator/info ,然后会给你显示一个js...
2020-03-23 19:08:34
1263
原创 SpringBoot配置文件加载顺序
spring boot启动会扫描以下位置的application.properties或者application.yml文件作为springboot的默认配置文件-file:./config/-file:./-classpath:/config/-classpath: /以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容可以...
2020-01-04 16:09:31
228
原创 SpringBoot 之 Profile
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、制定参数等方式快速切换环境如果用properties文件则 可以用spring.profiles.active=dev 激活 application-dev.properties如果是yml则可以用文档块 ---在最上面写激活具体的文档块也可以在命令行指定,命令行参数 > 文件配置...
2020-01-04 15:40:46
121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人