C++面试题其一
C和C++的区别
C和C++都是广泛使用的编程语言,但它们有显著的区别:
-
语言范式:
- C:是一种过程化编程语言,强调过程和函数的使用。
- C++:是一种多范式编程语言,支持面向对象编程、泛型编程和过程化编程。
-
类和对象:
- C:没有类和对象的概念。
- C++:引入了类和对象的概念,支持封装、继承和多态。
-
标准库:
- C:标准库比较小,主要包含一些基础的函数库。
- C++:标准库更大,包含STL(标准模板库),提供了丰富的数据结构和算法。
-
内存管理:
- C:主要使用
malloc和free进行动态内存分配和释放。 - C++:除了
malloc和free,还提供了new和delete操作符,更适合对象的动态内存管理。
- C:主要使用
-
类型检查:
- C:类型检查相对宽松,支持隐式类型转换。
- C++:类型检查更严格,支持重载、模板等特性。
C++中指针和引用的区别
-
定义:
- 指针:保存变量地址的变量,可以重新赋值,指向不同的变量。
- 引用:是一个变量的别名,一旦绑定到一个变量,不能重新绑定。
-
语法:
- 指针:使用
*和&操作符。 - 引用:使用
&符号,但在使用时像普通变量一样。
- 指针:使用
-
内存分配:
- 指针:需要存储地址的空间。
- 引用:不需要额外的存储空间。
-
初始化:
- 指针:可以不初始化。
- 引用:必须在声明时初始化。
结构体struct和共同体union(联合)的区别
-
内存分配:
- struct:每个成员有自己的内存空间,总大小是所有成员大小的总和。
- union:所有成员共享同一块内存,大小是最大成员的大小。
-
访问:
- struct:所有成员可以同时访问。
- union:同一时刻只能访问一个成员,修改一个成员会影响其他成员。
-
用途:
- struct:用于需要同时访问多个数据的情况。
- union:用于节省内存,需要在不同时间存储不同数据的情况。
#define和const的区别
-
类型检查:
- #define:是预处理指令,不进行类型检查。
- const:是编译时常量,有类型检查。
-
作用范围:
- #define:在预处理阶段进行替换,不局限于某个作用域。
- const:遵循作用域规则,只在声明的作用域内有效。
-
调试:
- #define:替换后无调试信息,难以调试。
- const:有类型和作用域信息,易于调试。
重载overload,覆盖(重写)override,隐藏(重定义)overwrite的区别
-
重载(overload):
- 定义:同一个作用域内,同名函数的参数列表不同。
- 用途:增加函数的多态性,提高代码灵活性。
-
覆盖(重写)(override):
- 定义:子类重新定义父类中的虚函数。
- 用途:实现多态,允许子类提供特定实现。
-
隐藏(重定义)(overwrite):
- 定义:子类定义了一个与父类同名的新函数,但参数列表不同或不是虚函数。
- 用途:在子类中隐藏父类同名函数,防止误用父类函数。
new、delete、malloc、free之间的关系
-
new/delete:
- new:分配对象内存并调用构造函数。
- delete:释放对象内存并调用析构函数。
-
malloc/free:
- malloc:分配指定字节的内存,不调用构造函数。
- free:释放内存,不调用析构函数。
delete和delete[]的区别
- delete:用于释放单个对象。
- delete[]:用于释放数组对象。
虚函数、纯虚函数
-
虚函数:
- 定义:在基类中使用
virtual关键字声明,允许子类重写。 - 用途:实现运行时多态。
- 定义:在基类中使用
-
纯虚函数:
- 定义:在基类中声明,但不提供实现,用
=0表示。 - 用途:定义抽象类,要求子类必须实现。
- 定义:在基类中声明,但不提供实现,用
STL库用过吗?常见的STL容器有哪些?算法用过几个?
-
常见STL容器:
- 序列式容器:
vector,list,deque,array - 关联式容器:
set,map,multiset,multimap
- 序列式容器:
-
常见STL算法:
- 排序:
sort - 查找:
find - 变换:
transform - 复制:
copy
- 排序:
const的作用
- 常量声明:
const int x = 5; - 常量指针:
const int* p; - 常量成员函数:
int getValue() const;
虚函数的实现
通过虚函数表(vtable)实现,编译器为每个类创建一个vtable,存储虚函数指针。
堆和栈的区别
-
分配方式:
- 堆:动态分配,需要手动管理(
new/delete)。 - 栈:自动分配,函数调用结束自动释放。
- 堆:动态分配,需要手动管理(
-
存储内容:
- 堆:动态分配的对象。
- 栈:局部变量和函数调用信息。
关键字static的作用
- 局部变量:静态局部变量,生存期延长到程序结束。
- 类成员:静态成员变量/函数,属于类而非对象。
- 文件作用域:静态全局变量/函数,限制在文件内可见。
STL中map和set的原理(关联式容器)
- map:基于红黑树,键值对存储,支持快速查找。
- set:基于红黑树,唯一元素存储,支持快速查找。
include<file.h>和#include"file.h"的区别
- 尖括号:从标准库路径查找。
- 双引号:从当前目录查找,然后是标准库路径。
什么是内存泄漏?面对内存泄漏和指针越界的方法
-
内存泄漏:动态分配的内存未释放。
- 方法:使用智能指针,定期检查和释放。
-
指针越界:指针访问非法内存。
- 方法:使用调试工具(如Valgrind),严格检查边界。
定义和声明的区别
- 定义:分配内存,如
int x; - 声明:说明存在,不分配内存,如
extern int x;
C++文件编译与执行的四个阶段
- 预处理:处理
#include、#define等预处理指令。 - 编译:将源码翻译为目标代码。
- 汇编:将目标代码转换为机器指令。
- 链接:将目标文件和库文件合并生成可执行文件。
STL中的vector的实现,是怎么扩容的?
vector通过动态数组实现,当容量不足时,分配更大的内存(通常是原来的两倍),复制旧数据到新内存,并释放旧内存。
相关文章:
C++面试题其一
C和C的区别 C和C都是广泛使用的编程语言,但它们有显著的区别: 语言范式: C:是一种过程化编程语言,强调过程和函数的使用。C:是一种多范式编程语言,支持面向对象编程、泛型编程和过程化编程。 …...
CentOS7某天的samba服务搭建操作记录(还没成功)
#CentOS7 yum软件仓库阿里云 samba服务器配置失败 sensors成功了 (花了200元组装H61测试机,75元的主板只有一块能用,垃圾板但又不完全能用) 2024.5月的某天记录如下: https://blog.csdn.net/dszgf5717/article/details/53732182 …...
Qt Demo:基于TCP协议的视频传输Demo
目录 1.设计思路 2.Pro文件配置 3.头文件引入 4.界面设计 5.初始化设备函数 6.发起视频链接函数 7.初始化定时器模块函数 8.TCP链接模块函数 9.处理接收的数据线程函数 10.实现功能展示 设计思路 基于TCP协议的视频传输Demo,设计要实现的功能主要是TCP传输还有视频&…...
内存管理【C++】
内存分布 C中的内存区域主要有以下5种 栈(堆栈):存放非静态局部变量/函数参数/函数返回值等等,栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆:用于程序运行时动态内存分配ÿ…...
D3D 顶点格式学习
之前D3D画三角形的代码中有这一句, device.VertexFormat CustomVertex.TransformedColored.Format; 这是设置顶点格式; 画出的三角形如下, 顶点格式是描述一个三维模型的顶点信息的格式;可以包含以下内容, 位置…...
gmssl vs2010编译
1、虚拟机win10 x64,离线安装vs2010和2010sp1补丁; 2、安装ActivePerl_v5.28.1.0000和nasm-2.16.03-installer-x64均是默认完整安装; nasm官网下载: Index of /pub/nasm/releasebuilds/2.16.03/win64https://www.nasm.us/pub/nas…...
容器化部署gitlab、jenkins,jenkins应用示例
一、容器化部署docker和docker conpose安装 Docker&Docker-compose的安装及部署_docker 20 使用什么版本docker-compose-CSDN博客 1.docker 安装脚本 cat >01_docker.sh<<EOF #!/bin/bash yum remove docker \docker-client \docker-client-latest \docker-co…...
基于STM32的轻量级Web服务器设计
文章目录 一、前言1.1 开发背景1.2 实现的功能1.3 硬件模块组成1.4 ENC28J60网卡介绍1.5 UIP协议栈【1】目标与特点【2】核心组件【3】应用与优势 1.6 添加UIP协议栈实现创建WEB服务器步骤1.7 ENC28J60添加UIP协议栈实现创建WEB客户端1.8 ENC28J60移植UIP协议并编写服务器测试示…...
用r语言处理 Excel数据当中的缺失值方法
以下是使用 R 编程语言处理 Excel 缺失数据的一些常见方法示例代码:(无需循环) 读取包含缺失数据的 Excel 文件 data <- read.csv(“your_file.csv”) 查看数据中是否有缺失值 sum(is.na(data)) 用平均值填充缺失值 data c o l u m …...
AWS 高防和阿里云高防深度对比
随着网络攻击的不断增加,企业对于网络安全的需求也越来越高。在这种情况下,高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商,都提供了高防护服务,但它们之间存在着一些差异。我们九河云一…...
ctfshow web 月饼杯II
web签到 <?php //Author:H3h3QAQ include "flag.php"; highlight_file(__FILE__); error_reporting(0); if (isset($_GET["YBB"])) {if (hash("md5", $_GET["YBB"]) $_GET["YBB"]) {echo "小伙子不错嘛ÿ…...
「前端+鸿蒙」核心技术HTML5+CSS3(二)
1、开发者文档 开发者文档通常由浏览器厂商或技术社区提供,包含有关Web技术(如HTML、CSS、JavaScript)的详细信息,API文档,以及最佳实践。例如,MDN Web Docs是一个广泛认可的开发者资源。 2、块级元素与行列元素 块级元素:在页面上占据整行的元素,如<div>、<…...
unity接入live2d
在bilibili上找到一个教程,首先注意一点,你直接导入那个sdk,并且打开示例,显示的模型是有问题的,你需要调整模型上脚本的一个枚举值,调整它的渲染顺序是front z to我看教程时候,很多老师都没有提…...
练习题-17
以下题目来自2024年5月清华大学“丘成桐数学科学领军计划数学水平考试”。第11题本人参考了网友Fiddie (数学兔的极大理想)的解答,原网址是 https://mp.weixin.qq.com/s/q9slRWL4iO_TcSdkmbfbbw. 第10题:在10维列向量构成的内积空间 V V V中…...
乐高小人分类项目
数据来源 LEGO Minifigures | Kaggle 建立文件目录 BASE_DIR lego/star-wars-images/ names [YODA, LUKE SKYWALKER, R2-D2, MACE WINDU, GENERAL GRIEVOUS ] tf.random.set_seed(1)# Read information about dataset if not os.path.isdir(BASE_DIR train/):for name in …...
个人关于ChatGPT的用法及建议
概述 这里只是个人常用的几个软件,做一下汇总,希望对各位有用。 如果有更高认知的朋友,请留下你的工具名称,提醒我一下,谢谢~ 常用的chatgpt模型工具: 以下是一些知名的例子: 文…...
神经网络的工程基础(二)——随机梯度下降法|文末送书
相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下:regression2chatgpt/ch06_optimizer/stochastic_gradient_descent.ipynb 本文将讨论利用…...
常见的几种编码方式
常见的编码方式及其特点: 编码方式的设计是为了适应不同的字符集和应用需求,因此它们在表示字符时使用的位数和字节数各不相同 常见编码方式及其位数和字节数 ASCII(American Standard Code for Information Interchange)&#x…...
ubuntu移动硬盘重命名
因为在ubuntu上移动硬盘的名字是中文的,所以想要改成英文的。 我的方法: 将移动硬盘插到windows上,直接右键重命名。再插到ubuntu上名字就改变了。 别人的方法: ubuntu下如何修改U盘名字-腾讯云开发者社区-腾讯云 在自带的软件…...
VUE框架前置知识总结
一、前言 在学习vue框架中,总是有些知识不是很熟悉,又不想系统的学习JS,因为学习成本太大了,所以用到什么知识就学习什么知识。此文档就用于记录零散的知识点。主要是还是针对与ES6规范的JS知识点。 以下实验环境都是在windows环…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
