C++面试记录之中望软件

上次面试体验不好,记录了,这次同样记录一次体验不好的面试,中望软件…直接写了名字,因为真的很无语😓

记录一下我不知道的问题

忘记录音了😢

1. main函数之前做了什么?

我:实话我真没思路
网上查的:

  • 初始化操作:初始化静态static变量和global全局变量,即.data段的内容
    全局对象初始化,在main之前调用构造函数,并为它们赋初值。
    在这里插入图片描述
    (疑惑,这个图有问题吧,地址反了),下面这个看起来像是对的
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/f0ca2fe11b2043938bd29a62d9c414ce.pn

  • 传参:将main函数的参数argc,argv等传递给main函数,然后才真正运行main函数。

  • 设置栈:设置栈指针,栈指针,stack pointer 栈指针寄存器,正常情况下存放栈顶地址, base pointer 基址寄存器,正常情况用于访问栈底地址。

拓展:

  1. 在 C 和 C++ 编程语言中,__attribute__((constructor)) 是一个 GCC 扩展,它允许开发人员指定一个函数,以便在程序开始运行时,在执行 main() 之前自动调用。 该函数通常称为“构造函数”。
    __attribute__((constructor)) 语法用于指定应在程序启动时自动调用特定函数。 这对于初始化全局变量或设置程序正确运行所需的资源很有用。
    例如,构造函数可用于初始化日志系统或建立数据库连接。 通过使用构造函数,可以在程序开始运行之前自动设置这些资源,而无需在 main() 中显式初始化。
    重要的是要注意构造函数的调用顺序是无法保证的。 如果构造函数之间存在依赖关系,则必须注意确保以正确的顺序调用它们。 此外,构造函数不能依赖于其他全局变量的状态,因为它们可能尚未初始化。
    总体而言,__attribute__((constructor)) 是在执行 main() 之前初始化资源和设置程序环境的有用工具。 它在具有许多全局变量和复杂初始化要求的大型程序或库中特别有用。
  2. 在 C 和 C++ 编程语言中,__attribute__((destructor)) 是一个 GCC 扩展,允许开发人员指定一个函数,在程序正常退出时,在 main() 执行完毕后自动调用。 该函数通常称为“析构函数”。
    __attribute__((destructor)) 语法用于指定应在程序退出时自动调用特定函数。 这对于在程序退出前执行清理操作或保存程序状态很有用。
    例如,析构函数可用于关闭打开的文件、释放分配的内存或将数据写入日志文件。 通过使用析构函数,这些清理操作可以在程序退出时自动执行,即使程序意外退出也是如此。

2. 静态多态是什么?

一脸懵逼。

静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。
静态多态有两种实现方式:

函数重载:包括普通函数的重载和成员函数的重载
函数模板的使用。

函数重载
在相同的作用域中,如果函数具有相同名字而仅仅是形参表不同,此时成为函数重载。注意函数重载不能基于不同的返回值类型进行重载。

main函数不能被重载。

3. 基于const的重载?

其实带const的成员函数和不带const的成员函数的this指针是不同的:

const的成员函数的this指针是:const A类型的;不带const的成员函数的this指针是:A类型的;(这里的A就是代码中定义的类,借用一下上面的定义)。

比如:

Class A {int function ();int function () const;};

可以看到在A类中,function函数是发生重载了,而且是合法的。而且在调用时,只用A类的const对象才能调用const版本的function函数,而非const对象可以调用任意一种,通常非const对象调用不是const版本的function函数。

原因是:按照函数重载的定义,函数名相同而形参表有本质不同的函数称为重载。在类中,由于隐含的this形参的存在const版本的function函数使得作为形参的this指针的类型变为指向const对象的指针,而非const版本的使得作为形参的this指针就是正常版本的指针。此处是发生重载的本质。重载函数在最佳匹配过程中,对于const对象调用的就选取const版本的成员函数,而普通的对象调用就选取非const版本的成员函数。

(注:this指针是一个const指针,地址不能改,但能改变其指向的对象或者变量)

4. int && A = 10;A是右值吗?

一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。

被面试官绕晕了,&& A是一个右值引用,A本身是个左值吧…

5. 移动构造函数

我感觉我答得没有问题…但是面试官无语的表情不懂

移动语义:指的就是将其他对象(通常是临时对象)拥有的内存资源“移为已用”。
移动构造函数的初值是一个右值引用。意味着,移动构造函数的参数是一个右值或者将亡值的引用。

6. 前序和后序遍历为什么不能得到树?

我: 因为可能有不同的树结构,得到相同的遍历结果。

拓展:

1. map和unodered_map区别?

1、底层实现方式

map内部使用红黑树(一种自平衡二叉查找树)来实现,而unordered_map则使用哈希表来实现。这意味着,在map中,元素是按照键的大小进行有序排列的,而在unordered_map中,则不保证元素的顺序。

2、性能表现

当需要有序地遍历元素时,map的性能比unordered_map更好。但是,当需要快速查找特定的元素时,unordered_map通常比map更快。原因在于,map在插入和删除操作时需要维护红黑树的平衡,而unordered_map则只需要计算哈希值并将元素放入相应的桶中即可。

3、用途

由于map可以保证元素的有序性,所以适合用于需要有序的情况下,例如按照键排序输出元素、寻找最小值/最大值等。而unordered_map则适合用于需要快速查找元素的情况下,例如查找是否存在某个键值对、统计某个值出现的次数等。

总之,选择map还是unordered_map取决于具体的需求。如果需要有序地处理元素,则应该使用Map;如果需要快速查找元素,则可以使用unordered_map。

2. 指针和引用的区别?

1、引用不可以为空,但指针可以为空。
2、引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。
3、引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。
4、引用比指针使用起来形式上更漂亮,使用引用指向的内容时可以之间用引用变量名,而不像指针一样要使用*;定义引用的时候也不用像指针一样使用&取址。
5、引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为NULL,所以不安全。const指针虽然不能改变指向,但仍然存在空指针,并且有可能产生野指针(即多个指针指向一块内存,free掉一个指针之后,别的指针就成了野指针)。

底层: 引用也是一个指针,const指针,只是使用时底层编译器我们转化了一下
*(&ref)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringMVC】自定义注解

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Spring MVC》。&#x1f3…

Oracle数据如何迁移导入到MySQL

使用Navicat工具建立数据连接,进行数据传输 1、打开Navicat工具,分别连接Oracle数据库和MySQL数据库。 2、连接源选择你的oracle数据,目标选mysql 即可成功导入

Scholarcy:AI在线论文摘要总结工具

【产品介绍】 名称 scholarcy 成立/上线时间 2018年 具体描述 scholarcy是一个基于AI的在线论文文献摘要总结工具,可以帮助研究人员和学生快速阅读和理解各种类型的文献,如研究论文、报告和书籍章节。 scholarcy可以在几秒钟…

CSS 修改el-calendar的样式,自定义样式

需求&#xff1a;自定义elementui的日历的样式&#xff1b;给符合条件的时间展示红点。 elementui的原始样式&#xff1a; 目标样式&#xff1a; 代码实现&#xff1a; html: <el-calendar v-model"calendarValue"><template slot"dateCell" …

pycharm安装jupyter,用德古拉主题,但是输入行全白了,看不清,怎么办?

问题描述 今天换了以下pycharm主题&#xff0c;但是jupyter界面输入代码行太白了&#xff0c;白到看不清楚这行的字&#xff0c;更不知道写的是什么&#xff0c;写到哪了&#xff0c;这还是挺烦人的&#xff0c;其他都挺正常的。 问题分析 目前来看有两个原因&#xff1a; 1、…

浅谈C++|STL之list+forward_list篇

一.list基本概念 功能:将数据进行链式存储 链表&#xff08;list)是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的 链表的组成:链表由—系列结点组成 结点的组成:一个是存储数据元素的数据域&#xff0c;另一个是存储下一个结…

腾讯云4核8G云服务器租用价格选轻量还是CVM?性能如何?

腾讯云4核8G云服务器可以选择轻量应用服务器或CVM云服务器标准型S5实例&#xff0c;轻量4核8G12M服务器446元一年&#xff0c;CVM S5云服务器935元一年&#xff0c;相对于云服务器CVM&#xff0c;轻量应用服务器性价比更高&#xff0c;轻量服务器CPU和CVM有区别吗&#xff1f;性…

基于YOLOv8模型的海洋生物目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的海洋生物目标检测系统可用于日常生活中检测与定位海洋生物目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训…

腾讯云4核8G服务器选CVM还是轻量比较好?价格对比

腾讯云4核8G云服务器可以选择轻量应用服务器或CVM云服务器标准型S5实例&#xff0c;轻量4核8G12M服务器446元一年&#xff0c;CVM S5云服务器935元一年&#xff0c;相对于云服务器CVM&#xff0c;轻量应用服务器性价比更高&#xff0c;轻量服务器CPU和CVM有区别吗&#xff1f;性…

半减器、全减器和减法器原理和设计

减法器可由基础的半减器和全减器模块组成&#xff0c;或者基于加法器和控制信号搭建。定义N比特被减数X&#xff0c;减数Y,差为D&#xff08;difference&#xff09;&#xff1b;来自低比特借位Bi&#xff0c;向高比特借位Bi1,i为比特序号&#xff1b;所以&#xff0c;有以下结…

在Kubernetes集群中部署 dolphindcheduler-3.1.8

温故知新 &#x1f4da;第一章 前言&#x1f4d7;背景&#x1f4d7;目的&#x1f4d7;总体方向 &#x1f4da;第二章 部署&#x1f4d7;安装helm&#x1f4d7;安装dolphindcheduler&#xff08;使用k8s的部署用户操作&#xff09;&#x1f4d5;通过命令验证&#x1f4d5;通过Ku…

轻松学会寻找不同操作系统电脑的IP地址的技巧!

TCP/IP计算机网络使用两种IP地址——公共&#xff08;也称为外部&#xff09;和私有&#xff08;有时称为内部或本地&#xff09;。 在设置文件服务器或网站时&#xff0c;你可能需要公共IP地址&#xff0c;而专用IP地址对于与本地设备通信、转发路由器端口或访问路由器以进行…

华为OD机考算法题:数字加减游戏

目录 题目部分 解读与分析 代码实现 题目部分 题目数字加减游戏难度难题目说明小明在玩一个数字加减游戏&#xff0c;只使用加法或者减法&#xff0c;将一个数字 s 变成数字 t 。 每个回合&#xff0c;小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以用来加减…

SAP ABAP基础知识 访问外部数据库-开发篇

前言 本文主要介绍通过ABAP语言访问外部数据库的几种方式 一、外部数据库配置 本文示例中的代码访问了两个外部数据库 MTD : 外部oracle数据库,其中示例表 ZTTEMP 字段( ZZTNO,WERKS) S4Q : 外部HANA数据库(开发系统访问测试系统的数据库), 使用表USR02,ZTTEMP 二、ABAP访问…

c语言练习58:⾃定义类型:结构体

⾃定义类型&#xff1a;结构体 结构体的概念 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构体是一个种自定义的数据类型&#xff0c;它可以由很多个默认数据类型组成。它主要用于描述复杂场景下的变量。 例如&#xff0c;想…

前端深入理解JavaScript中的WeakMap和WeakSet

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 1. WeakMap和WeakSet概述 1.1 WeakMap 1.2 WeakSet 2. WeakMap深入解析 2.1 WeakMap的创建和使用 2.2 WeakMap…

软件流程图怎么画?详细画法看这里

软件流程图怎么画&#xff1f;软件流程图是软件开发过程中必不可少的一环&#xff0c;可以帮助开发人员更好地理解和规划软件开发的流程。在制作软件流程图的时候&#xff0c;我们可以使用一些制作工具。下面就给大家介绍一款好用的绘制工具。 我们可以使用【迅捷画图】来进行流…

Android端Base64解码表情emoj乱码

一、背景&#xff1a;H5端用户评论中包含表情包&#xff0c;通过JSBridge 传递给客户端&#xff0c;Android Base64解码之后&#xff0c;显示乱码&#xff08;是菱形问号&#xff09;。小程序和iOS可以正常解码出表情。用Base64在线编码解码&#xff08;Base64 在线编码解码 | …

BOM操作

文章目录 BOM事件页面加载调整窗口事件定时器停止计时器Location对象History对象Offsetleft获取元素偏移Offset与style的区别可视区client系列滚动scroll系列Mouseover和mousenter区别 动画原理实现动画封装给不同对象添加定时器缓动动画原理多个位置间移动 BOM事件 页面加载 …

BeanUtils.copyProperties的使用场景

1. 常见场景 我们如果有两个具有很多相同属性名的JavaBean对象a和b&#xff0c;想把a中的属性赋值到b&#xff0c;例如 接口中将接收到的前端请求参数XxxReqVo,我们想把这个入参转化为XxxQuery对象作为数据库的查询条件对象 传统做法是手动set&#xff0c;即 XxxBean xxxBea…