网易互娱初级游戏研发工程师面试

面经问题来源

牛客网-感谢大佬的经验

开放地址法插入哈希表,要求元素不能重复,表的长度调整当然也得考虑

开放地址法:当hash冲突发生时,在hash表中找空位插入。
开放地址法有三种:

  • 线性探测
  • 二次探测(也叫平方探测)
  • 伪随机数法
    如果hash表中有相同的元素则不插入

哈希表怎么扩张、插入和删除

扩张:redis的hash表扩张方法如下。
当原Hash表的装载因子==1,则新建一个hash表,将原hash表中的非桶中元素移动到新hash表中,然后再插入新元素到新hash表,这样做可以避免插入元素操作因为hash表扩容而等待过长时间。

插入:先根据给定的输入入计算一个hash值,然后在hash表中找到该hash值对应的位置,查看是否有相同元素或hash冲突,有冲突则处理冲突,有相同元素则不插入。

删除:根据给定输入在hash表中查找位置,如果找到该元素,则从该位置删除该元素。

智能指针

智能指针:能自动释放内存的指针。

C++中的智能指针有三种:

  • shared_ptr:允许多个指针指向同一个对象
  • unique_ptr:指针独占对象,不允许共享
  • weak_ptr:弱引用。

const和constepr

const指的是编译期常量和运行时常量,两者并没有区分
constexpr特指编译期常量

n个数找最大或最小的k个

堆排序

n个数里面删k个,求剩下的数里面能组成的最大数

用堆排序删除最小的k个即可

树的后序遍历非递归版

思路:递归的本质是将函数的调用进行入栈,执行按照出栈顺序执行。故,这个题目的意思是让我们自己构建这个栈。按照后序遍历的顺序,先将左孩子入栈,直到叶子节点,然后访问并出栈,每出栈一个元素,就要检查栈顶是否有右孩子,有的话要入栈,右子树同左子树的过程一致。

TCP和UDP的区别与联系

知乎
总结如下:

  • TCP是可靠的,UDP不可靠。
  • TCP是面向连接的,UDP是面向报文的。
  • 对系统资源的要求(TCP较多,UDP少)
  • UDP程序结构较简单
  • 流模式与数据报模式
  • TCP保证数据正确性,UDP可能丢包;
  • TCP保证数据顺序,UDP不保证。

一个文件里某函数a()调用另一个函数b(),中间发生了什么描述下(汇编层面)?函数是怎么保存当前堆栈状态的?

百度知道,感谢大佬
函数(如strlen)的名称类似变量名称,指向内存中某个地址。区别在于变量指向的目标是某个值,函数名指向的目标是某段代码。函数被调用前,调用者(如main)将当前代码执行位置压栈,跳向内存中函数代码位置执行之后返回堆栈中保存的调用者(main)的原执行位置,弹栈后继续执行。
另,用户函数和系统函数在编译时一般是分开存放的。

最大递增子序列动态规划的状态方程,分析怎么得出来的

博客园

def LongestSub(a):
    # 求a的可以不连续的最长递增子序列长度
    n = len(a)
    dp = [1 for i in range(n)]# dp[i]表示从0到i的最长递增子序列(可以不连续)长度
    Max = 1
    for j in range(n):
        for i in range(j):
            if a[i] < a[j] and dp[i] + 1 > dp[j]:
                # a[j]这个位置结尾的最长递增子序列,应该是0-(j-1)的所有截止位置小于a[j]的最长递增子序列长度中最长的长度+1
                dp[j] = dp[i] + 1
        if dp[j] > Max:
            Max = dp[j]
    return Max
a = '1232456'
print(LongestSub(a))

C 11新增特性?move语义?非类型的模板写一个我看看?

C++11新特性
move语义:拷贝+清除原指针内容

一个算法实现判断两个矩形是否有重叠(两个矩形可旋转)

CSDN

手撕一个数组扩容Java

class Arr{
	private int[] a;
	private int len=100;
	private float cover=0.8;
	private int top=0;
	Arr(){
		a = new int[len];
	}
	public void add(int k){
		a[top++] = k;
		if(top>=cover){
		len = 2*len;
		a_new=new int[len];
		for(int i=0;i<top;++i){
			a_new[i] = a[i];
		}
		a=a_new;
		}
	}
	public int pop(int idx){
		temp = a[idx];
		for(int i=idx; i<top; ++i){
			a[i]=a[i+1];
		}
		return temp;
	}
}

将矩阵中三角形区域的点都标为1(其他为0)

前提:给定三角形的三个端点p1,p2,p3和一个矩阵,矩阵中元素全都为0。
思路:用向量外积。对于给定的三个端点,可以得到x轴和y轴的范围,对这个范围进行穷举。每次得到一对(xi,yi),即一个点pi;计算向量<p1,p2>,<p2,p3>,<p3,p1>;分别计算<p1,pi>和<p1,p2>的外积,<p2,pi>和<p2,p3>的外积,以及<p3,pi>和<p3,p1>的外积;当且仅当这三个外积的结果都大于等于0时,点pi在p1,p2,p3三个端点围成的矩形内部或边界上,则标记为1。

二面准备

面经来源-知乎
0)自我介绍

1)说说你比较有成就的一个项目

2)你对STL了解吗?是通过读源码吗(STL源码剖析)?通过这本书,学到了什么?
百度知道
菜鸟驿站教程
C语言中文网
3)说说你最擅长的三个方面

4)B+、B-树了解吗?(不太了解,知道avl树和红黑树)
CSDN-多种B树总结
CSDN-点赞较多
二叉树的各类计算公式
5)什么时候读的UNIX网络编程和Redis设计与实现?

6)Redis事务支持到什么程度(不会)

7)Redis的持久化?(RDB和AOF)。RDB怎么实现的?

8)读Redis的源码了吗?(读了一部分)

9)主从服务器如何同步?如何发现主服务器掉线?谁来发现?如何实现?哪个服务器来实现?(????懵)

10)主服务器故障,在从服务器中如何选举一个新的主服务器?(a:从服务器直接向邻居拉选票;q:会出现死锁,怎么解决?a:发送的数据包带时间戳;q:时钟不同步呢?a:那就根据各个从服务器的数据状态。)

11)设计一个分布式邮件系统,包括一对一发送和群发功能?(面试官递过来了纸和笔,慌的一批)

12)1g数据的文本文件,不知道行数,每行都是一个整数,求和?可以使用电脑一台,4核。(ans:哈希成四份文件?ques:效果可能更差,再想想。… 懵)

13)求和的那题。 比较耗时的是那部分?(ans:字符串转为整数。ques:嗯,不是,I/O最耗时,再想想?…继续懵)

14)设计模式了解哪些?(Reactor、Observer)

15)C++11了解多少?
简书
知乎
CSDN
16)有没有经历过比较大的打击?

17)职业规划?

18)薪资待遇?

19)有没有收到其他offer?

20)还有什么问题吗?简历留下,面试结束。这周或下周给结果。等消息吧。

二面部分后续整理

1.笔试题哈希表扩张,怎么插入,怎么rehash的,细节呢?
2.聊了一些实习的公司的事,就当是缓和气氛?然后开虐?
3.设计一个timer(float dt, function<> callback)函数,传入时间和函数指针,到指定时间后调用函数(学过cocos的都知道,就是设计scheduleUpdate),我直接算执行每个回调需要的具体时刻,然后放最小堆了,不知道对不对。
4.设计完了?你确定?描述下?然后呢?怎么优化?
5.一个黑白颜色各占一半的转动的圆盘,可以在上方随意放检测下方颜色的传感器,最少放几个可以知道是顺时针还是逆时针转?
6.聊项目,聊cocos,为什么每个node需要visit()?干嘛用的?cocos内存管理?PoolManager干嘛用?
7.用过哪些设计模式?组合和继承区别?各自优缺点?(我就是扯引擎用到的那些)
8.字符串翻转。
9.为什么之前选择去棋牌公司实习?不是浪费时间嘛?不过你干的活倒也不是完全没含金量(一边看着我的简历),…

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值