是 N 多年前京东后端开发的 3 面面试题:
有一个平面地图,可以理解成高德地图、百度地图这种效果,当前所在经纬为 X 和 Y ,以 X 和 Y 为圆点可以查看当前地图范围内的店铺,可以拖动地图改变当前所在经纬,经纬改变后当前范围内的店铺也会改变
请设计一个店铺缓存系统实现上述功能
1
gadfly3173 336 天前 via Android 3
|
2
Elissa 336 天前
话说这不是前端相关的吗
arcgis 用户,arcgis for js 中有个视口对象 view ,view 可以监听拖动、缩放事件,回调函数会返回视口范围 extent ,extent 和点、线、面一样属于 geometry ,可以将 extent 作为条件 new 一个 query 对象,通过图层查询传入查询条件 query ,实现仅查询视口范围内的要素 |
3
shinsekai 336 天前
用 kdtree 解决,不知道是不是正确答案。
|
4
Elissa 336 天前
https://developers.arcgis.com/javascript/latest/sample-code/highlight-features-by-geometry/
这个示例是通过查询鼠标点击位置处的正方形进行查询 |
5
jiangwei2222 336 天前
纯算法的话 geohash ,Google S2
工程实现的话 ES GEO 查询 Redis GeoHash 查询 PG postgis |
6
rabbbit 336 天前
想问的是后端如何缓存已经查询过的店铺数据吧,例如某些热门地点频繁查数据库可能不太好。
redis geo +postgis ? |
7
kuituosi 336 天前
楼上几位没有理解全题干,人家问的是缓存 geo 实现,不仅仅是问的 geo 查找
其实里面有一些细节需要处理,毕竟 jd 也算是大厂了也要考虑高并发问题 |
8
Maboroshii 336 天前 via Android
视野范围内的关键建筑 id 作为索引,查找关联的店铺数据。 比如大型商场,小区。
|
9
hapeman 336 天前
redis 3.2 有一个数据类型是 GEO ,可以存储经纬度信息,并且也可以根据指定的经纬度信息获取指定范围内的信息集合,不知道可以不可以用于这个问题?
|
10
jiangwei2222 336 天前
@kuituosi 缓存的话,直接用 Redis 的 Geo 查询,如果是自己手撸的话,用前缀树存储 GeoHash
|
11
main1234 OP 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
|
12
main1234 OP @rabbbit 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
|
13
main1234 OP @hapeman 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
|
14
main1234 OP @jiangwei2222 看了回复我想起来了,面试时候我第一时间说了 redis geo ,面试官直接否了,说不能用这个,原话是"如果没有 redis geo ,那我这个需求还做不了了",直接给我整懵了
|
15
jiangwei2222 335 天前 via Android
@main1234 自己构建 GeoHash 索引呗,只要做过 gis 开发,都应该能说出 GeoHash
|