「真实分享」三年经验,记一次4月阿里Java面试,谈谈心酸历程!

本文作者分享了自己三年工作经验,从外包经历到疫情期间的自我提升,最终成功拿到阿里Java岗位的Offer。文章重点讨论了面试成功的关键因素,包括明确目标、精益求精的学习态度和深入理解技术。面试过程涵盖了Java基础、JVM、多线程、数据库、中间件、算法等多个方面,同时强调了源码阅读的重要性。作者还分享了自己的复习笔记和面试题型,以帮助读者更好地准备Java面试。
摘要由CSDN通过智能技术生成

背景

这次是来源大学室友的面试经历分享,三年经验渣本,现在在杭州,做过外包(那是真的苦),由于疫情在家宅了4个月,其实在家苦修,4月拿到朋友给的阿里内推,说实话心里还是有点慌,但不能辜负这4个月的幸苦学习,最终还是侥幸拿到Offer
在这里插入图片描述

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

有明确的目标,有压力才会有动力。保持学习的习惯,每天至少学习两小时,每两个月最少看一本书。你想要三年入大厂,就要三年学习足够的知识,所以让自己疯狂起来吧。
要有精益求精的态度。你可以想象,如果支付宝因为bug停服1分钟会造成多大影响?如果是你写的,那面临的将是五雷轰顶。抱着这种敬畏的态度,不仅要知道API的用处,更要知道它是如何实现的。毕竟是人写的,会有各种问题,了解原理才能避免或者及时更改错误。
对技术和项目深入挖掘。面试官很喜欢问项目的架构、技术的深度和广度。为什么?我们需要保证一个系统健康、高效、可动态扩展(就比如支付宝,不能出bug,必须支持动态扩容等等)。那就需要你了解项目架构,学习如何设计项目;需要你深入了解源码实现和设计理念,知道哪种方式效率最好,你写的代码是否会出现bug,是否可以动态扩展……

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

看源码可以了解实现原理,让你对框架的使用更得心应手(我以前不知道aop怎么用,看完源码之后就彻底懂了);其次可以避免一些使用上的错误(比如JDK提供的几种默认实现线程池,他有可能造成OOM,因为采用的无限队列存储任务);再者,我们可以学习优秀的设计理念,将来应用到自己的代码中。

可能你会想问,那么多框架都要看吗?那是不可能的!其实框架的设计几乎都雷同,我们只要针对2-3种框架进行深入研究,学明白其中的道道,那么再给你一个新的技术,你也会很快上手,并且结合项目进行学习(最终的目的不就是为公司挣钱嘛,所以用到啥学啥,谁也不可能都学会都学精,别有压力)。

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

技术一面(基础为主)

先介绍一下自己吧
说一下自己的优缺点
具体讲一下之前做过的项目
你觉得项目里给你最大的挑战是什么?
Hashmap为什么不用平衡树?
AQS知道吗?知道哪一些呢?讲一讲。
CLH同步队列是怎么实现非公平和公平的?
ReetrantLock和synchronized的区别
讲一下JVM的内存结构
JVM 李 new 对象时,对会发生抢占吗?你是怎么去设计JVM的堆的线程安全的?
讲一下redis的数据结构
redis缓存同步问题
讲一讲MySQL的索引结构
你有什么问题要问我吗?

技术二面

根据项目问了一些细节问题
说一下HashMap的数据结构
红黑树和AVL树有什么区别?
如何才能得到一个线程安全的HashMap?
讲一下JVM常用垃圾回收器
redis分布式锁
再描述一下你之前的项目吧
你觉得这个项目的亮点在哪里呢?
你设计的数据库遵循的范式?
你有没有什么问题?

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

如何理解内存泄漏问题?有哪些情况会导致内存泄露?如何解决?
怎么理解强一致性、单调一致性和最终一致性?
分布式锁有哪些解决方案?
如何解决Redi缓存穿透的问题?
Redis hash算法用的是什么?
Redis集群方案应该怎么做?都有哪些方案?
elasticsearch为什么检索快,它的底层数据结构是怎么样的?
JVM内存模型
netty应用在哪些中间件和框架中呢?
线程池的参数
讲一下B树和B+树的区别
为什么要用redis做缓存?
了解Springboot吗?那讲一下Springboot的启动流程吧
如何解决bean的循环依赖问题?
Java有哪些队列?
讲一讲Spring和Springboot的区别
最近看了什么书?为什么?
你平时是怎么学习Java的呢?

技术四面

手画自己项目的架构图,并且针对架构和中间件提问
之后就是和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的源码一怼就够了。

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

我的复习笔记

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

  • 短期准备——刷面试题;长期筹谋——巩固核心技能。
  • 面试题怎么刷?刷高频题、有深度的题、符合时效性的题。
  • 核心技能如何巩固?先深入理解原理,再系统应用到实践。

*下面这套是我复习时自己整理的,分享给大家。每个知识点都有左侧导航书签页,看的时候十分方便由于整个笔记比较全面,需要点这里*
在这里插入图片描述

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

Java基础

在这里插入图片描述

Java 集合框架

在这里插入图片描述

jvm

在这里插入图片描述

多线程

在这里插入图片描述

网络

在这里插入图片描述

算法和数据结构

在这里插入图片描述

Spring

在这里插入图片描述

Netty

在这里插入图片描述

微服务/分布式

在这里插入图片描述

消息队列

在这里插入图片描述

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

在这里插入图片描述

MySQL

在这里插入图片描述

Redis

在这里插入图片描述

经验总结

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

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

Java工程师面经笔记

多谢大家的阅读,有需要这份完整笔记朋友可“一键三连”后点击这里免费领取Java工程师面经笔记

创作不易,大家动动手指一键三连一波。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值