面试岗位是 Java,按照分页的逻辑按需返回,被告知不对。
1
Tony1957 2019-05-27 21:38:59 +08:00
有没有考虑过不限于 http 或 https 的接口协议?
|
2
acehow 2019-05-27 21:41:33 +08:00 via Android 2
就返回十万条数据喽,扔 buffer 里以 stream 的形式返回呗。
|
3
lululau 2019-05-27 21:43:49 +08:00 via iPhone 2
如果他说的是同步响应的 http 接口的话我想知道答案;如果不是,那接口有很多种啊,做成异步丢到 ftp、云存储啊
|
4
billrice 2019-05-27 21:43:55 +08:00
写一个 csv 文件返回去,lol
|
5
winglight2016 2019-05-27 21:44:32 +08:00
websocket ?
|
7
dingyaguang117 2019-05-27 21:46:15 +08:00 1
假设需求合理,考虑可以优化的方面:压缩 、Chunked 等等,我感觉面试官想考你这些
|
8
MoHen9 2019-05-27 21:49:13 +08:00 via Android 3
不应该问问是什么数据库吗?你存时序数据库,返回十万条数据很多吗?
不应该问问时效性如何?数据量大不大?需不需要一次性返回? 得搞清楚应用场景吧!否则怎么尽可能挑选最优方案。 |
9
xiangyuecn 2019-05-27 21:51:36 +08:00 2
就帖子标题来看:
这是一道阅读理解题目而已,哪有唯一、标准答案? 说不定特定场景下,调用了一下接口,然后人工 拿 U 盘拷数据 是最佳解决方案也不一定呢? 你已经回答了,但“被告知不对” ,此时你应该怼回去😊 |
10
murmur 2019-05-27 21:53:13 +08:00 1
10w 条数据你有需要就返回呗,只要数据库不崩就行,当年 12306 下载几十 mb 的列车运行图也没崩啊
|
11
shawndev 2019-05-27 22:29:17 +08:00
分表,分库,CDN,缓存,chunk,由文本格式改为二进制格式,分页返回,由 http 改为 socket 连接。可以展开的点很多,不知道面试官想问什么。
|
12
gamexg 2019-05-27 22:30:44 +08:00 via Android
既然分页不对,
也许考的是流式返回? 不过 10w 数据量也不是太大, 我这一个 go 服务,返回在线列表( go 内的数据,不经过数据库),达到了 10w 级别,直接 json 返回,除了注意下 http 的 gzip 压缩下尺寸,没做其他处理,跑的很挺好。 不过我这是内部调用,几分钟才一次,压力很小。 看题目的意思可能是考的流式处理? 全程流式,读一部分就处理一部分发给客户一部分,不要全部都放到内存? |
13
gamexg 2019-05-27 22:33:18 +08:00 via Android
|
14
kevinlm 2019-05-27 22:58:02 +08:00 via iPhone
接口?什么协议的?
十万的文本,直接文件形式返回吧。 之所以用文件,是可以多线程做…还能断点续传 我瞎蒙的,手动滑稽 |
15
ffeii 2019-05-27 22:59:13 +08:00 via iPhone
估计问 reactor
|
16
qwerthhusn 2019-05-27 23:03:13 +08:00
导出
|
17
6260628 2019-05-27 23:09:31 +08:00 via iPhone
怼回去是正确答案
|
18
AlisaDestiny 2019-05-27 23:21:31 +08:00 1
你当时怎么不在答错之后请教一下他期望的正确方式呢?
|
19
billlee 2019-05-28 00:34:13 +08:00 1
这种问题应该是考察分析问题的能力,应该一步一步问清楚是什么性质的数据,比如
一条数据多大? 是固定的还是每次变化的? 如果是变化的那是怎么生成的? 客户端是可以迭代式处理,还是要收到所有数据后才能处理? |
20
autogen 2019-05-28 00:36:30 +08:00
分页。。。
|
21
ericls 2019-05-28 00:53:06 +08:00 via iPhone
增大 timeout
|
22
dangyuluo 2019-05-28 01:05:47 +08:00 9
他的问题不准确,应该问:有一个接口需要返回 10w 条数据,你猜我们是怎么做的?
|
23
Zzdex 2019-05-28 01:08:35 +08:00 via iPhone 1
等个答案
|
24
Bramblex2 2019-05-28 01:44:49 +08:00 8
没面过人的是不能理解这道题的精髓的。这道题的不在于怎么回答,而在于在怎么向面试官提问,来补充具体的细节。你能问的越细,说明你对这个领域的问题越熟悉。
比如: 1. 十万条什么数据?每条数据多大? 2. 要求一次性返回还是可以分段返回? 3. 数据来源是什么?数据库? redis ?文件?即时运算? 4. 需要同时处理多少并发量? 上面每一个细节不同都会直接影响你服务的设计。 |
25
widewing 2019-05-28 01:46:35 +08:00 via Android
假设一条数据 1000 字节也才 100M,压缩后 5-10M,直接返回呗。话说这种需求不是 elasticsearch 的日常吗?建立个物化视图之类的东东然后分页返回
|
26
webshe11 2019-05-28 05:28:56 +08:00 6
问题都没问清楚
我觉得可以返回一个 json,里面是百度云 URL 和分享密码 |
27
opengps 2019-05-28 07:27:11 +08:00 via Android
我还真遇到过这么一个场景,地图上同时显示十万以上设备经纬度。这个没找到太合适的解决办法,最终做了这么几个操作:
1,降低精度,最早的经纬度精确到小数点之后 10 位之多,在 10 万的级别下,只返回小数点之后 3 位 2,分批次,类似于分页,在锁住地图可视范围下每次只加载 1 万条 3,缩减 json 字符,用索引号表示 key,再加一组 key 的对照说明 |
28
luozic 2019-05-28 07:50:27 +08:00
1.必須降低,否則是垃圾需求,系統都挂了、響應要幾小時的有 JB 用。
2.能異步就異步 3.能傳加密+保證數據安全性的方式就上上啥方式 4. 最好的實際是異步定時任務 搞個本地數據 excel/定義格式給他玩 jb。 |
29
wormcy 2019-05-28 08:20:41 +08:00
这么开放的题目哪有对错
|
30
wormcy 2019-05-28 08:21:55 +08:00
返回数据库的用户名和密码,自己来取。。。
|
31
crazypig14 2019-05-28 08:22:23 +08:00
没人提到订阅?
|
32
donyee 2019-05-28 08:49:32 +08:00
csv 文件,压缩一下;
支付宝对账文件好像就是这么处理的; |
33
yulitian888 2019-05-28 08:52:54 +08:00 2
有 [一个接口] 需要返回 10w 条数据,应该怎么做?
答:应该把设计这个接口的人拖出去打! 现实业务场景里需要一次性使用大量数据的场合就那么几种。 想做数据分析了,上 BI ;想做数据分享了,走订阅;要做数据同步,做异步。真的有二杆子需求说想要看到“一切”,顶多就是提供下载,然后做个压缩丢个 csv 出去好了。 这种事情我遇到过一次,直接整库导出为 Access 文件,加个密码丢过去,万事大吉。 |
34
tuding 2019-05-28 09:17:22 +08:00
奇葩
直接怼回去, 分页怎么就不对了?! |
35
SimonOne 2019-05-28 09:31:06 +08:00
另一家外包公司给了 json 串
|
36
wizardoz 2019-05-28 09:35:27 +08:00
python 的话我觉得是 yield 吧,Java 可能面试官也是需要类似的答案?
|
38
pmispig 2019-05-28 09:50:28 +08:00 2
很多傻逼就是自己预设了一个答案,根本不考虑你的思考过程,只要跟他预设的不一样你否定你,不用烦恼,这样的傻逼很多
|
39
tabris17 2019-05-28 09:55:26 +08:00
怼回去啊:“没有具体场景谈解决方案就是耍流氓”
|
40
FionWay 2019-05-28 10:03:38 +08:00
哈哈哈哈 我做为毕业就没“复制”过代码的产品,第一反应也是分页
|
41
sammeishi 2019-05-28 10:09:25 +08:00 via Android 1
跪舔型:
老师这个题目一看您就是老江湖了,佩服佩服,我个人觉得输出端肯定要做内存 cache 防止阻塞 IO,然后在分块后使用流并发推送防止。。。。最后在使用。。。。。 您老法眼看看可以吗? 真-程序员型: 老师,您脑子里的水没排干吗? 什么业务需求一次输出 10w ? 应用端一次请求 10w 设计者是大学生吗?把接口当下载机吗? 是迅雷玩上瘾了吗? 考虑过好好看病吗? |
42
encro 2019-05-28 10:12:41 +08:00
想要的答案应该是:1,返回一个 TaskID,2,Task 完成通知;3,根据 Task_id 自己过来取.4,取的时候分 chuck 返回不要一次读取.
|
43
moonsola 2019-05-28 10:16:39 +08:00
不管面试官的初衷是什么,这种问题更考验的是需求沟通能力。
很多面试官也就是随口提一个问题,他心中有一个完善的使用场景,但是你不知道啊,你得问出来。 客户或者产品经理上来问一句“我要对接一个接口,需要返回 10w 条数据,能做吗?” 你就回答个“能”,然后开始调分页的轮子?不需要确认下其他的信息? |
44
10Buns 2019-05-28 10:30:31 +08:00
面试官是期望你需求分析吧?
|
45
lihongjie0209 2019-05-28 10:48:45 +08:00
所有的技术问题都会回到需求分析上.
|
46
FelixLiu 2019-05-28 11:02:17 +08:00
我觉得我听过这个问题会很迷茫。这 10w 条数据是什么数据?数、字符串 or 对象?数据类型不同,可能就会产生不同的处理方法,我觉得你应该搞清具体需求是什么。
|
47
icaca 2019-05-28 11:19:35 +08:00
可能是面试官所遇到的问题,可以入职之后帮他解决此问题。
|
48
wclssdn 2019-05-28 11:19:59 +08:00
不说业务场景,单接口返回 10w 条数据是傻 x 么。。。
如果真要返回: 那 10w 条是怎么产生的?如果要回答这个问题,那就要看业务场景,数据时效性如何。是否适合缓存,能否用 cdn。 如果一定要用 http 接口,则需要自行设计内容格式,每行独立编码,可流式解码。如果用 linux,一定要用系统态发文件。应用层要支持 range、gzip。 性能角度,单次接口耗时多久?单服务器 qps 能到多少,业务 qps 峰值多少?如果多台服务器提供服务,是否对不同用户需要提供不同的 10w 行记录(不同时间方案的 10w 行数据是有差异的)。这又可以做共享缓存方面的优化。 任何抛开业务场景谈架构的都是傻 x。。。 如果面我这个问题,我可以答,但我听不到实际的应用场景,我不会去这家公司(为了面试出傻 x 问题的人是傻 x ) |
49
realpg 2019-05-28 11:39:20 +08:00
以我现在手头的项目而论 如果一次返回 10W 条数据,最好的办法就是拿着硬盘去机房拷回来
如果对方不愿意给更多限定 那你就列出一系列不同场景的解决方案 以示自己的阅历并让只在脑袋里出一种他们经历过情况的出题的人一脸懵逼 |
50
Vendettar 2019-06-01 13:22:42 +08:00
写到文件里面传输吧
|