[每日学习3.26/3.27] 游戏研发面经学习 - 阿V

1. map中[]跟inserC++)

下标[]方法:若插入元素的键值存在于map中,则更新map对应的value值。若不存在,则创建键值为插入元素的键值的元素,再将插入元素的值赋值给新建元素的值。
insert()方法:若插入元素的键值存在于map中,则插入失败。若不存在,直接将新元素加入到map中。

2. 如何避免头文件重复包含(C++)

头文件重复包含会出现问题:符号(函数、变量、类等)的重定义

解决办法:

1. 

#ifndef _HEADERNAME_H

#define _HEADERNAME_H

//头文件内容

#endif

通过宏定义,当头文件再次被包含,通过条件编译从而忽略内容,但仍然将整个头文件读入,降低编译速度。可移植性高。

2. #pragma once

区别与宏定义处理,该方法不会重复打开相同头文件,编译速度更快。

3.  拥塞控制和流量控制区别(计算机网络)

流量控制解决的是发送方和接收方速率不匹配的问题。

拥塞控制解决的是避免网络资源被耗尽的问题。

4.  TCP流量控制(计算机网络)

流量控制:防止发送方与接收方速率不匹配,可能导致数据丢失

实现原理

1. 发送方解析接收方的响应数据包,根据接收方的接收窗口大小调整自己的发送窗口大小,发送窗口内的数据。

2. 发送方通过向前滑动发送窗口的方式移除已确认被正确接收的数据,并将他们从缓存区删除

5. TCP的TIME_WAIT状态为什么要等待2MSL的时长(计算机网络)

MSL,Maximum Segment Lifetime,最大报文段生存时间。即任何TCP报文在网络中存在的最大时长,如果超过这个时间,这个TCP报文就会被丢弃。

因为客户端不知道服务端是否能收到ACK应答数据包,服务端如果没有收到ACK,会进行重传FIN,考虑最坏的一种情况:第四次挥手的ACK包的最大生存时长(MSL)+服务端重传的FIN包的最大生存时长(MSL)=2MSL

6.  内存管理(C++)

分配方式

1. :分配给函数局部变量等数据,函数结束时自动释放。由于内置处理器指令集中,效率高,但内存容量有限。

2. malloc分配内存,由程序员手动free。

3. 自由存储区:用new分配内存,由程序员手动delete。

4. 全局/静态存储区:分配给全局变量和静态变量。

5. 常量存储区:分配给常量。

7.  堆和栈的区别(C++)

区别

1、管理方式不同:栈是由编译器自动管理,无需我们手工控制;堆释放工作由程序员控制。

2、空间大小不同:默认的栈空间大小是1M,在32位系统下,堆内存可以达到4G的空间,

3、能否产生碎片不同:栈不会产生碎片,堆会产生碎片。

4、生长方向不同:堆生长方向是向上的,向着内存地址增加的方向;栈的生长方向是向下的,向着内存地址减小的方向增长。

5、分配方式不同:栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配、动态分配由alloca函数进行分配。堆都是动态分配。

6、分配效率不同:栈效率高,堆效率低。

 8. vector迭代器什么时候会失效?(C++)

1. push_back导致迭代器失效 :扩容重新申请内存,导致原本的迭代器失效。

2. insert导致迭代器失效:扩容重新申请内存,导致原本的迭代器失效。

3. 删除操作导致迭代器失效:原本迭代器地址改变或删除。

 9. inliine函数可以虚函数码?(C++)

inline函数没有地址,无法将他存放到虚函数表中。

10. 静态成员可以是虚函数吗?(C++) 

 静态成员函数中没有this指针,无法放进虚函数表里面。

11. 联合体、结构体、类的区别(C++) 

1. 结构体:一种数据结构,一些元素的集合

2. 联合体:使用覆盖技术,几个变量互相覆盖

3. :结构体升级版,含有数据成员方法

结构体区别:

1. 结构体不存在任何函数,包括构造函数和析构函数,而且是一个公共的类。

2. 结构体默认成员是public,类默认成员是private。

3. 结构体继承默认public,类继承默认private。

联合体结构体的区别:

1. 占用内存大小不同:结构体里每个数据类型都有独立地址空间,通过内存对齐的方式,占有空间大小,联合体所有数据类型共同占用最大数据类型的地址空间。

2. 同一时刻,结构体所有成员都存在,联合体只存在一个成员。 

12. extern “C” (C/C++) 

实现C和C++混合编程。由于 C++ 和 C 在程序的编译、链接等方面都存在一定的差异,而这些差异往往会导致程序运行失败。

 13. 指针和数组的区别(C/C++) 

数组:数组是用于储存多个相同类型数据的集合

指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址

区别

1. 赋值:同类型指针变量可以相互赋值,数组只能一个一个元素赋值

2. 存储:指针就是一个变量,数组在内存中是连续存放,通过数组下标进行访问。

14. 构造和析构函数调用顺序 (C/C++) 

构造函数的调用顺序

基类构造函数、对象成员构造函数、派生类本身的构造函数  。

析构函数的调用顺序

派生类本身的析构函数、对象成员析构函数、基类析构函数(与构造顺序正好相反) 。

15. DFS和BFS

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZW游戏制造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值