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

news2025/1/12 13:17:52

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

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

一面

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

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

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

补充:
关键的几点判断依据在《C++面试指北》中有总结:

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

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

为了满足这一要求,编译器会给每个空类分配一定的空间,通常是1字节:

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

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

补充:
多态和虚函数《C++面试指北》也有总结:

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

补充:

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

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 中的图示:

一个简单的分配内存块的格式

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

补充:

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

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

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

补充:

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

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

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

几个关键点:

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

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

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 有关:

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

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

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

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

17、在学校的成绩怎么样

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

19、有没有考研的打算

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

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


总结:

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

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

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

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

这是小北亲自整理和原创的C++ 面试八股文,基本涵盖 C++ 语言常问的问题,力争给大家讲懂每一个高频考点,不单单有文字描述,还有代码示范、画图,以及扩展学习这个知识点该去看什么书,看什么博客:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机——I2C-EEPROM实验,小白讲解,相互学习

I2C介绍 I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式 串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的 一种总线标准。它是同步通信的一种特殊形式,具有接口线少&#x…

【逆向工程核心原理:SEH】

SEH SEH是Windows操作系统提供的异常处理机制,在程序源代码中使用__ try、 __except、__finally关键字来具体实现。主要用在反调试中。 注: SEH与C中的try. catch 异常处理具有不同结构。从时间上看,与C的try、catch异常处理相比&#xff0…

uni-app--》uView组件库:提升您的uni-app开发体验

🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败&#xf…

MMDet3d样本均衡

MMDet3d样本均衡 文章目录 MMDet3d样本均衡CBGSDataset训练时数据是200帧,后面处理时,dataloader中数据变成了460帧,怎么均衡的?思考抽帧数计算某个类别帧数为0 Reference欢迎关注公众号【三戒纪元】 CBGSDataset **CBGS &#x…

UE虚幻引擎,Unity3D,Blender区别和联系

1. 官网手册 UnityUEBlenderUnity 用户手册 (2019.4 LTS) - Unity 手册虚幻引擎5.2文档 | 虚幻引擎5.2文档 (unrealengine.com)Blender 3.5 Reference Manual — Blender Manual 2. Unity, UnrealEngine, Blender的区别 Blender 是一款免费的开源软件,是一个开源…

Godot引擎 4.0 文档 - 循序渐进教程 - 脚本语言

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Scripting languages — Godot Engine (stable) documentation in English 脚本语言 本课将概述 Godot 中可用的脚本语言。您将了解每个选项的优缺点。在下一部分中&…

CentOS7搭建伪分布式Hadoop(全过程2023)

##具体操作目录## 1.配置静态ip2.关闭防火墙3.修改主机名为 *master* ,并重启虚拟机vi /etc/hostname 4.修改主机名与ip映射5.设置SSH免密登录6.安装配置java环境----------------------正式Hadoop配置1.移动安装包到合适位置2.解压安装包并重命名3.配置环境变量4.修…

know it and do it

overview: 在一盘盘有立即反馈的系统中,可以更直观的看到知道一个道理和能自然的用出来之间的鸿沟有多大。 这个就是日积月累的训练的意义了。 一夜回到解放前 继续金铲铲的游玩回味,之前一段时间忙于工作就放下了,后来新的版本…

20230521 AI 一周大事件汇总

🚀 ChatGPT 上线联网和插件功能 OpenAI宣布将在这周推出联网和插件功能,位于Alpha和Beta通道的ChatGPT Plus用户都可使用70多个上线的插件。 更新意味着ChatGPT将利用最新的信息和资讯为使用者提供服务。 上线的ChatGPT插件种类涵盖了行程安排助理、代…

拿捏大厂面试官的高质量自动化测试工程师简历--看完必有所获

一、前言:简历(职场敲门砖) 作为软件测试的垂直领域深耕者,面试或者被面试都是常有的事,可是不管是啥,总和简历有着理不清的关系,面试官要通过简历了解面试者的基本信息、过往经历等&#xff0c…

阿里p10手敲python +pytest +yaml + Allure 实现接口自动化框架

以前弄过好多接口自动化框架的东西,比如httprunner2.0版本实现的接口自动化框架,还有httprunner3.X实现的接口自动化框架,这些都是开源的,实现起来比较简单。 以及使用pythonunittestddtyaml等工具实现的接口自动化框架等。 今天…

【腾讯云 Finops Crane 集训营】安装使用及EHPA弹性演示

随着时间的推移,降本增效成为了企业界和组织中的一个新口号。在2023年,这个口号进一步获得了广泛的认可和重要性,成为了许多组织在业务运营中的关键目标。在2023年,许多组织开始将降本增效作为战略性目标,并将其融入到…

3.fabric二进制工具包介绍

(1)Fabric二进制工具包: Fabric二进制工具包:Fabric二进制工具包(Fabric Binary Distribution)是Hyperledger Fabric的核心组件,它包含了一系列可执行的二进制文件,用于搭建、管理和操作Fabric网络。该工具包提供了一套命令行工具,可以执行各种与Fabric网络相关的任务…

模板(初阶)

目录 一、泛型编程二、函数模板2.1 函数模板的概念2.2 函数模板的格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三、类模板3.1 类模板的定义格式3.2 类模板的实例化 一、泛型编程 如何实现一个通用的Swap函数 void Swap(int& x, int& y) {int …

chatgpt赋能Python-pythonapp自动化

Python App自动化:优化SEO的终极解决方案 随着互联网的发展,SEO(搜索引擎优化)变得日益重要。对于任何网站或应用程序开发人员来说,SEO应该是一个非常重要的考虑因素。为了帮助开发人员和企业提高其在线可见性&#x…

Squid代理服务器应用

在web架构中,用户一般进入负载均衡层,通过调度来访问web应用层,但是如果访问量太大,并发量较高,web应用层会吃不消,我们把静态资源、经常要访问的资源放入缓存,用户直接访问缓存层,加…

解析使用FPGA逻辑实现FIR滤波器的几种架构

有限脉冲响应(finite impulse response,FIR)数字滤波器 一、FIR数字滤波器理论介绍 FIR滤波器的实质就是输入序列与系统脉冲响应的卷积,即: 其中,N为滤波器的阶数,也即抽头数;x(n)为第n个输入序列&#xff…

人工智能轨道交通行业周刊-第45期(2023.5.15-5.21)

本期关键词:动车洗澡、热备列车、火车司机室、无缝线路、图像分割、自动标注 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道…

Linux开发工具:yum和vim的使用

目录 一. Linux下的软件 1.1 软件安装的三种方法 1.2 采用yum安装软件 1.3 yum源的问题 二. vim开发工具的使用 2.1 vim的三种基本模式 2.2 命令模式下vim的常用指令 2.2.1 定位相关指令 2.2.2 光标移动相关指令 2.2.3 插入相关指令 2.2.4 复制粘贴相关指令 2.2.5 替…

Tauri应用开发(三):自定义拖拽区域

1. 自定义拖拽:data-tauri-drag-region tauri默认的顶部可拖拽,有时候我们不需要这个拖拽,或者需要自定义拖拽区域时,就需要通过tauri提供的data-tauri-drag-region属性来自定义拖拽区。 ![在这里插入图片描述](https://img-blog…