网易雷火 游戏服务端 一面面经

概述:4月初投递,4月底做笔试,5月8号一面,感觉答的一般,但是到现在还没有挂也没二面,不过有后续应该也不会再面了,就发一下面经吧,一共50分钟,主要是两部分,以出题的形式考八股,根据实际游戏考察场景题。

面试流程:

1.自我介绍

2.数制和位操作的考察

int a = 00000162;  
a >> 2;
  • 我直接当十进制算,算出个40,面试官提示问我前面的0有没有意义,我说没有(我是傻比)
  • 正确答案:0开头表示8进制,右移两位是00000034,十进制输出28

3.虚函数、构造函数和析构函数的考察

struct A{
    A() {foo();}
    virtual ~A() {foo();} 
    virtual void foo() {cout << "1" << endl;}
    void bar() {foo();}
};

struct B : public A {
    void foo() {cout << "2" << endl;}
};

int main() {
    B b;
    b.bar();
}
  • 一开始只答了bar会输出2,面试官提示看B b这一行,然后看到构造函数,回答会先输出1,然后面试官问还有没,又看到析构函数,一开始回答1,后面又改成了2(脑抽)
  • 正确答案:121;子类对象b构造时先调用父类的构造函数,此时子类部分还没生成,所以调用父类的虚函数输出1,然后子类对象b.bar()时调用this->foo(),通过虚机制找到子类的虚函数输出2,最后b析构时先析构子类部分,再调用父类析构函数析构父类部分,此时子类部分已析构,调用父类的虚函数输出1
  • 插曲:此处面试官问了下我系统学过C++吗,被狠狠质疑(哭),还好后面的题慢慢开始证明自己了

4.分析下delete this,是否可以这么用

  • 析构函数中不能用,因为delete本身有调用析构函数的步骤,会形成死循环
  • 普通成员函数中可以使用,使用后对象被释放,之后不能访问this,但是可以继续运行,访问其他的变量

5.32位linux系统上,malloc 5G内存可以吗

  • 不行,虚拟内存4G,然后内核空间占用1G,所以最多3G

6.malloc 3G和malloc 10k有什么区别

  • 小内存用brk()分配内存到堆上,维护了内存池,释放内存时放到内存池中
  • 大内存用mmap()分配到文件映射区,释放内存时真正释放

7.考察内存对齐

// 64位系统,int 4B
#include <iostream>
using namespace std;

struct A {
    int a;
    char b;
    long c;
    char* d;
};

int main() {
    int a;
    cout << sizeof(A) << endl;
}
  • 24;int 4,char 1,long考虑内存对齐,从第8位开始存,char* 指针8位,从16位开始存,所以最终是24

8.游戏开发中,客户端到客户端传递结构体数据需要考虑什么

  • 不太会,想到了TCP粘包,然后说要在前面加一个长度表示结构体的长度;提了下大端序或小端序
  • chat的答案
  • 内存对齐(是否需要传填充的字节,序列化和反序列化)
  • 端序
  • 不同系统的数据类型、大小、兼容性

9.大端序和小端序是什么

  • 大端序是低位地址存高位数据,小端序相反

10.怎么判断自己的电脑是大端序还是小端序

  • 一开始答共用体中int转char,观察得到,然后面试官让我现场写,忘记union怎么用了(尴尬,疯狂道歉,实际上和对象使用成员变量一样);然后又说有系统调用可以实现,面试官问是什么原理,就硬扯了下概念
  • 实际上很简单,就是int 1转char,检查首位是否为1
bool isLittleEndian() {
    int num = 1;
    return (*(char*)&num == 1);
}

11.最小堆8 15 10 28 35 16 12,删除堆顶,将堆尾置于堆顶,需要比较几次恢复堆

  • 3次:15比10、12比10、12比16

12.开始游戏场景题,平时玩什么游戏

  • 王者荣耀(难绷)、饥荒

13.关于游戏开发中的网络同步有了解吗

  • 没有了解,询问是否与线程同步有关,面试官表示没到这么细的层面

14.多个玩家对战,需要将攻击数据进行同步,有什么优化的方法,可以从两个人对战开始

  • 从这开始被拷打(汗流浃背),开始乱扯回合制采用信号量或锁进行同步非回合制采用乐观锁的思想,先不加锁,如果冲突的话重新处理(反问如何重新处理,崩溃)

15.成千上万人的团战中的技能特效,攻击伤害等等信息量非常大,系统怎么去减少这个同步量

  • 合并信息,反问什么能合并什么不能?特效可以合并,攻击不能合并

16.在饥荒的地图上,有很多玩家在各个地方进行战斗,这些信息如何被一个玩家获知

  • 主要关注自身附件的场景信息,地图其他地方的信息延迟处理

17.王者荣耀的匹配机制如何设计

  • 按段位划分到不同数据结构中保存,在各个数据结构中进行挑选(很草率)

18.linux命令?gdb调试?

  • 都不怎么会,用的vscode调试

19.进程崩溃的原因

  • 访问无效的内存
  • 无限递归造成的栈溢出
  • 内存分配超出范围
  • 补充:
  • 操作系统资源耗尽
  • 除零等异常错误
  • 空指针、未初始化变量

20.反问

  • 游戏开发应该关注学习什么

总结:面试主要是以题目的形式考察八股,然后是结合游戏的场景题,感觉临场发挥不好,题目做的粗心大意,然后游戏场景题完全没了解过,有点答非所问,建议如果想投游戏服务器相关的话提前去了解下游戏场景下的网络同步方法,面试官说这个挺重要的

#我的实习求职记录##软件开发2024笔面经#
全部评论
感觉强度好大
2 回复 分享
发布于 2024-05-31 09:13 广东
那个00代表8进制我觉得够偏门了,谁会专门去学这个。
1 回复 分享
发布于 2024-06-30 16:22 美国
雷火强度这么高吗
点赞 回复 分享
发布于 2024-08-15 01:42 陕西
msvc delete this 直接会报错诶,不管是成员函数还是析构函数
点赞 回复 分享
发布于 2024-07-26 12:10 浙江
佬笔试题是什么,都是编程题吗
点赞 回复 分享
发布于 2024-05-26 15:41 北京

相关推荐

前两题写得快,最后一题也只会个暴力,结束笔试
洛水为天依:第三题卡在了71%,实在看不出来错哪了直接交卷了
投递米哈游等公司10个岗位
点赞 评论 收藏
分享
头像
09-21 16:59
已编辑
门头沟学院 Unity3D客户端
1.&nbsp;请描述一下你使用C#语言的经验,包括你在实习中的具体工作。2.&nbsp;你能否详细解释GC机制?3.&nbsp;你能比较一下Unity的GC机制和C#标准GC的不同之处吗?4.&nbsp;装箱和拆箱操作是如何影响GC的?请举例说明。5.&nbsp;在你的项目中,你通常使用哪些数据结构和算法?6.&nbsp;你是否有手写数据结构的经验?你通常如何实现?7.&nbsp;请设计一个计时器,它能够根据指定的时间间隔和调用次数工作。8.&nbsp;你如何优化大规模任务的计时器设计?9.&nbsp;请分享一个你在实习期间参与的项目,并详细说明它如何优化性能。10.&nbsp;递归可能导致哪些问题?你如何避免这些问题?11.&nbsp;你平时玩哪些类型的游戏?最近玩了哪些游戏?12.&nbsp;你最近阅读了哪些技术书籍?《CLR&nbsp;via&nbsp;C#》这本书给你哪些启发?13.&nbsp;比较浮点数时,为什么需要考虑误差范围?你是如何进行比较的?14.&nbsp;请解释帧同步和状态同步的概念,并讨论它们在多人游戏中的应用。15.&nbsp;在多人FPS游戏中,你如何实现延迟补偿和预测回滚?16.&nbsp;TCP粘包和分包问题是如何产生的?你有哪些处理方法?17.&nbsp;广度优先搜索和深度优先搜索在数据结构和实现上有哪些不同?18.&nbsp;你是否有处理大规模数据或高并发系统的经验?如果有,请分享一些案例。19.&nbsp;你如何评估和优化代码的性能?请提供一些你使用过的工具或方法。20.&nbsp;在你的实习经历中,你学到了哪些团队合作和项目管理的技能?21.&nbsp;你如何处理工作中的压力和挑战?请提供一个具体的例子。22.&nbsp;你对未来的职业规划有何看法?你希望在技术领域达到什么目标?23.&nbsp;你是否有参与开源项目的经验?如果有,请分享你的贡献和学习。24.&nbsp;你如何保持对新技术的持续学习和关注?请谈谈你的学习方法。25.&nbsp;在你的技术生涯中,你遇到过哪些挑战,你是如何克服的?
查看25道真题和解析
点赞 评论 收藏
分享
评论
14
71
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务