interface{} 和 []interface{}

背景 基于可以对interface{}赋值任何类型的变量,很多人会尝试如下的代码: dataSlice := []int{1,2,3} var interfaceSlice []interface{} = dataSlice 但是很不幸,这个段代码编译不过: cannot use dataSl...

关于Python全局变量的thread-safe

我们知道python的全局解释器锁(GIL)用于确保Python同一时刻只能有一条线程在执行(也就是其实Python中的多线程是假的,将其理解成协程似乎更加合理)。在Python多线程运行的情况下,全局解释器一般只在字节码之...

Golang工厂模式自动注册

前言 相信接触过golang操作mysql的同学们都见过这样的代码: import "database/sql" import _ "github.com/go-sql-driver/mysql" 这是我们每个新手都可以google到的片段,我刚开始接触的时候觉得很奇怪,我们...

Linux下exit()和_exit()的区别和联系

exit() 和 _exit()函数都可以用于结束进程,不过 _exit()调用之后会立即进入内核,而exit()函数会先执行一些清理之后才会进入内核。 从实现上看,exit是调用的 _exit进入内核的。 至于想知道详细的区别,可以看...

5种IO模型

概念理解 在编程的时候,我们经常谈到:同步(synchronous)、异步(asynchronous)、阻塞(blocking)、非阻塞(noblocking) 同步(synchronous):就是需要完成某个操作时,在没有完成之前我们会一直等待,直...

算法–时间轮

从定时任务说起 自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。 大...

算法–一致性哈希

背景 随着时代的发展,数据量日俱增,相比纵向扩展单机的性能,人们更倾向于横向扩展,将多台一般的廉价机器组成集群来充当超级计算机,节省了大量的成本,代价是极大地增加了系统的复杂性。为了应对这些复杂性...

算法–布隆过滤器(Bloom Filter)

问题 我有个网站,拥有很多访客,当有用户访问时,我想知道这个ip是不是第一次访问我的网站,很快我们能够想到用哈希表来记录用户的访问记录,这样我们就可以在O(1)的时间复杂度内得到结果。 但是,如果我们的...