比如我要点击关闭窗口的按钮,有可能点到窗口外面,或者点到窗口里面其他地方。
c76dfd1a0b0d9b8fccd6d189c58997.MP4
这基本就宣告本次升级的彻底失败,于是我灰溜溜地恢复备份,退回了Catalina。
今年又手痒了,直接升级到Monterey,结果还是一样的问题,鼠标根本点不到它显示的地方。这就不对了,苹果不可能两次系统大升级都没发现这个bug啊,难道是我的电脑有个很隐秘的设置和别人的不一样?
]]>限流器有多种算法,比较常用的如令牌桶、漏桶、滑动窗口等。本文讲的是滑动窗口算法。
滑动窗口算法限流最适合的需求场景,就是X秒内,最多允许Y个请求。用漏桶和令牌桶算法我还没想出来应该咋能精确实现这一需求。
滑动窗口的原理网上一搜一大堆,这里就不描述了。我们直接来讲:
]]>某一张表的某一列,存储的是用某个分隔符分割的字符串,我们现在要分割字符串的每个部分,求每个部分的汇总数据。
]]>例如有一张表叫
reward_detail
:
group_id member_count names total_reward 1 4 Tom,Jack,HanMeimei,LiLei 200 2 4 Jack,Rose,Mary,张三 400 3 2 张三,李四 300 这是一张设计得不那么好的表,有若干组,一个人可以同时在多个组,每组有奖金,组内成员平分奖金,成员存在一列,使用逗号分开。
我们已知每组不超过10个人,怎么仅使用SQL,求出每个人获得的奖金金额呢?
有一个文件,这个文件位于服务器的
/home/server/private_files/
目录。只有高等级的用户才能获取下载路径,且下载路径有时效,过期则失效。
要实现此功能,我们得把它分为两部分:一部分是下载路径的生成和有效性判断,这部分是业务逻辑代码实现的;另一部分则是对这个文件的保护,只有通过业务逻辑校验的请求才有权拿到此文件。
此时我们就需要用到Nginx的内部重定向功能了。
我们需要知道的两个知识点:
那么如何配置呢?
首先,nginx需要加上如下配置:
location /get_file/ {
fastcgi_pass xxxxx # 或 proxy_pass,用于将请求转发到服务端
}
location /private_files/ {
# 内部路径,禁止直接请求
internal;
alias /home/server/private_files/
}
然后,在服务端实现对 /get_file/xxx
的处理逻辑,如果允许访问,则返回的响应头中,写入如下信息:(以php为例)
// And redirect user to internal location
header("X-Accel-Redirect: /private_files/a.txt");
用图来表示一下:
在用户直接请求 /private_files/a.txt
时
在用户请求 /get_files/xxxx
时
举个最简单的例子,获取昨天0点的时间戳
Python的变态代码需要这么写:
# 先以当前时间获取昨天的这个时间
yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
# 格式化到日
yseterday_ymd = yesterday.strftime("%Y-%m-%d")
# 再转换为时间戳
ts = int(time.mktime(time.strptime(yesterday_ymd, '%Y-%m-%d')))
每次写完都感觉身体被掏空。
自从接触了世界上最好的语言——PHP,每次处理时间都信手拈来
// 没错!就这一行,就这么短!
ts = (int)strtotime('0:00 yesterday');
php的strtotime的参数可以基本接近自然语言的描述,只要稍微看看文档,了解一下规则,写起代码来简直神清气爽。
当然有些坑得注意,比如
strtotime('20190131 +1 month');
php在这里处理时,认为应该是20190231,2月31日,但是没这个日期,所以进位到3月,变成3月3日。
]]>最近一段时间总觉得风扇转速有点高,照理说不进行大任务,风扇应该稳定保持最低转速2000 RPM的,然而风扇老是保持在3000 RPM左右。于是把电脑拆开来清灰,并换了一下硅脂(六年没换了)。
风扇转速果然下来了。
然后就想看看散热效果,下载了Intel Power Gadget。之前从来没关心过CPU的核心温度,不看不知道,一看吓一跳,居然高达80度,以我之前组装电脑时的思路,CPU超过75度,风扇就应该满转速了,结果此时的风扇还是最低转速。于是抱着「我比厂家的工程师聪明」的态度,使用Macs Fan Control,自定义设置了风扇转速:监测CPU核心温度,70度开始加速,最高85度。
然后就出问题了。
]]>硬件part | 详情 |
---|---|
CPU | Core 2 Quad Q6600 |
主板 | Intel G33 |
显卡 | 8600GT |
内存 | DDR2 800MHz 4G (1Gx4) |
硬盘 | 320GB 机械硬盘 |
电源 | 350W |
这台电脑用了大学四年,2012年本科毕业后就放在家里吃灰。
今年(2018年)十一假期,我爹问我那台电脑要不要扔到农村老家去,我才想起来这家伙已经躺在我房间里好几年没开过机了。于是把它重新通电开了个机。由于主板电池早就没电了,因此一开始就报CMOS校验出错。然而忽略此错误后,电脑居然奇迹般的引导进入了Windows。真是个老不死的。
于是我开始计划给这台老家伙重新修整一番。
]]>如果需要从Memcache迁移到Memcached,就会涉及到兼容性的问题——这里的兼容性发生在线上升级的时候,一部分机器升级了Memcached,然而旧的机器缓存还是用Memcache写入的,Memcached读出来就会产生问题,导致升级过程中服务处于几乎不可用的状态。
Memcached默认会对超过一定长度的数据进行压缩,而Memcache是没有压缩的,因此调用Memcached的写入时,需要取消压缩:
$memcached->setOption(Memcached::OPT_COMPRESSION, false);
Memcached和Memcache在有多台memcached服务时,使用的默认散列算法不同。Memcache用的是crc32。因此需要把Memcached的散列算法也设置为crc32
$memcached->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
通过Memcache写入memcached服务中的数据被Memcached读出来会被错误解读,反之亦然
这是由于Memcache写入的时候,设置在memcached服务中的flag无论如何都是0,而如果用Memcached写入(默认方式),则可能为0(string)、1(int)、3(对象)、4(数组)等等。这是因为Memcache是先做序列化再写入的,读取后也会默认做一次反序列化。因此在调用Memcached::set的时候,需要给被存入缓存的数据做一次序列化变成string,这样flag就一定是0,读写就和Memcache一致了。
// 写入
$memcached->set($key, serialize($value), $expire);
// 读取
$raw = $memcached->get($key);
$value = unserialize($raw);
]]>php版本7.x,已安装Memcached扩展,服务器上也已经部署Memcached服务。
注册一个微信公众号(账号主体不可以是个人,否则微信的JS API无法使用)
可以通过测试公众号:
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
实现此功能。限制就是,只有关注了你的测试公众号的微信账号,才能分享带缩略图和描述的链接,别人分享还是普通的链接。
测试公众号中也需要填写js接口安全域名。
]]>我有一个域名 huangfeiqiao.com,我想在上面搭几个web应用,分别是foo、bar、baz。
一种办法就是在nginx的document root目录中建立foo、bar、baz目录,访问方式就是huangfeiqiao.com/foo、huangfeiqiao.com/bar等等。但这样有几个缺点——
需要让foo、bar、baz都拥有自己的子域名(foo.huangfeiqiao.com、bar.huangfeiqiao.com等等),可以这么做:
server {
listen 80;
listen 443 ssl;
server_name huangfeiqiao.com;
# blah blah...
# 设置子域名目录
set $doc "";
if ($host ~ ^(\w+)\.huangfeiqiao\.com$) {
set $doc $1;
}
# www的话就是根目录
if ($host = "www.huangfeiqiao.com") {
set $doc "";
}
# 设置此时域名对应的root
root /path/to/www/$doc;
index index.html index.htm index.php;
# 日志配置
access_log logs/$host.access.log main;
error_log logs/error.log;
}
搞定。
这样做的好处就是,之后要加个子域名,只要在www目录中新建一个子目录,取子域名作为目录名,然后在域名服务商新增一条字域名的CNAME记录就搞定了,非常方便。
]]>