今天下午,参加了阿里巴巴、灵犀互娱、游戏研发工程师的一面,感觉提问的问题不是很难,但是可能基础不是很好,并且游戏这方面接触的也比较少,所以面试的表现不是很好。

面试集中在以下几个方面:

1. C++基础知识

构造函数是否可以作为虚函数?

答案:构造函数是不可以作为虚函数的。
为什么呢?

  1. 因为构造函数是,需要确定对象的类型,而虚函数是在运行期间确定类型的,因此编译器无法知道是要构造基类对象,还是构造派生类的对象,因此构造函数不可以是虚函数。
  2. 虚函数的执行依赖于虚函数表,而虚函数表是在构造函数中进行初始化工作的,即初始化vptr,指向正确的虚函数表。在构造期间,虚函数表还没有生成,因此不能将构造函数设为虚函数。

多态的原理

通过基类引用或指针调用一个虚函数时,根据对象是基类对象还是派生类对象,调用相应的基类或派生类的函数。

通过虚函数表来实现。

2. 如何实现一个游戏中任务?

怎么存储数据的?
如何实现交互?

3. 如何实现一个游戏中的排行榜?

这个当时面试的考虑了一个很憨的数据结构,想通过 一层中转,引入一倍的空间,实现根号n级别的复杂度,但是想了想,通用性很不方便。

(1)假设战力上限最高千万级别,而且玩家数量比较多

后来想想,引入一层中转不够用,也不够灵活,那么引入多层中转呢,这不就是 一个二叉排序树了吗,从最大的区间一层层的往下划分,直到将所有战力值区间都给划分了。

假设战力值最高为百万、千万级别,这种方法引入的空间开销为节点数的两倍,大概几百兆级别,差不多够用了。

更新排行榜:
二叉排序树,插入和删除的复杂度都是O(log(n))级别的从对应的战力值区间进行向上更新,也算是比较快速了。

查询个人排名:
这个计算一个树上前面的区间的数量即可,复杂度O(log(n))。

退化问题:
可以考虑使用红黑树来进行优化,防止退化。

数组模拟实现简单的二叉排序树:

class Node {  //树节点constructor(value) {this.value = valuethis.left = nullthis.right = null}
}class NodeSearch {  //搜索树constructor() {this.root = nullthis.len = 0}add(key) { //生成节点let node = new Node(key)if(this.root) {this.insertNode(this.root,node)}else{this.root = node}this.len++return this}insertNode(root, node) { //插入节点if(root.value > node.value) {root.left ? this.insertNode(root.left,node) : root.left = node }else{root.right ? this.insertNode(root.right, node) : root.right = node;}}toTree(arr) { //生成树if(toString.call(arr) !== "[object Array]") return falsefor(let i=0;i<arr.length;i++) {this.add(arr[i])}}toArray() {let result = []if(this.len > 0) {const middleOrder = (root) => {root.left && middleOrder(root.left);result.push(root.value);root.right && middleOrder(root.right);return result;};return middleOrder(this.root);}}
}
let arr = [23,3,12,45,3]let ns = new NodeSearch()ns.toTree(arr)
console.log(ns.toArray())

但是如果玩的人很少的话,而战力值对应的区间又很大(一刀999,战力百十亿),这种方法就比较困难了。

(2)假设玩家比较少,而且战力百千亿

一个简单的实现方法:

  1. 先用快速排序等算法进行初始化,复杂度O(n*log(n))。
  2. 每次调整,直接使用冒泡排序的思路(排行榜变化感觉大多数情况下都是逐渐变化,因此利用冒泡排序的特性,这种较好情况的复杂度可以接受,毕竟人不多)

(3)如果玩家百亿,而且战力百万亿(想法很好)

怎么搞呢,我没有想出一种能很好解决的方法,大佬们提示一下。

4. 其他

除了这些问题以外,剩下的就是问了问大学期间有哪些具有挑战性的事件等等 。
基本的开场自我介绍。
结束的有哪些想要继续了解的。

总体感受

自己表现的并不是很好。

首先,C++的基础不够牢固,很多C++的知识点没有答上来,面试官和我都表示很尴尬
{
面试官:怎么回事,小老弟?我这个热场问题你都不行?
我:菜鸡瑟瑟发抖,不敢说话。
// 回去后一定要奋发图强,恶补基础。
}

其次,除了游戏开发这方面不是很了解以外,基础的算法和应变能力也不是很强,希望能继续努力。

阿里巴巴校园招聘——灵犀互娱、游戏研发工程师、一面面经相关推荐

  1. 网易互娱2022校园招聘在线笔试-游戏研发工程师(第一批)

    文章目录 A 身份证合法性检查 B 田径排名 C 永远的七日之都 题目来源:牛客网 考试题型:3道程序题 考试时间:(北京时间,UTC+08:00)2021年08月07日 19:30:00 -- 22 ...

  2. 2020届秋招 网易互娱游戏研发工程师面经(已offer)

    一面: const用法,const函数等: epoll.select.poll区别? epoll用什么实现的? LRU怎么实现的? static的作用 进程间通信方式有哪些? 线程间通信方式有哪些? ...

  3. 20190822网易互娱游戏研发

    2019.8.22 网易互娱游戏研发工程师 一面,45分钟 代码测试:size_t strlcpy(const char* src, char* dest, size_t size); size表示目 ...

  4. 2017 网易游戏互娱游戏研发4.21(offer)

    网易游戏互娱(offer) 去年这个时候就参加过网易游戏的实习生招聘,到今年总共收到了4次拒信.不过这次运气好,终于get了最想要的offer.去年实习生互娱笔试挂,秋招笔试挂,今年春招互娱投了连笔试 ...

  5. 阿里巴巴集团2014校园招聘笔试题------9-22北京 研发工程师

    转自 http://blog.sina.com.cn/s/blog_6f83fdb40101eyzw.html 阿里巴巴集团2014校园招聘笔试题---研发工程师 (9月22北京) (答案仅是个人 ...

  6. [面经]网易互娱 游戏研发 offer√

    拿到字节的意向书后闲来无事,多面几个看看自己到底什么水平.结果一不小心拿到了网易互娱的offer,薪水真是香,比字节还高了几千,没想到会这么高,看到薪资时惊呆我了.但是慎重考虑后还是拒了,选了字节.纯 ...

  7. 阿里巴巴校园招聘 —— 灵犀游戏开发测试岗笔试题目总结(菜鸡版解析)涉及知识点——十字链表、线程与堆栈、FTP、Telnet、红黑树、哈夫曼树、平衡二叉树、乐观锁、悲观锁、HTTP、NIM游戏

    内容 感觉内容无非是那几个: 数据结构与算法 + 计算机网络 + 操作系统 + C++基础语法知识 简单的送分题我就不说了,我说几个还有点迷惑性的点来整理一下: 1. 十字链表 在Linux内核中应用 ...

  8. 网易互娱游戏研发岗准备

    历史经验 Python大类 Python 都用了哪些模块?用的是 Python 2 还是 Python 3?2 和 3 有什么区别? range() 函数返回什么? import 是如何加载的?如果想 ...

  9. 2022暑期实习网易互娱游戏研发

    笔试三题,150分钟 足球比赛,多属性排序 六个位置,每个位置一堆选项,选择暴击率大于等于100且伤害值最高的排列,dfs 迷宫,一次最多K步,M位不停留,W位是障碍,求最少回合数 一面 手撕代码(多 ...

最新文章

  1. Lidar与IMU标定代码实战:lidar_align
  2. 编译Android源码前的一个步骤
  3. MySQL高级 orderby 优化
  4. 微服务与Spring-Cloud的关系(区别)
  5. C和指针之二维字符串数组用指针数组、数组指针、二级指针打印
  6. [CodeJam 2021 Round 3] Square Free(调整法 / 字典序最小解网络流)
  7. alt复制选区就会卡 ps_PS入门视频教程笔记整理(二)工具栏介绍一
  8. 给页面中的所有链接新窗口中打开
  9. QQ号双主号要求验证码解决方法
  10. 动手实操丨基于随机森林算法进行硬盘故障预测
  11. JDBC 增删改查操作示例
  12. C语言 · 进制转换
  13. windows入门Elasticsearch7.10(es)之3:本地集群搭建
  14. mysql数据库日志操作
  15. 法国计算机高等工程师学院排名,法国人工智能专业大学排名(2020年USNEWS)_快飞留学...
  16. 《建筑工程定额与预算》
  17. python小白入门第二课-标识符数据类型字符串方法
  18. 【机器人基础】阻抗/导纳控制深度解析
  19. stm32开发之使用Keil MDK以及标准外设库创建STM32工程
  20. Cesium实现自定义的广告牌效果

热门文章

  1. Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记
  2. 猿创征文|风起YuKon(禹贡)-空间数据库结缘数字孪生和实景三维建设
  3. 学生信息管理系统的解析
  4. 微信上线朋友圈搜索可指定好友和时间段
  5. Cockroach数据库初体验
  6. SurfaceView 黑屏
  7. 技术干货 | pytest 自动化测试实战展示
  8. 在自己博客上添加自己的“微博”栏目
  9. 【RPC】RPC基本介绍
  10. 系统困境与软件复杂度:为什么我们的系统会如此复杂?