华为OD-- java面经【超详细版】--待入职终端BG

背景:双非一本,23届无经验,机考390

时间线:3月7日在牛客上联系的可乐姐,准备了一周左右。3月13日机考,3月14日性格测试, 3月15日资格面试,3月21日专业一面,3月25日专业二面,3月30日主管面试,4月12日offer【可乐姐辣评:终端审批正常速度】。

机试:

我的准备流程:在2023年12月24日考完408后就感觉要寄,遂决定找个工作。当时在网上看到了华为OD招聘,想着来试一下,在C站买了一份C卷题库,但因为太拖沓以及帕鲁成瘾,2月末才开始看题库(PS:C站上的题库良莠不齐,有的题解都是在网上抄的,有的代码甚至无法运行,还是选择一份口碑较好的题库,因为踩雷了所以无法推荐,而且找可乐姐预约机试,她也会发一份题库给你的,如果是基础好的同学就不需要去C站花冤枉钱啦。如果是有足够时间准备的同学建议还是看看AcWing的算法基础课,系统地学习一下)。我大概看完了全部的200分的题和一半左右100分的题后进行的机试,建议大家准备差不多就抓紧考吧,不然等到准备充分了有可能都换D、E、F...卷了

第一道题:英文输入法(100分)题目如下:

主管期望你来实现英文输入法单词联想功能,需求如下:依据用户输入的单词前缀,从已输入的英文语句中联想出用户想输入的单词,按字典序输出联想到的单词序列,如果联想不到,请输出用户输入的单词前缀。注意:1.英文单词联想时,区分大小写;2.缩略形式如“don’t”,判定为两个单词,“don”和t”;3.输出的单词序列,不能有重复单词,且只能是英文单词,不能有标点符号。思路:将输入的英文语句分词存放在字符串数组当中,遍历字符数组,用startsWith方法判断该分词前缀是否为用户给定前缀,保存在HashSet中(去重复),如果HashSet中元素个数为0则输出用户给定前缀,否则将HashSet中元素添加到ArrayList中,并用Collections.sort方法进行排序,最后输出。代码:public class q1 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String line = in.nextLine();String[] words = line.split("[^a-zA-Z]");String pre = in.nextLine();List<String> ans = new ArrayList<>();HashSet<String> se = new HashSet<>();for (String word : words) {if (word.startsWith(pre)) se.add(word);}if (se.size() == 0) System.out.print(pre);else {for (String x : se) ans.add(x);Collections.sort(ans);System.out.print(ans.get(0));for (int i = 1; i < ans.size(); i++) {System.out.print(" " + ans.get(i));}}}}

第二道题:机场航班调度程序(100分)题目如下:XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385, CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。但是XX市机场只有一条起飞用跑道,调度人员需要安排目前停留在机场的航班有序起飞。为保障航班的有序起飞,调度员首先按照航空公司的缩写后4个数字进行排序最终获得安排好的航班的起飞顺序。请编写一段代码根据输入的航班号信息帮助调度员输出航班的起飞顺序。说明:1、航空公司缩写排序按照从特殊符号$&*,0~9,A~Z排序;思路:按照题目要求自定义排序规则。代码:public class q2 {static class node {String num;String numb;

    node(String n, String b) {
        this.num = n;
        this.numb = b;
    }
}

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String[] s = in.nextLine().split(",");
    int n = s.length;
    node[] a = new node[n];
    for (int i = 0; i < n; i++) {
        String num = s[i].substring(0, 2);
        String numb = s[i].substring(2);
        a[i] = new node(num, numb);
    }
    Arrays.sort(a, (x, y) -> {
        if (x.num.compareTo(y.num) != 0) return x.num.compareTo(y.num);
        return Integer.parseInt(x.numb) - Integer.parseInt(y.numb);
    });
    System.out.print(a[0].num + a[0].numb);
    for (int i = 1; i < n; i++) {
        System.out.print("," + a[i].num + a[i].numb);
    }
}

}

第三道题:解密犯罪时间(200分)题目如下:警察在侦破一个案件时,得到了线人给出的可能犯罪时间,形如“HH:MM”表示的时刻。根据警察和线人的约定,为了隐蔽,该时间是修改过的,解密规则为:利用当前出现过的数字,构造下一个距离当前时间最近的时刻,则该时间为可能的犯罪时间。每个出现数字都可以被无限次便用。思路:将给定时间的每一位x单独取出,创建cnt数组,cnt[x - '0']++。进行两次循环模拟,第一次循环是寻找与给定时间同一天的符合条件的时间(大于给定时间),第一次循环是寻找给定时间后一天的符合条件的时间(小于给定时间)。代码:public class q3 {public static void main(String[] args) {Scanner in = new Scanner(System.in);String ss = in.next();char[] str = ss.toCharArray();int s = ((str[0] - '0') * 10 + (str[1] - '0')) * 60 + ((str[3] - '0') * 10 +(str[4] - '0'));int[] cnt = new int[10];for (char x : str) if (x != ':') cnt[x - '0']++;for (int h1 = 0; h1 <= 2; h1++) {for (int h2 = 0; h2 <= 9; h2++) {if (h1 == 2 && h2 >= 4) continue;for (int m1 = 0; m1 <= 6; m1++) {for (int m2 = 0; m2 <= 9; m2++) {if (m1 == 6) continue;if (cnt[h1] > 0 && cnt[h2] > 0 && cnt[m1] > 0 && cnt[m2] > 0) {int now = (h1 * 10 + h2) * 60 + m1 * 10 + m2;if (now > s) {System.out.print(h1 + h2 + ":" + m1 + m2);return;}}}}}}for (int h1 = 0; h1 <= 2; h1++) {for (int h2 = 0; h2 <= 9; h2++) {if (h1 == 2 && h2 >= 4) continue;for (int m1 = 0; m1 <= 6; m1++) {for (int m2 = 0; m2 <= 9; m2++) {if (m1 == 6) continue;if (cnt[h1] > 0 && cnt[h2] > 0 && cnt[m1] > 0 && cnt[m2] > 0) {int now = (h1 * 10 + h2) * 60 + m1 * 10 + m2;if (now < s) {System.out.print(h1 + h2 + ":" + m1 + m2);return;}}}}}}System.out.print(ss);}}

在完成机试和心理测试(建议去知乎找一下攻略)后,可乐姐会问你要个人资料,找一个流程比较快的部门,之后部门会打电话过来介绍一下部门情况,可乐姐也会提前说一些部门的注意事项,问清楚进去后是不是做开发之类的。等到对部门有了解后可乐姐会问你是否要面该部门,这点yyds,总比还不清楚部门是干什么的就把信息锁了要强一万倍!【可乐姐:谢谢夸奖哈哈哈哈

资格面试(约30min):我的资格面试感觉非常nice,面试的HR是一位小姐姐。开局也没让我自我介绍,就像聊家常似地问了几个问题,然后就结束了。(我就把大概问的问题简单描述一下吧,时间有点久了)

1.我看你之前在考研,考的哪所学校?

2.家是哪里的?为什么要来西安?

3.父母是做什么的?家里有几个孩子?

4.对加班的看法。

5.期望薪资。

6.问了一下简历里的几个奖项都是做的什么。最后反问华为试用期可信考试要达到什么等级才能通过。

资格面后第二周的周一出的结果(我的每轮面试都是周五晚上,所以反馈都是在下一周的周一QAQ)。之后约的技术面试,要提前下载好WeMeeting,调试好摄像头、耳机、麦克风。

技术一面(1h):开局自我介绍,然后面试官可能会对项目内容进行拷打或者选择询问八股文内容。

1.Java 中的几种基本数据类型了解么?

2.Java开发用过哪几种集合?

3.left join和right join的区别。

4.MyBatis中#{ } 和 ${ } 的区别是什么?

5.了解哪些设计模式?介绍一下单例模式。

6.介绍一下SSM。

7.如何优化一条慢SQL?后来面试官可能感觉我好多技术都是处于学习阶段,没有实战经验也就没有深问,就直接进入手撕代码阶段了。

手撕代码:七进制数(力扣504)题目描述:给定一个整数 num,将其转化为 7 进制,并以字符串形式输出。思路:创建boolean类型变量flag用来存放输入数字的正负。如果输入num为负数将num变为正数,然后每次将num%7 填到空字符串前,然后 num/=7,最后如果flag为true,将负号填到字符串前。代码:public static String convert(int n) {boolean flag = n < 0;if (flag) n = -n;String out = "";do {out = n % 7 + out;n /= 7;} while (n != 0);return flag ? "-" + out : out;}

技术二面(1h):开局依旧是自我介绍,然后面试官对我简历里的项目进行了拷打。

1.项目里用到了redis,说一下用来做什么。还知道redis那些应用场景。

2.了解哪几种JVM,讲一种熟悉的。

3.深拷贝和浅拷贝的区别。

4.Spring Boot自动装配的原理。

5.讲一下项目里rabbitMQ怎么用的,还在其他的场景下用过消息队列吗?

6.Hystrix是做什么的,在你的项目里怎么应用的。

手撕代码:题目描述:实现一个优先级队列:优先级高的,先出队列;相同优先级的,先入先出;in(a,1)表示产生一条数据,值为a,优先级为1。比如:按如下顺序产生数据:in(a,1)、in(d,3)、in(e,1)、in(f,2),则获取数据的顺序为:(d,3)、(f,2)、(a,1)、(e,1)。思路:自定义排序规则。代码:class Entry {String value;int priority;long sequenceNumber;

public Entry(String value, int priority, long sequenceNumber) {
    this.value = value;
    this.priority = priority;
    this.sequenceNumber = sequenceNumber;
}

}class PriorityComparator implements Comparator<Entry> {public int compare(Entry e1, Entry e2) {if(e1.priority != e2.priority) return Integer.compare(e2.priority, e1.priority);return Long.compare(e1.sequenceNumber, e2.sequenceNumber);}}public class Main {static PriorityQueue<Entry> queue = new PriorityQueue<>(new PriorityComparator());static long seqNumber = 0;static void push(String value, int priority) {queue.offer(new Entry(value, priority , seqNumber++));}static Entry get() {return queue.poll();}public static void main(String[] args) {push("a", 1);push("d", 3);push("e", 1);push("f", 2);while(!queue.isEmpty()) {Entry now = get();System.out.println(now.value+ "," + now.priority );}

}

}

主管面 :问的问题和HR面差不多,没遇到网上说的压力面。面完后很快就出结果了,因为是周六,所以可乐姐说周一再提交审批。之后便进入了漫长的审批等待环节。可乐姐也很负责,主动跟进审批进度,要不是上传了两张身份证反面照片估计审批还能再快一天。

--------------------------------------【以下:可乐姐啰嗦一下】------------------------------------

1、以往面经【含:C/C++,python,java】请点击可乐姐主页~

2、划重点!!!【目前终端BG部分部门还是通畅的,院校不太自信的朋友们可以私聊我看符不符合要求再考虑要不要准备笔试~~平时就习惯刷题的朋友们可以直接冲笔试,越快越好!!没基础的就先好好刷题】

3、22届,23届考研党还可以投递!!需求还是很大!!可乐姐会提供笔试资料,以及每个面试阶段的准备技巧~~24届的朋友如果想先了解,可以私聊我

#java##C++##华为od##python##23届的你们都什么时候入职?#
全部评论
这个同学的岗位是哪个城市、哪个部门的?
点赞 回复
分享
发布于 04-17 21:58 陕西
同双非,同终端,为什么我审批了40天,hr说在二层审批
点赞 回复
分享
发布于 04-22 17:37 安徽
滴滴
校招火热招聘中
官网直投
您好,我是26号进池的那批,同终端BG不过是实习,请问需要多久出结果呢
点赞 回复
分享
发布于 04-27 14:28 江苏
你好,请问能发一下题库吗?不知道难易,有点儿没底
点赞 回复
分享
发布于 04-27 20:49 上海

相关推荐

9 22 评论
分享
牛客网
牛客企业服务