腾讯2面面试官出的3个题

justp6 2008-10-29 10:21:09
加精
(同学去面试的)
1、设计一个魔方(六面)的程序。
2、有一千万条短信,有重复,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。
3、收藏了1万条url,现在给你一条url,如何找出相似的url。(面试官不解释何为相似)
...全文
31440 460 打赏 收藏 转发到动态 举报
写回复
用AI写文章
460 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
4年了啊= = 还木人解出来么?

学习。。。
swordtan 2012-10-19
  • 打赏
  • 举报
回复
mark 一下,这个应该是搜索部门的题目
奔跑的追梦人 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 的回复:]

我觉得作为程序员不光是会用coding来解决问题,并不是所有事情用coding来解决是最快的。
就像楼上说的,可以使用excel,但是excel是有行数限制的,个人觉得第二题其实完全可以导入到数据库中,然后用sql就很容易把结果查出来了。至于说一千万条查询速度很慢的问题,这个完全是可以优化的,这也正好考察了你数据库的知识。关键是看思路,不应该把问题想死了。
第三题找相似的url,什么是相似的……
[/Quote]
5分钟时间解决 导入数据库 用sql查询。。。 再怎么优化也不可能的。。。
几年前的帖子了 估计楼主现在也是大牛了。。。
magicioney 2012-10-11
  • 打赏
  • 举报
回复
第二题,我有个思路,我是菜鸟,瞎想的。

我的思路就是 按位比对,8位二进制只有256种情况先对比前8位粗略筛选。

然后再 比最后8位 ,筛选出前10,再从中间抽8位。数量应该会锐减很多。之后再细选。

这样总比阶乘好些 ……
ni_hao_ma_ok 2012-09-07
  • 打赏
  • 举报
回复
不是招普通人吧?
cloud_of_earth 2012-09-07
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 的回复:]
我觉得作为程序员不光是会用coding来解决问题,并不是所有事情用coding来解决是最快的。
就像楼上说的,可以使用excel,但是excel是有行数限制的,个人觉得第二题其实完全可以导入到数据库中,然后用sql就很容易把结果查出来了。至于说一千万条查询速度很慢的问题,这个完全是可以优化的,这也正好考察了你数据库的知识。关键是看思路,不应该把问题想死了。
第三题找相似的url,什么是相似的既……
[/Quote]
首先,将文本导入到数据库,再利用select语句某些方法得出前10条短信,但是实际上用数据库是绝对满足不了5分钟解决这个条件的,这是因为1千万条短信即使1秒种录入1万条(这已经是非常快的录入速度了),五分钟也只能录入300万条。即使真的5分钟内录完1千万条,也必须建立索引,不然sql语句5分钟内是肯定得不出结果的,但是对1千万条记录建索引在5分钟内是不可能完成的,所以用数据库根本不能实现。
yaya_lucky 2012-09-05
  • 打赏
  • 举报
回复
mark
icaolei 2012-08-20
  • 打赏
  • 举报
回复
第二题 直接使用Hadoop MapReduce
第三题 可以首先计算url的不相似度,不相似从小到大意味着相似度从大到小
int getLeast(int first, int second, int third) {
int mid = first>second?second:first;
return mid>third?third:mid;
}

int unsimilar(char* res, char* url) {
cout << "res " << res << endl;
cout << "url " << url << endl;
int iter = 0;
if (*res == '\0') {
while (*url != '\0') {
iter++;
url++;
}
return iter;
}
iter = 0;
if (*url == '\0') {
while (*res != '\0') {
iter++;
res++;
}
return iter;
}
if (*res == *url)
return unsimilar(res+1, url+1);
return 1 + getLeast(unsimilar(res+1, url+1), unsimilar(res+1, url), unsimilar(res, url+1));
}
ACM_buguake 2012-07-22
  • 打赏
  • 举报
回复
都是高手,学习受教了
huimiezu 2012-07-12
  • 打赏
  • 举报
回复
第一题:
魔方的一个面看做一个节点:
struct Node{
int col;//颜色
Node left;//相邻左面
Node right;//相邻右面
Node up;//相邻上面
Node down;//相邻下面
bool center;//是否是一个面的中间节点
}
判断一个面是否同色,就找到中间节点,判断它与上下左右面是否同色
每一步操作,无非是在改变与操作方向垂直方向上相邻的面,比如对魔方做水平旋转,只是改变了节点的上下相邻面,左右相邻面不变。
y___myc 2012-05-28
  • 打赏
  • 举报
回复
期待解答~
sheldenwade1 2012-04-03
  • 打赏
  • 举报
回复
第二问的回答,你可晓得,最坏的情况下,你能不能把所有的短信都读到内存里面,红黑树适合吗?
[Quote=引用 47 楼 的回复:]

1,把魔方展开,得到六个正方形,定义六个结构体,内容为一个9个点和一个编号,每个点包括一个颜色标示;
在魔方展开图中根据正方形的相邻关系编号,每个正方形都有四个函数:左翻、右翻、上翻、下翻。
根据相邻关系,每个操作会引起相邻面的相关操作;比如一个面的左翻会调用右边相邻面的左翻;也就
意味着左相邻面的0、1、2三个元素与当前面互换;递归下去,直到所有面都交换完毕;

2,……
[/Quote]
「已注销」 2012-03-26
  • 打赏
  • 举报
回复
知识永远是没有穷尽的哇~~!!!
lovelife12345 2012-03-26
  • 打赏
  • 举报
回复
顶,好
zsl3399 2012-03-17
  • 打赏
  • 举报
回复
不错的考题。哈哈哈
peacentury 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 yangzhongwei1031 的回复:]

我觉得作为程序员不光是会用coding来解决问题,并不是所有事情用coding来解决是最快的。
就像楼上说的,可以使用excel,但是excel是有行数限制的,个人觉得第二题其实完全可以导入到数据库中,然后用sql就很容易把结果查出来了。至于说一千万条查询速度很慢的问题,这个完全是可以优化的,这也正好考察了你数据库的知识。关键是看思路,不应该把问题想死了。
第三题找相似的url,什么是相似的……
[/Quote]
学习了!
拿枪的大盖伦 2012-03-09
  • 打赏
  • 举报
回复
感觉用stl还可能解决吧
duanyao001 2012-02-28
  • 打赏
  • 举报
回复
不会啊
Bera枫 2012-02-28
  • 打赏
  • 举报
回复
MARK!
mymtom 2012-01-24
  • 打赏
  • 举报
回复
第二题有没有可能不用数据库啊?
加载更多回复(440)

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧