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) 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
