华为Java社招面试经历详解【已拿到offer】
华为Java社招面试(已拿到offer)
之前8月底华为cloudsop部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给华为hr,人事审核后经过一些列面试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本人手里还有其他的一些offer,还没有定下来,顺便在此分享一下我面试华为的一些经历。
华为作为通讯行业的龙头,还是非常看中学历的,楼主可能正卡在了不是特别优秀的一类985、211院校,导致最终定级不是特别理想,但总的来说华为的面试不是很难,主要分为电话技术面、机试、技术综合面、hr综面。
1.电话技术面试
主要问了我最近的项目,中间也有少部分底层框架的原理,大概四十分钟。
1.MyBastis如何映射,MyBatis原理。 2.如何实现高可用的,你的系统怎么达到高可用的? 3.redis底层实现,redis是如何更新缓存的? 4.集合框架有哪些是线程安全的?哪些是非安全的? 5.开发中你们如何进行单元测试?覆盖率如何?自动化测试怎么达到? 6.SpringMvc执行流程,java常用设计模式。 7.eureka怎么保证可用性,及底其层实现,与zookeeper有什么区别? 8.高并发相关的问题,concurrent相关包。 9.为什么使用redis做缓存而不是其他的消息队列入kafka,以及项目的稳定性。 10.事务一定会锁表吗? 11.java并发和线程同步,同步机制,锁具体解释一下。 12.redis集群搭建,分词算法、redis主从同步机制。 13.常用的线程池,threadlocal有什么用,多线程并发解决办法。
2.技术综合面试
现场面试,正赶上华为本月最后一个周末加班,约在了早上10点,到现场后发现有很多人都来面试,等了差不多40分钟,去到一间有很多面试官的房间,一人一张桌子,面前立着一把椅子,像是流水面试。这个技术馆看着差不多三十几岁,头发花白,说话相当快,像在赶时间,中间没有再问我技术框架上的内容,一直围绕我的项目讨论,让我手绘我的项目交互图,相关表设计,用到的算法,当时是怎么考虑的,主要还是高可用,高性能方面问的比较多。
3. HR面试
接着技术面试完,出来等了差不多10分钟,就又进到刚才的房间,去到另一张桌子的hr面前,面我的hr看着比刚刚的技术官还要老成,据他自己说自己做了十几年的hr,(头发…显然是没什么头发了,难道hr也要加班到凌晨?)中间无非就是各种背景调查,为了开出适宜的薪资包,我还是将目前的薪资状况跟他和盘托出了,(没办法这是个老鸟啊!)华为的年终奖和考评直接挂钩,所以一定要注意你最近在上一家公司的评级,还有hr面试过程中的问题,都不是空穴来风,他都有做标记,所以一定要诚实,切勿包装的离谱,谈offer的话,可能是我之前面试的还算不错,hr还是相当的爽快的,我要的薪水也是和最终的差不太多。
4.准备材料
hr在最终定薪需要提供,最近三个月的工资流水/截图,毕业证、学位证、四六级证书照片、身份证正反面照片,这是一般公司都要的吧。
5.网上填写个人资料
接着就是登录hr给你邮件发的连接,登录进去填写一堆的个人信息, 包括学历,工作经历,项目经验,华为亲属信息,这个类似一份华为版的简历。
6.机试题
这一通过后,还要做一份华为社招的机试题,出自牛客华为社招的题库,题目难易程度据网上的人说,有难有易,基本上都是一些字符串,集合比较基础的算法的题,做之前可以再牛客上面先练一下。
下面分享一下本人在机试种遇到的。
import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Scanner; /** * 五张牌,每张牌由牌大小和花色组成,牌大小2~10、J、Q、K、A,牌花色为红桃、黑桃、梅花、方块四种花色之一。 判断牌型: * 牌型1,同花顺:同一花色的顺子,如红桃2红桃3红桃4红桃5红桃6。 * 牌型2,四条:四张相同数字 + 单张,如红桃A黑桃A梅花A方块A + 黑桃K。 * 牌型3,葫芦:三张相同数字 + 一对,如红桃5黑桃5梅花5 + 方块9梅花9。 * 牌型4,同花:同一花色,如方块3方块7方块10方块J方块Q。 * 牌型5,顺子:花色不一样的顺子,如红桃2黑桃3红桃4红桃5方块6。 * 牌型6,三条:三张相同 + 两张单。 * 牌型7,其他。 * 说明: * 1)五张牌里不会出现牌大小和花色完全相同的牌。 * 2)前面的牌型比后面的牌型大,如同花顺比四条大,依次类推。 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<String> list = new ArrayList<>(); while (sc.hasNextLine()) { String s = sc.nextLine(); list.add(s); if (list.size() == 5) { int type = getCardType(list); System.out.println(type); list.clear(); } } } private static int getCardType(ArrayList<String> list) { int size = list.size(); ArrayList<String> numList = new ArrayList<>(); HashSet<String> numSet = new HashSet<>(); ArrayList<String> colorLsit = new ArrayList<>(); HashSet<String> colorSet = new HashSet<>(); for (int i = 0; i < list.size(); i++) { String num = list.get(i).split(" ")[0]; String color = list.get(i).split(" ")[1]; if (num.equals("J")) { numList.add("11"); numSet.add("11"); } else if (num.equals("Q")) { numList.add("12"); numSet.add("12"); } else if (num.equals("K")) { numList.add("13"); numSet.add("13"); } else if (num.equals("A")) { numList.add("14"); numSet.add("14"); } else { numList.add(num); numSet.add(num); } colorLsit.add(color); colorSet.add(color); } int temp = 7; //同花顺或者同花 if (colorSet.size() == 1) { Collections.sort(numList); for (int i = 0; i < numList.size() - 1; i++) { if (Integer.parseInt(numList.get(i + 1)) - 1 == Integer.parseInt(numList.get(i))) { if (i == numList.size() - 2) { temp = 1; } continue; } else { if (temp > 4) { temp = 4; } } } } //四条或葫芦 if (numSet.size() == 2) { Collections.sort(numList); if (numList.get(0) != numList.get(1) || numList.get(numList.size() - 1) != numList.get(numList.size() - 2)) { if (temp > 2) { temp = 2; } } else { if (temp > 3) { temp = 3; } } } //三条 if (numSet.size() == 3) { if (temp > 6) { temp = 6; } } //顺子 if (colorSet.size() > 1) { Collections.sort(numList); for (int i = 0; i < numList.size() - 1; i++) { if (Integer.parseInt(numList.get(i + 1)) - 1 == Integer.parseInt(numList.get(i))) { if (i == numList.size() - 2) { temp = 5; } continue; } else { break; } } } return temp; } }
下面是我从其他朋友笔试中搜集到的,希望有帮助
题目一
package com.hw.loy; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * 给定一个正整数,给出消除重复数字以后最大的整数 * 输入描述: * 正整数,注意考虑长整数 * 输出描述: * 消除重复数字以后的最大整数 * 示例1 * 输入 * 423234 * 输出 * 432 */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String sc = scanner.next(); List list = new ArrayList(); for (int i = 0; i < sc.length(); i++) { list.add(sc.charAt(i)); } for (int i = 0; i < list.size(); i++) { for (int j = 0; j < i; j++) { if (list.get(i).equals(list.get(j))) { if (Integer.valueOf(list.get(j + 1).toString()) > Integer.valueOf(list.get(j).toString())) { list.remove(j); i--; break; } else { list.remove(i); i--; break; } } } } for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)); } System.out.println(); } }
题目二
package com.hw.tiku; import java.util.Scanner; /** * 骰子有6个面,现在用1,2,3,4,5,6分别代表一个骰子的左,右,前,后,上,下的初始位置, * 用R代表向右滚动一次,用L代表向左滚动一次,可以向前翻转(用F表示向前翻转1次), * 可以向后翻转(用B表示向右翻转1次),可以逆时针旋转(用A表示逆时针旋转90度), * 可以顺时针旋转(用C表示逆时针旋转90度),现从初始状态开始,根据输入的动作序列,计算得到最终的状态。 输入描述: 初始状态为:123456 输入只包含LRFBAC的字母序列,最大长度为50,可重复 输出描述:输出最终状态 输入例子:RA 输出例子:436512 * @author loy * @desc * @date 2018/8/29 */ public class ShaiZi { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String [] str_array = {"1","2","3","4","5","6"}; String s = scan.nextLine(); String [] s1 = s.split(""); int len = s.length(); for(int i = 0 ; i< s1.length;i++) { String ss = s1[i]; rv(str_array,ss); } int t = 0; for( int i = 0; i <str_array.length;i++) { t = t*10 +Integer.valueOf(str_array[i]); } System.out.println(t); } static void rv(String [] str_array,String s) { switch(s) { case "L": change(str_array,0,5); change(str_array,1,4); change(str_array,0,1); break; case "R": change(str_array,0,4); change(str_array,1,5); change(str_array,0,1); break; case "F": change(str_array,2,5); change(str_array,3,4); change(str_array,2,3); break; case "B": change(str_array,2,4); change(str_array,3,5); change(str_array,2,3); break; case "A": change(str_array,0,2); change(str_array,1,3); change(str_array,0,1); break; case "C": change(str_array,0,3); change(str_array,1,2); change(str_array,0,1); break; default: break; } } static void change(String [] str_array,int a,int b) { String temp = str_array[a]; str_array[a] = str_array[b]; str_array[b] = temp; } }
7.定薪定级
机试过后华为人力资源会对你之前的表现和你提供的薪资包,给你定你的职级和薪资,之后会按照这个职级和薪资以及你提供的材料提交上报,等待领导确认,期间快的话2周,慢的话网上有的也有一个月甚至更久的,所以中途要耐心等待,先别急着辞职,因为华为的入职流程同样很久,需要先预约东莞的医院体检,和报道日期等。
8.offer发放
本人差不多等了也有一个月左右,中途因为职级和薪资定的略高了一些,被驳回过一次,后面又重新定了一次级上报后才成功拿到offer,华为的薪资主要分为两部分,当月薪资 = 基本工资+绩效工资,试用期都是6个月,貌似不打折,年终奖嘛,这个是动态的,需要看部门效益和个人来年的考核评定,评级为A为四个月,当然这个是相当难的,几乎不太可能,评级为B是两个月,多数情况是B,C的话不用我说了吧,三年内没有nzj,不能涨工资,参与定级。。
华为是个非常伟大的公司,但也相当压抑,像一座围城,里面的人想着出来,外面的人拼了命往里冲,正因为其加班文化,432薪酬规则,致使它成为行业领先,不论你是否认同其企业文化,最终它一定能给到你想要的回报。
注意:华为目前研发体系好像都搬去东莞松山湖华为基地,环境相当不错,深圳居住的话,早晚也有接驳车。
相关文章
- 这篇文章主要介绍了华为笔试算法面试题与参考答案,结合实例形式分析了基于C++的字符串转换、判断、排序等算法相关操作技巧,需要的朋友可以参考下2019-09-05
- 这篇文章主要介绍了华为16道经典面试题与参考思路,总结分析了华为面试中遇到的经典问题,并提供了相应的解答思路供读者参考,需要的朋友可以参考下2019-08-01
- 这篇文章主要介绍了据说华为的一道Java面试题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-07-29
- 面试者选择一种编程语言,两轮面试,每轮约45分钟。其中面试者编程30分钟,面试官提问与讨论15分钟。今天小编给大家讨论下华为面试改革加强考察编程难度大增,感兴趣的朋友2019-05-14
精选11道Java技术面试题及对应答案【包含部分阿里和华为的面试题】
这篇文章主要为大家介绍了11道Java技术面试题及对应答案,其中包含部分阿里和华为的面试题,总结分析了java常见的技术难点与java常见面试题,需要的朋友可以参考下2019-04-119月最新184道阿里、百度、腾讯、头条Java面试题合集(小结)
这篇文章主要介绍了9月最新184道阿里、百度、腾讯、头条Java面试题合集,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-09-09- 这篇文章主要介绍了阿里常用Java并发编程面试试题,总结分析了java并发编程的概念、原理、常见操作与相关注意事项,需要的朋友可以参考下2019-09-04
- 这篇文章主要介绍了银行java开发笔试面试题13道,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-08-27
史上最全的Java面试题总汇(不再惧怕面试官,成功坐等offer)
这篇文章主要介绍了史上最全的Java面试题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-08-07Java研发京东4面:事务隔离+乐观锁+HashMap+秒杀设计+微服务
这篇文章主要介绍了Java研发京东4面:事务隔离+乐观锁+HashMap+秒杀设计+微服务,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-07-24
最新评论