写点什么

阿里 p9 的 Java 面试心路历程笔记,轻松拿到了 90w 年薪的 Offer

用户头像
Java~~~
关注
发布于: 2021 年 08 月 18 日
阿里p9的Java面试心路历程笔记,轻松拿到了90w年薪的Offer

背景

去阿里面试可以说非常非常的偶然和戏剧性,因为本人根本没投简历,以至于阿里 hr 给我电话的时候我一度认为是诈骗电话。因为深圳这家公司不错我还想在这里干个两年左右再考虑考虑。

这个时候的本人已经发生了很大的转变,从刚进腾讯的浮躁、自大、惧怕面试,已经转变为淡泊、谦虚,并且喜欢上了面试,感觉每次面试就像杨过跟大雕过招一样,武功都能精进不少。本着去看看技术面内容的心态去了,说实话虽然喜欢面试但是内心还是有点慌,可能有点社恐也说不定,虽然过程一度曲折,但是还是侥幸拿到了 Offer

为什么面试成功,我总结了如下几点:

1、自信太重要了,你自己都否定你自己,觉得这不行,那不行,这样就导致你面试的时候畏畏缩缩的,当然自信的前提是什么?我自己体会最重要的一点就是学习,只有学习才能让你保持有底气有自信,我现在每天也会保持学习 2 个小时,哪怕时间再不够我也会睡前看半个小时的书籍,你想要三年入大厂,就要三年学习足够的知识!

2、正确面对压力,我们总是害怕去面对压力,退缩可能就是大部分人的第一选择,逃避不是办法,有压力才会有动力,而且你在面试过程中绝大多数面试官都会问你,关于压力的问题,提前想好不是更好。

3、能力,包括你的技能你的业务能力已经你管理的能力,当然程序员最重要的就是你手里面的“笔”,你对技术和项目深入挖掘的能力,因为面试官很喜欢问项目的架构、技术的深度和广度。 为什么?我们需要保证一个系统健康、高效、可动态扩展(就比如支付宝,不能出 bug,必须支持动态扩容等等)。那就需要你了解项目架构,学习如何设计项目;需要你深入了解源码实现和设计理念,知道哪种方式效率最好,你写的代码是否会出现 bug,是否可以动态扩展……

另外说一点,为什么要看源码?

  • 看源码是为了解决问题,只要是代码,就会有 bug,只是说 bug 的多与少、深与浅罢了。现在大家都喜欢发布、使用开源项目,不同的开源项目社区成熟度、代码质量又会有较大的差异,遇到 bug 就不足为奇,让你对框架的使用更得心应手

  • 可能你会想问,那么多框架都要看吗?看源码只是一种方法、手段,而不是目的。我也曾经给自己制定过“阅读 xxx 源码”的目标,现在看起来真的很蠢,一点不 smart(specific、measurable、attainable、relevant、time-bound)。我们只要针对 2-3 种框架进行深入研究,学明白其中的道道,那么再给你一个新的技术,你也会很快上手,并且结合项目进行学习。

  • 我说了这么多,不知道你是否对自己有了全新的定位,在学习上有了明确的标准?如果你符合我说的,那么恭喜你已经或者即将成功。如果感觉到压力,那更要祝贺你,因为以后就是你蜕变的过程,请享受它!下面是面经的一个分享!

技术一面(基础为主)

  1. 先介绍一下自己吧

  2. 说一下自己的优缺点

  3. 具体讲一下之前做过的项目

  4. 你觉得项目里给里最大的挑战是什么?

  5. Hashmap 为什么不用平衡树?

  6. AQS 知道吗?知道哪一些呢?讲一讲。

  7. CLH 同步队列是怎么实现非公平和公平的?

  8. ReetrantLock 和 synchronized 的区别

  9. 讲一下 JVM 的内存结构

  10. JVM 里 new 对象时,堆会发生抢占吗?你是怎么去设计 JVM 的堆的线程安全的?

  11. 讲一下 redis 的数据结构

  12. redis 缓存同步问题

  13. 讲一讲 MySQL 的索引结构

  14. 你有什么问题要问我吗?

技术二面

  1. 根据项目问了一些细节问题

  2. 说一下 HashMap 的数据结构

  3. 红黑树和 AVL 树有什么区别?

  4. 如何才能得到一个线程安全的 HashMap?

  5. 讲一下 JVM 常用垃圾回收期

  6. redis 分布式锁

  7. 再描述一下你之前的项目吧

  8. 你觉得这个项目的亮点在哪里呢?

  9. 你设计的数据库遵循的范式?

  10. 你有没有什么问题?

技术三面(主要从项目入手,主要是解决方案)

  1. 如何理解内存泄漏问题?有哪些情况会导致内存泄露?如何解决?

  2. 怎么理解强一致性、单调一致性和最终一致性?

  3. 分布式锁有哪些解决方案?

  4. 如何解决 Redi 缓存穿透的问题?

  5. Redis hash 算法用的是什么?

  6. Redis 集群方案应该怎么做?都有哪些方案?

  7. elasticsearch 为什么检索快,它的底层数据结构是怎么样的?

  8. JVM 内存模型

  9. netty 应用在哪些中间件和框架中呢?

  10. 线程池的参数

  11. 讲一下 B 树和 B+树的区别

  12. 为什么要用 redis 做缓存?

  13. 了解 Springboot 吗?那讲一下 Springboot 的启动流程吧

  14. 如何解决 bean 的循环依赖问题?

  15. Java 有哪些队列?

  16. 讲一讲 Spring 和 Springboot 的区别

  17. 最近看了什么书?为什么?

  18. 你平时是怎么学习 Java 的呢?

技术四面

  1. 手画自己项目的架构图,并且针对架构和中间件提问

  2. 之后就是和 hr 谈

面试必考知识点

下面,我给你们分享一下今年我面试的主要知识点:

  1. Java 基础: 其中包括线程池(创建线程池的参数有哪些,分别可以取什么值,为什么不推荐使用 JDK 提供的默认实现线程池)、锁(主要是 AQS,如何进队出队,一定要看透,必问)、synchronize、集合(set、list、map 所有的集合都要知道,ConcurrentHashMap 不一定问,问了就要将源码全部屡清楚,包括 cas、volatile 特性)、多线程我倒是没有遇到问的,但是以防万一还是要学习的。这些都是必须掌握的!!!其实不管你去不去大厂,如果想要在技术行业上一直向上走,就必须要掌握这些重要的知识点,要不为啥让你当 teamleader 呢。

  2. JVM: 核心包括 JVM 的内存结构,垃圾回收算法和垃圾回收器,线上问题排查思路及命令,类加载过程,双亲委派模式等。最好能够梳理成知识树,将内容一次性完整的输出给面试官,这样我认为才是合格的。这也不仅仅是为了应付面试,在哪家公司你都要用到这些内容,这会帮助你更深入的理解 Java,不懂的话,为啥让你当 teamleader?

  3. Mysql 调优: 主要就是 innodb 搜索引擎,因为其他的不太常用,考察的也少。包括为什么采用 B+tree 作为索引数据类型,创建索引需要注考虑的内容,如何优化 sql,ACID 是什么,事务隔离级别以及如何解决的脏读、幻读、不可重复读(结合 MVCC 和锁就可以解释清楚)

  4. 中间件: 可能有 redis,mq,kafka,es 等等,这就是结合具体项目具体说了。比如 redis 用作分布式锁,先暂停一下,你思考面试官会问什么内容呢?为什么选用 redis 做分布式锁,和 zk 有什么不同;redis 分布式锁如何实现的;redis 分布式锁和 zk 分布式锁有什么问题,有没有解决方案(对于客户端长时间 GC 导致的 key 过期,目前没有太好解决方案)。再比如 mq,你们用的是哪种,如何保证消息不丢失不重复消费,集群如何设计从而达到灾备。以上内容不管你是否参与了设计,或者系统的实现是否进行了考虑,你都需要自己进行了解并结合项目进行思考(可以看书学习方案,再结合项目,这样理解更深刻)。这一点很重要也是必备条件!!!

  5. 算法: 大厂面试 100%会考

  6. 框架源码: 今年有个朋友面试就遇到一个问框架的,然后就把 spring、springMvc 和 mybatis 的源码一怼就够了。

补充一点,也是最重要的一点——简历!简历必须排版整齐,能够让面试官迅速找到重要信息(年龄,学历,工作经历,掌握的核心技能),具体工作经历需要写明项目含义、个人负责内容及成绩(如果负责内容比较简单,可以写在项目中遇到什么问题,如何解决的或者学习到了什么,目的就是让面试官感觉你有能力)。总之,必须能够让面试官迅速准确地获取你的信息,才有机会进行后面的流程。

我的复习笔记

面试作为涨薪最直接最有效的方式,我们需要花费巨大的精力和时间来准备。除了自身的技术积累之外,掌握一定的面试技巧和熟悉最常见的面试题,一定会让我们如虎添翼。尤其是在当今的这个严峻形势下,大厂的面试竞争十分激烈,想要在这场战役中获得胜利,就必须在面试这个环节上下狠功夫,那么查漏补缺和务实理论就是我们的必经之道。

  • 短期准备——刷面试题;长期筹谋——巩固核心技能。

  • 面试题怎么刷?刷高频题、有深度的题、符合时效性的题。

  • 核心技能如何巩固?先深入理解原理,再系统应用到实践。

下面这套是我复习时自己整理的,分享给大家。每个知识点都有左侧导航书签页,看的时候十分方便

由于整个笔记比较全面,内容相当的多 ,这里仅展示面经中的面试真题,如有需要获取文中提到的 “Java 工程师面经笔记” 的朋友 文末 有直达获取地址。

面试提纲


Java 基础


Java 集合框架


jvm


多线程


网络


算法和数据结构


Spring


Netty


微服务/分布式


消息队列



分布式 ID,其他(网关、限流…)


MySQL


Redis


经验总结

这是我在工作、面试中学习并总结到的一些知识点, 都是一些比较典型的、常被问到的问题。如果你平时没有注意去总结的话,那么当你面试被问到的时候可能会是一脸懵圈,就算这个问题你知道怎么回事,但是你平时没有认真总结,你也可能会出现逻辑混乱的情况,从而错失工作机会。

有些知识点不经常使用就会忘记,但是面试还会问,对此,我也是深受其害,所以我决定将这些遇见的问题整理下来,分享出去,帮助更多的人,我们共同进步。所谓“温故而知新”,没事的时候多翻看一下这些知识,没准就会有新的收获。

你没时间整理的东西,我都帮你写好了。如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以关注我,希望我的一些经历能够帮助到大家~~

文章提到的文档领取方式:看我主页获取免费学习最新资料提升自己(全套面试文档、PDF、进阶架构视频、)

发布于: 2021 年 08 月 18 日阅读数: 12
用户头像

Java~~~

关注

还未添加个人签名 2020.11.03 加入

添加小助理VX:MXH5261获取进阶资料哦

评论

发布
暂无评论
阿里p9的Java面试心路历程笔记,轻松拿到了90w年薪的Offer