腾讯C++二面,全程2小时追问基础!

这篇具有很好参考价值的文章主要介绍了腾讯C++二面,全程2小时追问基础!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天给大家分享星球一位同学腾讯面经,主要摘取了部分一二面经,然后部分问题我做了补充说明~

星球原文:https://t.zsxq.com/0eO4O13HV,已获授权

一面

1、C++11有哪些新特性,有哪些新关键字

2、C++中结构体占多少字节(考字节对齐):

struct{
  char a;
  int b;
  double c;
  char d;
}

补充:
关键的几点判断依据在《C++面试指北》中有总结:腾讯C++二面,全程2小时追问基础!

3、C++空类对象的大小

同样《C++面试指北》也有总结,主要因为C++标准要求每个对象都必须具有独一无二的内存地址。

为了满足这一要求,编译器会给每个空类分配一定的空间,通常是1字节:
腾讯C++二面,全程2小时追问基础!

4、C++多态有几种实现机制(当时没怎么懂,可能泛型编程也算多态?)

5、C++析构函数为什么需要是虚函数,析构顺序是什么

补充:
多态和虚函数《C++面试指北》也有总结:
腾讯C++二面,全程2小时追问基础!

6、C++中为什么要引进nullptr(当时没答出来,面试官说是方便类型推断

补充:

  1. 类型安全性:nullptr是一种特殊的空指针类型,可以与整数类型区分开来,可以避免将整数0错误地解释为空指针。
  2. 重载决议:nullptr可以与其他指针相关的重载函数进行区分。例如,如果有两个函数重载,一个接受整数参数,另一个接受指针参数,传递nullptr将调用接受指针参数的函数:

腾讯C++二面,全程2小时追问基础!

7、epoll、select、poll区别是什么,内部原理

IO 复用基本是后台面试必问题了,可以去多搜一些博客看下,Java 会结合 Netty 问。

8、TCP四次挥手过程,TIME_WAIT 时长,为什么需要有 TIME_WAIT

9、算法题:求a的n次方(不能用O(n)复杂度的)

二面

今天下午面了腾讯的二面,时长2小时20分钟(其中大部分时间是在写代码,面试官边看着我写边询问思路),放眼我的整个面试经历也是相当之炸裂,基本上都是在问C++基础。

我到现在面过5家公司,其他的都没问过C++,基本上都是在问网络、操作系统和数据库,只有腾讯一面二面都是在问C++基础,虽然面试时间巨长,但是收获颇丰,跟大家分享一下(回答):

1. C++里面 new/delete 和 malloc/free 有什么不同?

补充:

  1. 语法层面:newdelete是C++中的运算符,可以被重载,而malloc()free()是C语言中的函数
  2. 构造和析构函数的调用:使用new/delete时,会自动调用对象的构造函数和析构函数。malloc()free()则不会。
  3. 内存分配失败的处理:new在内存分配失败时会抛出std::bad_alloc异常,malloc()在分配失败时返回空指针NULL
  4. 内存大小计算:使用new时,不需要手动指定要分配的内存大小,会根据所需类型自动计算大小。malloc()需要显式指定要分配的字节数。

2. 知道C++的野指针是什么吗,什么情况下会出现野指针?(未初始化或指针指向的内存被delete掉了)

补充:

返回局部变量的指针:将指针指向一个局部对象,然后在对象超出作用域后继续使用该指针,也会导致野指针的出现,常出现在返回局部变量的引用/指针。

3. delete a; delete是怎么知道需要释放的指针a指向的对象的大小的

补充:

delete 和 free 是相似的,当使用new操作符分配内存时,编译器会在分配的内存块的开头存储一些额外的信息,其中就包括内存块的大小。

这些信息用于在释放内存时确定要释放的字节数。

引用CSAPP 中的图示:

腾讯C++二面,全程2小时追问基础!

4、如果申请了内存但忘记释放会造成内存泄漏,用什么方法避免(智能指针)

补充:

  1. 使用C++中的智能指针(如std::unique_ptrstd::shared_ptr)来管理动态分配的内存,即RAII机制,利用对象析构的确定性来确保退出作用域时一定会释放内存

  2. 使用内存分析工具,如 Valgrind 来检测和识别内存泄漏问题

5. 代码:写一个智能指针(shared_ptr)

补充:

实现一个简单的 shared_ptr类,主要两个成员变量:

  • 指向对象的指针:用于保存要管理的对象的地址。

  • 引用计数:用于记录当前有多少个shared_ptr共享同一个对象,引用计数需要使用指针来在多个shared_ptr 对象之间共享计数,实际上比这个复杂,一般是一个类对象,内部包含多个引用计数相关的信息:

腾讯C++二面,全程2小时追问基础!

几个关键点:

  • 析构函数:在析构函数中处理引用计数的递减和内存的释放。
  • 重载解引用操作符
  • 为了实现共享所有权,需要编写拷贝构造函数和拷贝赋值运算符:
    • 在拷贝构造函数中,将指向对象的指针和引用计数成员变量复制到新对象,并递增引用计数。
    • 在拷贝赋值运算符中,处理自我赋值情况并更新引用计数。

星球专栏《C++面试指北》中,也有手写的示例:

腾讯C++二面,全程2小时追问基础!

6、代码:知道weak_ptr吗,能不能实现weak_ptr(虽然是实现了,但是面试官不太满意)

补充:

weak_ptr 主要是用来解决 shared_ptr 循环引用问题,除了解决相互引用的问题,weak_ptr还适用一切应该不具有对象所有权,又想安全访问对象的情况。

对于具体实现,关键步骤其实也在上面那一张图里,和 shared_ptr 类似,需要内部管理一个引用计数类,并且weak_ptr 接受一个 shared_ptr 进行构造,然后和 shared_ptr 共享一个引用计数类, weak_ptr 的复制和拷贝只增加 weak_count (弱引用),在解引用之前,需要通过 lock 函数获取一个 shared_ptr ,如果 use_count 计数已经清零,则 lock 返回 nullptr。

7、代码:能不能在不声明临时变量的情况下求得字符串的长度(这题当时没写出来,主要是没太懂意思,在网上看了看搜了搜都是用递归写的,当时以为要尽量节省空间,就没往递归的方向去想)

8、代码:知道单例模式吗,能不能写一个单例模式的代码

补充:

经典的饿汉式、懒汉式、双重检测。

见:https://csguide.cn/designpattern/1_singleton.html

9、模板偏特化知道吗,偏特化的目的是什么

10、代码:能不能实现一个简单的 vector

11、代码:给你两个单向链表,一个是升序一个是降序,将两个链表合并成一个升序链表

12、C++里面调用C的函数时会用到extern C,为什么不能直接调用

补充:这里在 《C++面试指北》 中有解释,具体和 C++ 的Name mangling 有关:

腾讯C++二面,全程2小时追问基础!

13、C++内存分配机制是怎样的,哪些变量在栈上分配空间,哪些在堆上分配

14、函数的调用过程,从函数调用返回后怎么知道下一行代码的执行位置(调用函数时会将下一条指令的地址压栈)

15、大学看过哪些深入解析原理的书,类似于STL源码剖析这种的

16、你觉得你是一个什么样的人

17、在学校的成绩怎么样

18、刚才你说你在学校的成绩中等,那些成绩比你好的同学是怎么学习的你有了解过吗

19、有没有考研的打算

还有一部分提问忘掉了,印象比较深刻的问题都在上面,面试官在面试过程中有提到过我打代码时变量的命名太过随意。

所以大家在面试中做题还是要规范代码,不要追求速度。


总结:

基本上 C++ 语言问的问题都主要集中在《C++面试指北》中总结的这几块:

腾讯C++二面,全程2小时追问基础!

语言和操作系统最容易结合的也是多线程、内存管理。

除此以外就是网络中的 TCP、IO模型,这些是大厂 C++ 后台方向特别爱问的。

可以看一下星球里的专栏《C++面试指北》

这是小北亲自整理和原创的C++ 面试八股文,基本涵盖 C++ 语言常问的问题,力争给大家讲懂每一个高频考点,不单单有文字描述,还有代码示范、画图,以及扩展学习这个知识点该去看什么书,看什么博客:
腾讯C++二面,全程2小时追问基础!文章来源地址https://www.toymoban.com/news/detail-454656.html

到了这里,关于腾讯C++二面,全程2小时追问基础!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 今天跟大家好好介绍一下接口工具(jmeter、postman、swagger等)

    一、接口都有哪些类型? 接口一般分为两种:1.程序内部的接口 2.系统对外的接口 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把 数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的

    2024年02月05日
    浏览(42)
  • 今天给大家介绍一下华为智选手机与华为手机的区别

    华为智选手机是由华为品牌方与其他公司合作推出的手机产品,虽然其机身上没有“华为”标识,但是其品质和技术水平都是由华为来保证的。这些手机在制造、设计和使用方面都采用了华为的相关技术和标准,因此可以享受到和华为旗舰手机相同的优质使用体验。    目前

    2024年02月09日
    浏览(36)
  • 今天跟大家推荐几款实用的ai写作生成器

    自ai技术的发展以来,人工智能在各个领域都展现出了无限可能。在学术界,写作论文是科研人员不可避免的重要任务,然而,论文写作需要大量的时间和经验技能,而这对刚刚步入学术领域的年轻科研人员来说尤为困难。在这样的背景下,提高写作效率、降低人力成本、缩

    2024年02月13日
    浏览(34)
  • 2023秋招--腾讯天美--游戏客户端--二面面经

    2023秋招–腾讯天美–游戏客户端–一面面经 面试官提问:20min 自我介绍。 大学学了哪些课程? C#用的多还是C++? 内存对齐了解吗?说下原理以及为什么需要内存对齐 C#怎么调用C++代码? StringBuilder和String的区别?拼接字符串有什么区别?StringBuilder一定优于String? 场景题:

    2024年02月05日
    浏览(36)
  • 今天教大家微信小程序怎么免300元认证费终身使用的教程

    众所周知微信小程序认证需要300元认证费,当然用已认证的微信公众号可以免费认证但是认证微信公众号也需要300认证费而且需要每年进行年检等于每年都要花300元。 不知道大家注册小程序的时候有没有发现审核很慢申请完需要等几天很费时间, 而且微信限制一个身份证只

    2024年02月08日
    浏览(49)
  • 今天给大家介绍一篇基于springboot的医院管理系统的设计与实现

    临近学期结束,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于springboot的医院管理系统的设计与实现。 随着科

    2023年04月14日
    浏览(65)
  • 怎么在树莓派环境上搭建web网站,并发布到外网可访问,今天教给大家

    这非常适合设置您的第一个网站,不仅可以学习管理 wordpress 站点,还可以学习 Linux。您将需要一个树莓派(Raspberry Pi)、几个小时和一台计算机来下载映像。 树莓派(RPI) 是学习这些东西的完美设备。 下载适用于您的操作系统的树莓派镜像工具。它支持大多数操作系统(Window

    2024年02月14日
    浏览(28)
  • 腾讯二面:自动贩卖机/音频播放器使用了什么设计模式?

    状态模式是什么? 状态模式,也被称作状态对象模式,是一种行为设计模式。 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 它让对象在其内部状态改变时改变自己的行为。外部调用者无需了解对象内部状态的具体实现,仅需通过简单的

    2024年01月20日
    浏览(31)
  • 腾讯二面:有 40 亿个 QQ 号,限制 1G 内存,问如何去重?被问懵了!

    40亿个QQ号,限制1G内存,如何去重? 40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 = 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的。 想要实现这个功能,可以借助位图。 使用位图的话,一个数字只需要占用1个bit,那么40亿个

    2024年02月07日
    浏览(25)
  • 【设计模式】腾讯二面:自动贩卖机/音频播放器使用了什么设计模式?

    状态模式是什么? 状态模式,也被称作状态对象模式,是一种行为设计模式。 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 它让对象在其内部状态改变时改变自己的行为。外部调用者无需了解对象内部状态的具体实现,仅需通过简单的

    2024年01月20日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包