面试经验:上海某游戏公司

762 阅读6分钟

面试岗位:Java游戏服务端开发

笔试:

大约10道题,难度很简单只能记起来大概

写出下列输出的结果

  1. 请求出下列程序的输出结果:

    int a=31;
    int b=a>>>2;
    System.out.println(a^a^b);
    

    答案:7

  2. 请求出下列程序的输出结果:

    System.out.println(4|2);
    

    答案:6

  3. 下面类型分别占几个字节

    int(4)short(2)char(1)long(8) 这题我可能没注意,居然写错了!!

  4. 数据库

    张三 语文 90
    张三 数学 80
    李四 语文 70
    王五 数学 60

    统计出总分超过200分的学生的姓名。

    select name,sum(score) total from test t group by name having total>200;
    
  5. 一个传参的题,考察形参和实参的。

  6. 使用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();
    
    1. 讲字符串中的内容按照分隔符倒序转换,比如 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方面的主程。并没有说自己是整个服务端的主程。


      面试官:(很无奈的感觉)好吧。最后一个问题,(画图)这个小球和这两个小车要碰撞是如何判断的?

      我:这个我不会。碰撞这部分不是我做的。不过我觉得这个应该也只是个通用的算法,学习一下就会了。


      面试官:如果你工作时每个东西都要学还怎么工作呢?好了今天的面试结束了。


      知识点查缺补漏梳理:

      1. 游戏服务端负载均衡亿级以上的解决方案。
      2. 游戏服务器需要掌握的知识点,比如战斗中的数据同步,流量补偿。
      3. 2D游戏的一些基本知识,包括服务端需要掌握的算法,比如物理碰撞等。
      4. 游戏服务端优化为支持高可用高并发的结构。(这个短期无法实现,只能说说理论)

      总体面试感觉:

      一些基础问题答错不应该。面试的时候听到问题后着急给出解决方案,然后顺着他的思路有可能会走向死胡同或短板。

      面试官总体不算很礼貌,多次打断我的回答。给人的感觉非常不好,问问题似乎觉得面试者和他的想法不一样就不对,并没有耐心通过面试全面的考察面试者的各方面技术水平,只关心岗位匹配度。目测没有太多的面试别人的经验。

      也可能是我薪资要的超出了他们的预算,草草面完结束,哈哈:)