Spring的bean定义信息注册流程 核心注解自查注解功能@Bean容器中注册组件@Primary同类组件如果有多个,标注主组件@DependsOn组件之间声明依赖关系@Lazy组件懒加载(最后使用的时候才创建)@Scope声明组件的作用范围(SCOPE_PROTOTYPE,SCOPE_SINGLETON)@Configuration声明这是一个配置类,替换以前配置文件...
结构型设计模式 一、为什么使用结构型设计模式结构型模式关注点“怎样组合对象/类?”所以我们关注下类的组合关系类结构型模式关心类的组合,由多个类可以组合成一个更大的(继承)对象结构型模式关心类与对象的组合,通过关联关系在一个类中定义另一个类的实例对象(组合)根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。适配器模式(Adapter Pat...
一、创建者设计模式 一、设计模式总览创建型模式(Creational Patterns)单例(Singleton)模式原型(Prototype)模式工厂方法(FactoryMethod)模式抽象工厂(AbstractFactory)模式建造者(Builder)模式行为型模式(Behavioral Patterns)模板方法(Template Method)模式策略(Strategy)模式...
JVM调优 一、Tomcat参数调优(优化吞吐量)1.1 禁用AJP服务什么是AJP呢 AJP(Apache JServer Protocol)是定向包协议 。WEB服务器和Servlet容器通过TCP连接来交互;为 了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周 期过程会重用连接。Tomcat在 server.xml 中配置了...
1、初始JVM 一、什么是JVM1.1 什么是JVMVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。主流虚拟机虚拟机名称介绍HotSpotOracle/Sun JDK和OpenJDK都使用HotSPot VM的相同核心J9J9是IBM开发...
数据结构-算法思维 一、贪心算法1.1 定义贪婪算法(Greedy)的定义:是一种在每一步选中都采取在当前状态下最好或最优的选择,从而希望 导致结果是全局最好或最优的算法。贪婪算法:当下做局部最优判断,不能回退1.2 经典问题:部分背包背包问题是算法的经典问题,分为部分背包和0-1背包,主要区别如下: 部分背包:某件物品是一堆,可以带走其一部分0-1背包:对于某件物品,要么被带走(选择了它),要么不...
数据结构-图 一、概念图(Graph),是一种复杂的非线性表结构。图中的元素我们就叫做顶点(vertex)图中的一个顶点可以与任意其他顶点建立连接关系。我们把这种建立的关系叫做边(edge)跟顶点相连接的边的条数叫做度(degree)图这种结构有很广泛的应用,比如社交网络,电子地图,多对多的关系就可以用图来表示。有向图:边有方向的图,比如A点到B点的直线距离,微信的添加好友是双向的无向图:边无...
数据结构-树 一、树的概念有很多数据的逻辑关系并不是线性关系,在实际场景中,常常存在着一对多,甚至是多对多的情况,它是由n(n≥0)个有限节点组成一个具有层次关系的集合树的分类如下:二、二叉树二叉树(binary tree)是树的一种特殊形式。二叉,顾名思义,这种树的每个节点最多有2个孩子节 点。注意,这里是最多有2个,也可能只有1个,或者没有孩子节点。二叉树节点的两个孩子节点,一个被...
Sleuth + Zipkin分布式链路追踪 一、分布式链路追踪技术适用场景(问题场景)为了支撑日益增⻓的庞大业务量,我们会使用微服务架构设计我们的系统,使得我们的系统不仅能够通过集群部署抵挡流量的冲击,又能根据业务进行灵活的扩展。那么,在微服务架构下,一次请求少则经过三四次服务调用完成,多则跨越几十个甚至是上百个服务节点。那么问题接踵而来:1)如何动态展示服务的调用链路?(比如A服务调用了哪些其他的服务---依赖 关系)2)如...
SpringCloud Stream消息驱动组件 一、Stream解决的痛点问题Spring Cloud Stream 消息驱动组件帮助我们更快速,更方便,更友好的去构建消息 驱动微服务的MQ消息中间件广泛应用在应用解耦合、异步消息处理、流量削峰等场景中不同的MQ消息中间件内部机制包括使用方式都会有所不同,比如RabbitMQ中有 Exchange(交换机/交换器)这一概念,kafka有Topic、Partition分区这些概念, M...
Config分布式配置中心 一、分布式配置中心应用场景单体应用架构,配置信息的管理、维护并不会显得特别麻烦,手动操作就可以,因为就一个工程;微服务架构,因为我们的分布式集群环境中可能有很多个微服务,我们不可能一个 一个去修改配置然后重启生效,在一定场景下我们还需要在运行期间动态调整配置 信息,比如:根据各个微服务的负载情况,动态调整数据源连接池大小,我们希望 配置内容发生变化的时候,微服务可以自动更新。场景总结如...
SpringCloud GateWay网关 一、GateWay简介Spring Cloud GateWay是Spring Cloud的一个全新项目,目标是取代Netflix Zuul, 它基于Spring5.0+SpringBoot2.0+WebFlux(基于高性能的Reactor模式响应式通信 框架Netty,异步非阻塞模型)等技术开发,性能高于Zuul,官方测试,GateWay是 Zuul的1.6倍,旨在为微服务架构提供一种简单...
Feign远程调用 一、Feign简介Feign是Netflix开发的一个轻量级RESTful的HTTP服务客户端(用它来发起请求, 远程调用的),是以Java接口注解的方式调用Http请求,而不用像Java中通过封装 HTTP请求报文的方式直接调用,Feign被广泛应用在Spring Cloud 的解决方案中。类似于Dubbo,服务消费者拿到服务提供者的接口,然后像调用本地接口方法一样 去调用,实际发出的是远...
Hystrix熔断器 一、Hystrix简介Hystrix(豪猪----->刺),宣言“defend your app”是由Netflix开源的一个 延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而 提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。包裹请求:使用HystrixCommand包裹对依赖的调用逻辑。 自动投递微服务方 法(@HystrixCo...
三、Ribbon负载均衡 一、关于负载均衡负载均衡一般分为服务器端负载均衡和客户端负载均衡服务器端负载均衡,比如Nginx、F5这些,请求到达服务器之后由这些负载均衡器根据一定的算法将请求路由到目标服务器处理。客户端负载均衡,比如我们要说的Ribbon,服务消费者客户端会有一个服务器 地址列表,调用方在请求前通过一定的负载均衡算法选择一个服务器进行访问,负 载均衡算法的执行是在请求客户端进行Ribbon是Net...
2、SpringCloud-Eureka服务注册中心 一、服务注册中心注意:服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者(比如简历微服务部署 多个实例),这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动 态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就 不再适用了,需要引入额外的组件来管理微服务提供者的注...
1、SpringCloud概述 一、SpringCloud是什么 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利 性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总 线、负载均衡、断路器、数据监控等,都可以用 Spring Boot的开发⻛格做到一键启 动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较 成熟、经得起实际考验的...