归档: 2019

Go的奇特之处2--Go语言的slice

Go语言中的slice,你可以将它简单地看作一个动态数组。动态数组在很多语言中都有实现,比如C++中的vector<>,Java中的Array<>,Python中的[]。那为什么要说Go语言的slice奇怪?首先来回顾一下slice的基本知识: slice由三部分组成:首地址、长度len、容量cap 那么,根据slice的这些特性,slice有啥奇特的呢?首先,举个例子

Go的奇特之处1--Go语言的作用域

作用域是指一个变量或函数在代码中能够有效地使用这个名称的范围。这个概念可能是老生常谈,在所有语言中都有这个概念,但是Go语言的作用域比较奇特。为了行文方便,我把由一对花括号{ }框起来的区域叫做句法块(其实这是在Go语言圣经上看到的概念)。在一个句法块内定义的变量或函数在这个句法块外是不能被调用的,你可以在一个句法块外定义一个相同名称的变量或函数,但那不同于句法块内的变量和函数,相当于生成了另外一

初探Uber H3原理

2018年初,Uber正式开源了他们自己的一种空间索引算法H3(H3项目地址:h3)。最近偶然得知了这个算法,于是Google了一下,发现Uber还是比较良心地在其官网上给出了很多算法原理的讲解:简略版:H3: Uber’s Hexagonal Hierarchical Spatial Index详细版:H3 introdutction。如果英文还不错的话,建议直接看官方的介绍,我这里只是大致翻译

轨迹压缩算法(Polyline encoding algorithm)探究

前言文中的代码表达采用Java,如果不想看原理,可以直接跳到博客末尾,有我写的一个Java版的demo一般来说,轨迹是由若干个轨迹点组成的数组来表达的,每个轨迹点可以表达为 $p = (x, y, t, A)$。其中 $x, y$ 是其空间坐标(一般来说,空间坐标用经纬度表示,即$x$一般对应经度(longitude),$y$一般对应纬度(latitude)),$t$是记录这个轨迹点的时间戳(Ti

Ubuntu16.04+1080ti显卡驱动循环登录问题解决办法

昨天发现Ubuntu在登录界面循环登录,百度之后说是显卡驱动问题,于是将显卡驱动卸了,可是之后却再也装不上,装上了之后又循环登录了。 机器情况是两块NVIDIA 1080Ti,Ubuntu16.04系统。为了解决这个问题,百度、Google搜了半天,发现了一个写的很好的帖子Ubuntu16.04+1080ti显卡驱动安装流程+循环登录问题,上面的所有方法试过之后并没有什么卵用,尝试在NVIDIA官

Google s2 lib研究之空间覆盖

本文适合于对Google s2有一定了解或对空间索引有一定了解的读者。 空间索引常用的方法是空间填充曲线,比如Hilbert, Geohash等,被用于许多查询场景中。Google也推出了自己的空间索引——Google s2,这个项目是一个开源项目,有兴趣的可以直接看Google s2 java版源码和官方文档。对Google s2的介绍可以看Google’s S2, geometry on th