找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3507

积分

0

好友

483

主题
发表于 5 小时前 | 查看: 4| 回复: 0

在准备嵌入式开发岗位的面试时,你是否被那些经典而深入的技术问题所困扰?比如网络模型、TCP连接细节,或是C语言编译的奥秘。今天,我们就来梳理一份高质量的嵌入式技术面试真题,并结合核心知识点进行解析,帮助你在技术面中更好地展现自己的实力。

1. OSI七层模型与TCP/IP四层模型协议对比

理解网络分层模型是嵌入式网络编程的基础。面试官常常会考察你对标准模型及其对应协议的掌握程度。

OSI七层模型与TCP/IP四层模型对比图

  • OSI七层模型

    • 物理层:以太网、RS-232等
    • 数据链路层:PPP、HDLC等
    • 网络层:IP、ICMP等
    • 传输层:TCP、UDP等
    • 会话层:NetBIOS、RPC等
    • 表示层:ASCII、JPEG等
    • 应用层:HTTP、FTP等
  • TCP/IP四层模型

    • 网络接口层:以太网等
    • 网络层:IP等
    • 传输层:TCP、UDP等
    • 应用层:HTTP、FTP等

简单来说,TCP/IP模型可以看作是OSI模型在实际应用中的简化与融合。对于嵌入式开发者,深入理解TCP/IP四层模型及其协议栈的运作机制尤为重要。

2. TCP连接的三次握手与四次挥手

TCP协议的可靠连接建立与断开过程,是网络/系统面试中的必考题。你需要清晰地描述每个步骤的状态变化与报文交换。

TCP三次握手与四次挥手过程详解

三次握手建立连接:

  1. 第一次握手:客户端向服务器发送一个SYN报文(序列号为x),请求建立连接。此时客户端进入SYN_SENT状态。
  2. 第二次握手:服务器收到SYN报文后,如果同意连接,则回复一个SYN+ACK报文(确认号为x+1,同时携带自己的初始序列号y)。此时服务器进入SYN_RCVD状态。
  3. 第三次握手:客户端收到服务器的SYN+ACK报文后,发送一个ACK报文(确认号为y+1)进行确认。此报文发送完毕后,客户端和服务器都进入ESTABLISHED状态,连接建立成功。

四次挥手断开连接:

  1. 第一次挥手:主动关闭方(假设为客户端)发送一个FIN报文,请求断开连接,并停止发送数据。此时客户端进入FIN_WAIT_1状态。
  2. 第二次挥手:被动关闭方(服务器)收到FIN报文后,回复一个ACK报文进行确认。此时服务器进入CLOSE_WAIT状态,客户端收到ACK后进入FIN_WAIT_2状态。此时连接处于半关闭状态,服务器可能还有数据需要发送。
  3. 第三次挥手:当服务器数据发送完毕后,发送一个FIN报文,请求断开自己到客户端的连接。服务器进入LAST_ACK状态。
  4. 第四次挥手:客户端收到FIN报文后,回复一个ACK报文。服务器收到ACK后关闭连接。客户端等待2MSL(最大报文段生存时间)后,也关闭连接。

3. 进程与线程的核心区别

这是操作系统概念的经典问题,考察你对系统资源管理和任务调度的理解。

进程与线程区别及gcc编译过程

  • 进程:是资源分配的基本单位。每个进程都有自己独立的地址空间、数据栈和代码段。进程间的通信(IPC)需要特定的机制,如管道、共享内存等,开销较大。
  • 线程:是CPU调度和执行的基本单位。线程属于某个进程,并共享该进程的地址空间和大部分资源。线程间的通信可以直接读写进程数据段(需要同步机制),因此上下文切换开销比进程小得多。

简单比喻:进程像一个工厂,拥有独立的场地和资源;线程像是工厂里的工人,共享工厂的资源,协同完成工作。

4. GCC编译过程的四个阶段

对于C/C++开发者,了解源代码到可执行文件的转化过程至关重要。GCC的编译过程主要分为四步:

  1. 预处理 (Preprocessing)

    • 处理源代码中的预处理指令,如#include(头文件包含)、#define(宏替换)、条件编译等。
    • 生成扩展名为 .i(C语言)或 .ii(C++)的预处理后文件。
    • 命令示例:gcc -E hello.c -o hello.i
  2. 编译 (Compilation)

    • 将预处理后的高级语言代码(.i文件)翻译成特定平台的汇编代码
    • 生成扩展名为 .s 的汇编文件。
    • 命令示例:gcc -S hello.i -o hello.s
  3. 汇编 (Assembly)

    • 使用汇编器将汇编代码(.s文件)翻译成机器码(目标代码)。
    • 生成扩展名为 .o.obj 的可重定位目标文件。
    • 命令示例:gcc -c hello.s -o hello.o
  4. 链接 (Linking)

    • 将多个目标文件(.o文件)以及所需的库文件(静态库.a或动态库.so)合并,解析符号引用(如函数调用),生成最终的可执行文件。
    • 命令示例:gcc hello.o -o hello

理解gcc编译过程有助于你定位编译和链接阶段的错误,是嵌入式C/C++开发的基本功。

5. C语言中static关键字的三种用法

static关键字在C语言中用途灵活,是面试高频考点。

  • 修饰局部变量:将局部变量的生命周期从函数内延长到整个程序运行期。变量只在第一次进入函数时初始化一次,之后每次调用函数都使用上次调用结束时的值。存储位置在静态存储区。
  • 修饰全局变量:限制该全局变量的作用域仅在其定义的源文件内,其他文件无法通过extern引用。这避免了命名冲突和意外的外部访问。
  • 修饰函数:与修饰全局变量类似,将函数的作用域限制在定义它的源文件内,使其成为该文件的“私有”函数,防止其他文件调用。

6. WiFi的工作原理与协议

在物联网和智能设备嵌入式开发中,WiFi是常见的无线连接方式。

WiFi原理、存储区分类与进程间通信方式

  • 原理:WiFi基于IEEE 802.11系列标准,利用无线电波(通常是2.4GHz或5GHz频段)在无线局域网(WLAN)内传输数据。主要设备包括无线接入点(AP,如路由器)和带有无线网卡的终端设备(STA)。数据通过载波监听多路访问/冲突避免(CSMA/CA)机制进行发送,以减少冲突。
  • 协议:常见的协议是IEEE 802.11 a/b/g/n/ac/ax系列。例如,802.11n支持MIMO技术,提高了速率和覆盖范围;802.11ac是主流的高速标准;802.11ax(Wi-Fi 6)则进一步提升了效率和多设备并发能力。

7. 程序内存存储区的分类

程序运行时,其数据和代码被加载到内存的不同区域。常见的分类方式有5区或7区模型。

  • 栈 (Stack):由编译器自动分配释放,存放函数参数、局部变量等。操作方式类似数据结构中的栈。
  • 堆 (Heap):由程序员动态申请和释放(如malloc/free, new/delete)。若未正确释放会导致内存泄漏。
  • 全局/静态存储区:存放全局变量和静态变量(包括static修饰的局部和全局变量)。程序开始时分配,结束时释放。通常细分为:
    • BSS段:存放未初始化的全局变量和静态变量,程序执行前会被系统初始化为0。
    • 数据段:存放已初始化的全局变量和静态变量。
  • 常量存储区:存放字符串常量和其他被const修饰的常量。内容只读,不可修改。
  • 代码区/文本段:存放程序的机器指令,通常是只读的,防止程序被意外修改。

8. 进程间通信(IPC)的主要方式

当多个进程需要协作时,就需要进程间通信机制。嵌入式Linux系统中常见的IPC方式包括:

  1. 管道 (Pipe)
    • 匿名管道:用于具有亲缘关系(如父子进程)的进程间通信,是单向的。
    • 命名管道 (FIFO):提供了一个路径名与之关联,允许无亲缘关系的进程进行通信。
  2. 消息队列 (Message Queue):消息的链表,存放在内核中。进程可以独立地读写队列中的消息,克服了管道只能承载无格式字节流的缺点。
  3. 共享内存 (Shared Memory):多个进程可以访问同一块内存空间,是速度最快的IPC方式。但需要配合信号量等机制来解决同步问题。
  4. 信号量 (Semaphore):主要用于进程间同步,控制多个进程对共享资源的访问,避免竞态条件。
  5. 套接字 (Socket):功能最强大的IPC机制,可用于不同主机间的进程通信,也支持同一主机上的进程通信(如Unix Domain Socket)。

掌握这些核心的嵌入式面试真题,不仅能帮助你在技术面中游刃有余,更是对你基础知识体系的一次巩固。技术学习离不开交流与分享,如果你有更多的见解或疑问,欢迎在云栈社区的对应板块与广大开发者一起探讨。




上一篇:Elasticsearch AI Agent实战:从RAG到智能决策的架构演进
下一篇:AWS证实中东多地数据中心遭无人机袭击,可用区中断促客户备份迁移
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-5 17:52 , Processed in 0.446144 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表