腾讯社招电面(牛客上的面经,找了答案记录下来)

1.free()函数入参是一个void*指针,它是如何知道被指向的大小的?
举个例子:假设你用malloc需要申请100字节,实际是申请了104个字节。把前4字节存成该块内存的实际大小,并把前4字节后的地址返回给你。 free释放的时候会根据传入的地址向前偏移4个字节 从这4字节获取具体的内存块大小并释放。

2、查找二叉搜索树中第k小的元素?
中序遍历将二叉树元素从小到大放到容器中,返回k-1位置上的元素即可。解题思路

3、数据库为什么使用B树作为存储数据的数据结构?为什么说B+树比B树更适合数据库索引?
为什么MySQL数据库索引选择使用B+树?
1)B+树的磁盘读写代价更低
2)B+树的查询效率更加稳定
3)所以B+树更加适合在区间查询的情况

4、C++ lambda表达式的特性,什么情况下使用?
函数实现相对简单并且可能在整个项目只使用了一次,可以考虑使用lambda表达式。让代码更加紧凑,更加容易维护。
在这里插入图片描述
5、c/c++程序如何控制执行到某个特定内存地址?
如果想让程序跳转到绝对地址0x100000处执行,可以把绝对地址0x100000强制转换成函数指针,然后再用函数指针的方式调用函数就可以了。
先将 0x100 转化为 函数指针 (void(*)()) 0x100
然后再调用它:
((void()())0x100)();

6、二叉堆的维护?
数据结构基础篇-二叉堆

7、LRU算法的实现?
使用hashmap(unordered_map)加双向链表实现。
C++实现LRU(最久未使用)缓存算法

8、C++虚函数表、函数重载、函数重写(override)特性?
C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(这里我觉得要补充,重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性)而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。
a、编译时多态性:通过重载函数实现
b、运行时多态性:通过虚函数实现。

10、C++对象内存布局?
图说C++对象模型:对象内存布局详解

11、C++ new和c语言的malloc的区别?
在这里插入图片描述
13、C++程序的编译过程?
1.预处理(Preprocessing):预处理用于将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。
2.编译(Compilation):指将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程。
3.汇编(Assemble):汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式。
4.链接(Linking):链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。

14、什么是迭代器失效?
数组型数据结构:insert和erase操作,都会使得删除点和插入点之后的元素挪位置,所以,插入点和删除掉之后的迭代器全部失效。
链表型数据结构:删除运算使指向删除位置的迭代器失效,插入不会使得任何迭代器失效。
树形数据结构: 使用红黑树来存储数据,插入不会使得任何迭代器失效;删除运算使指向删除位置的迭代器失效。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值