【C++】1.语言基础:八股文

2023-05-16

心口如一,犹不失为光明磊落丈夫之行也。——梁启超

文章目录

    • :smirk:1. 语言基础
      • 内存分配
      • 指针参数传递和引用参数传递
      • 四种强制转换
      • 面向对象的三大特性并举例
      • #define 和别名 typedef 的区别
    • :blush:2. 标准库
      • STL介绍
      • 频繁调⽤ push_back() 的影响
      • ++i 和 i++ 的区别
      • ⼤端⼩端模式
      • 回调函数的作⽤
    • :satisfied:3. 四件套
      • TCP三次握⼿和挥⼿
      • 线程⽐进程具有哪些优势
    • :satisfied:4.有目的的刻意练习

😏1. 语言基础

内存分配

代码区:存放程序的二进制代码
常量存储区:存储常量,一般不能改
全局/静态存储区:分为初始化和未初始化的两个相邻区域
堆:开发者管理,需要手动 new malloc delete free 进行内存分配与回收,可能会出现内存泄漏和空闲碎片的情况

指针参数传递和引用参数传递

指针参数传递本质是值传递,传递一个地址值;而引用传递传递的是实参变量的地址
指针传递可以改变其指向的对象,而引用对象不能被修改

四种强制转换

包括:static_cast, dynamic_cast, const_cast, reinterpret_cast

面向对象的三大特性并举例

封装:就是把客观事物封装成抽象的类,并且类可以把⾃⼰的数据和⽅法只让信任的类或者对象操作,对不可信的进⾏信息隐藏。⼀个类就是⼀个封装了数据以及操作这些数据的代码的逻辑实体。在⼀个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种⽅式,对象对内部数据提供了不同级别的保护,以防⽌程序中⽆关的部分意外的改变或错误的使⽤了对象的私有部分。

继承:是指可以让某个类型的对象获得另⼀个类型的对象的属性的⽅法。它⽀持按级分类的概念。继承是指这样⼀种能⼒:它可以使⽤现有类的所有功能,并在⽆需重新编写原来的类的情况下对这些功能进⾏扩展。通过继承创建的新类称为“⼦类”或者“派⽣类”,被继承的类称为“基类”、“⽗类”或“超类”。继承的过程,就是从⼀般到特殊的过程。要实现继承,可以通过“继承”和“组合”来实现。
继承概念的实现⽅式有两类:
实现继承:实现继承是指直接使⽤基类的属性和⽅法⽽⽆需额外编码的能⼒。
接⼝继承:接⼝继承是指仅使⽤属性和⽅法的名称、但是⼦类必需提供实现的能⼒。

多态:就是向不同的对象发送同⼀个消息,不同对象在接收时会产⽣不同的⾏为(即⽅法)。即⼀个接⼝,可以实现多种⽅法。
多态与⾮多态的实质区别就是函数地址是早绑定还是晚绑定的。如果函数的调⽤,在编译器编译期间就可以确定函数的调⽤地址,并产⽣代码,则是静态的,即地址早绑定。⽽如果函数调⽤的地址不能在编译器期间确定,需要在运⾏时才确定,这就属于晚绑定

#define 和别名 typedef 的区别

执⾏时间不同, typedef 在编译阶段有效, typedef 有类型检查的功能;#define是宏定义,发⽣在预处理阶段,不进⾏类型检查;功能差异, typedef ⽤来定义类型的别名,定义与平台⽆关的数据类型,与 struct的结合使⽤等。
#define 不只是可以为类型取别名,还可以定义常量、变量、编译开关等。 作⽤域不同,#define 没有作⽤域的限制,只要是之前预定义过的宏,在以后的程序中都可以使⽤。 ⽽ typedef 有⾃⼰的作⽤域。

😊2. 标准库

STL介绍

STL ⼀共提供六⼤组件,包括容器,算法,迭代器,仿函数,配接器和配置器,彼此可以组合
套⽤。容器通过配置器取得数据存储空间,算法通过迭代器存取容器内容,仿函数可以协助算 法完成不同的策略变化,配接器可以应⽤于容器、
仿函数和迭代器。 容器: 各种数据结构,如 vector, list, deque, set, map,⽤来存放数据, 从实现的⻆度来
讲是⼀种类模板。 算法: 各种常⽤的算法,如 sort(插⼊,快排,堆排序), search(⼆分查找), 从实现的
⻆度来讲是⼀种⽅法模板。 迭代器: 从实现的⻆度来看,迭代器是⼀种将 operator*,operator->,operator++,
operator–等 指针相关操作赋予重载的类模板,所有的 STL 容器都有⾃⼰的迭代器。 仿函数:从实现的⻆度看,仿函数是⼀种重载了
operator()的类或者类模板。 可以帮助算法实 现不同的策略。 配接器:⼀种⽤来修饰容器或者仿函数或迭代器接⼝的东⻄。
配置器:负责空间配置与管理,从实现的⻆度讲,配置器是⼀个实现了动态空间配置、空间管 理,空间释放的类模板。

频繁调⽤ push_back() 的影响

向 vector 的尾部添加元素,很有可能引起整个对象 存储空间的重新分配,重新分配更⼤的内 存,再将原数据拷⻉到新空间中,再释
放原有内存,这个过程是耗时耗⼒的,频繁对 vector 调⽤ push_back()会导致性能的下降。 在 C++11 之后, vector
容器中添加了新的⽅法: emplace_back() ,和 push_back() ⼀样的是都是在容器末尾添加⼀个新的元素进去,不同的是
emplace_back() 在效率上相⽐ 较于 push_back() 有了⼀定的提升。 emplace_back() 函数在原理上⽐
push_back() 有了⼀定的改进,包括在内存优化⽅⾯和
运⾏效率⽅⾯。内存优化主要体现在使⽤了就地构造(直接在容器内构造对象,不⽤拷⻉⼀个 复制品再使⽤)
+强制类型转换的⽅法来实现,在运⾏效率⽅⾯,由于省去了拷⻉构造过程, 因此也有⼀定的提升。

++i 和 i++ 的区别

前置加加不会产⽣临时对象,后置加加必须产⽣临时对象,临时对象会导致效率降低。

++i实现:

int& int::operator++ (){
*this +=1return *this}

i++实现:

const int int::operatorint{
int oldValue = *this++*this);
return oldValue;
}

⼤端⼩端模式

⼤端模式:是指数据的⾼字节保存在内存的低地址中,⽽数据的低字节保存在内存的⾼地址端。
⼩端模式,是指数据的⾼字节保存在内存的⾼地址中,低位字节保存在内存的低地址端。

直接读取存放在内存中的⼗六进制数值,取低位进⾏值判断:

int a = 0x12345678;
int *c = &a;
c[0] == 0x12 ⼤端模式
c[0] == 0x78 ⼩段模式

回调函数的作⽤

当发⽣某种事件时,系统或其他函数将会⾃动调⽤你定义的⼀段函数。

回调函数就相当于⼀个中断处理函数,由系统在符合你设定的条件时⾃动调⽤。为此,你需要
做三件事:1、声明;2、定义;3、设置触发条件,就是在你的函数中把你的回调函数名称转 化为地址作为⼀个参数,以便于系统调⽤。

😆3. 四件套

TCP三次握⼿和挥⼿

三次握⼿过程:
第⼀次:客户端发含SYN位, SEQ_NUM = S的包到服务器。(客-> SYN_SEND)
第⼆次:服务器发含ACK,SYN位且ACK_NUM = S + 1, SEQ_NUM = P的包到客户机。(服-> SYN_RECV)
第三次:客户机发送含ACK位, ACK_NUM = P + 1的包到服务器。(客 -> ESTABLISH,服 -> ESTABLISH)

四次挥⼿过程:
第⼀次:客户机发含FIN位, SEQ = Q的包到服务器。(客 -> FIN_WAIT_1)
第⼆次:服务器发送含ACK且ACK_NUM = Q + 1的包到服务器。(服-> CLOSE_WAIT,客-> FIN_WAIT_2)此处有等待
第三次:服务器发送含FIN且SEQ_NUM = R的包到客户机。(服-> LAST_ACK,客-> TIME_WAIT)此处有等待
第四次:客户机发送最后⼀个含有ACK位且ACK_NUM = R + 1的包到客户机。(服-> CLOSED)

线程⽐进程具有哪些优势

1)线程在程序中是独⽴的,并发的执⾏流,但是,进程中的线程之间的隔离程度要⼩;
2)线程⽐进程更具有更⾼的性能,这是由于同⼀个进程中的线程都有共性:多个线程将共享同⼀个进程虚拟空间;
3)当操作系统创建⼀个进程时,必须为进程分配独⽴的内存空间,并分配⼤量相关资源;

😆4.有目的的刻意练习

  1. 定义明确的目标
  2. 练习过程保持专注(归类整理、思考迁移)
  3. 获取反馈(无论是正的还是负的)
  4. 走出舒适区,在实际场景中验证知识或能力(学以致用)

在这里插入图片描述

以上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C++】1.语言基础:八股文 的相关文章

  • CSS实现个性化水球图

    在可视化应用中 xff0c 水球图也是一种常见的数据展示形式 xff0c 关于使用CSS实现个性化水球 xff0c 在相当长的一段时间并没有找到比较简洁的实现方式 xff0c 因此在以往的可视化作品中 xff0c 大多采用echarts插件
  • CSS实现3D球面字符云

    在大屏可视化应用中 xff0c 使用3D的场景有很多 xff0c 复杂的交互动画通常是使用Three js或echarts gl来实现 xff0c 但是在一些简单的3D场景中 xff0c CSS也可以实现一些不错的展示效果 本文使用CSS相
  • CSS实现渐变仪表盘的简单尝试

    在 CSS锥形渐变实现环形进度条 一章中 xff0c 讲解了实现渐变进度条的一点思路 xff0c 基于此思路 xff0c 本章节尝试性的使用CSS实现一个简单的渐变仪表盘 xff0c 给大家提供一些借鉴 实现角向渐变 xff0c 不得不提一
  • 【opencv】OpenCV开发环境配置(C++)

    软件版本 opencv 4 7 0 windowsvisual studio 2022 环境配置 1 创建项目 打开VS 2022 xff0c 点击创建新项目 点击项目 gt 点击属性 2 添加包含目录 点击VC 43 43 目录 gt 点
  • 1、什么是网络前缀

    基础知识 xff1a 1 已知一个IP地址 xff0c 如何区分它是A类地址还是B类或者C类地址呢 A类地址 1 0 0 0 到126 0 0 0 0 0 0 0 和127 0 0 0保留 B 类地址 128 1 0 0到191 254 0
  • ZYNQ petalinux设置固定IP地址

    背景 xff1a zynq petalinux在开机自启动以后ifconfig设置ip xff0c 然后运行应用程序 xff1b 如果设备没有串口且程序在启动过程中用Wireshark抓取不到信息 xff0c 这时 xff0c 就要使用固定
  • 10、IEEE802.3和Ethernet II帧的区别, 0x0806 ARP协议分析

    一 IEEE802 3和Ethernet II帧的区别 概念 xff1a 1 以太网上使用两种标准帧格式 第一种是上世纪80年代提出的DIX v2格式 xff0c 即Ethernet II格式 第二种是1983年提出的IEEE 802 3格
  • W10: Warning: Changing a readonly file使用vi/vim报错问题解决(使用管理员也不能修改)

    使用vi vim编辑文件的时候出现W10 Warning Changing a readonly file报错 解决方法 xff1a 一 强制保存退出 xff1a wq 二 ll 查询文件属主 xff0c 使用属主赋予权限 chmod u
  • 使用Galileo SDK跨局域网遥控机器人

    原链接 GalileoSDK是由我们开发的机器人导航系统SDK 通过SDK用户能够方便的操控机器人 现在小强用户已经可以免费体验到SDK的功能了 SDK内部集成了物联网连接功能 设置完成后用户能够通过SDK跨局域网遥控和获取机器人状态 下面
  • zcu102网口不通

    新建工程采用的板子默认配置 xff0c 启动后执行命令 xff1b dmesg grep ethernet 1 545671 macb ff0e0000 ethernet Not enabling partial store and for
  • zcu102开发板实现 虚拟jtag

    开发板zcu102 xff1b petalinux2020 1 需要自备一个FMC转JTAG的子卡 xff1b 此篇记录自己实现的过程 xff0c 以备查询 xff1b 1 整个流程连接 xff1a https xilinx wiki at
  • 查看ubuntu系统的版本信息、内存大小及使用、磁盘大小等常用命令

    一 ubuntu系统的版本信息 xff1a 方法 步骤 xff1a 1 进入Ubuntu系统 xff0c 点击左侧图标栏中的黑框 xff0c 打开终端 xff1b 2 左侧没有终端图标的情况 xff0c 可以搜索按钮 图中左侧第一个 xff
  • CentOS7 无法进入图形界面 黑屏

    问题现象描述 xff1a CentOS有界面的系统 xff0c 开机后进入界面 xff0c 在开机界面背景为 7 的地方卡住 xff0c 然后界面就黑掉 解决办法 xff1a 1 开机后 xff0c 按下 ctrl 43 alt 43 F2
  • 重装win10提示“Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装...”

    背景 xff1a 因为GHOST系统会捆绑大量软件 xff0c 主页被强制修改 xff0c 并且系统还可能存在删减的可能性 xff0c 所以越来越多的用户考虑安装官方MSDN原版系统 xff0c 但是呢 xff0c 近期总是有用户称自己在安
  • 在petalinux下提示:Failed to menu config project component....

    现象 xff1a 在petalinux下配置硬件描述语言时 xff0c 提示错误 xff1a 命令 xff1a petalinux config get hw description 61 hdf path 错误提示 xff1a ERROR
  • petalinux下修改系统空间笔记

    该文档是自己记录的笔记 xff0c 方便后面自己查看 在petalinux设置系统空间中需要注意的点 xff01 1 在menuconfig界面下设置系统空间为了在内核启动输出显示 xff1b Subsystem AUTO Hardware
  • PetaLinux 去除用户登陆 (Login into target without pass word)

    PetaLinux 自动登录登陆 1 初始化 PetaLinux 运行环境 xff1a source PetaLinux安装目录 settings sh 2 更改 PetaLinux 配置 xff1a 1 cd 到项目工程目录下 xff1b
  • PetaLinux 使用外部代码 (u-boot)

    背景 xff1a 在petalinux编译工程时 xff0c 我们可能有修改u boot源码的需求 xff0c 这时就需要我们使用外部的代码进行编译 实现步骤 xff1a 在配置前 xff0c 请确认我们已经在github上把对应的uboo
  • 异常的抛出和处理

    自定义输出异常 package error import java util ArrayList public class Exception public static void main String args TODO Auto ge
  • 在ROS中使用UDP进行通信

    原链接 ROS的网络通信提供了两种方式 xff0c 一种是TCP协议 xff0c 一种是UDP协议 默认采用TCP进行通信 但是在实际的WIFI网络使用中发现用户经常反馈客户端和机器人连接中断且无法重新建立连接 在ROS wiki中官方也有

随机推荐

  • 网络编程TCP/IP和UDP以及HTTP协议

    OSI的七层模型和TCP IP的四层模型 TCP IP协议是从OSI的七层模型中简化出来的 四层模型的详图 什么是HTTP协议 HTTP称为 超文本传输协议 是一种基于应用层的通信协议 xff0c 它允许将超文本标记语言 HTML 文档从W
  • 网络字节序之大小端(字节序与比特序)

    引言 xff1a 最近在网上看了很多博客 xff0c 想要深入了解大小端问题 xff0c 主要是做毕设时 xff0c RTP包协议的结构体定义有两种方式 xff0c 即大端和小端 但是一些博客并没有讲到理解大小端的本质问题 xff0c 在这
  • C++的编译流程

    C C 43 43 的编译流程 编译流程分为四个阶段 xff1a 预处理 编译 汇编 链接 以Linux系统下g 43 43 编译为例 xff1a 通过g 43 43 的选项可以查看过程中的每一步 预处理 xff1a 处理一些 号定义的命令
  • 【Autoware规控】Lattice规划节点

    文章目录 1 Lattice规划介绍2 相关代码 1 Lattice规划介绍 Lattice Planner 是一种基于栅格地图的规划算法 xff0c 通过搜索和优化实现路径规划的目的 Lattice Planner 的核心思想是将路径规划
  • 【Autoware规控】OpenPlanner规划节点

    文章目录 1 OpenPlanner介绍2 相关代码 1 OpenPlanner介绍 OpenPlanner是Autoware种使用的一种运动规划算法 xff0c 通过对全局路径采样后生成一系列的候选路径 xff0c 结合矢量地图 传感器结
  • 【C++】8.高效编程:Effective C++学习

    Effective C 43 43 改变程序与设计的55个具体做法 文章目录 1 将C 43 43 视为federation of languages xff08 语言联合体 xff09 2 用consts enums 和 inlines取
  • 【Qt web】内嵌CEF制作浏览器

    文章目录 1 CEF介绍2 环境配置3 示例程序 1 CEF介绍 Qt自带QWebEngine模块 xff0c 可以快速实现浏览器 xff0c 但在实际使用中 xff0c 某些AMD显卡电脑运行使用了QWebEngine的qt软件 xff0
  • 【C++】9.web应用:oatpp-web框架入门

    说到web开发 xff0c 大家肯定会想到JS Python xff0c 甚至Java xff0c 但应该不会想到C 43 43 用C 43 43 开发web也不是不行 xff0c 这不 xff0c oatpp就是一个轻量 跨平台 高性能的
  • 【Python】Excel数据上下翻转

    遇到一个问题 xff0c 需要将excel表格的数据上下翻转 xff0c 不是升序或者降序 xff0c 不然就不需要程序来实现了 网上也看了有些插件有这个功能 xff0c 但插件过于老旧 xff0c 下载都有问题 记录一下程序实现的过程 x
  • 【IPOPT】Ubuntu安装IPOPT非线性优化求解器

    IPOPT Interior Point OPTimizer 是一款开源的非线性优化求解器 xff0c 在自动驾驶规控中会用到 xff0c 之前在这里卡了很久 xff0c 现在终于装上了 ipopt文档 xff1a https coin o
  • 使用systemback制作Ubuntu自定义系统镜像和系统备份

    原链接 xff1a https community bwbot org topic 167 运行测试平台 小强ROS机器人 Systemback是一个Ubuntu系统中用于发布自定义系统镜像和系统备份的软件 有时候我们对自己的Ubuntu做
  • orangePi3 TLS tf卡分区、格式化、手动挂载和开机自动挂载

    orangePi3 TLS tf卡分区 格式化 手动挂载和开机自动挂载 适用于所有linux系统 TF卡新建分区 查看磁盘情况 fdisk l root 64 orangepi3 lts fdisk l Disk dev mmcblk0 5
  • 【PyQt】PyQt5开发环境搭建

    PyQt是基于python来开发Qt可视化窗口的简称 xff0c Qt本身是基于C 43 43 开发 xff0c 性能较好 xff0c Qt与Python结合后 xff0c 在Python的支持下可以快速地开发桌面应用程序 文章目录 1 P
  • 【C++】9.GIS应用:开源GIS平台开发入门(MapServer+QGIS+PostGIS+OpenLayers)

    GIS地理信息处理相关 文章目录 1 GIS软件工具2 MapServer服务器3 QGIS桌面软件QGIS加载csv数据 4 PostGIS数据库5 OpenLayers JS 浏览器客户端 1 GIS软件工具 在GIS数据处理时 xff
  • 【C++】6.网络编程:socket实现通信(文字、语音)

    常见的通信方式有文本 语音 xff0c 下面用C 43 43 实现 xff1a 参考 xff1a https blog csdn net Robot hfut article details 102862052 https blog csd
  • 【ros】6.ros激光雷达SLAM(建图定位)

    百行业为先 xff0c 万恶懒为首 梁启超 文章目录 smirk 1 激光SLAM blush 2 二维激光SLAM satisfied 3 三维激光SLAM x1f60f 1 激光SLAM SLAM xff08 同步定位与地图构建 xff
  • 【ros】7.ros导航navigation(定位规划)

    物竞天择 xff0c 优胜劣汰 xff1b 苟不自新 xff0c 何以获存 梁启超 文章目录 smirk 1 ros导航 blush 2 2d导航 satisfied 3 3d导航 x1f60f 1 ros导航 ros机器人有个导航功能 x
  • 【两周年】我的创作纪念日(水)

    机缘 两年前的今天 xff0c 处于离职状态 xff0c 准备去另一个城市工作 xff0c 同时开始学习编程知识 IT技能 xff0c CSDN让我发现了一群热爱学习和分享的小伙伴 xff0c 也萌发了在这里扎根的想法 收获 不知不觉已经两
  • AI模型部署概述

    心口如一 xff0c 犹不失为光明磊落丈夫之行也 梁启超 文章目录 smirk 1 AI模型部署方法 blush 2 AI模型部署框架ONNXNCNNOpenVINOTensorRTMediapipe如何选择 satisfied 3 AI模
  • 【C++】1.语言基础:八股文

    心口如一 xff0c 犹不失为光明磊落丈夫之行也 梁启超 文章目录 smirk 1 语言基础内存分配指针参数传递和引用参数传递四种强制转换面向对象的三大特性并举例 define 和别名 typedef 的区别 blush 2 标准库STL介