华为面经整理

news2024/10/5 15:23:03

文章目录

  • 实习
    • 第一面准备
      • 提问相关
      • 算法相关
    • 第一面结果
      • 提问环节
    • 总结

实习

第一面准备

提问相关

操作系统有哪些功能

  • 进程管理:
    • 进程调度、进程同步和通信、多任务处理
  • 内存管理:
    • 内存分配、虚拟内存技术、内存保护
  • 文件系统管理:
    • 文件存储、目录管理、文件保护和权限:
  • 设备管理
    • 设备驱动程序、设备操作、IO操作管理
  • 网络管理
    • 网络连接、数据传输、网络共享

CLI运行一个用户程序整个过程发生了什么?

  • 命令解析,查找对应的可执行文件
    • 在环境变量path中寻找
  • 创建新进程和资源分配
    • 创建新进程:通过**fork()**系统调用,复制当前进程的所有内容,创建当前进程的副本的子进程
    • 子进程执行程序:执行**exec()**系统调用,将自身的代码和数据替换为目标程序的代码和数据,子进程变成用户要执行的程序
    • 分配资源:为新进程分配内存文件描述符CPU运行时间
      • 文件描述符会继承父进程的,重新针对当前进程分配内存空、加入CPU运行队列
  • 加载程序
    • 将可执行文件加载到内存中
    • 加载器:将指令和数据加载到内存的适当位置
    • 动态链接:加载动态链接库到进程的地址空间
  • 程序开始执行
    • 加载完成后,新进程开始执行程序的入口main函数,等待进程调度
  • 程序终止和资源清理
    • 释放资源、进程表更新(进程表中移除该数据)、父进程通知调用wait来获取子进程的终止状态
  • 显示输出和返回状态码

程序怎么从磁盘的二进制字节码进入内存变成进程的?

  • 查找并读取可执行文件
  • 加载器工作
    • 读取可执行文件头(确定文件结构)、验证文件格式、解析段表(确定数据段、代码段的位置和大小)
  • 内存分配
    • 分配虚拟内存、设置内存映射
  • 加载段到内存
    • 懒加载或者立即加载
  • 动态链接
  • 设置运行环境
    • 初始化堆栈
    • 设置程序的入口点
  • 执行程序

TCP/IP五层是怎么封装的?

  • 应用层
    • 生成数据,例如一个HTTP请求,数据格式化并准备传递给传输层
  • 传输层
    • 数据分段,添加TCP头部,包含源端口、目标端口、序列号、校验和等信息。
    • 形成传输层数据单元(segment)
  • 网络层
    • 网络层(如IP)在传输层数据单元前添加IP头部,包含源IP地址、目标IP地址、协议类型、校验和等信息。
    • 形成数据包(packet)
  • 数据链路层
    • 数据链路层(如以太网)在网络层数据包前添加帧头,帧头包含源MAC地址、目标MAC地址、类型字段等信息。
    • 形成数据帧(frame)
  • 物理层
    • 数据帧被转换为物理信号(如电信号、光信号)并通过物理介质传输。
应用层数据
  ↓
传输层封装(TCP头部)
  ↓
TCP段
  ↓
网络层封装(IP头部)
  ↓
IP包
  ↓
数据链路层封装(帧头和帧尾)
  ↓
以太网帧
  ↓
物理层传输(物理信号)

协程和线程的区别

  • 切换开销
    • 线程调度是由内核负责,协程调度是由用户自己负责。协程的切换比线程快,因为不需要从用户态切换到内核态。
    • 线程切换改变的寄存器和状态量比协程要多很多。
  • 调度方式
    • 线程是抢占式调度,频繁切换线程,系统开销大。
    • 协程是协商式调度,协程执行完毕,主动释放CPU,切换次数少,性能高。
  • 内存大小
    • 线程的栈在创建时就已经制定了,8MB,协程的栈是KB级别的。线程过多,占据的资源会比较多,导致系统崩溃,协程可以成千上百。
    • 线程栈是固定大小的,协程的展示可以收缩和扩容的。

如何书写结构体,运行效率更高

  • 内存对齐和填充
    • 处理器从内存读取数据时,通常以块(如4字节或8字节)为单位进行。合理安排内存,减少填充时间,减少内存访问时间。
  • 缓存局部性
    • 尽量将可能一起使用的成员放在一起,缓存命中率高。
  • 避免不必要的嵌套
    • 减少结构体的嵌套
  • 使用位域优化
    • 对于特定小范围数据,限定其使用的位的数量
  • 使用编译器优化
    • 编译器选项:使用编译器提供的优化选项和指令(如__attribute__((packed)))来优化结构体

C++函数调用为什么使用栈来实现

  • 栈是一种后进先出(LIFO)的数据结构函数调用过程具有天然的LIFO特性:一个函数调用可能会触发另一个函数调用,而每个函数在完成时需要返回到调用它的函数。
  • 自动管理内存
  • 简单高效:
    • 只需要调整栈指针就能实现栈帧的分配和释放
  • 递归支持
  • 多线程支持:
    • 每一个线程有自己的栈空间,独立管理各自的函数调用和返回,互不干扰。

linux和window之间进程管理的区别

  • 进程模型
  • 在Linux中,
    • 进程和线程都是通过task_struct结构体来管理的。线程是轻量级进程,它们共享同一个进程的资源
    • 通过fork或者clone创建一个进程,新建进程是父进程的一个子进程
  • windows
    • 在Windows中,进程是包含一个或多个线程的容器每个进程都有一个进程控制块(PCB),线程有各自的线程控制块(TCB)
    • Windows使用CreateProcess()函数创建新进程。这个函数创建一个新的进程及其主线程,并初始化新进程的执行环境。

死锁产生以及破坏死锁的条件

  • 两个以上进程并发执行,争夺资源相互等待的现象。
    • 互斥条件
    • 持有并等待
    • 不剥夺条件
    • 环路等待
  • 避免死锁的条件
    • 加锁顺序:使用资源的有序分配法来破坏环路等待
    • 加锁时限:请求某一个资源超过一段时间没有获取到,自动释放。
    • 死锁检测:当一个线程请求锁失败时,这个线程可以遍历资源的关系图看看是否有死锁发生。

进程通信的几种方式,哪种最快

  • 管道通信
  • 消息队列
  • 共享内存:最快
  • 信号
  • 信号量

MySQL索引,怎么建,底层原理,模糊查询走不走索引

  • 索引建立
    • 通过CREATE INDEX语句创建索引,除了主键索引,其他都是要手动创建
  • 索引底层原理
    • B+树索引实现,B+树的基本特征
    • 索引查找过程
  • 模糊查询与索引
    • 模糊查询不利于索引的使用。因为模糊查询的匹配方式可能导致索引失效,使得MySQL无法有效地利用索引加速查询

MySQL事务怎么防止中断日志

  • WAL(Write-Ahead Logging)机制
  • 数据库的持久化设置
  • 文件系统缓存与硬件缓存

了解线段树嘛

  • 平衡二叉查找树,根节点表示一个完整的单元区间,内部节点,将整个区间划分成更小的区间。
  • 实现数据的查找

C++面向对象的设计原则

  • 单一职责原则
    • 一个类应该只负责一个功能领域的事务
  • 开放-封闭原则
    • 应该对扩展开放,对修改封闭
  • 里氏替换原则(Liskov Substitution Principle,LSP)
    • 子类型必须能够替换其基类型而不影响程序的正确性
  • 依赖倒置原则(Dependency Inversion Principle,DIP)
    • 高层模块依赖于抽象原则
  • 接口隔离
  • 最小知识原则
  • 合成/聚合复用原则

算法相关

medium 最大雨水面积

  • 具体链接
  • 这里再补一个反正法,证明这个方法是最优的
    证明

三数之和

  • 具体链接

考试的最大困扰度

  • 没做过,今天晚上要做一下
  • 题目链接
  • 具体完成链接

第一面结果

  • 不知道明天面试的怎么样,一会睡前再把所有的看过的八股题目全部都过一遍,然后早上起来在背一遍。

在这里插入图片描述

  • 总结,如果还想投华为,就需要对一门语言十分精通,华为主要是语言的特性问的比较多,并不会问很多八股内容。所以,并不需要花太多时间去准备八股的内容。除此之外,还是需要好好刷一下算法,尤其是做过的题目,他会直接给你一个leetcode链接,然后让你开始现场写。
  • 其实心里还是有点失落,毕竟很想去华为,但是自己确实准备的不怎么样,好好准备一下秋招。下面回顾一下整个面试过程中的所有的问题

提问环节

以后应该不会看C++了,这里暂时就不准备整理了,以后的我的语言栈就是java。
C++的内存管理
*

介绍一下虚函数和纯虚函数,有什么特性

定义:虚函数(Virtual Function)是指在基类中使用关键字 virtual 修饰的成员函数。它允许在派生类中重新定义(覆盖)这个函数。

特点:

动态绑定:使用虚函数可以实现动态绑定(Dynamic Binding),即在运行时确定调用哪一个函数版本,而不是在编译时。这使得程序可以在运行时根据实际对象的类型来调用相应的函数。
多态性:虚函数是实现多态性的基础。通过虚函数,基类的指针或引用可以调用派生类的函数版本。
基类和派生类:在基类中声明为虚函数的成员函数,在派生类中可以重新定义(覆盖)。覆盖后的函数也默认是虚函数,不需要再显式使用 virtual 关键字。

纯虚函数
定义:纯虚函数(Pure Virtual Function)是指在基类中声明,但不提供实现的虚函数。纯虚函数在声明时使用 = 0 语法。

特点:

抽象类:包含至少一个纯虚函数的类称为抽象类(Abstract Class)。抽象类不能直接实例化对象。
必须覆盖:派生类必须覆盖(实现)纯虚函数,否则派生类也将成为抽象类,不能实例化。
接口设计:纯虚函数常用于设计接口,强制派生类实现某些特定的功能。

智能指针的相关操作

python有哪些数据结构

python中的list有什么特性

总结

  • 以后如果还是想去华为,就得专精一门语言,把关于语言的所有的八股都好好看一下,了解语言最底层的一些特定还有一些特征,要专精。他是不限制语言的,所以要好好准备一门语言,专精,刚好也减轻我的一部分压力。然后数据库和redis也得好好准备一下。
  • 本次面试最难受的就是,我知道他的套路,让我选择了,但是我没有一个语言是擅长的,只能说给你选了三天路,但是你一条路都不会,所以只能被毙掉,情理之中。
  • 下一步好好看看java,专精一门语言即可,不要再其他语言上花时间了。

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

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

相关文章

MMUNet:形态学特征增强网络在结肠癌病理图像分割中的应用

MMUNet: Morphological feature enhancement network for colon cancer segmentation in pathological images. 发表在:Biomedical Signal Processing and Control2024--影响因子:3.137 南华大学的论文 论文地址:main.pdf (sciencedirecta…

【ffmpeg】本地格式转换 mp4转wav||裁剪mp4

个人感受:太爽了!!!(可能用惯了转换网站和无良的转换软件) ———— 使用FFmpeg把mp4文件转换为WAV文件 - 简书 (jianshu.com) FFMPEG 视频分割和合并 - 简书 (jianshu.com) ———— 示例 ffmpeg -i …

计算机组成结构—IO接口(IO控制器)

目录 一、I/O 接口的功能 二、I/O 接口的基本结构 1. 总线连接的数据通路 2. I/O 接口的基本组成 三、I/O 端口及其编址 1. 统一编址 2. 不统一编址 四、I/O 接口的类型 两个系统或两个部件之间的交接部分,一般就称为 接口。接口可以是硬件上两种设备间的连…

哈夫曼树的创建

要了解哈夫曼树,可以先了解一下哈夫曼编码,假设我们有几个字母,他们的出现频率是A: 1 B: 2 C: 3 D: 4 E: 5 F: 6 G: 7。那么如果想要压缩数据的同时让访问更加快捷,就要让频率高的字母离根节点比较进,容易访问&#xf…

微生物共生与致病性:动态变化与识别挑战

谷禾健康 细菌耐药性 抗生素耐药性细菌感染的发生率正在上升,而新抗生素的开发由于种种原因在制药行业受重视程度下降。 最新在《柳叶刀-微生物》(The Lancet Microbe)上,科学家提出了基于细菌适应性、竞争和传播的生态原则的跨学…

个人vsCode配置文件<setting.js>

个人vsCode配置文件setting.js 快速打开1、使用快捷键 CtrlShiftP ,然后搜索setting2、手动 自用配置 快速打开 1、使用快捷键 CtrlShiftP ,然后搜索setting 2、手动 自用配置 {"terminal.integrated.profiles.windows": {"PowerShell&…

阿里云对象存储OSS简单使用

文章目录 概念基本概念Bucket 准备工作控制台操作对象存储OSSJava客户端操作对象存储OSS参考来源 概念 基本概念 阿里云对象存储 OSS是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。而且提供了多种存储类型,降低我…

顶顶通呼叫中心中间件-asr录音路径修改(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-asr录音路径修改(mod_cti基于FreeSWITCH) 录音路径模板。如果不是绝对路径,会把这个路径追加到FreeSWITCH的recordings后面。支持变量,比如日期 ${strftime(%Y-%m-%d)}。最后一个录音文件路径会保存到变量 ${cti_asr_last_record_…

PDF 文件的解析

1、文本 PDF 的解析 1.1、文本的提取 进行文本提取的 Python 库包括:pdfminer.six、PyMuPDF、PyPDF2 和 pdfplumber,效果最好的是 PyMuPDF,PyMuPDF 在进行文本提取时能够最大限度地保留 PDF 的阅读顺序,这对于双栏 PDF 文件的抽…

刷完50题,搞定十大网络基础知识

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 上午好,我的网工朋友 咱新手网工,入行之前最需要做的准备之一,就是抓住网络基础知识,毕竟是饭碗&…

C语言野指针、规避野指针、assert宏断言

目录 a.野指针成因 1.指针未初始化 2.指针越界访问 3.指针指向的空间释放 b.规避野指针 1.指针初始化 2.小心指针越界 3.指针变量不再使用时,及时置NULL,指针使用之前检查有效性 4.避免返回局部变量的地址 c.assert宏断言的使用 概念&#xff1…

上位机快速开发框架

右上角向下按钮 -> 后台配置 系统菜单 角色管理 分配权限 用户管理 设备配置 通道管理 首页界面设计 设备1配置 带反馈按钮,如:用户按键00105,PLC反馈状态00106 设备2配置 参数说明: TagName_Main:主要信息&#…

加密经济浪潮:探索Web3对金融体系的颠覆

随着区块链技术的快速发展,加密经济正在成为全球金融领域的一股新的浪潮。而Web3作为下一代互联网的代表,以其去中心化、可编程的特性,正深刻影响着传统金融体系的格局和运作方式。本文将深入探讨加密经济对金融体系的颠覆,探索We…

SpringBoot+百度地图+Mysql实现中国地图可视化

通过SpringBoot百度地图Mysql实现中国地图可视化 一、申请百度地图的ak值 进入百度开发者平台 编辑以下内容 然后申请成功 二、Springboot写一个接口 确保数据库里有数据 文件目录如下 1、配置application.properties文件 #访问端口号 server.port9090 # 数据库连接信息 spr…

Xamarin.Android实现通知推送功能(1)

目录 1、背景说明1.1 开发环境1.2 实现效果1.2.1 推送的界面1.2.2 推送的设置1.2.3 推送的功能实现1.2.3.1、Activity的设置【重要】1.2.3.2、代码的实现 2、源码下载3、总结4、参考资料 1、背景说明 在App开发中,通知(或消息)的推送&#x…

CiteScore 2023发布,AI Open斩获45分,位列全球计算机领域前1%

与影响因子(IF)一样,引用分数(CiteScore)同样是衡量学术期刊影响力的重要指标之一,且大有赶超前者的势头。 6 月 6 日,CiteScore 2023 正式发布,人工智能领域可自由访问的期刊平台 …

塑造财务规划团队的未来角色

随着企业不断改革,其财务规划团队的格局也在不断变化,领先行业的专业人士已经开始利用更创新的财务知识和思维来驾驭现代化财务规划角色的复杂性。财务团队需要不同的职能角色和技能组合来支持其发展,多学科团队和跨职能协作带来的挑战和机遇…

刷代码随想录有感(95):合并区间

题干&#xff1a; 代码&#xff1a; class Solution { public:static bool cmp(vector<int>& a, vector<int>& b){return a[0] < b[0];}vector<vector<int>> merge(vector<vector<int>>& intervals) {sort(intervals.begi…

水务设备数字化管理

在数字化浪潮席卷全球的今天&#xff0c;水务行业也迎来了数字化转型的重要契机。传统水务管理模式中&#xff0c;设备监控、数据收集、运行维护等环节往往存在效率低下、成本高昂、安全隐患多等问题。而HiWoo Cloud平台的出现&#xff0c;以其强大的设备接入能力、高效的数据处…

安卓虚拟屏幕锁屏画面源码分析部分KeyguardPresentation

背景&#xff1a; 在搞虚拟多屏和投屏相关业务时候&#xff0c;发现在锁屏时候一个画面比较特殊&#xff0c;但是明显我们自己也没有给虚拟屏幕和投屏有绘制过这个页面。 具体页面如下&#xff1a; 这个圈中小方框就是虚拟屏幕&#xff0c;在息屏待机时候居然也有个类似锁屏…