摘要:
引言 我们使用Spring开发过程中经常会用到Autowired注解注入依赖的bean,这部分也是面试的热点问题之一。今天咱们一起来深入研究下自动注入的背后实现原理。首先上一个例子,如下所示: @RestController public class TestController { @Autowi 阅读全文
摘要:
1、为什么要断路器 在微服务架构中通常会涉及到多个服务间调用,处于调用链路底层的基础服务故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用范围逐渐放大的过程。 大家在开发过程中肯定都遇到了 阅读全文
摘要:
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,基于Netflix Ribbon实现的,Ribbon不像注册中心、网关那样需要单独部署,它是作为一个工具直接集成到Service里。后面要讲到的Feign里面也集成了Ribbon。 1、手动搭建一个客户端负载均衡 阅读全文
摘要:
前言 在分布式系统领域有个著名的CAP定理: C——数据一致性; A——服务可用性; P——服务对网络分区故障的容错性。 这三个特性在任何分布式系统中不能同时满足,最多同时满足两个。 Zookeeper是著名Hadoop的一个子项目,很多场景下Zookeeper也作为Service发现服务解决方案。 阅读全文
摘要:
什么是Spring Cloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,例如:配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选择、分布式会话、群集状态、数据监控等,都可以用Spri 阅读全文
摘要:
关于重试 开发中经常要调用其他项目提供的Api,这些Api可能是同公司其他团队或其他公司提供的,所以避免不了会出现网络抖动调用失败的情况,这种情况下往往重试一次就正常了。对于add或update操作,如果是非幂等性操作,要谨慎使用,重试可能会造成业务异常。 可以使用apache HttpClient 阅读全文
摘要:
1、遇到的问题 开发中常常会打印业务日志,这些日志在排查问题或跟踪调用流程时非常有用,很多业务日志并没有考虑排查问题时的便利性,看似都记录了日志,一旦出现了线上问题,排查起来特别麻烦,很多时候又不方便让用户重现问题,造成解决问题周期长甚至是无法解决问题;如果日志记录的好,可以根据关键字搜索得出一条调 阅读全文
摘要:
1、树 树是一种很常见的分线性数据结构,公司的组织架构,行政区划结构等都是树形结构。树形结构里常见的有树和二叉树。 树的定义 树是n(n>=0)个结点的有限集。 在任意一棵非空树中: (1)有且仅有一个特定的称为根(root)的结点 (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其 阅读全文
摘要:
序言 上篇讲到线性结构,和线性结构相反的是非线性结构,非线性结构特点是一个结点元素可能有多个直接前驱和多个直接后继。常见的非线性结构有:二(多)维数组、树、图。 本来计划是非线性结构作为一篇,写着写着发现内容确实太多了,拆分为上、中、下3篇比较合适,所以改变了之前的计划。 1、二维数组 如:a[0] 阅读全文
摘要:
线性表 线性表表示一种线性结构的数据结构,顾名思义就是数据排成像一条线一样的结构,每个线性表上的数据只有前和后两个方向。比如:数组、链表、栈和队列都是线性表,今天我们分别来看看这些线性数据结构。 数组 数组是一种线性表数据结构,用一组连续的内存空间来存储一组具有相同类型的数据。 内存分布: 随机访问 阅读全文