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

news2025/1/16 11:07:14

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

文章目录

    • :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. 走出舒适区,在实际场景中验证知识或能力(学以致用)

在这里插入图片描述

以上。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ePWM模块(1)

ePWM模块 ePWM模块内部包含有7个子模块,分别是时间基准子模块TB、比较功能子模块CC,动作限定子模块AQ、死区控制子模块DB、斩波控制子模块PC、事件触发子模块ET和故障捕获子模块TZ。 每个ePWM模块都具有以下功能: 可以输出两路PWM,EPWMxA和EPWMxB两路PWM可以独立输出,也可…

数字座舱带动液晶仪表升级,哪些企业「领跑」前装量产份额

作为人机交互的关键一环,传统汽车机械仪表也在经历数字化、智能化的升级。尤其是整车智能化的升级、电动化的转型,传统仪表存在反应慢、精度低和显示方式单一的缺点,已经不能满足市场要求。 比如,相比于传统机械式仪表&#xff0…

Qt5.9学习笔记-事件(五) 事件调试和排查

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

vue+node.js高校青年志愿者管理系统

1.系统登录:系统登录是用户访问系统的路口,设计了系统登录界面,包括用户名、密码和验证码,然后对登录进来的用户判断身份信息,判断是管理员用户还是普通用户。 2.系统用户管理:不管是…

软件设计师内容记载

栈和队列 栈是按照 先进后出或者 后进先出,队列是先进先出 栈只能在栈顶进行插入和删除,栈底不动。 队列是在一端插入,一端删除。 允许插入的是队尾,允许删除的是队头。 循环队列: 队头 队尾:队尾指针指向的…

PXI 国产化测试系统中数据采集与分析软件的设计

数据采集与分析系统需求分析和总体设计 数据采集与分析系统是 PXI 测试系统的上位机软件子系统,在系统中有着重 要的作用。本章将首先简要介绍 PXI 测试系统,分析其整体结构与功能,说明数 据分析系统与 PXI 测试系统的关系&#xff…

每天一道算法练习题--Day25 第一章 --算法专题 --- ----------单调栈

单调栈 栈是什么?栈的常用操作栈的常用操作时间复杂度应用及题目推荐 单调栈又是什么?适用场景伪代码代码题目推荐 总结 顾名思义, 单调栈是一种栈。因此要学单调栈,首先要彻底搞懂栈。 栈是什么? 栈是一种受限的数据…

国产安全芯片,请关注他们!

一、华大电子 http://www.hed.com.cn/ 1.1 公司简介 北京中电华大电子设计有限责任公司 (简称“华大电子”)成立于2002年6月,是国家认定的高新技术企业,是国内最早的集成电路设计企业之一,是中国安全芯片产业的核心…

【ROS】如何让ROS中节点实现数据交换Ⅱ --服务通信

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 本章将介绍如何通过服务通信的方式实现节点数据交换以及ROS相关指令 本章将介绍如何通过服务通信的方式实现节点数据交换以及ROS相关指令…

【数据结构与算法】常用数据结构(二)

😀大家好,我是白晨,一个不是很能熬夜,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!💪&#x1f4…

asp.net+sqlserver基于web的奖学金助学金评定系统

管理员部分功能 管理员管理,管理系统内的所有管理人员信息 1.学生信息管理,管理系统内需要进行奖助学金评定的学生信息 2.教师信息管理,管理学院内的所有教师信息 3.一级指标管理,管理奖助学金评定过程中的一级指标内容 4.二级指标…

IPC:匿名管道和命名管道

一 管道初级测试 写两个小程序&#xff0c;一个负责向管道发数据&#xff0c;一个从管道接收数据&#xff1b; pipe.cpp #include <iostream> using namespace std;int main() {cout << "hello world" << endl;return 0; } pipe2.cpp #inclu…

【LeetCode】环形链表+结论证明

题目链接&#xff1a;环形链表 题目&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 p…

中级软件设计师备考--解答题--数据流图

目录 基本概念基本元素数据流图的分层平衡原则 数据字典 基本概念 数据流图也称为数据流程图&#xff08;DFD&#xff09;&#xff0c;它摆脱了系统的物理内容&#xff0c;精确地在逻辑上描述系统的功能、输入、输出和数据存储&#xff0c;是系统逻辑模型的重要组成部分。 基…

《走进对象村3》找对象送孩子之特殊的构造方法

文章目录 &#x1f680;文章导读1. 构造方法1.1 构造方法的分类1.1.1 非默认的静态方法1.1.2 默认的构造方法1.1.3 带参数的构造方法 构造方法的特性&#xff1a; &#x1f680;文章导读 在本篇文章中&#xff0c;对构造方法进行了一些总结&#xff0c;可能也有不足的地方&…

Golang每日一练(leetDay0059) 两数之和II、Excel表列名称

目录 167. 两数之和 II 输入有序数组 Two-sum-ii-input-array-is-sorted &#x1f31f;&#x1f31f; 168. Excel表列名称 Excel Sheet Column Title &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练…

MySQL多表查询之连接查询

0. 数据源 /*Navicat Premium Data TransferSource Server : localhost_3306Source Server Type : MySQLSource Server Version : 80016Source Host : localhost:3306Source Schema : tempdbTarget Server Type : MySQLTarget Server Version…

《走进对象村6》面向对象的第三大特性——多态

文章目录 &#x1f680;文章导读1.1 多态的概念1.2 多态的实现条件1.3 向上转型和向下转型1.4 重写 **面试问题&#xff1a;重写和重载的区别**多态的实现 &#x1f680;文章导读 在本篇文章中&#xff0c;将会有很多的干货和知识点掌握&#xff0c;希望读者慢慢耐心阅读 在本篇…

如何设定项目中的里程碑?

项目管理中非常重要的就是合理设置阶段性的里程碑&#xff0c;在项目实施过程中&#xff0c;根据里程碑来灵活控制项目进度和节奏。那么一个IT项目该如何合理地安排里程碑呢&#xff1f; 在IT项目管理中&#xff0c;里程碑是一种非常重要的工具&#xff0c;它能够帮助项目经理和…

谈谈架构分层

大家好&#xff0c;我是易安&#xff01; 在系统从0到1的阶段&#xff0c;为了让系统快速上线&#xff0c;我们通常是不考虑分层的。但是随着业务越来越复杂&#xff0c;大量的代码纠缠在一起&#xff0c;会出现逻辑不清晰、各模块相互依赖、代码扩展性差、改动一处就牵一发而动…