30 家 IT 名企历年笔试面试题集合,( 1 月 9 日更新)

2015-01-09 10:41:39 +08:00
 nowcoder

先送上30家IT名企历年笔试面试题集合,请转发分享给身边的码农吧。
http://weibo.com/2165760972/BEpE59YSp

我们做了一个专门面向IT互联网行业程序员的求职笔试面试备考的题库网站
牛客网 http://www.nowcoder.com?from=v2ex
本月我们会在论坛持续发贴,每天放出1-3道题目,欢迎大家跟帖解答,最先正确解答出来的朋友将会获得话费充值、笔记本等礼物。获奖的朋友名单会在第二天公布。

今日题目,来自百度

注意:请尽可能详细描述你的数据结构、系统架构、设计思路等。建议多写一些伪代码或者流程说明。 
1. 假设一个 mp3 搜索引擎收录了 2^24 首歌曲,并记录了可收听这些歌曲的 2^30 条 URL,
但每首歌的 URL 不超过 2^10 个。系统会定期检查这些 URL,如果一个 URL 不可用则不出现
在搜索结果中。现在歌曲名和 URL 分别通过整型的 SONG_ID 和 URL_ID 唯一确定。对该系统
有如下需求:
1) 通过 SONG_ID 搜索一首歌的 URL_ID,给出 URL_ID 计数和列表
2) 给定一个 SONG_ID,为其添加一个新的 URL_ID 
3) 添加一个新的 SONG_ID 
4) 给定一个 URL_ID,将其置为不可用
限制条件:内存占用不超过 1G,单个文件大小不超过 2G,一个目录下的文件数不超过 128 个。
为获得最佳性能,请说明设计的数据结构、搜索算法,以及资源消耗。如果系统数据量扩大,该如何
多机分布处理

这个题目是我们挑战活动的百元难题之一,在牛客网的回答被采纳为系统推荐就可获得100奖金
来自http://www.nowcoder.com/questionTerminal/d3516831b19c4c608704280d31c4785d?from=v2ex
更多难题现金求解
http://www.nowcoder.com/activity/challenge?from=v2ex

4063 次点击
所在节点    程序员
11 条回复
xcv58
2015-01-09 11:13:34 +08:00
这种读多写少的很适合 mongodb ,但百度的题目 就不答了。
december
2015-01-09 11:47:49 +08:00
既然都允许使用社交账号登陆了。干嘛还非得让用户再填写邮箱呢。
egrcc
2015-01-09 11:52:25 +08:00
您这是。。天天发呀
broadliyn
2015-01-09 13:36:09 +08:00
@egrcc 明显就是广告帖,建议@Livid删除
Livid
2015-01-09 13:46:33 +08:00
@broadliyn 如果你不想再看到,可以 Block 这个账号。
sleeperqp
2015-01-09 16:01:09 +08:00
//内存
//SONG的主要数据结构
struct SONG_NODE{
int song_id;
list<int>buffer; //缓存为8个URL_ID;
string file;
}
//这里假设失效URL较少(╭(╯^╰)╮ 不然大部分失效了你还搜什么)
//根据URL_ID即可该URL知道是否失效
map<int,bool>IsNotaURL


//文件为SONG的URL列表
//SONG的URL列表
//这个比较多变
SONG_ID:{URL_ID,...URL_ID}
//或者使用一些压缩编码比如VB编码等。



2) 给定一个 SONG_ID,为其添加一个新的 URL_ID
根据SONG_ID往其buffer中添加URL_ID
若buffer已满 则先将buffer与SONG的URL列表文件进行合并。
否则添加URL_ID进buffer
3) 添加一个新的 SONG_ID
new SONG_NODE,初始化一下。
4) 给定一个 URL_ID,将其置为不可用
在IsURL中设置即可,IsNotaURL(URL_ID) = true;
1) 通过 SONG_ID 搜索一首歌的 URL_ID,给出 URL_ID 计数和列表
给定URL_ID,读入URL的URL列表,并结合buffer与IsNotaURL输出URL列表,统计URL_ID计数即可

细节问题:
1.题目要求为1G内存,所以buffer大致能用2^30/2^24=2^6 除去一些别的大概能给2^5即8个URL_ID
2.buffer与SONG合并: 首先是通过SONG_ID的查找SONG的URL列表问题:通过SONG_ID映射比如SONG_ID%128找到SONG所在文件 然后读取信息,合并,在文件中定位写回。
其次使用压缩编码进行节省空间,VB编码等都可以。这样就不会超过单文件2G的要求了。(只要不把URL_ID都写入一个文件基本就不会超过这个限制)
3.定时更新:定时将列表,buffer,IsNotaURL合并更新。
数据量增大:
一个方法是:通过SONG_ID(这里可能使用long long类型),通过SONG_ID的映射关系(如mod128)将SONG_ID处理对应到相关的机器上。
PS:这里数据量增大应该是可以加大内存了,╭(╯^╰)╮终于可以加大buffer。
zhangchioulin
2015-01-09 17:16:17 +08:00
@sleeperqp 看不懂您的回答(哭)看来我离磨练还太少。。。
cho
2015-01-09 18:13:54 +08:00
@Livid 哪样的被定义为过度广告 会被删除啊?
Livid
2015-01-09 18:45:36 +08:00
@cho 和 V2EX 社区的讨论主题离得太远,同时又在一天内发布 N 条的内容。
sleeperqp
2015-01-09 22:19:06 +08:00
@zhangchioulin 别= = 应该是我没写好吧- -
mingyun
2015-01-11 16:13:33 +08:00
面试能真正用上吗

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

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

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

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

© 2021 V2EX