Hello, World!

~ No Day But Today ~

Git实现原理
基本概念 概述 Git 是一个基于快照的文件版本管理系统,其实现原理是为每个文件计算一个 hash 值然后压缩存储到 .git/objects 目录内,普通文件为 blob 对象,而文件夹也会生成一个对象:tree,这样一个版本的文件就能被根目录串联起来,这个版本的再上层会有一个 commit 对象,commit 对象会有一到多个 parent 指针,指向上一个提交,这样就把一个个版本串联了起来。 commit 的上层还有一个概念叫分支,分支是一个指向 commit 的指针,相当于是对这一系列 commit 的抽象。 这是一......
完整网络请求包自底向上分析
我们都知道网络是分层的,国际标准化组织将网络划分了七层,定义于 ISO/IEC 7498-1,也就是我们所熟知的 ISO 七层模型。 自底向上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 而我们所熟知的超文本传输协议(HTTP: HyperText Transfer Protocol)便位于这个模型中的第七层,HTTP 请求包发出的时候会一层一层往下叠加头部知道最终变成最底层的物理信号在网线上传输,那么最终的网络包到底是长什么样呢?我们今......
Golang 如何排查协程泄漏问题
背景 周所周知,内存泄漏是一个很严重的问题,会导致系统运行占用资源越来越多,无法释放,直至崩溃。所幸 Go 语言是一门 具有垃圾回收的语言,能大大降低遇到内存泄漏的概率,而我们今天要说的是另外一个棘手的问题:协程泄漏。 协程泄漏:顾名思义就是出现了应该释放而没有被释放的协程,导致系统协程数量一直上升。不像对象回收需要引用计数、三色标记等手段,协程的回收是相当简单的,等待协程将代码从头到尾执行完毕之后这一块儿空......
颜色是如何呈现的
现实的世界是丰富多彩的,然而我们又是怎么将这种色彩呈现到我们的显示器上的呢? 人眼如何感知色彩 众所周知,光是一种电磁波,可见光是人眼所能处理的一个电磁波频率区间子集,人眼看到事物是通过光来感知的,颜色的本质就是电磁波的频率,不同频率的光即我们语言中所定义的不同种类的颜色。本质上我们的眼睛和雷达并没有任何区别,只是大脑的解码渲染能力强一点罢了。 人的眼睛中有视锥细胞和视杆细胞,视杆细胞负责感受光的强度,......
找出使用最频繁的Shell命令
使用最频繁 TOP 10命令: history | awk '{map[$2]++} END { for (a in map )print map[ a ]" " map[ a ]/NR*100 "% " a }'| sort -rn | nl | head 先上成品,然后,我们一步一步分析这行语句都涉及到了命令,它们又是如何拼凑到一块儿完成我们的目的的。 Shell 首先我们需要明确一下 shell 的定义,大家可能经常听到 shell ,shell 脚本这些词,那么 shell 到底是什么呢? Shell 翻译成中文的意思就是壳,和操作系统内核的核相对应,就是一个基于内核的可操作界面。可操作性界面又分为两种: 图形界面类:Graphi......
进程线程协程的本质区别
现代多任务操作系统通常都会有进程的概念来对任务进行隔离,而为了充分利用多核处理器性能同时又减少进程创建的开销,通常又都会引入更细粒度的调度单元:线程。 我们经常能在教科书上看到对于进程和线程的定义: 进程是操作系统分配资源的最小单位,线程是进行调度的最小单元。 这句话没错,但是只是从职责上给出的定义,而不是基于底层实现出发的。 广义上的线程分为内核态线程和用户态线程两种,内核态线程受操作系统直接调度可以充......
Go语言sync包实现原理分析
Java 语言中有一个 java.util.Concurrent 包提供了大量的并发工,而 Go 语言中也有这样的角色:sync包。 sync.Mutex 锁实现原理 sync.Mutext 是 Go 提供的一种同步原语,用于表达互斥,不过不推荐在业务中使用,根据 Go 的设计思想,应首先考虑通过传递消息(管道)来共享内存,而不是通过共享内存来传递消息 Mutex 结构体如下,只有两个变量,非常简单: type Mutex struct { state int32 // 状态,bitmap sema uint32 // 信号量 } state 字段是一个位图 第 0 位表示是否加锁 第 1 位表示是否已唤醒 第 2 位表示是否为饥饿模......