前言
这几年在Java工程师招聘时,会看到很多人的简历都写着使用了Spring Cloud做微服务实现,使用Docker做自动化部署,并且也会把这些做为自己的亮点。而比较有趣的这其中以小公司出来的人为绝大多数,大的公司出来的人简历上倒是很少提这些东西。
对于我自己来说,从15年就开始关注这一块,看过马丁.福勒最开始的关于微服务的论文、也看过不少对微服务的论证的英文文章和书,也研究过Spring Cloud、Sofa等开源实现以及Service mesh。考虑到我们公司研发团队人力不足、基础设施不完善,当初是没有推行微服务的。但随着看到上述的那种简历越来越多,有时候我也会疑问:难道真的不用微服务就落后了吗?公司的同事如果不掌握这些就真的没有竞争力了吗。而随着最近公司业务的逐步提升,研发人员越来越多,借着在梳理公司的微服务落地计划时,也梳理了一下微服务的相关知识点,也是本文的主要内容。
蚂蚁金服一面:分布式架构 50分钟
- 个人介绍加项目介绍20分钟
- 微服务架构是什么,它的优缺点?
- ACID CAP BASE理论
- 分布式一致性协议,二段、三段、TCC,优缺点
- RPC过程
- 服务注册中心宕机了怎么办?
- 微服务还有其他什么组件
- 分布式架构与微服务的关系
- 你有什么问题要问我的。
蚂蚁金服二面:1个小时
上来不用自我介绍,项目介绍,直接开始
算法来两道
- 各种排序算法、未排序常规数据查找第K大的数,时间复杂度。
- 二叉树的深度
操作系统来两道
- 虚拟内存分页了解不?
- 进程和线程区别?
数据库来三道
- 第一二三范式是什么?
- 一个表一千个列值为true和false,写sql 查询 有300个列值为true的行。
- 脏读和幻读是什么?
JVM
- 什么对象会从新生代晋升到老年代
多线程
- 一个任务分成十个任务,最后汇总计算,不能用fork/join
- 开源框架源码了解不?
- 数据建模两道、个人题开放性题
安全方面的问题
- 对安全方面了解多少?
- 安全协议有哪些 、https是啥?
介绍你做的项目和其中的难点。
三面
个人感觉着重技术深度。
- 从ConcurrentHashMap一路问到锁&锁优化->LongAdder->伪共享->缓存行填充->cas等诸多技术细节;
- 从hystrix一路问到原理->自己如何实现->如何优化->响应流编程(reactive streams);
- 从简单的生产者消费者模式设计到如何高效健壮实现等等。
四面
- 如何倒序输出单向链表?
- 个人直接想法是用栈先进后出的特点,把链表数据读到栈里然后输出。
- 有更好的实现方式吗?
- 主要问项目情况,然后根据一个项目,问如果量级扩大1000倍,你会怎么做?有哪些优化措施?高性能&高可用措施?
五面:HR面
给大家抛出几大深坑问题:
- 个人的职业规划是什么
- 你遇到的最大问题或者是困难是什么
- 你如何看待阿里
- 你能为阿里带来什么
- 你的优缺点是什么
这几个问题,大家深思啊,不多说。
面试总结:
- 技术基础必须扎实:算法、数据结构、操作系统等,蚂蚁金服面试对技术的基础非常重视,基础扎实的同学有利于在前两轮突出重围。
- 技术宽度:主要集中在高并发、多线程、分布式架构,大以及常用中间件(缓存等)的选型和比较。
- 技术原理深入:重点还是提前准备好JVM、多线程高并发这块。
- 参与的项目总结:你需要清楚你所做项目的关键细节、优化、特点、原理。
- 很多所用第三方库&中间件等的原理,即使你不知道,也要有自己的想法能够说出如何代替实现,比如单点登录的替代方案。
- 最好,提前准备一个大数据访问,比如pv扩大1000倍,你的架构或者技术方案应对措施。
- 最后,千万不要倒在HR面试环节,避重就轻是重点,特别是优点和缺点,如果问到你的规划是什么,请记得一定告诉HR你想成为一名优秀的技术专家!
以上就是我的总结,这些都是不断面试积累来的经验,分享出来避免更多同学少走弯路,早日进入BAT等一线互联网公司!
《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源
Java优秀开源项目:
-
ali1024.coding.net/public/P7/Java/git
- github.com/spring-projects
总结
就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!
金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。