发信人: YouTube (YouTube - Broadcast Yourself), 信区: Job
标 题: 人民搜索面试回忆
发信站: 北邮人论坛 (Sat Oct 22 23:18:31 2011), 站内
所投职位:搜索研发工程师
结果:拒信1封
一、面试形式
1、3轮1V1的技术面试;某轮面试通过,稍事休息后开始下一轮面试。
2、面试过程基本分为两部分:
1)对简历上所写项目的描述,及回答对方感兴趣的项目细节;
2)对方给出数组、链表等常见程序设计问题,要求描述解决问题的思路;并把思路转化为代码(手写)。
这一部分是最重要的环节,占面试总时间的85%以上。
二、面试题回忆
1、删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。
2、求数组(元素可为正数、负数、0)的最大子序列和。
3、链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
4、链表克隆。链表的结构为:
typedef struct list {
int data; //数据字段
list *middle; //指向链表中某任意位置元素(可指向自己)的指针
list *next;//指向链表下一元素
} list;
5、100万条数据的数据库查询速度优化问题,解决关键点是:根据主表元素特点,把主表拆分并新建副表,并且利用存储过程保证主副表的数据一致性。(不用写代码)
6、求正整数n所有可能的和式的组合(如;4=1+1+1+1、1+1+2、1+3、2+1+1、2+2)
7、求旋转数组的最小元素(把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元
素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。)
8、找出两个单链表里交叉的第一个元素
9、字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小
10、时间复杂度为O(1),怎么找出一个栈里的最大元素
11、线程、进程区别
12、static在C和C++里各代表什么含义
13、const在C/C++里什么意思
14、常用linux命令
15、解释Select/Poll模型
三、提示
1、面试给出的程序题,有些有一定难度,在确认清楚理解题意后,迅速思考。不管能否想到思路,建议3分钟之内,一定要把自己当前的想法告诉面试官,与其互动;如有必要,可在思维过程中要求给出提示。
2、要相信自己,不到面试官提醒耗时太久,都不要给自己心理暗示及告诉面试官,自己想不出来。
答案就在拐角处,坚持就是胜利。
3、虽说招聘信息是说熟悉C/C++或Java均可,但面试官偏好C/C++系(至少我遇到的4个都是这样;其中一个在我写出Java的代码后,要求用C再实现一遍)。
以上内容,仅供参考。 祝大家都拿到满意的Offer :-)