史诗级退化——全新的博客系统 史诗级退化——全新的博客系统背景 六月月初换了个新电脑,准备把原来的hexo博客迁移过去,发现重新生成/部署的时候产生了一些问题,正准备全部重新弄一遍。在找主题的时候确犯了强迫症。最后受到https://eklitzke.org/的启发,准备自己手撸一个。反正轮子也造习惯了,不差这一回。 设计 反正是静态博客,也不需要啥后端,于是最后的设计目标就是根据markdown文件生成html 2022-06-20 其他
阻塞/非阻塞I/O以及Epoll 翻译自 Blocking I/O, Nonblocking I/O, And Epoll (eklitzke.org) 在这篇文章中,我想解释下当你使用非阻塞的IO(NO blocking I/O)的时候发生了什么,具体来说我会解释如下几点: 使用系统调用fcntl将文件描述符设置为O_NONBLOCK的语义 非阻塞I/O和异步I/O(asy 2022-05-30 系统编程
leetcode解题记录(1) 作业太多不想做,把最近在leetcode上做的题稍微总结一下,既然标题写了1,就说明还是想把这个做成一个系列的。 粉刷房子基础的dp题,从上往下挨个算最小值即可,时间O(n),空间O(1) 12345678910111213141516class Solution {public: int minCost(vector<vector<int>>& c 2022-04-29 Leetcode
如何手动解压压缩包(雾)--GZ文件格式详解 如何手解压缩包(雾)–GZIP 文件结构概述一个GZIP文件主体分为三个部分,如下图所示: 1[header][deflate block|...][header] 其中头部是元数据,中间是deflate的压缩数据块,尾部是固定8byte的元数据,接下来具体详细地介绍这三个部分。 Header和其他格式一样,Gzip文件的头部定义了该文件的元数据信息。该部分的长度不固定,至少10byte大小,其 2022-04-27
TLS/SSL如何保证HTTPS协议的安全 TLS/SSL如何保证HTTPS协议的安全概述 1999年6月,万维网协会(W3C)和互联网工程任务组(IETF)共同发布了RFC2616,这份标准规范化了接下来20年里十分重要的一个协议–HTTP。HTTP协议是一个客户端和服务端之间进行请求和应答的标准,能够让客户端使用标准的方式从服务器内获取各种资源,如HTML,数字图像等等。 虽然HTTP得到了广泛的使用,但是HTTP的安全 2022-04-15 网络
Gzip是如何压缩文件的 Gzip 是如何工作的简介Gzip使用deflate算法对数据流进行压缩,该算法分1-9一共9个压缩等级,等级越低压缩率越低压缩速度越快。下面使用默认的6级来来说明。Deflate算法该分为LZ77和霍夫曼编码两个部分:前者负责压缩,后者负责编码(其实编码和压缩是一个意思)这里使用字符串abcabcaaabaaa为例来描述算法的总体流程:Gzip首先使用LZ77算法来对该字符串做压缩,得到如下的L 2021-12-27 其他
简单的RPC框架设计和实现 简介YA-RPC框架(下称本框架)是一个采用C++17编写的简易RPC框架。本框架支持integer,float,string,bool等数据类型,并支持根据服务定义生成相应的RPC服务端代码。 概要设计 本框架主要分RPC服务端和代码生成器两个部分,其中前者提供RPC服务的基础设施,后者根据开发者定义的服务来生成相应的服务代码供给服务端使用。下图展示了本框架的顶层设计: 服务定义由库使用 2021-12-10
P=NP?--算法复杂性和NP问题概述 问题和多项式时间问题 在开始了解P=NP之前需要首先知道“问题”是什么。这里首先对“问题”做一个形式化的定义:抽象问题Q为问题实例集合I和题解S上的一个二元关系。例如,对于排序问题的一个实例是:n个正整数和排列顺序(升序或者降序),题解则为一个有效的排列。 为了简单期起见,NP完全性理论只关注判定问题,即题解$S={0,1}$的问题,因此这里可以定义判定问题为从问题实例集 2021-12-08 算法
谈谈对分布式系统的理解 写这篇已经是00.20了,本来打算10点开始写的,但是空洞骑士太好玩了。研一上这学期吃饱了撑的选了一门课《分布式系统》,结果每周两节课都是早上第一节,搞得我几乎一节课没去,但是没办法试还得考,所以花了一点时间拜读了《分布式系统概念和设计》的部分内容,下面的内容全是有感而发,不会设计相关的算法细节。 概述 自从互联网被发明以来,这个世界就进入了信息时代。随之而来的就是海量的数据需要维护和存储, 2021-12-07 系统结构
写一个简单的用户态文件系统 1. 介绍本项目是仿照Linux下的ext4文件系统所编写的一个十分简单的用户态文件系统。本系统用标准的C99编写,在Linux下编译运行通过。本系统做了如下的工作: 利用普通文件来模拟磁盘,文件系统对磁盘的所有操作均会映射到该文件(下文均简称磁盘文件)上; 磁盘文件可以随时持久化到本地以及从磁盘加载到内存; 本文件系统模拟了ext文件系统的超级块,I-node节点表,数据块的bitmap以及数 2021-11-25 系统结构