嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。


一、TCP/IP 协议

1.1 TCP/IP 五层模型概述

  • 链路层(Link Layer)

    • 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责把数据帧(Frame)在相邻节点间传输。

  • 网络层(Internet Layer)

    • 最典型的是 IP 协议 (IPv4/IPv6)。负责 路由选路分片与重组

    • 其他:ICMP(Ping、目的不可达等)、ARP/ND (地址解析协议/邻居发现)。

  • 传输层(Transport Layer)

    • TCP(Transmission Control Protocol):面向连接、可靠传输、有序到达、流量控制与拥塞控制。

    • UDP(User Datagram Protocol):无连接、不保证可靠性、低开销。

  • 会话层、表示层(合并在“应用层”讨论)

  • 应用层(Application Layer)

    • HTTP/HTTPS、FTP、SMTP/POP3、DNS、Telnet、SSH 等。

面试常问:

  1. 请简述 TCP/IP 模型与 OSI 七层模型的对应关系。

  2. TCP 与 UDP 的区别?各有什么典型应用场景?

  3. DNS 查询过程是怎样的?(迭代查询 vs 递归查询)


1.2 IP 协议要点

  • IP 地址与子网掩码

    • IPv4:32 位,常见写法 192.168.1.10/24(子网掩码 255.255.255.0)。

    • IPv6:128 位,常见压缩写法 fe80::1ff:fe23:4567:890a/64

  • 分片与重组

    • 当数据包超过链路层最大传输单元(MTU)时,IP 层会分片。目的主机负责重组。

  • 路由选择

    • 路由表:根据目的 IP 匹配最长前缀,选择下一跳。

    • 默认网关、直连网络、三层交换等。

面试常问:

  1. 如何计算某 IP 的网络地址、广播地址?

  2. 什么是 CIDR?为什么要划分子网?

  3. 简述 IP 分片过程及可能带来的问题(性能、重组失败)。


1.3 TCP 核心机制

  • 三次握手(Three‑way Handshake)

    1. 客户端发送 SYN, seq = x

    2. 服务器收到 SYN, 回复 SYN‑ACK, seq = y, ack = x+1

    3. 客户端收到 SYN‑ACK, 回复 ACK, ack = y+1;连接建立

  • 四次挥手(Four‑way Teardown)

    1. 主动关闭方发送 FIN, seq = a

    2. 对端回复 ACK, ack = a+1

    3. 对端发送 FIN, seq = b

    4. 主动关闭方回复 ACK, ack = b+1;连接关闭

  • 流量控制(窗口机制)

    • 发送端发送窗口(rwnd)由接收端根据缓冲区大小告知。

  • 拥塞控制(慢启动、拥塞避免、快速重传、快速恢复)

    • 拥塞窗口(cwnd)从 1 MSS 开始,遇到丢包或超时则触发相应算法。

面试常问:

  1. TCP 三次握手的目的?如果少一次会发生什么?

  2. TCP 四次挥手与三次挥手有什么区别?为什么需要四次?

  3. 怎么理解 TCP 的流量控制与拥塞控制?

  4. 如何粗略计算 RTT?什么是滑动窗口?


1.4 UDP 与其他协议

  • UDP(User Datagram Protocol)

    • “不可靠”传输:不保证到达、不保证顺序。

    • 头部开销小,仅 8 字节:源端口(2B) | 目标端口(2B) | 长度(2B) | 校验和(2B)

    • 常见应用:DNS 查询、VoIP、视频流、DHCP。

  • ICMP(Internet Control Message Protocol)

    • 用于网络诊断(ping)、不可达报告、TTL 超时等。

  • 常见端口号

    • HTTP:80,HTTPS:443,DNS:53,SSH:22,FTP:21,SMTP:25,POP3:110,IMAP:143 等。

面试常问:

  1. 为什么 DNS 通常使用 UDP?遇到数据包丢失怎么办?

  2. 简述 ICMP 报文类型(Echo Request/Reply,Destination Unreachable 等)。

  3. 常见的服务器如何处理端口抢占和端口复用?


二、C 语言基础

以下内容面向零基础读者,从最基本的概念开始,一步步推进到链表、环形队列和指针的“进阶姿势”。


2.1 结构体(struct

2.1.1 概念
  • 定义:把多个不同类型的变量组合成一个“整体”,类似现实世界中“一个学生有姓名、年龄、成绩”。

  • 语法

    struct Student {char name[32];int age;float score;
    };
    
  • 用法

    struct Student s1;
    strcpy(s1.name, "Alice");
    s1.age = 20;
    s1.score = 92.5f;
    printf("Name=%s, Age=%d, Score=%.1f\n", s1.name, s1.age, s1.score);
    
  • 内存对齐

    • 结构体成员通常按自然对齐方式存放,字段之间可能插入“填充字节(Padding)”以保证访问效率。

    • sizeof(struct) 可能 > 各成员大小之和。

面试常问:

  1. struct A { char c; int x; }struct B { int x; char c; } 谁更省空间,为什么?

  2. 如何传递结构体到函数?按值还是按引用?优缺点?

  3. 什么是匿名结构体,什么时候用?


2.2 联合体(union

2.2.1 概念
  • 定义:联合体的所有成员 共用同一块内存,只要给其中一个成员赋值,就修改了这块内存。

  • 语法

    union Data {int i;float f;char str[20];
    };
    
  • 用法

    union Data d;
    d.i = 100;
    printf("d.i=%d, d.f=%f\n", d.i, d.f);  // f 与 i 共享内存,值不确定
    
  • 大小

    • 联合体的 sizeof 等于其最大成员的大小,再加上对齐需要的填充。

面试常问:

  1. 结构体和联合体有什么区别?各自适用场景?

  2. 为什么联合体可节省内存?举例说明。

  3. 如何安全地在联合体里存放二进制数据(如网络协议报文)?


2.3 枚举(enum

2.3.1 概念
  • 定义:枚举是一组具名整型常量的集合,让代码更易读。

  • 语法

    enum Weekday { MON = 1, TUE, WED, THU, FRI, SAT, SUN };
    
    • 如果不显式赋值,默认从 0 开始自动 +1。

  • 用法

    enum Weekday today = WED;
    if (today == WED) { printf("It's Wednesday\n"); }
    
  • 底层本质:枚举常量本质是整型 (C 默认 int)。

面试常问:

  1. 枚举常量的底层类型是什么?可以指定底层类型吗?

  2. 枚举 vs #define 的区别?哪种更好?

  3. 如何把枚举转为字符串?有哪些常见技巧?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能 | 项目开发】Python Flask实现本地AI大模型可视化界面

文末获取项目源码。 文章目录 项目背景项目结构app.py(后端服务)index.html(前端界面)项目运行项目图示项目源码项目背景 随着人工智能技术的快速发展,大语言模型在智能交互领域展现出巨大潜力。本项目基于 Qwen3-1.7B 模型,搭建一个轻量化的智能聊天助手,旨在为用户提…

【设计模式】1.简单工厂、工厂、抽象工厂模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 以下是 简单工厂模式、工厂方法模式 和 抽象工厂模式 的 Python 实现与对比,结合代码示例和实际应用场景说明: 1. 简单工厂模式&a…

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…

01.SQL语言概述

SQL 语言概述 SQL (Structured Query Language)结构化査询语言 1. 关系型数据库的常见组件 数据库: database 表的集合,物理上表现为一个目录表: table,行: row 列: column索引: index视图: view,虚拟的表存储过程:…

C++学习-入门到精通【14】标准库算法

C学习-入门到精通【14】标准库算法 目录 C学习-入门到精通【14】标准库算法一、对迭代器的最低要求迭代器无效 二、算法1.fill、fill_n、generate和generate_n2.equal、mismatch和lexicographical_compare3.remove、remove_if、remove_copy和remove_copy_if4.replace、replace_…

Vue 项目实战:三种方式实现列表→详情页表单数据保留与恢复

背景:在Vue项目中,实现列表页跳转详情页并保留表单数据,返回时恢复表单状态。 核心功能: 保存缓存:点击查询按钮时,表单数据保存恢复缓存:从详情页返回时,恢复表单数据清除缓存&…

iptables实验

实验一:搭建web服务,设置任何人能够通过80端口访问。 1.下载并启用httpd服务器 dnf -y install httpd 开启httpd服务器 systemctl start httpd 查看是否启用 下载并启用iptables,并关闭firewalld yum install iptable…

Razor编程RenderXXX相关方法大全

文章目录 第一章:RenderXXX方法概述1.1 RenderXXX方法的作用与意义1.2 基本工作原理1.3 主要方法分类 第二章:部分视图渲染方法2.1 Html.RenderPartial()2.2 Html.RenderAction()2.3 性能对比分析 第三章:视图组件渲染方法3.1 Html.RenderCom…

Go 语言 range 关键字全面解析

Go 语言 range 关键字全面解析 range 是 Go 语言中用于迭代数据结构的关键字,支持多种数据类型的遍历操作。它提供了一种简洁、安全且高效的方式来处理集合类型的数据。 基本语法 for index, value : range collection {// 循环体 } 1. 数组/切片迭代 fruits :…

美化显示LLDB调试的数据结构

前面的博文美化显示GDB调试的数据结构介绍了如何美化显示GDB中调试的数据结构,本文将还是以mupdf库为例介绍如何美化显示LLDB中调试的数据结构。 先看一下美化后的效果: 一、加载自定义脚本 与GDB类似,需要添加一个~/.lldbinit文件&#xf…

【Java学习笔记】日期类

日期类 第一代日期类:Date 引入包 import java.text.ParseException:日期转换可能会抛出转换异常 import java.text.SimpleDateFormat import java.util.Date 1. 基本介绍 Date:精确到毫秒,代表特定的瞬间 SimpleDateForma…

C++基础进阶:函数、内联函数与Lambda函数详解

引言 在C编程的旅程中,函数是构建复杂程序的基本单元。它们像乐高积木一样,允许我们将代码分解成更小、更易于管理的部分。今天,我们将深入探讨C中的三种重要函数类型:普通函数、内联函数以及Lambda函数。掌握它们,将…

从Node.js到React/Vue3:流式输出技术的全栈实现指南

本文将从底层原理到工程实践,完整解析如何使用Node.js后端结合React和Vue3前端实现流式输出功能,涵盖协议选择、性能优化、错误处理等关键细节,并通过真实场景案例演示完整开发流程。 一、流式输出的核心原理与协议选择 1.1 流式传输的底层机…

AT2401C中科微2.4g芯片PA

作为无线通信系统的核心模块,射频前端芯片通过整合功率放大器(PA)、滤波器、开关和低噪声放大器(LNA)等关键组件,成为保障通信质量、降低功耗及维持信号稳定的决定性因素。 AT2401C是一款面向2.4GHz无线通信…

Linux安装jdk、tomcat

1、安装jdk sudo yum install -y java-1.8.0-openjdk-devel碰到的问题:/var/run/yum.pid 已被锁定 Another app is currently holding the yum lock; waiting for it to exit… https://blog.csdn.net/u013669912/article/details/131259156 参考&#…

在本地电脑中部署阿里 Qwen3 大模型及连接到 Elasticsearch

在今天的文章中,我将参考文章 “使用 Elastic 和 LM Studio 的 Herding Llama 3.1” 来部署 Qwen3 大模型。据测评,这是一个非常不错的大模型。我们今天尝试使用 LM Studio 来对它进行部署,并详细描述如何结合 Elasticsearch 来对它进行使用。…

【设计模式】2.策略模式

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 商场收银软件为例 1. 基础版 total 0def click_ok(price,num):tot price * numtotal totprint(合计:, total)增加打折 total 0def cli…

c++中的输入输出流(标准IO,文件IO,字符串IO)

目录 &#xff08;1&#xff09;I/O概述 I/O分类 不同I/O的继承关系 不同I/O对应的头文件 &#xff08;2&#xff09;iostream 标准I/O流 iostream头文件中的IO流对象 iostream头文件中重载了<<和>> 缓冲区示意图 标准输入流 cin用法 cin&#xff1a;按空…

人工智能学习06-循环

人工智能学习概述—快手视频 人工智能学习06-循环—快手视频

【电路】阻抗匹配

&#x1f4dd; 阻抗匹配 一、什么是阻抗匹配&#xff1f; 阻抗匹配&#xff08;Impedance Matching&#xff09;是指在电子系统中&#xff0c;为了实现最大功率传输或最小信号反射&#xff0c;使信号源、传输线与负载之间的阻抗达到一种“匹配”状态的技术。 研究对象&#x…