背景
本人实习和正式工作都是在同一家游戏公司,是做游戏服务端开发。之前一直想着转回传统互联网。口号一直有,奈何总是没有行动。过完年,金三银四了,不能再待在游戏行业了,终于开始行动了。
准备
因为知道算法很重,所以每个周末都会去图书馆看算法技巧的书。可是自己太懒太消极,去到图书馆总是拿起Kindle看小说,所以算法书基本没看几页。平时也有经常看博客积累知识点,遇到不懂或者比较模糊的点,会去查资料并整理好笔记。前期准备真的很重要,要多复习自己不懂或者模糊的知识点。每一次面试完,都要复盘写笔记,把自己回答得不好的点查资料恶补一下。
简历
因为实习和正式工作都是在游戏公司,所以简历一直都是前面的项目都是关于游戏,后面的项目是以前实验室时的项目,都是按时间排列。因为主要是面试非游戏开发的岗位,所以我也是拼了,把各种学校实验室时的项目、比赛,甚至是毕设都搬到简历上来了。
有一点需要注意的是,每次面完试,都要想想简历是不是要更改,要不断更新自己的简历。一开始我就是会在简历上的游戏项目写各种业务的介绍,后面才发现非游戏开发面试官对这些不敢兴趣,就尽量把项目介绍往线程模型、事件系统、跨服务器通讯上写。因为游戏的框架用到了Netty和Protobuf,所以我会在简历项目里重点突出这些。web开发、平台开发的岗位,一般都会问Spring Cloud微服务那一套,还喜欢问MQ、Redis、Nginx,但是游戏开发中一般都不会用到这些东西,是我们游戏服务端转传统互联网的劣势。好在很在企业的内部远程调用系统是基于Netty和Protobuf那一套,类似Duboo或者gRPC,这个时候我们就要重点突出这方面的知识了。
自我介绍
自我介绍我一般会会说自己从大二就开始进入学校院长的实验室做项目,做农产品溯源平台,也参加过大数据比赛,会用Scala写Spark程序。(没办法,你必须突出你做过web类相关的项目,虽然是很久以前了)大四时就在游戏公司实习,转正后一直工作到现在,快三年了。(突出自己不是那种经常跳槽的人,可以在一间公司待很久)然后说自己使用Java很长时间了,也使用过其他像Scala、Python、Kotlin、Go之类的语言。特别喜欢异步编程,有对各种语言的并发原理很感兴趣。
面试经历
为了克服自己的消极状态,所以打算边面试边积累经验,同时用面试的危机感鞭策自己。
主要是在boss直播上投简历,也有牛客网上找人内推。一开始投简历只挑自己认为合适的公司,结果反馈要简历的很少,所以后面就疯狂投了。
因为是19年毕业,所以其实正式工作时间应该是一年多,快要满两年。但是我想着自己18年7月开始实习,在这边公司也快要成为三年员工了,所以那些标明3-5经验的职位我也照投不误。
下面是当时面试的几个公司,大概是从三月二十三开始陆续面试的,回忆有很多都记不清了。
以下的排序是按一面的时候,如果有多个面试,可能有些公司的终面是很后面的。
六一教育
一面电话面试,约了晚上七点半面试。面试官考虑到我是做游戏的,没有问关于web的东西。问了Spring的IOC和DI的问题,问了这边游戏是怎么跨服的。问游戏并发有多少时,我模糊回答了,因为真的不知道。问了MYSQL的索引什么时候失效,这个完全忘了,没回答好。最后一个问题是问Thread.sleep()和Object.wait()调用时线程处于什么状态,我当时回答是处理阻塞和等待状态,面试官感觉很惊奇,有问了一遍,我再次回答相同的内容。然后面试结束了,之前也没了反馈。当时一直没觉得有什么问题,直到一两个星期后,突然太意识到Thread.sleep()时线程状态可能不是阻塞状态,后面去查,果然是自己错了,基础功不扎实呀。
楚秀科技
那天晚上,面完六一教育,就是面试这家公司了。这是一家主打智慧医疗的物联网公司,海投时很早就有反馈安排面试,还处于创业阶段,团队人很少。面试官基本没问什么java基础类的问题,依据简历问了学校时经历和Vert.x,会被问到Vert.x,我很意外也很兴奋,因为很喜欢这个响应式框架。之后又聊到物联网,我就聊起以前在学校实验室有用过中移物联网的物联网平台。面试结束后,hr就说面试官想要到现场去继续进行面试。因为我当时还在上班,去面试只能请假,而且这家公司还是创业公司,所以拒绝了。
CVTE
约了晚上七点半进行面试的,一面面试官是个女生。她开头就说她们那边是5.5天工作时间的,也就是周六要来上半天班,这点我心里就很抗拒了。Java基础和项目都问了,我当时很多问题回答得很模糊,甚至是卡住了好久。当时她问我项目里有用到什么设计模式,然后我脑子一面空白,然后一直在想项目里用得最多的设计模式是什么,最后一直想不出卡着了,只能红着面说忘记那个设计模式叫什么了。后面回答其他问题时,终于想起时策略模式了,不过为时已晚,已将给面试官留下了很不好的印象。在面试的最后,她说我应该锻炼一下表达能力,真是惭愧呀。
联通互产
联通互联网产业公司是联通下面的一家子公司,有国企的气息,面试的岗位在官洲上班。有点想去养老。
一面:问了很多项目的问题。
“你说你们持久化是异步的,那么怎么保证数据不丢失呢?”我说持久化的方式有两种,一种是异步的,一种是同步的,使用者可以自行选择。如果出现突然宕机导致数据丢失,重要的数据也可以通过日志找回。
我讲了一些我以前做游戏机器人测压的经历,面试官问我那个基于行为树的测压游戏玩家行为模拟项目可以改造成测试Web项目的框架吗?我说应该可以的,是不过应该不如专业的web测试框架。看来他们部门对web测试很敢兴趣。
神州信息
这是一家偏向外包的公司,面试的岗位是做政府项目。
一面:问的东西是偏向数据库多一点。有没有使用过explain语句查询慢查询。
说说SpringMVC接受请求的过程。
腾讯
面试的是腾讯深圳的一个电商项目,会使用到Go语言。问了经典问题,一个http请求服务端会是什么流程,我说了一会SpringMVC,他说没有那么,叫我讲一下Ngnix,我说了Ng的分发算法,怎么配置的。其实我不怎么会,讲得很磕巴,而且感觉没有答到面试官想问的点。他好像想问的是Ng的设计模型,但我表示不懂,问他是不是类似Redis那种单线程模型,他说大概类似。我当时是想Ng、Tomcat、SprinngMVC一路讲下去的,但是Ng和Tomcat的知识点其实并没有多少,讲不了,SpringMVC也忘得差不多了。很久以后复盘,猜想面试官技术栈不是JAVA系的,所以可能只是想问下Ngnix和Http的请求响应。
问完项目后,就是一道算法,是关于字符串匹配的。面试官开始前说可以跟他沟通,但是我没想出什么思路,就一直沉默不语在瞎想。最后用暴力的方法随便写了段代码,面试官这时指出我忽略了一些限制条件和特殊情况。最后又问了些项目的事,就结束了。事后总结,遇到这种算法题,就算不会做,也要时不时和面试官沟通交流,探讨一下,这些面试官才会感觉你是真的在做题。
第二天收到了感谢邮件。
粤云科技
是顺德那边的公司,因为我爸妈住在顺德,所以有投顺德那边公司的简历,是一个美的的子公司。电话一面,基本是一些基础的问题,线程池,JUC之类的,也着重问了下数据库。
技术一面几天后,HR有打电话来了解情况,甚至已经谈了薪资,还说美的总部大楼有班车到我爸妈住的地方。可是,因为工作有点类似外包的性质,我拒绝了。
网易游戏
HR先了解了我的情况,发了一下平时喜欢玩的游戏名给她。技术一面是通过远程会议的软件,问的问题很平常但我都答错了,感觉面试官是从牛客网找的题。
ArraList和LinkList的区别,说了他们的时间复杂度,问ArrayList复制数组时的时间复杂度。
给出一个父子类,里面有各种实例变量,静态变量,静态代码块,实例代码块,里面有打印语句,然后要求说说各个打印顺序。
二维数组,分别从行遍历和列遍历,哪个快?
A<? etends E> , A<? super E> 的区别,Enum<E extends Enum
问如果一个范围技能在地图里生效,那么怎么计算出哪个生物被技能击中,问怎么才不用遍历整个地图的生物。其实他想问应该类似八皇后的算法问题或者怎么地图分成多个分区region,但是我回答得很模糊,说以范围技能的中心点开始算影响范围,然后找出在影响范围的生物。
一面后没消息了。很久很久以后,有另一个网易游戏HR来了解情况,过了一会甚至还有网易CC的HR也打电话来了。不过都没下文了。
唯品会
一面:又是问http请求和响应过程。问了Netty和Protobuf的一些知识。问我知道TCP三次握手四次挥手不?我这个没复习,真的不敢回答,就说不太清楚了。
问平时有没有处理过服务器事故,问了服务器出现太多太多Time_Out的连接,我当时回答是把time_out的连接的数量设置短一点。
之后,便是聊到我喜欢异步编程,我想在项目中使用Reactor模式,但感觉又很难在生产中使用。面试官就说了很多,一开始还以为是前端的Reactor,之后又说可以在一些小项目中尝试一下巴拉巴拉的
二面:二面主要是问项目的多,我说了组游戏项目的线程模型、事件模型,从系统层面到Java API层面说了NIO,解释了Netty的多线程主从Reactor模型。
三面:三面去到了唯品会总部大楼,见了项目经理还是总监的面试官。问一下项目,我也讲了一下NIO。后面说到游戏里的热更,我说到JDK里的Instrumentation,并说了它的缺点,他问什么不用ClassLoader来热更。然后又问了我在团队中角色之类的问题。
三面后没有了消息,我其实很想去唯品会工作的,琶洲那边离我现在住的地方也近,很多朋友也在附近。所以,我在微信里问了HR小姐姐多久出消息,小姐姐说部门还在综合对比中。然后,就没有了然后。
阿里巴巴
一面:一个杭州的电话打过来,我还以为是HR要跟我约时间面试。可是,面试官上来了就问游戏里GC的延迟怎么办,问我CMS的过程,开幕雷击。扯了一阵子JVM和GC,又问我G1怎么样,我当时没怎么复习,就说很多都忘了。然后就开始问项目,说了一阵子Netry和ProtoBuf。问Java线程池,锁,AQS,ComccurentHashMap,CAS。因为我GC那里回答得不好,面试官就说我还没准备好呀,叫我好好准备一下。
笔试:两道题,一道是LeetCode原题,一道是经典的的Top K问题。
二面:又是很突然的电话面试,只是这个面试官貌似是个前端出身的。问我http是什么?如果防止一个按钮多次发送请求,怎么处理跨越,cookies怎么样才能保证安全。后面探讨了一下微服务在传统游戏开发中的应用。我说这边公司的游戏应用状态太多了,感觉并不用用上微服务,做不到均衡负载。
三面:主要聊了一下项目中的跨服事务。然后很奇怪的,面试官就开始问很多个人问题了,比如和家人的情况呀,有没有女朋友呀,在公司的同事关系呀。然后,我跟他探讨了一下在游戏业务中使用SpringColud微服务和SpringReactor的可能性,特别是Spring Reactor的使用。最后,我问了下他们在项目中使用通讯协议是不是WebSocket,怎么处理游戏用户的状态。
科大讯飞
因为有点不想加班,看到网上都说科大讯飞很养老,就每次看到就投。
一面:通过Zoom软件面试的,问了许多Java基础问题。问Kafka使用中的问题,消息丢失和积压怎么解决。线程池,JUC,算法时间复杂度的问题。
一面后没有下文。
美云智数
一面:也是顺德美的的一个子公司,面试的岗位是开发维护美的的财务系统。只有一个技术面,一个女生给我的面试。比较有亮点的是,问到我消息队列出现积压情况怎么办?这个问题是生产环境中很常见的。
HR面:了解了一下我工作的情况,直接开始谈薪资了
之后要发薪资流水邮件给她们来确定最终薪资,中间出了点问题,发了好几次。然后来了个电话介绍美的的福利给了口头Offer,开始走发岗位Offer的流程。不过,在邮件发之前,我放弃了,因为有其他Offer了,暂时不想回顺德。(其实挺诱惑,在顺德可以天天下班回家跟爸妈住)。
YY直播
一面:电话面试,问了Java基础,游戏项目怎么实现远程调用,后面主要说到Netty和ProtoBuf,面试官说他们YY平台的RPC框架也主要是通过Netty和ProtoBuf来实现的。
二面:问项目的详情,Java的GC算法,CMS的三次标记一次清理,我刚想接着说G1,面试官就打断。问我在项目中有没有用Ngnix和Tomcat,我说工作以前用到过,但是面试官就说没在正式工作中用到就不用说了,感觉这些东西是我们开发开发面试互联网公司的劣势。
三面:这是一个跨部门面,问了一下项目和Netty。问了Java线程池,提出一个问题:如果程序的线程池在不断生产数据,但是程序被突然关掉了,怎么办?
后面有讲了一下Spring Could的各个组件。
HR:问了前公司加班多不,手头上有其他Offer不,有的话最后会不会选YY。
最后在我去北海涠洲岛旅游的那天谈了薪资发了Offer邮件。
小鹏汽车
一面:问了一些很Java基础的问题,项目详情
熟悉排序算法不,说一个看看,我当时没怎么复习排序算法,就答最简单的冒泡排序,然后说了说时间复杂度,到时候复盘发现自己是说错了的。
面试官:你刚才说到ProtoBuf可以二进制传输,那说说Java对象的序列化,它有什么特点,序列化UID又是什么。
二面:二面是到小鹏汽车广州公司现场面的,面试的是会员部门,被二面面试官怼成猪头一样。
“你们项目的跨服调用是怎么实现的,在图纸上画图说一下”
“你在团队中扮演什么角色,主要负责什么模块”,我说了一下游戏里面的装备模块,他死活跟撤一些装备的关系可以存在数据库,我跟他解释这些固定关系可以用枚举和Excel来表示。跟他解释了好久游戏开发中Excel配置的必要性,他却总是说只是储存的方式不一样,用数据库储存也一样。
问了Spring源码,让我解释Spring怎么解决循环依赖,我说了三级缓存。在纸上画了对象ABC首尾循环依赖问我Spring可以解决不,我说只要不是构造器依赖是可以的,他不信,说这个不可以。。。。
问我项目中Spring和Spring Boot的版本,我说Spring是4.3的版本,他说为啥还用那么旧的版本不用5.0以上的。我说Spring Boot是2.0的版本,他说你看,你是用到了Spring 5.0的版本嘛。。。。
让我说说Spring中用到的注解,我说注入时说到了@Autowire和@Inject,他说他从来没听说过@Inject,我是不是瞎掰的,我说我是从《Spring in Action》里看到的,这个注解还是java包下的,他不相信。事后查资料,我发现这个注解的确存在,只不过要自己去引javax的jar才能使用。
问平时看了些什么书,我说了《七周七并发》。说到《Effect Java》时,我说第二版的JDK很低版本,他非得说那本书的JDK起码都1.7了。。。事后查资料,发现第二版的JDK版本才1.5,新出的第三版才有Java8的特性。
三面:三面是跨部门面,没问我什么东西,问了一阵子就带我去小鹏饭堂吃饭了,还跟我聊天介绍了一下小鹏。
四面:四面是总监面,问了项目的设计,有没有写过C端业务(???肯定经常写业务啦),问多部门做一件事时怎么协同多部门。
那天我是请了一个早上去面试,请假理由是身体不舒服。(前公司刚搬大楼,的确是很不舒服)。面试那天中午没午休,总监面是下午一点半以后,搞得我又得请了下午半天假。然后两点多左右又回原公司上班,搞得我很困很累。
最后,没有消息了。
游戏行业转回去传统互联网不太容易呀,特别是有多面试官会觉得游戏的开发经验在web开发或者平台开发中无用。
这一个月的面试经历让我记忆深刻,有些话重复了很多遍,感觉很累很厌倦。特别是一开始的时候,面试失败,总是会自我怀疑。等待Offer的时候也是很焦虑,很害怕没有了消息。金三银四快过去了,怕接下来公司组里的又会安排太多的任务,而自己又不敢裸辞。
只能说要不断保持学习的能力吧,即使你最后不会在这个行业留下来。这段时间的经历让我学到了,不仅仅是知识点要做笔记,平时工作中生活中的各种事物都可以写到笔记里,需要的时候可以随时复习。
感谢在身边不断鼓励和支持我的同事和朋友。
从游戏开发转换到互联网是一个新开始,也会有很多新挑战,必须认真努力。
希望图书馆会是自己归宿,让自己变得优秀,努力前行。
愿日子干净,所遇皆是温暖
全部评论
(13) 回帖