C/C++面试经历(一)
目录
1. 说说你对C与C++的认识?
2. 说说C++的三大特性?
3. 说说C++的重载?
4. C语言为什么不支持重载?
5. 说说类的默认成员函数?
6. 类的构造函数为什么不支持虚函数?
7. 说说你对指针和引用的理解?
8. 说说你对栈与堆的理解?
9. 说说map和unordered_map的区别?
10. 说说哈希和哈希碰撞?
1. 说说你对C与C++的认识?
C语言是更偏底层的面向过程编程语言,C语言程序员需要了解并认识系统级的接口,并且能够熟练的对系统资源进行分配和调度。
C++是基于C语言的面向对象编程语言,C++程序员需要有抽象思维能力,将实际的问题转换为一个对象模型从而解决问题。
总的来说,C++是兼容C语言的,并且对C语言做了一些封装和扩展,从而能更便捷的实现编码。
2. 说说C++的三大特性?
C++的三特性分别是封装、继承和多态。
封装是将属性和操作封装在一个类中,隐藏内部的实现过程,只对外提供必要的接口,提高代码的安全性。
继承是指一个类可以通过继承另一个类的属性和方法来扩展自己的功能,提高代码的重用性,增加了类与类之间的耦合性。
多态是在继承的基础上,让一个接口能够实现多种的功能,通过父类指针或引用调用子类的接口,增加了接口的重用性。
3. 说说C++的重载?
C++的重载是指在同一个作用域内,对一个函数或者运算符进行多种定义,使其能够通过不同的参数类型或参数个数实现不同的功能。
运算符重载包括关系运算符、下标运算符、输入输出运算符重载,对某个类的小括号进行重载,可以使某个类变为仿函数。
4. C语言为什么不支持重载?
无论是C语言还是C++程序在从源代码生成可执行程序的过程中,都会经过预处理、编译、汇编、链接四个步骤,而C语言不能支持重载但是C++能够支持重载的原因就在链接这个步骤上。
在链接时,会生成符号表,C语言的设计存在缺陷,符号表里面的函数名就是函数名本身,当多个相同的函数名被定义的时候,在链接这个步骤相同的函数名不同的参数也是一样的命名,就会产生冲突而报错。
但是C++通过g++进行编译链接时在符号表中对于函数的命名规则是不一样的,C++符号表中的函数名由其函数名本身和参数构成,在链接这个步骤相同的函数名不同的参数就会在符号表中有不同的命名。
5. 说说类的默认成员函数?
C++的6大默认成员函数分别是构造、析构、拷贝构造、赋值运算符重载、取地址运算符重载和const修饰的取地址运算符重载。
6. 类的构造函数为什么不支持虚函数?
调用虚函数需要维护一张虚函数表,每一个拥有虚成员函数的类都有一个指向虚函数表的指针。
从存储角度来说,对象通过虚函数表里存储的虚函数地址来调用虚函数,但是虚函数表是在构造函数中进行初始化。当我们new一个对象的时候,第一步是申请空间,第二步便是调用构造函数,此时虚函数表不可能存在,故无法让构造函数作为虚函数从而通过虚函数表调用。
从使用角度来说,虚函数的调用是在信息不全的条件下,能使重载的函数得到对应的调用。要创建一个对象,需要知道一个对象的确切类型,因此构造函数不能被定义为虚函数。
7. 说说你对指针和引用的理解?
指针是指向一个数据地址的变量,存放的是数据的地址信息。
引用是一个数据的别名,通过对某个数值的引用进行修改,这个数值本身也会修改。
对比来说,指针可以为空、可以改变指向、可以有多级,别名不能为空且必须初始化、不能改变指向、只有一级,指针的自增自减是表示指向下一个或上一个同类型数据的地址,引用的自增自减是让所指向的变量的值进行自增自减操作。
8. 说说你对栈与堆的理解?
从内存管理角度来说,栈和堆处于内存的不同存储区域,栈区由操作系统自动分配,存储局部变量,堆区由程序员通过new或者malloc接口申请空间做资源存储,当资源使用完毕需要程序员主动释放,否则会造成系统资源浪费,通过free接口释放资源的时候还要注意野指针问题。
从数据结构角度来说,栈是连续的存储空间结构,支持随机访问,遵从“先进后出”规则,程序的执行也是通过函数栈帧的实现的,堆是完全二叉树结构,通过堆的调整策略将最值存入堆顶,常用于Top K的算法。
9. 说说map和unordered_map的区别?
map和unordered_map都是STL封装的容器,存放的数据是KV键值对。
map是通过对红黑树的封装实现的,红黑树对数据的增、删、查、改都有着非常高的效率,红黑树数据插入时能够根据键值自动排序。
unordered_map是通过对哈希表的封装实现的,哈希表的数据增、删、改的效率和红黑树差不多,但是哈希表的数据查询效率远高于红黑树,哈希表数据在插入时并不保证元素顺序,即无序的map。
总之,根据红黑树和哈希表性质的不同,在需要有序的遍历数据时,应选择map,当需要快速定位元素时,应选择unordered_map。
10. 说说哈希和哈希碰撞?
哈希也称散列,哈希算法是指将任意长度的输入通过散列运算得到一个固定长度的输出,该输出就是哈希值。
通常情况下,散列值的空间小于输入值的空间,并且哈希运算是不可逆运算,即可以通过原值得到哈希值,但是却不能通过哈希值推算出原值。
哈希碰撞是指两个不同原值,经过某种哈希运算之后得到了一个一样的哈希值,这就是哈希碰撞,也叫哈希冲突。
哈希碰撞的解决办法有开放寻址法和拉链法,开放寻址法也叫闭散列哈希表,拉链法也叫开散列哈希桶。
先说闭散列,当某个位置发生哈希冲突后,后面的数据就放到下一个位置,如果下一个位置也被占用了,则继续寻找直到找到空位置,闭散列的负载因子是已存入数据和空间容量的比值,当负载因子大于某个值时,会扩容并遍历已存入的数据重新映射。
再说开散列,将哈希冲突的值以链表的形式串起来存储在某个位置,负载因子同样是已存入数据和空间容量的比值,当负载因子大于某个值时进行扩容,并且改变已存入数据的指针使其重新映射。
相关文章:
C/C++面试经历(一)
目录 1. 说说你对C与C的认识? 2. 说说C的三大特性? 3. 说说C的重载? 4. C语言为什么不支持重载? 5. 说说类的默认成员函数? 6. 类的构造函数为什么不支持虚函数? 7. 说说你对指针和引用的理解&…...
【PostgreSQL】系列之 一 用户创建和授权(三)
🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄 个人主页——🎐开着拖拉机回家_Linux,Java基础学习,大数据运维-CSDN博客 🎐✨🍁 🪁🍁 希望本文能够给您带来一定的…...
Python连接Hive实例教程
一 Python连接hive环境实例 经在网络查询相关的教程,发现有好多的例子,发现连接底层用的的驱动基本都是pyhive和pyhs2两种第三方库的来连接的 hive,下面将简介windows 10 python 3.10 连接hive的驱动程序方式,开发工具:pycharm …...
Jest和Mocha对比:两者之间有哪些区别?
目录 什么是单元测试? Jest和Mocha介绍 Jest Jest的特点: Jest的使用限制 Mocha Mocha的特点 使用Mocha的限制 Jest和Mocha的全面比较 我们应该使用哪个测试框架? 结论 什么是单元测试? 所谓单元测试,是对软…...
Oracle:merge into用法
文章目录 merge into使用场景merge into语法测试表普通模式 merge使用注意点 merge into MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入 比单独的 update insert 的方式效率要更高,尤…...
【数据结构OJ题】消失的数字
原题链接:https://leetcode.cn/problems/missing-number-lcci/ 目录 1. 题目描述 2. 思路分析 3.代码实现 1. 题目描述 2. 思路分析 方法一:排序遍历(下一个数不等于上一个数1,这个下一个数就是消失的数字)。 时…...
linux 隔离内核
1、 编辑grub gedit /etc/default/grub 2、修改 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash isolcpus1,3"(这里表示1和3两个cpu被隔离,cpu序号从0开始) or GRUB_CMDLINE_LINUX"isolcpus1,3" 3、update sudo update-grub 4、查看…...
IO学习-有名管道
1,要求实现AB进程对话 A进程先发送一句话给B进程,B进程接收后打印 B进程再回复一句话给A进程,A进程接收后打印 重复1.2步骤,当收到quit后,要结束AB进程 运行结果:...
小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(三)
本文主要以SpringBoot微服务架构为基础,提出了前后端分离的MVVM模型,并对其进行了详细的分析以及研究,以此为相关领域的工作人员提供一定的技术性参考。 目录 6 互联网应用开发架构分析 6.1 微服务架构与单体架构 6.1.1 系统更改部署 6.1…...
应用在多媒体手机中的低功率立体声编解码器
多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合,一般是图像、文字、声音等多种结合,所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念,主要是指文字、图形、图像、声音等多种…...
Teams Room视频会议室方案
需求背景: 适合在40平米的会议室参加Teams视频会议,会议桌周围可以坐20人,要求: 1,操作简单,一键入会Teams Room; 2,任何人带上自己的笔记本电脑,可以分享电脑画面&#…...
C# 委托、事件、特性程序
委托和事件 public partial class Form1 : Form { public Form1() { InitializeComponent(); Man man new Man("小明"); Roommate[] roommates { new Roommate("小张"), new Roommate("小朱"), …...
MapTR论文笔记
MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 目的 传统高精地图 通过一些离线的基于 SLAM 的方法生成,需要复杂的流程以及高昂的维护费用。基于 bev 分割的建图方法,缺少向量化 实例级的信息,比如…...
JS进阶-Day4
🥔:流水不争先争滔滔不绝 JS进阶-Day1——点击此处(作用域、函数、解构赋值等) JS进阶-Day2——点击此处(深入对象之构造函数、实例成员、静态成员等;内置构造函数之引用类型、包装类型等) JS进…...
【C语言】初阶完结练习题
🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C语言初阶 ✨其他专栏:代码小游戏 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论…...
c++类与对象详解
c类与对象详解 对象类方法自定义类型类的特性this类的六个默认成员函数static成员友元内部类 对象 在C中,对象是类的实例。定义对象的语法为: <class_name> object_name;其中,class_name 是定义类时指定的类名,object_nam…...
I/O 函数/缓存和字节流、占位符、getchar(),putchar()
I/O 函数 C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。 缓存和字节流 严格地…...
MySQL日期常见的函数
-- 获取当天日期 -- 2023-06-20 select curdate();-- 获取当天年月日时分秒 select now();-- 日期运算 -- 2024-06-20 17:04:17 select date_add(now(),interval 1 year);-- 日期比较 -- 0 select datediff(now(),now());-- 日期MySQL对于日期类型数据如何查询 -- 获取指定日期…...
Python获取CPU温度
本文的主要目的是演示如何借助 Python 中的 pythonnet 库读取和显示 CPU 温度。 Python获取CPU温度 根据您正在设计的应用程序类型,您可能希望监视运行该程序的机器的资源。 由于多种原因,可能会出现这种情况。 也许您需要您的程序在系统资源达到特定阈…...
后端整理(MySql)
1 事务 1.1 事务ACID原则 原子性(Atomicity) 事务的原子性指的是事务的操作,要么全部成功,要么全部失败回滚 一致性(Consistency) 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
