今天下午5:30,涂鸦移动面试。
共经历两轮面试
一面
面:自我介绍一下。
自:balabala。。。
面:讲述一下两道笔试题的思路。
自:第一道笔试题,分两步,第一步分别找出链表中的奇数和偶数节点,构成奇数链表和偶数链表;第二部分别翻转奇数链表和偶数链表,并把偶数链表连接到奇数链表后。
自:第二道题,动态规划求出每个数的完美平方数的个数,依次遍历的n,并更新每个数的完美平方数个数为小的那一个。
面:手写一个程序判断一个数是否是丑数。
自:(你大爷,剑指offer上有这道题,我特么没看。。。)问清了丑数的基本概念后,一直告诫自己判断多种边界条件和特殊测试案例,然后写下了如下代码
bool isUglyNumber(int n)
{
if(n<n)
return false;
while(n%2==0)
n=n/2;
while(n%3==0)
n=n/3;
while(n%5==0)
n=n/5;
if(n==1)
return true;
else
return false;
}
面:输出小于n的所有质数,说一下思路。
自:(前两天笔试才做过。。。)(其实是没听清题目)让i从1开始循环到sqrt(n),如果n%i==0,则n不是质数,否则n是质数。
面:题目要求输出小于n的所有质数。
自:(尴尬)思考了一会儿说,运用动态规划的思想,创建一个n+1的数组,初值都设为0。然后用两层循环,外层循环i从2开始一直到n,内层循环j从2开始,一直i*j<=n,对每一个i*j的下标,其对应的值都置为-1。最后下标对应值为0的数就是小于n的质数。
面:那么你的算法中,会出现重复的操作,比如6,2*3和3*2都是等于6,这样你就算了两遍,你有什么办法对这种情况优化一下吗?
自:(思考了几分钟)我目前没有比较好的优化方法
面:好,那咱们第一轮面试结束了,我这没问题了,我去给你叫下复试面试官。
自:好的,谢谢(so easy?)
二面
面:你对做游戏有什么了解吗?
自:(懵逼脸)额,我不是很了解,之前看相关的内容说做游戏需要用一些引擎之类的。我是自学的C++,我想的是先把基础的东西学好,再去学习进一步的内从。
面:唔,你从你的项目经历里面挑一个大概给我讲一讲吧。
自:好的,那就第一个即时通讯的项目吧。这个项目主要分两部分,一部分是用Qt写的界面程序,主要调用socket函数与服务器和mysql数据库连接;另一部分服务器端主要把客户端1发送给客户端2的消息进行转发。我设计了一个通信协议用来进行通信,比如客户端发送的消息中第一个字节为0表示发送的登陆消息,第一个字节为1表示发送的是通讯消息;第二个字节放的是客户端1发送消息的目的用户的socket号,用来服务器判断转发给哪一个客户端,后面跟着1024位的消息体。
面:也就是你的服务器主要就是用来中转消息的吧。
自:是的。
面:好,我问你一个算法题吧。有个一个大的矩形框,还有m个不相同的小矩形,现在要把小矩形放入大矩形框中,要求尽可能的放多个小矩形,并且在放最多矩形数量相同的情况下,保证所有小矩形面积加起来最大。
自:(提问了一些基本的限制问题,并思考了很久,很久。。)我的想法是这样的,从矩形框的左上角开始,选第一个小矩形放进去,每个矩形的放置方法有横着和竖着两种,然后再放第二个小矩形,第二个小矩形也可以横着和竖着放,并且放的位置可以是前一块矩形的右侧或下侧,期间需要判断小矩形放置时有没有超出界限。设置一个变量记录放置矩形的数量,直到最后没法放置小矩形了,返回放置的矩形数最后取最大的数。
面:那你第一块矩形怎么选择放进去呢?
自:第一块矩形是从m个矩形中依次选出来了,比如第一次选的是第一块,第二次可以选第二块,依次后推。
面:也就是你的算法是按全排列的方法做的吗?
自:(全排列?)嗯,是的,是全排列的方法。
面:这种方法的复杂度很大,有没有什么优化的方法呢?
自:(思考ing。。。)不好意思,我没有想出优化的方案。。。
面:好吧,没想出来没关系,下去再想想吧。我的问题就结束了,你有什么问题想问我的吗?
自:嗯,我的问题是,贵公司的工作时间是怎样的?
面:我们是弹性工作时间!
自:(。。。)贵公司是专门做海外游戏市场的,游戏发布是通过googleplay市场,是不是贵公司在国外也有工作室?
面:google在中国被墙了,我们发布游戏是翻墙发布的。
自:(。。。翻墙我懂的!)贵公司做开发主要用什么技术和语言?
面:一般做2D的游戏会直接用java写,大型的3D的游戏,会用一些引擎比如unity之类的写。
自:好的,我觉得java和C++比较相似,如果我能加入贵公司,我能很快的转到java开发上来!我的问题结束了。
面:好的,那咱们就到这里吧,我送你出去吧。
自:好的,谢谢(what?连等通知的话都没说么?血崩啊。。。)
总结一下吧。
一面的过程还比较顺利,问的算法题也比较基础,和面试官交流也比较流畅,可能是面试官看起来和我差不多大的缘故吧,不过期间我居然听错了面试官的问题,不知道是我有点紧张的原因还是太放松的原因。。。
二面比较失败,首先对公司的业务不是很了解,也没有提前去做功课,下次需要注意。其次,在介绍自己的项目的时候,语言组织的不够流畅,而且项目讲解的也不够完善,主要是因为项目做完好久没有review了,有点生疏,下次面试前需要将项目详细的梳理一遍。最后,也是最致命的,算法知识不过关。我回来问了问宿舍的小伙伴,他说这个问题就是背包问题的例子。我一想,还真没错,真有点象之前他给我讲的背包装宝石有数量有价值的那个例子。五大算法经典题型没有掌握啊!
再接再厉,coding and review!
(单独做一个五大算法的经典题型总结吧)