Yang's Kernel

如果你不能解决一个问题,那么有一个更小的问题你也不能解决,找出那个问题!

0%

提问 以下四个快捷键中,哪些是由PTY实现的,哪些是由Shell实现的? * Ctrl-E * Ctrl-W * Ctrl-B * ↑(上一个命令) TTY,PTY,Terminal,Shell都是啥? 我们经常使用的”黑框”有很多关联的名词,比如: * Terminal(终端) * Console * TTY * PTY * Shell 这些都是指我们使用的那个”黑框”吗? 历史溯源 要理解这些名词概念,必须要先回首历史. 其实早在计算机出现之前,就有了类似的输入设备,就是电报机. 休斯印刷电报机就是一个纯机械设备.起源1855年. 1901年,出现了电传打字机.Teletype, 也就是TTY.使用的QWERTY键盘,也是现代键盘键位的起源. 到了Un
Read more »

背景 之前听过一种说法,要尽量把TIME_WAIT状态留在客户端(客户端主动发起FIN),而不是服务端。因为TIME_WAIT状态的连接需要等待2MSL后才能被释放,会导致资源占用。这种说法很合理,但我在看WebSocket RFC时,文档中提到要让服务端主动发起FIN,让TIME_WAIT状态留在服务端,因为TIME_WAIT不会影响服务端处理新连接。这和前面的说法不一致,下面我们来看看问题出在哪里。 The underlying TCP connection, in most normal cases, SHOULD be closed first by the server, so that it holds the TIME_WAIT state and not the clie
Read more »

背景 互联网业务中很多服务需要支撑千万级TCP长连接,这种场景往往Linux默认设置的可用文件描述符数量是不够的, 我们需要修改一些参数来优化, 下面列举一些今天讨论要涉及到的文件和命令: 1 2 3 4 5 6 # 命令 ulimit systemd # 文件 /proc/sys/fs/file-max /proc/sys/fs/nr_open /etc/security/limits.* 术语定义 FD (file descriptor) 文件描述符 RLIMIT_NOFILE 进程可打开的最大文件描述符数量限制 参考实验 这里使用Go分别编写server和client, client发起1000个tcp连接, server接收连接并打印连接序列号, 因为我们实验目
Read more »

之前在github上看到这个小项目, 作者用不到300行python代码实现了一个迷你区块链, 通过查看代码和运行效果, 基本可以对区块链中一些核心概念有个大体了解。本篇对代码进行一个梳理解读, 我把源码做了微小修改以丰富运行结果输出, 并删除了源码中繁琐的注释减少代码长度(本来这篇文章就是解释代码的:) 有兴趣的同学可以玩耍一下 blockchain 类 首先我们需要按照区块链技术的一些基础概念搭个架子出来例如: 未上链交易池, 整个区块链账本, 相连节点, 交易打包成新区块, 共识算法(这里是pow) 等 一步步来, 首先当然是构造函数, 先初始化三个属性: * 未打包交易 * 区块链账本数据 * 相连节点 相连节点用set存储可以避免重复添加的情况 self.new_bl
Read more »

上篇文章发出来后, 很多不是搞技术的朋友反馈看不懂, 但是都对取比特币和区块链感兴趣, 毕竟目前属于热点话题, 而且个人觉得区块链技术和互联网一样是基础技术, 以后会在各行各业有所体现, 所以无论你处于哪个行业, 都应该多少了解一点, 发挥自己的想象力, 或许就能发现新的商机呢😏, 再不济还有句话叫技多不压身 , 还能吃饱没事跟人吹个牛逼😀 今天废话有些多了, 下面为了让大家能从更宏观更概念化的角度了解区块链是个什么东西, 以后不再有不明觉厉的感觉, 带着大家一起走一遍流水账, 看看比特币为什么会诞生, 为什么说比特币是人类发展到一定阶段的产物, 是历史的进程所推进的。 因为我对金融领域也是一知半解, 本文只代表个人观点, 如有概念性错误还请大家指正😁 😁 😁 从物物交换开始
Read more »

安装准备 uname -r 查看内核版本号 1 2 [root@localvm]# uname -r 2.6.32-642.el6.x86_64 安装对应的内核debuginfo包,这里面的kernel-devel我在官网没找到,是从iso里面拷贝出来的, 后缀版本号一定要和uname -r自己显示的版本号对应 1 2 3 kernel-debuginfo-2.6.32-642.el6.x86_64.rpm kernel-debuginfo-common-x86_64-2.6.32-642.el6.x86_64.rpm kernel-devel-2.6.32-642.el6.x86_64.rpm 接下来安装systemtap工具,这个工具建议从源码编译安装,避免在抓取数据
Read more »

99.99%的人都是从比特币入门区块链的, 剩下那个当然是中本聪啦😈 个人觉得搞这个东西还是要熟悉一些概念后亲自跑一跑程序, 操作一下, 不然很难有深刻的印象(搞计算机技术好像都是这一个套路, 可能其他行业也是) 源码安装 废话不多说,开搞,建议开个虚拟机,因为依赖环境比较多,别把你宿主机搞得不兼容了,毕竟C++库不是随便装的 1 2 3 git clone https://github.com/bitcoin/bitcoin.git #这个是我当时用的稳定版 git checkout v0.16.0 接着直接运行这个shell脚本 1 2 3 4 5 pi@raspberrypi:~/project/bitcoin $ ./autogen.sh configurat
Read more »

简单分页 ES中执行一个简单’浅’分页, 每页5条数据, 取前三页 1 2 3 4 5 6 #from: 从哪开始取 #size: 取多少条 #类似于sql中的offset limit GET /_search?size=5 GET /_search?size=5&from=5 GET /_search?size=5&from=10 ES的查询阶段 我们假设查询的index只有primary shards, 没有 replica shards, ES查询分为query-fetch两个阶段, query阶段做查询规划, fetch阶段具体的从各shards取数据 (图片来自网络, 如有侵权请联系删除) 1. client发起一次查询, node1接收到请求并创建一个from+s
Read more »