自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 分布式布隆过滤器

guava框架的问题笔者曾经也想过,既然guava只是个框架,那为什么不包装成一个项目,把API封装在接口中对外提供服务呢?可是实际上,这种操作所带来的问题极多,解决起来,成本高的可怕,后面会做对比讲解。redis的bitmap实现bitmap是什么?【位图不是实际的数据类型,而是在String类型上定义的一组面向位的操作】这句话很笼统,下面笔者详细解释一下这句话。bitmap的核心APISETBIT key offset valueGETBIT key offsetB

2020-11-24 10:30:33 1031

原创 负载均衡笔记

负载均衡算法随机分配缺点:随机取适用的场景是:各服务器处理能力都差不多(实际上是不太可能的)不能满足我们 "能者多劳" 的诉求func main() { servers := []string{ "127.0.0.1:8080", "127.0.0.1:8081", "127.0.0.1:8082", "127.0.0.1:8083", "127.0.0.1:8084", "127.0.0.1:8085",} for i := 0; i < 10; ..

2020-11-18 17:32:43 241

原创 redis集群笔记

数据存储设计redis是每个节点只存储全部数据的一部分。启动后看其中一个主机的配置文件,可见槽怎么分的,谁是主谁是从,自己(myself)是什么角色都有记录。计算过程键的桶编号计算方法// key先经过CRC16函数计算出一个值,再对16384取模HASH_SLOT = CRC16(key) mod 16384节点的增减原则:反正一共就16384份,加节点了,大家都给它匀一点儿,减节点了,大家就把它的分一分。集群内部通讯设计各个节点互相通信,保存各个

2020-11-13 17:00:38 270

原创 redis的哨兵笔记

每个sentinel都会监控着master、slave,并要各种信息所有sentinel组成一个集群,进行信息发布、订阅、同步......如下图,端口26379的sentinel联系上了另外两台sentinel主观下线和客观下线1. 主观下线:一个哨兵节点判定master节点down掉是主观下线,SRI_S_DOWN。2.客观下线:半数哨兵节点都判定master节点down掉,此时多个哨兵节点交换主观判定结果,才会判定master节点客观下线,SRI_O_DOWN。此时需要进..

2020-11-12 16:49:19 234

原创 Redis主从复制的笔记

命令从机执行slaveof [master.ip] [master.port]开始主从同步,用配置文件也可以过程简述1、slave>>>发送PSYNC命令>>> master2、master 调用 bgsave命令fork 一个后台子进程生产 rdb 文,并在缓冲区中记录从现在开始执行的写命令。3、master 发送 rdb 文件到 slave,slave 丢弃自己所有的数据并阻塞自己,专心做 rdb 读取,数据恢复。4、在这个过程中,...

2020-11-11 11:49:02 79

原创 snowflake的一些总结

前言假如面试时候,问到分布式唯一ID生成的相关问题,我觉得snowflake应绕不开,既然绕不开,那怎么回答呢?简洁介绍64位的二进制表示,分了4块第1块不用管,0是固定的,表示正数。核心就在后3块。第2块:当前时间戳减 开始时间戳,单位毫秒。开始时间一般指定位项目上线日期就行。很多博客都简略的说“时间戳”,包括图片中也是。很容易混淆,这里存的可不是你用xx语言的一个time相关的API调用得出的那个值。第3块:10位,范围 0~1023 = 1024.

2020-11-10 15:34:22 561

原创 Kafka之ack机制

前言之前的博客里说了,Kafka的消息同步是一种ISR机制,本质上是“完全同步”的一种优化。都在说,消息被ISR中所有副本都写入才算写入成功。但是这样未免定的太死板了,所以,Kafka给出了我们选择。这个选择就是ack机制生产者参数request.required.acks 是producer可以指定的参数ack = 1 (默认)leader写入成功,producer就能收到成功响应(这和同步不同步没关系,你就当只有leader,没有follower就行)ack = 0.

2020-11-06 16:17:21 1236

原创 Kafka可靠性之HW与Leader Epoch

《深入理解Kafka:核心设计与实现原理》是基于2.0.0版本的书在这本书中,终于看懂了笔者之前提过的几个问题准备知识1、leader里存着4个数据:leader_LEO、leader_HW、remote_LEO集合、remote_HW集合2、follower里只保存自身的:follower_LEO、follower_HWHW和LEO更新过程假设:1个leader 和 2个follower此时:leader_LEO = 5、leader_HW = 0、所有follower.

2020-11-06 15:45:50 1611 1

原创 Kafka之ISR机制的理解

问题1:Kafka对于producer发来的数据的怎么保证可靠性?每个partition都给配上副本,保证数据不丢失。副本数据同步策略和zookeeper不同的是,Kafka选择的是全部完成同步,才发送ack。但是又有所区别。所以,你们才会在各种博客看到这句话【kafka不是完全同步,也不是完全异步,是一种ISR机制】这句话对也不对,不对也对(谜语人......)首先笔者认为:Kafka使用的是完全同步方案完全同步的优点同样为了容忍 n 台节点的故障,过半机制需要 2n+1

2020-11-03 17:40:08 20001 17

原创 Kafka需要知道的一些基础知识点

broker:一个broker代表了一个kafka实例topic 主题: 对消息进行分类partition 分区:同一个主题的所有消息,并不是存在一个broker里而是由1个或多个partition分别存储一部分,这些partition分布在不同的broker里(类似redis的cluster)这么做的目的是什么?和所有使用分区/分片概念存储数据的目的是一样的。partition-leader +partition-follower :数据备份,只有leader提供服务,fol.

2020-10-30 18:08:10 1082

原创 分布式锁需要知道的一些基础知识点

前言分布式锁,是一个知识体系,记住,作为API调用工程师,必须要学习,必须必须必须的。但是不用你去写,你也写不了,你也写不明白,生产中都是用框架的,也没人敢用你写的。你要知道的是,哪些做法是错的?带来了什么问题?应该如何解决?至于能不能写出来,who care? 重要的是分布式锁的思想。分布式锁分类1、类cas自旋分布式锁,client只能通过轮询,尝试加锁:mysql / redis2、server有事件通知机制,client能接收后续锁的变化,无需轮询:zookeeper /

2020-10-13 19:19:18 406

原创 Zookeeper需要知道的一些基础知识点

1、cap2、base3、一致性 强一致性、弱一致性、最终一致性4、leader 过半机制 5、2PC 两阶段提交leader选举 触发规则1、集群启动2、leader挂掉3、follower挂掉后,leader发现已经没有过半follower跟随自己了【不能对外提供服务了】zk机制:所有的写请求都是由leader处理选举的过程:投给自己沟通pk : pk的依据:谁的数据最新改票事务性请求:create set del生成事务日志,记录事务ID:...

2020-10-10 17:29:00 555

原创 缓存和数据库数据一致性

说起这个话题,一般讨论的都是数据库的update操作和缓存delete(key)的执行策略问题。为什么不是更新缓存而是删除缓存?因为很多场景缓存的内容都是聚合数据,比如是几张表的数据聚合到一起,或者是需要经过大量计算才能得出结果的数据。所以没必要每次更新时都重新算一遍,直接删除,等更新后的get请求进来,会从新计算放入缓存中的。还有一种可能就是并发update的时候,没办法保证缓存set的顺序和数据库update的顺序是一致的。我的结论先数据库 update,后缓存 del key

2020-09-27 11:51:09 118

原创 缓存穿透、缓存击穿、缓存雪崩

前言发明这几个词的人就NM像个脑瘫儿,铁弱智。有问题就说明问题,整些个自创的名词真的恶心。前置知识回顾缓存就是为了减轻数据库的压力。请求——>缓存——>数据库直白讲,要是缓存里有,就不用去数据库再查一遍了。名词解释缓存穿透:要查询的数据根本就不存在,这里的不存在说的是数据库里本身就没有。比如一张表里的自增ID才到100,但大量请求查询id=200缓存击穿:要查询的数据存在,数据库里有,缓存里也有。但是我们往往在setKey的时候都会设置时间。如

2020-09-24 14:55:32 104

原创 LFU 起夜级李姐

Go代码实现type Node struct { key, val, freq int pre, next *Node}type DoubleLink struct { head, tail *Node length int}type LFUCache struct { freq_map map[int]*DoubleLink key_map map[int]*Node cap int}func Constructor(capaci

2020-09-23 11:18:58 169

原创 【审批】转交 功能的实现和思考

提问和思考如果你是使用Activiti系列框架做的审批系统,那么当用户提出需要【转交】功能的时候,你需要如何实现?如果你们的审批系统是自己设计的,没用框架,那么为了满足【转交】这个功能,设计时需要考虑哪些?功能介绍Activiti框架支不支持转交功能,有没有API?答案是:这个可以有。你要知道,这些工作流框架都是外国人写的,是,你可以说也有中国人提交mr,但是架构和思想还是遵从着西方人那一套。如果你是工作流相关业务的开发人员,你一定听说过一个名词:中国式工作流。delegat

2020-09-16 17:51:23 1190

原创 LRU 起夜级李姐

LRU是什么?LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。关于LRU的误区当你搜索lru相关的信息,很多都是和redis联系在一起的。而且当你基础知识储备不够的时候,很容易就陷入了一个误区,以为lru是redis才有的东西。其实不是。且,

2020-09-11 14:45:19 607

原创 Redis持久化

RDB:在指定的时间间隔能对你的数据进行快照存储。 AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。rdb配置save 900 1 表示900s内有1条是写入,就触发产生一次快照,可以理解为就进行一次备份。 save 300 10表示300s内有10条写入aof配置always:把每个写命令都立即同步到aof,很慢,但是很安全 everysec:每秒同步一次,出问题会丢失一秒的数据(实际生产使用这个) no:redis不处理交给OS来处理,非...

2020-09-04 15:28:42 103

原创 Redis事务 笔记

放弃执行事务事务执行失败情况1事务在执行EXEC之前,入队的命令可能会出错。比如说,命令可能会产生语法错误(参数数量错误,参数名错误,等等),或者其他更严重的错误,比如内存不足(如果服务器使用maxmemory设置了最大内存限制的话)。事务执行失败情况2命令可能在EXEC调用之后失败。事务中的命令可能处理了错误类型的键,比如将列表命令用在了字符串键上面,诸如此类。watch监控WATCH命令可以为 Redis 事务提供 check-and-s...

2020-09-03 16:48:26 79

原创 Redis命令实战:使用场景记录

String类型计数器类INCR key相当于 i++将key中储存的数字值增一。如果key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。INCRBY key increment相当于 i +=increment将key所储存的值加上增量increment。如果key不存在,那么key的值会先被初始化为0,然后再执行INCRBY命令。INCRBYFLOAT key increment为key中所储存的值...

2020-09-03 15:10:30 1224

原创 布隆过滤器 极简入门

前言:搜索缓存穿透问题,常常看到解决方案中提到 布隆过滤器。那么这个东西是啥意思?干什么用的?怎么用?原理是什么?请看本文的极简入门教程。(严格说,本文是笔者在学习时,提取出的纯干货,力求一看就懂)1、应用场景解决缓存穿透问题,业界通用2种方案缓存空对象 or 布隆过滤器缓存空对象:实现简单,不会出错布隆过滤器:实现复杂,存在错误率2、布隆过滤器 的 作用把你要缓存的所有key全都塞进布隆过滤器中。在查询缓存的时候,先拿着key去布隆过滤器中查一下,看是否存在,不存在就可

2020-08-22 17:09:46 238

原创 《Redis设计与实现》[压缩列表]章节笔记

1、什么是压缩列表?由一系列特殊编码的连续内存块组成的顺序型(sequential)数据结构。一个压缩列表可以包含任意多个节点(entry), 每个节点可以保存一个字节数组或者一个整数值。2、有什么好处?节约内存3、整体结构如何?4、节点的结构每个压缩列表节点可以保存一个字节数组或者一个整数值(说白了还是一个节点保存一个元素)encoding和content 熟悉不?参考上一篇【整数集合】的笔记previous_entry_length 必须要大书特书

2020-08-07 11:45:15 121

原创 《Redis设计与实现》[整数集合]章节笔记

1、什么是整数集合?整数集合(intset)是集合键的底层实现之一,是 Redis 用于保存整数值的集合抽象数据结构。(集合对象(set)的编码可以是intset或者hashtable)2、既然集合对象set底层有2种数据结构实现,那么什么时候用整数集合呢?当集合对象可以同时满足以下两个条件时, 对象使用intset编码:集合对象保存的所有元素都是整数值; 集合对象保存的元素数量不超过512个;(这个512是可以通过配置文件修改的,不用记)不能满足这两个条件的集合对象...

2020-08-06 19:16:12 156

原创 《Redis设计与实现》强烈推荐

前言:是否有听过有些面试官这么问或者博客这么写:说说redis有几种数据类型?你肯定知道怎么答:string、list、hash、set、zset自从我看了这本书,我发现了这种说法是极其不专业的,原因稍后分析。先看书中定义:【Redis 并没有直接使用这些数据结构来实现键值对数据库, 而是基于这些数据结构创建了一个对象系统, 这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对象这五种类型的对象】对,没有错,面试官想问的是这5个,你也知道要回答的是这5个。但是,他们不是数

2020-08-06 15:52:20 492

原创 go语言:切片Slice

从数组中切出Sliceslice的切片操作arr[i:j],其中0 ≤ i≤ j≤ cap(arr),用于创建一个新的slice,引用arr的从第i个元素开始到第j-1个元素的子序列(左闭右开区间)。新的slice将只有j-i个元素。如果i位置的索引被省略的话将使用0代替,如果j位置的索引被省略的话将使用len(arr)代替。从切片中切出Slice切片本身不存储元素...

2019-08-29 11:46:57 140

翻译 go语言:数组 Array

数组的特点(编程语言大多如此)分配在连续的内存地址上 元素类型一致,元素存储宽度一致 空间大小固定,不能修改 可以通过索引计算出元素对应存储的位置(只需要知道数组内存的起始位置和数据元素宽度即可) 会出现数据溢出的问题(下标越界)默认情况下,数组的每个元素都被初始化为元素类型对应的零值,对于数字类型来说就是0。我们也可以使用数组字面值语法用一组值来初始化数组:Go语...

2019-08-19 11:24:14 170

原创 Go语言 struct结构体 能比较么 == 或 !=

同一个struct的2个实例能不能比较 == !=答案:可以能、也可以不能两个不同的struct的实例能不能比较== !=答案:可以能、也可以不能虽然答案都一样,但是涉及到的知识点略有不同如果结构体的所有成员变量都是可比较的,那么结构体就可比较如果结构体中存在不可比较的成员变量,那么结构体就不能比较结构体之间进行转换需要他们具备完全相同的成员(字段名、字段类型、字...

2019-06-11 14:24:18 14732 2

原创 TCP/IP、TCP/IP协议、TCP/IP协议族 —— 语义理解的坑人之处

我不知道一个非计算机相关专业或者是计算机网络没学过的同学,在你自学http的时候,有没有听过一句话: http是基于TCP/IP协议的一种应用层协议(大概意思差不多)那么针对这句话没计算机网络基础的兄弟,你会不会理解http协议的底层或者说下一层 使用的是 TCP + IP 这2种协议?如果你觉得是,那么请你继续往下看如果你觉得不是, 那么你可以右上角或左上角关闭了TCP/...

2019-05-09 13:20:44 1809

原创 字符集及字符编码扫盲

概念区分字符集: 一本大字典、老大老大的一本字典字符: 字典里的字(可以是 各国文字... 数字 字母 标点符号 图形符号 特殊符号...)字节: 文件的长度(或者说大小)的单位 这里可以理解为:字符经过了字符编码后,变成了0和1组成的长串串,那么这个长串串到底多长? 1字节 = 8bit字符编码: 把字符集中的字符 编译 ...

2019-05-07 22:01:02 247

原创 goland 报错: go build xxxxx: open /usr/local/go/xxxxxxx/net/route.a: permission denied

直奔主题goland 使用 go 1.11.1写了个demo自己编译 运行 没问题但是用 goland 启动运行 就报错go build golang_org/x/net/route: open /usr/local/go/pkg/darwin_amd64/vendor/golang_org/x/net/route.a: permission denied重点 是 : /u...

2019-04-29 22:15:52 6565 1

原创 向腾讯企业邮箱发送邮件失败,报错: 559

代码 : springboot 搬砖级 发送邮件代码发送方: 阿里云邮件推送服务接收方: 腾讯企业邮箱-------------------------------------------------------------------线上突然 接到报警,发送邮件失败此前 遇到最多的情况 就是 邮箱写错了,不然 很稳的,跑了半年了都没出事在我发布这篇博客之前 2019-4...

2019-04-28 11:41:20 7691 2

原创 Go 基本数据类型的相互转换

概念Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时都需要显式转换也就是说 Golang 中数据类型不能自动转换表达式 T(v) 将值 v 转换为类型 T T: 就是数据类型,比如 int32,int64,float32 等等 v: 就是需要转换的变量注意事项1) Go 中,数据类型的转换可以是从 范围小 --> 范围大,也可以 范围大...

2019-03-18 19:59:13 370

原创 Go 数据类型

整型Golang 的整数类型分为有符号和无符号int 和 uint 的大小和系统是多少位(32 / 64)有关Golang 的整型默认声明为 int 型面试题:i := 123 那么 i 是什么类型?占用多少字节?浮点型浮点数在机器中存放形式的简单说明, 浮点数 = 符号位 + 指数位 + 尾数位浮点数都是有符号的Golang 浮点类型有固定的范围和...

2019-03-18 10:54:05 125

原创 Go 语言的转义字符(escape char)

说明:常用的转义字符有如下:1) \t : 表示一个制表符2) \n :换行符3) \\ :一个\4) \" :一个"5) \r :一个回车练习题:用一句输出语句,输出如下效果...

2019-03-16 13:28:42 3756

原创 go语言和Java语言的区别(持续更新......)

1) Go 源文件以 "go" 为扩展名【Java是 .java】2) Go 应用程序的执行入口是 main()函数3) Go 语言严格区分大小写 go语言没有Java那么丰富的 "权限管理:public、private、protected、默认" go是通过 大小写来表示权限的,所以 必须严格区分,包括方法名 和 字段名4) Go 方法由一条条语句构成,...

2019-03-16 13:17:10 10658 2

原创 go语言执行流程(go build / go run)

go build1: 写代码 xx.go 文件保存(有些编译器默认不自动保存,编译报错,比如 vs code,但是idea 就自动保存,切换编译器 有时候可能会忽略)2: 使用 go build 命令 编译文件, 生成了 可执行文件(window 是 xx.exe ,Mac 是 unix可执行文件)在该源文件目录下,通过 go build 对 hello.go 文件进行编译...

2019-03-16 13:03:42 5980 2

原创 MyBatis在insert插入对象时,返回自增主键失败

B话不多说,直接说结论!首先你要确定几点1: 你数据表的ID 是不是 设置了自增?如果没有,那么一切都是徒劳2: 必须的几个属性你添加了么?useGeneratedKeys="true"(默认是false) keyProperty="id"3: keyProperty 这个设置的是 你传入对象的属性名,不是你数据表的字段如果以上情况都满足,那么你很有可能犯了一个和我一样...

2019-03-15 20:31:34 2261

原创 Go语言:匿名函数

2018-12-06 11:55:16 1402 1

原创 Go语言:函数作为值的用法

 

2018-12-06 10:41:35 125

原创 Go语言:函数声明及变量作用域

 

2018-12-05 21:59:27 602

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除