整体问的比较简单知识小地方有的没太注意
先整体自我介绍,然后问我三层架构,然后又让我讲MVC,(MVC讲的不是很好)。然后讲一下面向对象特性,对于多态进行细问,以及多态进行调用过程(父类声明,子类new?)。然后问了进程与线程的区别。
然后说来几道算法题吧。
1:有五十二张牌,现在是有序的,现在只有random(0,1)函数,需要把这52张牌打的很乱,怎样实现:
我的解:把这52张牌可以看成(0,51)数组,对以前的函数乘以51,就变成了(0,51)随机数。我说可以每次随机取出来一个数,放到结果数组里面,然后再选出来一个,与原来的数就行比较 ,如果一样,就重新取值。
面试官说这个解法可以,但是就是在最后几个数值的时候可能比较麻烦,比如最后一个,可能期望值是(1+52)/2=26。
最后面试结束我问好的解法,他说选出来一个数值之后,把最后的一个数值放到该位置上,从而范围就缩小,然后从(0,50)选取一个值。
2:1-2+3-4+5-6+7.....n,n很大
我说n很大, 是不是不能用int或者long存储,他说可以用long存储。我开始叙述了一遍最后的结果,最后说的可能有点乱,他说你把代码写出来,然后再给我说
long n;
cin>>n;
n=abs(n);
if(n==0)
return 0;
if(n%2==0)
return -n/2;
if(n%2==1)
return n/2+1/2;
我复述了好多遍,他说你最后的结果是多少吗,然后我就发现我太数学化了。就把最后改成(n+1)/2。他说行,这就是我为啥让你手写的原因。
最后他问我有什么问题吗,然后我就问他了第一道算法最好的解法。然后我又问,我进去之后做的是哪方面的,他说你知道我们公司是做什么的嘛,我说游戏嘛。他说进去之后有团队,有领导,什么什么的一大串子英文名称,我就恩恩。。。
面试官是福建或者广东人,有的地方让面试官重复了好几遍。