2021 专业技能学习计划


时常觉得自己看过的东西不少,但却没有很好地沉淀,主要有两方面弊端:1. 自我怀疑 花了不少时间学习了解,长时间不用,缺少实战经验,最终慢慢遗忘,最后会疑惑自己的时间花的到底值不值?为何要浪费时间在没有任何产出上?2. 没有形成知识面 最近两年很少系统地去学习知识,大部分时间花费在了碎片式学习上,东边一榔头,西边一棒槌,都是分散的知识点,很少总结回顾,沉淀成文字/视频等,导致后面用到时,重复浪费时间在资料查询搜集上,不能很好地缩短自己重拾知识时间,也未能很好地帮助他人。为此,这里特梳理下自己 2021 年的学习计划,形成知识索引,方面后续知识快速定位,也希望能给予他人一点点帮助。

  • 操作系统: 重点是Linux 进程管理 & 调度、进程间通信、内存管理、I/O 模型
  • 网络: TCP/IP 协议、HTTP 协议、DNS 协议、容器网络
  • 中间件: Redis, RabbitMQ/Kafka/RocketMQ, Nginx, Zookeeper/Etcd, ElasticSearch, MySQL
  • 设计原则 & 设计模式: SOLID, 24 种设计模式
  • 系统架构: Client/Server, MVC, Layer, Broker 等
  • 语言: Java/Go/Rust
  • 工具: 效率提升类, 问题定位分析类, 知识变现类
  • 其他: Google Analysis, 百度统计、SEO 相关
Read more ⟶

什么是文件系统?


  • 文件系统是什么?
  • 文件系统组成
  • 如何写一个简单的文件系统

文件系统是什么?

  • 软件
  • 记录文件元信息(文件大小,所属用户,包含块等)

文件系统组成

inode

inode 记录着文件的元信息,包含以下部分:

  • 文件大小
  • 组件文件的块(block)
  • 属主(owner)
  • 访问权限
  • 访问时间
  • 创建时间
  • 修改时间

inode table

为了管理 inode 信息,需要有个数据数据结构存储 inode 信息, 称之为 inode table, 会占一部分磁盘空间,若 inode 大小为 256 bytes, 一个 4k 大小的 block 可存储 16 个 inodes。

allocation list

为了管理 block 是否已分配,需要有个数据结构存储,通常可以用位图(bitmap) 算法进行存储, 用 1bit 表示该 block 是否已使用,一个 4k 大小的 block 可存储 32k 个 block 使用情况。

superblock

superblock 用于存储文件系统元信息,包括 inodes 数量、文件系统中数据块(data block)数量、inode table 起始块位置、用于标识文件系统类型的魔数(magic number)等。操作系统挂载文件系统时,会首先读取 superblock 信息。

Read more ⟶

Java jar 是如何执行的?


Java 作为一门古老又流行的编程语言,想必大家或多或少都听过,甚至使用过,也有一部分人甚至在生产环境部署过 java 应用。可你了解过 java 程序是如何加载运行的吗?如果你的答案是 yes, 那么建议不用浪费时间花费在已知的知识点了。

下面主要针对 java 可执行 jar(还有有库类型的jar 包,eg: rt.jar) 分析 jar 的加载运行过程,主要包含以下三部分展开:

  • Java jar 生成
  • Java jar 内容
  • Java jar 加载 & 运行
Read more ⟶

IP 归属地查询


这里分享下几个不错的 ip 地址库:

1. https://ip.cn

查询指定 IP

curl https://ip.cn?ip=202.200.112.2

查询本机 IP

curl https://ip.cn

优势: 国内服务,速度较快, 且免费

劣势: 信息量太少, 没有经纬度信息

Read more ⟶

Go 二进制应用注入 version 信息


当线上服务出现问题时,在排查问题前,我们需要确定线上服务部署版本、对应源码分支、最近一次提交记录、编译/打包时间、语言版本等,这些信息可写入配置文件,应用启动时读取。若采用 docker 部署时,也可将这些信息作为 LABEL 或应用镜像的 tag 中,方式多种多样,今天要介绍的是 go 应用下的另一个可选方式: 二进制编译时注入。

Read more ⟶

Ubuntu14.04上搭建ShadowSocks服务


1. VPS选择

之前一直使用GoAgent作为破墙工具,不过后来有一阵用不成,即使更新到最新版,也未能如愿,后来忙于写论文,便用微软的Bing临时代替Google。用了一阵Bing,发现其实也挺好用,无论是UI还是搜索内容,都相当不错。只是偶尔想呼吸墙外空气,却未能如愿,始终给人不快的感觉。所以便有意选择付费服务。一直听说ShadowSocks搭建代理特别稳定,便开始留意VPS。可选的VPS很多,比较流行的当属Linode和Digital Ocean,不过Linode服务实在是太贵了,且最低配都感觉有点大材小用,没必要这么奢侈。便着重关注了下DO。可选的VPS有:

Read more ⟶

Ubuntu安装TexStudio


Read more ⟶

将博客从Octopress迁移到Jekyll


Read more ⟶

为什么而活?


这些天经常为毕设及论文的事发愁,也因此变得浮躁不安起来,失了方寸,失了往日的沉着心态。整个人犹如悬在空中,飘飘然,毫无状态可言,如行尸走肉般活着。而每到夜深,躺在床上,头脑却越发清晰,不自觉地开始思考人生。心中时不时有一个声音在问自己:为什么活着

如果在上小学以前,意义可能在于吃各种零食和玩各种新奇玩具;小学阶段,则希望身边有一堆玩伴,下课之余疯狂玩耍;初中阶段,则追求着时髦的穿着与发型及情窦初开的懵懂爱情;高中阶段,则处于挣扎彷徨之中,希望早日脱离被各种公式、概念与单词淹没的苦海,期待早日迎来老师口中描述的神圣而神秘的大学的那种自由生活。初入大学后,确实发现原来生活可以如此自由,不想上课就在宿舍闷头睡大觉,可以睡觉睡到自然醒而不用每天天不亮就起来背英语单词和文言文,不再有做不完的作业考不完的试,不再有班主任猥琐的监视,不再有想玩而不得的情景…

Read more ⟶

自由软件与开源软件


图为电影《The Shawshank Redemption》的海报

昨晚与张老师还有几位Linux小组成员一起去西邮参加了一个开源者行的活动,演讲嘉宾有GitCafe和Thoughtworks的人员。其实这次去只是想感受感受开源的气氛,一直听说西邮的开源气氛不错,未能亲身感受,所以趁还在西安,赶紧体会体会。这次最大的收获当属对开源文化的重新认识,也重新理解了free software与open source software的异同。

首先,free software的最初版本由Richard Stallman起草,并通过Free Software Foundation发布,其初衷是确保最终用户能够自由使用、学习、分享和修改软件。要理解free software的概念,得先理解其中"free"里的含义,这里的"free"并不是"free of charge"中的含义,而是"free speech"中"free"表示的意思。

通常所说的free software包含以下四种自由:

Read more ⟶