首页 > 25届-Java面经-华为OD
头像
我是栗栗呀
编辑于 08-13 14:20 广东
+ 关注

25届-Java面经-华为OD

  • 个人情况:

我是南财的,非目标院校,机考要300分才能过,难度会比目标院校的大很多。

就我个人而言压力挺大的,毕竟300基本上可以说意味着200分的题必须至少是有思路能写出来一半多。然后为了求稳去刷难题,越刷越没自信,然后恶性循环。

一开始的话就是多刷,什么题都刷一下,多了解有哪些题型。我刷了一百来题后听朋友说她的hr栗栗姐很负责任,就加了hr栗栗姐的微信,先给了我一些题目说熟悉熟悉刷题,虽然之前已经刷了一些题了,但我想着再刷一下也行就把给的题刷完了。刷完后就去找栗栗姐要宁外的一份题库,跟着题库继续刷。其实还是要把心态放平,正常刷就行了,尽量多刷到不同类型的题就行,不要太大压力。真的遇到那种初见杀的题目就认了,没办法。 

  • 机考:

第一题:精准核酸检测

题目描述

为了达到新冠疫情精准防控的需要,为了避免全员核酸检测带来的浪费,需要精准圈定可能被感染的人群。现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是否存在轨迹交叉。

现在给定一组确诊人员编号(X1,X2,X3,..,Xn),在所有人当中,找出哪些人需要进行核酸检测,输出需要进行核酸检测的人数。(注意:确诊病例自身不需要再做核酸检测)

需要进行核酸检测的人,是病毒传播链条上的所有人员,即有可能通过确诊病例所能传播到的所有人。

例如:A是确诊病例,A和B有接触、B和C有接触、C和D有接触、D和E有接触,那么B\C\D\E都是需要进行核酸检测的人。 

输入描述

第一行为总人数N

第二行为确认病例人员编号(确诊病例人员数量<N),用逗号分割

第三行开始,为一个N*N的矩阵,表示每个人员之间是否有接触,0表示没有接触,1表示有接触。

备注

·人员编号从0开始 . 0<N <100

输出描述:

需要做核酸的人的总数 

用例

输入:

5

1,2

1,1,0,1,0

1,1,0,0,0

0,0,1,0,1

1,0,0,1,0

0,0,1,0,1

输出:

3

这题不是很难,当时马上就有思路写出来了,网上找到的答案用的是并查集,我当时写的时候用的是dfs的思路,一题会有多种思路的,所以不要太担心。

第二题:

题目描述 

服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为0~100的整数,给定一个数值(minAverageLost)表示某个时间段内平均失败率容忍值,即平均失败率小于等于minAverageLost,找出数组中最长时间段,如果未找到则直接返回NULL。

输入描述

输入有两行内容,第一行{minAverageLost},第二行为{数组},数组元素通过空格("“)分隔,minAverageLost 及数组中元素取值范围为0~100的整数,数组元素的个数不会超过100个。 

输出描述

找出平均值Q小于等于minAverageLost的最长时间段,输出数组下标对,格式{beginIndex}-{endlndx}(下标从 0开始),如果同时存在多个最长时间段,则输出多个下标对且下标对之间使用空格(”“)拼接,多个下标对按下标从小到大排序。 

示例1: 

输入:

1

0 1 2 3 4 

输出:

0-2 

示例2: 

输入:

2

0 0 100 2 2 99 0 2 

输出:

0-1 3-4 6-7 

这题当时写的时候怎么写通过率都不高,就先跳过了,去写200分的题了。尽量要多留点时间给200分的题。当时200分的题写完有个别用例时间复杂度超了,最后三题加起来290多分,当时急死了,后来一直研究怎么改这个第二题,终于多通过了一点用例,总分变成了三百多。在差一点分的时候就可以多试试在原基础上稍微加点东西,能多过一个用例都是分。后来考完回想起来才发现其实是题目理解错了,现在机考的题目有点难完全看懂表达的意思,要多注意。 

第三题(200分)

题目描述

周末小明准备去爬山锻炼,0代表平地,山的高度使用1到9来表示,小明每次爬山或下山高度只能相差k及k以内,每次只能上下左右一个方向上移动一格,小明从左上角(0,0)位置出发

输入描述

第一行输入mnk(空格分隔)。代表m*n的二维山地图,k为小明每次爬山或下山高度差的最大值Q。然后接下来输入山地图,一共m行n列,均以空格分隔。取值范围:

0< m ≤ 500  0<n≤500  0< k<5

输出描述

请问小明能爬到的最高峰多高,到该最高峰的最短步数,输出以空格分隔。同高度的山峰输出较短步数。如果没有可以爬的山峰,则高度和步数都返回0。 

备注

所有用例输入均为正确格式,且在取值范围内,考生不需要考虑不合法的输入格式。 

用例1:

输入:

5 4 1

0 1 2 0

1 0 0 0

1 0 1 2

1 3 1 0

0 0 0 9

输出:

2 2 

用例2: 

输入:

5 4 3

0 0 0 0

0 0 0 0

0 9 0 0

0 0 0 0

0 0 0 9 

输出:

0 0 

常规的bfs没什么好说的,能写出来基本的bfs基本上都能过80左右的用例,剩下的用例可能会超时,想通过的话就要想办法优化bfs。考完的话自己马上就能算出多少分了,然后就可以开始准备技术面了,重复率的话自己写的基本上没太大问题,如果是原题的话尽量不要原模原样,改个思路。 

  • 技术一面:

问答环节:

1、Java和C语言的区别

2、Java的特点

3、重载和重写的区别

4、接口和抽象类的区别

5、stringbuffer和stringbuilder的区别

6、jvm类加载器有几个

7、双亲委派模型

8、线程的生命周期

9、索引的原理

10、怎么进行数据库优化

11、聚簇索引和非聚簇索引的区别

12、Oracle和mysql的主要区别

13、Redis的两种机制,分别介绍优缺点、Redis怎么实现事务特性

14、主从复制是什么、缓存击穿,缓存穿透,缓存雪崩是什么

15、分别应该怎么处理、分布式是什么

16、springboot自动配置的原理、spring和springboot的区别

17、redis的集群是什么

18、hash索引和B+树索引的优缺点

19、为什么要使用线程池,你的项目中是否使用了线程池

20、Thread 和 Runnable 的区别、jdk的类加载器

手撕代码:

为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。

我们希望寻找到能除尽1至n的的每个数字的最小整数。

输入:输入一个整数n,(1<n<=100),测试包含组样例,读到文件末尾结束。

输出:输出求1至n的最小公倍数。 

写的时候用了BigInteger这个类,用了这个类就不太难。面试官问能不能不用BigInteger写,试了一下long,100的用例结果不对,应该是中间出现溢出了,不过面试官也说之前用BigInteger写出来也算写出来了,而且后面写的逻辑也没问题,可能是哪里有点小漏洞。手撕很重要,八股就算全对手撕没过可能也会挂。 

  • 技术二面:

问答环节:

1、怎么区分管理员和普通用户权限

2、如果用户在登录后改变登录信息(如改为管理员id)要怎么保证权限安全

3、项目中一般用到什么方法(查询用get,携带信息用post)

4、调试的时候怎么查看post中的数据

5、前端是自己写的吗

6、Java中的常用容器、线程不安全的容器要怎么解决线程安全问题

7、加锁的几种方式

8、lock和synchronized的区别

9、wait的几种用法,怎么知道wait有没有超时,怎么唤醒wait

10、了解hashmap的底层原理吗

11、红黑树是完全平衡树吗、平衡树的概念

12、hashmap在查询数据时的效率怎么样

13、插入时的效率怎么样

14、如果退化成红黑树,hashmap的查询和插入效率怎么样

14、Java中怎么实现堆

16、treeMap用过吗,它的底层原理是什么,效率怎么样

17、Java中实现堆的方式

18、怎么创建线程

19、用过线程池吗,你知道的线程池有几种

手撕代码:

编写一个IP检测类,包含两个方法:

        一个是addrule(ipfrom,ipto); ipfrom-ipto 表明了一个ip段范围;

        另一个方法是check(ip),返回此ip字段是否允许访问。如果不在列表中则返回false。

public interface Firewall{

    void addRule(String ipFrom,String ipTo);

    Boolean check(String ip);

}  

1, 所有ip字段不会相互重叠。

        2, 要求check时间复杂度尽量低。内存限制1G

        3, Rule <1000个

        4, addRule时间复杂度不要求。

        例子:

        Firewall f = new FirewallImpl();

        f.addRule("192.168.1.1","194.170.1.254");

        f.addRule("198.17.1.251","199.119.2.254");

        check("193.169.0.3"); //return true

        check("192.168.1.3"); //return true

        check("194.180.1.3"); //return false

关键是要尽可能降低check方法的时间复杂度,当时用的treeMap做的,没有什么太大的问题。面试官还会让你讲逻辑,能做出来的话逻辑肯定是可以讲明白的。

  • 心得建议:

正常准备就行,不要有太大的压力。其实贯穿整个过程的就是算法题,每天正常刷题,刷完总结就行。八股文在通过机考后再开始背也完全来得及。非常建议加一个专业HR了解好在投递,至少我加的栗栗姐在全过程对我帮助都挺大的,每个过程都给我发了资料攻略。至于hr面试和综合面试,这两个面试一般问题不大,有hr给的攻略看一下基本上都可以过。

全部评论

(0) 回帖
加载中...
话题 回帖

近期热帖

热门推荐