4个月苦修,“不负年华“终斩阿里Java岗4面,分享下心路历程

背景

三年经验渣本,现在在杭州,做过外包(那是真的苦),在家宅了4个月,一直在家苦修,拿到朋友给的阿里内推,说实话心里还是有点慌,但不能辜负这4个月的辛苦学习,最终还是侥幸拿到Offer

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

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

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

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

可能你会想问,那么多框架都要看吗?那是不可能的!其实框架的设计几乎都雷同,我们只要针对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后端80%的技术点这些学习笔记都是免费分享的,非常适合开发一到五年正在想换工作和进阶学习的朋友观看


Java高级架构面试复习笔记(分布式,高可用,高性能,微服务,架构设计)


框架源码学习笔记


mysql高级知识笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值