20200507字节跳动后台面试
1、按照tcp/ip协议网络可以分为哪几层
从上至下:应用层、传输层、网络层、数据链路层
1、tcp报文头部加了哪些东西
16位源端口号、16位目的端口号、6位标志位、32位序号、32位确认号等。
可参考https://blog.csdn.net/zeqi1991/article/details/81582985
2、在网络层除了ip协议还有哪些协议?ICMP\IGMP\ARP\RARP
http协议解释一下
3、在一个浏览器中输入一个网址并打开会发生哪些事情
浏览器根据网址获取ip,首先在浏览器缓存上寻找ip,然后在系统缓存中寻找,然后在dns服务器上寻找,最后在根服务器上寻找。一旦找到ip就通过向服务器发起内容请求,服务器对其请求进行响应,浏览器和服务器之间的通信过程用的是http协议。浏览器收到服务器传回来的超文本,对超文本进行解析和渲染,将解析的结果进行展示。
4、常见的http状态码分为哪几类?
2XX:客户端的请求被服务端正常处理
3XX:客户端需要进行重定向或其他某些特殊的处理
4XX:客户端发生错误
5XX:服务端发生错误
常见的状态码如:
200:服务器成功返回网页
404:客户端请求的网页不存在
503:服务端不可用
5、c++的编译时多态和运行时多态
编译时多态又叫静态多态,早绑定,本质是重载,就是在同一个作用域内定义多个函数名相同但是形参或者是返回值不同的函数,对这些函数进行调用的时候,在编译时就知道具体调用的是哪个函数。
运行时多态又叫动态多态,晚绑定,本质是重写或者说覆盖,是在子类中重写了父类的虚函数,根据父类指针或者是引用,是否指向子类对象,在运行时确定该指针或者是引用调用的是哪个函数。如果指向的是父类对象,调用父类中的函数,指向子类的对象调用子类中重写的函数。
6、c++中内存分为哪些区,都存储什么东西
分为五个区:
只读常量区,如字符串、被int const修饰的全局常量
全局区,也叫静态存储区,用于存储全局变量或者是被static关键字修饰的变量,被static修饰的局部变量生命周期比其他局部变量要长,也放在该区。
栈区:存放函数的形参和局部变量
堆区,由程序员手动new或者是malloc分配的内存,大小不固定,可以动态地扩张或者是缩小。
代码区:存放已编译程序的机器代码,在函数加载运行的时候这一区域会和只读常量区合并,防止意外的改写。
可参考:https://www.zhihu.com/question/26224882?sort=created
7、c++中volentail关键字的作用
7、c++中map的实现所用到的数据结构,该数据结构在内存中是怎么样存储的
参考:https://blog.csdn.net/lzl980111/article/details/102936924
二叉树一般有两种存储结构,一种是连续内存的顺序存储结构,另一种是链式存储结构,即对于每个节点有两个成员来存储其左右孩子节点的地址,通过这两个成员来找到孩子节点。除了满二叉树和完全二叉树,大多数树采用的都是链式存储结构。
map用到的数据结构是红黑树,红黑树的逻辑结构是根节点和叶子节点都是黑色节点,叶子节点为空节点。如果黑色节点的孩子节点不是叶子节点,那么其孩子节点的颜色是红色,红色节点的孩子节点均为黑色节点。从跟节点到叶子节点的路径上不存在两个连续的红色节点。红黑树并不是一种严格的二叉平衡树,即其左子树和右子树的高度差可能会大于1。红黑树在最差的情况下进行查找、插入和删除的时间复杂度是O(log n),其中n是整棵树节点的个数。红黑树是一种自平衡的二叉查找树。
红黑树中节点之所以要分为红色和黑色,是用于根据红黑树的性质进行自调整来保证查找和删除的效率。自平衡过程可参考:
https://www.cnblogs.com/chinxi/p/12174162.html
7、虚函数和纯虚函数有什么区别
纯虚函数没有函数体的实现,一般用一个函数的定义加上等于0来表示。而虚函数有函数体。这两种函数都可以在子类中被重写。含有纯虚函数的类不能用于实例化,而含有虚函数的类可以。
8、用过哪些数据库
9、编程题:如何判断一棵树是二叉搜索树