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

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

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

9687 次点击
所在节点    Java
50 条回复
Tony1957
2019-05-27 21:38:59 +08:00
有没有考虑过不限于 http 或 https 的接口协议?
acehow
2019-05-27 21:41:33 +08:00
就返回十万条数据喽,扔 buffer 里以 stream 的形式返回呗。
lululau
2019-05-27 21:43:49 +08:00
如果他说的是同步响应的 http 接口的话我想知道答案;如果不是,那接口有很多种啊,做成异步丢到 ftp、云存储啊
billrice
2019-05-27 21:43:55 +08:00
写一个 csv 文件返回去,lol
winglight2016
2019-05-27 21:44:32 +08:00
websocket ?
avk458
2019-05-27 21:44:34 +08:00
@acehow 能详细说一下么?
dingyaguang117
2019-05-27 21:46:15 +08:00
假设需求合理,考虑可以优化的方面:压缩 、Chunked 等等,我感觉面试官想考你这些
MoHen9
2019-05-27 21:49:13 +08:00
不应该问问是什么数据库吗?你存时序数据库,返回十万条数据很多吗?
不应该问问时效性如何?数据量大不大?需不需要一次性返回?

得搞清楚应用场景吧!否则怎么尽可能挑选最优方案。
xiangyuecn
2019-05-27 21:51:36 +08:00
就帖子标题来看:

这是一道阅读理解题目而已,哪有唯一、标准答案?

说不定特定场景下,调用了一下接口,然后人工 拿 U 盘拷数据 是最佳解决方案也不一定呢?

你已经回答了,但“被告知不对” ,此时你应该怼回去😊
murmur
2019-05-27 21:53:13 +08:00
10w 条数据你有需要就返回呗,只要数据库不崩就行,当年 12306 下载几十 mb 的列车运行图也没崩啊
shawndev
2019-05-27 22:29:17 +08:00
分表,分库,CDN,缓存,chunk,由文本格式改为二进制格式,分页返回,由 http 改为 socket 连接。可以展开的点很多,不知道面试官想问什么。
gamexg
2019-05-27 22:30:44 +08:00
既然分页不对,
也许考的是流式返回?

不过 10w 数据量也不是太大,
我这一个 go 服务,返回在线列表( go 内的数据,不经过数据库),达到了 10w 级别,直接 json 返回,除了注意下 http 的 gzip 压缩下尺寸,没做其他处理,跑的很挺好。

不过我这是内部调用,几分钟才一次,压力很小。
看题目的意思可能是考的流式处理?
全程流式,读一部分就处理一部分发给客户一部分,不要全部都放到内存?
gamexg
2019-05-27 22:33:18 +08:00
@gamexg
额,不对,
单服务器跑得是多个实例,单个实例应该没到 10w 级别,
但是也是 w 级别的。
kevinlm
2019-05-27 22:58:02 +08:00
接口?什么协议的?
十万的文本,直接文件形式返回吧。
之所以用文件,是可以多线程做…还能断点续传

我瞎蒙的,手动滑稽
ffeii
2019-05-27 22:59:13 +08:00
估计问 reactor
qwerthhusn
2019-05-27 23:03:13 +08:00
导出
6260628
2019-05-27 23:09:31 +08:00
怼回去是正确答案
AlisaDestiny
2019-05-27 23:21:31 +08:00
你当时怎么不在答错之后请教一下他期望的正确方式呢?
billlee
2019-05-28 00:34:13 +08:00
这种问题应该是考察分析问题的能力,应该一步一步问清楚是什么性质的数据,比如

一条数据多大?
是固定的还是每次变化的?
如果是变化的那是怎么生成的?
客户端是可以迭代式处理,还是要收到所有数据后才能处理?
autogen
2019-05-28 00:36:30 +08:00
分页。。。

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

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

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

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

© 2021 V2EX