面试题: 8G 内存, 100G 文件

2019-04-17 16:02:20 +08:00
 liujianwei
今天去面试,面试的人问了一道题:8G 的内存,有个 100G 的文件(文本文件,每一行都是一个独立的字符串),如何读取文件里的内容,并按行字符串排序,然后将排序后的结果保存到另一个文件里?

没答上来……这里涉及计算机的那个范畴的知识?
9071 次点击
所在节点    程序员
38 条回复
winglight2016
2019-04-17 17:54:34 +08:00
@dl2k 没那么复杂呀,每行只读取第一个字符就好,真的有两行前 4G 内容都一样,也有虚拟内存帮忙啦
814084764
2019-04-17 18:18:46 +08:00
sleep 排序
gamexg
2019-04-17 19:14:00 +08:00
忘了名了,
分开排序在合并就行。
yangxin0
2019-04-17 19:19:35 +08:00
先读 N 行, 保证内存 8G 以内, 然后排序, 然后写入文件. 以此类推, 最后归并排序
jmc891205
2019-04-17 19:23:32 +08:00
最近刚好做了这样的项目
你可以先把 100g 文件分割成 13 个有序的 fragment files
然后把每个文件的第一条数据读进内存 建一个最小堆
每次把堆顶出堆写到输出文件里 再把它对应的下一条数据入堆
如此循环直到堆变空 最后的输出文件就是排好序的 100g 文件了

楼上有些朋友提到了这个方法 我稍微多写了一些细节
手机打字 如有错别字多多包涵
zhuziyi
2019-04-17 19:28:10 +08:00
经济不好的时候就开始讨论算法了。
icyalala
2019-04-17 19:36:28 +08:00
直接 mmap 然后。。
hisenyuan
2019-04-17 19:51:49 +08:00
归并排序了解一下。
PandaRun
2019-04-17 20:27:00 +08:00
可以转字符集排序吗
xdlucky
2019-04-17 20:30:49 +08:00
虚拟内存+1,这属于 x86 的基础知识...
fsafdasfsdafsd
2019-04-17 21:09:07 +08:00
多路归并
mingl0280
2019-04-18 02:28:26 +08:00
暴力一点,直接按 2-3G 拆一个文件,排序子文件,然后子文件有序以后归并到 100G。
LokiSharp
2019-04-18 08:03:07 +08:00
硬盘上写个文件当缓存就行了
luozic
2019-04-18 09:15:00 +08:00
數據庫的各種算法都支持這麽玩。
fengmenggaokao
2019-04-18 10:27:45 +08:00
specita
2019-04-18 11:07:10 +08:00
我当年毕业找工作面某公司就被问到过这个问题
liaokaime
2019-04-18 12:49:08 +08:00
给您买 100G 内存可以让我入职吗?
qsbaq
2019-04-18 14:17:22 +08:00
感觉 linux 命令行可以搞定。

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

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

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

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

© 2021 V2EX