搜狐-技术类岗位(校招)-笔试经验

以下内容来自于应聘者回忆整理

很多同学都想得到搜狐的实习或者校招机会。那从过来人的角度谈谈,要通过搜狐的实习、校招面试,都有哪些经验和注意事项呢?今天就跟大家分享一下。以下答案仅是面试者个人观点,仅供参考

一、不定项选择题

1、假设二叉排序树的定义是:1、若它的左子树不为空,则左子树所有节点均小于它的根节点的值;2、若右子 树不为空,则右子树所有节点的值均大于根节点的值;3、它的左右子树也分别为二叉排序树。下列哪种遍历之后 得到一个递增有序数列(B)

A、前序遍历 B、中序遍历 C、后序遍历 D、广度遍历

2、系统中的“颠簸”是由(B)引起的。

A、内存容量不足 B、缺页率高 C、交换信息量大 D、缺页率反馈模型不正确

解析:在操作系统课上我们一般称这种现象为“抖动”,当然这里“颠簸”是一个意思,它指的就是内存中的页面与外存频繁交换(即缺页率高),而产生的现象。

3、同一进程下的线程可以共享(B)

A、stack B、data section C、register set D、thread ID

4、 以下程序的打印结果是(A)

A、10 5 hello world world hello B、10 5 world hello hello world C、5 10 hello world world hello D、5 10 hello world world hello

解析: swap_int(a, b)将实参10,5传递给了形参,在被调用函数中交换了10和5,但是调用结束,函数释放变量,实参中并没有交换;

swap_str(str_a, str_b)将实参的地址传递给了形参,其实跟上面的类似,并没有改变实参str_a、str_b的指向,实参没有交换。

5、序列 16 14 10 8 7 9 3 2 4 1 的说法下面哪一个正确(A)

A、大顶堆 B、小顶堆 C、不是堆 D、二叉排序树

6、1100|1010 , 1001^1001 , 1001&1100 分别为(A)

A、1110 0000 1000 B、1000 1001 1000 C、1110 1001 0101 D、1000 1001 1000

7、 C/C++语言:请问在 64 位平台机器下 sizeof(string_a) , sizeof(string_b)大小分别是(A)

A、8 100 B、100 8 C、100 100 D、8 8

解析:string_a是一个char型的指针,在64位系统中sizeof(char*)=8

string_b是一个char型的数组,在64位系统中sizeof(char)=1,共100值因此为100

8、8 瓶酒一瓶有毒,用人测试。每次测试结果 8 小时后才会得出,而你只有 8 个小时的时间。问最少需要(B) 人测试?

A、2 B、3 C、4 D、6

解析:本题的解题思路是二进制:

将毒酒编号为0~7,有三个人ABC根据每一个值转化的二进制:

搜狐-技术类岗位(校招)-笔试经验

A和对应二进制从左往右数第一位为1的,B喝所有第二位为1的,C喝所有第三位为1的

根据ABC中毒情况还原二进制,此题得解。

9、往一个栈顺序 push 下列元素:ABCDE,其 pop 可能的顺序,下列不正确的是(C) A、BACDE B、ACDBE C、AEBCD D、AEDCB

解析: A, ab cde连体 合理 B, a进a出 想c出肯定b已经进来没出去 同样c出去了卡一个b 最后e C, 首先A进A出,合理 第二个E进 E出 那么BCD必须全都进去 所以后面跟的是D 选C D判断 同C

10、输入若已经是排好序的,下列排序算法最快的是(A)

A、插入排序 B、Shell 排序 C、合并排序 D、快速排序

解析:快速排序在元素基本无序的情况下是最好的选择,在基本递增或递减中时间复杂度是O(n^2) 归并排序时间复杂度稳定在O(nlogn)

希尔排序很难说,跟选择的增量有关,一般小于O(n^2),大于O(n)

插入排序是在序列已有序的情况下最快的,时间复杂度是O(n),另外在数数据规模较小时插入排序效果也很好。

一般不选择传统的冒泡排序,如果题目中有一个选项是冒泡排序,要想一下是否隐含着改进冒泡排序的含义。

11、一种既有利于短作业又兼顾长期作业的调度方式是(D)

A、先来先服务 B、均衡调度 C、最短作业优先 D、最高响应比优先

解析:最高响应比优先算法等待时间相同时,要求服务时间愈短,优先权愈高,因而该算法有利于短作业,对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而获得处理机,因此该算法即有利于短作业又兼顾到了长作业。

12、二叉树是一种树形结构,每个节点至多有两颗子树,下列一定是二叉树的是(AC) A、红黑树 B、B 树 C、AVL 树 D、B+树

解析:红黑树(Red Black Tree) 是一种自平衡二叉查找树

B树 是一种平衡的多叉树

B+ 树 是一种树数据结构,是一个n叉树

AVL树是自平衡二叉查找树

13、以下程序打印的两个字符分别是(A)

A、c g B、b d C、g g D、g c

解析: cur本为object类型指针 第一个占位符输出时,参数中将cur先强制转化为字符型指针 然后加2,即指向obj_array数组的第一个元素中的字符c,而第二个占位符输出时,参数中先让cur指针加2,即到达obj_array第3个元素的地址处,然后强制转化为字符型指针,再用*获取1个字节的内容即字符g

14、int A[2][3] = {1,2,3,4,5,6}; , 则 A[1][0]和*(*(A+1)+1)的值分别是(A)

A、4 5 B、4 3 C、3 5 D、3 4

解析:首先 int A[2][3] = {1,2,3,4,5,6};可以写成这样的形式 int A[2][3] = {{1,2,3}, {4,5,6}}; 这样就看的更清晰了.

A 是二维数组名, 在参与运算时候会退化成指针. A这个指针的值和 二维数组中第00个元素的地址一样,即 A == &A[0][0] (注意这里很重要是在数值上), *A表示第0行的行首地址, 那第0行首地址跟A[0][0]的地址也一样, 所以 在数值上 A == &A[0][0] = *A ,但是他们表示的含义不一样.
A表示二维数组的首地址
&A[0][0]表示二位数组下标为[0][0]元素的地址
*A表示二维数组下标为0行的首地址.
那这个清晰之后,后面就可以解释了. 比如 A == &A[0][0] == *A == 0x0028F724, 那么**A 就知道是二维数组的下标为00的值,即 **A == 1, 因为二维数组是按行存储,所以 A + 1 表示增加一个行的字节数, 因此需要在A的基础上增加12个字节, 即C, 所以 A + 1 为0x0028F730, *(A+1)表示下标为1的行首地址,因此也是 0x0028F730, 即 A+1 = *(A+1) = 0x0028F730

*(A+1) + 1 表示往后面增加一个元素的字节数, 即实际为[1][1]的元素的地址, 所以 *(*(A+1) + 1) 就是5

想要更多搜狐实习、校招的机会,请点击这里

  • 1、刺猬实习遵循行业规范,任何转载的稿件都会明确标注作者和来源
  • 2、刺猬实习的原创文章,请转载时务必注明"来源:刺猬实习",不尊重原创的行为刺猬实习或将追究责任
  • 3、作者投稿可能会经刺猬实习编辑修改或补充。

相关推荐