嵌入式面试常问问题

news2025/6/10 12:53:52

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


一、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.coloradmin.cn/o/2406642.html

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

相关文章

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:…

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劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #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&#xff0c;不需要复杂的查询&#xff0c;只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 &#xff1a;在几秒钟…

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?

在现代前端开发中&#xff0c;Utility-First (功能优先) CSS 框架已经成为主流。其中&#xff0c;Tailwind CSS 无疑是市场的领导者和标杆。然而&#xff0c;一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏、内容区和工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&#xff08;Nav…

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…