当前位置: 首页 > article >正文

面经-C语言——堆和栈的区别,引用和指针区别,Linux的常用指令,RS232和RS485,TCP连接建立与断开

面经-C语言——堆和栈的区别,引用和指针区别,Linux的常用指令,RS232和RS485,TCP连接建立与断开

    • 堆(Heap)和栈(Stack)的详细比较
    • 引用和指针区别对比表:
    • Linux的常用指令
    • RS232和RS485的详细比较:
    • TCP连接建立与断开
      • 三次握手(建立连接)详解
        • 第一次握手:客户端发起连接
        • 第二次握手:服务器响应
        • 第三次握手:客户端确认
      • 四次挥手(断开连接)详解
        • 第一次挥手:客户端发起断开
        • 第二次挥手:服务器确认
        • 第三次挥手:服务器发起断开
        • 第四次挥手:客户端最终确认
      • 重要概念和意义
        • 为什么需要三次握手
        • 为什么需要四次挥手

堆(Heap)和栈(Stack)的详细比较

对比维度堆(Heap)栈(Stack)
基本定义动态分配的内存空间,用于存储复杂的数据结构一种遵循后进先出(LIFO)原则的线性数据结构
内存分配方式动态分配,大小可以随程序运行时改变静态分配,大小在编译时确定,malloc,free,或者new,delete
访问速度相对较,使用复杂的数据结构管理非常,由编译器管理
内存管理需要手动管理(在C/C++中)系统自动管理,随着函数调用自动分配和回收
存储的数据类型复杂的数据结构,如对象、大型数据局部变量、函数调用信息、基本数据类型
生命周期可以在整个程序运行期间存在 ,手动释放随着函数调用的结束而立即释放
内存分配效率相对较低非常高
空间大小通常更大,可以在运行时动态调整,取决于内存大小空间有限,编译时确定
溢出风险堆溢出(不释放会产生内存泄漏)栈溢出(递归调用过深)
使用场景动态分配大小的数据、复杂数据结构函数调用局部变量、临时存储
内存碎片容易产生内存碎片几乎不会产生内存碎片
线程特性通常是进程或线程共享的每个线程有独立的栈

引用和指针区别对比表:

特征引用 (Reference)指针 (Pointer)
定义变量的别名,必须在声明时初始化存储内存地址的变量
空值不能为空可以为空 (nullptr)
重新赋值初始化后不能更改引用的对象可以更改指向的对象
内存操作不需要显式内存管理需要手动管理内存
语法使用 & 符号声明使用 * 符号声明
间接访问直接访问对象需要解引用才能访问对象
常见使用函数参数传递、避免复制动态内存分配、数据结构
示例int x = 10; int& ref = x;int* ptr = new int(10);

Linux的常用指令

命令英文全称功能示例
lsList列出目录内容ls -l(长格式显示目录内容)
cdChange Directory切换目录cd /home(进入"/home"目录)
pwdPrint Working Directory显示当前工作目录路径pwd(直接显示当前路径)
mkdirMake Directory创建新目录mkdir mydir(创建"mydir"目录)
rmRemove删除文件或目录rm myfile.txt(删除"myfile.txt"文件)
cpCopy复制文件或目录cp file1.txt file2.txt(复制文件)
mvMove移动或重命名文件/目录mv file1.txt newdir(移动文件)
touchTouch创建空文件或更新时间戳touch file.txt(创建新文件)
catConcatenate查看文件内容cat file.txt(显示文件内容)
grepGlobal Regular Expression Print文件内容查找grep "pattern" file.txt(查找匹配行)
chmodChange Mode修改文件/目录权限chmod +x script.sh(设置可执行)
chownChange Owner修改文件/目录所有者chown user1 file.txt(更改所有者)
manManual查看命令手册man ls(查看ls命令帮助)
psProcess Status查看进程状态ps -ef(显示所有进程)
topTable of Processes实时显示系统资源top(显示系统进程和资源)

RS232和RS485的详细比较:

对比项目RS232RS485
传输距离短距离,通常<15米长距离,最大可达1200米
通信模式点对点多点总线网络
最大节点数2个设备最多32个设备
传输速率低速,最高约20Kbps高速,可达10Mbps
抗干扰能力较弱非常强
信号类型单端信号差分信号
电气特性±5V到±15V差分电压±1.5V到±5V
常见应用调制解调器、串口通信工业控制、自动化系统
线缆要求普通串行通信电缆屏蔽双绞线
成本较低相对较高

通过这个表格还是可以很轻松地发现其联系的,因为其采用屏蔽双绞线,所以是差分信号,所以成本较高,抗干扰能力很强,速度很高,传输距离远。

TCP连接建立与断开

阶段三次握手(建立连接)四次挥手(断开连接)
第一步客户端发送SYN报文客户端发送FIN报文
目的发起连接请求表示数据传输结束
标志位SYNFIN
第二步服务器回复SYN+ACK报文服务器回复ACK报文
目的确认客户端连接请求确认客户端断开请求
标志位SYN、ACKACK
第三步客户端发送ACK报文服务器发送FIN报文
目的确认服务器响应,连接建立服务器准备断开连接
标志位ACKFIN
第四步-客户端发送ACK报文
目的-确认服务器断开,连接关闭
标志位-ACK
关键特点同步序列号,确认通信能力确保数据传输完整,优雅关闭

三次握手(建立连接)详解

第一次握手:客户端发起连接
  • 客户端向服务器发送连接请求报文段
  • 报文中包含SYN(同步)标志位
  • 选择一个初始序列号(Sequence Number)
  • 标志着开始建立TCP连接
第二次握手:服务器响应
  • 服务器接收到客户端的连接请求
  • 服务器发送确认报文段
  • 报文中包含SYN和ACK标志位
  • 确认客户端的序列号
  • 服务器也选择自己的初始序列号
第三次握手:客户端确认
  • 客户端接收到服务器的确认报文
  • 发送最后一个确认报文
  • 包含ACK标志位
  • 确认服务器的序列号
  • 连接正式建立

四次挥手(断开连接)详解

第一次挥手:客户端发起断开
  • 客户端数据发送完毕
  • 发送FIN(Finish)报文段
  • 表示客户端不再发送数据
  • 进入FIN_WAIT_1状态
第二次挥手:服务器确认
  • 服务器接收到FIN报文
  • 发送ACK确认报文
  • 表示同意断开连接请求
  • 客户端进入FIN_WAIT_2状态
第三次挥手:服务器发起断开
  • 服务器完成数据发送
  • 发送FIN报文段
  • 表示服务器准备关闭连接
第四次挥手:客户端最终确认
  • 客户端接收服务器FIN报文
  • 发送ACK确认报文
  • 连接完全关闭
  • 双方正式断开TCP连接

重要概念和意义

为什么需要三次握手
  • 确认双方通信能力正常
  • 同步初始序列号
  • 交换通信参数
为什么需要四次挥手
  • 保证数据传输完整
  • 确保双方都有机会完成数据发送
  • 优雅地终止连接

http://www.kler.cn/a/535179.html

相关文章:

  • 讯飞智作 AI 配音技术浅析(四):语音特征提取与建模
  • 使用Pygame制作“贪吃蛇”游戏
  • 大型三甲医院算力网络架构的深度剖析与关键技术探索
  • Kafka 使用说明(kafka官方文档中文)
  • SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器
  • 【multi-agent-system】ubuntu24.04 安装uv python包管理器及安装依赖
  • 【React】路由处理的常见坑与解决方法,React Router 的动态路由与懒加载问题
  • redis 运维指南
  • 2、ansible的脚本
  • 树的基本概念,并查集复习(学习记录)
  • Unity3D仿星露谷物语开发小结1
  • 乒乓日常烧拍日记之五在吐槽中找缺陷
  • deepseek API 调用-golang
  • Continue 与 CodeGPT 插件 的对比分析
  • 22、Java 函数式编程:开启高效编程新境界
  • 【csp/信奥赛C++语法学习如何入门?】
  • 关于视频字幕
  • 如何用GISBox将高斯泼溅文件(PLY/Splat)转换为3DTiles?全流程解析
  • Ubuntu安装OpenSSF Scorecard
  • GRN前沿:STGRNS:一种基于transformer的可解释方法,用于从单细胞转录组数据推断基因调控网络
  • centos 7.6 安装mysql实用方案
  • 《具身智能时代:机器人具身抓取技术的前沿探索与应用综述》
  • 代码随想录算法训练营第二十九天| 回溯算法02
  • 关于React前端
  • UE5 蓝图学习计划 - Day 13:确定游戏类型与核心功能
  • Android 9.0 mtk默认浏览器Browser下载app不能安装问题的解决办法