20200905快手一面c++开发岗位

基础题

面试官人很好,问问题也都会尽量选择你比较熟悉的领域和内容去问,代码也会给一些简单的提示,提醒面试者不要紧张.自我介绍结束之后,就是讲一下自己的项目,然后就是提问和算法环节。

C++多态类型

编译期:
重载多态: 函数重载,运算符重载
参数多态: 类模板,函数模板
运行时:
子类型多态: 虚函数

C++如何实现虚函数

通过关键字virtual 修饰的成员函数就是虚函数
子类不会继承父类的虚函数,而是需要实现自己的同名的虚函数,同时维护各自的一个虚函数指针vptr和虚函数表(vTable),vtpr指向虚函数表的地址,虚函数表中存放着虚函数的地址.
asd
Ellipese 继承自Shape

虚函数表存储位置

虚函数表存储在数据区,在同一个类的对象中进行共享.

Unix 如何显示文本后十行

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
参数解释:
-f 该参数用于监视File文件增长。
-c Number 从 Number 字节位置读取指定文件
-n Number 从 Number 行位置读取指定文件。
-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题。
-b Number 从 Number 表示的512字节块位置读取指定文件。
-k Number 从 Number 表示的1KB块位置读取指定文件。

File 指定操作的目标文件名称
上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部开始计算
补充
跟tail功能相似的命令还有:
cat:从第一行开始显示档案内容。
tac:从最后一行开始显示档案内容。
more:分页显示档案内容。
less 与 more 相似,但支持向前翻页
head: 仅仅显示前面几行
tail: 仅仅显示后面几行
n: 带行号显示档案内容
od: 以二进制方式显示档案内容

map和unoerded_map的区别

map底层是红黑树可实现顺序查询.
unordered_map底层是hash函数,不支持顺序查询.

unordered_map的存储增长方式

无序容器unordered_map存储为一组桶,各元素通过hash函数映射到各个桶中.每当桶不够用时,桶数会以大致 bucket[n] = 2*bucket[n-1] + 奇数 (1, 3, 5, 9 …)来增长。与vector 成倍增长倒是不同。

stable_sort 和sort 的算法复杂度

函数名功能描述时间复杂度空间复杂度
-stable_sort对给定区间所有元素进行稳定排序NlogNN
sort对给定区间所有元素进行排序NlogN1

new和operate new的区别

new:
new运算符,c++内置运算符。不能被重载,其行为总是一致的。具体的操作相当于:先调用operator new分配内存,再调用构造函数初始化内存空间,再返回内存空间地址
operator new:
new函数,可重载。要实现不同的内存分配行为,应该重载operator new,而不是new。
placement new
只是operator new重载的一个版本。它并不分配内存,只是返回指向已经分配好的某段内存的一个指针.因此在删除该对象时,只需要调用对象的析构函数,不需用delete运算符来释放空间。## 多线程实现同步关键词

内存碎片

内存碎片—描述一个系统中所有的不可用的空闲内存;这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置。由于分配方法决定内存碎片是否是一个问题,因此内存分配器在保证空闲资源可用性方面扮演着重要的角色

malloc的底层实现细节

malloc基本的实现原理就是维护一个内存空闲链表,当申请内存空间时,搜索内存空闲链表,找到适配的空闲内存空间,然后将空间分割成两个内存块,一个变成分配块,一个变成新的空闲块。如果没有搜索到,那么就会用sbrk()才推进brk指针来申请内存空间。
搜索空闲块最常见的算法:首次适配,下一次适配,最佳适配。
首次适配 : 第一次找到足够大的内存块就分配,这种方法会产生很多的内存碎片。
下一次适配: 也就是说等第二次找到足够大的内存块就分配,这样会产生比较少的内存碎片。
最佳适配* : 对堆进行彻底的搜索,从头开始,遍历所有块,使用数据区大小大于size且差值最小的块作为此次分配的块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值