最新2019百度秋招补招面试(附详细答案)

本文来自小伙伴 @(*^_^*) 投稿,投稿的小伙伴后面送书你先选,不满意下次还是你先选。

以下为正文,采用小伙伴第一人称。

下午两点百度科技园2号楼进行面试,

上来就自我介绍,之后 HR 就开始问我项目的事情,因为我简历上的项目都是区块链相关的,HR 对这方面了解的不是很多,所以没有怎么追根到底地问。

据说,一般 HR 会对简历上写的项目追根到底的问,问你这个项目是怎么做的,用了那些东西,这些东西的原理是什么。


一面

1、算法&编程语言

HR:如何用一行代码实现1+2+3……+100?

1
2
print((1+100)*100/2)
print(sum([i for i in range(1,101)]))

这里是用 Python 实现

HR: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

例如输入一个长度为 9 的数组 {1,2,3,2,2,2,5,4,2}。由于数字 2 在数组中出现了 5 次,超过数组长度的一半,因此输出 2。如果不存在则输出 0。

:遍历统计,记录每个元素出现的次数,然后找出出现次数超过一半的那个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
int traverseEach(int *array,int number) {

int *tempArray = (int *)malloc(sizeof(int)*(number / 2 + 1) * 2);

//全部初始化为0
for (int i = 0; i < number * 2; i ++) {
tempArray[i] = 0;
}

int maxNumber = 0;
int returnValue = 0;
int maxCount = 0;
int tempIndex = 0;

for (int i = 0; i < number; i ++) {

tempIndex = 0;
if (maxCount == 0) {
//初始化一下
tempArray[maxCount] = array[i];
tempArray[number + i] = 1;
maxCount = 1;
} else {
//
for (; tempIndex < maxCount; tempIndex ++) {
if (tempArray[tempIndex] == array[i]) {
tempArray[number + tempIndex] += 1;
break;
}
}
if (tempIndex == maxCount) {
//新的
tempArray[tempIndex] = array[i];
tempArray[number + tempIndex] += 1;
maxCount += 1;
}
}

if (maxNumber < tempArray[number + tempIndex]) {
maxNumber = tempArray[number + tempIndex];
returnValue = tempArray[tempIndex];
}
}

free(tempArray);
//检验是否大于一半
if (maxNumber <= number/2) {
returnValue = 0;
}
return returnValue;
}

这里是用 C 实现,小伙伴很秀!

HR:能不能来个简单一点的方法?

:可以进行排序,因为这个数出现次数超过了一半,所以中间那个数肯定就是要求的了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void maopSort(int *array,int number) {
int changed = 1;
for (int i = number - 1; i > 0 ; i --) {
if (changed == 0) {
break;
}
changed = 0;
for (int j = 0; j < i; j++) {
if (array[j] > array[j+1]) {
//exchange
array[j] += array[j+1];
array[j+1] = array[j] - array[j+1];
array[j] = array[j] - array[j+1];
changed = 1;
}
}
}
}

int sortRelu(int *array, int number){
maopSort(array, number);
return array[number/2];
}

这里是用 C 实现

HR:那万一这个数没有出现一半呢?怎么办?

:那遍历时,进行比较,从列表中移除两个不相等的数字,一直到只剩下最后一个数,那个数就是所求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int neutralize(int *array,int number) {

int returnValue = array[0];
int count = 1;

for (int i = 1; i < number; i ++) {
if (returnValue == array[i]) {
count += 1;
} else {
count -= 1;
}
if (count <= 0) {
count = 1;
returnValue = array[i];
}
}
return returnValue;
}

这里是用 C 实现

HR: 一行代码实现列表的遍历

1
print([[x for x in range(1,101)][i:i+1] for i in range(0,100)])

这里是用 Python 实现

HR: 一行代码实现将 1-N 的整数列表以 3 为单位分组

1
print([[x for x in range(1,101)][i:i+3] for i in range(0,100,3)])

这里是用 Python 实现

HR:回文知道吧,你写一下代码实现一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while True:
str=input("请输入字符串:") #输入一个字符串
length=len(str) #求字符串长度
left=0 #定义左右‘指针’
right=length-1
while left<=right: #判断
if str[left]==str[right]:
left+=1
right-=1
else:
break;
if left>right:
print("是")
else :
print("不是")

这里是用 Python 实现

HR:你能用python的字符串切片实现一下吗?

1
2
3
4
5
6
7
8
9
10
11
def reverse(text):
return text[::1]

def is_palindrome(text):
return text==reverse(text)

something = input("请输入字符串")
if is_palindrome(something):
print("是")
else:
print("不是")

这里是用 Python 实现

2、数据库相关

HR:数据库操作,从 students 表里面,查询一下相同名字的人数

1
select name,count(*) from students group by name having count(*)>1

3、Linux相关

HR: Linux命令熟悉吧,你写几个,然后讲一下,拓展一下

:ls、find 、cd、tree、cp、mv、pwd、tar、mkdir、rmdir、gzip、ps、kill、crontab、free、chmod

然后 HR 挑了几个来问我,用这个命令实现什么什么功能,要加什么参数

HR:说下计算机网络的OSI七层模型吧

:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

4、测试相关

HR:你看我们那个百度首页,那个输入框,你设计一下测试用例

:针对输入框的话:输入的字符串,以及一些奇怪的字符,输入是一张图片,是一个文件呢

针对页面的话:窗口放大缩小,字号放大缩小、编码格式

针对整个网站的话:不同的浏览器、不同的操作系统、不同的屏幕分辨率、多人同时访问

来,wen我

HR:你有什么想问我的吗?

然后我就随便问了下,工作具体是干嘛的

就这样一面结束了,然后 HR 叫我再等等,她去叫二面的 HR 过来

二面

上来 HR 就介绍了一下她自己,然后再介绍了一下我所应聘的部门以及工作岗位,然后叫我自我介绍一下,然后我又重新复述了一下自我介绍,然后 HR 又是针对我的区块链项目无从下手,只是问了一下表面,然后没有深入。

1、算法实现

HR:不借助第三个数实现下a,b值的互换

1
2
3
a=a-b;
b=a+b;
a=b-a; #利用a,b的差值作为中间媒介来互换

HR: 有更简单的方法吗?

我想了好久,还是不知道,然后 HR 告诉我了,用 python

1
a,b=b,a

2、Linux相关

HR: 你写一下你熟悉的Linux命令吧。

(心里暗暗窃喜):ls、find 、cd、tree、cp、mv、pwd、tar、mkdir、rmdir、gzip、ps、kill、crontab、free、chmod

HR:你知道 socket 吧,在 linux 上启动一个,然后你要怎样查看它的端口

我想了好久,答不出来。

HR

1
2
netstat -nltp|grep XXX
lsof -i|grep XXX #这两个命令都可以

3、编程语言

HR:我看你这写着学过 C++,我们这个岗位后端就是用的 C++,你说说内存泄漏的几种情况吧

:C++是大二学的,学完就没有怎么用过了,所以现在我完全不会

HR:

1、在类的构造函数和析构函数中没有匹配的调用 new 和 delete 函数

2、没有正确地清除嵌套的对象指针

3、在释放对象数组时在 delete 中没有使用方括号

4、指向对象的指针数组不等同于对象数组

5、 缺少拷贝构造函数

6、缺少重载赋值运算符

7、没有将基类的析构函数定义为虚函数

4、操作系统

HR:你这写着你也学过操作系统,那你说一下Linux中的进程通信吧

:。。。。。。。

HR:管道、消息队列、信号量、共享内存、套接字

HR:那你说一下死锁,以及怎么解决死锁问题

我(终于有我会的了):死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进

死锁产生的原因:

1、系统资源的竞争
2、进程运行推进顺序不合适

产生死锁有四个必要条件:互斥条件、不可剥夺条件、请求和保持条件、循环等待条件

解决方法:

死锁避免,先尝试分配资源,如果分配后可能出现死锁,那就不分配

死锁预防:破坏不可剥夺条件、破坏请求和保持条件、破坏循环条件

来,wen我

HR:你有什么想问我的吗?

:这边面试什么时候出结果,三面还是技术面吗?

二面就这样结束了


我因为没怎么准备,所以面得很烂,尤其是二面的时候,连续几个问题没答上来,HR 估计都要放弃我了。一面面了一个多小时,二面大概就四十分钟左右。

结果:在我刚上西二旗地铁站,就收到百度发来的拒绝邮件。

▲ 很遗憾

小编说

总的来看,前两面还是不难的,简历上写的都可能被问到,谁让你谢了呢。

无奈我们的小伙伴最近主力备战考研,也是无心准备,要是好好准备的话,肯定不是这个结果。

hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/2019-baidu.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%