华为Java社招⾯试经历详解【已拿到offer】
这篇⽂章主要介绍了华为Java社招⾯试经历,详细记录了华为java⾯试的流程、相关⾯试题与参考答案,需要的朋友可以参考下。
看看⾃⼰能答对多少,如果能回答70%的题⽬,就⼤胆去阿⾥以及各互联⽹公司试试⾝⼿吧。本篇建议⼤家收藏、备⽤~
华为Java社招⾯试(已拿到offer)
之前⽉底华为cloudsop部门打电话叫我要不要⾯试,当时正处于换⼯作的期间,于是就把简历发给华为hr,⼈事审核后经过⼀些列⾯试、机试,最终顺利拿到了offer,出于未来职业规划的考量,本⼈⼿⾥还有其他的⼀些offer,还没有定下来,顺便在此分享⼀下我⾯试华为的⼀些经历。
华为作为通讯⾏业的龙头,还是⾮常看中学历的,楼主可能正卡在了不是特别优秀的⼀类985、211院校,导致最终定级不是特别理想,但总的来说华为的⾯试不是很难,主要分为电话技术⾯、机试、技术综合⾯、hr综⾯。
1.电话技术⾯试
主要问了我最近的项⽬,中间也有少部分底层框架的原理,⼤概四⼗分钟。
1.MyBastis如何映射,MyBatis原理。
2.如何实现⾼可⽤的,你的系统怎么达到⾼可⽤的?
4.集合框架有哪些是线程安全的?哪些是⾮安全的?
5.开发中你们如何进⾏单元测试?覆盖率如何?⾃动化测试怎么达到?
6.SpringMvc执⾏流程,java常⽤设计模式。
java中常用的设计模式有哪些7.eureka怎么保证可⽤性,及底其层实现,与zookeeper有什么区别?
8.⾼并发相关的问题,concurrent相关包。
9.为什么使⽤redis做缓存⽽不是其他的消息队列⼊kafka,以及项⽬的稳定性。
10.事务⼀定会锁表吗?
11.java并发和线程同步,同步机制,锁具体解释⼀下。
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 = (i).split(" ")[0];
String color = (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.(i +1))-1== Integer.(i))){
if(i == numList.size()-2){
temp =1;
}
continue;
}else{
if(temp >4){
temp =4;
}
}
}
}
//四条或葫芦
if(numSet.size()==2){
Collections.sort(numList);
(0)!= (1)|| (numList.size()-1)!= (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.(i +1))-1== Integer.(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 = ();
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++){
(i).(j))){
if(Integer.(j +1).toString())> Integer.(j).toString())){
i--;
break;
}else{
i--;
break;
}
}
}
}
for(int i =0; i < list.size(); i++){
System.out.(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 = Line();
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;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论