网易游戏(互娱)游戏研发一面&二面(已收到offer)_网易一面二面通过率-程序员宅基地

技术标签:   算法  网络  面试经验  数据结构  

简单来讲下上周面网易互娱的心得(因为我不是走内推而是直接怼笔试的,所以上周才有了笔试结果然后被告知面试),我面的岗位是游戏研发工程师(初级)

 

一面(40分钟左右)

开始是简单的自我介绍

C++:

关于C++问的比较简单,因为我跟面试官说我主要学的是Java(其实这点我也比较担心会有影响),问得有

针对C++问得有virtual关键字和静态库与动态库

但是两种语言的共性——面向对象总有很多可以问的

先是问了对多态的理解,这点不难,我用自己的话来解释了多态;接着面试官顺着我的回答问了一个设计模式中的策略模式,我答这就是用了多态的特性,我用一个针对不同特权玩家的充值优惠策略来举例,简单写了一下类关系图,解释了策略模式是怎么运用的

算法:

从Java问起,问的是HashMap怎么实现(hash表),怎么解决哈希冲突(链地址法+红黑树),尽可能的避免hash冲突(0.75的负载因子)

解释快速排序,然后给了我一个数列,写出这个数列经过快排一趟之后的结果

同样一个数列,写出归并排序的整个过程,这两个对我来说还是比较轻松的。

后面补充问了时间复杂度,并且在纸上推导快速排序的时间复杂度,我大概推了5分钟吧,因为比较久远有些忘记了。

DFS的话,给了一个迷宫,描述DFS走迷宫的整个流程,具体到走到哪一步,对应的标志会发生什么样的变化

算法问的虽然比较基础,但是会让详细描述过程,如果对算法只了解个大概的话还是很难回答的

网络:

网络先问socket,我回答是socket对TCP/IP层的封装,简单说了下API是怎么用的

然后就问到TCP,自然的少不了三次握手和四次挥手。我具体描述了三次握手,四次挥手的过程,状态变化,以及为什么握手三次,挥手四次

我觉得这些不够,自己又补充了一下关于HTTP 1.1是如何复用一个TCP连接的(keep-alive机制)

 

二面(40分钟左右)

二面的面试官挺有趣的,一见面就有说有笑,接着是自我介绍

面试官直接问我写过的小游戏和简历上的项目

我跟他讲了以前写的扫雷(BFS的运用)和数独破解器(DFS的运用),简历上我放了一个模仿FC的经典坦克大战游戏,用Java写的,他让我自己介绍一下这个作品

我从大体流程设计和运用了哪些设计模式这方面出发来跟他一一解释

大体框架就是 更新数据——绘制图像——sleep 16毫秒(1秒就刷新60次左右)——循环

面试官问坦克AI是怎么做的,我用策略模式解释,玩家和敌人的坦克主要区别就是移动策略不一样,玩家是依赖键盘输入,敌人是依靠计算;

他对敌人的移动策略感兴趣,又往下问我怎么做的,我都解释了一下,最后他还提了几个可能潜在的问题,问如果要改进你会如何做

(其实我还漏了向他补充四叉树这个结构,在检测碰撞的时候四叉树功劳很大)

问完了作品问一些其他的问题,讲到c++手动释放内存,跟内存有关自然会问JVM的内存回收

这次能比较清楚地向他解释了新生代跟老年代的回收算法

答完了问JVM如何解决循环引用的问题,我向他解释了JVM是通过CG Root来判断对象存活与否的,而不是用引用计数器

然后是智力题(算法题?),需求很简单,给一组ip和对应的地理位置作为已知数据,通过ip判断所在的地理位置

自然会先想到时间复杂度O(1)的hash吧,但我答的是构建字典树,用字典树也是O(1),因为IPv4固定是32位二进制表示,那么通过字典树查找自然也是固定的O(32),实际上就是O(1)啦

并且面试官还加了个需求,如果ip是范围,例如10.100.15.10 ~ 10.100.15.200 或者说 10.200.10.* 对应同一个地理位置的场景,虽然可以继续用hash,但是这种结构维护起来就会变的繁琐了。我的回答是稍微修改一下字典树就可以了,每个叶子节点都存储某个ip范围的起始地址和长度,如果给定一个ip过来在字典树中没有对应的路径延伸下去了,那就往孩子节点走一步(如果没有左孩子,那就往父节点退,直至有左孩子),接着沿着路径能往右孩子移动就往右,否则就往左,得到叶子节点的起始地址是最靠近要查找ip的左边的,再根据起始地址与长度来判断当前ip在不在范围内。这个我想了大概五分钟,也是因为受到了B+树的启发想出来的解决方案

喜欢玩什么游戏?我回答我的世界(Minecraft)

那合成表的数据结构了解下?

最后简单的问了下我树,为什么有红黑树,红黑树这么复杂,BST或AVL不好吗之类的问题,数据库的B+树有啥优势等等

 

面完没有HR面,我以为已经挂了,因为一面面试官明确跟我说过开发游戏还是主要用c/c++,而我学的是Java比较多,我觉得很可能这点就被刷掉了,不过很惊喜昨天收到了offer。给我的感想就是语言是工具,重要的是思想,而且现在编程语言这么多,能够触类旁通也是很重要的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Kurozaki_Kun/article/details/82876582

智能推荐

Cocos2d-x 窗口大小调整_cocos2dx设置窗口大小-程序员宅基地

文章浏览阅读4.2k次。打开src目录下的AppDelegate.cpp文件,若无修改则在第45行处找到全局声明的Size变量,修改`designResolutionSize`中的大小即可。_cocos2dx设置窗口大小

springboot接收枚举值的默认方式_springboot get请求怎么接收前端传递的枚举数字-程序员宅基地

文章浏览阅读1.6k次。测试代码:@PostMapping() public void test(@RequestBody Student student){ System.out.println(student.getLover().name()); }class Student{ private Lover lover; public Lover getLover() { return lover; } public void setLover_springboot get请求怎么接收前端传递的枚举数字

【数学建模笔记】【第七讲】多元线性回归分析(二):虚拟变量的设置以及交互项的解释,以及基于Stata的普通回归与标准化回归分析实例_stata两个虚拟变量的交互项-程序员宅基地

文章浏览阅读1.5w次,点赞24次,收藏120次。简单来说就是去量纲后的回归(因为你要比较不同变量之间的显著性的大小,那么带着量纲怎么比,所以先把量纲去掉,然后再比较)官话:为了更为精准的研究影响评价量的重要因素(去除量纲的影响),我们可考虑使用标准化回归系数。_stata两个虚拟变量的交互项

mysql-程序员宅基地

文章浏览阅读203次。有时候安装mysql后使用mysql命令时报错 Can't connect to MySQL server on localhost (10061),或者用net start mysql 时报服务名无效,一般是因为mysql服务没有启动。这时候可以用管理身份运行cmd.exe(注意必须是管理..._c:\program files\mysql\mysql server 5.6\bin>mysqld --install install/remove

亚信科技java笔试题答案_亚信笔试题卷以及答案.docx-程序员宅基地

文章浏览阅读6.2k次,点赞3次,收藏44次。亚信联创科技校园招聘B 卷考试时间60_分钟 _考试方式(闭)卷(本试卷满分 100 分,答案请写在答题卡上)请不要在问卷上答题或涂改,笔试结束后请务必交回试卷部分内容分值备注一、计算机基础40分C/C++语言基础40分技能部分二、二选一JAVA 语言基础40分三、数据库20分总分100 分第一部分——计算机基础一、选择题(每题 2 分,总分 40分)1.CPU 状态分为目态和管态两种..._亚信科技java实习笔试题

三线城市程序员的薪资待遇怎么样?我分享提高java技术水平的几个方法_三线城市学java-程序员宅基地

文章浏览阅读1.3k次。3年对一个程序员来说是非常重要的。像我自己本身就是做程序员的,目前的薪资待遇是13K左右,虽然在我所在的公司不是最高的,但在所在的这个城市的消费水平来说,除了日常的开支,包括房租、水电、伙食、人际交往等费用之外,还能留下一部分闲钱自己存起来。不同城市的薪资待遇是不一样的,这主要是由于当地的消费水平和经济发展水平不同,所以如果你想要更高的薪资待遇,就要考虑在一线城市或者经济发达的城市工作。一个有着丰富工作经验的程序员,他的技能水平、经验和能力都比没有经验的程序员更加出色,所以他们的薪资待遇也会更高一些。_三线城市学java

随便推点

恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计...-程序员宅基地

文章浏览阅读418次。标签PostgreSQL , 标签 , 推荐系统 , 实时圈人 , 数组 , gin , gist , 索引 , rum , tsvector , tsquery , 万亿 , user , tag , 淘宝背景我们仅用了PostgreSQL的两个小特性,却解决了业务困扰已久的大问题。推荐系统是广告营销平台的奶牛,其核心是精准、实时、..._实时圈人

软件测试风险追踪表_软件测试风险管理表格-程序员宅基地

文章浏览阅读430次。软件测试风险追踪表风险追踪表 项目名称: 填制人: 编号 风险描述 影响 风险等级 发生的可能性 应对策略 状态 责任人 备注 ..._软件测试风险管理表格

AAC ADTS封装实现-程序员宅基地

文章浏览阅读1.2k次。一、AAC音频格式种类有哪些AAC音频格式是一种由MPEG-4标准定义的有损音频压缩格式。AAC包含两种格式 ADIF(Audio Data Interchange Format音频数据交换格式)和ADTS(Audio Data transport Stream音频数据传输流)。ADIF特点:可以确定的找到音视频数据的开始,不需要进行在音视频数据流中间开始的解码,它的解码必须在明确的定义开始。应用场景:常用在磁盘文件中。ADTS特点:具有同步字的比特流,解码可以在这个流中任何位置开始。类似于mp_aac adts

Unity基础概念_unity基本概念-程序员宅基地

文章浏览阅读213次。像要使用Resouce类,必须创建一个 Resouce 文件夹,然后把需要的资源放进去,才可以在代码中设置路径进行访问_unity基本概念

在gitlab中指定自定义 CI/CD 配置文件_gitlab配置cicd-程序员宅基地

文章浏览阅读2.4k次。指定自定义 CI/CD 配置文件,顾名思义就是在项目中指定文件来代替默认的.gitlab-ci.yml文件的方式来运行流水线。以往我们在使用流水线的时候,都是默认将.gitlab-ci.yml文件存在在项目的跟路径下,但是我们也可以指定备用文件名路径,或者不想在每个项目中来维护这个yml文件,那么通过自定义 CI/CD 配置文件便可以实现。_gitlab配置cicd

mysql出现#1063 - Incorrect column specifier for column 'id'的解决方法_sql 错误 [1063] [42000]: incorrect column specifier -程序员宅基地

文章浏览阅读1w次。出现这个表示如果设置了自动增长,字段类型应该设置为int整型。_sql 错误 [1063] [42000]: incorrect column specifier for column 'id' incorrec