百度测试面试题整理
1. 解释一下JAVA的面向对象和C的面向过程的区别
面向过程的语言管理起来比较麻烦,一条代码地执行,而面向对象代码可以进行重用
2. 什么是树 ,什么是二叉树,什么是平衡树
3. K层楼,两个玻璃板,最少多少次能测出在哪儿层楼杯子会碎…
既然第一步(确定临界段)的投掷数增加不可避免,我们就让第二步(确定临界层)的投掷数随着第一步的次数增加而减少。第一步的投掷数是一次一次增加的,那就让第二步的投掷数一次一次减少。假设第一次投掷的层数是f,转化成数学模型,就是要求f+(f-1)+...+2+1>=99,即f(f+1)/2>=99(第一次测试点选择100层是无意义的,必然会碎,所以无任何测试价值,所以第一次测试点k是1-99中的一个数),解出结果等于14。丢下第一个玻璃板的楼层就分别是 14 , 27 , 39 , 50 , 60 , 69 , 77 ,84 , 90 , 95 , 99 。
4. 两个人交流一次能得到相互的信息,三个人呢?N个人呢?
5. 你为什么选择做测试而不是研发呢?答:测试和研发是相通的…
6. 讲做过的最深刻的一个项目
7. 线程与进程有什么区别
子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。
8. 进程间通信有什么方法
shared memory,message passing。
管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;Linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于 BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigaction函数重新实现了signal函数);
报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列systemV消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
9. 同步有那些方法
Java synchronize wait notify
事件 临界区域 互斥器 信号量 锁
10. rpc是通过什么实现的?
通过socket实现的……
11. 一个表,主键是id,还有有名字,个人简介等。找出出现次数在[a,b]的名
字。
12. 找出平衡点
public class Test {
public int findBalanceableNod( int [] a) {
if (a == null ) {
return - 1 ;
}
long sum = 0l ;
long subSum = 0l ;
for ( int i = 0 ; i
sum += a[i];
}
for ( int i = 0 ; i
if (subSum == sum - subSum - a[i]) {
return i;
} else {
subSum += a[i];
}
}
return - 1 ;
}
13. 给一个三层楼房,有两部电梯,问要测试些什么。
14. 有一个数据库,随着数据的增加响应越来越慢,问怎样改进。
我首先反应过来的是多用几台机器,每台机器负责一部分,然后汇总返回给用户。他点点头,说思路是对的,马上追问如果只有一台机器怎么办?他说,同样的思路,能不能分块考虑呢?我说按照区段划分吧,例如1-10000一段,10001-20000一段。他说那随着记录的增加,有什么方法保证能平均地分到每块呢?我想了想,还是请他给提示。他说,例如1001分到第一块,1002分到第二块…1005分倒第一块,1006分到第二块…我反应过来了,说按照关键字求余。他终于点头了。
15. 有若干个文件,每个文件里有很多单词,用空格隔开。现在给出一个单词,
要求返回单词出现在哪些文件中。
我想了一下,说建一个从关键字到出现的文件记录的索引,用hash或者B+树。
16. 他又问能不能把具体的数据结构写一下?
17. 然后问了是否用过百度mp3搜索。问按照什么方式对mp3结果排序。
我说按照链接数多的,页面访问量大的,链接目标的大小,还有优先考虑正规网站的链接,还有关键字模糊匹配等。最后他补充了一个速度因素。
18. 用c完成一个函数char* function(char * s,int n),返回s的前n个
字符,要求尽量考虑健壮性。
19. 假设有N个(大约几百万个文件),每个文件存储的都是英文单词,文件大
小都是1MB左右。输入一个单词,输出包含这个单词的文件名(按文件大小排序)。要求尽量优化算法。
一开始,理解成文件里面存的是不定长的连续字符串了,光给了个分块扫描,还想着用KMP,被否决;磨了一段时间,后来发现文件的单词是用空格隔开的。再提示下,给出了个多叉树结构(类似于字典树?),每个节点存储包含这个单词的文件名链表。
后来想到二叉排序树,提到了,好像这个就是面试官要的答案,不过我又提出用排序树查询方便,但是输出排序的结果(深度或广度遍历)没有直接链表遍历方便。
20. 问了个socket编程,如何设计服务器端。
回答多线程,每一个请求开一个线程。又问假设大量用户请求来到的话如何优化(提示线程的创建与销毁比较耗资源)。想到数据库连接池的原理,套用在这里(其实不知道socket能不能这样用),貌似面试官还比较满意。
21. 一个数据库,为了保证响应速率,会在数据库和客户端之间建立一个缓存,
缓存里存储数据库常用的结果(容量为10000条item或1GB)。客户端先查询缓存,若没有结果再查询数据库,当查到结果之后再把这条结果添加到缓存中。对缓存的操作包括添加、删除、搜索item。 要求尽量全面的测试这个架构。
22. 其他还问了对测试流程的理解,问了下实习情况。面试结束的时候还追加了
UNIX下I/O模式?和如何在linux下查看程序资源消耗情况(这两个都不会)
23. 对于测试研发工程师的职位理解;
24. 自己对于这个职位有什么优势;
25. 用过什么测试方法?答:JUnit
26. JUnit测试的流程方法?测自己的代码还是别人的代码?觉得好用么?
27. Java中String和StringBuffer的区别
28. 如果百度生产抽纸巾的盒子,如何检测纸盒的质量?写一个测试用例(这个
题可以从比
如果测试,比如测试百度知道,有哪些东西要考虑?(答服务器响应时间,并发程度,肯定还有其他,不过我不会了。。。)
29. 如何编程模拟多用户并发请求页面,从而测出页面的性能?(答线程,又问
如何实现请求?答http request,不知道对不对。。。)
30. HTTP协议的特点?
31. 如果进了百度,你觉得你每天都要做些什么样的工作呢
32. 如何测试百度搜索引擎
33. 算法:2n个数,一半奇数,一半偶数,设计一个程序让奇数位上的数是奇数,
偶数位上的是偶数,并计算程序的空间复杂度和时间复杂度
建立一个2n大小数组,设置一个奇数计数器初值1,一个偶数计数器初值0,循环一下所有数,如果奇数,与a[奇数计数器位置]元素互换,奇数计数器+2,如果是偶数,与a[偶数计数器位置]元素换位置,偶数计数器+2,直到2n个数遍历完毕。
空间复杂度1(设置一个临时变量用于元素交换)
时间复杂度o(n)
简单写下程序没调试你再改改阿
#defined N 10
main()
{
int ai=1;//奇数计数器
int bi=0;//偶数计数器
int temp=0;
a[2N]="1,5,6...2n";
for(int i=0; i
{
if(a[i]%2==1)
{
temp=a[i];
a[i]=a[ai];
a[ai]=temp;
ai=ai+2;
}
else{
temp=a[i];
a[i]=a[bi];
a[bi]=temp;
bi=bi+2;
}
}
}
//本题假设a[0]为0位偶数位,a[1]为1位奇数位(不影响思想的说明)
34. 开放性问题:怎么样统计世界上一共有多少个理发师
可以去工商局,可以去统计理发用的工具销量
35. 现在有一台打印机或者多台打印机,你要怎么样进行测试,要测哪些点。
36. 索引的几种方法,比较各类排序的算法复杂度,说说栈内存和堆内存的分配,
介绍一下socket编程
37. C/S结构,Server端测试性能时需要注重哪些方面。
38. 问是否了解Socket编程。socket编程中,如果请求非常多,服务器承受能
力有限,怎么解决。
39. 一个单链表,长度未知,如何快速的找出位于中间的那个元素。 建立两个指针,一个一次走一步,一个一次走两步,当走两步的指针走到末尾的时候。那么走一步的指针刚好到达中间的位置。
40. 两个人,在一个桌子上轮流摆硬币,每次每人摆一个,硬币不能重叠。直到
桌子上再摆不下更多的硬币了,那么最后摆的那个人获胜。问取胜方案。 你要争取先放,并把第1枚硬币放在桌面的对称中心上,以后你应该根据对方所放硬币的位置,在它关于中心对称的位置上放下一枚同样大小硬币.这样,由于对称性,只要对方能放得下一枚硬币,你就保证能在其对称位置上放下一枚同样大小的硬币,因此,失败绝对轮不到你.
41. 字符串的函数,树的遍历,还有数据结构的抽象概念
42. 洗牌算法
43. 算法设计:n个连续自然数,乱序存放于一个数组中,缺失一个,缺失的位
置处放置-1,问怎么确定丢失的那个数?
对数组进行求和,然后对N个连续自然数求和。后者的和-1减去前者的和得出的就是丢失的那个数。
44. 重载和覆盖的区别,linux基本命令
45. 操作系统的哲学家就餐问题
46. 谈谈测试与开发的关系,对测试的理解,给出实例,自动贩卖机,冰箱,百
度的搜索页等,从外观(视觉效果)、正确性、压力、性能等方面。
47. IP段去重
48. 判断两颗二叉树是否等价
49. 比如给你ABC三个模块,现在想测B模块,比如要实现的功能是收到A来的
报文,如果没有page字段,则自动添加并让其等于1,如果有page字段,则无条件转发,怎么写测试用例
50. 为什么选择做测试,这个好像和你的专业(通信工程)基本上背离啊,还有
你的未来是怎么规划的之类的,一一对答!
51. 如果让你现在对一部电梯写测试用例,你怎么写?
需求测试:
查看电梯使用说明书、安全说明书等
界面测试:
查看电梯外观
功能测试:
1.测试电梯能否实现正常的上升和下降功能。
2.电梯的按钮是否都可以使用。
3.电梯门的打开,关闭是否正常。
4.报警装置是否可用。
5.与其他电梯之间是否协作良好。
6.通风状况如何。
7.突然停电时的情况。
8.上升途中的响应。
1)电梯本来在1楼,如果有人按18楼,那么电梯在上升到5楼的时候,有人按了10楼,这时候是否会在10楼先停下来;
2)电梯下降到10层时显示满员,此时若8层有人等待电梯,是否在8层停。
可靠性:
1.门关上的一刹那出现障碍物。
2.同时按关门和开门按钮。
3.点击当前楼层号码。
4.多次点击同一楼层的号码等等。
5.同时按上键和下键会怎样。
易用性:
1.电梯的按钮的设计符合一般人使用的习惯吗.
负载/压力测试:
1.看电梯的最大限度的承受重量.在负载过重时是否有提醒。
2.在一时间内不断的让电梯上升,下降。
稳定性测试:
1.最大负载下平稳运行的最长时间。
文档测试:
1.使用手册是否对电梯的用法、限制、使用条件等有详细描述
52. 你觉得做测试工程师所具备的最基本的素质是什么?
出色的沟通能力= 20%良好的学习能力= 21%全面的技术能力= 18%写作能力耐得住性子= 14%缜密的逻辑思维能力= 23%专科及以上学历= 4%
53. 如果现在你和研发人员就某一个程序段出现相左的意见,你怎么办?
54. 如果你们实在是意见不同呢?
领导决断
55. 如果现在就要交项目了,突然发现因为计划没写好,现在有一部分没法完成
了,而且就是24小时加班也写不完,怎么办?
● 出现这样的情况,直接告诉主管,推迟发布日期,这是你负责的事情,百度
的原则是不能让任何没经过测试的东西上市
56. 给你一个文本文件,里面存的全都是位数小于10的数,有5千万个,怎么排
序才能最节省资源?
● 木桶排序