理解源码的一种方式
TL;DR 目标导向,带着问题读源码;自顶向下,先理解 what,再去代码中找 how;最后擅用图形化工具,抓大放小,有的放矢。 ...
TL;DR 目标导向,带着问题读源码;自顶向下,先理解 what,再去代码中找 how;最后擅用图形化工具,抓大放小,有的放矢。 ...
最近在做 Kubernetes Security 相关的工作。作为一个 Kubernetes 新手,刚看到 yaml 文件中的 namespace 时,很容易和 Linux 的 Namespace 搞混。加上在读 Kubernetes 文档的时候,总时不时看到 Linux Namespace 的字样就更加困惑起来。以此为契机,正好把 Linux Namespace 再好好梳理一下,解开心中的谜团: Linux 的 Namespace 是如何实现资源的隔离 Linux 下哪些资源可以按照 Namespace 组织,如何组织 Container 哪些地方用到了 Linux Namespace ...
最好的软件开发人员知道一个秘密:美的东西比丑的东西创建起来更廉价、也更快捷。美的系统是灵活、易于理解的,构建和维护它们就是一种快乐。 我们需要招聘的不是“经历丰富”的人,而是“有职素养”的人。并不是问题的难度,而是解决问题的方式、步骤以及反思的深度,更能体现一个人的职业素养。 如果只会快速编码,却不关心代码背后的意义,不能迅速判断、解决程序运行中的问题,不能自信满满地为自己交付的程序承担责任,同样是与职业素养绝缘。 ...
今天看了 《Python源码剖析》 中多线程的章节,看完头都秃了。但还是感觉自己没有吸收多少,知识一股脑倾泻下来,然后匆匆流过。在两个番茄钟的间隙,我全景思考了下,还是要从上往下入手,先将 threading 模块梳理清楚。其次是带着问题来阅读源码,跟着作者的思路容易迷,而问题最好是从 threading 的使用姿势中来。 来看廖雪峰老师Python教程中的例子: import time, threading def loop(): print('thread %sis running...' % threading.current_thread().name) n = 0 while n < 5: n = n + 1 print('thread %s>>> %s' % (threading.current_thread().name, n)) time.sleep(1) print('thread %sended.' % threading.current_thread().name) print('thread %sis running...' % threading.current_thread().name) t = threading.Thread(target=loop, name='LoopThread') t.start() t.join() print('thread %sended.' % threading.current_thread().name) 看完这段代码,我的脑海中浮现了这几个问题: Thread 是如何描述线程对象的? 启动线程的时候做了些啥,线程对象保存在哪里? 除了 Thread,threading 里还保存了写东西,否则 threading.current_thread() 怎么实现? 除此之外,还有一些线程的常见问题,如: threading 提供了哪些线程同步方式,锁? ...
故障检测主要有两种机制:心跳和租约。 心跳:假设总控机 A 需要确认工作机 B 是否发生故障,那么总控机 A 每隔一段时间,比如 1 秒,向工作机 B 发送一个心跳包。 租约:租约在一定期限内给予持有者特定权力的协议。 租约的协议决定了其用途,它能做的事情远不止故障检测。 如果协议内容是服务器确认客户端还存活,那么这个租约的功能就相当于心跳; 如果协议内容是服务器保证内容不会被修改,那么这个 租约就相当于读锁; 如果协议内容是服务器保证内容只能被这个客户端修改,那么这个租约就相当于写锁。 那么在判断客户端是否存活的问题上,心跳和租约有什么区别呢? ...
这篇博客想讲一下 Redis 命令的注册、解析和执行。 本文采用的源码是 Redis 5.0.0 ...
The Angel Philosopher 这集 episode,我起码听了 20 遍。但每次打开 Podcast,都忍不住再听一次。从读书、习惯、决策,到认知,Naval 给出了自己的真知灼见,每次听都有新收获。 这篇博客主要记录了其中关于读书的见解,一句话归纳就是:反复读几本书,而不是单纯看很多书。 Naval 的简介用一句话就可以: Naval is the CEO and co-founder of AngelList. He’s invested in more than 100 companies, including Uber, Twitter, Yammer, and so many others. ...
这两天上了一堂水平思考课,说实话,比上班还累!但跟着老师的思路,加上及时的课堂练习,最后是收获满满。 课程之后总感觉要再巩固一下,遂成此文。 ...
之前看到一篇 用 Redis 快速实现 BloomFilter 就忍不住看看 Redisson 的 实现方式 ...
Redis 哨兵是 Redis 的高可用实现方案。本节首先会回顾主从复制模式下故障处理可能产生的问题,而后引出高可用的概念,最后重点分析 Redis 哨兵的基本架构、优势,以及是如何实现高可用的。 本文大部分摘录自:Redis开发与运维 ...