社区
Java SE
帖子详情
一道笔试题(欢迎大家讨论)
liuxuejin
2010-10-27 12:21:24
题目:假如有一个1TB大小的文件,每行的格式如下(用Java实现):
323828328,李武,男,广州市323232332,小四,女,三藩市.....
(1)请编写一个程序(假设名字是不重复的),得到一个索引文件,并且要保证这个索引文件尽量小,可以提上搜索的效率,前提是内存只有1G的大小。
(2)请利用你的所得到的索引的文件,根据名字(假设名字是不重复的)搜索出该名字所对应的信息
大家讨论一下,希望高手能贴出代码,光懂皮毛随便说说的就算了!
...全文
451
28
打赏
收藏
一道笔试题(欢迎大家讨论)
题目:假如有一个1TB大小的文件,每行的格式如下(用Java实现): 323828328,李武,男,广州市323232332,小四,女,三藩市..... (1)请编写一个程序(假设名字是不重复的),得到一个索引文件,并且要保证这个索引文件尽量小,可以提上搜索的效率,前提是内存只有1G的大小。 (2)请利用你的所得到的索引的文件,根据名字(假设名字是不重复的)搜索出该名字所对应的信息 大家讨论一下,希望高手能贴出代码,光懂皮毛随便说说的就算了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zqfddqr
2010-10-28
打赏
举报
回复
1TB....................................
liuxuejin
2010-10-28
打赏
举报
回复
[Quote=引用 20 楼 clariones 的回复:]
这不过是个体力活,lz好好在网上找找就能看到很多成熟的算法。 为啥要人贴代码呢?
贴代码拷贝下来,你就懂了么? 还是看算法,自己写代码比较好
[/Quote]真的找不到代码!如果能找到的话我就找到了!已经研究了好几天了。
liuxuejin
2010-10-28
打赏
举报
回复
[Quote=引用 19 楼 zbo 的回复:]
大家讨论一下,希望高手能贴出代码,光懂皮毛随便说说的就算了!
===============================
虽然我是个菜鸟,我一样鄙视你。
什么态度?能给你个思路的就不错了。
即使你再傲慢,发帖求人时也该谦虚点吧?
[/Quote]这不是求助,这是技术讨论!你去je上乱说一下,可以封你ID,我们要的是质量回复,乱回复不经大脑的那些就免回了。
Fiok
2010-10-28
打赏
举报
回复
用空间换时间吧
nbmvcd
2010-10-27
打赏
举报
回复
[Quote=引用 1 楼 cenhuineng 的回复:]
给定的内存大小和程序有关系吗?
[/Quote]
跟搜索速度有关系……
liuxuejin
2010-10-27
打赏
举报
回复
是的!内存就是一般的机子!算256M吧!
wnx_u
2010-10-27
打赏
举报
回复
只能创建一个索引文件吗,数据文件有没有排过序
qingtianliuyun
2010-10-27
打赏
举报
回复
[Quote=引用楼主 liuxuejin 的回复:]
大家讨论一下,希望高手能贴出代码,光懂皮毛随便说说的就算了!
[/Quote]
看来我只能打酱油路过!
凉岑玉
2010-10-27
打赏
举报
回复
给定的内存大小和程序有关系吗?
btpka3
2010-10-27
打赏
举报
回复
哈哈,不懂,但偶也要厚着脸皮瞎扯扯:
1TB = 1024^4 字节
你给出的记录格式大约每条记录在 26 个字节左右
所以 大概 有 1024^4 / 26 = 422 8890 8761 条记录(百亿条记录了呢)。
想了个烂方法:
建立索引文件的时候,使用某个索引空间较小的hash算法,比如 32位(4个字节),如果太大(比如128位,就截取前4个字节)
假设使用的hash算法的冲突几率是5%(100个不同的字符串,可能有5个放在同一个索引下)
每个索引下至少得留 (1024/26)*(1+5%)= 41 条记录的空间,假设定为64
则,索引文件的大小为 longlong的字节数 * 2^32*64 = 1T 呢
每次查找记录都,先计算出32为的hash值,并将该值转换为无符号整数n(0 ~ 2^32-1),
然后到索引文件中 64*n 处,读取64条记录的偏移量(内存中只保存64条记录的偏移量),
再然后到数据文件中读取64次,至多第64次查询到需要的数据。
误人莫怪啦,瞎扯淡滴
涅槃
2010-10-27
打赏
举报
回复
看来我也只能打酱油路过!
chho123
2010-10-27
打赏
举报
回复
旁观中……
贪睡的兔子
2010-10-27
打赏
举报
回复
名字转化为Unicode码-转化为,建立两棵二叉树,一棵插入名字Unicode,排序,另一棵根据前面那棵树插入1,2,3,...
收索时转化为Unicode,检索二叉树,找到该名字,对应另一棵二叉树,得到该名字位置
进入文件 ,得到该信息
clariones
2010-10-27
打赏
举报
回复
这不过是个体力活,lz好好在网上找找就能看到很多成熟的算法。 为啥要人贴代码呢?
贴代码拷贝下来,你就懂了么? 还是看算法,自己写代码比较好
zbo
2010-10-27
打赏
举报
回复
大家讨论一下,希望高手能贴出代码,光懂皮毛随便说说的就算了!
===============================
虽然我是个菜鸟,我一样鄙视你。
什么态度?能给你个思路的就不错了。
即使你再傲慢,发帖求人时也该谦虚点吧?
Miracle1216
2010-10-27
打赏
举报
回复
[Quote=引用 16 楼 wnx_u 的回复:]
创建复合文档
创建一个段
对数据文件分块
将每块的磁道信息写入该段
创建一个段
写入复合索引结构体信息
对数据文件各块排序
写入对每一块排序后的索引并与第一段关连
创建一个段
保存主键在第二段的分段索引信息和游标信息
创建一个段
创建一个HASH表,写入该段
对第三个段中的索引进行分段索引
搜索条信息
计算该条信息的主键的HASH值
找出该主键所在的索引段
……
[/Quote]
牛逼啊。。。操作系统?
thegodofwar
2010-10-27
打赏
举报
回复
什么建索引呀,效率呀
接触少呀...
wnx_u
2010-10-27
打赏
举报
回复
创建复合文档
创建一个段
对数据文件分块
将每块的磁道信息写入该段
创建一个段
写入复合索引结构体信息
对数据文件各块排序
写入对每一块排序后的索引并与第一段关连
创建一个段
保存主键在第二段的分段索引信息和游标信息
创建一个段
创建一个HASH表,写入该段
对第三个段中的索引进行分段索引
搜索条信息
计算该条信息的主键的HASH值
找出该主键所在的索引段
在所在索引段中查询出所对应的数据块
根据该数据块的查询所对应的磁道信息
在对应的磁道中读取数据
本人是做C的,JAVA做的不多,怎样用JAVA操作磁盘还真不知道
liuxuejin
2010-10-27
打赏
举报
回复
这道笔试题已经存在很久,网上也没有解决方法。我也正在研究!我不是学算法的,但是我很感兴趣!
chenmingbo_2010
2010-10-27
打赏
举报
回复
同求解。
加载更多回复(8)
菜鸟的自我修炼——阿里巴巴
一道
笔试题
浅谈
回到正题,今天写下我的第一篇博客,
讨论
的是阿里巴巴之前的
一道
笔试题
, 斗胆拿出来和大家探讨一下,大神看到了请移步啊 大神:卧槽,这么简单的问题你也敢拿来怼文章? 菜鸟:呃……,好吧????,不是我不想怼...
一道
js
笔试题
, 刷新了我对map方法函数的认知,你做对了吗?
文章目录背景猜想1猜想2...昨天在看
一道
笔试题
的时候本以为很简单,但是结果不是我想象的那样,直接上
笔试题
。 const array = new Array(5).map((item) => { return item = { name: '1' } }); console.log(array)
记录--
一道
js
笔试题
, 刷新了我对map方法函数的认知
昨天在看
一道
笔试题
的时候本以为很简单,但是结果不是我想象的那样,直接上
笔试题
。 const array = new Array(5).map((item) => { return item = { name: '1' } }); console.log(array); // 请写出输出结果 ...
笔试题
之地区经济数据分析
分享
一道
笔试题
,TO G企业数据分析岗位可以参考,下面提供我个人的思路和输出结果,
欢迎
大家从不同的角度思考
讨论
。
Hive 热门数据分析
笔试题
(干货满满,持续更新中...)
这篇博文通过五道经典的大厂数据分析
笔试题
,尽可能的让大家能更熟悉hive 窗口函数、自连接、行转列、列转行、TopN。
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章