今天在某家电商面试,被问到:下载一个耗时文件时,如何提升用户体验度?

  我首先想到的是提升下载速度,尽快满足用户的需求。此处的下载速度不是指网速带宽之类的,而是数据获取数据处理的速度。数据获取方面创建合适的索引、使用高效的SQL、甚至可以将数据存储至redis中。数据处理方面使用多线程分片(callable/future)

  我甚至想到了当内存不够时,为避免因一次性加载过多数据导致OOM,提供两个解决方案:

  • 文件分开下载
  • 首先保存为 csv 文件,最后转换为 excel

  怎料对方继续追问,假设数据获取、数据处理不需要操心,内存也足够大,如何提升用户体验度?我思考了片刻之后,表示不知道。

  对方继续提问,直到我该我提问的时候,我问了上述文件下载问题。他说可以在用户第一次点击下载的时候,页面给用户一个链接,并提示稍后(下次)直接通过访问链接进行下载(可以设置有效期),而服务器就可以在这段时间内处理好所有的数据。也就是说,第一次“下载”其实是一个预订操作。真正的数据在预订之后开始生成,最后等着用户提货即可。

  等他说完,我已经目瞪口呆,居然还有这种操作。对方告诉我:互联网无奇不有。