![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
框架
琦小虾
抱拳会天下英豪,煮酒论成败是非。
展开
-
Java并发技术总结之二——ThreadLocal
接上篇《Java并发技术总结之一——Java线程池》二. ThreadLocal参考地址:《Java中的ThreadLocal详解》ThreadLocal 用来保证规避多线程访问线程不安全的情况,每个线程访问自己的副本变量,这样就避免了对资源的抢占导致数据不一致的问题。2.1 原理线程 Thread 中用 ThreadLocalMap 类型的 threadLocals, inheritableThreadLocals 存储当前线程与子线程数据的副本变量。ThreadLocal 是不支持继.原创 2020-07-13 23:20:49 · 150 阅读 · 0 评论 -
ZooKeeper 技术知识总结之二——ZK 惊群与脑裂
接上篇《ZooKeeper 技术知识总结之一——Leader选举算法》二. ZK 惊群与脑裂2.1 Zookeeper 的惊群现象ZooKeeper 的节点通常可以作为分布式锁来使用。比如可以多个服务对同时竞争申请一个节点 “/test/lock”,创建成功的服务获取到这个锁,其他没创建成功的监听这个锁,等到这个锁释放后再重新申请该锁。这样就实现了简单的分布式锁。但同时在大量锁的情况下会有**“惊群”**的问题。“惊群”就是在一个节点删除的时候,大量对这个节点的删除动作有订阅Watcher的线程.原创 2020-07-13 23:00:03 · 1557 阅读 · 0 评论 -
ZooKeeper 技术知识总结之一——Leader选举算法
一. Leader 选举算法分析在3.4.0后的Zookeeper的版本只保留了TCP版本的FastLeaderElection选举算法。当一台机器进入Leader选举时,当前集群可能会处于以下两种状态:集群中已经存在Leader。集群中不存在Leader。对于集群中已经存在Leader而言,此种情况一般都是某台机器启动得较晚,在其启动之前,集群已经在正常工作,对这种情况,该机器试图去选举Leader时,会被告知当前服务器的Leader信息,对于该机器而言,仅仅需要和Leader机器建立起连接,原创 2020-07-13 22:56:29 · 318 阅读 · 0 评论 -
Netty面试技术知识点总结
NettyNetty 是一个非阻塞(异步)、事件驱动的网络框架,用多线程处理 IO 事件。一. Netty 结构Netty 服务端与客户端都是由 Bootstrap 引导程序开始的,对于服务端,引导类是 ServerBootstrap,对于客户端,引导类是 Bootstrap。从 ServerBootstrap 开始,Netty Server 的结构如下:ServerBootstrapEventLoopGroupEventLoop:事件循环线程,通过 Selector 管理多个连接 Ch原创 2020-07-12 09:13:36 · 561 阅读 · 0 评论 -
领域驱动设计 (DDD) 总结
领域驱动设计 DDD参考地址:《DDD领域驱动设计基本理论知识总结》《关于领域驱动设计(DDD)中聚合设计的一些思考》《基于 MVC 实践领域驱动(DDD)的思考》《【DDD】领域驱动设计实践 —— 限界上下文识别》一. DDD 简述DDD (Domain-Driven Design),即领域驱动设计是思考问题的方法论,用于对实际问题建模,它以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,然后将这些概念设计成一个领域模型。由领域模型驱动软件设计,用代码来实现该领域模原创 2020-07-12 09:11:38 · 2324 阅读 · 2 评论 -
数据库技术知识点总结之三——索引相关内容
接上篇《数据库技术知识点总结之二——Mybatis》三. 索引3.1 索引数据结构原理索引在底层的数据结构用的是 B+树,它的原理见数据结构篇。3.2 聚簇索引和非聚簇索引注:参考地址《和刚入门的菜鸟们聊聊–什么是聚簇索引与非聚簇索引》《MYSQL索引:对聚簇索引和非聚簇索引的认识》《通俗易懂 索引、单列索引、复合索引、主键、唯一索引、聚簇索引、非聚簇索引、唯一聚簇索引 的区别与联系》3.2.1 聚簇索引、非聚簇索引聚簇索引规定了一个数据表的排序方式,一个数据表只能有一个聚簇索引.原创 2020-07-09 22:57:54 · 198 阅读 · 0 评论 -
分布式事务的实现思想
分布式事务的实现思想参考地址:《从银行转账失败到分布式事务:总结与思考》分布式事务的基本概念与本地事务类似,都保证了 ACID 特性(见[本篇第二章](# 二. 事务的特性))。随着数据的规模越来越大,就出现了对业务的解构,包括数据层面的关系型数据库的垂直、水平分表,以及服务层面的拆分,将一个大服务拆分为后单独部署,甚至同时也将数据库独立出来。这时候本地数据库事务就不能满足多个数据库、异构系统的原子性、持久性了,需要使用分布式事务的方法。通常,分布式事务只需要保证原子性,通过保证原子性来保证应用层面原创 2020-07-09 22:45:04 · 279 阅读 · 0 评论 -
Spring技术知识点总结之七——Spring的设计模式
接上篇《Spring技术知识点总结之六——Spring 事务传播等级》七. SpringBean 的设计模式?7.1 简单工厂(非23种设计模式中的一种)参考地址:《【小家Spring】Spring的Bean定义注册中心BeanDefinitionRegistry详解》实现方式:BeanFactory。 Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是在传入参数后创建,还是传入参数前创建,这个要根据具体情况来定。实质:由一个工厂.原创 2020-07-09 00:20:30 · 209 阅读 · 0 评论 -
Tomcat技术知识点总结
参考地址:《tomcat架构》《四张图带你了解Tomcat系统架构》一. Tomcat 的结构一个 Tomcat 中有一个 Server,每个 Server 中至少有一个 Service。一个 Service 由至少一个 Connector 与一个 Container 组成。Service 的结构主要可以被分为两部分:Connector 与 Container。Connector: 用于接受客户端传来的数据,解析其协议,将解析后的数据传输给 Servlet;Container: 封装和.原创 2020-07-09 00:17:30 · 661 阅读 · 0 评论 -
Spring技术知识点总结之六——Spring 事务传播等级
接上篇《Spring技术知识点总结之五——Servlet 生命周期》六. Spring 事务传播等级Spring 事务传播有七个等级,假设有 methodA 调用 methodB,根据事务传播等级的设置,methodA 与 methodB 有如下效果:PROPAGATION_REQUIRED:默认等级,支持事务,如果没有事务,则新建一个事务;PROPAGATION_SUPPORTED:支持事务,如果没有事务,则不新建事务;PROPAGATION_MANDATORY:支持事务,如果没有事务,则.原创 2020-07-09 00:13:50 · 157 阅读 · 0 评论 -
Spring技术知识点总结之五——Servlet 生命周期
接上篇《Spring技术知识点总结之四——Spring Bean 的生命周期》五. Servlet 生命周期参考地址:《什么是Servlet(原理,从访问到方法)》Servlet 是 SUN 公司提供的一种用于开发动态 WEB 资源的技术,SUN 公司在其 API 中提供了一个 Servlet 接口。如果用户想要开发一个 Java Web 服务,需要完成两个步骤:编写一个实现了 Servlet 接口的 Java 类;将该 Java 类放到 Servlet 容器中(通常是 Tomcat);.原创 2020-07-09 00:12:09 · 474 阅读 · 0 评论 -
Spring技术知识点总结之四——Spring Bean 的生命周期
接上篇《Spring技术知识点总结之三——Spring Bean 的注入过程》四. Spring Bean 的生命周期BeanFactory 中 Bean 的生命周期:实例化:以 InstantiationAwareBeanPostProcessor 接口方法为包装,进行实例化过程。该接口主要功能有三个:实例化前预处理、实例化后预处理、设置属性值预处理;实例化前预处理:InstantiationAwareBeanPostProcessor # postProcessBeforeInstant.原创 2020-07-09 00:10:08 · 352 阅读 · 0 评论 -
Spring技术知识点总结之三——Spring Bean 的注入过程
接上篇《Spring技术知识点总结之二——SpringMVC DispatcherServlet》三. Spring Bean 的注入过程Spring ioc 容器的核心类是 AbstractApplicationContext,入口是 refresh() 方法,该方法是个模板方法,定义了加载到容器的全部过程。@Override public void refresh() throws BeansException, IllegalStateException { synchronized .原创 2020-07-09 00:08:34 · 2205 阅读 · 0 评论 -
Spring技术知识点总结之二——SpringMVC DispatcherServlet
接上篇《Spring技术知识点总结之一——循环依赖》二. SpringMVC DispatcherServlet参考网址:《SpringMVC 常见面试题总结(超详细回答)》类似于使用大全的文章,比较长,适合查询:《深入理解 Spring MVC 思想》SpringMVC 请求执行流程:2.1 获取处理方法Spring 容器在启动时,会载入若干 HandlerMapping 实例到 DispatcherServlet 中,并将方法信息存储到映射注册器 MappingRegistry .原创 2020-07-09 00:05:49 · 200 阅读 · 0 评论 -
Spring技术知识点总结之一——循环依赖
一. Spring IOC 循环依赖?参考地址:《Spring IOC 容器源码分析 - 循环依赖的解决办法》《Spring IOC循环依赖解决方案分析》《Spring5源码阅读--如何解决循环依赖?》在 Spring 中获取一个 Bean,是通过获取 BeanDefinition 实现的:在定义 Bean 信息的 XML 文件中,BeanDefinitionReader 读取指定路径下的 XML 文件,获取 Bean 定义信息并封装成 BeanDefinition 对象,该实例对象包含依赖关原创 2020-07-09 00:02:32 · 259 阅读 · 0 评论 -
Netty技术知识点总结
NettyNetty 是一个非阻塞(异步)、事件驱动的网络框架,用多线程处理 IO 事件。一. Netty 结构Netty 服务端与客户端都是由 Bootstrap 引导程序开始的,对于服务端,引导类是 ServerBootstrap,对于客户端,引导类是 Bootstrap。从 ServerBootstrap 开始,Netty Server 的结构如下:ServerBootstrapEventLoopGroupEventLoop:事件循环线程,通过 Selector 管理多个连接 Ch原创 2020-07-08 23:57:10 · 344 阅读 · 0 评论 -
Dubbo技术知识总结之六——Dubbo服务调用链路
接上篇《Dubbo技术知识总结之五——Dubbo远程调用》六. Dubbo 服务调用链路参考地址:《Dubbo中服务消费者和服务提供者之间的请求和响应过程》6.1 初始化服务提供者启动时,对外暴露一个 Exporter,它是一个可以接受外界连接代理对象,接受连接的方式是启动一个 Netty Server 监听连接。服务消费者启动时,调用 RPC 接口时调用的是一个 Invoker 接口,类型是 RpcInvocation。它是一个通过动态代理方式生成的代理对象,可以通过 Netty Cli.原创 2020-07-08 23:52:02 · 844 阅读 · 0 评论 -
Dubbo技术知识总结之五——Dubbo远程调用
接上篇《Dubbo技术知识总结之四——Dubbo集群容错》五. 远程调用上篇《Dubbo技术知识总结之四——Dubbo集群容错》的七个步骤中,前四个步骤是 Cluster 层的工作。远程调用是后续步骤 5, 6, 7 的内容,同时也是 Cluster 层以下的工作。该部分对 Dubbo 远程调用的基础与实现进行总结,包括 Dubbo 协议,编解码器,Dubbo 线程模型。5.1 Dubbo 协议Dubbo 协议设计参考了 TCP/IP 协议,每次 RPC 调用,报文都会包括协议头和协议体两个部分.原创 2020-07-08 00:03:40 · 389 阅读 · 0 评论 -
Dubbo技术知识总结之四——Dubbo集群容错
接上篇《Dubbo技术知识总结之三——Dubbo 启动与服务暴露、引用》四. 集群容错在客户端已经从注册中心拉取和订阅服务列表完毕的前提下,Dubbo 完成一次完整的 RPC 调用,流程如下:服务列表聚合;路由;负载均衡;选择一台机器进行 RPC 调用;请求交给底层 I/O 线程池处理;读写、序列化、反序列化;方法调用;将上面的步骤进行细化,在一次 RPC 调用过程中,Cluster 层的流程如下:根据不同的容错机制,生成 Invoker 对象,调用 AbstractClus.原创 2020-07-07 23:58:45 · 769 阅读 · 0 评论 -
Dubbo技术知识总结之三——Dubbo 启动与服务暴露、引用
接上篇《Dubbo技术知识总结之二——注册中心》三. Dubbo 启动与服务暴露、引用服务暴露:见书 5.2.2 章,文章《Dubbo服务暴露与注册》3.1 启动时 dubbo 标签解析服务启动时,首先解析 dubbo 的配置文件。dubbo 的配置文件是一个 Spring Bean 的 XML 配置文件,其中都是 dubbo 自定义的标签。Spring 启动过程中会使用 BeanDefinitionParser 解析 XML 配置文件中的 Bean,dubbo 就是提供了一个 BeanDe.原创 2020-07-07 23:56:16 · 260 阅读 · 0 评论 -
Dubbo技术知识总结之二——注册中心
接上篇《Dubbo技术知识总结之一——Dubbo架构》二. 注册中心首先需要说明的一点是,服务的暴露与注册是两个不同的概念。在Dubbo中,微服务之间的交互默认是通过Netty进行的,而服务之间的通信是基于TCP以全双工的方式进行的。那么也就是说,每个服务都会存在一个ip和port。所谓的服务暴露就是指根据配置将当前服务使用Netty绑定一个本地的端口号(对于消费者而言,则是尝试连接目标服务的ip和端口)。至于注册,由于微服务架构中对于新添加的服务,需要一定的机制来通知消费者,有新的服务可用,或者对.原创 2020-07-07 23:54:28 · 156 阅读 · 0 评论 -
Dubbo技术知识总结之一——Dubbo架构
一. Dubbo 架构参考地址:《dubbo系列三、架构介绍及各模块关系》Dubbo 是阿里服务化治理方案的核心框架,是一种分布式 RPC 框架,它提供了注册中心机制,解耦了消费方与服务方动态发现的问题。1.1 Dubbo 架构Dubbo 的架构主要分为四部分:服务提供方、服务消费者、注册中心、统计中心,这四部分也被称为部署逻辑拓扑节点。Dubbo 运作模式如下:注册:服务提供方 (Provider) 启动时,把自己的元数据向注册中心 (Registry) 上面注册;订阅:服务消费者 (C原创 2020-07-07 23:52:42 · 516 阅读 · 0 评论 -
系统架构师设计培训心得之二——架构设计
培训过程中,老师用例子说明了一个项目的架构设计的流程。按步骤可以分为:框架技术的选择应用;架构平台重构与设计过程;领域建模;行为建模;这四个步骤中,第三步与第四步是最重要的核心。一. 框架技术的选择应用人们经常对框架与架构的概念混淆。最简单的区分方法,就是可以将架构比作设计图纸,框架比作源码。而框架的选择是架构设计的重要部分,选择框架的一步,被称为架构的概要设计。市面上有很多已...原创 2019-09-08 09:22:46 · 953 阅读 · 0 评论 -
“王大锤の非诚勿扰” —— Spring IoC / DI 思想详述
本文参考地址:《spring Ioc/DI的理解》《关于Spring IOC (DI-依赖注入)你需要知道的一切》《一、IOC和DI的概念》《深入理解IoC/DI》《spring IOC篇二:xml的核心逻辑处理》**温馨提示:**前方内容会引起认真怪和女权者些许不适,请出门左手边右拐。一. 王大锤的相亲市场我叫王大锤,是个码农,我们这个行业号称“人傻钱多速来”,不信?呵呵呵呵...原创 2018-09-25 00:12:39 · 540 阅读 · 0 评论 -
Spring 之 BeanFactory 核心:getBean 方法的流程——前言
Spring 之 BeanFactory 核心:getBean 方法的流程——前言参考地址: 《Spring核心之BeanFactory 一张图看懂getBean全过程.》 前言笔者最近在工作空闲时间研究 Spring 的生命周期部分,好奇之下也总结了《Spring 中 BeanFactory 的生命周期与源码解析(附例程)》。然而对于 Spring 框架如何获取一个 Bean...原创 2018-08-23 23:15:38 · 3651 阅读 · 0 评论 -
Spring 中 BeanFactory 的生命周期与源码解析(附例程)
BeanFactory 的生命周期与源码解析参考地址:《Spring核心之BeanFactory 一张图看懂getBean全过程》 《Spring bean的生命周期,对比源码详解》 《Spring源码学习–Bean的生命周期》 《AbstractApplicationContext.refresh()》 《容器的功能扩展(三)finishRefresh》 《spring中Ini...原创 2018-08-19 13:48:59 · 1689 阅读 · 2 评论