这份资料是关于百度2017年校园招聘研发工程师的笔试题,涵盖了多个IT领域的知识点,包括分布式计算、数据结构、操作系统、网络协议、C++编程、shell脚本、数据库操作以及面向对象编程等。
1. **MapReduce**: MapReduce是一种分布式计算框架,用于处理大规模数据集。题目指出,一个Task通常会将输入数据切分成多个独立的数据块,并且这些计算通常在存储节点上执行,这意味着计算和存储是结合在一起的。此外,MapReduce框架会先对map任务的输出进行排序,以便进行后续的reduce操作。选项D错误地表示MapReduce框架不会排序map任务的输出。
2. **哈希表和线性探测法**: 哈希表是一种数据结构,用于快速查找和插入元素。题目中提到的哈希函数H(K)基于K的第一个字母在字母表中的序号。当发生哈希冲突(即两个键映射到相同的槽位)时,线性探测法被用来解决冲突,即将搜索向后移动到下一个槽位。题目询问在等概率情况下查找成功的平均查找长度,答案是C,即4。
3. **死锁避免**: 在操作系统中,死锁是指多个进程互相等待对方释放资源而无法继续执行的情况。题目问在有5个资源和4个进程的情况下,每个进程最多可以申请多少个资源而不导致死锁。根据银行家算法,答案是A,即每个进程最多申请2个资源。
4. **TCP连接建立**: TCP的三次握手过程中,主机甲发送SYN=1, seq=11220的段来发起连接请求。主机乙接受连接时,应返回SYN=1, ACK=1, seq=自己的初始序列号, ack=主机甲的seq+1。所以正确答案是B,其中seq应该是一个新的初始序列号,ack则是主机甲的seq加1。
5. **C++指针和函数**: 给出的C++代码展示了指针和函数的使用。函数`f`接收两个指针,将`p`指向的值加1,将`q`指向的值加1。在main函数中,`m`的值为1,`n`的值为2,`r`指向`m`。调用`f(r, &n)`后,`m`的值不变,仍为1,而`n`的值变为3。因此,程序输出是C,1,3。
6. **shell脚本**: 这是一段shell脚本,根据命令参数的个数执行不同的命令。`$#`表示参数的个数,`$@`表示所有参数,`$$`表示当前进程ID,`$*`表示所有参数作为一个字符串。根据题目描述,空缺部分应填`$#`,表示检查命令参数的个数。
7. **Linux用户管理**: `useradd`命令用于创建用户。题目中提到的与主目录相关的参数可能是`-d`(指定用户主目录)、`-m`(如果主目录不存在则创建)或`-M`(不创建主目录)。因此,答案可能是B、C或D。
8. **C++运算符重载**: 问题涉及成员函数重载的`++`运算符。成员函数调用形式为`a.operator++()`,这与`++a`等价。
9. **机器学习算法**: 选项中的 Expectation Maximization(EM算法),Radial Basis Function(RBF,径向基函数),Linear Discriminate Analysis(LDA,线性判别分析)和支持向量机(SVM)都是机器学习中常用的算法。
10. **作业调度**: 在单道批处理系统中,采用短作业优先算法,J1(3小时)、J2(5小时)、J3(7小时)和J4(9小时)的平均周转时间是12.5小时。
11. **Hadoop MapReduce配置**: 题目询问了配置MapReduce编程环境的步骤,配置Eclipse、ssh和Hadoop环境变量是必要的,而配置Java环境变量虽然不是特定于MapReduce的,但也是必不可少的,因为Java是Hadoop的基础。因此,选项A(配置Eclipse)是不必要的,因为Eclipse是一个集成开发环境,而不是必须的配置步骤。
12. **PL/SQL变量赋值**: PL/SQL中,将“数据库原理”课程的学分赋值给变量的正确语句是C,使用SELECT ... INTO语句从数据库中选取值并赋给变量。
13. **面向对象编程**: 类A是类B的友元,意味着A类可以访问B类的所有成员。类C是A的公有派生类,因此C类继承了A类的友元关系。选项B和D正确,表示类C也可以访问类B的私有和保护成员,而类D(不是A的派生类)不能。