开发者社区> 问答> 正文

一道经典面试题:报错

要求完成文件读取,过滤,列印操作。
有一大小为1GB的源文件mail.log中记录以下格式的数据,将其中信箱为@sina.com的地址筛选出来。
要求程序占用的内存不能超过512MB,代码尽可能高效,在最短时间完成运算。
实际代码或伪代码或者写明思路都可以
July@sina.com.cn
Cross@hotmial.com
dana@gmail.com
mike@sina.com
jones@163.com

展开
收起
kun坤 2020-06-07 22:32:46 400 0
1 条回答
写回答
取消 提交回答
  • 直接用命令行不?:)

    grep "sina.com$" mail.log

    ######

    看清楚 1G容量大小。

    ######

    BufferedReader bf=xxxx;

    while ((line = bf.readLine()) != null){
         //直接处理一行的内容line,也可以一次读取100行或1000行再处理
       }

    这样行不?

    ######

    问题是打开的时候本身就会很慢...

    ######

    先做文件切割,切小点,文件多点

    然后分段读如内存

    摘出符合条件的存入新文件

    新文件中排序,剔除重复的

    -------------------------

    是这个思路么?

    ######

    引用来自#6楼“Aeolus”的帖子

    先做文件切割,切小点,文件多点

    然后分段读如内存

    摘出符合条件的存入新文件

    新文件中排序,剔除重复的

    -------------------------

    是这个思路么?

    文件切割过程不占用内存?

    ######

    至少要分两次读取,最好分3~4次为好。。。

    ######

    引用来自#5楼“苏元元”的帖子

    问题是打开的时候本身就会很慢...

     打开不会很慢,fopen操作,打开1K的文件和打开16G的文件,速度几乎没有差别。

    ######

    MappedByteBuffer 分段读取 ,一次100M。

    ######

    引用来自#10楼“穿衣服比较麻烦”的帖子

    MappedByteBuffer 分段读取 ,一次100M。

    正解

    2020-06-07 22:32:51
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云技术面试红宝书 立即下载
超全算法笔试-模拟题精解合集 立即下载
程序员面试宝典 立即下载

相关实验场景

更多