一周入职游戏公司的体验分享与面试准备攻略

迈科思腾(电子政务、物联网)

第一面试

  • 离职原因和空窗期原因?
  • 项目主要负责哪些模块?是单体还是微服务?
  • WebSocket协议与HTTP协议的区别?
  • 项目中使用RocketMQ的主要功能是什么?RocketMQ的维护成本高吗?
  • 讲述SpringBoot的几个常用注解及其含义?
  • AOP是什么?有哪些通知?
  • Map的实现有哪些?各自特点?
  • 除单例模式外,还了解哪些设计模式?在项目中使用过哪些设计模式?
  • 是否使用过线程池?核心参数有哪些?分别有什么作用?
  • 如何结束一个线程?直接调用stop()方法会有什么影响?
  • MySQL有哪些索引?
  • 导致索引失效的场景有哪些?
  • 你对加班的看法?期望薪资?

总结

在第一次面试中,准备得不够充分,未能回答出一些问题,因此面试官的反馈一般,未能通过。

翼果科技(SaaS,转向Python)

第一面(26分钟)

  • 离职原因?
  • Java的基本数据类型有哪些?分别占多少字节?
  • final关键字可以修饰哪些,分别有什么影响?
  • 异常Exception和错误Error的区别?常见Error有哪些?
  • &和&&的区别?
  • 有哪三种获取类实例的方式?
  • ArrayList与LinkedList的区别?
  • 数组下标查找在内存中如何查找?为何是O(1)复杂度?
  • 请介绍一下JVM的垃圾回收算法?
  • 有没有调试过内存溢出的错误?
  • cookie与session的区别?
  • 有哪些方法可以增强cookie的安全性?如何防止cookie被伪造?
  • 数据库事务是什么?事务的四大原则(ACID)是什么?四个隔离级别是什么?
  • 脏读和幻读发生在什么级别?
  • 请谈谈对Spring框架的理解。
  • 请谈谈对IoC和AOP的理解。
  • 请求经过SpringMVC的哪些关键类到达Controller?(SpringMVC的工作流程)
  • 场景题:统计txt文件中每个单词的出现次数,文件大小为1T,内存只有256MB,如何优化方案进行统计?
    • 面试官提示可以使用共享变量或ConcurrentHashMap进行统计,最后可以定期往磁盘写中间变量,等待所有线程同步完后再统计数量。
  • 5年内的职业规划?
  • 如果需要转向Python或Go语言,你怎么看?
  • 如果有紧急项目需要连续几个月加班,你怎么看?之前工作中最晚加班多久?
  • 有什么技术方面的问题想问?

第二面(28分钟)

  • 介绍一两个项目中的重点功能的具体实现过程和最终效果。
  • 讲述项目中遇到的最困难的问题及解决方案?
  • 希望从事什么方面的工作?
  • 期望薪资?
  • 过往工作经历的加班情况和对加班的看法?与领导有过争执吗?是否曾被强制要求加班?
  • 上线的代码是否引发过重大事故?
  • 接受出差吗?为什么不接受?

HR面

  • 离职原因?找工作多久了?
  • 有刷算法题吗?数量如何?
  • 接下来想进什么类型的公司?
  • 上家公司主要负责什么类型的项目?公司规模多大?
  • 公司这边加班比较多且没有加班费和调休,大小周,能接受吗?
  • 政府项目通常是阶段性的,一个阶段结束后要进入主流业务,需要学习Python,可以接受吗?
  • 期望薪资?上家公司是多少?
  • 何时能入职?

总结

这家公司的主要项目为SaaS,除了一个Java项目外,其他均为Python,存在常态化加班,工作强度较大,无调休,可能需要出差。不过,面试官的技术能力较强,特别是一面面试官,除了八股文外,还会详细讨论一个场景。最后未能通过。

心启科技(小公司,人工智能)

技术面(60分钟)

  • HashMap在1.8前后的区别?链表转成红黑树有什么好处?

  • 有使用过分布式锁吗?

  • 讲述CAS的原理?

  • ReentrantLock与CAS的原理区别?

  • 工作中使用过哪些设计模式?哪个比较熟悉?讲述实现过程。

  • 平时如何调优MySQL?做了哪些调整?

  • 什么场景下适合建立索引?

  • 规则字段与不规则字段,哪个适合建立索引?

  • MySQL有哪几种事务隔离级别?分别适用于什么场景(可能导致什么问题)?

  • 项目中Redis主要用于什么?

  • Redis与其他轻量级缓存(如Memcached)的优势是什么?

  • 从性能上比较,Redis和Memcached哪个更好?

  • 什么是Redis的缓存穿透、缓存击穿?

  • 项目中RocketMQ的主要用途是什么?

  • RocketMQ如何保证消息必达(消息可靠性)?(生产者发送的消息如何确保投递到MQ?)

  • 项目中框架搭建是否有参与?哪些框架是你选择的?

  • 知道为什么选择WebSocket吗?

  • 你知道单体项目与WebSocket之间会有什么问题吗?(单应用并发量低与WebSocket长连接之间的问题)

    • 面试官:单应用并发量低,WebSocket开启长连接时,很多用户在排队,可能会崩溃,所以在单应用中使用WebSocket并不合理。(后续我补充这是人事系统的一个小功能,主要给操作员使用,用户量很小)
  • 请讲述项目中印象深刻或对成长帮助较大的模块,做到什么程度?

  • 项目中增加了缓存,那么在什么时机去同步缓存?(旁路缓存模式,先更新DB再删除缓存)

  • 更新DB后再删除缓存,如果某个接口涉及更新的数据很多,涉及的缓存也很多,该如何优化这个问题?

    • 回答提到异步删除缓存。

HR面

  • 离职原因、空窗期原因?
  • 你在上家公司项目组主要负责什么项目?
  • 目前有多少个Offer?
  • 你倾向于找什么样的工作?
  • 上家公司的薪资情况?
  • 上家公司的领导如何评价你的工作表现?是否有提升之处?
  • 遇到理解不了的需求或技术点时会如何处理?
  • 期望薪资?

总结

这家公司问八股文相对较多,主要做人工智能相关,最后未通过。

华侨城集团子公司

一面(20分钟)

  • Spring与SpringBoot的区别?
  • Spring使用了哪些设计模式?
  • Spring事件驱动模型的事件是同步还是异步?
  • 同步与异步的区别?
  • 在实际开发中,异步一般用在什么地方?
  • 项目中的异步导入导出如果异常如何处理?
  • 导入导出有做大小限制吗?
  • 导入导出的文件存放在哪里?
  • 当初为何选择FastDFS作为文件服务器?
  • 工厂模式主要解决什么问题?
  • 简单工厂模式与抽象工厂模式的区别是什么?
  • IoC与new对象的区别?
  • 如何控制一个Bean的创建方式?比如依赖某些属性,有这些属性才能创建该Bean。
  • 创建Bean有几种方式?
  • ThreadLocal的作用?常见用法(使用场景)?
  • 成员变量与局部变量的区别?
  • new了一个对象,其内部有成员变量,如果多个线程修改,会线程安全吗?
  • 多线程修改对象成员变量,有哪些方式确保线程安全?
  • synchronized是可重入锁吗?
  • synchronized与可重入锁ReentrantLock在异常发生时,有何区别?
  • CAS是什么?ABA问题是什么?如何解决?
  • 为何需要线程池?(作用)
  • 项目中哪些地方使用了线程池?
  • 在线程池中,当线程满时,会如何处理?(线程池原理流程,以execute()方法为例)
  • 线程池负载降低后,多余的线程会如何处理?
  • 在工作中,所做的加密解密组件使用了什么算法?了解AES和DES加密算法吗?
  • AOP切面有哪些使用场景?
  • 切面的本质是什么?(原理)
  • 你认为SpringEL表达式是如何解析的?(反射?上下文?这个不了解)
  • 在工作项目中设计过哪些功能?设计功能第一版可能有缺陷或不足,你是如何改进的?
  • 慢SQL如何调优?如何判断SQL是否使用了索引?

二面(36分钟)

  • 在上一家公司主要负责什么类型的项目?上家公司开发团队规模?
  • 哪个项目对你来说挑战性最大或对技术成长最有帮助?项目架构是什么?单体还是微服务?
  • 网络通信熟悉吗?如Netty?
  • WebSocket或Socket这种即时通信,是如何保持与服务端的长连接的?如果长时间不动会否断开?是否了解心跳机制?
  • 主要问项目相关问题,后续介绍公司业务项目。

HR面

  • 离职原因?
  • 求职过程中最看重哪些方面?
  • 上家公司薪资?
  • 期望薪资?
  • 在过去一年的工作中,最大的亮点或优势是什么?

总结

相对来说,八股文问得较多,项目业务讨论也不少,最后通过了,但给的薪资比预期低不少。

游戏公司

一面(线上 11分钟)

  • 离职原因?

  • 项目主要负责的内容以及自己实现的组件?

  • 堆与栈的区别?

  • 线程安全的Map与List分别有哪些?

  • Atomic类的底层实现原理?

  • Redis如何实现分布式锁?

  • MySQL底层存储数据结构是什么?(B+树)

  • SpringBoot配置文件加载优先级是怎样的?(比如yaml配置文件、启动参数、从配置中心拉取的配置、Linux启动带的参数)

  • 场景题:多个玩家打Boss,如何实现(多线程并发)?

    • 面试官:扩展一下,Java中实现多线程的方式有哪些?(哪些技术哪些类?)
    • 回复包括手动创建线程、使用线程池、同步锁synchronized以及Atomic类。
  • 你在Java中使用过队列吗?

二面(线下 60分钟)

  • 笔试题:两个线程交替输出0到50,控制一个线程先开始(使用了synchronized + CountDownLatch)。

    • 后来提示可以使用两个线程判断奇数或偶数来输出并使用原子类自增(有规则的计数场景)。
    • 面试官询问为何使用synchronized + notify + wait + CountDownLatch?
    • 面试官问是否可以使用CAS和原子类来实现,如何协调两个线程交替输出0到50?
  • CAS是什么?原理?

  • 原子类AtomicInteger实现自增的流程大致是什么?自增代码中为何需要do while循环?

  • 为什么HashSet要重写hashCode()与equals()方法以去重?(HashSet的去重流程)

  • 要对某个对象去重,hashCode()与equals()如何重写?

    • 扩展:有一个用户类,字段包括用户id、名称、邮箱、手机等,去重的话,hashCode()与equals()该如何重写?你会使用哪些字段拼接hashCode?
  • 你在工作中主要负责了哪些内容?介绍一下主要做的业务。

  • 社区项目中的一级与二级评论是平行的吗?在数据库表中如何区分与关联?

    • 面试官:如果平行且仅用一个父id指向帖子id或一级评论id,是否有考虑过一个问题:查询帖子的所有一级与二级评论时,需先查出所有一级评论,再用一级评论id查询二级评论,若数据量大时性能是否会低下?(回答是可以将指向帖子的父id与指向一级评论的父id做成两个字段,相当于冗余一个字段)
    • 面试官:那么在返回前端前,如何实现这种层级关系?第一种方案是先查出这个帖子的所有一级评论,再查每个一级评论的二级评论;第二种方案是直接查出所有一级评论二级评论,在内存中处理层级关系;第三种方案是直接交给前端去处理。你认为哪个方案较好?
    • 面试官:若评论数达几万条,若将全部查出在内存中处理层级关系是不划算的,通常会使用分页,比如每页100条评论,若进一步深入你会怎么做?(回答是可先查出当前页的一级评论并展示,点开某条评论的二级评论时再查对应的二级评论并展示,若二级评论太多则可对其进行分页)。
  • 项目中为何使用RocketMQ?邮件模块是否有必要用MQ?(使用消息队列的好处与问题)

  • 你认为在项目的二级缓存中如何保证本地缓存与Redis缓存的一致性?(如某个节点更新操作,多节点的Redis缓存都会更新,但对于本地缓存只会更新当前节点,如何确保其他节点的本地缓存也更新?)

HR面

  • 之前是否了解过我们公司?
  • 对工作的公司及行业有什么倾向与看重?
  • 离职后的空窗期?
  • 目前有Offer吗?
  • 毕业后为何选择上家公司?上家公司规模?负责的业务?所在部门人数?
  • 你的直属领导如何评价你的工作?
  • 平时采用什么自学方式?
  • 对于这个岗位,你认为你的个人优势在哪里?

总结

游戏公司面试中,项目业务被比较看重,八股文问题较少。在二面中,讨论主要聚焦在项目业务。我对此感觉良好。最后顺利通过面试,且没有降低期望薪资,福利也相对优厚,年终奖稳定,且不打卡,内部管理较为扁平。

华为OD

一面(50分钟)

  • 线程与进程、进程通信的理解?
  • 查询数据库表a中所有内容并按b列升序排列的SQL语句?
  • 提高数据库检索速度的方法?
  • HTTP与TCP协议及其关系的理解?
  • 在Linux某目录下搜索文本“abc”与查找“abc”文件的命令?
  • 线程同步的理解?
  • C或Java并发实现的实例?
  • 已知链表的一个节点p,删除其后一个节点的语句?
  • 二叉树前序遍历的方法实现?
  • 手撕算法:
题目:括号匹配  
输入:第一行一个整数T(1 <= T <= 100),表示有T组测试数据。对于每组测试数据:一行无序的括号,最长有3000个半括号。  
输出:一个整数,即最少要添加的括号数使之成为满足题意的括号序列。  
输入样例:  
3  
[[[  
[)(]  
[)  
输出样例:  
3  
2  
2  

二面(50分钟)

  • 手撕算法:
LeetCode 112:给一个二叉树,判断是否存在一条从根节点到叶子节点的路径,路径上所有节点的值的和等于给点目标数,存在返回true,都不存在返回false。  
  • 项目中的通知功能是如何实现的?
  • SpringMVC拦截器是用什么实现的?AOP是什么?AOP如何实现?
  • 动态代理与静态代理的区别?动态代理的具体实现?JDK动态代理与CGlib动态代理的区别?
  • Spring的体系结构,有哪些重要模块了解吗?
  • Spring的Context(上下文)了解吗?
  • MyBatis的逻辑分页与物理分页理解吗?
  • MySQL的视图了解吗?
  • MySQL的索引了解吗?
  • 数据结构了解哪些?
  • 如何判断一个链表是否成环?不一定是头尾相接,可能中间成环。
  • 常用的排序算法了解吗?
  • 图的遍历了解吗?
  • Redis用作什么?
  • Java的序列化了解吗?
  • Java虚拟机了解吗?
  • Java多线程方面了解吗?比如锁的类型?
  • ConcurrentHashMap使用了什么并发机制?
  • CAS是什么?原理如何?

HR面(20分钟)

  • 离职原因?离职后的空窗期?
  • 在上一家公司最能体现你能力的事情与受挫的事情?
  • 上家公司规模?所在项目组主要涉及什么类型项目?
  • 毕业后为何选择上家公司?
  • 职业规划?
  • 上家公司的薪资?当前的期望薪资?
  • 知道当前应聘的是OD岗位吗?之前的工作加班情况?了解OD岗位的加班情况吗?
  • 反问:试用期6个月,每月都有月度答辩,转正也有答辩。

主管面(15分钟)

  • 离职后的空窗期?
  • 平时如何自学技术?
  • 过往工作经历和项目情况?
  • 在工作中如何进行SQL调优?
  • 为何没有考研?
  • 职业规划?
  • 对架构师的理解?
  • 反问:数字能源部门,主要负责开发工具类似IDE的开发,Java、Python、C++都有,加班一般到9点多,频率不算多。