当前位置: 首页 > news >正文

华为2024嵌入式研发面试题

01 你认为最好的排序算法是什么?

在实际的编程中,最好的排序算法要根据实际需求和数据规模来选择,因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点:

  • 冒泡排序 冒泡排序是一种简单直观的排序算法,它的时间复杂度是 O(n^2)。虽然它的时间复杂度比较高,但它的实现方式简单,对于小规模数据排序是非常有效的。
  • 快速排序 快速排序是一种常用的排序算法,它的时间复杂度是 O(nlogn)。它的实现方式比较复杂,需要递归实现,但是对于大规模数据排序效率很高。
  • 归并排序 归并排序是一种时间复杂度为 O(nlogn) 的排序算法。归并排序的实现方式比较简单,但需要额外的内存空间来存储临时数据,对于数据量较大时,空间复杂度比较高。
  • 堆排序 堆排序是一种时间复杂度为 O(nlogn) 的排序算法。它的实现方式比较简单,但是需要额外的内存空间来存储堆,对于数据量较大时,空间复杂度比较高。

因此,在实际开发中,根据数据规模和具体需求来选择最优的排序算法。如果数据规模较小,可以使用冒泡排序或插入排序等简单排序算法;如果数据规模较大,可以选择快速排序或归并排序等时间复杂度较低的算法。同时,也要考虑到算法的稳定性、内存占用等因素,综合评估选择最优的算法。

02 树的遍历方式有哪些?

树是一种非线性数据结构,其遍历方式主要有三种:前序遍历、中序遍历和后序遍历。具体实现方式可以使用递归或者栈来完成。

前序遍历:先访问根节点,然后遍历左子树,最后遍历右子树。

void preorder(TreeNode* root) {if (root == nullptr) {return;}    // 访问根节点    cout << root->val << " ";// 遍历左子树    preorder(root->left);    // 遍历右子树    preorder(root->right); 
} 

中序遍历:先遍历左子树,然后访问根节点,最后遍历右子树。

void inorder(TreeNode* root) {if (root == nullptr) {return;    }    // 遍历左子树    inorder(root->left);    // 访问根节点    cout << root->val << " ";     // 遍历右子树     inorder(root->right);  
}

后序遍历:先遍历左子树,然后遍历右子树,最后访问根节点。

void postorder(TreeNode* root) {if (root == nullptr) {return;}// 遍历左子树postorder(root->left);// 遍历右子树postorder(root->right);// 访问根节点cout << root->val << " ";
}

其中,TreeNode是一个二叉树节点的结构体或类,包括左子树指针、右子树指针和节点值。以上实现方式使用的是递归,也可以使用栈来完成遍历。

03 数据结构中图的概念

在数据结构中,图是由顶点和边组成的一种数据结构。它可以用来表示许多现实世界中的实体和关系,比如地图、社交网络和电路等等。在图中,顶点表示实体,边表示实体之间的关系。

图可以分为有向图和无向图。有向图中,边是有方向的,表示顶点之间的单向关系。无向图中,边没有方向,表示顶点之间的双向关系。

图还可以分为带权图和无权图。带权图中,每条边都有一个权值,可以表示实体之间的某种权重或距离等。无权图中,每条边没有权值,只表示实体之间的关系。

图的表示方式有邻接矩阵和邻接表两种。邻接矩阵是一个二维数组,其中行和列分别表示图中的顶点,数组元素表示相应顶点之间是否存在边。邻接表是由若干个链表组成的结构,其中每个链表表示一个顶点及其相邻的顶点。

图的遍历算法有深度优先搜索和广度优先搜索。深度优先搜索从起点开始,沿着一条路径一直遍历到底,然后回溯到之前的结点,继续遍历其它路径。广度优先搜索从起点开始,先遍历所有与之相邻的结点,然后再遍历与这些结点相邻的其它结点,直到遍历完所有结点为止。

04 考察链表问题

问题:输入一个链表,可能有环可能无环,有环的情况下输出入环的第一个节点值,无环的情况下输出-1。

解决方法是使用快慢指针,如果链表中有环,那么快指针总会追上慢指针,此时就可以确定链表中存在环。接下来,重新定义两个指针,一个指针从头节点开始,一个指针从环中相遇的节点开始,每次移动一个节点,直到两个指针相遇,此时的节点就是入环的第一个节点。 C++代码实现如下:

struct ListNode
{int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};
int findFirstNode(ListNode *head)
{ListNode *slow = head, *fast = head;while (fast != nullptr && fast->next != nullptr){slow = slow->next;fast = fast->next->next;if (slow == fast){slow = head;while (slow != fast){slow = slow->next;fast = fast->next;}return slow->val;}}return -1;
}

在这个函数中,使用了两个指针slow和fast,它们从头节点开始移动。在while循环中,slow每次移动一个节点,fast每次移动两个节点。如果链表中有环,快指针最终总是能够追上慢指针,此时会进入if语句块中。在if语句块中,重新定义两个指针slow和fast,slow指向头节点,fast指向相遇节点。然后,两个指针每次都移动一个节点,直到它们相遇,此时的节点就是入环的第一个节点。如果链表中没有环,那么while循环会正常结束,返回-1即可。

05 计算机网络五层模型以及对应的协议

计算机网络五层模型以及每一层对应的协议如下:

  • 物理层:负责物理传输介质上的比特流传输,例如光纤、网线等。常用协议有:RS-232、V.35、10Base-T等。
  • 数据链路层:负责将比特流划分为数据帧并进行差错检测和纠正,同时也进行物理寻址和流量控制。常用协议有:以太网、令牌环、HDLC、PPP等。
  • 网络层:负责数据的路由选择和分组转发,将数据包发送到目标地址。常用协议有:IP、ICMP、ARP、RIP、OSPF、BGP等。
  • 传输层:提供可靠的端到端的数据传输,负责数据的分段、排序、传输错误恢复等。常用协议有:TCP、UDP等。
  • 应用层:为用户提供各种网络应用服务,如电子邮件、文件传输、远程登录、Web服务等。常用协议有:HTTP、SMTP、POP3、FTP、Telnet等。

06 解释ICMP DHCP

ICMP (Internet Control Message Protocol) 是一种网络协议,它主要用于在网络中传递控制信息和错误报告。它通常被用来检测网络连接的可用性和测试网络性能,比如 ping 命令就是基于 ICMP 协议实现的。当出现网络故障时,ICMP 可以向发送端发送错误消息,以及向其他网络设备发送请求,以便进行网络故障排查。

DHCP (Dynamic Host Configuration Protocol) 是一种网络协议,它允许网络中的设备自动获得 IP 地址和其他网络配置信息。DHCP 是一种自动化的方式,使得网络管理员可以轻松地管理网络,而无需手动分配 IP 地址。DHCP 的工作原理是,当一个设备加入网络时,它会向 DHCP 服务器发送请求,请求分配一个可用的 IP 地址。DHCP 服务器会从一个可用的地址池中选择一个 IP 地址,并将该地址分配给设备。同时,DHCP 还可以为设备分配其他网络配置信息,比如默认网关、DNS 服务器等。这样,设备就可以自动获取网络配置信息,而无需手动配置。

07 HTTP 从浏览器输入域名的全过程

当浏览器输入域名并按下回车键时,HTTP(超文本传输协议)协议将开始在客户端和服务器之间进行数据传输。以下是HTTP从浏览器输入域名的全过程:

  • DNS解析:当用户输入URL时,首先需要将其转换为IP地址。此过程称为DNS解析。浏览器会首先检查本地DNS缓存是否包含所请求的域名的IP地址。如果本地DNS缓存中不存在,则浏览器将向本地DNS服务器发出请求,该服务器将向互联网上的根DNS服务器发送请求,直到找到相应的IP地址。
  • 建立TCP连接:一旦浏览器知道服务器的IP地址,它将通过TCP连接请求与服务器建立连接。这个过程被称为“三次握手”。在这个过程中,浏览器和服务器将交换一些数据包来确认它们的身份,以确保连接已成功建立。
  • 发送HTTP请求:一旦TCP连接建立,浏览器将向服务器发送HTTP请求。该请求将包含一些信息,例如请求类型,URL,标头等。
  • 服务器处理请求:一旦服务器收到HTTP请求,它将解析请求并查找所请求的资源。如果请求的资源可用,则服务器将准备响应。
  • 服务器发送HTTP响应:一旦服务器准备好响应,它将使用HTTP响应将所请求的资源发送回客户端。该响应包括HTTP状态代码,响应头和响应体等信息。
  • 关闭TCP连接:一旦浏览器收到响应,它将通过TCP连接关闭连接。这个过程被称为“四次挥手”。在这个过程中,浏览器和服务器将交换一些数据包以确认它们的身份,并关闭连接。
  • 显示内容:最后,浏览器将使用响应的内容来显示请求的资源。这可能包括HTML,CSS,JavaScript,图像和其他资源。

相关文章:

华为2024嵌入式研发面试题

01 你认为最好的排序算法是什么&#xff1f; 在实际的编程中&#xff0c;最好的排序算法要根据实际需求和数据规模来选择&#xff0c;因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点&#xff1a; 冒泡排序 冒泡排序是一种简单直观的排序算法&#xff0…...

centos 搭建nginx+配置域名+windows访问

准备工作&#xff1a;一个完整的centos环境&#xff0c;nginx安装包(可以从官网下载)nginx: download 一&#xff1a;centos可能有精简版&#xff0c;部分环境没有相关依赖包&#xff0c; 需要检查以下项&#xff1a; 1.gcc检查&#xff1a;gcc -v&#xff08;回车后应当有版…...

APP推荐:全新TV端来了,8K原画电视版

▌ 软件介绍 B站都不陌生吧&#xff0c;一个能追番、学习、娱乐的多元平台&#xff0c;之前也分享过几款第三方TV端&#xff0c;其中的BV最近更新了全新版本。 使用了全新的UI界面&#xff0c;由之前的顶部菜单栏改成了侧边布局&#xff0c;已解锁限制&…...

【MySQL】索引(一)

索引 一、磁盘1、物理结构2、示意图3、定位扇区4、读写操作的基本方式 二、页1、介绍2、示例3、作用与结构4、类型&#xff08;1&#xff09;数据页&#xff08;2&#xff09;其他 5、组织与管理6、性能优化7、示意图&#xff08;B树&#xff09; 三、索引1、作用2、注意事项 四…...

ES6的高阶语法特性

一、模板字符串的高级用法 1.1.模板字符串的嵌套 模板字符串的嵌套允许在一个模板字符串内部再嵌入一个或多个模板字符串。这种嵌套结构在处理复杂数据结构或生成具有层级关系的文本时非常有用。 1. 嵌套示例 假设我们有一个包含多个对象的数组&#xff0c;每个对象都有名称、…...

GO:GO程序如何处理缓存加载和大数据缓存

如果我们会在程序启动时&#xff0c;需要加载所有数据&#xff0c;最简单的方式就是程序启动&#xff0c;通过轮训从数据库拉取所有数据&#xff0c;并写入到本地缓存中。 问题&#xff1a;数据量较大的时候&#xff0c;程序加载慢&#xff0c;启动时间长&#xff0c;遇到问题不…...

时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级

近日&#xff0c;TDengine 3.3.5.0 版本正式发布&#xff0c;带来了多项重磅更新与优化&#xff0c;从功能拓展到性能提升&#xff0c;再到用户体验进行了全面改进。本次更新围绕用户核心需求展开&#xff0c;涵盖了开发工具、数据管理、安全性、可视化等多个层面&#xff0c;为…...

信息系统项目管理-采购管理-采购清单示例

序号类别产品/服务名称规格/功能描述数量备注1硬件服务器高性能处理器&#xff0c;大容量存储10HP、DELL2网络设备高速路由器和交换机10华为3工作站多核处理器&#xff0c;高分辨率显示器25国产设备4移动检查设备手持式移动检查仪&#xff0c;可连接云平台30国产设备5打印机和扫…...

python识别图片中指定颜色的图案并保存为图片

示例代码&#xff1a; def chuli(color):import cv2import numpy as np# 定义颜色名称到HSV阈值范围的映射color_thresholds {red: ([0, 100, 100], [10, 255, 255], [160, 100, 100], [180, 255, 255]),yellow: ([20, 100, 100], [30, 255, 255]),blue: ([90, 100, 100], [1…...

【git命令行】git pull冲突如何使用stash暂存,不提交当前工作的情况下临时保存修改

1、git add . 暂存区暂存 2、git stash save "message" 保存当前工作目录的临时状态&#xff0c;并将其存储为一个新的stash 3 、git pull 重新拉取 4、**git stash pop**吐出之前暂存的改动&#xff0c;git stash clear 清空所有暂存...

浏览器输入http形式网址后自动跳转https解决方法

一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况&#xff1a; 在浏览器中输入“http域名”后会自动变成“https 域名”的形式&#xff0c;此时“https 域名”的网站可能已停止对外提供服务了&#xff0c;这时会出现如下不友好的网页提示&#xff1a; 二、处理方法&#x…...

BertTokenizerFast 和 BertTokenizer 的区别

BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具&#xff0c;主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现&#xff1a; BertTokenizer: 这是一个使用纯 Python 实现的标记器&#xff…...

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录前言 &#x1f343;一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…...

测试人员面试需要掌握的内容

测试人员面试需要掌握的内容 1、在公司的测试流程是什么&#xff1f; 产品经理确认本次版本的需求&#xff0c;召开需求评审会&#xff0c;进行估时排期&#xff0c;需求和时间都确定之后&#xff0c;UI出设计图&#xff0c;开发人员进行开发&#xff0c;测试人员编写测试用例…...

git 新建分支并推到远程分支

在git或者码云上创建一个项目管理&#xff0c;已经存在主分支&#xff0c;现在需要创建一个其他分支&#xff1b; 具体操作&#xff1a; 1. 查看分支情况 git branch 2. 查看分支状态 git status 3. 一次性创建并切换到本地分支 git checkout -b dev 分步骤创建和切换&…...

【Uniapp-Vue3】showLoading加载和showModal模态框示例

一、showLoading加载 uni.showLoading({ title:"标题", // 其他配置 }); uni.hideLoading(); showLoading开启后不会自动关闭&#xff0c;只能手动配置uni.hideLoading() 来关闭加载框。 二、showModel模态框 uni.showModel({ title:"标题", // 其他配置 …...

PythonOpenCV图片识别

在windows下面&#xff0c;使用python opencv 进行识别&#xff0c;获取到坐标。 依赖安装&#xff1a; pip install opencv-python pip install numpy pip install pyautogui pip install pywin32代码&#xff1a; import cv2 import numpy as np import pyautogui import o…...

构建优雅、高效的 Nodejs 命令行工具 - Archons

目录 项目简介安装基本用法样例创建一个简单的命令行工具使用archons上下文创建进度条 最后 项目地址: https://github.com/noctisynth/archons Bug反馈或功能请求&#xff1a;https://github.com/noctisynth/archons/issues 项目简介 Archons意思是“执政官”&#xff0c;我使…...

你喜欢用什么编辑器?

电脑工作者和程序员所使用的文本编辑器通常需要具备高效率、易用性以及对代码友好等特点&#xff0c;包括语法高亮、自动完成、多文件同时编辑、查找替换、版本控制集成等功能。以下是几个广受开发者欢迎且实用性较强的文本编辑器&#xff1a; Visual Studio Code&#xff08;V…...

鸿蒙报错Init keystore failed: keystore password was incorrect

报错如下&#xff1a; > hvigor ERROR: Failed :entry:defaultSignHap... > hvigor ERROR: Tools execution failed. 01-13 16:35:55 ERROR - hap-sign-tool: error: Init keystore failed: keystore password was incorrect * Try the following: > The key stor…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...