写在前面
之前一直在忙期末,最近才歇了下来,来总结一下之前参加华为2018届勇敢星实习生笔试+面试(研发类)并顺利拿到offer的经历。
我是在微信上投的Android研发实习生岗,很快就收到通知,于3.24晚上参加的在线笔试。今年华为的实习生在线笔试是外包给牛客网来做的。
华为的研发笔试好像一直以来都是三道题,100+200+300一共600分。个人感觉,相比于其他互联网公司的笔试题,华为的题目难度还是和很简单的,都是些很基础的算法实现。博主花了一个小时候出头,全AC了。
笔试题
贴一下题目。当时因为想好会写博客,截了下题图。华为的笔试分了N多场,每场题都不一样,但大抵都是这个难度。
题1:整数翻转求和
这题有点小坑,输入的时候,两个数字之间有个英文逗号。一开始写的时候,死都过不了,折腾了好久。后来加了个逗号就过了。题目本身不难,贴上我的AC代码,用C写的:
int reverse(int x) {int a = 0;do {a = a * 10 + (x % 10);x /= 10;} while(x > 0);return a;}int reverseAdd(int a, int b) {if (a < 1 || a > 70000 || b < 1 || b > 70000) {return -1;}return reverse(a) + reverse(b);}#include "stdio.h"int main() {int a, b;scanf("%d,%d", &a, &b);printf("%d\n", reverseAdd(a, b));return 0;}
题2:掷骰子
这题思路也很简单,读到啥就转啥就行了。注意到,每一次翻转的时候,有两个方向的是不会变的,其他的四个方向也只是机械地进行交换。贴上AC代码,用Java写的:
import java.util.Scanner;public class Main {public static void main(String[] args) {Main pMain = new Main();pMain.input();}private void input() {Scanner in = new Scanner(System.in);while (in.hasNext()) {String x = in.nextLine();solve(x);}in.close();}private void solve(String x) {char[] a = x.toCharArray();int[] res = {0,1,2,3,4,5,6};for (int i=0; i<a.length; i++) {char swch = a[i];if (swch == 'L') {int temp = res[1];res[1] = res[5];res[5] = res[2];res[2] = res[6];res[6] = temp;} else if (swch == 'R') {int temp = res[1];res[1] = res[6];res[6] = res[2];res[2] = res[5];res[5] = temp;} else if (swch == 'B') {int temp = res[3];res[3] = res[6];res[6] = res[4];res[4] = res[5];res[5] = temp;} else if (swch == 'F') {int temp = res[3];res[3] = res[5];res[5] = res[4];res[4] = res[6];res[6] = temp;} else if (swch == 'A') {int temp = res[1];res[1] = res[4];res[4] = res[2];res[2] = res[3];res[3] = temp;} else if (swch == 'C') {int temp = res[1];res[1] = res[3];res[3] = res[2];res[2] = res[4];res[4] = temp;}}for (int i=1; i<=6; i++) {System.out.print(res[i]);}System.out.println("");}}
题3:当出差遇上大雾
这题思路也很简单,其实就是个DFS。不过想着容易,真正码完调试还是着实费了些功夫的,写的代码时候,细心很重要。贴上AC代码,用C写的:
#include <stdio.h>#include <stdlib.h>#include <string.h>const int inf = 0x7f7f7f7f;int d[50];int a[][7] = {{0},{0, 0, 2, 10, 5, 3, -1},{0, -1, 0, 12, -1, -1, 10},{0, -1, -1, 0, -1, 7, -1},{0, 2, -1, -1, 0, 2, -1},{0, 4, -1, -1, 1, 0, -1},{0, 3, -1, 1, 0, 2, 0},};int x, y;int res;int used[10];int ans = inf;int ansp;int ansd[50];void dfs(int now, int cost, int p) {if (now == x) {if (cost < ans) {ans = cost;for (int i = 0; i < p; i++) {ansd[i] = d[i];}ansp = p;}return;}for (int i = 1; i <= 6; i++) {if (i == y) {continue;}if (used[i] == 0 && a[now][i] >= 0) {used[i] = 1;d[p] = i;dfs(i, cost + a[now][i], p + 1);used[i] = 0;}}}int main() {static char emp[] = "";static char col[] = ", ";scanf("%d%d", &x, &y);if (x == 5) {printf("0\n[]\n");return 0;}if (y == 5) {printf("1000\n[]\n");return 0;}d[0] = 5;used[5] = 1;dfs(5, 0, 1);char *p = emp;if (ans == inf) {printf("1000\n[]\n");} else {printf("%d\n[", ans);for (int i = 0; i < ansp; i++) {printf("%s%d", p, ansd[i]);p = col;}printf("]\n");}}
面试经历
华为上合区都是由上研所那边负责的。合肥这边是上研的工作人员过来开了几次面试专场。我的面试场次是在4.9上午,4.7晚上收到的面试通知短信。
实习生的面试分为技术面+Boss面。一共两面。
技术面
华为的技术面和网上的说法大致吻合。大部分面试官都是会问项目经验的,当然也有小部分会问一些简单的基础。这个看运气。我当天一起面试的几位同学,大部分也都是被问的项目经验。
项目经验这种东西,不具有普适性。在此就不谈细节了。建议要参加面试的童鞋在面试前对自己简历上的项目的细节再回过一遍(特别是写在前面的项目),到时候把项目的来龙去脉讲清楚了,面试官是不会为难你的。
因为简历上的几个项目都准备得比较充分,我的技术面进行得很顺利。加上面试官是校友的缘故,当场就告知我通过了技术面,让我安心准备Boss面了。
Boss面
面试前,来叫我的小姐姐就很贴心地告知,这是最后一面,面试结束就可以离开了。Boss面前,Boss也告知了这一点。个人感觉这种提醒很不错哈,主动告知面试进程,不会让学生浪费时间在这儿白等。
面试我的Boss比较和蔼。上来就是让简单地自我介绍。Boss面的主要内容就是一些个人经历啊,职业规划,生活之类的。这些基本上只要你的价值观没有太大偏差都没问题。印象比较深刻的一个问题是,“请讲一讲你觉得你完成的很了不起(自豪)的事”。我就简单叙述了一下,高三安心刷题,最后逆袭,高考全校理科第二的故事。面试官当场就表示了赞赏。
之后,面试官发现我简历上有写在学校象棋社的任职和参加象棋比赛的经历。他应该也是个象棋迷,还和我聊了会胡荣华这些象棋界的名人。(所以啊,我觉得有个拿得出手的兴趣爱好还是很重要的,说不定什么时候就能帮你一把了呢~)
整个Boss面的过程也相当融洽,总时长大概十几分钟吧。
因为时间也比较久远了,大致就记得这些,后面想到的话再补充咯~
后续进展
因为笔试面试什么的都进行得很顺利,后面我也就比较放心了。面试通过–offer审核通过–入职时间确认的消息接踵而至。
最后贴一张offer图吧。希望本文能对有意向加入华为公司的求职者有所帮助~