这是是一个大文件处理,面试官出题的意图并不希望你两层for循环进行遍历,这种答案肯定是不会要的!

这道题目的解法思路是:

  1. 顺序读取两个文件的的全部记录
  2. 将每条记录经过hash->转换为10进制->%n后存到10个文件中,这样一共2G的数据分成10份,每份就是204.8M,低于内存限制
  3. 我可以一次读取一个文件,并用hash桶的方式得到单个文件中的内容是否有重复,因为每条记录都经过hash处理的,所以相同的记录肯定会在同一个文件中。
/**
* 将两个文件中的每条记录通过hash求余后分别存入10个文件中
* 如果某个文件太大,超过限制内存大小,则可以对其再次hash求余
*/
$handler = fopen('file_a_AND_file_b', 'r'); while ($line = fgetc($handler)) {
$save_to_file_name = crc32(hash('md5', $line)) % 10;
file_put_contents($save_to_file_name, $line);
} /**
*
*/
$files = [ '10个文件的路径' ];
foreach ($files as $file) {
$handler = fopen($file, 'r');
$tmp_arr = [];
while($line = fgetc($handler)) {
if(isset($tmp_arr[$line])) {
file_put_contents('common_content.txt', $line);
} else {
$tmp_arr[$line] = true;
}
} }

最新文章

  1. ENode框架Conference案例分析系列之 - 文章索引
  2. 题目:求1+2+…+n,
  3. 不等高cell的tableView界面搭建
  4. javascript实现数据结构:串--堆分配存储表示
  5. YASKAWA电机控制(2)---调试
  6. 基于Linux系统的病毒
  7. poj 3478 The Stable Marriage Problem 稳定婚姻问题
  8. C++编程规范之19:总是初始化变量
  9. LeetCode Day3
  10. iOS面试题04-runtime
  11. json文件问题
  12. 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行使用方法
  13. Extjs grid 组件
  14. 新手数据比赛中数据处理方法小结(python)
  15. 【转】如何解决plsql查询oracle数据库语句where条件带有中文无法匹配结果
  16. Android 深入理解Loader机制 让APP轻装上阵
  17. MySQL的basedir
  18. GCN code parsing
  19. 前端通信:ajax设计方案(五)--- 集成promise规范,更优雅的书写代码(改迭代已作废,移步迭代10)
  20. Natural Language Processing 课程,文章,论文

热门文章

  1. 华硕(ASUS)X554LP笔记本重装win7后网卡和USB驱动问题的解决
  2. MSSQLSERVER_3176
  3. Angular——单页面与路由的使用
  4. sublime text3 =个人插件
  5. Springboot + SLF4j + Log4j2 打印异常日志时,耗时要5-6秒
  6. GetArxPath
  7. 更新dell机器的idrac的固件版本后重启机器系统失败
  8. 浅谈:nodejs在cmd提示不是内部或外部命令
  9. 【转载】Appium环境搭建(Windows版)
  10. led1,1s取反,led2计数10次取反