timi2面凉经

哪些函数不能是虚函数,为什么?

static,构造函数,inline不能是虚函数;

构造函数为什么不能是:
1.虚函数的调用需要使用虚函数指针和虚函数表,虚函数指针和虚函数表都在对象的内存空间中,但是在调用构造函数的时候,对象还没创建好,内存空间还不存在;
2.在调用构造函数时,对象还没创建好,不知道其创建的对象类型,而虚函数是需要在在运行时确定了、对象类型的;
static为什么不能是:
1.static是针对整个类的,而不是针对某个对象的;
2.static函数没有this指针,而虚函数需要用this指针指向vptr;
inline为什么不能是:
inline函数是在编译的时候复制展开到调用的位置,需要知道明确的对象类型,而虚函数在运行期间才知道都对象类型,编译期间不知道;

关键字new的相关问题:

有了new/delete为什么还要有malloc/free:

我当时回答的malloc更快,因为new还要调用构造函数;

new可以重载吗:

new是关键字不能重载,调用operator new()分配空间,operator new()是函数,可以重载;(我一开始说的new可以重载,后面反应过来是operator new)
operator new被重载返回值必须是void*, 第一个形参必须是size_t,如果还传入其他参数就变成placement new,
placement new并不分配内存,只是返回已经分配好的一段内存的指针,
void* operator new(std::size_t size, void* ptr)
可以通过placement new实现批量new,一次性new很多对象出来,注意要先调用每个对象的析构函数之后再使用
delete;

STL中map[]和insert的区别:

增添元素时,map[]会默认构造一个string作为你的value,再将真实的value赋值给他,多了一次默认构造得操作;
更新元素时,insert每次都会生成一个新的pair,事后还要析构此对象;

宏函数和带参数的函数区别:

1.函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。
2.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的参数也无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。
4.调用函数只可得到一个返回值,而用宏可以设法得到几个结果。
5.使用宏次数多时,宏展开后源程序长,因为每展开一次都使程序增长,而函数调用不使源程序变长。
6.宏替换不占运行时间,只占编译时间;而函数调用则占运行时间(分配单元、保留现场、值传递、返回)。

有栈协程和无栈协程:

有栈协程的一般实现是:在内存中给每个协程开辟一个栈内存,当协程挂起时会将它的运行时上下文(即栈空间)从系统栈中保存至其所分配的栈内存中,当协程恢复时会将其运行时上下文从栈内存中恢复至系统栈中。

无栈协程通常是 基于状态机或闭包 来实现。无栈协程不需要修改调用栈,也无需额外的内存来保存调用栈,因此它的开销会更小。但是,相比于保存运行时上下文这种实现方式,无栈协程的实现还是存在比较多的限制,最大缺点就是,它无法实现在任意函数调用层级的位置进行挂起。

c++如何实现反射:

C++编译器完全可以将类型信息与虚函数表一起保存,在现有虚函数表里面附加类型信息,然后可以通过对象的虚函数表针对找到对象的类型信息。这种方案不会破坏C++原有的对象内存模型,只是拓展了虚函数表的功能

#面经##腾讯#
全部评论
inline可以是虚函数吧,只要不用多态的话还是可以声明为虚函数吧🤔
点赞 回复 分享
发布于 2021-09-04 11:09
老哥 投的啥岗位
点赞 回复 分享
发布于 2021-09-01 09:58
为什么不继续投光子了
点赞 回复 分享
发布于 2021-08-30 09:58
宏是在预处理阶段进行的吧?
点赞 回复 分享
发布于 2021-08-29 15:22
反射那个方案,如果pod类型就没法反射了,局限性太多了
点赞 回复 分享
发布于 2021-08-29 13:14

相关推荐

点赞 评论 收藏
分享
深夜书店vv:腾讯是这样的,去年很多走廊都加桌子当工区
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-13 19:30
化身华黑 今天询问对接人审批情况,结果被告知没HC了 云计算 
苦闷的柠檬精allin实习:主管面结束后hr每周保温一次,结果前几天和我说没hc了,我也化身华黑子了
投递华为等公司8个岗位 > 华为求职进展汇总
点赞 评论 收藏
分享
评论
1
35
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务