自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【详细!!】计算机类书籍整理

计算机相关的书籍太多太多了,整理太多反而很乱,这边我根据自己的经验和理解选了一些典型的书籍,大部分是自己看过觉得很有用的,有些是听说很nice的,有些是经典的,大家可以自行下载。,有一说一,整理太麻烦了资源都是网上找的,切勿商用,侵权请联系我进行处理。

2022-12-11 21:28:02 1156 1

原创 这一次,吃了Redis的亏,也败给了GPT

这也是此次组内系统故障的根因,同事在用zscan的时候并没有传count,但是元素数量超过了128个,导致只扫描了10个后就停止了,代码也没有继续从返回的cursor扫描,导致了zset中存在大量的元素未被删除,被延迟任务队列监控线程通过zrangeByScore扫描到,错误地认为这些元素超时而返回了错误的系统信息。该系统采用的是zset的方案,在系统稳定运行了三年多后,这周出现了一个大面积故障,背后的原因居然是zscan的问题,我们今天就简单复盘一下这次的故障,好好盘一盘zset。

2023-03-19 18:25:27 2766 8

原创 二叉搜索树与Mysql索引的亲密关系

现在为止其实已经可以查到我们想要的数据了,先找到第一个数据页,然后遍历其中的行数据,没找到往下一页找,但就是太慢了,所以需要优化,先从单数据页中进行优化,如果行数据小的话,一页也可以存下很多行,如果以O(N)的复杂度去遍历,是低效的,行数据是有序链表,有序的数据优化查询我们可熟悉啊,什么二分查找、跳表等,InnoDB也是差不多的想法,利用了上面页结构图中的。如上图所示,如果我们查找id为3的,那么顺序就是先找到跟索引页根据目录找到页号34,然后3在1和5之间,所以找到页号10,然后找到对应的数据。

2022-12-25 13:45:34 708

原创 【专栏】核心篇09| 怎么保证缓存与DB的数据一致性

这样看下来,写请求时有两种做法,删除缓存或者直接更新缓存,这两种做法看起来最终的效果一致,但是当我们从缓存利用率的角度出发,更新缓存会将所有更新DB的值都重新刷回缓存,如果大量的更新值都不会频繁读,那么这种策略就会导致大量的无效缓存,因此这种方案更适合读写流量差不多的情况下,写完后马上会被读的场景,否则,采用删除缓存的做法会更好,因为只有读时才会重刷缓存。因此我们今天讨论的问题就是在两种模式下,数据的增删改查出现缓存与数据库数据不一致的问题,为了更清楚,我们只拿只读缓存举例,最后对比一下两者即可。

2022-12-18 17:43:40 545

原创 【持续更新】计算机类PDF整理

计算机相关的书籍太多太多了,整理太多反而很乱,这边我根据自己的经验和理解选了一些典型的书籍,大部分是自己看过觉得很有用的,有些是听说很nice的,有些是经典的,大家可以自行下载。,有一说一,整理太麻烦了资源都是网上找的,切勿商用,侵权请联系我进行处理蓝奏云下载不限速,但是会有,点击验证并下载,谷歌浏览器保留就行,百度云没会员实在太慢了。。。放心,

2022-12-16 12:33:22 548

原创 【专栏】实践篇08| All in docker!动手搭建Redis集群

然后我们先部署一主两从,编写docker-compose.yml,文件主要是创建了三个实例容器,并开启aof,分别映射到主机6379到6381三个端口上,并通过刚才创建的虚拟网卡进行通信和和分配ip​​​​​​​。验证没问题后我们开始部署哨兵实例,哨兵是特殊的Redis实例,因此我们先下载配置文件,并修改其中关于监控目标的实例地址信息,其中hostip设置成主机ip或者设置成主库在虚拟网卡上的ip也是可以的​​​​​​​。顺便写一个clusterStop.sh批量停止​​​​​​​。

2022-12-12 11:05:48 373

原创 【专栏】核心篇07| Redis “jio”美的集群模式

Redis专栏合集【专栏】01| Redis夜的第一章【专栏】基础篇02| Redis 旁路缓存的价值【专栏】基础篇03| Redis 花样的数据结构【专栏】基础篇04| Redis 该怎么保证数据不丢失(上)【专栏】基础篇05| Redis 该怎么保证数据不丢失(下)【专栏】核心篇06| Redis 存储高可用背后的模式 前一节我们从存储高可用的角度讲了一下其背后的经典架构模式,数据库发展这么多年,发展到分布式、云计算、大数据的时代,单机一体化自然有些水土不服,随着Google的GFS、MapRed

2022-12-03 20:28:20 604

原创 【专栏】核心篇06| Redis 存储高可用背后的模式

通过前两节我们了解了在单实例下Redis是如何保证数据不丢失的,而作为NoSql的分布式键值数据库,往往以集群的方式提供服务才能保证所谓的”高可用“,而复杂度也会随着服务模式的改变而提升,多个实例之间的复制延迟导致的数据不一致、宕机实例的发现与切换等问题随之产生,这几乎是所有分布式存储都会遇到的问题,因此我们这一节抛开Redis,从存储高可用的角度看看背后的运作模式与规律。

2022-11-26 15:24:49 565

原创 【专栏】基础篇05| Redis 该怎么保证数据不丢失(下)

Redis的数据可靠性保证我们就告一段落,这样看Redis在单机下既有了花样的数据结构保证了存储的多样性,也有了AOF和RDB保证了作为一个数据库的Crash Safe,而我们知道Redis属于键值数据库,键值数据库与传统关系型数据库最大的不同就是去关系,这也是NoSql数据库的最大特征,这也为分布式数据库做了铺垫,Redis作为分布式键值数据库,集群模式才是工业王牌,所以我们需要了解Redis是如何提供分布式服务的以及如何处理分布式系统的问题的,下期见~

2022-11-19 21:04:33 869

原创 【专栏】基础篇04| Redis 该怎么保证数据不丢失(上)

AOF(Append Only File),从名字可以看出是一种追加写的文件,利用了磁盘顺序写比随机写高效的特性。我们直接看右边可以看到我们的操作'set'以及键和值的字符出现,除此之外还有*和$符号,这边稍微解释下,*后面的数字表示这个命令有几个部分,$后的数字表示每个部分有几个字节,这样再回头看是不是就清楚了,比如name有四个字节,所以就是$4。变成了只有三个元素的操作,格式也有了些变化,总体来说体积变小了很多,这就是AOF重写的作用,面向结果型的数据压缩,不记录中间过程。

2022-11-13 15:01:42 653

原创 【专栏】基础篇03| Redis 花样的数据结构

上一节我们讲了Redis作为一个旁路缓存的基本工作模式以及旁路缓存的意义所在,也提到了Redis相比于简单的hashmap的get/set模式有更强大的支撑,其中Redis丰富的数据组织结构与巧妙的数据存储结构是Redis广受欢迎的原因之一,这一节我们就来看看Redis花样的数据结构。

2022-11-11 23:08:29 620

原创 【专栏】基础篇02| Redis 旁路缓存的价值

这一小节我们了解了旁路缓存以及旁路缓存的工作模式,Redis作为一款旁路缓存系统,本质是数据服务,我们上面举了一个hashmap的例子粗糙地形容了一下基本读写功能,而Redis作为最受欢迎的旁路缓存,它丰富的数据结构是其地位不倒的重要原因之一,除了字符类型我们有各种奇奇怪怪的存储需求比如队列、集合或者是map甚至是定制的数据结构,本质是服务于业务,因此我们下一节会介绍Redis的基本数据结构,看看Redis是如何高效地利用珍贵地内存资源的。只读缓存将最新的数据维护在DB中,缓存不用关心数据的可靠性。

2022-11-05 13:32:04 489

原创 docker代理配置

就把配置中的HTTPS_PROXY 中的https改成http,因为报错信息提示这个请求可能不是走的https。该方法是持久化的,修改后会一直生效。该方法覆盖了默认的docker.service文件。

2022-11-01 13:45:43 569

原创 【专栏】RPC系列(实战)-负重前行的“动态代理”

这一节我们实现了动态代理部分的逻辑,大家应该体会到了动态代理在RPC中的应用是怎样的,它最主要的作用在于代理远程服务,封装了组装调用远程服务的请求并获取结果这部分的网络交互逻辑,对于客户端只需要调用代理类中的目标方法就行了,这也是我们在专栏开头说到,RPC像调用本地方法一样调用远程服务的“魔法”所在。中我们已经知道了,替我们负重前行的是代理,所以包括寻找服务、封装调用参数、调用远程服务等操作都是在代理中完成的,这一节我们就回到客户端调用开始剖析动态代理部分的实现。

2022-10-07 10:27:15 546

原创 【专栏】RPC系列(实战)-低配版NameServer

这一节我们实现了一个低配版的NameServer,如果你想拥有一个工业级的服务注册中心,那么可以采用开源的工具帮助你,你也可以参考开源框架自己实现的注册机制,至少通过这一小节我们知道了NameServer的功能,下一小节我们会讲解动态代理部分的实现,把整个调用链路上最后的代理类去补上。然后我们实现一个基于Json文件的NameServer,将服务与地址的关系记录持久化到Json中,并编写SPI的配置文件com.sparrow.rpc.api.NameService。路由策略与负载均衡。

2022-10-01 22:53:41 672

原创 【专栏】RPC系列(番外)-“土气”的IO实现

一步步带你了解IO模型和线程模型

2022-09-18 10:51:04 552

原创 【专栏】RPC系列(番外)-IO模型与线程模型

这是番外篇的第一篇关于网络IO的小节,本来想直接进入实战,但是为了大家理解还是写篇番外篇来介绍一下网络IO,再过渡到Netty。并提前说明一下番外篇是对我们主线RPC系列的补充,如果读者熟悉网络相关可直接跳过。...

2022-08-29 22:10:55 378

原创 【专栏】RPC系列(实战)-优雅的序列化

前一小结我们已经熟悉了实现一个RPC框架,必需和极其重要的组件与功能,这一节我们将会以序列化为起点,构建我们的Sparrow-Rpc

2022-08-23 22:55:28 195

原创 【专栏】RPC系列(实战)-摸清RPC骨架

我们拿到了服务地址后,就可以进行通信了,之前我们提到过了协议与序列化,这时候就涉及到网络的知识了,还是getUserByName,我们至少需要把函数签名、方法参数组装成我们的数据,按照我们的应用层协议和序列化方式传给对方,那么这个发送的动作我们就需要网络框架来帮我们做掉,总不能自己去经历TCP那套bind、listen、accept,所以。其实还有很多非核心但很重要的机制,都包含在各个细节中,只有有了这些机制的保护,才能成为一个企业级的应用,后面我们会逐渐展开,比较深入的,我会在番外篇中讲解。

2022-08-19 22:57:31 735

原创 【专栏】RPC系列(理论)-动态代理

《RPC实战系列》,今天我们讲一讲RPC中的对你透明的“”动态代理

2022-08-14 21:08:17 1024

原创 【专栏】RPC系列(理论)-协议与序列化

RPC的协议与序列化

2022-08-06 10:29:17 292

原创 线程池的死锁事件

线程池的死锁问题

2022-07-23 18:13:41 1074

原创 IDEA整体字体大小修改

2021-06-06 20:13:40 1568 2

原创 几个常用的网络诊断命令

Pingping ipTelnet(查看目的端口是否可达)telnet ip port可达:Trying 39.97.123.50...Connected to 39.97.123.50.Escape character is '^]'......

2020-12-22 16:47:32 991

原创 Ubuntu下autossh 解决内网访问

autossh 解决内网访问准备公网服务器(阿里云、腾讯云都可)需要访问的目标内网服务器公网服务器配置修改公网主机 B 的 SSH 配置文件/etc/ssh/sshd_configGatewayPorts yes这样可以把监听的端口绑定到任意 IP 0.0.0.0 上,否则只有本机 127.0.0.1 可以访问。重启 sshd 服务sudo service sshd restart内网服务器配置在内网主机 A 上,执行以下命令安装 AutoSSHyum install aut

2020-12-14 11:04:12 1633

原创 Ubuntu18.04开热点小手册

获取链接ip link show 我的网卡标识是wlp3s0配置热点设备文件$ IFNAME="wlp3s0"$ CON_NAME="myhotspot"$ nmcli con add type wifi ifname $IFNAME con-name $CON_NAME autoconnect yes ssid $CON_NAME设置链接方式为共享nmcli con modify $CON_NAME 802-11-wireless.mode ap 802-11-wirel

2020-11-19 21:18:47 477

原创 java 编译运行包依赖的文件

项目结构其中只有Main.java和test包下的Test.java 有依赖关系,其他文件不用管编译过程进入到src目录下,指定编译出来的class文件路径为 binjavac -d ../bin company/Main.java test/Test.java执行java -cp ./bin com.company.Main -cp指定classpath当然,运行的时候jvm也会自动从当前路径下去找class文件,所以也可以进入到bin目录下去执行java c

2020-10-09 11:04:21 578

原创 Linux性能优化---平均负载(Load Average)

Load Average我们使用top命令可以看见这边的load average是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。这三个值分别表示2分钟、5分钟、15分钟内的平均进程数。所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是

2020-07-09 00:03:00 220

原创 用户喜好

为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。输入描述:输入: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行.

2020-06-17 20:38:17 287

原创 SQL 题目整理

题目描述对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` ...

2020-04-01 21:17:03 216

原创 字符串最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。链接:https://leetcode-cn.co...

2020-03-12 20:58:40 751

原创 mysql 解决不支持中文的问题

前提环境是在ubuntu下方法1.查看一下mysql默认字符集character_set_client为客户端编码方式; character_set_connection为建立连接使用的编码; character_set_database数据库的编码; character_set_results结果集的编码; character_set_server数据库服务器的编码;...

2020-02-05 20:28:41 902

原创 shortest-unsorted-continuous-subarray

Given an integer array, you need to find onecontinuous subarraythat if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too.You need to find ...

2019-12-26 12:05:04 180

原创 oh-my-zsh和tmux配置(个人)

Oh-my-zshhttps://segmentfault.com/a/1190000015283092目录lib 提供了核心功能的脚本库tools 提供安装、升级等功能的快捷工具plugins 自带插件的存在放位置templates 自带模板的存在放位置themes 自带主题文件的存在放位置custom 个性化配置目录,自安装的插件和主题可放这里推荐的插件zsh-...

2019-12-12 21:49:57 1684

原创 Pow(x,n)

如果只是简单的将x循环n次进行乘积的话,一定会超时,所以,这里采用了对半分的方法,先看代码:double myPow(double x, int n) { double res=1.0; for(int i=n;i!=0;i/=2) { if(i%2!=0) res*=x; x*=x; }...

2019-11-22 15:58:34 181

原创 node在ubuntu下的安装(含NVS安装)

一般直接:sudo apt-get updatesudo apt-get install nodejs但有时候需要一些另外版本:https://nodejs.org/zh-cn/download/releases/我们知道/usr/local下都是放一些管理员的应用程序,我们在上面解压下来的文件里面有node和npm,直接复制到路径下就可以:wget https://no...

2019-09-25 15:13:51 610

原创 数论--负进制转换

首先需要明白正进制的转换,比如7转换成二进制,那么7/2=3余1,3/2=1余1,1/2=1余0,所以7的二进制就是倒着写余数0111那么如果-7转换成-2进制呢,因为-7/-2=3余-1,所以我们这个-1没法处理,所以我们需要一个看起来很简单但是想不到的转换公式:(商+1)*除数+(余数-除数)=商*除数+除数+余数-除数=商*除数+余数=被除数也就是我们当-7/-2=...

2019-08-19 19:45:53 411

原创 数论--约数研究

题目大意也就是计算因数的个数,f(6)表示从1~6所有值约数之和。那么循环一下n,n/i表示因数有i的数的个数,那么以4为例:因数为1:4个因数为2:2个因数为3:1个因数为4:1个所以总和是4+2+1+1=8个...

2019-08-19 16:14:59 226

原创 21. Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.Example:Input: 1->2->4, 1->3->4Output: 1-...

2019-08-17 15:21:25 108

原创 数论---最大公约数最小公倍数

Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson 正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数c1 和c2 的最大公约数和最小公倍数。现在Hankson 认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,...

2019-08-16 17:09:04 309

空空如也

空空如也

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

TA关注的人

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