0%

今天看STL源码的时候注意到一个有意思的地方,获取定长数组的长度 std::size 函数的简单实现如下:

1
2
3
4
template <class _Ty, size_t _Size>
constexpr size_t size(const _Ty (&)[_Size]) noexcept {
return _Size;
}

如果阅读这个代码有些困难,它的一个特化实现可以简单写成下面这样:

1
2
3
4
template <size_t _Size>
size_t size(const int (&)[_Size]) {
return _Size;
}

虽然平时也算是阅码无数,看到这个函数还是愣了几秒钟,这个函数的参数 const int (&)[_Size] 里的 (&) 是什么鬼?

阅读全文 »

话不多说,先上code!

1
2
3
4
5
6
7
8
9
10
// 最简单的方式创建一个json对象
json obj = {
{ "null", nullptr },
{ "number", 1 },
{ "float", 1.3 },
{ "boolean", false },
{ "string", "中文测试" },
{ "array", { 1, 2, true, 1.4 } },
{ "object", { "key", "value" } }
};

有没有觉得单看这段代码都有种js内味了(误)。但是没错,上面这段代码是C++

如果这引起了你的些许兴趣,那就说明这个轮子成功了。

阅读全文 »

什么是function score

function_score查询用于控制查询文档的评分,可以把它看做一个套子,套在你的任何查询之上,专门用来修改结果的分值。

这个查询常见的使用场景有两个,一个是简单的modify每个文档的评分,另一个是为了方便自定义排序,比如用来实现一个归一化评分的结果排序。
在第二种场景下,直接使用sort排序会过于绝对,因为它会忽略文档本身的相关度。比如按日期排序,得到的结果是绝对按日期排序的,query本身的评分会被忽略。而function_score可以通过控制文档评分,间接达到排序的目的,使用起来更加灵活。

阅读全文 »

9月11日更新
最近发布的Go 1.14.9版本已经修复了该BUG,详情右转👉Release History

在Go 1.13和1.14版本现存一个很玄学的BUG,在for循环中的一个常数会导致无法退出循环,一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
package main

func main() {
nums := []int64{1, 2}
for i, _ := range nums {
if i + 1 < 1 {
return
}
println(i)
}
}

很简单的一段代码,预期输出如下

1
2
0
1

但实际运行发现程序进入死循环,i无限增长,继续测试发现,把 i+1 改成 i+2,运行就正常了!

这就很玄学了,循环体内的一个常数导致for-range越界了😳

阅读全文 »

什么是Netlify

Netlify 是美国的一家云计算公司,它的官网 Netlify 为用户提供静态网页托管功能。
简单来说,只要你准备好网页代码,不需要购买服务器甚至域名,就可以把你的页面发布到互联网上。所以从定位上来说,它非常适合个人网站搭建,因为它零经济成本、零学习成本、甚至零风险

阅读全文 »