某些厂,某些题,近期面试题目集合

又到了年末的时候了,寒风瑟瑟,多事之秋,

公司新来的总监执意要全线转java,看来是不带哥玩儿的节奏了,哥只好寻觅下个安身之处了。

甲公司A部门

接到甲公司的的邀请,当场就答应了,虽然自感离BAT差距甚远,可人毕竟还是要有梦想的,万一实现了呢?所以也就去了,反正人家也不认识我,出了任何错误,出门后,人家也找不到我了,也就不怕被人笑话了。

头两轮比想象的容易,

第一轮出了些笔试,有考归纳法的,有考概率问题的,有考具体解决方案的,为了隐私,笔试题就不方便透露了,

还是说说面试题吧

二轮的面试,考C语言的较多(你没有看错,是C语言),比如

一个单循环链表,有1-5这五个节点,怎么给他倒序。

看到这题,我第一想法是改成双向链表,不过C语言本身结构体是固定的,结构不能更改,不像php这么奔放,除非新生成一个双链表,然后遍历把值导进去,但既然这样还搞什么双链表呢?直接搞个线性数组或者新的单链表不就行了?

我给的思路是,用一个第三方数组,一次把每个节点的值都存进去,然后再一次遍历节点,分别把数组的元素倒序差进去,当然,说到这里,我就立刻想到了栈,这个容器本身不就是个栈吗?不过这些想法,都得遍历2次,我一直没有想出低于两次的算法,不过想想,链性表本身就利于插入而不利于查找,不像线性表可以下标算出每个值得地址指针,然后直接找到值,所以就把这个答案给出去了。

还有一题就是

一个数组,char a = {'a','b','c','d','e','f','g','h','i','j'},怎么生成要给新的字符串,里面的元素顺序随机。

看到这题,我第一想法就是,这货不是php的str_shuffle函数吗?我当时类比的是数据库里取随机行,比如数据表里有1-5000条数据,中间不连续,怎么随机取数据,其实就是取2-4999之间的随机数,然后取这个数字的下一行,在一致性hash问题上应该也有类似的思路,就是把机器装进环状链表,一次命中不到,就取下一值,我在纸上写的伪代码大约如下

last = 10;
n;
while(last > 1) {
  R = time()%last;
  n = 0;
  for(i = 0;i<10;i++) {
    if(a[i] == 0)continue;
    n++;
    if(n>R) {
      b[] = a[i];
      a[i] = 0;
      last --;
      break; 
    } 
  }
}
for(i = 0;i<10;i++) {
  if(a[i]>0){
    b[] = a[i];
  }
}

当时没有编译环境,所以没有写出实际的代码,回到家,我试着运行了下,貌似是可以得,不过因为运行时间太短而且有规律,所以time并不能取出随机数,所以换了个环境,gcc下编译成功并输出,

#include < stdio.h >
#include < stdlib.h >
#include < time.h >


int main() {
	int last = 10;
	int n,i,R;
	char a[] = {'a','b','c','d','e','f','g','h','i','j'};
	char b[11];
	srand(time(NULL));



while(last > 1) {
  R = rand()%last;
  printf("%d\n",R);
  n = 0;
  for(i = 0;i < 10;i++) {
    if(a[i] == 0)continue;
    n++;
    if(n > R) {
      b[10-last] = a[i];
      //printf("%d\n",a[i]);
      a[i] = 0;
      last --;
      break;
    }
  }
}
for(i = 0;i < 10;i++) {
  if(a[i] > 0){
  	b[9] = a[i];
  	break;
  }
}
b[10] = '\0';

  printf("%s\n",b);
  system("pause");

return 0;
}

看了下php的str_shuffle函数原型php_string_shuffle,在string.c里,它采用的是两两随机交换,效率应该高不少。

这两题是印象比较深的2题,还有其他题目容我想起再慢慢写出来,

当时是下午3点面试的,本以为2小时之内就结束了,但是却持续到了晚上8点,把后面6点触控科技的面试也错过了,

好在后来触控的hr给我打电话,问明了原因,改期了。

本来这次面试没抱啥希望的,面试2轮后又感觉有了些希望,

三轮总监面的时候,有些激动,问了些产品看法方面的问题,答的十分不好,有些语无伦次了,

然后,没有然后了。

晚上跟3位员工一起吃了顿饭,貌似也没机会偿还了。



乙公司

该公司是以手游起家,去了后没有为什么技术问题。没有然后了

丙公司

丙公司也是一家知名公司,跟我目前行业类似,不过也没问什么技术问题,薪资问题,没谈拢。不过有个面试官居然跟我现任的总监认识,深感世界之小啊。

丁公司

该公司是一家老牌公司,声名远播,只可惜英雄迟暮,一代后浪推前浪。该公司也没问什么技术问题,不过职位是运营职位,做做论坛,专题页什么的,不敢兴趣,然后就结束了。

这几家公司都没有问什么技术问题,所以也没什么可说的

戊公司

该公司确实是国内redis用的最好的公司,笔试里不少是关于redis的,重点考察的是算法,linux操作,面试是围绕笔试进行的,为了不泄密,所以也不方便透露。有些大日志统计的题目,这个答得不太好,而且本人也没有出彩的项目,故也没有拿到offer.

甲公司B部门

深感该公司部门之多,第一轮面试的是位美女,外表有些冰冷,但是人还是很热情的,问的问题大多不记得了,只记得又问了该公司别的部门的一道题,其实就是打乱字符串的问题。我自然是把前次的答案弄上去了,不过该美女貌似不满意,问有没有更好的办法,我准备把php内置的str_shuffle函数的c语言原型交上去,不过在一步步的提示下,给出了一个她满意的答案。其原理就是先随机取,然后把数组最后一个拿来填补取出的元素,代码如下:

$arr = range(0, 99);
$lengh = 100;
$out = array();

while($lengh) {
	$R = mt_rand(0,$lengh-1);
	$out[] = $arr[$R];
	$arr[$R] = $arr[$lengh-1];
	$lengh--;
}
print_r($out);

这是第一轮,后面面试的是个乐呵呵的面试官,整个人挺有喜感的,问的多是架构方面的,并给了很多解答,提示。

该部门面试了4轮,头天面试了2轮,第二天又面试了2轮,不过第四轮估计是总监还是啥的,没有通过,又是一次见总监死。


己公司

该公司貌似也没问什么技术问题,貌似给我出了一道智力题,

有个数组,里面是不重复的数字,里面只有5个数字是连续的。找出这5个数字。

我一时没细想,给的思路是,造一个固定的栈,然后遍历该数字,然后判断,栈满了就去底元素,不过应该有更巧妙地方法吧,没有拿到offer。



持续更新中...