Bootstrap

2020华为面试准备--软件开发--算法

华为IT产品线软开:

https://www.nowcoder.com/discuss/250303?type=2

一面:
了解红黑树吗?,,
二叉查找树
二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
任意节点的左、右子树也分别为二叉查找树。
没有键值相等的节点(no duplicate nodes)。

哈希表和红黑树有关系吗,,
Hash,也可以称为“散列”,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出(也就是多对一的关系)。

Hash与Map的区别,,
权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性,有序性。
总体来说,hash查找速度会比RB树快,而且查找速度基本和数据量大小无关,属于常数级别;而RB树的查找速度是log(n)级别。并不一定常数就比log(n) 小,因为hash还有hash函数的耗时。当元素达到一定数量级时,考虑hash。但若你对内存使用特别严格, 希望程序尽可能少消耗内存,那么hash可能会让你陷入尴尬,特别是当你的hash对象特别多时,你就更无法控制了,而且 hash的构造速度较慢。
————————————————
版权声明:本文为CSDN博主「ljlstart」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ljlstart/article/details/51335687

0/1背包算法思路说一下,,

有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:tab[i][j] = max(tab[i-1][j-weight[i]]+value[i],tab[i-1][j]) ({i,j|0<i<=n,0<=j<=total})
————————————————

动态规划可能会有什么不足,,
动态规划模型相对于静态规划模型的优点:

  1. 能够得到全局最优解;
  2. 可以得到一族最优解;
  3. 由于动态规划方法反映了动态过程演变的联系和特征,在计算时可以利用实际知识和经验提高求解效率。
    动态规划模型的缺点:
  4. 没有统一的标准模型;
  5. 数值方法求解时存在维数灾

贪婪算法存在什么问题,,
该算法存在问题:

  1. 不能保证求得的最后解是最佳的;

  2. 不能用来求最大或最小解问题;

  3. 只能求满足某些约束条件的可行解的范围。

实现该算法的过程:

从问题的某一初始解出发;

while 能朝给定总目标前进一步 do

求出可行解的一个解元素;

由所有解元素组合成问题的一个可行解
————————————————

原文链接:https://blog.csdn.net/effective_coder/article/details/8736718

如何评价一个算法,,
时间复杂度:一般通过语句执行次数与输入规模之间的关系来比较。
空间复杂度:通过使用额外的内存空间来比较。

递归和迭代的优点和不足,,
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.

迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

所谓递归,简而言之就是应用程序自身调用自身,以实现层次数据结构的查询和访问。递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。

而迭代虽然效率高,运行时间只因循环次数增加而增加,没什么额外开销,空间上也没有什么增加,但缺点就是不容易理解,编写复杂问题时困难。
在这里插入图片描述

归并排序的好处与弊端,,
归并排序是一种非就地排序,将需要与待排序序列一样多的辅助空间。在使用它对两个己有序的序列归并,将有无比的优势。其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlog2n)。对数据的有序性不敏感。若数据节点数据量大,那将不适合。但可改造成索引操作,效果将非常出色。

UDP的应用,,
在这里插入图片描述

二面:
队列的具体的应用,举例,,
杨辉三角形的特点是两腰都是数字1,其他位置是其上一行中与之相岭的两个整数之和。
键盘输入循环缓冲区问题。
在操作系统中,循环队列经常用于实时应用程序。
树具体有什么用,,
https://www.zhihu.com/question/20176446
平衡二叉树,排行榜
大数据,大文件,树可以降低算法复杂度。
文件系统的目录结构。

树有哪些遍历,有什么区别,,
先序,后序,中序针对二叉树。
深度、广度针对普通树。

在Linux下简单编写、编译并执行一个C语言程序,,

二叉树的层次遍历,,

上海无线部门的软开

https://www.nowcoder.com/discuss/249864?type=2
一面:

笔试题思路,,

二分查找,递归和循环版
https://blog.csdn.net/wo850781645/article/details/81323851

二面:
二叉树结点的最大值,
二叉树第k大的结点值,

华为 山东面经,数据通信产品线–软开

https://www.nowcoder.com/discuss/253459?type=post&order=time&pos=&page=0
一面 自我介绍 45分钟
手撕 二叉树高度,,

操作系统死锁,,

计算机网络分层 七层模型,TCP,流量控制,,

数据结构 无向图,bfs dfs,,

二面 45 分钟
自我介绍,,

手撕字符串处理 简单,,

三面 45分钟
自我介绍

华为网安面经

链接:https://www.nowcoder.com/discuss/253396?type=post&order=time&pos=&page=0
一面1小时:
2 画出TCP/IP模型,然后问了一下哪一层有什么协议,TCP,UDP区别,,

3 知道的Linux网络配置命令有哪些,,

5数字证书,数字签名,,

6实践过程中什么时候会用到mysql数据库

7手撕代码来了 让撕了一个字符串中找字串的题目

二面1小时
1.ARP欺骗原理,项目是怎么做的
2数据从主机A到主机B的封装过程
3wireshark怎么用,怎么分析数据包,看到的是明文还是密文
4数字签名作用
5介绍密码学
6TCP三次握手,DOS攻击
7IPsec原理应用(这个没答出来,就记着个隧道啥的,面试官人很好给我解释了一遍)
8手撕代码又来了?让完整写了一个类似于输出九九乘法表的程序

三面1小时
1上来直接让讲论文,真的是怼的比一面还详细!!一边怼我还一边在电脑上查答案…
2机考题复盘了后两道,最后一题改编了一下继续问思路
3打开性格测评开始问性格,爱好,抗压能力
4对华为的了解看法之类的

华为面经

链接:https://www.nowcoder.com/discuss/253790?type=all&order=time&pos=&page=1

一面:代码复盘,由于ac了三道,每道题都让讲思考过程,为啥要这么写。然后出了一道leetcode原题分糖果,5分钟写完,聊会项目,结束。

二面:聊项目,问基础,进程线程,链表插入复杂度等等,然后手撕一道leetcode原题,和等于k的最长子序列,10分钟写完,结束。

三面:上来撕了个简单的题,挑一个最满意的项目讲讲,再讲讲其他的项目,然后问兴趣爱好,有没有受过挫折,遇到挫折怎么处理,平时会悲观吗,脾气怎么样,能不能接受加班,对工作地点有要求吗,自己最大的优点是什么,最大的缺点是什么。

;