首页 > 字节跳动-测试开发日常实习-一面面经
头像
G饱饱
编辑于 2021-01-29 22:18
+ 关注

字节跳动-测试开发日常实习-一面面经

1、C++子类继承父类方法,该方法是虚函数,如何使用子类调用父类方法?
答:在调用父类的方法的前面加一个作用域符::,如A继承B的fun函数,那么用A调用B的fun函数A.B::fun()。

2、C++中set和list的区别?
(1)vector和list的区别:
答:vector和数组类似,拥有一段连续的内存空间。vector申请的是一块连续的内存,当插入新的元素内存不够时,通常以两倍重新申请一块更大的内存,将原来的元素拷贝过去,释放旧空间,因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为O(n)。
list是双向链表实现的,因此内存空间是不连续的。只能通过指针访问数据,所以list的随机存取非常没有效率,因为可能要遍历整个链表才能做到,时间复杂度为O(n);但由于链表的特点,可以高效地进行插入和删除,(不需要拷贝和移动数据,只需要改变指针的指向就可以了),时间复杂度为O(1).
总之:如果需要高效的随机存取,而不在乎插入和删除的效率,选vector。
如果需要大量的插入和删除,而不关心随机存取,则使用list。
(2)set和list的区别?
答:set是属于关联容器,底层是红黑树,插入和删除的效率很高,为红黑树的插入复杂度,O(logn),set是存储值的容器,相当于一个集合,且默认以升序排列。list的底层是双向链表,是顺序容器。(set和vector的区别是set不包含重复的数据)

3、说一下C++智能指针?
答:智能指针其实是将指针进行了封装,可以像普通指针一样进行使用,同时可以自行进行释放,避免忘记释放指针指向的内存地址造成内存泄漏。

4、说一下深拷贝和浅拷贝?
答:浅拷贝就是将对象的指针进行简单的复制,原对象和副本指向的是相同的资源。
而深拷贝是新开辟一块内存空间,将原对象的资源复制到新的空间中,并返回该空间的地址。必须实现拷贝构造函数才能进行深拷贝。
深拷贝可以避免重复释放和写冲突。例如使用浅拷贝的对象进行释放后,对原对象的释放会导致内存泄漏或程序崩溃。

5、说一下重载和重写?
答:重载是指函数名相同,参数列表不同的函数实现方法。它们的返回值可以不同,但返回值不可以作为区分不同重载函数的标志。
重写是指函数名相同,参数列表相同,只有方法体不同的实现方法,即函数花括号里面不一样,一般用于子类继承父类时对父类方法的重写,父类函数中必须要有virtual关键字。(子类的同名方法屏蔽了父类方法的现象称为隐藏。)

6、C++程序的编译过程?
答:四步:预处理、编译、汇编、链接。
(1)预处理用于将所有的#include头文件以及宏定义替换成真正的内容。
(2)将经过预处理之后的程序转换成为特定汇编代码。
(3)汇编过程将上一步的汇编代码转换成为机器码,这一步产生的文件是二进制格式。
(4)连接过程是将多个目标文件以及所需的库文件链接成最终的可执行文件。

7、说一下C和C++的区别?
答:(1)C是面向过程的语言,C++是面向对象的语言。C++有“封装、继承和多态”的特性。封装隐藏了实现细节,使得代码模块化。继承通过子类继承父类的方法和属性,实现了代码重用。多态则是“一个接口多个实现”,通过子类重写父类的虚函数,实现了接口重用。
(2)C和C++内存管理的方法不一样,C使用malloc/free,C++使用new/delete。
(3)C++中还有重载和引用的概念,C中没有。
(4)C++中增加了许多类型安全机制,如四种强制类型转换;支持泛型编程,如模板类,函数模板。

8、HTTP常见的状态码?
答:1xx:服务器收到请求,需要请求者继续执行操作。
2xx:ok,请求成功。
3xx:重定向,资源已经重新分配。
4xx:客户端请求错误
5xx:服务器错误

200,请求成功
301,资源(网页等)被永久转移到其他URL
302,资源临时移动
403,forbidden,服务器理解客户端的请求,但是拒绝执行此请求,请求资源被拒绝。
404,not found,用户输入错误的链接,该链接指向的网页不存在。
500,服务器内部错误,表明服务器端在执行请求时发生了错误。
502,作为网管或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
503,服务器超载或停机维护
504,网关超时,服务器作为网关或代理,未及时从上游服务器接受请求。

9、HTTP的请求方法有哪些?get和post的区别。
答:HTTP请求方法包括get,post,put,delete。
get和post的区别:
(1)get方法不会修改服务器上的资源,他的查询是没有副作用的,而post有可能会修改服务器上的资源。
(2)get可以保存为书签,可以用缓存来优化,而post不可以。
(3)get把请求附在url上,而post把参数附在HTTP包的包体中。因为get参数暴露在url上,所以安全性不能保证,还有长度的限制。
(4)get的参数一般只支持ASCII,post可以传送二进制的编码信息。
(5)get方法更快,因为get方法和post方法请求流程不同。get方法是将头和包体一次性发给服务端,然后服务端回复一个200 OK;而post方法是先发送头部,服务端回复一个100 continue,然后浏览器再继续发送包体,服务端回复一个200 OK。另外,get方***被浏览器缓存,进一步提高了速度。
(6)get用来查询数据,post用来修改数据。

10、TCP和UDP的区别?
答:(1)TCP面向连接,UDP无连接。
(2)TCP可靠,保证安全;UDP尽最大努力交付,不保证安全。
(3)TCP是点对点的,UDP可以一对一、一对多、多对多、多对一。
(4)TCP开销较大,UDP开销较小。TCP提供流量控制和拥塞控制,UDP没有。
(5)TCP数据包是没有边界的,会出现粘包的问题,UDP包是独立的,不会出现粘包的问题。
(6)在应用方面,如果强调数据的完整性和正确性用TCP,当要求性能和速度的时候,使用UDP更加合适。

11、TCP和UDP的应用场景?
答:UDP:DNS协议,看视频,发语音,QQ聊天,共享屏幕。
TCP:HTTP协议,QQ传文件,邮件,登录。

12、MySQL中如何查询第5页到第12页的内容?
答:limit(重点中的重点,分页查询全靠它)
语法机制:limit startindex length——startindex表示起始位置,从0开始,length表示取几个.故答案为:limit 4,11;

13、MySQL排序的的关键字?降序?
答:order by ...desc

14、Linux中用什么指令查看文件内容?
答:cat (-n 显示行号) +文件名,但是只读形式,vi/vim才能对其编辑
more +文件名 (more是一个基于vi编辑器的文本过滤器,以全屏幕的方式按页显示文本文件的内容,即分页显示)
less +文件名(功能与more相似但是比more更强大,分屏查看文件内容。并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对大型文件来说效率更高)
head -n 5 +文件(查看文件头5行内容);tail -n 5 +文件(查看文件后5行的内容)

15、Linux显示当前目录所有的文件和目录?
答:ls -a

16、寿司代码:反转链表

更多模拟面试

全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐