面试题第一季

来源:互联网 发布:office mac 迅雷下载 编辑:程序博客网 时间:2024/04/28 08:51

第一辑:

1.十月百度:一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了遍历整个数组,是否有更好的办法)?(要么预先排序,二分查找。要么哈希。hash的话,坐标(x,y)你可以当做一个2位数,写一个哈希函数,把(x,y)直接转成“(x,y)”作为key,默认用string比较。或如Edward Lee所说,将坐标(x, y)作为 Hash 中的 key。例如(m, n),通过 (m,n) 和 (n, m) 两次查找看是否在 HashMap 中。也可以在保存时就规定 (x, y) , x < y ,在插入之前做个判断。)

2.百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。(编程珠玑上有此类似的一题,如果有足够的内存的话可以用位图法,即开一个1亿位的bitset,内存为100m/8== 12.5m, 然后如果一个数有出现,对应的bitset上标记为1,最后统计bitset上为0的即可。)

3.Alibaba笔试题:给定一段产品的英文描述,包含M个英文字母,每个英文单词以空格分隔,无其他标点符号;再给定N个英文单词关键字,请说明思路并编程实现方法
String extractSummary(String description,String[] key words)
目标是找出此产品描述中包含N个关键字(每个关键词至少出现一次)的长度最短的子串,作为产品简介输出。(不限编程语言)20分。(扫描过程始终保持一个[left,right]的range,初始化确保[left,right]的range里包含所有关键字则停止。然后每次迭代:
1,试图右移动left,停止条件为再移动将导致无法包含所有关键字。
2,比较当前range's length和best length,更新最优值。
3,右移right,停止条件为使任意一个关键字的计数+1。
4,重复迭代。
编程之美有最短摘要生成的问题,与此问题类似,读者可作参考。)

4.搜狗:有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度(参考:第五章、寻找满足条件的两个或多个数)。

5.迅雷:给你10台机器,每个机器2个cpu,2g内存,现在已知在10亿条记录的数据库里执行一次查询需要5秒,问用什么方法能让90%的查询能在100毫秒以内返回结果。(@geochway:将10亿条记录排序,然后分到10个机器中,分的时候是一个记录一个记录的轮流分,确保每个机器记录大小分布差不多,每一次查询时,同时提交给10台机器,同时查询,因为记录已排序,可以采用二分法查询。如果无法排序,只能顺序查询,那就要看记录本身的概率分布,否则不可能实现。一个机器2个CPU未必能起到作用,要看这两个CPU能否并行存取内存,取决于系统架构。)

6.给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

7.腾讯:五笔的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把五笔的编码按字典序排序,形成一个数组如下:
    a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy
其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。
1)编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index;
2)编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。

8.2011.10.09百度笔试题(下述第8-12题):linux/unix远程登陆都用到了ssh服务,当网络出现错误时服务会中断,linux/unix端的程序会停止。为什么会这样?说下ssh的原理,解释中断的原理。

9.一个最小堆,也是完全二叉树,用按层遍历数组表示。
  1.  求节点a[n]的子节点的访问方式
  2.  插入一节点的程序void add_element(int *a,int size,int val);
  3.  删除最小节点的程序。

10.a)求一个全排列函数:如p([1,2,3]) ,输出:  [123],[132],[213],[231],[321],[323]。
b)求一个组合函数:    如p([1,2,3]) ,输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]。
这两问可以用伪代码。

11.略去

12.有这样一种编码:如,N=134,M=f(N)=143,N=020,M=fun(N)=101,其中N和M的位数一样,N,M可以均可以以0开头,N,M的各位数之和要相等,即1+3+4=1+4+3,且M是大于N中最小的一个,现在求这样的序列S,N为一个定值,其中S(0)=N,S(1)=fun(N),S(2)=fun(S(1))。

13.有1000万条URL,每条URL 50字节,只包含主机前缀,要求实现URL提示系统:
(1)要求实时更新匹配用户输入的地址,每输出一个字符,输出最新匹配URL
(2)每次只匹配主机前缀,例如对 www.abaidu.com和www.baidu.com,用户输入www.b时只提示www.baidu.com
(3)每次提供10条匹配的URL
(4)以用户需求为主。

14.海量记录,记录形式如下: TERMID URLNOCOUNT urlno1 urlno2   ..., urlnon 怎么考虑资源和时间这两个因素,实现快速查询任意两个记录的交集,并集等,设计相关的数据结构和算法。

15.百度最新笔试题(感谢xiongyangwan提供的题目):利用互斥量和条件变量设计一个消息队列,具有以下功能:
   1 创建消息队列(消息中所含的元素)
   2 消息队列中插入消息
   3 取出一个消息(阻塞方式)
   4 取出第一消息(非阻塞方式)

16.百度移动终端研发笔试:系统设计题(40分)
对已排好序的数组A,一般来说可用二分查找可以很快找到。现有一特殊数组A[],它是循环递增的,如A[]={ 17 19 20 25 1 4 7 9},试在这样的数组中找一元素x,看看是否存在。
请写出你的算法,必要时可写伪代码,并分析其空间、时间复杂度。

17.
#include<stdio.h>
#include <string.h>
void main()
{
 int a[2000];
 char *p = (char *)a;
 int i ;
 for( i = 0; i < 2000; i++)
  a[i] = -i -1;
 printf("%d\n", strlen(p));
}
写出输出结果
(onlyice:i = FFFFFF00H 的时候,才有'\0'出现,就是最后一个字节,C风格字符串读到'\0'就终止了。FFFFFF00H 是 -256,就是 i 的值为255时a[i] = FFFFFF00H )....

18.腾讯10.09测试笔试题:有N+2个数,N个数出现了偶数次,2个数出现了奇数次(这两个数不相等),问用O(1)的空间复杂度,找出这两个数,不需要知道具体位置,只需要知道这两个值。(@Rojay:xor一次,得到2个奇数次的数之和x。第二步,以x(展开成二进制)中有1的某位(假设第i位为1)作为划分,第二次只xor第i位为1的那些数,得到y。然后x xor y以及y便是那两个数。 )

19.@well:一个整数数组,有n个整数,如何找其中m个数的和等于另外n-m个数的和?

20.阿里云笔试题:一个HTTP服务器处理一次请求需要500毫秒,请问这个服务器如何每秒处理100个请求。
原创粉丝点击