上次发帖还是在24年末,一晃半年过去了,我再次来到论坛,希望能寻求大家的帮助。
我的近况和这一年的探索
我是一名211本科生,将于2027年毕业。这半年我确实成长了不少,也摸索出了自己的一些方向。
回顾这半年学习与实践:
从迷茫到入门: 去年发帖时我还挺迷茫的,没学太多东西。这半年我从Java基础开始,逐步深入学习了Spring框架。通过跟着课程完成了“苍穹外卖”和“黑马点评”项目,我基本掌握了Redis、MySQL、Spring这一整套后端开发流程。我还学习了消息队列,并做了些小demo。大概在四月份的时候,我基于这些技术栈,从头开始独立开发了一个个人技术分享网站。技术栈就是Spring+MYSQL+Redis+Websocket+RocketMQ这一套。
第一次实习体验(4月-6月): 四月份我找到了一家非互联网的小型公司实习,核心业务是搞遥感那块的。说实话,实习期间任务并不多,我们团队主要对接某个研究所的需求,业务本身比较简单,改进空间不大。具体来说,项目是关于无人机扫描、跟踪和存储数据的,甚至Redis在里面都显得有点多余。我的工作主要是升级了登录模块,用Spring Security做了角色权限管理,然后修复了一些多线程bug,并把一个不必要的Redis使用改成了ConcurrentHashMap。整体而言,实习内容相对基础,几乎只有CRUD,经常带薪学习。
深挖技术原理的乐趣: 大概从今年二月开始,在准备面试“八股文”的过程中,我开始对这些“八股”背后的实现原理产生了强烈的好奇心,总想着去揭开那些“黑箱”。一开始我想实现MySQL,后来决定先从Redis入手。我的mini-redis项目(https://github.com/kachofugetsu09/redis-mini)最初确实参考了一些现有项目,但后来几乎完全是我自己独立演进和实现的。我力求与Redis官方的实现尽量保持一致,包括AOF重写、RDB持久化以及主从复制等核心功能。里面其实融入了挺多我看别的中间件学到的思想,比如说预分配磁盘空间,批量写入减少io,动态背压等,其实里面还是有我自己的思考的。基本就是个能用的单机+仅支持主从重同步的版本。用redis相关的客户端可以实现和原生一样的行为。我还尝试去实现Sentinel和Cluster,为此看了不少这方面的源码,对此有了很多了解,虽然最终因为难度较大没能完全实现。为了克服这些难点,我开始深入学习分布式理论,虽然忙于期末周,但也看完了Raft论文并完成了MapReduce的实现。在这个过程中,我学到了很多让人兴奋的知识,比如Kafka和RocketMQ如何设计零拷贝和背压机制等等。这些深入学习的过程让我感到非常快乐,这种“探索”的成就感很不一样。我的博客(https://kachofugetsu09.github.io/)也记录了我的部分学习历程。
我目前的困惑与挣扎
通过这半年的探索,我原以为自己很喜欢后端开发,但现在回过头来看,当接触到更多别人的面经和分享后,我发现自己好像并没有那么喜欢纯粹的业务驱动型开发了。那种成就感可能更多来源于完成任务本身。相反,在自己动手写mini-redis的过程中,我发现自己对Netty、如何最大限度提高性能、如何实现数据持久化、以及如何构建分布式系统这些领域产生了更浓厚的兴趣。
然而,这种兴趣也伴随着巨大的自我怀疑和焦虑。我感觉自己能力有限,仅仅是实现一个“玩具”项目都如此耗时费力。如果未来真的从事这类工作,面对真正的项目压力会有多大?更现实的问题是,我甚至不确定自己有没有机会获得这些领域的面试,更别说成功进入了。
急需大家帮忙解答的问题
我现在感觉很没有方向性,甚至有点“天塌了”的感觉,非常希望大家能给我一些具体的帮助和建议:
关于中间件开发的门槛:
进入大厂的中间件开发组,会比业务组难得多吗?
对于中间件方向,我还没来得及刷像15-445(数据库系统)这样的课程。感觉824(分布式系统)的Lab是否非常有必要全部做完?目前我只看了Raft论文并做了MapReduce的实现。我感觉其实我也不是很了解自己到底更喜欢哪个,更适合做哪个。
后端开发的备选方案:
如果最终没能进入中间件相关开发岗位,我打算继续做后端开发。那么,我现在到底应该重点学习些什么?是必须去做微服务相关的项目吗?
我目前的简历项目是一个技术网站的单体应用,虽然我对它进行了优化和完善。但我也看过一些微服务项目的教程,但还没有真正动手实操过。没有更复杂的微服务项目经验,是不是就很难拿到面试机会?
我目前掌握的技术栈是:Spring、MySQL、Redis和RocketMQ+kafka。
暑期实习的抉择与时间点:
我现在这个暑假(2025年夏季)到底还应不应该去争取实习机会?我之所以大二就开始实习,是想找到一条容错更高的路。
如果要去,我应该怎么投递呢?我现在的水平真的够格吗?正常来说,找实习比较好的时间点是什么时候?我听说89月份会比较好投一点?
我现在真的很焦虑,不知道该如何准备。是应该继续沉淀学习,还是立刻开始投递简历?这个暑假我到底应该怎么规划和利用?
实践驱动型学习的优劣与应对:
我发现自己是个典型的实践驱动型学习者:当我实际动手做了一个东西,我对某个技术点会了解得非常深入,也能横向比较其使用和底层原理。
但我的一个大问题是,我很头疼背诵“八股文”,导致很多基础知识(比如操作系统、MySQL)的掌握程度可能不如其他面试者。相对而言,我对Redis、计算机网络以及Java本身有关并发编程的掌握程度比较好。
这种知识结构和学习方式在面试中间件岗位前,是不是一个比较糟糕的问题?我该如何去弥补这些短板呢?我是应该先沉淀下来系统性学习这些基础知识,还是可以边投递边学习?
有关当前redis轮子
这个项目还有必要写下去吗,感觉就算实现了分片和哨兵是不是如果面后端也没啥用了,面中间件开发会好很多吗?真的还有必要写下去吗?
非常希望能得到大家的帮助和建议,谢谢!救救孩子吧,好迷茫。