自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(158)
  • 资源 (8)
  • 问答 (1)
  • 收藏
  • 关注

原创 源码阅读总结

过去一年多的时间里,阅读了goim、blotDB、levelDB的源码,在这学习过程中,见识了大神们有趣的代码设计及效率优化的点。2.版本元数据写入。1.有序,保证有序,可以通过二分法查找,查找key可以将时间复杂度降至O(long2N),同时有利于范围查找。1.WAL顺序写来保证写的效率,并通过该文件来做崩溃恢复,该方式可以有效的保证写的效率(levelDB)。2.建立缓存池,当需要缓存时,从缓存池中获取,用完之后再放回缓存池。1.在高并发的情况下,尽可能拆分锁粒度,减少锁的争用(goim)。...

2022-07-16 08:42:21 216 1

原创 go LevelDB 跳跃表的实现原理

go leveldb 跳跃表的实现。

2022-07-16 08:31:25 363

原创 《有效学习》

作者: 乌尔里希·伯泽尔本书作者为学习者提供了一些有效学习的策略。价值感是学习的终极动力,找到价值感,就是告诉自己为什么要做这件事,对我有什么意义,它是有效学习的第一步。学习就是一项知识管理的活动,它包含设定学习目标、制定学习计划、掌握基本学习技巧和掌握专业技能。同时做好情绪管理也是进行思维活动的重要因素 。因此,我们需要有目标导向的学习方法,设定一个有挑战的目标(略微超过自身当前的知识水平),制定可执行的计划,有可衡量的指标。 这是一个精益求精的过程,这需要一定的方法和努力,而不是靠单纯的反复练习。(1)

2022-06-25 07:34:48 223

原创 BlotDB 学习总结(三)

通过前两章已经完成1.学习 DB 文件是如何通过字节组织成具体的文件、如何进行读写?2.BoltDB 如何实现事务?3.BlotDB 如何实现 MVCC?最后一章就了解一下 mmap。BlotDB 通过 mmap 来提高读的效率。具体代码在 db.go 中 mmap。具体 mmap 的实现,需要根据允许环境决定,这里我以 window 做为学习,具体代码在 blot_windows 中的 mmap 中。mmap 是一种将文件/设备映射到内存的方法,实现文件的磁盘地址和进程虚拟地址空间中的一段虚拟地址的一一映

2022-06-05 11:00:42 260 1

原创 BlotDB 学习总结(二)

上一章学习 DB 文件是如何通过字节组织成具体的文件、如何进行读写,本章将继续学习1.BoltDB 如何实现事务?2.BlotDB 如何实现 MVCC?首先 BoltDB 是通过 B+ 树来组织 page 的。其中 db 文件,pageid 为 0,1 页固定用于存储 meta 数据。而 BlotDB 也是通过 meta 来实现事务,在 BlotDB 中,只有 meta 数据写入成功数据才能被其他新事务可见(具体代码阅读 tx.go 和 db.go)。先来看看一个事务写事务的开启:上面代码是一个事务初

2022-06-04 11:26:43 321

原创 《底层逻辑:看清这个世界的底牌》

作者:刘润作者在书中为读者提供了一种新颖的方式去看待社会、人情、工作、财富、社会运行的规则等,有些底层逻辑会给人一种打破思维框架,耳目一心的感觉。下面是我比较感兴趣的一些观点。首先是提出的三种对错观就打破了我一些固有的思维模式,就我个人而已,不可否认基本是从表面上去判断对错,其重要原因是个人局限的知识、经历、个人情感等。书中作者给我提供了一种“新”的方式去思考问题。比如下面的场景,你会认为A/B/C谁的错?坏人A诱骗好人B进入C的没有锁门的工地,B失足摔死了。请问,这是谁的错?就个人而已,最直接的反应是就A

2022-06-03 11:01:47 586

原创 BlotDB 学习总结(一)

此次阅读 BlotDB 源码的目的主要是为了了解BlotDB如何实现如下功能。1.学习 DB 文件是如何通过字节组织成具体的文件、如何进行读写?2.BoltDB 如何实现事务?3.BlotDB 如何实现 MVCC?4.通过 BlotDB 了解 mmap。本章主要为了阐述“学习DB文件是如何进行通过字节组织成具体的文件,如何进行读写?”。page 介绍在 BlotDB,一个 db 就是一个文件,以 page 为单位进行读写,并且通过 page 来组织 db文 件,具体可以查看pag

2022-05-28 08:31:17 442

原创 《贫穷的本质:我们为什么摆脱不了贫穷》

作者:(印度)阿比吉特·班纳吉(Abhijit V.Banerjee) (法国)埃斯特·迪弗洛(Esther Duflo)通读全书,觉得对贫穷最好的总结便是这句话“贫穷并不仅仅意味着缺钱,它会使人丧失挖掘自身潜力的能力”。个人认为本书主要回答这两个“穷人为什么一直贫穷?”、“贫穷的陷阱是什么?”。作者通过对不同贫穷国家、家庭、个人的研究,从几个方面去回答这两个问题,包括饥饿(营养不足)、健康水平、基础教育、生育、抵御风险的能力、贷款和存钱、职业选择和政治政策等等(这里说的贫穷,是指那些每日生存费用不

2022-05-14 08:20:07 186

原创 《学会提问》

《学会提问》作者:尼尔·布朗 、斯图尔特·基利。在日常生活中,我们会通过专家、朋友、各种渠道获得对某个事物的认识和理解,但有一个问题是,人们总是容易不加思索的接纳这些信息,甚至将这些不加确认的信息用来形成自己的结论,成为信息的牵线木偶。这其中有几个原因:一是人总是依赖快思考而不是慢思考。二是我们常常倾向某些结论,所以理由都是经过事先挑选,以便达成某个特定结论。三是对事物有刻板印象。四是以自我为中心。总的来说,是我们缺乏评判性思维,而本书提供了许多方法和例子帮助读者去认识和培养自身批判性思维,并学会如何运

2022-04-16 08:20:26 425

原创 《表达力》

《表达力》,作者贺嘉。书中主要内容包括提高表达力作方法、日常聊天的技巧、作者对工作的理解和领导者的理解。表达力表达力的作用体现在日常生活中交流沟通、工作汇报、演讲、写作以及营销等。表达力本身就是一种财富,它能扩大你的影响力,增加你的经济收入等。提高表达力方法高质量表达首先要明确表达的目的,然后根据目的收集素材、建立概念系统,根据不同的目的,按套路诉诸于语言文字等,最后收集反馈,评估表达的效果。明确目的:目的的不同表达的方式不一样,比如你是分享知识,那么侧重讲听众没有听过或者没有深思的内容

2022-04-16 08:09:38 445

原创 原来 goim 是这样实现高并发

本章将从架构和程序设计两个方面来阐述goim 高并发的实现原理。架构首先从架构来说 goim 分为三层 comet、logic 和 job。comet 属于接入层,非常容易扩展,直接开启多个 comet 节点,前端接入可以使用 LVS 或者 DNS来转发。logic 属于无状态的逻辑层,可以随意增加节点,使用 nginx upstream 来扩展 http 接口,内部 rpc 部分,可以使用 LVS 四层转发。job 用于解耦 comet 和 logic。系统使用 kafka 作..

2022-02-20 11:33:59 2480

原创 驾驭情绪的力量

本书作者珍妮弗.泰兹,通过情绪化饮食来讲述情绪是如何影响我们的饮食习惯。饮食与我们息息相关,因此我们更能感同身受,并由此为切入点,来说明情绪是如何影响我们的日常生活和心理健康,并为我们提供一些方法来觉察、接纳自身情绪,通过正念、驾驭欲望和练习痛苦耐受力等训练来提高我们驾驭情绪的能力。什么是情绪化饮食?情绪化饮食是指一个人并非因生理上的饥饿需要,而是因为情绪上的原因去进食的行为,可能是为了驱除无聊感,或者想去短期内为自己提供一种舒适满足的感觉。产生情绪化饮食的原因可能是人们对于未来的事情能带来多少快乐和痛

2022-02-20 08:16:17 329

原创 语言的突破

当众演讲对大多数人而言,开始时都会产生恐惧和不安,导致在演讲过程中感到不自在,无法集中精力,这是正常的,可以通过一些方法去克服。去培养对当众演讲的勇气和自信,比如充分的准备演讲内容,学习一些演讲技巧,不断的练习等等。在《语言的突破》中,作者根据自身的演讲经历,为我们总结了一个成功的演讲是如何产生。首先,演讲的类型可以分为几种,说服性演讲、说明情况的演讲、即兴演讲等。不同的演讲类型,内容和技巧上有差别,但目的无非是说服别人采取行动、说明情况、增强印象、使人信服和让人感到愉快。而观众关注的是我们做了什么

2022-02-20 08:09:24 212

原创 Linux 线上排查

本章介绍一些简单的线上问题排查过程以及解决方案。首先声明一点的是,线上问题的定位主要靠监控和日志,没有什么更好的方法。服务器对于服务器,大多数情况下,我们主要关心磁盘、内存、CPU、网络。1.磁盘(1)利用 df -h 获取磁盘空间状况。(2)利用 du -h 查看文件夹大小。(3)利用 du -sh * 获取目录下文件大小。(4)利用 ls -lh 查看文件大小。2.CPU(1)利用 top 查看进程状态。(2)利用 top -H 查看线程状态。...

2021-10-30 08:15:24 465

原创 Linux 运维命令

本章主要整理 Linux 命令中关于查看系统性能,定位问题的的相命令,包括 top、ps、pidstat、mpstat、iostat、vmstat、netstat、lsof、du、df 和 free 等命令。这些命令涵盖了对进程和系统的CPU、IO、网络等监控,希望对读者有所帮助。注:本章内容来源网络各种博客top用于实时显示process的动态命令参数: 参数 说明 q 退出 ...

2021-10-24 14:36:08 342

原创 Linux 基础命令

本章主要介绍Linux 中常用的命令,具体内容参考目录。文件权限操作1.chgrp 修改文件所属用户组格式: chgrp [-R] 组名 dirname/filename-R 进行递归的持续更改,连同子目录和文件举例::chgrp users install.log2.chown 修改文件所有者格式:chown [-R] 用户名称 文件或目录chown [-R] 用户名称:用户组 文件或目录...

2021-10-01 08:24:25 106

原创 Linux epoll 实现(二)

本章主要介绍 epoll 的基础知识,其他细节已经上一篇文章中说明。注:内容来自 https://mp.weixin.qq.com/s/OmRdUgO1guMX76EdZn11UQEPOLL 数据结构eventpool wait_queue_head_t wq 等待队列链表。软中断数据就绪的时候会通过 wq 来找到阻塞在 epoll 对象上的用户进程。 struct list_head rdllist 就绪的描述.

2021-09-19 08:34:04 104

原创 Linux epoll 实现(一)

本章主要介绍Linux epoll 的实现方式,但在此之前,我们首先要知道一个 socket 的创建流程,以及当数据就绪时,socket 如何被唤醒。当我们了解这些之后,再去理解 epoll 的实现,会更加深刻。注:本章内容主要来源公众号《开发内功修炼》socket 的创建进程的结构在这里,只介绍socket 相关的部分。每个用户进程都会维护一份进程打开的文件列表。当创建一个 socket 时,即创建一个对应的socket 文件,并且在文件列表中维护。...

2021-09-11 08:34:19 295

原创 TCP/IP 数据包如何被接收?

本章主要介绍 TCP/IP 协议中,数据包处理的主要流程。首先我们介绍一些前置信息,然后描述整个接收过程。注:本章内容主要来自公众号“开发内功修炼”的⽹络篇。前置知识术语 项 说明 用户态 只能执行机器的部分指令,使用全部指令集的一个子集。能影响机器的控制指令或者是 I/O 操作指令,在用户态都是不被允许的。 内核态 内核态具有对硬件的完全访问权,可以执行机器能够执行的任何指令

2021-09-04 08:14:38 982

原创 TCP协议中如何保证数据传输的可靠性和效率(下)

上章通过一段小对话,介绍了 client、server和 network之间,为了保证 TCP 数据传输的可靠性和效率进行的沟通和优化,并提及了相关的专业术语,本章将对相关的专业术语进行说明。ISNTCP 三次握手的过程中,除了通过三次握手让 client 和 server 正确建立连接外,同时也交换彼此的初始序列号 ISN(c) 和 ISN(s)。 1.ISN 的特点:初始化具有随机性 2.ISN 的一种生成规则:...

2021-08-28 08:44:56 323

原创 TCP协议中如何保证数据传输的可靠性和效率(上)

本章主要通过一段对话来说明 TCP协作的数据传输过程,主要内容是: 1.丢包问题,怎么知道丢包,丢包了怎么办? 2.乱序,网络不可靠,如何知道那些数据已被正确接收,那些没有? 3.如何实现最大传输效率。client、server 和 networklient:Hi network,我想向 server 传输数据,需要什么条件?network:哦,这个简单,你只需要告诉我你的 IP 和端口号、server 的 IP 和端口号(四元组)以及你要传输的内容。client...

2021-08-21 08:52:50 584

原创 TCP 协议三握手与四次挥手

本章主要总结一下三次握手与四次挥手的意义,同时附上一个关于三次握手四次挥手比较好的文章链接。三次挥手目的1.确认彼此身份,确保彼此能进行正常的网络通信。第一次握手(client->server)和第二次握手(server->client) 这个过程是server告知client, server能正常工作,并交换了彼此是初始序列号(seq)。第三次握手(client->server)是 client 告知 server, client 能...

2021-08-14 08:23:48 145

原创 TPC/IP 协议头部说明

本章的内容主要是将 IP 协议头部、TCP 协议头部、UPD协议进行说明,其他的介绍将在后续的章节中进行详细介绍。注:本章内容来自《TCP/IP详解卷一协议》IP 协议1.IPv4 头部结构 版本 IPv4=4 / IPv6=6 IHL 头部长度,保存 IPv4 中32位字的数量(4个字节),是一个4位字段,表示最多15个32位字即60个字节,IPv6 没有这个字段,固定40个字节 TCP...

2021-08-08 08:51:23 1122

原创 一致性协议整理(ZAB协议)

ZAB协议是 Zookeeper 的一致性协议,基本原理与 Raft 相似,只是在实现方式上,有所差异。由于在 Raft 章节中,已经详细介绍了一致性协议实现的相关细节,所以本章只是简单的介绍 ZAB 协议实现,然后在介绍两种协议的差异。状态机 状态机 说明 Leader 1.事务请求的唯一调度和处理者,保证集群事务处理的顺序性。 2.集群内部各服务器的调度者 Follower ...

2021-07-31 08:26:09 331

原创 一致性协议整理(Raft)

Raft 算法是一种用于管理复制日志的一致性算法,实现了 CAP 理论中的 CP,同时通过 2PC 来实现日志的 proposaland commit 。下面介绍 Raft 实现的几个主要部分,比如如何选举Leader、如何保证多个节点日志的一致性等。Leader 选举节点介绍首先 Raft 协议中,节点分为3中状态。Leader: 1.处理所有客户端请求。当接收到写请求,封装消息发送到其他 Follower 节点。当有过半节点ACK之后,提交事务。 ...

2021-07-24 08:36:34 331

原创 一致性协议整理(总述)

一致性协议解决的是分布式的环境下,解决如何在多节点的环境下保证数据的一致性。分布式理论中,CAP理论是分布式的基础,2PC 是分布式事务简单实现。本章首先简单介绍CAP理论和2PC,然后介绍一致性协议实现主要组成,比如 Leader 选举、日志同步、健康检查、故障恢复、脑裂和快照等。至于具体的协议实现如 Raft、ZAB 等不在本章做具体说明,将会在后面的章节做具体介绍。CAPC:Consistency 一致性(数据一致)。A:Availability 可用性,用户请求能够在有限的...

2021-07-10 09:14:21 1391 2

原创 淘汰算法整理

淘汰常用于缓存或者内存性软件,比如 MySQL的缓存池、redis、memcache 等。主要目的是在内存一定的情况下,让内存尽可能保留符合需求的数据(最新或者常用等),淘汰不常用或者旧数据。下面主要介绍几个最基本的淘汰算法和淘汰策略。淘汰算法1.LRU最近最少使用算法,这个缓存算法将最近使用的条目存放到靠近缓存顶部的位置。当一个新条目被访问时,LRU 将它放置到缓存的顶部。当缓存达到极限时,较早之前访问的条目将从缓存底部开始被移除。核心思想是“如果数据最近被访问过,那么将来被访问的几率也.

2021-07-03 08:38:36 1337

原创 限流算法整理

本文主要介绍限流算法的知识。包括漏桶、令牌桶、时间窗口以及它们的特点和实现。漏桶流入速率流入流量+桶内流量<=桶的总容量-->不限流流入流量+桶内流量>桶的总容量-->限流流出速率按固定速率流出实现:https://www.freesion.com/article/2663497563/令牌桶放入令牌速率按一定速率放入令牌(比如按一定时间间隔放入多少令牌),令牌数量超过最大令牌...

2021-06-26 08:28:39 83

原创 锁知识整理(二)

本文主要是接着锁知识整理(一)

2021-06-15 08:41:25 393

原创 锁知识整理(一)

首先锁的目的是为了保证并发线程(或者并发访问)操作临界资源的正确性。我们需要了解不同锁的特性和应用场景,才能在使用时得心应手。本文主要介绍锁的相关知识,主要涉及应用程序的锁、...

2021-06-10 09:44:48 215

原创 数据加密技术

加密技术是通过位移、置换和代替这三种方式进行灵活组合编制而成。加密技术分类

2021-06-06 08:40:00 2285

原创 HTTP知识梳理(二)

本文接着HTTP知识梳理(一)继续梳理HTTPS & HTTP网络协议栈https 是基于http 实现了数据的安全传输,http 的一个问题就是数据没有被加密,容易被劫持,https 主要功能是对http的数据进行加密解密。https 网络协议栈比 http 多一层安全层。在客户端和服务端建立了 TCP 链接后,客户端和服务端会初始化这个安全层,对加密参数进行沟通并交换秘钥。安全层初始完成之后,客户端就可以将请求报文发送给安全层,安全层会前对其加密,然后发送给服务端。ht...

2021-05-29 08:44:10 148

原创 HTTP知识梳理(一)

http基于是基于TCP/IP协议实现的应用层协议。说白了TCP/IP保证了数据的可靠传输,然后通过http协议实现客户端和服务端上层应用的交互,比如资源重定向、缓存、鉴权认证、字符编码,压缩等。

2021-05-22 08:46:39 131

原创 ETCD 源码学习--Prometheus Client

在本文只是简单对 Prometheus Client 从源码角度做一些简单的介绍,并不对其进行深度研究。主要文件/github.com/prometheus/client_golang/prometheus/desc.go 度量指标,主要功能通过相关统计信息生成唯一的 id 和 dimHash,作为度量的唯一标识。/github.com/prometheus/client_golang/prometheus/metric.go 度量模型,定义统计的接口。/github.com/promet.

2021-04-10 08:22:45 328

原创 ETCD 源码学习--watch&lessor的调度

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。lessor 作用是用于控制某个键值的有效期,watch 作用是监控某个 key 值(或者某段范围)的数据变动。数据变动主要有两种情况,一是客户端调用API 对 key 进行修改,二是 key 过期,本章主要介绍的是 lessor 与 watch 直接的调用关系。主要文件/mvcc/kv_view.go 读写事务的实现/mvcc/watchab.

2021-04-02 08:45:43 231

原创 ETCD 源码学习--Watch(server)

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。主要文件/etcdserver/api/v3rpc/watch.go watch 服务端实现/mvcc/watcher.go 主要封装 watchStream 的实现/mvcc/watchable_store.go watch 版本的 KV 存储实现/mvcc/watchable_store_txn.go 主要实现事务提交后 End(...

2021-03-27 09:01:03 597

原创 ETCD 源码学习--Watch(client)

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。客户端监控某个key,或某个范围key变化,当被监控的key的值有任何变动,都会主动通知客户端。主要文件/etcd/clientv3/watch.go结构图主要数据结构//对外提供 Watch 接口,同时负责关闭 grpcStream 的流程。type watcher struct {//访问服务的RPC客户端 remote

2021-03-13 08:53:55 478

原创 ETCD 源码学习--lease(二)

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。本文主要介绍 lessor 如果发现过期键,server 如何处理过期键的过程。过期 lease 发现lessor goroutinefunc (le *lessor) runLoop() { defer close(le.doneC) for { le.revokeExpiredLeases() le.checkpointSchedu

2021-03-06 08:38:58 499

原创 ETCD 源码学习--lease(一)

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。租赁,在 etcd中主要用于设置 key 的有效期,主要流程:1.获取一个 leaseId,并设置 leaseId 的 有效期,将 key 与 leaseId 绑定。2.ectd 后台启动一个 goroutine, 定时检查过期 leaseId,并且清除。主要文件/lease/lease.go 定义lease & lessor相关的...

2021-02-27 08:55:11 1313

原创 ETCD 源码学习--节点数据传输 Transport 源码

在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。节点添加/etcdserver/server.go 中,NewServer 会调用如下 AddRemote 和 AddPeer 添加节点//添加远程节点func (t *Transport) AddRemote(id types.ID, us []string) { t.mu.Lock() defer t.mu.Unlock() if t.re

2021-02-17 09:58:40 246

LessCss.js

LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护。 LESSCSS可以在多种语言、环境中使用,包括浏览器端、桌面客户端、服务端。

2016-02-16

PHP图片处理

该类包含PHP上传图片,下载图片,大小设置,水印设置,缩图设置等

2016-02-15

Jquery基础

该文档中,记录了我在学习Jquery中的一些心得,同时在文档中,Jquery中的函数使用,都写了对应的例子

2016-02-03

PHP MYsql 基本操作

文档中,记录了Mysql的增删改查操作,包括一些多表查询,分组查询,拼接查询、多数据插入、触发器等

2016-02-03

PHP ZIP 压缩

对服务器中的文件压缩,或对压缩文件在服务器中解压。

2016-02-03

PHP文件上传下载及读写

该类,包含文件的上传,下载,读写等方法。该类简化了,PHP程序员在原始代码中,对文件上传下载的过程

2016-02-03

PHPEXCEL 操作类

该类基于PHPExcel类开发,使用该类型前,请先保证你有PHPExcel. 该类只是简化PHPExcel的代码过程

2016-02-03

PHP Mysql数据库操作类型

PHP 操作Mysql 增删改查的类.也包含模糊查询,批量添加。查询的数据将以二维数组的形式返回。

2016-02-03

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

TA关注的人

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