1. TCP建立连接和收发数据用到的函数
在TCP/IP编程中,主要用到以下函数来建立连接和进行数据收发:
- socket():创建一个新的套接字(socket)。
- bind():将套接字绑定到特定的IP地址和端口号。
- listen():使套接字进入监听状态,准备接受客户端的连接请求。
- accept():从已监听的套接字中提取一个连接请求,生成新的套接字用于与客户端通信。
- connect():用于客户端套接字,尝试连接到服务器的套接字。
- send() / write():发送数据到连接的另一端。
- recv() / read():从连接的另一端接收数据。
- close():关闭套接字。
2. TCP为什么能保持稳定
TCP(传输控制协议)能保持稳定的原因在于其设计中包含了一系列的机制和算法:
- 可靠性传输:通过序列号、确认应答(ACK)和重传机制,确保数据包按顺序到达,不会丢失或重复。
- 流量控制:通过窗口机制(如滑动窗口)调节发送方的数据发送速率,防止接收方的缓冲区溢出。
- 拥塞控制:TCP使用拥塞控制算法(如慢启动、拥塞避免、快重传和快恢复)来动态调整发送速率,避免网络拥塞。
- 错误检测和恢复:通过校验和机制检测数据包的传输错误,并通过重传机制进行错误恢复。
这些特性使TCP能在不稳定的网络环境中提供稳定的连接服务。
3. TCP/IP模型 HTTP FTP UDP
-
TCP/IP模型:分为四层:
- 应用层:处理特定的网络应用,如HTTP、FTP等。
- 传输层:提供端到端的通信,如TCP、UDP。
- 网络层:负责数据包的路由和转发,如IP协议。
- 链路层:处理物理链路上的数据帧传输。
-
HTTP(超文本传输协议):用于万维网的应用层协议,基于TCP。
-
FTP(文件传输协议):用于文件传输的应用层协议,基于TCP。
-
UDP(用户数据报协议):提供无连接、不可靠的数据传输服务,速度快但不保证数据到达。
4. 以太网的MAC地址占多少字节?
以太网的MAC地址占 6字节,即 48位。
5. TCP/IP熟悉吗?TCP有一个ACK和ACK的number有什么区别?
- ACK:表示确认已收到数据,通常在TCP包的头部中有一个ACK标志位,如果设置了该标志位,则表示这是一个确认应答包。
- ACK Number:是TCP包头中的一个字段,表示确认号,指示期望接收的下一个字节序号。
区别:ACK是一个标志位,而ACK Number是用于表示期望接收数据的下一个字节序号。
6. GET/POST区别
-
GET:
- 用于请求数据。
- 参数通过URL传递,参数数量和长度受限。
- 不安全,敏感数据不应使用GET。
- 浏览器回退不会有问题,数据可以被缓存。
-
POST:
- 用于提交数据。
- 参数通过请求体传递,没有长度限制。
- 相对安全,适合提交敏感数据。
- 浏览器回退时会重新提交请求,数据不会被缓存。
7. 计算机的存储结构(寄存器,高速缓存L1L2L3,主存,本地磁盘等)
- 寄存器:CPU内的高速存储单元,存取速度极快,用于存储指令执行中的临时数据。
- 高速缓存(Cache):分为L1、L2、L3三种层级缓存:
- L1 Cache:CPU内核私有,速度最快,容量最小。
- L2 Cache:每个CPU内核独立拥有,比L1大,速度稍慢。
- L3 Cache:多个CPU内核共享,容量最大,速度最慢。
- 主存(RAM):计算机的主要存储器,存放正在处理的数据和指令。
- 本地磁盘(硬盘/SSD):存储大量数据,访问速度较慢,但容量大,数据持久化存储。
8. 计算机网络有几层
计算机网络通常有 七层模型(OSI模型):
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
9. 拥塞避免,路由选择哪一层?
- 拥塞避免:在 传输层 进行,如TCP的拥塞控制机制。
- 路由选择:在 网络层 进行,IP协议通过路由器进行路径选择。
10. HTTP的状态码,400常见的几个状态码
- 400 Bad Request:请求格式错误或参数有误。
- 401 Unauthorized:未授权,请求需要用户验证。
- 403 Forbidden:服务器拒绝请求,即使身份验证正确。
- 404 Not Found:请求的资源未找到。
- 405 Method Not Allowed:请求方法不允许,服务器不支持该请求方法。
11. ARP协议是什么?在那一层
- ARP(Address Resolution Protocol):用于解析IP地址到MAC地址的协议。
- 所属 链路层,因为它直接操作MAC地址。
12. FreeRTOS,信号量消息队列,多任务调度
- FreeRTOS:一个轻量级的实时操作系统内核,用于嵌入式系统。
- 信号量:用于任务间的同步或资源的互斥访问。
- 消息队列:用于任务间的数据传输,支持多个任务或中断进行消息发送和接收。
- 多任务调度:FreeRTOS采用优先级调度,支持时间片轮转、优先级抢占等。
13. RTOS和Linux的区别
-
RTOS:
- 实时操作系统,优先响应实时任务。
- 内核较小,设计简单,适合嵌入式系统。
- 优先级调度,严格的时间约束。
-
Linux:
- 通用操作系统,不专门为实时任务设计。
- 内核庞大,支持多种设备和应用。
- 多任务并行处理,较少关注实时性。
14. FreeRTOS和Linux哪个熟些,用FreeRTOS时,创建了几个任务,任务怎么通信的?如果give 10次信号量,那么take信号量是一次还是十次?
- 任务通信:通过信号量、消息队列、事件组等方式进行任务间通信。
- 信号量问题:如果give 10次信号量,那么take信号量需要10次才能完全消耗掉。
15. 信号量怎么用
信号量用于任务间同步或保护共享资源。典型用法:
- 二进制信号量:用于简单的任务同步或互斥。
- 计数信号量:用于计数资源访问或任务通知。
操作:
- xSemaphoreTake:尝试获取信号量。
- xSemaphoreGive:释放信号量。
16. linux命令:怎么在文件夹中查找关键字并排序
可以使用以下命令查找关键字并排序:
grep -r "关键字" /路径 | sort
或者:
grep -rn "关键字" /路径 | sort
17. Linux下有一个fork()函数有什么作用?创建成功父进程返回什么?子进程返回什么
- fork():用于创建一个子进程,子进程是父进程的副本。
- 父进程返回子进程的PID。
- 子进程返回0。
18. 信号量怎么通信?(辅助共享内存的手段)
信号量用于在共享内存上进行同步:
- 信号量:控制对共享内存的访问,避免同时访问导致的数据竞争。
- 操作:
- 获取信号量:等待访问共享内存。
- 释放信号量:释放共享内存访问权限。
19. 什么是临界区
临界区 是指一段代码,该代码在运行时必须独占某些共享资源。访问临界区时,必须保证其他
代码不同时执行该临界区中的代码,以防止数据竞争或冲突。
20. make、cmake说一下
-
make:
- 一种构建自动化工具,通过Makefile定义构建规则。
- 常用于C/C++项目的编译和链接。
-
CMake:
- 高级构建系统生成器,支持跨平台项目。
- 通过CMakeLists.txt定义构建流程,生成平台相关的Makefile或项目文件。
21. linux进程有几种状态?
- 三种主要状态:
- 运行(Running):进程正在运行或准备运行。
- 阻塞(Blocked):进程在等待某个事件(如I/O操作完成)。
- 终止(Terminated):进程已完成执行或被终止。
22. Linux socket编程步骤
- socket():创建套接字。
- bind():绑定IP地址和端口。
- listen():监听连接请求(服务器)。
- accept():接受连接(服务器)。
- connect():连接服务器(客户端)。
- send()/recv():发送和接收数据。
- close():关闭连接。
23. 使用什么命令查看socket编程的IP和端口状态
使用 netstat
或 ss
命令查看:
netstat -tnlp
或
ss -tnlp
24. 条件变量的函数名是什么
- pthread_cond_wait():等待条件变量。
- pthread_cond_signal():发送条件信号(唤醒等待的线程)。
- pthread_cond_broadcast():广播条件信号(唤醒所有等待的线程)。
25. 介绍一下libevent库
libevent
是一个高效的事件驱动库,用于处理网络事件,支持基于事件的网络服务器开发。它可以处理定时器、信号以及I/O事件,广泛用于高性能网络服务。
26. vim命令:编辑模式,命令模式,末行模式
- 编辑模式(Insert Mode):输入文本,通过按
i
进入。 - 命令模式(Normal Mode):默认模式,用于执行命令(如复制、删除)。
- 末行模式(Command-Line Mode):执行文件操作、搜索等,通过
:
进入。
27. linux查看内存命令,查看cpu占用命令
- 查看内存:
free
或vmstat
free -m
- 查看CPU占用:
top
或htop
top
28. 一般怎么调试代码
常用调试方法:
- printf/logging:通过输出日志调试。
- GDB:GNU调试器,跟踪和调试C/C++程序。
- Valgrind:检查内存泄漏和内存错误。
- IDE调试器:集成开发环境的内置调试工具,如VSCode的调试功能。
29. Linux的设备:字符设备、块设备、网络设备
- 字符设备:按字节处理数据的设备,如键盘、串口。
- 块设备:按块(块为数据单位)处理数据的设备,如硬盘。
- 网络设备:处理网络数据包的设备,如网卡。
30. Linux的一些基本命令(ifconfig、touch、vim等)
- ifconfig:查看和配置网络接口。
ifconfig eth0
- touch:创建空文件或更新文件的时间戳。
touch filename.txt
- vim:文本编辑器,支持编辑模式和命令模式。
vim filename.txt