- 金三银四马上要过去了,不知道大家是否已经拿到心仪的offer,今年受疫情影响大部分公司的面试都采用线上视频或者电话,整个流程还是很快的。 我这次主要面试了华为、YY、阿里这三家,写这篇文章的目的主要是给大家分享一下面试的流程以及面试题。
- 我会根据回忆尽量将面试官的一个问题引起的一系列追问放在同一行显示,还原真实面试场景(手动狗头)。
一、华为面试过程——机考、综合技术一面、综合技术二面、HR面
机考
两道在线编程算法题,难度与leetcode中等难度大致相当,时长90分钟。题目如下
-
1: 终端输入一个区间集合,合并所有重叠的区间并输出。输入示例给出的数据类似于[[1,4],[2,7],[8,10],[6,18]],输出[[1,7],[8,18]]
-
2: 输入正整数 n,需要找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n,并将它们以“,”分割拼接成字符串输出。
综合技术一面
整个流程:面试官上来会让你自我介绍,随后简单地问几个技术问题,最后是喜闻乐见的共享屏幕写算法题环节
-
1.技术问题(这一面的技术问题印象不是很深,可能漏几个,手动狗头):
-
Java常用的集合类有哪些?ArrayList和LinkedList的实现有什么区别?数组和链表在内存中的储存形式有什么区别?
-
JDK1.8的新特性有哪些?为什么要用MetaSpace代替方法区,这样做什么好处?说说Java的内存模型
-
说说线程与进程的区别?说说进程间通信方式有哪些?Java线程池的核心参数有哪些,分别作用是什么?
-
2.算法题:给定一个矩阵,矩阵从左到右单调递增排序,从上到下也是单调递增,再给定一个目标值,需要检索目标值是否在矩阵当中。
综合技术二面
整个流程:面试官上来还是先让你自我介绍,随后问几个技术问题,最后又是喜闻乐见的共享屏幕写算法题环节...
-
- 技术问题:
- 谈谈Spring的IOC和DI?Bean的初始化整个流程可以简要说说吗?Spring AOP有哪几种实现方式,分别讲讲实现原理?
- Dubbo有哪些核心组件,作用分别是什么?注册中心除了zk还可以选择用哪些?对比一下SpringCloud与Dubbo的区别和应用场景?
- 有没有线上JVM调优的经历?你用过的垃圾收集器有哪些?说说常用的垃圾回收算法?谈谈CMS垃圾收集过程。
- 2.算法题:有一份大小为N x N的「地图」(网格),上面的每个「区域」(单元格)都用0和1标记好了。其中0代表海洋,1代表陆地,请你找出一个海洋区域,这个海洋区域到离它最近的陆地区域的距离是最大的。这里的距离是「曼哈顿距离」计算表达式:(x0, y0) 和(x1, y1)这两个区域之间的距离是|x0 - x1| + |y0 - y1|。如果我们的地图上只有陆地或者海洋,请返回-1。
HR面
- 1.自我介绍
- 2.聊天环节,不是一问一答模式,基本上比较随意,主要聊了离职原因、职业规划、对华为的期望、期望薪资、offer的定级以及薪资
二、YY面试过程: 一二三技术面,四面HR
一二面是视频面,发生在同一天,隔天下午电话三面,晚上马上电话四面,效率很高
一面:
- 1.自我介绍
- 2.技术问题:
- 说说你项目里用到缓存的场景?如何防止缓存雪崩?缓存不一致怎么解决?Redis里面的内存淘汰策略有哪些?能说说LRU算法的实现思路吗?
- 高并发场景下你有做过哪些优化?你介绍的那个项目,在线上QPS是多少?你说你用到了Semaphore限流,说说它的实现原理吧?Java并发包里面你还用到了哪些组件?谈谈CAS的实现原理吧。
- 你项目里面用的都是SpringBoot吧,说说它跟SpringMVC的区别和联系?SpringBoot的自动化配置是怎么实现的?
- 介绍一下BIO、NIO、AIO之间的区别?Netty框架对Java的NIO做了哪些优化?说说Netty的线程模型?
- 项目中有用到过消息中间件吗,你们用的是哪一种?你们为什么要选择Kafka?对比一下RabbitMq与Kafka的区别和优劣?
二面:
- 1.自我介绍
- 2.技术问题:
- 线程与进程之间的区别与联系?线程的状态有哪些?WAIT和TIME_WAIT有什么区别?Object.wait()方法和Thread.wait()方法有什么不同?有听过协程吗?说说协程的实现原理?Java线程池的几个核心参数与作用?线程如果你用线程池想要打印日志,日志里面要包含不同的线程id,请问线程池能实现吗?(最后这一题比较难没有答出来,面试官大佬说是要在创建线程池的时候利用线程池工厂参数设置ThreadId并且需要注意销毁时清除)
- Mysql分库分表的方案有了解过吗?有没有不需要代理的方案?(上一问我只回答了Mycat)
- Dubbo的SPI机制跟Java的SPI机制有什么区别?为什么Dubbo要实现这种键值对模式的SPI配置,是为了解决什么问题?Dubbo是如何在Spring中启动的,能否简要说说整个过程?
- Netty的事件模型能描述一下吗?如果让你直接用Netty框架开发,你会把业务逻辑放在哪里?如果让你用Java-Nio开发,那么你还需要解决哪一些问题?
- 3.向面试官提问环节
三面:
- 1.自我介绍
- 2.详细介绍简历上写的项目&攀谈交心:
- 说说你们项目的架构以及所用到的技术栈?
- 这个架构会有什么问题?你觉得还可以如何优化?
- 你平时是怎么学习的?
- 谈谈你的职业规划?你可以接受做业务线的需求吗?
- 3.向面试官提问环节
HR面
- 1.自我介绍
- 2.比较轻松,开头HR先介绍公司-项目组的情况,随后聊了一下面试官给到我的评价以及我大学所学专业的问题,询问上一家的离职原因,最后提及offer信息以及沟通具体可到岗日期、询问我对offer选择的一些标准等
三、阿里面试过程: 一二三技术面,四面HR
一二三轮都是视频面,一面主要侧重于Java基础和常用开源框架的用法、特性、基础知识,二面主要考察技术的广度以及技术细节,三面都是应用场景题目,主要考察实际解决问题的能力,HR面相对而言有点唬人,背景调查相关的事情以及之前每一段经历的离职原因等会扣得比较细。
一面:
- 1.自我介绍
- 2.技术问题:
- 简单介绍一下线程的切换过程?如何在linux系统查看线程上下文切换情况?
- 为什么TCP建立连接需要3次握手,而断开连接则需要4次挥手?为什么TCP关闭连接时需要TIME_WAIT状态且需要等待2MSL?TCP有什么机制应对流量拥塞吗?说说滑动窗口的实现?
- 简单描述一下JVM的内存模型?分别在什么情况下会触发MinorGC和FullGC,有听说过MajorGC吗?G1垃圾回收算法与CMS的区别有哪些?
- Java类加载器有几种,一个类的初始化过程大致是怎么样的?(好像还有追问加载、验证、准备、解析、初始化其中一个环节的具体作用)
- Synchronized和ReentrantLock有什么区别?分别适用于什么场景?读写锁适合什么场景?ReentrantReadWriteLock是如何实现的?简单说说AQS的实现原理?
- Redis和Memcache有很么区别?该如何选用?你用到了Redis的哪些数据结构?说说具体的应用场景。
- 能简单描述一下Spring Context的初始化流程吗?Spring的循环依赖是怎么解决的?
- 有用过RPC吗,RPC和HTTP有什么区别,分别适合在什么场景下使用?
- 3.向面试官问问题环节。
二面:
- 1.自我介绍。
- 2.技术问题:
- 你们公司有做直播吗?有了解过websocket吗?简单说说它处于ISO网络模型里面的哪一层,能否简单说说websocket的通信原理和协议格式?
- 简单说说SpringBoot的启动流程?内置的Tomcat容器是怎么启动的?如何才能在SpringBoot里面进行Tomcat调优?
- 数据库用的是Mysql吗?InnoDB和MyISAM两种存储引擎的主要区别是什么?谈谈聚束索引和非聚束索引的主要区别?InnoDB能够支持的索引有哪些?Hash索引和Bree索引主要区别是什么,分别适用于哪些场景?为什么InnoDB要用B+树而不用B树?
- 消息中间件有用过哪些?简单说说RabbitMQ的协议层和架构吧?简单说说消息中间件在不同业务场景下的技术选型?
- Netty的重要组件有哪些?它是如何解决空循环问题?零拷贝是怎么实现的?
- JIT技术有了解过吗?那你大概说说你都了解什么编译优化吧?逃逸分析具体是怎么做的?
- 3.向面试官问问题环节。
三面:
- 1.自我介绍。
- 2.技术问题:
- 你知道分布式事务的概念吗?常用的解决方案有哪些?对比一下2PC和TCC这两种方案的优劣?你们项目在哪些场景用到了分布式事务?
- 如果用户反馈你们的应用访问速度很慢应该怎么排查,说说你的思路?如果应用进程正常运行,系统CPU和内存占用也正常,这个时候应该怎么排查,说说你的思路?
- 如果让你设计一个大型高并发应用,说说你的方案?
- 有自己安装过Mysql吗,有哪些比较重要的文件?假设一个主键占用16字节,你觉得一张表最多能存下多少条数据?
- 如果让你着手开发一个RPC框架,你觉得可以从哪些方面保证它的性能?
HR面:
- 1.自我介绍。
- 2.问题:
- 你前两家公司的离职原因分别是什么?
- 接受背景调查吗?
- 谈谈你未来的职业规划?
- 期望薪资?
- 如果你进入公司后发现不能胜任工作内容,你会怎么办?