面试岗位:Java游戏服务端开发
笔试:
大约10道题,难度很简单只能记起来大概
写出下列输出的结果
-
请求出下列程序的输出结果:
int a=31; int b=a>>>2; System.out.println(a^a^b);答案:7
-
请求出下列程序的输出结果:
System.out.println(4|2);答案:6
-
下面类型分别占几个字节
int(4)short(2)char(1)long(8)
这题我可能没注意,居然写错了!! -
数据库
张三 语文 90 张三 数学 80 李四 语文 70 王五 数学 60 统计出总分超过200分的学生的姓名。
select name,sum(score) total from test t group by name having total>200; -
一个传参的题,考察形参和实参的。
-
使用Runable接口开启一个线程,并每隔3秒打印一下当前时间
new Thread( new Runnable() { public void run() { while(true){ try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(new Date()); } } }).start();-
讲字符串中的内容按照分隔符倒序转换,比如 I Love U ,转换后为 U Love I。
public String revers(String in,String seq){ StringBuilder sb=new StringBuilder(); String[] arr=in.split(seq); if(arr!=null&&arr.length>0){ for(int i=arr.length;i>0;i--){ if(i!=arr.length){ sb.append(seq); } sb.append(arr[i-1]); } } return sb.toString(); }
等待约半个小时后,见到了面试官,一个看着年龄不是特别大的男的。
面试开始:
面试官:先自我介绍一下
我:(介绍)
面试官:你们做的什么游戏,现在上线了吗
我:(介绍)
面试官:你可以做到抗负载20000人是吗,怎么保证的?
我:我做了压力测试
面试官:你压力测试怎么做的?
我:手写的客户端脚本,模拟玩家实际的动作,每隔5秒发送一个请求。然后观察服务器的负载情况。2000一个物理机,共10台机器同时压测。
面试官:系统的吞吐量和QPS各是多少?
我:我没系统的统计过。
面试官:你没统计过你怎么能保证你能抗住?
我:我主要通过观察实际物理机
的各项指标,以及主线程的单次tick时间。
面试官:既然是压测,你都不统计QPS还叫什么压测呢,你认为这样合理吗?
我:(尴尬的笑)
面试官:你给我画一下你们系统的结构:
我:(画图,讲解)
面试官:你这个centerServer是单点的吗?如果故障了会不会影响全局?
我:这个centerServer只是收集下目前的机器状况,并和后面的web服务相接,挂了也不影响游戏。
面试官:你这个gameServer的负载均衡是谁做的?
我:这里并没有做负载均衡,gameServer各个实例之间并没有关系,没来得及改造完。
面试官:假设目前有几千万个玩家同时登陆,你这个LoginServer能抗住吗?
我:这个架构肯定扛不住,但是目前也够用了。
面试官:你这个回答我表示怀疑,有没有更好的办法呢。
我:做负载均衡的吧,前面加个nginx.
面试官:如果Nginx也扛不住呢。
我:那也可以考虑做客户端负载均衡。
面试官:客户端负载均衡?你确定吗。你每次都要把所有地址请求一遍吗,这样好吗
我:你说的都请求一遍当然是不够好,但也是有优化的办法。
面试官:你每次都要把所有地址请求一遍吗,这样好吗(强调一遍),没有别的办法吗
我:那就做服务端负载均衡了。
面试官:那你要怎么做?
我正在思考的时候,被他打断了。面试官:算了下个问题。你都做过哪些服务端优化?
我: 我在好几个方面做过,不过一般都是出了问题来想出的解决方案。比如我之前优化过一个日志服的阻塞问题,大致情况是这样的。。(解释)。
面试官:(又打断了我)你这里有没有更好的办法?
我:我之前考虑过用kafka做消息中间件,但是后来我分析代码发现这里面有好几个问题,并不是加了一个中间件就能解决的,而在我优化完之后,也没有引入kafka.
面试官:为什么不用呢?如果有更好的解决方案,为什么不用?
我:(这里其实我有点记不清楚为什么不用了)我们平常业务太忙,还没时间去优化。
面试官:你做战斗的时候有没有做过流量包补偿(大概是这个词)?
我:战斗方面不是归我负责的。我只负责除了战斗之外的其他东西。
面试官:作为一个主程,你连战斗都不负责,你不觉得有点说不过去吗?
我:额我的简历您可能误会了,我是说我是JAVA方面的主程。并没有说自己是整个服务端的主程。
面试官:(很无奈的感觉)好吧。最后一个问题,(画图)这个小球和这两个小车要碰撞是如何判断的?
我:这个我不会。碰撞这部分不是我做的。不过我觉得这个应该也只是个通用的算法,学习一下就会了。
面试官:如果你工作时每个东西都要学还怎么工作呢?好了今天的面试结束了。
知识点查缺补漏梳理:
- 游戏服务端负载均衡亿级以上的解决方案。
- 游戏服务器需要掌握的知识点,比如战斗中的数据同步,流量补偿。
- 2D游戏的一些基本知识,包括服务端需要掌握的算法,比如物理碰撞等。
- 游戏服务端优化为支持高可用高并发的结构。(这个短期无法实现,只能说说理论)
总体面试感觉:
一些基础问题答错不应该。面试的时候听到问题后着急给出解决方案,然后顺着他的思路有可能会走向死胡同或短板。
面试官总体不算很礼貌,多次打断我的回答。给人的感觉非常不好,问问题似乎觉得面试者和他的想法不一样就不对,并没有耐心通过面试全面的考察面试者的各方面技术水平,只关心岗位匹配度。目测没有太多的面试别人的经验。
也可能是我薪资要的超出了他们的预算,草草面完结束,哈哈:)
-