嵌入式八股-面试30题(20240813)

1. TCP建立连接和收发数据用到的函数

在Linux上进行TCP编程,常用的系统调用函数包括:

  • socket():创建一个套接字,返回一个套接字描述符。
  • bind():将套接字与指定的IP地址和端口号绑定。
  • listen():在服务器端,使套接字进入被动监听状态,等待客户端连接。
  • accept():服务器端用于接受客户端的连接请求,返回一个新的套接字描述符,用于与客户端进行通信。
  • connect():客户端使用该函数请求与服务器端进行连接。
  • send()/write():发送数据到已连接的套接字。
  • recv()/read():从已连接的套接字中接收数据。
  • close()/shutdown():关闭套接字连接。

2. TCP为什么能保持稳定?

TCP能保持稳定主要归功于以下特性和机制:

  • 连接管理:TCP采用三次握手和四次挥手来建立和终止连接,确保连接的可靠性。
  • 数据包序列:TCP对每个字节进行编号,确保数据按顺序到达,并且丢包时可以重传。
  • 流量控制:通过滑动窗口机制控制发送方的发送速率,避免接收方因处理不过来而丢包。
  • 拥塞控制:TCP采用慢启动、拥塞避免、快重传和快恢复等算法来处理网络拥塞,维持网络的稳定性。
  • 超时重传:TCP会对未确认的数据进行重传,确保数据可靠到达。

3. TCP/IP模型、HTTP、FTP、UDP

  • TCP/IP模型:分为四层:

    • 应用层:如HTTP、FTP、SMTP等。
    • 传输层:如TCP、UDP。
    • 网络层:如IP、ICMP、ARP。
    • 数据链路层:如以太网、PPP。
  • HTTP(HyperText Transfer Protocol):基于TCP的应用层协议,用于传输网页内容。

  • FTP(File Transfer Protocol):基于TCP的应用层协议,用于文件传输。

  • UDP(User Datagram Protocol):一种无连接的传输层协议,提供不可靠的数据传输,不保证数据顺序和完整性,但效率高,常用于实时应用(如视频流、DNS查询)。

4. 以太网的MAC地址占多少字节?

MAC地址占 6字节(48位)。

5. TCP/IP熟悉吗?TCP有一个ACK和ACK的number有什么区别?

  • ACK:指确认位(Acknowledgment),用于确认接收到的数据包。
  • ACK Number:确认号,表示期望接收的下一个字节序号,即已接收到的字节序号加一。

6. GET/POST区别

  • GET

    • 用于请求数据,参数附加在URL中。
    • 由于参数暴露在URL中,安全性较低。
    • 数据长度有限制,通常不超过2048字节。
    • 适合用于非敏感数据查询。
  • POST

    • 用于提交数据,参数放在请求体中。
    • 数据不会暴露在URL中,安全性较高。
    • 没有数据长度限制。
    • 适合用于提交表单数据和上传文件。

7. 计算机的存储结构

  • 寄存器:处理器内部的高速存储器,用于存储临时数据和指令。
  • L1/L2/L3缓存:处理器的高速缓存,L1最快但容量最小,L2次之,L3最大但速度较慢。
  • 主存储器(RAM):计算机的主要工作内存,存储正在执行的程序和数据。
  • 本地磁盘(硬盘、SSD):用于长时间存储数据,速度比RAM慢得多。

8. 计算机网络有几层?

通常指 OSI模型的七层

  1. 物理层
  2. 数据链路层
  3. 网络层
  4. 传输层
  5. 会话层
  6. 表示层
  7. 应用层

9. 拥塞避免,路由选择哪一层?

  • 拥塞避免:属于传输层的TCP协议机制。
  • 路由选择:属于网络层。

10. HTTP的状态码,400常见的几个状态码

  • 400:Bad Request,客户端请求无效。
  • 401:Unauthorized,未授权,需要身份验证。
  • 403:Forbidden,服务器拒绝请求。
  • 404:Not Found,请求的资源不存在。
  • 408:Request Timeout,请求超时。

11. ARP协议是什么?在那一层

ARP(Address Resolution Protocol)是一个用于将IP地址解析为MAC地址的协议,位于 网络层

12. FreeRTOS,信号量消息队列,多任务调度

  • FreeRTOS:是一个实时操作系统内核,支持多任务调度。
  • 信号量:用于任务间同步,防止资源竞争。
  • 消息队列:用于任务间通信,传递数据。
  • 多任务调度:FreeRTOS支持优先级调度、时间片轮转等调度策略。

13. RTOS和Linux的区别

  • RTOS:实时操作系统,专为实时应用设计,任务调度精确到微秒级,适用于嵌入式系统。
  • Linux:通用操作系统,适用于多种应用场景,实时性不如RTOS,调度机制复杂。

14. FreeRTOS和Linux哪个熟悉些,用FreeRTOS时,创建了几个任务,任务怎么通信的?如果give 10次信号量,那么take信号量是一次还是十次?

  • FreeRTOS和Linux的熟悉程度取决于使用经验。使用FreeRTOS时,通过创建多个任务,每个任务有独立的堆栈和任务函数。任务之间可以通过队列、信号量等方式进行通信。
  • 如果give 10次信号量,那么take信号量需要调用10次,每次take会消耗一次信号量。

15. 信号量怎么用

信号量用于任务间的同步或资源管理。常见操作包括:

  • xSemaphoreTake():获取信号量。
  • xSemaphoreGive():释放信号量。
  • xSemaphoreCreateBinary():创建二元信号量。

16. Linux命令 怎么在文件夹中查找关键字并排序

可以使用 grepsort 命令,例如:

grep -r "keyword" /path/to/directory | sort

17. Linux下有一个fork()函数有什么作用?创建成功父进程返回什么?子进程返回什么

  • fork():用于创建一个新的子进程。
  • 父进程返回子进程的PID
  • 子进程返回0

18. 信号量怎么通信?(辅助共享内存的手段)

信号量用于控制对共享内存的访问,避免多个进程同时修改共享内存,从而防止竞态条件。

19. 什么是临界区

临界区是指一段代码,这段代码访问共享资源或临界资源,而在同一时间只能由一个进程或线程执行。

20. make、CMake说一下

  • make:一个构建自动化工具,根据Makefile文件中的规则,自动化执行编译、链接等步骤。
  • CMake:一种跨平台的构建系统生成工具,可以生成不同平台的构建文件(如Makefile、Visual Studio项目等)。

21. Linux进程有几种状态?

Linux进程的主要状态有 三种

  1. Running(运行):进程正在运行或准备运行。
  2. Sleeping(睡眠):进程等待某事件发生,分为可中断睡眠(S)和不可中断睡眠(D)。
  3. Stopped(停止):进程被停止,通常是被信号停止或被调试器挂起。

22. Linux Socket编程步骤

  1. 创建套接字(socket())。
  2. 绑定地址(bind())。
  3. 监听连接(listen())。
  4. 接受连接(accept())。
  5. 发送/接收数据(send()/recv())。
  6. 关闭连接(close())。

23. 使用什么命令查看Socket编程的IP和端口状态

使用 netstatss 命令。

netstat -tuln

ss -tuln

24. 条件变量的函数名是什么

条件变量相关的函数名包括:

  • pthread_cond_wait():等待条件变量。
  • pthread_cond_signal():唤醒一个等待条件变量的线程。
  • pthread_cond_broadcast():唤醒所有等待条件变量的线程。

25. 介绍一下libevent库

libevent是一个轻量级的事件驱动库,提供异步I/O、定时器和事件通知机制,常用于开发高性能的网络服务器。

26. vim命令,编辑模式,命令模式,末行模式

  • 命令模式:默认模式,用于执行命令(如dd删除行)。
  • 编辑模式:按i进入,用于插入或编辑文本。
  • 末行模式:按:进入,用于执行保存、退出等命令(如:wq保存并退出)。

27. Linux查看内存命令,查看CPU占用命令

  • 查看内存freecat /proc/meminfo
  • 查看CPU占用tophtop

28. 一般怎么调试代码

  • 打印日志:使用printf或日志库输出调试信息。
  • 使用调试器:如gdb调试运行时的错误。
  • 代码静态分析:使用工具检查代码质量。
  • 单元测试:编写测试用例验证代码逻辑。

29. Linux的设备:字符设备、块设备、网络设备

  • 字符设备:按字节流方式处理数据,如串口、键盘。
  • 块设备:按块方式处理数据,如硬盘、SSD。
  • 网络设备:与网络协议栈交互,如以太网卡。

30. Linux的一些基本命令

  • ifconfig:配置网络接口。
  • touch:创建空文件。
  • vim:文本编辑器,编辑文件。
嵌入式开发面试通常包括以下几个方面的内容: 1. 嵌入式系统基础知识:包括什么是嵌入式系统、嵌入式系统的特点、嵌入式系统的应用等。 2. C/C++编程语言:包括基本语法、数据类型、指针、内存管理、函数、结构体、文件操作等。 3. 操作系统:包括实时操作系统(RTOS)的原理、任务调度、进程间通信、内存管理等。 4. 单片机/微处理器:包括常见单片机/微处理器的特点、寄存器、外设接口、中断处理等。 5. 通信协议:包括串口通信、SPI、I2C、CAN总线等常用的通信协议。 6. 电路设计:包括数字电路设计、模拟电路设计、常用传感器的接口等。 7. 嵌入式系统调试与测试:包括调试工具的使用、代码调试技巧、性能优化等。 8. 项目经验:展示自己在嵌入式开发领域的项目经验,包括项目的整体架构、关键技术、遇到的问以及解决方案等。 9. 算法与数据结构:包括常见的排序算法、查找算法、链表、树等。 根据你提供的引用内容,可能在面试中会问到关于进程和线程的问。进程是计算机中正在运行的程序的实例,而线程是进程中的一条执行路径。在嵌入式开发中,进程与线程的概念同样适用。你可能会被问到进程和线程的区别、进程间通信的方式、线程同步与互斥等问。 记住,除了准备好上述的知识点和问,还可以通过阅读相关的书籍和参加一些实际的嵌入式开发项目来提高自己的面试准备。祝你成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sagima_sdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值