字节跳动2020春招C++特效引擎开发岗 面经凉

准备的问题一个没有问,懵逼

C++编译过程:

1.预处理:将#define #include 内联函数 ifdef ifndef等等关键字替换

2.编译:将代码编译成汇编语言

3.汇编:汇编转为二进制文件

4.连接:将各个二级制文件连接城可执行文件

 

进程和线程的区别:

进程是系统分配资源的基本单位,是内存中独立的内存区间,进程之间相对对立。一个进程有多个线程,线程是进程的 一个任务,线程是CPU调度的最小单位,线程之间资源共享,进程切换开销大,线程切换开销小。

 

二叉平衡树:

对于二叉平衡搜索树的最多节点数和最少节点数

最多:完全二叉树-->2^n-1

最少:用dp的方法解决 h(1)=1,h(2)=2,h(3)=h(1)+h(2)+1,h(n)=h(n-1)+h(n-2)+1

 

数据库保护四种:

安全性控制,完整性控制,并发性控制,数据恢复

 

解决死锁的方法:

1.抢夺资源

2.按顺序执行进程

3.超时释放资源

 

const成员函数想修改成员变量怎么办:

将成员变量用mutable修饰即可改变

 

虚函数表是一组虚函数指针的集合。

 

TCP&UDP区别:

TCP是传输控制协议

UDP是用户数据报

TCP是基于连接的可靠传输,因为要三/四次握手,开销大。UDP是基于数据报的,不需要连接,开销小。TCP基于数据流发送无数据结构的二进制串,UDP基于数据报,一次只发送一个报文。TCP是一对一连接传输,UDP可以多对多传输。

 

http是超文本传输协议,是明文传输。https是ssl加密的超文本传输协议,需要CA申请书。http用80端口,https用443端口。http是无状态的意味着,http不会记录当前的任何信息,之后需要http状态就得重传来确定。https是有状态的可以执行加密传输。

 

二叉树的三种非递归遍历(前中还可以,后续还没看)

 

用泳池法进行等概率随机取数(值得一写)

 

二分查找某个数,执行次数就是log2n 向上取整

 

进程和线程在资源分配方面的区别???

 

new malloc delete free区别:

malloc和free是库函数,new和delete是关键字new和delete会调用类的构造函数和析构函数,但是库函数只是申请空间和释放空间并不调用函数,导致内存泄漏。

 

vector和list

vector是单向数组,连续的内存空间,起始地址不变。插入删除会导致内存块的改变,所以修改vector的效率低下。内存不够大的时候,会申请一块足够大的内存,拷贝内存过去

list是双向链表,内存分散。插入删除很好,但是读取效率低下

补充:deque,双向链表,访问效率和vector差不多,删除效率和list差不多,不过他支持双向插入。

 

重载和重写的区别:

override(重写)&overload(重载):

重写是对基类虚函数的实现或重写,返回值、函数名、参数列表数量和类型都是一样的,只是函数体被子类实现了

重载是参数列表数量和类型不同但是方法名和返回值都是一样的

 

虚函数和非虚函数调用的问题

子指针指向父类

父指针指向子类

隐式转换指针

最长字串问题

 

你可能感兴趣的:(字节跳动2020春招C++特效引擎开发岗 面经凉)