8.28 中望一面 C++开发
刚出炉的面经,做个记录
总体面试时间45min。
面试官很和蔼,上线后先是闲聊两句,问了是哪里人,也没有对象,求职的意向地点之类的问题。
没有正式的自我介绍环节,是聊着聊着问到科研相关,因为刚好科研做的就是仿真软件和仿真,面试官对这个有些兴趣,就问了点,奈何本人科研菜鸡,感受到一点子拷打(bushi
接下来主要询问的是C++相关的问题:
- 说说多态,多态有几种类型,怎么实现
- 为什么要用虚函数,虚函数的存放位置,属于类还是实例
- 重载是怎么做到的,为什么返回值不能作为重载的条件,重载的编译方式
- extern C什么意思
- 内联函数有了解吗,调用内联后是否一定展开
- new和malloc的区别,优缺点
- new的底层逻辑有了解吗(这个没答出来)
- A函数调用B函数,在栈中是如何发生变化的:
- 保存返回地址: 在函数 A 中,当调用函数 B 时,首先会将函数 A 的返回地址压入栈中。确保当函数 B 执行完毕后,程序可以正确返回到函数 A 的调用处。
- 传递参数: 如果函数 B 需要参数,在调用函数 B 之前,函数 A 会将参数按照一定的顺序压入栈中,使得函数 B 能够在栈上找到这些参数。
- 分配局部变量: 函数 B 执行时,会在栈上分配它的局部变量和临时变量的空间。这些变量会在函数 B 执行期间使用,函数 B 结束后,这些变量所占用的栈空间会被释放。
- 执行函数 B: 此时,程序执行函数 B 的代码,对应的操作会在栈上进行。函数 B 可能还会调用其他函数,这将导致栈的进一步变化。
- 返回值传递: 函数 B 执行完毕后,会将返回值(如果有的话)放在一个特定的寄存器或者栈上,并将控制权返回给函数 A。
- 恢复现场: 函数 A 在栈中保存的返回地址被弹出,控制权重新回到函数 A。此时函数 A 可以继续执行。
- 讲一下STL容器,常用的有哪些
- vector有哪些接口,可以如何访问vector中的数据(只说了下标和,begin().end(),应该还有个迭代器访问)
- 聊一下map( C++ 标准库中的关联容器,用于存储键-值对,并根据键的排序顺序进行排序。)
- 一道题讲讲思路:长度为n的正整数数组,数组值的范围是1到n,每个数出现的次数是1次或2次,找出所有出现2次的数。回答使用哈希表,即unordered_map。遍历数组一次,将数字作为键,出现次数作为值存储在哈希表中。然后再遍历哈希表,找出出现次数为2的数字。
- 讲讲unordered_map有什么特点,如何调整大小(回答说自动调整的,感觉是想问内部逻辑)
- 用以上方法的时空复杂度是多少,还有没有别的方法
整体感觉凑合,科研上有点绷不住,菜鸡本菜在涉及细节的时候只能阿巴阿巴问的都是C++相关问题
#24秋招加油#