嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。
一、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 等。
-
面试常问:
请简述 TCP/IP 模型与 OSI 七层模型的对应关系。
TCP 与 UDP 的区别?各有什么典型应用场景?
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 匹配最长前缀,选择下一跳。
-
默认网关、直连网络、三层交换等。
-
面试常问:
如何计算某 IP 的网络地址、广播地址?
什么是 CIDR?为什么要划分子网?
简述 IP 分片过程及可能带来的问题(性能、重组失败)。
1.3 TCP 核心机制
-
三次握手(Three‑way Handshake)
-
客户端发送 SYN, seq = x
-
服务器收到 SYN, 回复 SYN‑ACK, seq = y, ack = x+1
-
客户端收到 SYN‑ACK, 回复 ACK, ack = y+1;连接建立
-
-
四次挥手(Four‑way Teardown)
-
主动关闭方发送 FIN, seq = a
-
对端回复 ACK, ack = a+1
-
对端发送 FIN, seq = b
-
主动关闭方回复 ACK, ack = b+1;连接关闭
-
-
流量控制(窗口机制):
-
发送端发送窗口(rwnd)由接收端根据缓冲区大小告知。
-
-
拥塞控制(慢启动、拥塞避免、快速重传、快速恢复):
-
拥塞窗口(cwnd)从 1 MSS 开始,遇到丢包或超时则触发相应算法。
-
面试常问:
TCP 三次握手的目的?如果少一次会发生什么?
TCP 四次挥手与三次挥手有什么区别?为什么需要四次?
怎么理解 TCP 的流量控制与拥塞控制?
如何粗略计算 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 等。
-
面试常问:
为什么 DNS 通常使用 UDP?遇到数据包丢失怎么办?
简述 ICMP 报文类型(Echo Request/Reply,Destination Unreachable 等)。
常见的服务器如何处理端口抢占和端口复用?
二、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)
可能 > 各成员大小之和。
-
面试常问:
struct A { char c; int x; }
与struct B { int x; char c; }
谁更省空间,为什么?如何传递结构体到函数?按值还是按引用?优缺点?
什么是匿名结构体,什么时候用?
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
等于其最大成员的大小,再加上对齐需要的填充。
-
面试常问:
结构体和联合体有什么区别?各自适用场景?
为什么联合体可节省内存?举例说明。
如何安全地在联合体里存放二进制数据(如网络协议报文)?
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
)。
面试常问:
枚举常量的底层类型是什么?可以指定底层类型吗?
枚举 vs
#define
的区别?哪种更好?如何把枚举转为字符串?有哪些常见技巧?
相关文章:
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...

VSCode 使用CMake 构建 Qt 5 窗口程序
首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解
文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...
StarRocks 全面向量化执行引擎深度解析
StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计,相比传统行式处理引擎(如MySQL),性能可提升 5-10倍。以下是分层拆解: 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...

表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
Yii2项目自动向GitLab上报Bug
Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...
背包问题双雄:01 背包与完全背包详解(Java 实现)
一、背包问题概述 背包问题是动态规划领域的经典问题,其核心在于如何在有限容量的背包中选择物品,使得总价值最大化。根据物品选择规则的不同,主要分为两类: 01 背包:每件物品最多选 1 次(选或不选&#…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...

Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...

工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...

鸿蒙Navigation路由导航-基本使用介绍
1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...
「Java基本语法」变量的使用
变量定义 变量是程序中存储数据的容器,用于保存可变的数据值。在Java中,变量必须先声明后使用,声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例:声明与初始化 public class VariableDemo {publi…...

CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...

ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...