华为面经整理

文章目录

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

实习

第一面准备

提问相关

操作系统有哪些功能

  • 进程管理:
    • 进程调度、进程同步和通信、多任务处理
  • 内存管理:
    • 内存分配、虚拟内存技术、内存保护
  • 文件系统管理:
    • 文件存储、目录管理、文件保护和权限:
  • 设备管理
    • 设备驱动程序、设备操作、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.rhkb.cn/news/343148.html

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

相关文章

数据中心网络架构设计与优化

数据中心是现代企业和组织的核心基础设施,它们用于存储、处理和传输大量的数据和信息。为了满足不断增长的数据需求和提供可靠的服务,设计和优化数据中心网络架构至关重要。 首先,数据中心网络架构设计需要考虑可扩展性。随着业务的增长&…

【Pycharm】功能介绍

1.Code Reformat Code 格式化代码,可以帮助我们去自动调整空格等,根据python语法规范自动调整 2.Settings 1.创建py文件默认填充模版 3.读写py文件编码格式一致性 顶部代码指定的编码方式作用: 可以保证python2/3解释器在读取文件的时候按…

【SpringBoot + Vue 尚庭公寓实战】租期管理接口实现(四)

【SpringBoot Vue 尚庭公寓实战】租期管理接口实现(四) 文章目录 【SpringBoot Vue 尚庭公寓实战】租期管理接口实现(四)1、查询全部租期列表2、保存或更新租期信息3、根据ID删除租期 租期管理共有三个接口,分别是 保…

MySQL中获取时间的方法

大家好,在MySQL数据库开发中,获取时间是一个常见的需求。MySQL提供了多种方法来获取当前日期、时间和时间戳,并且可以对时间进行格式化、计算和转换。 以下是一些常用的MySQL时间函数及其示例: 1、NOW():用于获取当前…

网线制作(双绞线+水晶头)——T568B标准

参考视频:https://www.bilibili.com/video/BV1KQ4y1i7zP/ 1、使用剥线器 2、将线捋顺、排序、剪掉牵引线 记忆技巧 1.线序颜色整体是一浅一深 2.颜色顺序是黄、蓝、绿、棕 一个黄种人、从上向下看,分别看到的是蓝天、青草(绿)、泥土(棕色) 3.中间两根浅…

反序列化漏洞

概念 序列化( serialization ):讲数据结构、对象等状态转化成可使用的格式(一般用于:缓存、网络发送、身份信息等),以备能够被还原为原始状态; 序列化 & 反序列化功能一般用作…

硬件产品经理

边端协调管理平台 主页一:模型管理1.1 边侧模型管理 二:配置管理2.1 终端软件配置管理 三:设备管理3.1 区域位置管理3.2 工控机管理(其实就是围绕授权)3.3 生产设备管理3.4 设备运行管理 四:数据服务4.1 实…

Unity 资源 之 风格化地形纹理(Stylized Terrain Textures)免费领取

风格化地形纹理:Stylized Terrain Textures 前言资源包内容领取兑换码 前言 亲爱的 Unity 游戏开发者们,我们自豪地为大家推荐最新的每周免费资源:风格化地形纹理!这些令人惊叹的纹理将为你的游戏世界带来独特而引人入胜的视觉体…

MySQL与PostgreSQL关键对比三(索引类型)

目录 索引类型 B-tree 索引 Hash 索引 Full-text 索引 GiST 索引 GIN 索引 BRIN 索引 索引创建示例 MySQL PostgreSQL 结论 以下SQL语句的执行如果需要开发工具支持,可以尝试使用SQLynx或Navicat来执行。 MySQL和PostgreSQL在索引方面有许多相似之处&am…

layui左侧菜单栏,鼠标悬停显示菜单文字

layui封装的左侧菜单是固定宽度的,且左侧菜单栏在css里改变宽度,效果并不是很好(还设计头部菜单栏),如果写js来让菜单栏能够拉伸,也比较麻烦,那怎么最简单的,让用户看到菜单的文字呢…

释放视频潜力:Topaz Video AI for mac/win 一款全新的视频增强与修复利器

在数字时代,视频已经成为我们记录生活、分享经历的重要方式。然而,有时候我们所拍摄的视频可能并不完美,可能存在模糊、噪点、抖动等问题。这时候,就需要一款强大的视频增强和修复工具来帮助我们提升视频质量,让它们更…

LabVIEW与Arm控制器之间的通讯

LabVIEW是一个强大的图形化编程环境,广泛应用于自动化控制、数据采集和测试测量等领域。而Arm控制器则是嵌入式系统中常用的处理器架构,广泛用于各种控制和计算任务。将LabVIEW与Arm控制器进行通讯控制,可以结合二者的优势,实现高…

推荐系统三十六式学习笔记:原理篇.近邻推荐07|人以群分,你是什么人就看到什么世界

目录 协同过滤基于用户的协同过滤背后的思想原理实践1、构造矩阵2、相似度计算3、推荐计算4、一些改进 应用场景:总结 谈及推荐系统,不得不说大名鼎鼎的协同过滤。协同过滤的重点在于协同,所谓协同,也就是群体互帮互助&#xff0c…

大模型安全技术实践 | RAG精确应对大模型敏感问题知识幻觉难题

一、引言 在大模型的实际应用落地过程中,会遇到所谓的幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但与原文不符(Faithfulness)或事实不符(Factualness&a…

Ubuntu 22.04安装cuda及Pytorch教程

文章目录 1、安装显卡驱动2、安装CUDA3、安装cuDNN4、安装pyTorch5、卸载CUDA参考资料 服务器重装系统后,需要重新安装显卡驱动、cuda及Pytorch等,有些步骤容易忘记,这里记录一下。这里我的服务器配置以及安装版本的情况如下: 服…

基于简单Agent对医疗数据进行分析

数据表 供应商资格审核规定.pdf 医生名录.xlsx 历史就诊记录.xlsx 患者信息名录.xlsx 药品.xlsx 药品库存管理.xlsx 采购单位基本信息.xlsx Agent测试 模型基于ChatGPT-3.5 问题:帮我找出不达标的供应商 Agent分析过程 [Thought: 0] Key Concepts: - 不达标的供…

IMX6ULL kernel移植

1.环境说明 编译主机Debian 12交叉编译工具arm-none-linux-gnueabihf-gcc(gcc version 12.3.1 20230626)kernel版本lf-6.6.3-1.0.02.官方默认版本说明 默认官方版本的kernel是可以运行的,直接按照下面的命令编译即可 ###清除掉默认配置make ARCH=arm CROSS_COMPILE=arm-no…

【每日刷题】Day58

【每日刷题】Day58 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼​​​​​​​ 1. 3038. 相同分数的最大操作数目 I - 力扣(LeetCode) 2. 868. …

男士内裤怎么选?五款不能错过的超舒适男士内裤

在快节奏的现代都市生活中,男士们同样需要关注内在穿搭的品质与舒适度。一条优质贴身的男士内裤,不仅是日常穿着的舒适保障,更是展现男性精致品味的秘密武器。今天,就让我们一同探讨如何挑选出最适合自己的男士内裤,并…

从云端到终端:青犀视频汇聚/融合平台的视频接入方式与场景应用

一、青犀视频汇聚/融合平台 由TSINGSEE青犀视频研发的EasyCVR智能融合/视频汇聚平台基于“云-边-端”一体化架构,支持视频汇聚、融合管理,兼容多协议(GA/T1400/GB28181/Onvif/RTSP/RTMP/海康SDK/Ehome/大华SDK/宇视SDK等)、多类型…