摘要: 1. CPU 架构 1.1 UMA SMP称为共享存储型多处理机(Shared Memory mulptiProcessors), 也称为对称型多处理机(Symmetry MultiProcessors)。 共享存储型多处理机有三种模型:UMA模型、NUMA模型,区别在于存储器和外围资源如何共享或分 阅读全文
posted @ 2022-04-12 16:04 dragonfei 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 1. CPU发展简史 https://www.icode9.com/content-4-856085.html 2. 基本概念 2.1 地址空间: 线性地址空间:最大2^32=4GB,处理器可以寻址的地址空间 逻辑地址:所有的段包含在线性地址空间中,寻址特定字节,需要段选择子和偏移量,通过段选择子提 阅读全文
posted @ 2022-04-11 15:33 dragonfei 阅读(588) 评论(0) 推荐(0) 编辑
摘要: 1. JVM主函数入口 众所周知,C语言的启动入口都是一个main方法,Hotspot既然是C语言实现的语言,那必然存在一个main方法。这个方法存在于main.c中。这个文件时唯一一个需要被其他工具反复编译的文件,其他文件都是通过链接的方式引入的。 // 注意笔者删除了与windows实现的相关代 阅读全文
posted @ 2022-04-09 22:45 dragonfei 阅读(692) 评论(0) 推荐(0) 编辑
摘要: Reactor 模式在Netty中的应用 典型的Rector模式 mainReactor 服务端创建成功后,会监听Accept操作,其中ServerSocketchannel中的PipeLine中现在包含3个handler 服务端监听到连接事件后,会创建代表客户端的socketChannel,并向w 阅读全文
posted @ 2018-07-21 10:14 dragonfei 阅读(482) 评论(0) 推荐(0) 编辑
摘要: Netty Nio启动全流程 1. 各组件之间的关系 说明:EventLoopGroup类似线程池,EventLoop为单线程,每个EventLoop关联一个Nio Selector,用于注册Channel,形成一个EventLoop被多个channel公用。在EventLoop会执行通道Io选择操 阅读全文
posted @ 2018-07-20 21:21 dragonfei 阅读(567) 评论(0) 推荐(0) 编辑
摘要: 线性表 1. 定义 最简单的一种数据结构。形如A1、A2、A3….An这样含有有限的数据序列 2. 常用的两种形式: 1. 顺序表示(其实就是数组) 2. 链表表示 3. 顺序实现 ArrayList 1. 初始化 默认初始化容量为0,首次调用add方法,容量初始化为10 2. 1.5倍扩容 3. 阅读全文
posted @ 2018-04-08 17:39 dragonfei 阅读(177) 评论(0) 推荐(0) 编辑
摘要: java stream 原理 需求 1. 最直白的实现 缺点 1. 迭代次数过多 2. 频繁产生中间结果,性能无法接受 2. 平常写法 缺点 1. 具体业务与算法混在一起,不利于代码复用 2. 耦合性太强,代码不清晰 3. 责任链模式解耦 4. java stream 实现 优点 1. 开发者是需要 阅读全文
posted @ 2018-04-03 18:21 dragonfei 阅读(402) 评论(0) 推荐(0) 编辑
摘要: SpringBoot 分布式session实现 1. 什么是分布式session 在集群环境中,不得不考虑的一个问题是用户访问产生的session如何处理。如过不做任何处理,用户将出现频繁俸禄的现象,比如集群中存在A、B两台服务其,用户第一次访问网站时,Nginx通过负载均衡机制将用户请求转发到A节 阅读全文
posted @ 2017-09-11 23:30 dragonfei 阅读(903) 评论(0) 推荐(0) 编辑
摘要: 1. 为什么使用Mock? 依赖外部服务 TDD 部分依赖未实现 测试实现分离 单元测试的思路就是我们想在不涉及依赖关系的情况下测试代码。这种测试可以让你无视代码的依赖关系去测试代码的有效性。 2. mock优点 提前创建测试; TDD(测试驱动开发) 团队可以并行工作 提供文档后,测试人员即可写测 阅读全文
posted @ 2017-05-02 11:30 dragonfei 阅读(492) 评论(0) 推荐(0) 编辑
摘要: RxJava 心无旁骛 我只关心持有的这只股票,第一时间作出准确判断 张三最近有了一笔闲钱,为了能有一个比较好的收益,他经过研究,最终选择ABC这只股票。股市瞬息万变,张三需要时刻关注ABC股票的价格走势力,以便第一时间作出决策(加仓,减持保收益)。上市公司股票是透明的投资,李四也拥有ABC这只股票 阅读全文
posted @ 2017-01-10 20:08 dragonfei 阅读(481) 评论(0) 推荐(0) 编辑
摘要: HandlerMapping 详解 1. 导言 万丈高楼平地起,SpringMVC的辉煌离不开每个组件的相互协作,[上一章]详细阐述了SpringMVC整个体系结构及实现原理,知道HandlerMapping在这个SpringMVC体系结构中有着举足轻重的地位,充当着url和Controller之间 阅读全文
posted @ 2016-12-12 11:31 dragonfei 阅读(23455) 评论(1) 推荐(3) 编辑
摘要: SpringMVC 架构 1. 前言 SpringMVC是目前java世界中最为广泛应用的web框架,最然从学习SpringMVC的第一个程序 helloworld至今,已有好几个年头。其间伴随着项目的同时找资料,看文档,也涉猎过部分源代码,基本明白了SpringMVC是怎么回事,遇到需求知道如何写 阅读全文
posted @ 2016-12-11 23:21 dragonfei 阅读(2041) 评论(0) 推荐(4) 编辑
摘要: Spring Cloud 配置服务 1. 配置服务简介 产生背景: 传统开发中,我们通常是将系统的业务无关配置(数据库,缓存服务器)在properties中配置,在这个文件中不会经常改变,但随着系统规模的扩大,项目成员越来越多,会有越来越多的伙伴更改配置文件,开发、测试、生产环境分离,因配置产生的问 阅读全文
posted @ 2016-11-20 19:11 dragonfei 阅读(13836) 评论(0) 推荐(0) 编辑
摘要: SpringBoot常用配置简介 1. SpringBoot中几个常用的配置的简单介绍 一个简单的Spring.factories Bootstrap components org.springframework.cloud.bootstrap.BootstrapConfiguration=\ or 阅读全文
posted @ 2016-11-20 16:14 dragonfei 阅读(4385) 评论(0) 推荐(0) 编辑
摘要: Spring中autowired主要用于装配树形值,其关键类为BeanWrapperImpl,阅读代码发现其关键方法setPropertyValue有如下一段代码。 1 PropertyHandler ph = getLocalPropertyHandler(actualName); 2 if (p 阅读全文
posted @ 2016-10-23 17:09 dragonfei 阅读(939) 评论(0) 推荐(0) 编辑
摘要: SpringBoot最常用的注入bean的方式是通过@Configuration进行配置的,本文详细介绍了SpringBoot中@Configuration的解析过程。@Configuration解析的原理也适用于普通Spring的解析(非SpringBoot) 阅读全文
posted @ 2016-10-09 16:25 dragonfei 阅读(2017) 评论(0) 推荐(1) 编辑
摘要: 双亲委派机制 为了避免同一个类加载多次,对类的加载机制采用双亲委派模型。 在java层面的实现:以loadClass的实现,逐步展开 // 在jdk1.7之前,采用的是全局锁的实现,1.7之后,才有了一个并行加载的实现,其实就是想parallelLockMap中注册,这其实就是锁细粒度化的体现 pr 阅读全文
posted @ 2022-03-09 22:35 dragonfei 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 道格老爷子写的线程池,非常恶心,站在一个开发者的眼中,逐行分析里面实现的细节&实现原理 阅读全文
posted @ 2022-01-11 22:19 dragonfei 阅读(163) 评论(0) 推荐(0) 编辑
摘要: CMS实现原理 简介 学习过JAVA语言的堆CMS这款垃圾收集器都不会陌生,CMS曾经号称是并发度最高的垃圾收集器。CMS是一款只能应用于老年代收集的垃圾收集器。CMS为了支持与应用线程同时工作(垃圾收集的时候,业务线程同时工作,修改对象),重载了写屏障(赋值引用对象被修改的时候,将其压入标记栈)代 阅读全文
posted @ 2020-09-28 23:39 dragonfei 阅读(2710) 评论(0) 推荐(1) 编辑
摘要: netty 实现 1. 各组件之间的关系 每个ServerBootstrap与一个事件循环对象(一个线程)都会与一个Channel绑定,如NioServerSocketChannel 2. 如何绑定 在做bind操作时,会执行方法,register进行注册 关键接口及类之间的关系: EventLoo 阅读全文
posted @ 2018-05-22 23:24 dragonfei 阅读(302) 评论(0) 推荐(0) 编辑
摘要: HashMap 1. 哈希表的存储过程 1. 根据key计算出哈希值h. 2. 假设箱子个数为n,那么键值对应该放在第h%n个箱子中 3. 如果箱子中有了键值对,应该解决冲突 2. 解决hash冲突 在使用链表解决冲突时,属于同一个箱子的所有键值对都会排列在链表中。 哈希表还有一个重要的属性: 负载 阅读全文
posted @ 2018-04-10 15:51 dragonfei 阅读(191) 评论(0) 推荐(0) 编辑