上面的VIP专享栏,每一项都注明了VIP专享,从技术角度来看,这个属于重复的元素,很不简洁,多余的东西就得去掉;但是,从产品设计的角度来讲,重复是为了强调,就是要通过视觉来刺激你,买VIP吧,买VIP吧,买V….
golang make map vs make slice
第二个参数的含义不同,make slice时,第二个参数是大小,make map时 ,第二个参数是容量。
流式解析http build query 字符串
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/bin/env php <?php $filter = isset($argv[1])?$argv[1]:""; $arr = explode(".", $filter); while(!feof(STDIN)) { $line = trim(fgets(STDIN)); if (!$line) continue; $result = array(); parse_str($line, $result); $notFound = false; foreach($arr as $key) { if ($key == "") continue; if (!isset($result[$key])) { $notFound = true; break; } $result = $result[$key]; } if ($notFound) continue; if (is_array($result)) { print_r($result); echo "\n"; continue; } if (is_string($result)) { echo "$result\n"; } } |
受jq的启发
这个parser很奇怪, 处理的是 value 嵌套value的情况,生产上有这种情况,但是很少见。
tcp 的滑动窗口
tcp的滑动窗口是用来流控的,但是,如果一方不遵守,会怎样呢?如下:
我们发现,虽然8085一直提示说win只有430,但是59822却完全无视,直接发送1448大小的数据; 8085也没有生气,也没有不ack,是不是很好玩。
好景不长,59822 觉得不好意思了,改发500大小的数据包了:
对于甲方来说,发送了一个小的win ,乙方未必按照小的win发送数据,只要甲方总能ack乙方发送的所有数据,乙方就可以总是发送一个很大的数据包;对于甲方来讲,其实可以通过不ack乙方,或者ack部分数据来制服乙方的。
最近在忙啥
自从雄飞提离职,我就开始了解lua版本的dmp,开始是性能优化,修补丢数据的情况,添加监控,分析指纹数据的流程,直到添加caid的支持。
最近这些事情不敢太随意,步步细心的去做,只是最近添加caid的事情,催的有些急,测试不到位,出了不少问题。
本来答应凯超那里做一些规则引擎的配置节目的事情,以及试金石的优化,都没时间做呢。
总结:
- 程序总是要有bug的,写完就上线,一定就出错,欲速则不达。
- 上完线不等于完事儿,必须多方面验证
- 尤其对数据的写操作,要有如果写错了的预案
- 有些时候,错误的认知会关上通往真理的大门,敢于否定自己,想办法来验证自己的想法,没有验证的结论就不一定对,就好比没有测试的程序就一定会出错一样
Windows目录无法删除的问题
如果在wsl中打开了某个目录,则在Windows上执行删除操作,虽然执行了删除操作,但是还是能看见,只是不能访问,直到wsl中退出该目录,该目录就会自动删除掉了
lua 之 require
lua 的 require 会自动避免重复加载的,如:
hello.lua
1 2 3 4 5 6 7 8 9 |
local a = {} local i = 0 print("loading a ...") function a:say() print(i) i = i + 1 end return a |
要想重复加载也行:
1 |
package.loaded[luafile] = nil |
由此也可以通过package.loaded 知道都load了哪些包了:
如何知道进程运行在哪个核上
下图是htop能直观看到的数据:
第一个CPU很忙,太多的时间花费在了内核,为什么内核那么消耗CPU:
该CPU主要干了三件事:
- 硬终端 (估计这个是导致kacpid非常忙的根源)
- 软终端 (主要是网卡中断)
- 内核进程kacpid
连续执行如下命令会发现acpi中断非常多,而且确实都是发生在CPU0上的,自然处理该中断的也就是CPU0了;如果说要把网卡软中断和acpi中断分开,那么就是,要么把acpi从CPU0挪走,要么把网卡软中断从CPU0挪走
1 |
cat /proc/interrupts |grep acpi |
lua tcp udp
https://github.com/openresty/lua-nginx-module#ngxsocketudp
udp 支持unix dgram , 不需要连接池,可以把connect的结果保存到全局变量,但是,每次用完就close也开销不大
tcp 支持unix stream, 通过set_keepalive 支持连接池
中国移动的家用WIFI路由器网关dns问题
dns的cache长期不能refresh,解决办法,重启