两年Java开发经验,裸辞之后筹备半年时间,重面阿里终于如愿拿到P6级offer [Java岗],你知道我是怎么走过来的吗?

本文作者分享了自己从Java开发经验到成功获得阿里P6级别Offer的历程,详细复盘了阿里的三轮面试内容,包括Redis、JVM、Tomcat、Kafka、锁机制、高并发等技术问题。同时,作者强调了技术沉淀、确立正确技术方向、阅读他人代码和场景化思维的重要性,为读者提供了学习和成长的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是小波,普通本科毕业,在中小型公司打拼了两年,我相信每一个程序员都拥有一个大厂梦,我也不例外,去年面试阿里P6,竟然被Redis问倒了,很多Redis相关性的问题都没有答上来,才2面就凉凉了。回去之后也潜心复习了,准备了二战,如今终于进入了阿里,被阿里淘系录用,最后定级P6-,7月26日杭州入职。

阿里面试:

  • 一轮主要考察 Java 基础;
  • 二、三轮注重对应⽤技术的掌握;尤其是第三面Redis面得比较多,基本都是深入到Redis底层原理
    看来P6年薪40W真不是那么好拿的,见识了!

我大概把三面的部分面试场景给大家还原一下:对于这次面试进行了一次完整的复盘,已经整理在文章里,有兴趣的小伙伴,可以继续看下去

阿里一面:

  • redis集群,为什么是16384?哨兵模式,选举过程,会有脑裂问题么?raft算法,优缺点
  • JVM类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat类加载机制
  • Tomcat热部署,热加载了解吗?怎么做到的?
  • cms收集器过程,g1收集器原理,怎么实现可预测停顿的?region的大小,结构
  • 内存溢出,内存泄漏遇到过吗?什么场景产生的?怎么解决的?
  • 锁升级过程,轻量锁可以变成偏向锁么?偏向锁可以变成无锁么?自旋锁,对象头结构,锁状态变化过程
  • kafka重平衡,重启服务怎么保证kafka不发生重平衡?有什么方案?
  • 怎么理解分布式和微服务?为什么要拆分服务?会产生什么问题?怎么解决这些问题?
  • 你们用的什么消息中间件?kafka,为什么用kafka?高吞吐量,怎么保证高吞吐量的?设计模型,零拷贝
  • 算法1:给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
  • 算法2:判断一个树是否是平衡二叉树

阿里二面:

  • Innodb的结构了解么?磁盘页和缓存区是怎么配合,以及查找的?缓冲区和磁盘数据不一致怎么办?mysql突然宕机了会出现数据丢失么?
  • redis字符串实现,sds和c区别,空间预分配
  • redis有序集合怎么实现的?跳表是什么?往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树?红黑树有什么特点?左旋右旋操作
  • io模型了解么?多路复用,selete,poll,epoll,epoll的结构,怎么注册事件,et和lt模式
  • 怎么理解高可用?如何保证高可用?有什么弊端,熔断机制,怎么实现?
  • 对于高并发怎么看,怎么算高并发,你们项目有吗?如果有会产生什么问题,怎么解决
  • 项目介绍
  • 算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点

阿里三面:

  • 项目介绍
  • 线上有遇到大流量的情况么,产生了什么问题,为什么数据库2000qps就撑不住了,有想过原因么,你们当时怎么处理的?
  • 限流怎么做,如果让你设计一个限流系统,怎么实现?
  • 算法:求一个float数的立方根,牛顿迭代法
  • Redis核心数据结构都有哪些?
  • 那他们底层存储的结构是如何实现的?
  • Redis 持久化方式Rdb和Aof的优缺点
  • 线上Redis如何选择RDB或AOF持久化方式呢?
  • 你们线上如何处理Redis过期数据的?
  • 那有什么缺点?
  • Redis内存淘汰算法 LRU/ LFU 可以讲一下原理么?
  • Redis有序数据结构zset底层原理有了解过么?
  • Redis位图应用场景及实现原理可以讲一下么?
  • Redis的缓存穿透/缓存雪崩/缓存重建/这类问题,可以讲讲么
  • Redis集群分片原理是怎样的?
  • Redis单线程和Redis6.0 的多线程是如何工作的?
  • 什么时候能入职,你对岗位的期望是什么?
  • 你还在面试其他公司么,目前是一个什么流程?

看完你能回答上几道?

如果能回答的出其中一半,就算是勉强及格了。

如果你都能全部回答出来,那你应该是妥妥的技术大牛了!可以放心去投大厂简历了!

而Redis作为稳居世界排名第一的KV内存数据库,同时也是最受欢迎的分布式缓存中间件,是应对高并发,大流量,低延迟业务场景的不二选择。也是大厂面试必问只技术点!

对于这几道面试题,大多数朋友们估计都是一脸懵圈,尤其是如果你平时只有CRUD的经验,或者只有高并发场景的基本经验,被面试官问到的话,基本上就是毫无还手之力了,那offer肯定就不是你的!更不用提涨薪了!


可能会有人说在网上就能搜到这些题的答案。

但是如果没有真正掌握它,一旦脱离了真实的生产环境,面试官问的稍微深入些,你就会踩到很多坑!然后就没有然后了…

如何实现质的飞跃?

1.技术沉淀(学习+积累)

对于技术新人来说,无论是在大厂小厂,还是在外包公司,基本上都是做得简单的CRUD工作。很多人认为,重复简单的工作对自己的技术是没有提升的,但实际上也有人能从中杀出一条血路,所以关键是你自己是否花了心思,付出了努力。

当然,我个人也有自己的一套学习方式和习惯,平时喜欢利用碎片时间来看点什么东西,比如确定自己的学习路线,一些技术性的书籍或文档,还有一些视频讲解等,经常会让我有一种恍然大悟的感觉,对我的工作也起到了很大的帮助。

  • 学习路线整理:


    Java 学习资料,包含了 Java 工程师必学的四大开源框架–MyBatis、Spring、Spring MVC、Spring Boot,视频资料、大厂面试题等想要的同学可以点击这里免费领取

  • 阅读书籍文档
    img

  • 看视频学习:
    img

  • 面试刷题:

BAT一线大厂面试题
img

Java 学习资料,包含了 Java 工程师必学的四大开源框架–MyBatis、Spring、Spring MVC、Spring Boot,视频资料、大厂面试题等想要的同学可以点击这里免费领取

2.确立正确的技术方向

在我看来,有时候选择比能力更重要,俗话说:站在风口上,猪都能起飞。

对于程序员来说,尽早地做好自己的职业规划,确立发展路线,是很有必要的。我认为,同样的实力,善于发现和判断机会的人,永远占据先机。

程序员的发展方向,大致分为三类:

  • 架构师
  • 项目经理
  • 管理者

首先抛开管理者不谈,就前两个方向来说,对你的技术水平和工作能力都有一定的要求,首先我们要清楚,技术是根基,其次才是能力偏差。

比如,架构师需要你具备完善和扎实的技术体系,具有一定的修养,具备较好的系统分析和设计能力,具有丰富的开发项目经验;而项目经理,除了技术要过关以外,还应该了解软件开发的的各个环节、了解开发的各种技术和运用、了解开发队伍人员的水平和特点。

3.学习如何阅读别人的代码(笔记)

不知道为啥,很多开发人员总有一股“迷之自信”,抱着“除了我,其他每个人写的代码都是垃圾”这种想法,用杨笠的观念:为什么你明明很普通,却又那么自信?

实际上,能够在别人的代码之上继续工作是一项有多重好处的伟大技能。因为不论以前的代码是多么混乱或者考虑不周,你都需要去扩展它。

由此,它会对你两方面都带来益处:

  • 能够阅读他人的代码是一个了解什么是糟糕设计的好机会。
  • 能够阅读别人乱七八糟的代码的话,也使得在需要更新的时候变得容易。

我个人会阅读一些大佬的技术笔记,其中就包括了一些开发技巧和源码:

(篇幅有限,只展示部分了,笔记包括Spring全家桶、Redis、K8s、JVM等各个知识点)

SpringCloudAlibaba笔记

Spring Cloud微服务实战

K8S(kubernetes)学习指南

redis深度笔记:核心原理和应用实践

4.培养自己的场景化思维

在工作的前两年里,我一直都在培养自己的场景化思维,这种思维是很难在大学学习中复制到的。何为场景化思维?也就是会主动去思考最终用户可能会如何错误地使用你的软件。

由于大部分编程都是维护性的,因此它通常意味着更改与其他代码高度耦合的代码。即使是简单的更改也需要跟踪对象、方法和 API的每一个可能存在引用的地方。否则,很容易意外地打破你没有意识到的模块连接。即使您只是更改了数据库中的数据类型。它还包括在进入开发之前通过边缘案例和整体化的高级设计进行思考。

对于开发新模块或者微服务的场景就更加复杂,花时间去考虑所构建的操作场景非常重要。想想未来的用户可能需要如何使用您的新模块,他们可能会如何不正确地使用它,可能需要什么参数,以及未来的程序员是否会以不同的方式需要您的代码。

简单的编码和编程只是问题的一部分。创建一个在你的电脑上运行良好的软件是很容易的。但是部署代码可能出错的方式就会有很多。一旦进入生产环境,就很难说代码将如何使用,以及哪些其他代码将附加到原始代码中。五年后,未来的程序员可能会对你的代码局限性感到沮丧。

写在最后

这份笔记上述的知识点我甚至都没有完全吃透,只掌握了80%,就能够完成大幅度的涨薪,虽然我在学习的过程中放弃了我所有的休息时间,甚至上班的时候都在摸鱼搞学习(长时间坐着没有运动,甚至得了痔疮…),但是我觉得是值得的,我牺牲了6个月时间,收获的不只是涨薪,还有一个努力学习,积极向上的心态!

以上【阿里P6 Java开发架构师学习笔记】整套学习资料均免费分享,需要的小伙伴,点击下方的蓝色字体可以获取,欢迎来白嫖哈~

点击这里的蓝色字体可以直接获取

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值