阿里p7的Java面试心路历程笔记,拿到了50w的Offer

Posted Java老猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里p7的Java面试心路历程笔记,拿到了50w的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

经验总结

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

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

你没时间整理的东西,我都帮你写好了。获取方式: 只需你一键三连后,点击这里领取,或者扫描👇二维码回复【 999】即可!
在这里插入图片描述

以上是关于阿里p7的Java面试心路历程笔记,拿到了50w的Offer的主要内容,如果未能解决你的问题,请参考以下文章

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

心酸分享三年经验渣本,记一次4月阿里Java面试,谈谈心路历程!

阿里P7给你系统梳理面试6大专题,Java面试速成笔记太香了

一份Java核心面试宝典-阿里P7架构师必备的学习笔记

拿到这份Java面试文档“狂刷”2周,成功拿到阿里P7+的offer

八年Java开发心路历程,2021最新Java开发面试解答!赶紧收藏!