上海杭州异地组网记录
8 min这个月 npy 因为工作原因,从北京搬到了上海 帮忙搬家之外,还帮着开了一条宽带,电信 500M 顺便吐槽下上海电信,500M 的宽带比杭州电信 1000M 宽带还贵 你这光纤是金子做的还是光猫是金子做的?作为一名 Geek(自封),不折腾...
My heart beats for U —— 心率同步 Grafana 展示
3 min整了个小活:把苹果健康的心率定时同步到服务器上,并由 Grafana 绘制展示,效果大概如下:可以点击博客右上角的 ♥️ 标志查看,因为套了 Cloudflare Tunnel,国内访问速度不佳,尽量挂🪜访问 大概的思路就是使用这个 ap...
语法分析中类型名-变量名歧义消除
14 min由于语法分析阶段不维护符号表,用户自定义类型名(typedef)和普通变量名难以区分。对于函数体中的 a*b; 语句,既可以解释为 a 乘 b,忽略表达式结果,也可以解释为声明一个类型为 a* 的变量 b 同时,由于存在如下语法规则 d...
VPS 套 Warp 分流指定出口 IPv6
3 min上周一个普通的下午,一直挂在后台沉寂许久的 Telegram 收到了一条推送: 定睛一看,电信 CN2 直连,2.5G 带宽,1T 流量,券后 36 刀一年,合 3 刀一个月 新的传家宝已经出现!火速付款之余,立即呼朋唤友,忽悠了周围三四...
在 VitePress 中实现一个动态说说功能
23 min很多动态博客中都有一个说说的功能,本质就是一种特殊的博文,借助动态博客的实时性,可以做到随写随发 静态博客由于是在本地或服务器上静态编译成 html 后再部署,实时性比较差。写一篇博文长篇大论自然可以在电脑前,走 git 推送部署也不算麻烦...
实现 OPNsense 透明代理+分流
12 min早先透明代理 + 分流一直使用的是 ikuai 作为主路由,OpenWRT 作为旁路由的方案,这也是网上大部分教程的主流方案。后面冲浪的时候了解到 ikuai 可能会有偷跑流量与上报信息的情况出现,另外作为国产闭源系统,安全性也比较成问题...
更精确的基于 BGP 的国内外 IP 分流
5 min此前折腾过两节的透明代理方案:debian 旁路由方案和基于 FakeIP 的透明代理分流,家里的透明代理基本已经可用了。基于 FakeIP 的方案使用 FakeIP 标记国外 IP,并在主路由识别并进行分流。sing-box 的 dns...
在字节工作三年的同时仍保持一定程度的心理健康其实也并非完全不可能
14 min晚饭时间,同事聊起了他买的车,忽然感叹了一句:“感觉工作之后时间变得特别快” 我:“不好说,今天(周五)下午的时间就挺难熬” 虽然很不愿承认,总把自己当学生来看(暂时是组里年龄最小的),但是距我离开校园,满打满算也有三年多。这三年时间算得...
慢性胃炎治疗之路
4 min我自幼便肠胃不佳,小学初中高中,看了无数医生,吃了无数的药,也没有把胃养好。一旦吃点冷的、辣的,便腹胀反酸、反胃想吐,甚至即使饮食健康,遇到什么考试面试紧张时也会反胃恶心。神奇的是,这几乎所有的症状,在我本科期间,都奇迹般地消失了。冷的、辣...
基于 FakeIP 的透明代理分流
13 min上篇文章中介绍了使用旁路由做局域网内透明代理的方案,对于大部分用户已经基本可用,但是该方案的 cons 也比较明显:存在单点故障的可能,由于 DHCP 下发的网关直接指向了旁路由,一旦旁路由的 clash 不可用,即使不需要科学的网站也无法...
旁路由端口映射失效解决
5 min使用上篇文章的方案配置完成后,如果你在主路由上配置了端口映射,且被映射端口的机器网关配置的是旁路由,那此时端口映射应当是失效了。其实并不是 Clash 分流导致的问题,只要是配置了旁路由网关,主路由配置的端口映射都会失效。网关的作用其实就是...
debian 旁路由方案
16 min大部分旁路由方案都是基于 OpenWRT 搭建 —— 这是一个单独的 Linux 发行版,拥有自己的软件包系统。再其中大部分方案又是基于 LuCI —— 专用于 OpenWRT 的 Web GUI,教程中使用的软件也是 luci-app-x...
GFW 原理考
24 min技术无罪。防火长城(英语:Great Firewall,GFW),中国国家防火墙,或简称为墙、防火墙等,中国网信办称其为数据跨境安全网关,是该国政府过滤国际互联网出口内容的软硬件系统集合。———— Wikipedia 要有效对抗 GFW,不...
2024 学习计划
1 min客套话不多说了,尽力而为好吧。日语:达到 N2 水平 SICP:刷完 OS:完整实现了 POSIX 的内核 TAPL:刷完 博客主题
RISC-V 工具链与模拟器(emulator)的安装
3 min闲的无聊看看 spike 源码,但是翻了很多教程都没有可以直接安装好 spike 和相关的工具链。于是自己动手丰衣足食,直接读相关仓库的 README,基本都可以安装成功,但是还是暗藏着一个小坑,记录一下。RISC-V 工具链包括 gcc...
漫谈编程语言
32 min本文通过讨论如何设计一门编程语言的方式,来普及编程语言理论中的一些基础概念、实现思路和现状。现在由我们来设计一门全新的编程语言:C--。对,就是我们自己设计。我们先抛下一些编译原理、编译器和解释器的实现等一些复杂的东西,不会去讨论一些特性的...
一次失败的项目实践——春节七天乐(不起来)
13 min最初是在过年回家的高铁上,在知乎上看到了这篇文章:将Go程序跑在裸机上,大致想法是通过实现一遍系统接口,来接管 golang 程序的各种系统调用和中断之类的。感觉这个想法十分有趣。作者还用 golang 写了一个 x86 os:eggos...
6.5840 实验 2a —— Leader 选举
18 min6.824 的实验二,是实现 Raft 算法,在后续实验中的实现的分布式 KV 存储会将本实验实现的 Raft 算法作为分布式共识模块使用,所以实验二对后续实验至关重要。实验二将整个 Raft 算法分为四个步骤,作为四个子实验去实现。实验...
Raft 论文阅读
29 minRaft 是用于管理日志复制的共识算法。共识算法适用于包含多台机器的集群中,以保证在其中有些机器挂掉时仍然能正常对外提供服务。由此,共识算法在构建可靠的大规模软件系统中十分重要。关于 Raft 算法主要的论文就是《In Search of...
golang 支持不同类型结构体间的深拷贝
4 min最近在做系统重构,忙得不可开交~博客荒废了好一阵子 在重构时,遇到了一个很恶心的事情:分层架构中不同层实体的互相转换。以商品为例,在视图层可能存在一个商品 VO,在领域层有个商品 entity 或者叫 DO(domain object),在...
Java 中 this 关键字导致编译期常量传播优化失效的问题
4 min名字起的有点长了,但是这确实是个挺有趣的问题。如下代码:public class Test { final static String s = "a"; public void test() { String cmp = "ab"; Str...
《三体》中的“大多数人”
15 min如果哪天中国搞民主了,那肯定是人间地狱,我肯定第二天就逃离中国。——刘慈欣,2019年接受《纽约客》采访 大刘在很多场合都表达过他对西式民主的不信任对态度,对于让大多数人自决命运的一种悲观。大刘的很多小说所表现出的这种政治倾向是十分鲜明的...
6.5840 实验一 —— MapReduce
11 min实验一是要实现一个 MapReduce 系统,基本就是两个部分:实现 master 程序和实现 worker 程序。这个实验基本就是劝退怪了,一来是对 golang 的 rpc 和并发的使用要比较熟悉,二来就是要对 MapReduce 的整...
MapReduce 论文阅读
7 minMapReduce,是 Google 早年提出了一种软件架构模型,支持大规模数据集的并行运算。现在这个概念被运用在大量分布式系统中。相关的理论由 Google 在 2004 年发表在论文《MapReduce: Simplified Data...
提问的智慧
86 minHow To Ask Questions The Smart Way Copyright © 2001,2006,2014 Eric S. Raymond, Rick Moen 本指南英文版版权为 Eric S. Raymond, Rick...
CSAPP LAB 环境搭建
9 min学 CSAPP 不做实验,就像四大名著不看红楼梦,说明这个人文学造诣和自我修养不足,他理解不了这种内在的阳春白雪的高雅艺术,他只能看到外表的辞藻堆砌,参不透其中深奥的精神内核,他整个人的层次就卡在这里了,只能度过一个相对失败的人生。劝退...
MYDB 10. 服务端客户端的实现及其通信规则
6 min本章涉及代码都在 backend/server 、 client 与 transport 中。NYDB 被设计为 C/S 结构,类似于 MySQL。支持启动一个服务器,并有多个客户端去连接,通过 socket 通信,执行 SQL 返回结果...
MYDB 9. 字段与表管理
7 min本章涉及代码都在 backend/parser 与 backend/tbm 中。本章概述 TBM,即表管理器的实现。TBM 实现了对字段结构和表结构的管理。同时简要介绍 MYDB 使用的类 SQL 语句的解析。Parser 实现了对类 SQ...
MYDB 8. 索引管理
6 min本章涉及代码都在 backend/im 中。IM,即 Index Manager,索引管理器,为 MYDB 提供了基于 B+ 树的聚簇索引。目前 MYDB 只支持基于索引查找数据,不支持全表扫描。感兴趣的同学可以自行实现。在依赖关系图中可以...
MYDB 7. 死锁检测与 VM 的实现
10 min本章涉及代码都在 backend/vm 中。本节将收尾 VM 层,介绍一下 MVCC 可能导致的版本跳跃问题,以及 MYDB 如何避免 2PL 导致的死锁,并将其整合为 Version Manager。说到版本跳跃之前,顺便提一嘴,MVCC...
MYDB 6. 记录的版本与事务隔离
14 min本章涉及代码都在 backend/vm 中。从这一章开始,我们开始讨论 Version Manager。VM 基于两段锁协议实现了调度序列的可串行化,并实现了 MVCC 以消除读写阻塞。同时实现了两种隔离级别。类似于 Data Manage...
MYDB 5. 页面索引与 DM 的实现
9 min本章涉及代码都在 backend/dm/pageIndex、backend/dm/dataItem 和 backend/dm 中。本节将为 DM 层做收尾,介绍一个实现简单的页面索引。并且实现了 DM 层对于上层的抽象:DataItem。页...
MYDB 4. 日志文件与恢复策略
12 min本章涉及代码都在 backend/dm/logger 和 backend/dm/Recover.java 中。MYDB 提供了崩溃后的数据恢复功能。DM 层在每次对底层数据操作时,都会记录一条日志到磁盘上。在数据库奔溃之后,再次启动时,可以...
MYDB 3. 数据页的缓存与管理
7 min本章涉及代码都在 backend/dm/pageCache 和 backend/dm/page 中。本节主要内容就是 DM 模块向下对文件系统的抽象部分。DM 将文件系统抽象成页面,每次对文件系统的读写都是以页面为单位的。同样,从文件系统读...
MYDB 2. 引用计数缓存框架和共享内存数组
9 min本章涉及代码都在 backend/common 中。从这一章中,我们开始讨论 MYDB 中最底层的模块 —— Data Manager:DM 直接管理数据库 DB 文件和日志文件。DM 的主要职责有:1) 分页管理 DB 文件,并进行缓存...
MYDB 1. 从最简单的 TM 开始
7 min本章涉及代码都在 backend/tm 中。如第 0 章所述:TM 通过维护 XID 文件来维护事务的状态,并提供接口供其他模块来查询某个事务的状态。下面主要是规则的定义了。在 MYDB 中,每一个事务都有一个 XID,这个 ID 唯一标识...
MYDB 0. 项目结构和一些不得不说的话
6 min项目地址:https://github.com/CN-GuoZiyang/MYDB ::github{repo="CN-GuoZiyang/MYDB"} 或许是造轮子上瘾了,也有可能只是觉得需要补一补数据库的基本原理,大概花了大半个月,利用...