大厂嵌入式公司面试真题

 面试题:

  1. 基础知识题
    • 请解释C语言中的指针是什么以及它们如何工作?
    • 描述C语言中的动态内存分配。malloccallocreallocfree这些函数有何区别?
    • C语言中的宏(macro)和函数之间有什么不同?
  2. 代码理解题
    #include <stdio.h>
    void mysteryFunction(int *ptrA, int *ptrB) {int temp;temp = *ptrA;*ptrA = *ptrB * 2;*ptrB = temp / 2;
    }
    int main() {int a = 10, b = 20;mysteryFunction(&a, &b);printf("a = %d, b = %d\n", a, b);return 0;
    }

    这段代码中,mysteryFunction函数接受两个整数的指针作为参数,然后将第一个指针指向的值替换为第二个指针指向的值的两倍,并将第二个指针指向的值替换为第一个指针指向的值的一半。
    问: 当调用 `mysteryFunction(&a, &b);` 后,变量 `a` 和 `b` 的值将会是多少?
     

  3. 编程能力题
    • 编写一个C语言函数,实现字符串反转。
    • 实现一个C语言程序,检测链表是否有环。
    • 给定一个整数数组和一个目标值,请编写函数找出数组中和为目标值的两个数的索引。
  4. 深入理解题
    • 请描述C语言中的静态变量和全局变量的作用域和生命周期。
    • 解释诸如段错误(segmentation fault)和内存泄漏(memory leak)等运行时错误。
  5. 优化与效率题
    • 给定一个性能不佳的C语言函数,请分析可能的原因并提出改进措施。
    • 如果一个C语言程序的大小和运行速度非常关键,请讨论你会如何优化代码。
  6. 学习能力和问题解决题
    • 如果在编译时遇到一个你不熟悉的编译错误,你会如何定位并解决它?
    • 如何确保你的C程序是可移植的,并且可以在不同的操作系统和硬件上编译和运行?

答案:

  1. 指针的解释:指针是C语言中的一种数据类型,它存储了变量的内存地址。指针通过间接引用变量的地址来访问和操作变量的值。
  2. 动态内存分配malloc 分配未初始化的内存块;calloc 分配并初始化内存块为零;realloc 用于已分配内存块的大小调整;free 释放先前分配的内存。
  3. 宏与函数的区别:宏是预处理指令,不做类型检查,而且在预处理阶段就展开;函数在编译运行时实现,有类型安全检查,且有运行时成本。
  4. 代码理解题的示例答案:在函数调用之前,变量 a 的值是10,变量 b 的值是20。调用 mysteryFunction 后,a 会被设置为 b 的两倍,也就是40。b 会被设置为 a 的一半,即5。因此,函数执行后,变量 a 和变量 b 的值将会是:
    a = 40, b = 5
  5. 编写字符串反转函数
    void reverse(char *str) {if (str) {char *end = str;while (*end) {++end;}--end;while (str < end) {char tmp = *str;*str++ = *end;*end-- = tmp;}}
    }

  6. 检测链表是否有环
    int hasCycle(struct ListNode *head) {struct ListNode *slow = head, *fast = head;while (fast && fast->next) {slow = slow->next;fast = fast->next->next;if (slow == fast) {return 1;}}return 0;
    }

  7. 找出和为目标值的两个数的索引:这个问题可以使用哈希表解决,通过一次遍历数组,存储每个数字和其索引的映射,然后在访问每个数字时检查目标值减去该数字的结果是否也在哈希表中。
  8. 静态变量和全局变量的解释:静态变量在声明它的函数或文件内保持其值的生命周期,而全局变量在程序的整个执行期间都是可用的。
  9. 运行时错误的解释:段错误指的是程序试图访问其内存空间外的区域;内存泄漏是指程序未能释放它先前分配的内存。
  10. 性能不佳的函数改进:优化可能包括减少函数调用次数、减少不必要的计算、使用更高效的算法或数据结构、或者减少内存访问。
  11. 处理不熟悉的编译错误:首先查看编译器给出的错误信息,搜索相关的文档和在线资源,或在开发者社区中寻求帮助。
  12. 确保程序可移植性:遵循标准C语言规范编写代码,避免使用特定平台依赖特性,使用条件编译处理不同平台的特定代码。

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

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

相关文章

详解Megatron中的数据混合算法(BlendableDataset)

&#x1f9d1;‍&#x1f4bb; 本文主要讲解Megatron早期版本中的数据混合算法。 目录 1. 数据混合2. 源码解析3. 证明部分&讨论4. 进一步优化 1. 数据混合 在谈源码之前&#xff0c;我们有必要先了解一下Megatron中的数据混合思想。 给定 n n n 个数据集 D 1 , D 2 , …

给定一个边与边可能相交的多边形,求它的轮廓线

大家好&#xff0c;我是前端西瓜哥。 最近遇到一个需求&#xff0c;给定一个多边形&#xff08;边与边可能相交&#xff09;&#xff0c;求这个多边形的轮廓线。 需要注意的是&#xff0c;轮廓线多边形内不能有空洞&#xff0c;使用的不是常见的非零绕数规则&#xff08;nonze…

Java+SpringBoot,打造极致申报体验

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神&#xff0c;大力实施生态优先绿色发展战略&#xff0c;积极践行人、水、自然和谐共生理念&…

VOL_常用记录!!-----后端

目录 1.后台配置appsettings.json说明2.service.cs扩展 表/明细表(CRUD导入导出)前后做一些操作 数据(CRUD导入导出)前后的处理参数或数据2.编辑3.新建4.查询5.导出6.导入 注意事项&#xff1a;后台扩展必须写在代码生成的Partial部分类里面 防止代码生成后覆盖你的扩展的代码 …

opencascade在vs和qt下改变视图方向和设置线框模式

一.改变视图方向&#xff08;以顶部视图为例&#xff09; 1.在qt的界面代码中设置好 2.在view.h中设置好槽函数 3.在lzzcad.cpp中设置槽与信号的连接&#xff0c;并在工具栏上显示 4.在view.cpp中给出函数实现 5.给出快捷键实现方式 二.设置线框模式 同上&#xff0c;加入函数…

力扣:93. 复原 IP 地址

回溯&#xff1a; 1.先定义一个接收的集合&#xff0c;之后再定义一个记录小数点的变量。之后编写回溯函数&#xff0c;终止条件为小数点的个数为3时&#xff0c;同时要判断最后一段的组合的值是否属于ip地址的范围。之后再用for循环来遍历ip地址的组合&#xff0c;先判断组合…

【软件设计模式之模板方法模式】

文章目录 前言一、什么是模板方法模式&#xff1f;二、模板方法模式的结构1. 抽象类定义2. 具体实现 三、模板方法模式的应用场景1. 算法重用2. 操作中的固定步骤3. 扩展框架的功能4. 提供回调方法5. 遵循开闭原则 四、模板方法模式的优缺点1. 优点代码复用扩展性好符合开闭原则…

[深度学习]yolov9+deepsort+pyqt5实现目标追踪

【YOLOv9DeepSORTPyQt5追踪介绍】 随着人工智能技术的飞速发展&#xff0c;目标追踪在视频监控、自动驾驶等领域的应用日益广泛。其中&#xff0c;YOLOv9作为先进的目标检测算法&#xff0c;结合DeepSORT多目标追踪算法和PyQt5图形界面库&#xff0c;能够为用户提供高效、直观…

Linux fdisk命令教程:硬盘分区的利器(附实例详解和注意事项)

Linux fdisk命令介绍 fdisk&#xff08;format disk&#xff09;是一个在Linux中用于创建和操作磁盘分区表的对话驱动命令。它是最常用的创建分区的工具之一。fdisk允许你在硬盘上创建和操作分区表。需要注意的是&#xff0c;fdisk是一个危险的工具&#xff0c;应该谨慎使用。…

前端笔记——var let const 之间的区别

Var&#xff1a; 关键字来声明变量。它有以下特点&#xff1a; var声明的变量作用域是函数级的&#xff0c;即在函数内部声明的变量在整个函数范围内可见。 var变量可以被重复声明&#xff0c;而不会引发错误。 var变量会存在变量提升&#xff08;hoisting&#xff09;现象&…

python-可视化篇-简单-条形图输出主要省份GDP排名情况

条形图输出主要省份GDP排名情况 代码 gdp广东:97277.77:107671.07 江苏:92595.40:99631.52 山东:76469.70:71067.5 浙江:56197.00:62353 河南:48055.90:54259.2 四川:40678.10:46615.82 湖北:39366.60:45828.31 湖南:36425.78:39752.12 河北:36010.30:35104.5 福建:35804.04:…

windows安装 RabbitMQ

首先打开 RabbitMQ 官网&#xff0c;点击 Get Started(开始) 点击 Download Installation(下载安装)。 这里提供了两种方式进行安装&#xff0c;我们使用第二种方法。 使用 chocolatey以管理用户身份使用官方安装程序 往下滑&#xff0c;第二种方法需要 Erlang 的依赖&#x…

iotdb集群模式部署

iotdb集群模式部署 重要声明:部署的版本要和脚本对应上,这里可以点击 来获取最新的脚本; 我使用的是1.3.0版本的iotdb 下面是我基于三个节点的部署步骤: 假如有三台物理机,里面安装了centos系统,它们的hostname分别是iotdb-1、iotdb-2、iotdb-3 1、设置网络 vim /…

1248 - Every derived table must have its own alias

该问题是子查询内的列名无法在外部查询中直接引用&#xff0c;使用别名来为子查询结果集命名&#xff0c;然后在外部查询中引用该别名。以下是一个修正后的查询语句&#xff1a; SELECT last_name, salary FROM (SELECT last_name, salary, RANK() OVER (ORDER BY salary DES…

avidemux-一个免费的视频编辑器,用于剪切、过滤和编码项目

avidemux-一个免费的视频编辑器&#xff0c;用于剪切、过滤和编码项目 avidemux-一个免费的视频编辑器&#xff0c;用于剪切、过滤和编码项目avidemux下载avidemux源代码参考资料 avidemux-一个免费的视频编辑器&#xff0c;用于剪切、过滤和编码项目 avidemux下载 avidemux …

mongoose httpserver浅析

文章目录 前言一、结构体及其功能二、函数MG_LOGmg_http_listenmg_mgr_poll question参考链接 前言 mongoose是一款基于C/C的网络库&#xff0c;可以实现TCP, UDP, HTTP, WebSocket, MQTT通讯。mongoose是的嵌入式网络程序更快、健壮&#xff0c;易于实现。 mongoose只有mong…

qt波位图

1&#xff0c;QPainter 绘制&#xff0c;先绘制这一堆蓝色的东西, 2&#xff0c;在用定时器&#xff1a;QTimer&#xff0c;配合绘制棕色的圆。用到取余&#xff0c;取整 #pragma once#include <QWidget> #include <QPaintEvent>#include <QTimer>QT_BEGIN_…

LangChain Agent v0.2.0简明教程 (上)

快速入门指南 – LangChain中文网 langchain源码剖析系列课程 九天玩转Langchain! 1. LangChain是什么2. LangChain Expression Language (LCEL)Runnable 接口3. Model I/O3.1 Prompt Templates3.2 Language Model3.3 Output ParsersUse case(Q&A with RAG)1. LangChain…

JavaScript中setout函数“bug”再研究

引言 在JavaScript中setout中函数不加双引号引发错误的问题-CSDN博客 上篇文章中笔者讲解了settimeout全局函数&#xff0c;关于引用函数时加不加双引号会使得延迟是否正常出现的“bug” 这里再详细阐述一下 实现方法 首先打开vscode&#xff0c;分别写入如下代码 <!DOC…