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

devtools/2025/2/8 3:35:46/

面经-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.ppmy.cn/devtools/157008.html

相关文章

18爬虫:关于playwright相关内容的学习

1.如何在python中安装playwright 打开pycharm&#xff0c;进入终端&#xff0c;输入如下的2个命令行代码即可自动完成playwright的安装 pip install playwright ——》在python中安装playwright第三方模块 playwright install ——》安装playwright所需的工具插件和所支持的…

Java JDK17 API 离线文档下载

Java JDK17 API 离线文档下载 JavaJDK17API离线文档下载 本仓库提供了一个方便的资源文件下载&#xff0c;即 **Java JDK17 API 离线文档**。该文档是Java开发者在离线环境下查阅JDK17 API的必备工具。无论你是Java初学者还是经验丰富的开发者&#xff0c;这份离线文档都能帮助…

C++11详解(三) -- 可变参数模版和lambda

文章目录 1.可变模版参数1.1 基本语法及其原理1.2 包扩展1.3 empalce系列接口1.3.1 push_back和emplace_back1.3.2 emplace_back在list中的使用&#xff08;模拟实现&#xff09; 2. lambda2.1 lambda表达式语法2.2 lambda的捕捉列表2.3 lambda的原理 1.可变模版参数 1.1 基本…

w193基于Spring Boot的秒杀系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

C# List 列表综合运用实例⁓Hypak原始数据处理编程小结

C# List 列表综合运用实例⁓Hypak原始数据处理编程小结 1、一个数组解决很麻烦引出的问题1.1、RAW 文件尾部数据如下:1.2、自定义标头 ADD 或 DEL 的数据结构如下&#xff1a; 2、程序 C# 源代码的编写和剖析2.1、使用 ref 关键字&#xff0c;通过引用将参数传递&#xff0c;以…

DeepSeek与llama本地部署(含WebUI)

DeepSeek从2025年1月起开始火爆&#xff0c;成为全球最炙手可热的大模型&#xff0c;各大媒体争相报道。我们可以和文心一言一样去官网进行DeepSeek的使用&#xff0c;那如果有读者希望将大模型部署在本地应该怎么做呢&#xff1f;本篇文章将会教你如何在本地傻瓜式的部署我们的…

spacemacs gnuplot

个人博客地址&#xff1a;spacemacs gnuplot | 一张假钞的真实世界 环境 Ubuntu 16.10Emacs 24 安装过程 spacemacs安装 安装Emacs sudo apt-get install emacs 安装spacemacs &#xff08;1&#xff09;如果已经存在Emacs配置文件&#xff0c;首先备份&#xff1a; c…

Oracle(windows安装遇到的ORA-12545、ORA-12154、ORA-12541、ORA-12514等问题)

其实出现该问题就是监听或者服务没有配好。 G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMINlistener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (SID_NAME CLRExtProc)(ORACLE_HOME G:\xiaowangzhenshuai\software\Oracle\product\11.2.0\d…