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

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模型)

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

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编程步骤

  1. socket():创建套接字。
  2. bind():绑定IP地址和端口。
  3. listen():监听连接请求(服务器)。
  4. accept():接受连接(服务器)。
  5. connect():连接服务器(客户端)。
  6. send()/recv():发送和接收数据。
  7. close():关闭连接。

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

使用 netstatss 命令查看:

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占用命令

  • 查看内存freevmstat
    free -m
    
  • 查看CPU占用tophtop
    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
    
  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
嵌入式开发面试通常包括以下几个方面的内容: 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、付费专栏及课程。

余额充值