外包两年,有幸获得华为社招od岗内推机会,历经四⾯成功斩获offer!1.闲聊
流程:投简历,机试,性格测试,两轮技术⾯,HR⾯&部门总管⾯
⽬前状态:⾯完部门⾯,等待后续。。。希望通过。。))
2. 机试
机试就在⽜客⽹上做,⽜客⽹有⼀个华为的题库,可以提前去做做。我的建议是做⼀下前⾯的⼗⼏题熟悉⼀下输⼊输出就好了。题⽬的话其实我不太记得了,重点是字符串,我考了两题字符串,要熟悉字符串的基本操作。然后第三题就是⼀题⽐较普通的DFS,可以去LeetCode 把各种常见的算法都稍微了解⼀下,做⼀两道例题,通过应该不难的。
3.性格测试
跟华为正式招聘的要求是⼀样的,可以百度⼀下,当时在知乎看到⼀个回答,⼤概了解⼀下华为喜欢哪些性格就好。最重要的还是不要前后⽭盾。。
4.技术⼀⾯
1.两道编程题,树的数据结构+前序遍历,⽣产者和消费者的多线程模式(⼀开始⽤AtomicInteger,⾯试官说会⾃旋会导致CPU100,我说⽤sleep,⾯试官说不符合题意。最后我换成了synchronized,⾥⾯对锁使⽤wait跟notifyAll,解决了⾃旋的问题)
2.介绍⾃⼰,这⼏年的情况 (如实回答)
3.HashMap是如何存储数据的(我答了哈希数组之后,还把put的流程都讲了⼀遍。。)
4.Spring的主要特性(IOC跟AOP的概念)
5.对数据结构和算法的理解(把列表,链表,各种树,算法说⼀遍)
6.为什么需要多线程,如何理解的(答了充分利⽤CPU算⼒,然后问我如何利⽤,我说阻塞的时候可以切换到其他线程继续执⾏)
7.如何避免内存溢出(JVM参数是否合理,是否存在死循环创建了⼤量对象,是否存在内存泄漏,⽤完的引⽤要及时清理)
8.对软件开发流程的理解(答了IT项⽬管理跟UML的开发流程,获取需求,需求分析,概要设计,详细设计,编码,项⽬计划等)
总结:编程题有点难度,主要没想到会考多线程,不过还是写出来了,常见的多线程考题要熟悉。后⾯问的都⽐较浅显,所以就还好。
5.技术⼆⾯
1.平时项⽬是否有⽤到多线程(没有
jquery在线教程外包2.如何实现线程同步(答了synchronized,ReentrantLock,CAS。应该再加⼀个ThreadLocal,还有原⼦类AtomicInteger)
3.线程池的重要成员变量(我答了整个框架,Executor顶级接⼝,ExecutorService次级接⼝,ThreadPoolExecutor实现类,成员变量包括⼯⼚ThreadFactory,阻塞队列Block Queue,三个关键⼤⼩的变量corePoolSize,maximumPoolSize,poolSize)
4.有没有学过Java调优(没有
5.⾯向对象的设计原则(6⼤原则,忘了很久没有看这题了,只记得单⼀职责了。。)
6.SpringBoot相⽐Spring的优势(配置简单,去XML,代码简洁,便于集成各种框架,适合构建微服务)
7.项⽬构建和管理⼯具,常⽤的是maven跟gradle,⽤过吗(maven)
追问:maven⾥的核⼼是l,⾥⾯有什么重要标签(答了dependencies,⾥⾯有dependency,版本号可以⽤parent统⼀设置,也可以⽤properties去设置变量,还有plugins,导⼊maven的插件⼯具)
再追问:那dependencyManagement呢,跟dependencies有什么区别?(我说忘了,但在写微服务demo的时候⽤过,记不清)
再追问:那多个模块之间,他们的依赖如何管理(我说了打包成war然后import。但是没有答到具体的依赖如何处理)
再追问:有没有⽤过Gradle(没有
8.了解过终态吗,知道是什么吗(完全不知道
9.微服务相⽐传统项⽬的特点和优势劣势?(分成各个模块,每个模块都是⼀个完整的项⽬,有⾃⼰的数据库,⾼内聚。逻辑清晰,可拓展性好。但出错的时候难以定位错误,⾯临分布式事务,分布式部署的挑战。)
10.微服务⼀般有很多组件,说⼀说你知道的有哪些(Eureka,⽤于发现服务。Feign,⽤于统⼀参数还有负载均衡。Hystrix,熔断器,⽤于降级防雪崩。事后发现忘记说⽹关层gateway了,应该还有⼀个zuul,还有Config)
11.Vue和jQuery有什么区别
12.JDK1.8有哪些新特性(lambda简化匿名内部类,接⼝default⽅法,流操作stream函数式编程,Optional类简化了处理null值)
13.编程题,最长连续严格递减序列的长度(是连续序列,⼀开始看错了是⼦序列,然后发现更简单了,最后⽤⼀维dp数组去解决,现在细想其实⼀个变量就可以了,O(1)空间复杂度),要⽤assert断⾔去判断。
总结:编程题不难,但前⾯问得⽐较⼴,很多东西都没有准备,然后直接就问到了。所以表现不太好。。本来以为直接挂了,但HR说补了⼀次技术⾯。
6.技术三⾯
1.⾯向对象的特点?(答了继承,多态,封装)追问什么是多态(答了⼀种类型多种实现,动态绑定),Object和其他类的关系(Object 是所有其他类的超类)
2.对多线程的理解?(答了看过多线程的源码包括如何实现多线程,继承Thread,实现Runnable,Callable,看了线程池架构的源码,对ThreadPoolExecutor有认识)追问线程池⾥有哪些重要的成员
(corePoolSize,maximumPoolSize,poolSize,ThreadFactory,Blocking Queue,RejectionHandler等。)
3.SpringMVC⾥的MVC是什么意思?(答了MVC设计模式,说了model,view,controller的解耦思想)追问我有没有看过SpringMVC 的源码(我说没有,但我知道它的底层原理是通过DispatcherServlet去处理页⾯映射,数据格式的处理等等)
4.MyBatis项⽬启动之后,数据库发⽣了修改,这时候应该怎么办?(我说修改Mapper)追问如何修改,我说不会,⾯试官说这部分是热部署相关,要去了解⼀下~
5.对算法的理解(我说常见的算法都会,各种排序算法等)追问哪些排序算法的时间复杂度是nlogn(答了归并,堆,快排,并且稍微讲了⼀下如何实现)追问能否⾃⼰写出来(可以)
6.堆数据结构的理解,关于数组,链表,队列,Java有哪些常见的实现类(答了ArrayList,LinkedList,PriorityQueue,还顺便讲了⼀点点底层实现原理,然后顺⼝说了⼀下⽤LinkedList去实现栈)
7.那Map呢,Java⾥Map的多线程实现类,是什么,讲⼀下它的实现原理(答ConcurrentHashMap,讲了1.7⽤分段锁,数据均匀分布到Segments数组上。⽽1.8放弃了分段锁,使⽤和HashMap⼀样的哈希数组,但因为多线程环境下,全局变量都设置成了volatile防指令重排,还有nextTable也成为了全局volatile变量等等的,现在回想忘记说sizeCtl变量了。然后说底层主要使⽤了synchronized跟cas操作,现在回想应该再补充⼀下synchronized的锁升级,所以升级到1.8直接使⽤了synchronized。但当时这道题已经答了很多了,我看差不多得了,就没继续说了,打算如果追问的话再说。)
8.微服务是什么(跟⼆⾯⼀样的问题,不过这次有准备,所以答得更从容~)
9.SpringCloud和SpringMVC的区别(这题不是很懂,我说MVC主要就是处理页⾯的映射,⽽Cloud是微服务相关,⼀个服务调⽤另⼀个服务等等的)
10.编程题,给定⼀个字符串数组,对它进⾏去重,⽽且结果集要从⼩到⼤排序,排序的时间复杂度要为O(nlogn),不能直接⽤JDK⾃带的各种sort⽅法。(去重直接⽤HashSet就解决了,排序⼀开始想⽤PriorityQueue偷懒,但感觉不太好。于是⾃⼰写了个快排,跟整数快排唯⼀的区别也就是判定⼤⼩⽤compareTo⽅法~)
总结:三⾯感觉还好,问得⽐⼀⾯细,但⼜没有⼆⾯那么难。。
7.HR&部门⾯
聊了各种个⼈情况。。然后第⼆天给给了offer!
我的⾯试经验汇总
下⾯先给⼤家上⼀个总的⽬录⼤纲,基础的东西就不进⾏过多的赘述,我们将会从⾯试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费⼤家的时间了!
有需要的朋友
SpringCloud
Redis
JVM
MySQL
Zookeeper
Kafka
Dubbo

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。