八股第四期(内汉百度测开面试题和GDB调试速记图)

UDP报文头

  • 源端口
  • 目的端口
  • 长度:整个数据报的长度
  • 检验和:整个数据报的检验和

TCP头部

TCP头部长度有20字节的固定部分

接口测试通常包括以下步骤:

  1. 定义测试用例:确定测试目标、输入数据和期望输出。
  2. 选择工具:常用的工具有Postman、SoapUI、JMeter等。
  3. 配置测试环境:设置测试环境,包括接口地址、请求头和认证信息。
  4. 执行测试:使用选择的工具发送请求并记录响应。
  5. 验证结果:对比实际响应与预期结果,检查状态码、响应时间和数据有效性。
  6. 报告问题:记录和报告发现的缺陷或问题。
  7. 重复测试:在修复问题后,重复测试以确保接口功能正常。

编写测试用例的一般步骤包括:

  1. 明确测试目标:确定需要测试的功能或接口。
  2. 定义测试条件:包括输入数据、前置条件和环境配置。
  3. 编写测试步骤:详细描述每一步的操作,包括请求的具体内容和操作顺序。
  4. 预期结果:描述每一步的期望结果或输出。
  5. 整理测试数据:准备必要的输入数据和测试环境。
  6. 审查用例:检查用例是否完整、准确并覆盖所有功能点。
  7. 记录和维护:确保用例文档清晰,便于执行和维护。

内存映射,频繁访问内存,需要使用什么关键字

volatile:这个关键字用于告知编译器,变量的值可能会在任何时刻被外部因素改变,因此编译器在优化时不能假设其值不会变化。

const:如果你希望确保一个内存地址的内容不会被修改,

同步和异步的优点和缺点

同步优点:

简单易理解:代码的执行顺序是线性的,容易跟踪和调试。

数据一致性:由于调用方在等待结果时,数据的一致性较高。

无回调地狱:不需要使用复杂的回调函数,降低了代码复杂度。

缺点:

阻塞:主线程在等待操作完成时会被阻塞,导致效率低下。

响应速度慢:在高延迟操作(如网络请求或文件读写)中,会影响程序的整体响应时间。

不适合高并发:在处理大量并发请求时,同步模型容易造成性能瓶颈。

异步

优点:

非阻塞:主线程可以继续执行其他任务,提升程序的响应速度和效率。

高并发处理:能够同时处理多个任务,适合高负载和高延迟的场景(如网络请求)。

资源利用率高:通过异步编程,能够更好地利用系统资源,尤其是在I/O密集型应用中。

缺点:

复杂性:代码结构较复杂,容易出现“回调地狱”,使得代码难以维护。

调试困难:异步执行的任务顺序不确定,调试时可能难以追踪问题的根源。

状态管理:需要更加小心地管理状态,以防止数据竞态条件和不一致性。

总结

同步适合简单、对实时性要求高、数据一致性重要的场景。

异步适合处理高并发、延迟高的任务,以提高程序性能。

抢占式调度和非抢占式调度的方式

抢占式:

  • 时间片轮转:每个任务被分配一个固定的时间片,时间到后强制切换。
  • 优先级抢占:如果有更高优先级的任务到达,系统会立即中断当前任务,转而执行高优先级任务

非抢占式调度:

  • 先来先服务(FCFS):按照任务到达的顺序依次执行。
  • 最短作业优先(SJF):优先执行预计运行时间最短的任务。

嵌入式的地址分布

malloc底层实现是什么 malloc内存分配算法是什么

malloc通常使用一块预先分配的内存区域作为内存池,管理动态内存请求。

分配算法

首次适应(First Fit)

从开头开始搜索,找到第一个合适的空闲块并分配。

b. 最佳适应(Best Fit)

搜索所有空闲块,选择最小的能够满足请求的块,减少碎片。

c. 最差适应(Worst Fit)

选择最大的空闲块进行分配,以期保留较大空间给后续请求。

  1. 管理空闲块

通过链表或树结构管理空闲内存块,维护它们的大小和状态(已分配或空闲)。

  1. 合并空闲块

当内存释放时,malloc 会检查相邻的空闲块,合并它们以减少碎片。

  1. 内存对齐

为提高性能,分配的内存通常会对齐到特定边界(如 8 字节或 16 字节)。

阻塞式I/O与非阻塞式I/O

阻塞式I/O

在阻塞式 I/O 中,I/O 操作会阻塞程序的执行,直到操作完成为止。这意味着程序会在执行 I/O 调用时等待数据的传输完成。

  • 简单易用:程序的逻辑流程清晰,易于理解和实现。
  • 等待时间:在 I/O 操作期间,程序无法执行其他任务,可能导致效率低下。
  • 适用场景:适合对实时性要求不高的应用,如文件读取、简单的网络请求等。

非阻塞式I/O

在非阻塞式 I/O 中,I/O 操作不会阻塞程序的执行。程序可以继续执行其他任务,而 I/O 操作在后台进行。

  • 提高效率:允许程序在等待 I/O 完成时执行其他任务,适合高并发场景。
  • 复杂性增加:需要管理异步事件和状态,程序逻辑可能变得复杂。
  • 适用场景:适合对响应时间要求高的应用,如网络服务器、实时系统等。

C语言内置函数

strcpy() 函数用来复制字符串;strncpy()用来复制字符串的前n个字符,所以要多传一个参数n

char *strcpy(char *dest, const char *src);

char * strncpy(char *dest, const char *src, size_t n);

char *strcpy(char *dest, const char *src)

把 src 所指向的字符串复制到 dest。

**strncmp的功能是:**用来比较指定长度两个字符串的大小

int strncmp(const char str1, const char str2, size_t num)

strcmp与strncmp都是用来比较字符串的,区别在于能否比较指定长度字符串,故要多传一个长度参数,这也使得strncmp比strcmp更加精细。

int memcmp(const void *str1, const void *str2, size_t n)把 str1str2 的前 n 个字节进行比较。void *memcpy(void *dest, const void *src, size_t n)从 src 复制 n 个字符到 dest

char *strcat(char *dest, const char *src)把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

GDB调试

232和485通信方式

RS-232短距离 低速率

  • 单工通信:通常是单向通信,即数据只能在一个方向上传输。
  • 点对点通信:通常连接一个发送设备和一个接收设备。

RS-485长距离 高速率

  • 双工通信:支持半双工和全双工通信,允许数据在两个方向上同时传输。
  • 多点通信:可以连接多个设备,适合网络中多个设备的通信。

电平标准不一样

c++11新特性

自动类型推导(auto

范围基于的for循环

智能指针(Smart Pointers)

线程库:C++11引入了对多线程编程的支持

引入了右值引用(&&

C++11引入了nullptr,用于替代NULL,提供了类型安全的空指针表示。

可以在类中直接为成员变量提供默认值。

在传统的C++中,当对象需要从一个地方传递到另一个地方时,通常是通过值传递,这意味着需要复制对象。对于重对象来说,这种复制代价可能很高,导致性能下降。

右值引用允许你在转移资源时避免不必要的数据副本,提高程序效率。

报文录制:

syslog

journald journalctl来查看

BFS是一种用于遍历或搜索树或图的算法,它会先访问离起始节点最近的节点,然后再访问下一层的节点,逐层向外扩展。

  • 找到最短路径:在无权图中,BFS可以用来找到从起始节点到目标节点的最短路径。
  • 广泛应用于网络广播、社交网络分析等场景。

DFS是一种用于遍历或搜索树或图的算法,它会沿着一条路径深入到尽头,然后再回溯到上一个节点,继续探索其他路径

DFS适合用于路径探索、回溯问题。

BFS使用队列结构,通常需要更多的空间来存储待访问节点;DFS则使用栈结构或递归,在深度较大时可能导致栈溢出,但其空间复杂度通常较低。

#通信硬件人笔面经互助##软件开发薪资爆料##我的实习求职记录#
秋招嵌入式八股 文章被收录于专栏

心得和八股文(含面试真题) 全部免费

全部评论

相关推荐

1 3 评论
分享
牛客网
牛客企业服务