面试遇到问大数据量的问题到底在考什么?这里讨论在程序中并非数据库中,也并不考虑借助数据库或者其他辅助工具。
他是考验你算法?会不会遍历?集合的使用?还是考验计算机内存大小的?我感觉都不是,是在考你思路。前面有人发表了“两个1000W个元素的数组,如何有效的找出他们的交集”,等会我说下思路,对的话大家顶下,谢谢。
先说我以前我也遇到过一道类似的题,4G大小的文件,里面全部是整数,求出最大,最小值。别告诉我拿8G内存的计算机用数组存储,然后遍历,比较。。。如果人家说8G的文件呢?16G的文件呢?当时我第一反应是把4G文件分开,但是后来马上想到的是多线程,最后说出了思路,描述如下:
A,B两个线程
定义两个变量int max,min;
一个int数组,大小任意(决定大小的因素,计算机,语言等因素,这里不详细说了),例如大小10000的数组X
A读取文件写入X,写满A暂停,B启动在数组X种找到最大最小分别赋值给变量max,min
遍历完后清空X,暂停B,然后启动A同样是读取文件,写入数组,之后暂停A,遍历和max,min比较,遍历完最大和最小值分别赋值给变量max和min
重复操作,直到全部读取比较完,结束。
这只是个思路,其中多线程的操作和IO等操作不做详细说明了。
下面来说下前面有人说到的“两个1000W个元素的数组,如何有效的找出他们的交集”,如果内存够大,当然好了,直接操作最好。如果元素的最小值是,1E呢?内存怎么办?如果是几个亿的元素呢?
看题来说,两个数组元素不太可能存在内存中,就假设存在文件一和文件二中吧。
给个简单思路,两个数组的数据存在文件一,文件二
定义A,B,C三个线程
X,Y两个数组,每个大小就拿10000个来说吧(决定大小的因素,计算机,语言等因素,这里不详细说了)
A读文件一写入X数组写满A停止,B读取第二个文件写入Y数组写满B停止,这时候C启动,在X,Y两个数组找出交集,大小10000的两个数组怎么找交集这个大家自由发挥总之取到后写入另外个文件中,就当是文件三吧。
比较完后,清空Y,然后C停止,启动B接着读取写入Y,然后再启动C去重复上面的步骤,直到文件二完全操作完。
文件二操作完成后,再清空X再启动A,再重复上面的步骤,直到文件一全部操作完。
这个时候文件三就是结果了,记得别忘了去除重复元素。如果文件小,很好去除,如果文件依旧很大,那么还是按多线程的思路去解决。
取最大最小值的算法和取交集的算法本人不发表了,本人虽然是个程序员但是非数学,计算机专业,算法不敢和各位大虾去比,当然多线程和IO等其他操作中的问题,各自去解决吧,以上的思路觉得对的大家顶下,觉得不对的尽管提出,有更好思路的还望赐教。
MSN:flysunmicro@hotmail.com
分享到:
相关推荐
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 ...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC...
26、大数据量下的分页解决方法。 121 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 122 28、这段代码有什么不足之处? 123 29、说出数据连接池的工作机制是什么? 123 30、为什么要用 ORM? 和 JDBC...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 ...
26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 ...
会被执行,什么时候被执行,在 return 前还是后? .................................................... 25 39、下面的程序代码输出的结果是多少? ...............................................................
ADO.NET 2.0 大批量数据操作和多个动态的结果集 ADO.NET 2.0 异步处理 在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+...
不仅如此,词霸还可以帮您把生词数据在PC/网站/手机间实现同步,让您随时随地管理自己的生词。 7.全新改版资讯页,带图的每日系列:新版词霸在提供查词服务的同时,还提供精彩的双语阅读内容。包括“每日一句”...
03_课堂答疑_遇到莫名其妙的问题_重新编译 04_函数模板当函数参数 05_普通函数和模板函数区别_传智扫地僧 06_函数模板和函数重载在一起(调用规则研究)_传智扫地僧 07_函数模板机制探究上 08_函数模板机制探究下_传智...