人民搜索3

一、面试形式 
  
     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再实现一遍)。

转自:http://www.cnblogs.com/cswolf/archive/2011/11/21/2267119.html

原文地址:https://www.cnblogs.com/heyonggang/p/2817110.html