之前有一个需求,根据当前司机的坐标经纬度,搜索出距离当前司机位置5公里的货源。这是一类很常见的需求,比如附近的人,附近的电影院等等。第一个能想到的方法是,计算出所有货源与司机的距离,然后返回距离小于5公里的货源。但这种方法的问题是,如果整个系统的货源数量很大,算法的时间复杂度是O(n)。Redis自从3.2开始,基于geohash和zset提供里地理位置相关的功能。georadius就是那个...
之前写过一篇关于Go内存分配的文章 - Go内存分配,讲的是Go堆内存的申请过程。对象除了可以在堆上分配,还有一个我们很熟悉的地方可以分配,栈。栈内存分配每一个协程都有自己的栈,协程访问栈的对象时,不需要加锁等同步操作。下面是一个例子:调用main函数,Go在栈上分配内存调用square函数,Go在栈上分配内存当square执行完返回main时,上一步调用square时,分配的内存不会被回收...
问题在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2 输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。解答求第K个最大元素用最小堆,构建一个最多包...
问题输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1 输出:[0]限制:0 <= k <= arr.length <= 10000 0 ...
编写过C或者C++程序的都知道,我们要手动申请或释放内存。Go的内存是自动管理的,不需要我们考虑内存的申请和释放问题。尽管我们不需要考虑内存的管理问题,但了解Go在内存管理方法做了什么,有助于我们写出高效的程序。先来一张Go内存分配的全局图分配方法顺序分配器当我们在编程语言中使用顺序分配器,我们只需要在内存中维护一个指向内存特定位置的指针,当用户程序申请内存时,分配器只需要检查剩余的空闲内存...