面试经历

网易游戏测试工程师(实习岗)

一面面试问题:


(1)一支碳素笔除了写字画画之外还有什么用途呢?

我的回答:划快递、搭积木、开锁、用笔芯芯头让手机初始化、绑成船过河、鄙视别人(面试官呵呵)、笔芯油当原料、扎气球、和别人比旋转速度;


(2)智力题:假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者。条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?

答案:

解题思路:
1、我们不妨逆向推理,如果只剩6个乒乓球,让对方先拿球,你一定能拿到第6个乒乓球。理由是:如果他拿1个,你拿5个;如果他拿2个,你拿4个;如果他拿3个,你拿3个;如果他拿4个,你拿2个;如果他拿5个,你拿1个。
2、我们再把100个乒乓球从后向前按组分开,6个乒乓球一组。100不能被6整除,这样就分成17组;第1组4个,后16组每组6个。
3、这样先把第1组4个拿完,后16组每组都让对方先拿球,自己拿完剩下的。这样你就能拿到第16组的最后一个,即第100个乒乓球。

还好之前我看过这道题


(3)GC垃圾垃圾回收器原理

我的回答:由于java属于跨平台语言,他不能像C语言以及C++那样可以直接去操作内存,操作内存的工作交给了我们可爱的虚拟机,虚拟机会将内存区域划分成不同的部分,比如栈区和堆区,栈区呢属于线程独享的,随线程的开启而创建,随线程的结束而释放,因此这部分是用不到GC操作的,用到GC操作最多的地方就是堆内存了,虚拟机将堆内存分为新生代和老年代,采用的是分代回收算法,新生代分为三部分,分别为伊甸区,两个survivor区,刚刚创建的对象首先存储在伊甸区,在伊甸区满了之后,就会根据可达性分析算法去查找到底哪个对象需要释放,将不需要释放的对象存储在其中一个survivor区域,当这个survivor区域满了的时候,将此时还存活的对象存放到另一个survivor区域中,当后一个survivor区域满了的时候,这时候会将最开始存放在survivor里面并且现在还存活的对象存放到老年代中,这样子下来survivor区域总会有一个是空着的呢,然后新生代采用的是复制算法,因为他发生的GC操作比较频繁,所以采用的是复制算法,因为存活下来的不是很多啊,这样子复制操作也不会消耗太多的时间,然后老年代最先采用的是标记--清除算法,后来改进成了标记--整理算法,一次新生代GC叫做minor GC,一次老年代GC叫major GC,当时回答的不是特别有条理,大概知识说出来了,面试官中途打断过一次,然后后来继续的时候说了句你讲的有点深入了,就直接下一道了;


(4)String 类能不能被继承或者重写呢?为什么?

我的回答:String是final修饰的,当然不能被继承了;


(5)对于ATM机该进行哪些方面的测试呢?

我的回答:主要还是侧重于边界检测方面的,发现对测试的理解也就停留在单元测试上面,什么系统测试、功能测试、白盒、灰盒、黑盒测试基本上是没有涉及过的,我说有可能插入的银行卡不能识别、用户输入的密码不够6位就去按确认键、用户输入的密码有可能包含非法字符、进入系统之后用户取款时输入取款值超过了当前ATM机所能取的最高限度、当前ATM机里剩余钱数不够用户的取款金额、突然断电的情况下用户银行卡怎么吐出来问题,当时就想到这些;


(6)项目中遇到的难点,你是怎么解决的?或者换句话就是问你项目的亮点是什么呢?

我的回答:我做过两个项目,一个金融数据爬取,遇到的难点有:对于较大文件或者网页内容较多的网页爬取会导致程序运行很慢的问题,主要解决方法是采用多线程爬取,首先先获取到所要爬取的文件或者页面内容的大小,这个是很容易做到的,然后再本地文件夹下面建立一个和所要爬取文件大小相同的文件,动态设置自己想要开启的线程数量(可以通过线程池也可以根据文件或者网页大小动态计算出到底要开启多少个线程就可以啦),每个线程在进行爬取的时候在http头部字段的range片段中带上自己想要爬取文件的字节范围,这样相当于将文件切割成了线程个片段,每个线程单独爬取自己所负责的range范围即可,如果获取成功,服务器会返回206,并且在返回的http头部添加字段Content-Range字段来记录下已经获取到的值;还有就是断点爬取,采用类似于迅雷下载文件的策略,在下载的过程中会生成一个临时文件,记录下此时已经爬取到的字节大小,如果在其中出现某些字节未爬取完全的话,则重新开启此线程继续进行爬取;服务器端会进行反爬虫,解决方法是减缓爬取频率以及采用动态IP的方法随机爬取;还有验证码登录之类的因为之前没好好准备怕被问就没说;

第二个项目是一键报警app项目:项目难点在于文件的上传与下载,解决方法类似于上面的爬虫项目,没有继续说;另一个难点是图片缓存问题,因为我们在用GridView或者ListView展示图片的时候,如果每次加载图片都去网站或者服务器端拽取得话,用户体验度一点都不好,比如有这样一种情形,一个警官想要查看一下最近报警的图片信息时,他在滑动页面显示之后很可能有回滚操作,如果第一次加载慢点的话他还可能会接受,如果回滚加载也很慢的话,可能就不怎么乐意了,解决这个问题的方法是采用安卓自带的LruCache缓存策略,这个是采用map实现的,他的key是图片存储路径,value是Bitmap图片本身,每次当我们加载图片的时候首先会去缓存中查看到底有没有这个图片,有的话直接加载就可以啦,没有的话会去相应的url加载图片,加载完成后还会将该图片放入缓冲池中,这样在很大程度上避免了OOM异常,LruCache缓存策略采用的是最近最少使用算法;还有一个是OAuth认证第三方登录,结果忘记说了,哎哎哎!


(7)怎样看到加班这件事呢?对工作地点有什么要求没有?

自行回答


(8)用最快的方式计算出1+2+3+4+.........+n的方法是?(剑指offer上面有)

没回答上来,因为搞java的,剑指offer说了好几种C++的虚函数之类的,大意了,没看,一定要补的看了;


(9)java多态的分类:

我的回答:多态分为两类,一类是编译时多态(重载),一类是运行时多态(重写),其实严格意义上来说多态只是指的是运行时多态,也就是我们通常说的重写啦!


(10)项目代码量有多少呢?其中你开发了有多少呢?

我的回答:算是自己编了,说客户端app有大概1万左右吧,服务器端大概六七千


(11)我看你之前有实习的经历,说说你实习做过什么吧?

我的回答:其实就没做什么,然后感觉面试官不怎么懂android,就直接说做了个音乐播放app,他还问我你担任的角色是什么,开发了其中多少代码,组里面有几个人,基本上处于编故事模式,这个接下来要补充一下了;


(12)你的项目是你做的测试吗?你是怎么测试的呢?

我的回答:不是我做的,是我们组另一个曾经在百度测试岗实习过的孩测的;


(13)你在什么地方用过GC操作呢?GC操作给你带来什么困惑呢?

我的回答:在新建一个较大实体对象的时候,我可能会预估下哪个地方之后就不会用到这个对象了,然后调用System.out函数手动释放,因为如果不释放的话,他会占用内存的,如果这样的对象很多的话,势必会很大程度上影响整个系统,所以先gc一下;

带来的困惑就是GC操作会让系统停顿了别的线程来进行垃圾回收,对系统性能有影响;


(14)你一键报警那个项目用户量有多少?什么时候上线的?当并发量很大的时候你是怎么解决数据丢失问题的?

我的回答:用户量大概就是两三千人吧,主要是面向警局附近的周边学校,上线一个多月,当并发量很大的时候,比如一个用户正在上传较大视频文件时,可能占用很大一部分带宽,这时候的服务器肯定不能处理其他用户的请求以及对其作出响应,但是数据还不能丢失,所以我们做了备份数据库的操作,或者直接将用户请求预存到文件中,等处理完之前用户的请求之后,再依次处理备份用户的请求;(都不知道答得对不对,管他呢)

还有别的问题给忘了,想起来补上,希望自己能过了一面,有机会继续分享,赠人玫瑰,手留余香!

一面结束5天后收到了二面电话,接下来把二面面试经过记录下来,希望能帮助到大家:

(1)当然是自我介绍了,不用多说;


(2)继续问我的傻逼项目,问项目中我扮演的角色、所遇到的问题,项目难点在哪里?我是怎么解决的?

跟她聊了聊反爬虫和LRUCache缓存,可能说得太细了,最后被打断直接下一个问题


(3)之前实习的时候做过一个音乐播放app,然后问了问我的这个播放器是怎么进行测试的,做了哪些方面的测试?

我的回答是:进行了性能测试、界面测试、功能测试、单元测试(白盒测试)、集成测试(灰盒测试)、系统测试(黑盒测试)、验收测试、最后可能还会有回归测试;


(4)喜欢玩什么游戏?

感觉这是网易游戏必问的一样,本人不怎么喜欢玩游戏,随便说了说喜欢棋牌类的,有时间玩玩CF


(5)智力题:有101个球,其中一个是不标准的球,但我们并不知道这个球是轻于还是重于标准球,现在有一个没有砝码的天平,问最少多少次可以找到这个球,并且可以知道这个球是轻于还是重于标准球?

我的回答:将101个球分成三堆,分别是33、33、35,然后将两个33的放在天平两边,如果平衡的话,则非标准球出现在剩下的35个球中,对这35个球做同样分三堆的操作,相当于是递归一样,如果不平衡的话,则非标准球出现在放在天平上面的66个球中,那么第三堆的35个球将是标准的,接下来用33个第三堆标准球替换天平上面左右两边的任意一边,看看到底如果出现不平衡的话,则非标准球就出现在不平衡球的那一边,同时我们也得知了非标准球是轻于还是重于标准球,这样的话,我们确定出了非标准球可能出现的33个球,然后后面也是递归的寻找就可以啦,不造回答的对不对,感觉全程处于蒙圈状态


(6)算法题:有一个数组,里面除了一个元素之外,剩下的都有重复的现象,怎样最快的找到这个不重复的元素?

我的回答:采用HashMap存储所有的数据,key值是数组元素,value值是元素出现次数,最后查看map中value值等于1的key值即为所求结果,可能这个答案有点问题;


(7)如果一个任务只剩下三天时间就要提交,你会怎么做?

我的回答:加班啊,结果面试官说,每天都这样不影响第二天效率吗?我说明显你都说了三天啊,不是三个月


剩下问了好多琐事,有可能这就是女面试官的作风吧!


二面问的不是很多,回答的也不是很好,感觉要跪,不管怎样,尽力就好!!!



你可能感兴趣的:(面试经历)