摘要:
MySQL InnoDB 存储引擎整体架构图: 一、内存存储结构 1、Buffer Pool buffer pool 是主内存中的一块儿存储区域,用于存储访问的表及索引数据。这样从内存中直接访问获取使用的数据可以极大的提升访问效率。在一些特殊专用的服务里,几乎 80% 的内存区域都被赋于 buffe 阅读全文
摘要:
一、Hbase 介绍 https://hbase.apache.org/book.html#_preface https://blogs.apache.org/hbase/ https://research.google.com/archive/bigtable.html 什么是Hbase? had 阅读全文
摘要:
MySQL 版本:5.7 安装环境:MAC OS 一、测试数据 测试数据库:test;测试表:tt CREATE TABLE `tt` ( `id` int(11) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, KEY `name_idx` (`na 阅读全文
摘要:
语义化版本 2.0.0 摘要 版本格式:主版本号.次版本号.修订号,版本号递增规则如下: 主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的问题修正。 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。 简介 阅读全文
摘要:
扫码登录,其实相当于一种授权机制。 一、交互 二维码登录是一个涉及三方的交互过程:web 浏览器、移动端,服务后台。 基本交互流程如下: a)web 浏览器:负责二维码的展示及移动端授权后的登录态展示。 b)移动端:负责扫码及授权。 c)服务后台:贯穿整个交互过程。 二、登录二位码 想要扫码登录,首 阅读全文
摘要:
一、什么是B树? B树是一棵是具备以下特点的有根树。 1、节点属性 a)x.n:为节点中存储的关键字个数。 b)x.key:为节点中存储的关键字。x.key1、x.key2 ... x.keyx.n 以非降序顺序排列,满足 x.key1 <= x.key2 ... <= x.keyx.n。 c)x. 阅读全文
摘要:
什么是拦截器? 拦截器是一种横切维度的功能延展。 具象说明一下,高速收费站就是一种拦截器。它可以做什么?收费,查证,交通控制等等,面向所有穿行过往的车辆。 gRPC 拦截器主要分为两种:客户端拦截器(ClientInterceptor),服务端拦截器(ServerInterceptor),顾名思义, 阅读全文
摘要:
其实在之前的文章【缓存,确实很香,却也很受伤!】中,对缓存穿透的引发缘由及应对策略做过简要的描述。这篇文章将对这个问题再做下额外的扩展。 一、关于布隆过滤器 布隆过滤器支持两种操作:1、添加元素;2、判断元素是否存在。 布隆过滤器的特性:占用少量内存过滤海量数据 判断元素存在会返回两种结果: 1、不 阅读全文
摘要:
顺序就像就是 12345,任何 12354、12543、51234等都不行。 因为是 mq,所以必然涉及三个主体:发送方、消息服务器、消费方。 一、kafka 消息服务器 kafka brokers 顺序接收客户端请求,将消息顺序追加到 partition 尾部,kafka 能保证单个分区里消息的顺 阅读全文
摘要:
一、JVM 架构基础 JVM 进程启动时,ClassLoader 会将需要的所有类加载到内存,主要分为以下三步: Bootstrap Class: 核心类库,由 “Bootstrap Class Loader”负责加载, 例如基础的运行时类库 JRE\lib\rt.jar。 Extension Cl 阅读全文
摘要:
一、protocal buffer 是什么? 一种序列化机制。 什么是序列化? 一种转化为可存储和传输对象的过程。 序列化的方式有很多,那么proto有什么特殊的呢? 它的英文介绍里提到了neutral这个词,中立,无关的。 language-neutral 跨语言:它可以应用于多种开发语言之间数据 阅读全文
摘要:
一、TCP 队列 1、syns queue:半连接队列 TCP 三次握手(参考:TCP建立连接之三次握手),第一步,服务端接收到客户端发送的 syn 消息后,将连接信息放入 syns queue,此时,双方连接尚未建立,称之为半连接。 2、accept queue:全连接队列 TCP 三次握手,第三 阅读全文
摘要:
Redis Hashes 是我们日常使用中比较高频的 Redis 数据类型,内部使用 Redis 字典结构存储,底层实现之一为哈希表结构。 下面从哈希表节点,哈下表结构,Redis 字典,Redis 字典元素操作,Redis rehash 几点来简要概述。 一、Redis 哈希表节点 Redis 内 阅读全文
摘要:
数据出问题了! 一次偶发的端上问题。 排查日志、监控、数据、代码逻辑。 服务没有添加事务性保障,不可避免的数据不一致:缓存有数据,数据库没数据或者相反;有A阶段数据,没有B阶段数据;该有的数据没有,不该有的数据却存在。 主从机制遇到了强一致性需求,偶发的缓存不一致。 服务被埋下了错误的逻辑,日积月累 阅读全文
摘要:
一、背景 什么是重试? 一种保障机制,why not try again! 无论是单体服务模块化的调用,或是微服务当道的今天服务间的相互调用。一次业务请求包含了太多的链条环扣,每一扣的失败都会导致整个请求的失败。因此需要保障每个环节的可用性。 二、动态策略配置 1、基本配置项 涉及重试,我们所需要关 阅读全文
摘要:
1、取数组a[n]中不相邻的m个元素,使得其和最大 不要尝试去使用暴力破解,因为即使可能行得通,但通常也会受制于空间和时间的复杂度。 限制条件:一个数组、取不相邻的元素 取多少个,m个,不确定。是不是要取最多个?不确定。 不过有一点能够确定的是,第一个需要取的元素肯定是在第一个和第二个中间、最后一个 阅读全文
摘要:
一、引子 这要从线上的一个接口偶发异常耗时说起,事情往往不是你想象的样子,尤其是在排查问题的时候,切忌有先入为主的的某些判断。 二、问题: 接口监控图:显示每天总会有那么几次耗时特别长的请求。 三、排查: 1、直观的认识是“偶发”,每天零星的几个,不规律。 对于这种情况,第一感觉是因为服务的波动影响 阅读全文
摘要:
青蛙总是被被要求跳台阶,我想,他一定很累的! 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法? 对于这样的问题,n可大可小,如果n很小,我们可以直观暴力拆解就可以得到答案,但是如果n很大,那么这个问题就升级了。 一般处理问题,我们最直接的思路,可能就 阅读全文
摘要:
一、什么是堆? 维基百科的解释是:堆是一种特别的树状数据结构,它需要满足任意的子节点必须都大于等于(最大堆)或者小于等于(最小堆)其父节点。 二、堆排序 堆排序是通过二叉堆数据结构实现,二叉堆满足以下两个特性: 1、满足堆的基本特性 2、完全二叉树,除了最底层外,其它层都已填充满,且是从左到右填充。 阅读全文
摘要:
1、什么是SDS? Redis 自定的字符串存储结构,关于redis,你需要了解的几点!中我们对此有过简要说明。 Redis 底层是用C语言编写的,可是在字符存储上,并未使用C原生的String类型,而是定义了自己的字符串结构 Simple Dynamic Stirng,简称SDS。 SDS基本结构 阅读全文
摘要:
一、什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念。TCP是传输层协议,他传输的是“流”式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心。它只是根据缓冲区状况将数据进行包划分,然后进行传输。 在这个前提下,就有可能发生发生同一个业务数据被分割程多个数据包,或者多个业务数据被打包到 阅读全文
摘要:
Channel、EventLoop、Unsafe、multiplexor、AdaptiveRecvByteBufAllocator、ChannelPipeline... 阅读全文
摘要:
netty 高性能之道... 阅读全文
摘要:
服务化分包、粒度、异常、兼容性等规约... 阅读全文