百度面试

转载:网址---http://blog.csdn.net/forlong401/article/details/8204138

1、介绍一下项目。


  2、提了一个问题:上千万条记录,统计出重复记录最多的前N条。

  3、一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?

  4、多个线程访问共享内存时因该怎么办?

  5、在写程序遇到问题的时候,通常采用什么调试方法?

  6、一个client/server的协议问题

  7、剩下就是随便聊聊,比如有缺点、期望工作的性质、职业规划等

百度电话面试题目:

  1.谈谈你对数据库中索引的理解

  2.现在普通关系数据库用得数据结构是什么类型的数据结构

  3.索引的优点和缺点

  4.session和cache的区别是什么

  5.如果有几千个session,怎么提高效率

  6.session是存储在什么地方,以什么形式存储的。

给定二叉树前序序列:"EDBA**C***HF*G***" 。
构建此二叉树(非递归),
并后序输出二叉树(非递归)...。


百度面试题:从输入url到显示网页,后台发生了什么?

2010-09-11 10:31

当在浏览器中输入一个 url 后回车,后台发生了什么?比如输入 http://hi.baidu.com/mianshiti 后,你看到了IT面试题的博客首页,那么这一切是如何发生的呢?

 

简单来说有以下步骤:

1. 查找域名对应的IP地址。这一步会依次查找浏览器缓存,系统缓存,路由器缓存,ISP DNS缓存,根域名服务器。

2. 向IP对应的服务器发送请求。

3. 服务器响应请求,发回网页内容。

4. 浏览器解析网页内容。

当然,由于网页可能有重定向,或者嵌入了图片,AJAX,其它子网页等等,这4个步骤可能反复进行多次才能将最终页面展示给用户。

 

百度面试题:三个警察和三个囚徒的过河问题

2010-04-03 21:30

三个警察和三个囚徒共同旅行。一条河挡住了去路,河边有一条船,但是每次只能载2人。存在如下的危险:无论在河的哪边,当囚徒人数多于警察的人数时,将有警察被囚徒杀死。

问题:请问如何确定渡河方案,才能保证6人安全无损的过河。

 

警察囚徒过去,警察回来

囚徒囚徒过去,囚徒回来

警察警察过去,警察囚徒回来

警察警察过去,囚徒回来

囚徒囚徒过去,囚徒回来

囚徒囚徒过去

 

百度面试题:设计DNS服务器中cache的数据结构

2010-03-25 21:30

要求设计一个DNS的Cache结构,要求能够满足每秒5000以上的查询,满足IP数据的快速插入,查询的速度要快。(题目还给出了一系列的数据,比如:站点数总共为5000万,IP地址有1000万,等等)

 

DNS服务器实现域名到IP地址的转换。

 

每个域名的平均长度为25个字节(估计值),每个IP为4个字节,所以Cache的每个条目需要大概30个字节。

总共50M个条目,所以需要1.5G个字节的空间。可以放置在内存中。(考虑到每秒5000次操作的限制,也只能放在内存中。)

 

可以考虑的数据结构包括hash_map,字典树,红黑树等等。

我觉得比较好的解决方法是,将每一个URL字符串转化为MD5值,作为key,建立最大或最小堆,这样插入和查找的效率都是O(log(n))。

MD5是128bit的大整数也就是16byte,比直接存放URL要节省的多。

 

百度面试题:将多个集合合并成没有交集的集合

2010-03-20 18:25

给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}。

(1)请描述你解决这个问题的思路;

(2)请给出主要的处理流程,算法,以及算法的复杂度

(3)请描述可能的改进。

 

集合使用hash_set来表示,这样合并时间复杂度比较低。

 

1. 给每个集合编号为0,1,2,3...

2. 创建一个hash_map,key为字符串,value为一个链表,链表节点为字符串所在集合的编号。遍历所有的集合,将字符串和对应的集合编号插入到hash_map中去。

3. 创建一个长度等于集合个数的int数组,表示集合间的合并关系。例如,下标为5的元素值为3,表示将下标为5的集合合并到下标为3的集合中去。

开始时将所有值都初始化为-1,表示集合间没有互相合并。

在集合合并的过程中,我们将所有的字符串都合并到编号较小的集合中去。

遍历第二步中生成的hash_map,对于每个value中的链表,首先找到最小的集合编号(有些集合已经被合并过,需要顺着合并关系数组找到合并后的集合编号),然后将链表中所有编号的集合都合并到编号最小的集合中(通过更改合并关系数组)。

4.现在合并关系数组中值为-1的集合即为最终的集合,它的元素来源于所有直接或间接指向它的集合。

题目中的例子:

0: {aaa bbb ccc}

1: {bbb ddd}

2: {eee fff}

3: {ggg}

4: {ddd hhh}

生成的hash_map,和处理完每个值后的合并关系数组分别为

aaa: 0。[-1, -1, -1, -1, -1]

bbb: 0, 1。[-1, 0, -1, -1, -1]

ccc: 0。[-1, 0, -1, -1, -1]

ddd: 1, 4。[-1, 0, -1, -1, 0]

eee: 2。[-1, 0, -1, -1, 0]

fff: 2。[-1, 0, -1, -1, 0]

ggg: 3。[-1, 0, -1, -1, 0]

hhh: 4。[-1, 0, -1, -1, 0]

所以合并完后有三个集合,第0,1,4个集合合并到了一起,

第2,3个集合没有进行合并。

 

算法的复杂度为O(n),其中n为所有集合中的元素个数。

哈希表加并差集,先用哈希把字符串转成整数,转换的时候就用并差集来操作求集合的并,建立哈希O(n) 哈希查询O(1) 并差集复杂度不好估计,大概为a*O(1)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值