华为面经整理

文章目录

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

实习

第一面准备

提问相关

操作系统有哪些功能

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

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

相关文章

golang优雅代码【lock实现】

golang优雅代码【lock实现】 1.局部锁1.1 具体实现方式 本文代码风格来源参考 database/sql 包 1.局部锁 database/sql源码中使用 withLock(dc, func(){...}) 方法实现局部锁,完美利用了 golang 的 defer 关键字对 入参dc 进行加锁解锁,感觉实现很优雅…

基础概念解析:SOCKS5代理究竟是什么?SOCKS5代理ip使用场景有哪些?

在当今数字化时代,网络安全和隐私保护已成为我们日常生活中不可忽视的问题。随着网络攻击手段的日益复杂,如何安全地访问互联网资源成为了一个亟待解决的问题。SOCKS5代理作为一种先进的网络协议,为我们提供了解决这一问题的有效方案。 本文…

活动预热丨在 AGI Playground 2024 遇见一群 RTE+AI 的 Builders

6 月 22、23 日,北京。 AGI Playground 2024,这个夏日最火热的 AGI 盛会。 王小川、杨植麟等 AGI 创业者悉数参加。 RTE 开发者社区的 builders 和 RTE Open Day 也将在现场! 我们将为大家呈现两大板块: 01 实时开发挑战 Wor…

OpenCV-最小外接圆cv::minEnclosingCircle

作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 函数原型 void minEnclosingCircle(InputArray points, Point2f& center, float& radius); 参数说明 InputArray类型的…

input只允许输入数字

input只允许输入数字 <input id"phone" type"text" placeholder"输入手机号" maxlength"11" oninput"valuevalue.replace(/[^\d]/g,);if(value.length>11) valuevalue.slice(0,11)"/>input只允许输入字母和数字 …

从openstack环境中将服务器镜像导出的简单办法

1 登录openstack的页面&#xff0c;找到计划导出的主机信息。 通过实例名称&#xff0c; IP地址&#xff0c;找到对应的记录。点击实例名称&#xff0c;进入详情页。 在这里主要可以知道&#xff0c;当前主机在服务器上的文件ID&#xff0c;可以按这个ID去找对应的目录。 还可…

Nvidia Jetson/Orin/算能 +FPGA+AI大算力边缘计算盒子:无人机自主飞行软件平台

案例简介 所主导开发的 Generalized Autonomy Aviation System (GAAS) 是为无人机以及城市空中交通 (UAM, Urban Air Mobility) 所设计的开源无人机自主飞行框架。通过 SLAM、路径规划和 Global Optimization Graph 等功能为无人机提供在无 GPS 与外部通信情况下的自主飞行功…

Podman:Linux下的无守护进程容器引擎

Podman:Linux下的无守护进程容器引擎 一、背景 在容器化技术日益盛行的今天,Docker 无疑是其中的佼佼者。然而,今天我们要介绍的 Podman,同样是一款强大的容器引擎,它不仅与 Docker 有着高度的兼容性,更在安全性与易用性上有着独特的优势。 Podman 是一款基于 Linux 操作…

【经典设计】构建业务架构的3大视图

在软件设计过程中&#xff0c;架构设计、功能设计和数据设计是三个不同层次的设计工作。而业务架构是系统整体规划中重要的基础工作&#xff0c;通常用业务架构图来表达业务架构。 业务架构定义了企业的治理结构、业务能力、业务流程、业务数据。业务能力说明企业做什么&#x…

想不到,AI爆发的趋势下,我会这么快被AI替代...

大家好&#xff0c;我是向阳 AI横空出世后&#xff0c;不少行业受到了冲击。第一批因AI失业的人&#xff0c;也已经出现了&#xff01; 他们是游戏设计师、原画设计师、服装设计师……社交媒体上&#xff0c;不断能看到这样的新闻&#xff1a;引入AI后&#xff0c;某游戏公司…

<microros> 如何自定义uROS2数据类型

如何自定义数据类型 在microros中&#xff0c;我们可以看到&#xff0c;官方给我们提供了很多数据类型。 如果我们在实际使用的时候&#xff0c;这些类型无法满足我们的传输要求怎么办呢&#xff1f; 官方也提供了自定义数据类型的办法。 参考&#xff1a; https://github…

【活动通知 — 线上 Meetup】:ES|QL 及 B 站 Elasticsearch 平台实践 - 6 月 19 日

会议时间 2024年6月19日 19:00 — 21:00 参与方式 线上直播&#xff1a;Elastic 中国社区官方博客&#xff0c;elasticstack B 站号。链接请参考下面的报名地址。 活动议程 19:00-19:50 主题演讲&#xff1a;Elasticsearch 简单而高效的管道查询语言 - ES|QL 讲师&#xff…

想要提升地推效果吗?试试Xinstall数据查看功能,让您事半功倍!

在如今竞争激烈的移动互联网时代&#xff0c;地推作为一种直接有效的推广方式&#xff0c;受到了越来越多企业和品牌的青睐。然而&#xff0c;地推过程中产生的数据如何高效地收集、整理和分析&#xff0c;成为了摆在推广者面前的一大难题。Xinstall作为一款专业的App推广工具&…

AWS S3存储桶中如何下载文件

AWS S3存储桶中如何下载文件 1.单个下载 AWS S3 控制台提供了下载单个文件的功能&#xff0c;但是不支持直接在控制台中进行批量下载文件。您可以通过以下步骤在 AWS S3 控制台上下载单个文件&#xff1a;   1.1登录 AWS 管理控制台。   1.2转到 S3 服务页面。   1.3单击…

将web项目打包成electron桌面端教程(二)vue3+vite+ts

说明&#xff1a;我用的demo项目是vue3vitets&#xff0c;如果是vue2/cli就不用往下看啦&#xff0c;建议找找其他教程哦~下依赖npm下载不下来的&#xff0c;基本换成cnpm/pnpm/yarn就可以了 一、项目准备 1、自己新创建一个&#xff0c;这里就不过多赘述了 2、将需要打包成…

MyBatis总结(2)- MyBatis实现原理(二)

核心配置 Mybatis-config.xml&#xff08;基础配置&#xff09; 作用 Mybatis-config.xml实现&#xff1a; 这在前面说过&#xff0c;加载解析都是在Configuration对象被创建时发生&#xff1a; org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration&#x…

docker构建java项目镜像

资料参考 参考自黑马教程&#xff1a;10.Docker基础-自定义镜像_哔哩哔哩_bilibili 初步准备 打包好java项目jar包&#xff0c;和Dockerfile文件一起放到指定目录下&#xff0c;后续操作都是在该目录下操作&#xff0c; 我这边是&#xff1a;/usr/local/src/train-ticket/ …

栈 数组和链表实现

stack 栈 LIFO后进先出 应用 实现递归 编辑器的撤回工作&#xff08;按下ctrl z&#xff09; 数组实现 // 列表的插入和删除从一端实现 那么就得到了栈 // array和linked lists//stack-Array based implementation #include<stdio.h> #include<stdlib.h> #def…

【git】TortoiseGitPlink Fatal Error 解决方法

背景 使用 TortoiseGit报错&#xff1a; TortoiseGitPlink Fatal Error No supported authentication methods available (server sent: publickey) 解决方法 1、有很多是重置git的秘钥解决的 2、重置ssh工具

AI-知识库搭建(一)腾讯云向量数据库使用

一、AI知识库 将已知的问答知识&#xff0c;问题和答案转变成向量存储在向量数据库&#xff0c;在查找答案时&#xff0c;输入问题&#xff0c;将问题向量化&#xff0c;匹配向量库的问题&#xff0c;将向量相似度最高的问题筛选出来&#xff0c;将答案提交。 二、腾讯云向量数…