被问到“有一个接口需要返回 10w 条数据,应该怎么做?”该如何回答?

2019-05-27 21:35:32 +08:00
 avk458

面试岗位是 Java,按照分页的逻辑按需返回,被告知不对。

9980 次点击
所在节点    Java
50 条回复
ericls
2019-05-28 00:53:06 +08:00
增大 timeout
dangyuluo
2019-05-28 01:05:47 +08:00
他的问题不准确,应该问:有一个接口需要返回 10w 条数据,你猜我们是怎么做的?
Zzdex
2019-05-28 01:08:35 +08:00
等个答案
Bramblex2
2019-05-28 01:44:49 +08:00
没面过人的是不能理解这道题的精髓的。这道题的不在于怎么回答,而在于在怎么向面试官提问,来补充具体的细节。你能问的越细,说明你对这个领域的问题越熟悉。

比如:
1. 十万条什么数据?每条数据多大?
2. 要求一次性返回还是可以分段返回?
3. 数据来源是什么?数据库? redis ?文件?即时运算?
4. 需要同时处理多少并发量?

上面每一个细节不同都会直接影响你服务的设计。
widewing
2019-05-28 01:46:35 +08:00
假设一条数据 1000 字节也才 100M,压缩后 5-10M,直接返回呗。话说这种需求不是 elasticsearch 的日常吗?建立个物化视图之类的东东然后分页返回
webshe11
2019-05-28 05:28:56 +08:00
问题都没问清楚
我觉得可以返回一个 json,里面是百度云 URL 和分享密码
opengps
2019-05-28 07:27:11 +08:00
我还真遇到过这么一个场景,地图上同时显示十万以上设备经纬度。这个没找到太合适的解决办法,最终做了这么几个操作:
1,降低精度,最早的经纬度精确到小数点之后 10 位之多,在 10 万的级别下,只返回小数点之后 3 位
2,分批次,类似于分页,在锁住地图可视范围下每次只加载 1 万条
3,缩减 json 字符,用索引号表示 key,再加一组 key 的对照说明
luozic
2019-05-28 07:50:27 +08:00
1.必須降低,否則是垃圾需求,系統都挂了、響應要幾小時的有 JB 用。
2.能異步就異步
3.能傳加密+保證數據安全性的方式就上上啥方式
4. 最好的實際是異步定時任務 搞個本地數據 excel/定義格式給他玩 jb。
wormcy
2019-05-28 08:20:41 +08:00
这么开放的题目哪有对错
wormcy
2019-05-28 08:21:55 +08:00
返回数据库的用户名和密码,自己来取。。。
crazypig14
2019-05-28 08:22:23 +08:00
没人提到订阅?
donyee
2019-05-28 08:49:32 +08:00
csv 文件,压缩一下;
支付宝对账文件好像就是这么处理的;
yulitian888
2019-05-28 08:52:54 +08:00
有 [一个接口] 需要返回 10w 条数据,应该怎么做?
答:应该把设计这个接口的人拖出去打!

现实业务场景里需要一次性使用大量数据的场合就那么几种。
想做数据分析了,上 BI ;想做数据分享了,走订阅;要做数据同步,做异步。真的有二杆子需求说想要看到“一切”,顶多就是提供下载,然后做个压缩丢个 csv 出去好了。

这种事情我遇到过一次,直接整库导出为 Access 文件,加个密码丢过去,万事大吉。
tuding
2019-05-28 09:17:22 +08:00
奇葩

直接怼回去, 分页怎么就不对了?!
SimonOne
2019-05-28 09:31:06 +08:00
另一家外包公司给了 json 串
wizardoz
2019-05-28 09:35:27 +08:00
python 的话我觉得是 yield 吧,Java 可能面试官也是需要类似的答案?
JASONWOOD
2019-05-28 09:36:44 +08:00
@wormcy 这么骚的操作
pmispig
2019-05-28 09:50:28 +08:00
很多傻逼就是自己预设了一个答案,根本不考虑你的思考过程,只要跟他预设的不一样你否定你,不用烦恼,这样的傻逼很多
tabris17
2019-05-28 09:55:26 +08:00
怼回去啊:“没有具体场景谈解决方案就是耍流氓”
FionWay
2019-05-28 10:03:38 +08:00
哈哈哈哈 我做为毕业就没“复制”过代码的产品,第一反应也是分页

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/568165

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX