又到了年末的时候了,寒风瑟瑟,多事之秋,
公司新来的总监执意要全线转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。
持续更新中...