- 博客(43)
- 资源 (2)
- 收藏
- 关注
原创 etcd 中 raft 算法的使用方法
raft 协议是一个一致性算法,解决多台机器之间数据一致的问题。raft 声称简介明了,可以取代非常复杂的 PAXOS 算法。然而翻看 raft 的论文后,会发现即便声称简洁明了,自己完整地实现 raft 还是很麻烦的。etcd是一个分布式的 key-value 存储组件,它通过 raft 算法保证多台机器数据的一致性。那么 etcd 中的 raft 算法可以提取出来用在自己的项目中吗?答案是...
2020-01-18 09:54:12
1867
原创 100行PHP解析LevelDB SSTable文件
<?php$data = file_get_contents('testdb/000009.ldb');$size = strlen($data);// footer = meta block handle + index block handle + padding + 8-byte magic number// footer is fixed 48 byte, parse fro...
2019-09-10 22:25:39
471
原创 Linux如何将进程绑定CPU核心以提高性能
在Linux系统中,进程的调度切换是由内核自动完成的,在多核CPU上,进程有可能在不同的CPU核上来回切换执行,这对CPU的缓存不是很有利。为什么呢?先看一张 Intel i5 CPU 的缓存简单示意图:在多核CPU结构中,每个核心有各自的L1、L2缓存,而L3缓存是共用的。如果一个进程在核心间来回切换,各个核心的缓存命中率就会受到影响。相反如果进程不管如何调度,都始终可以在一个核心上执行,那...
2019-02-26 23:43:39
6146
2
原创 Nginx中的频控模块示例
简介陶辉老师《深入理解Nginx》中的示例代码,支持IP+URL级别的频控。频控以模块的方式嵌入Nginx。采用 红黑树+链表 的方式实现,每当一个IP访问一次URL,红黑树将会插入一个节点,节点包含本次访问时间。当相同的IP短时间内访问同样的URL时,红黑树就会查找到刚插入的节点,找出上次的访问时间,判断间隔是否够长,间隔太短的会返回 403 Forbidden,间隔够长就允许访问,并把这...
2019-01-24 07:58:07
657
原创 《深入理解Nginx》upstream机制完整代码
陶辉老师写的《深入理解Nginx》一书很赞,书中 5.3节 使用upstream的示例 的代码略有缺失,编译通不过,我补充成了完整可跑的,供大家参考。nginx自制模块的编译见书本3.3节。config文件:ngx_addon_name=ngx_http_mytest_moduleHTTP_MODULES="$HTTP_MODULES ngx_http_mytest_module"NGX_...
2018-10-10 07:29:21
1530
原创 优化Visual Studio Code的自动补全
Visual Studio Code (简称VS Code)是个很棒的代码编辑器,内置多种语言的自动补全功能,写JavaScript也不例外,VS Code提供的自动补全还是很赞的。不过自动补全功能在有些情况下会失效,比如 document.getElementById() 或 document.querySelector() 返回的对象,是没有自动补全的:就像图中展示的,canvas...
2018-06-11 21:58:11
67519
4
原创 Webpack 4.0 + Vue多页配置
Webpack 4.0 + Vue 的多页配置,注意 vue-loader 目前还请使用 14.2.2 版本,15版本在编译时会有问题。package.json{ "name": "learn", "version": "1.0.0", "description": "", "main": "index.js", &q
2018-05-01 08:04:41
2691
原创 Workerman如何在WebSocket响应中添加Header
最近在用 Workerman 学习 WebSocket 的时候,遇到了一个问题:var ws = new WebSocket('ws://' + document.domain + ':8081', 'encrypt');结果浏览器报了这个错: Error during WebSocket handshake: Sent non-empty ‘Sec-WebSocket-Pro...
2018-04-28 08:43:37
20966
原创 PHP实现Huffman编码/解码
Huffman 编码是一种数据压缩算法。我们常用的 zip 压缩,其核心就是 Huffman 编码,还有在 HTTP/2 中,Huffman 编码被用于 HTTP 头部的压缩。本文就来用 PHP 来实践一下 Huffman 编码和解码。1. 编码字数统计Huffman编码的第一步就是要统计文档中每个字符出现的次数,PHP的内置函数 count_chars() 就可以做到:...
2018-04-19 18:34:08
1054
原创 PHP内核队列使用一例
写了一段代码,展示了PHP如何使用内核队列。场景是:父进程产生消息,放入队列,子进程从队列读取消息,并处理。<?php$msg_key = ftok(__FILE__, 'a');$msg_queue = msg_get_queue($msg_key, 0644);/** * 父进程往队列发送消息 * @param $msg_queue * @param $chil...
2018-04-09 19:55:58
241
原创 图解Numpy的tile函数
Numpy的 tile() 函数,就是将原矩阵横向、纵向地复制。tile 是瓷砖的意思,顾名思义,这个函数就是把数组像瓷砖一样铺展开来。举个例子,原矩阵:mat = array([[1,2], [3, 4]])横向:tile(mat, (1, 4))# 等同于tile(mat, 4)结果:[[1 2 1 2 1 2 1 2] [3 4 3 4 3
2018-01-26 16:47:33
639
原创 Vue多页应用的极简配置
Vue的官方脚手架工具 vue-cli 提供了很多种已配置好的模板,但这些模板的webpack配置看起来比较麻烦,而且有些配置在项目中也许根本用不到。本文就提供个思路,只保留最必须的代码,搭建出一个Vue多页应用的开发环境。整体思路整体思路如下图。每一个Vue组件,按照官方推荐的方式,写在单独的.vue文件中(图中绿色部分)。经过Webpack编译后,组件会全部打包到 Bundle.js 中,Bun
2018-01-17 09:25:46
1132
原创 Drools7.x环境搭建与简单示例
Drools是个规则引擎的开源实现。官方文档比较长。这里提供一个方法,搭建最基本的Drools运行环境,并提供一个简单示例。环境准备:JDK至少需要JDK 1.5以上,JDK去这里下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html安装好之后,把 [JDK安装目录]/bin 加入到PATH 中
2018-01-10 13:15:45
9139
1
原创 Vue标签输入框
Vue组件、使用方法都在代码里了。效果如下:附上所有代码:html lang="en">head> meta charset="UTF-8"> meta name="viewport" content="width=device-width, initial-scale=1.0"> meta http-equiv="X-UA-Compatible" cont
2018-01-09 09:56:11
7496
原创 Bootstrap中col-*-offset和col-*-push的区别
Bootstrap中col-*-offset和col-*-push的区别
2017-11-24 15:35:24
23146
1
原创 PHP常用代码汇总,持续更新
收集一些日常开发中一些有用的PHP代码段,会持续更新。 如果代码有BUG或者任何建议,欢迎在评论区评论!把一个数字限定在某个范围内,比如要限定$a在区间[1, 12]内,当$a=17时,就令$a=12:min(max($a, 1), 12);检查一个日期是不是有效,比如非闰年时给了个2月29日:$date = '2016-2-29';list($year, $month, $d
2017-11-14 20:52:19
1288
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人