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

华为面经整理

文章目录

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

实习

第一面准备

提问相关

操作系统有哪些功能

  • 进程管理:
    • 进程调度、进程同步和通信、多任务处理
  • 内存管理:
    • 内存分配、虚拟内存技术、内存保护
  • 文件系统管理:
    • 文件存储、目录管理、文件保护和权限:
  • 设备管理
    • 设备驱动程序、设备操作、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,专精一门语言即可,不要再其他语言上花时间了。

相关文章:

华为面经整理

文章目录 实习第一面准备提问相关算法相关 第一面结果提问环节 总结 实习 第一面准备 提问相关 操作系统有哪些功能 进程管理: 进程调度、进程同步和通信、多任务处理 内存管理: 内存分配、虚拟内存技术、内存保护 文件系统管理: 文件存储…...

数据恢复工具推荐:电脑回收站删除的文件怎么恢复?8个回收站恢复软件,收藏!

当文件从电脑的回收站被删除后,许多用户可能认为这些文件已永久丢失。然而,实际上,在数据被新数据覆盖之前,这些删除的文件仍然可以通过使用专门的数据恢复软件来恢复。本文将介绍8款顶级的文件恢复软件,恢复电脑回收站…...

Java 执行字符串 GroovyShell

1...

前端之npm运行时配置文件.npmrc(可用于配置npm淘宝源)

文章目录 前端之npm运行时配置文件.npmrc什么是.npmrc设置项目配置文件设置用户配置文件设置全局配置文件给npm 命令添加注册源选项 前端之npm运行时配置文件.npmrc 什么是.npmrc 官网:https://nodejs.cn/npm/cli/v7/configuring-npm/npmrc/ .npmrc,可…...

如何充分利用代理IP扩大网络接触面

目录 前言 第一部分:什么是代理IP? 第二部分:如何获取代理IP? 1. IP质量 2. 匿名性 3. 限制 第三部分:如何使用代理IP? 第四部分:如何充分利用代理IP? 总结: 前…...

StableDiffusion Windows本地部署

检查电脑环境 启动CMD命令窗。 如上图,在CMD窗口输入python命令,可查看本地安装的python版本信息等。输入exit()退出python命令行 执行where命令,可查看python安装目录。 必须安装Python3.10.x,因为stable-diffusion-webui的一…...

OpenCV学习(4.5) 图像的形态转换

1.目标 在本教程中: 我们将学习不同的形态操作,如腐蚀、膨胀、开、闭等。我们将看到不同的函数,如: cv.erode()**、 **cv.dilate()**、 **cv.morphologyEx() 等。 理论: 图像的形态转换是图像处理中的一个重要领域…...

MFC设置窗口在Z轴上的位置

函数原型: BOOL CWnd::SetWindowPos(const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags);返回值: 如果函数成功,则返回非零值;否则返回0。 参数: pWndInsertAfter:标识了在Z轴次…...

STM32项目分享:智能门禁锁系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.c…...

PostgreSQL中有没有类似Oracle的dba_objects系统视图

PostgreSQL中有没有类似Oracle的dba_objects系统视图 在PostgreSQL中,没有一个完全集成了所有对象信息的视图(类似于Oracle中的DBA_OBJECTS)。但是,PostgreSQL提供了一些系统目录表和视图,可以用来获取数据库对象的信…...

【kubernetes】探索k8s集群的配置资源(secret和configma)

目录 一、Secret 1.1Secret 有四种类型 1.2Pod 有 3 种方式来使用 secret 1.3应用场景:凭据 1.4创建 Secret 1.4.1用kubectl create secret命令创建Secret 1.4.2内容用 base64 编码,创建Secret 1.4.2.1Base64编码 1.4.2.2创建YAML文件 1.4.2.3…...

基于springboot实现社区养老服务系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现社区养老服务系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生,其可以帮助…...

用linux 1分钟部署一台文件上传/下载的http/https服务器

安装包官网:GitHub - codeskyblue/gohttpserver: The best HTTP Static File Server, write with golangvue 1、官网下载或本文章的资源链接下载gohttpserver; 2、将gohttpserver、cacert.pem、cakey.pem三个文件放在linux一个目录下 启动gohttpserver服…...

机器学习ML.NET

适用于 .NET 的机器学习 ML.NET 是用于 .NET 的跨平台开源机器学习 (ML) 框架。 ML.NET 允许开发人员在其 .NET 应用程序中轻松构建、训练、部署和使用自定义模型,而无需开发机器学习模型的专业知识或使用 Python 或 R 等其他编程语言的经验。该框架提供从文件和数据库加载…...

爬取基金收盘价并用pyecharts进行展现

爬取基金收盘价并用pyecharts进行展现 一、用到的第三方包 因为使用到了一些第三方的包,包还是比较大的如果直接从社区下载比较费劲,所以建议配置国内镜像源,这里以清华的镜像源为例。 pip config set global.index-url https://pypi.tuna…...

各平台对象存储

一、阿里云对象存储 官方文档:https://help.aliyun.com/zh/oss/getting-started/getting-started-with-oss?spma2c4g.11186623.0.0.299a646c6nWWcW 1.引入maven 官网:https://help.aliyun.com/zh/oss/developer-reference/java-installation?spma2c…...

C# 中提取方法进行重构

文章目录 1、什么是提取方法重构技术?2、提取方法重构 C# 代码示例3、提取方法重构技术的好处4、提取方法重构有用的场景5、总结 C# 中的提取方法重构技术 1、什么是提取方法重构技术? 重构代码是软件工程师的一项重要技能,因为它有助于提高…...

每天一个数据分析题(三百四十三)

同环比是帮助阅读者了解维度项表现水平有没有随着时间的推移而得以增长提升,以下对于同环比的说法正确的是? A. 同环比计算方法一般适用于对长周期业务行为结果的观测 B. 若产品具备季节属性特征,则应优先使用同比计算方法 C. 上期值一般指…...

【leetcode--统计优美子数组】

解题思路 一、滑动窗口 不断右移 right 指针来扩大滑动窗口,使其包含 k 个奇数; 若当前滑动窗口包含了 k 个奇数,则如下「计算当前窗口的优美子数组个数」: 统计第 1 个奇数左边的偶数个数 leftEvenCnt。 这 leftEvenCnt 个偶数…...

开源模型应用落地-LangChain高阶-LCEL-表达式语言(二)

一、前言 尽管现在的大语言模型已经非常强大,可以解决许多问题,但在处理复杂情况时,仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而,现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么? LCEL是一种非常灵活和强大的语言,可以帮助您更…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

数据库——redis

一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...

Redis上篇--知识点总结

Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...

深入解析 ReentrantLock:原理、公平锁与非公平锁的较量

ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...