百度垂直搜索部门实习面经


之前面了一次百度的实习,并且拿到offer,下面是实习过程中出现的题目,希望给同样投百度的同学一个参考。

百度垂直搜索部门实习面经

一面

1.      背景问题:自我介绍,问有关项目经历,描述以前做的东西

语言:

1.      C++ 关于vtable,是类对应vtable还是对象对应vtable(类)

2.      构造函数能否是虚函数(我说的比较含糊:个人认为从语言设计角度来讲不需要)

3.      malloc和new的差别

4.      析构函数不是虚函数的情况给个例子,问会发生神马

5.      在一个函数new了一个以后,没有delete,用什么技术来解决此处发生的内存泄露

6.      cpp编译成二进制文件的过程

7.      delete数组有什么不同,如果用deletep来delete数组,会有什么问题

OS:

new分配内存的过程,应该回答出一种内存管理方式

如果有多个程序同时申请内存,这个时候操作系统如何做到互斥访问

海量数据查询问题:

用户的输入常常会有错误,错误主要分三种情况,多一个,少一个,写错一个。

假如我们在数据库中存储了所有正确的输入,利用什么技术,例如输入一个错误query,来得到所有正确的query。

这个题目是hr提示我的,其实我也没有什么思路
想到的是hash表
对正确的数据存储的时候做如下处理:
例如我们要存储abcdef,首先存储abcdef状态为1,说明是争取的字符串。
把这个字符串的每个位置去掉一个分别存储,用来以后做用户少输入一个的检测。
则里面有bcdef acdef....

在检索的时候,假如目标串是A, 检索A,如果检索到的标记是1,说明输入的是正确的。 如果检索到的字符串标记为0,则说明用户把争取的少输入了一个。现在把A的每个位置去掉一个字符。如果检索到的标记为1,说明用户多输入一个,如果检索到的标记为0,说明用户输入错一个。

二面:

1.      讲项目经历,大概一共聊了15分钟吧

2.      一个寺庙有N个台阶,一个人站在下面,他要去到第M个台阶,假设他只有2个方案可以选择 1. 向上走3台阶 2. 向下走2个台阶。请问他到达第M个台阶最少要走多少步。给出核心算法并分析复杂度

(dp可以解决)

(后来顺便扯到如果台阶个数特别多,应该如何分配dp[N], 然后又扯到局部变量,全局静态变量,和堆变量的差别,包括生命周期,分配上的大小限制,读写速度,什么情况使用哪种变量)

3.      简化题目为:有两个数组,A[N], B[M],代表两个集合。

3.1现在求出集合的交集,给出算法的复杂度 

3.2 如果两个集合都已经排好序,如何求出交集

相关内容