最近刚做完一个小程序上线,心血来潮写了一篇总结发到 CSDN 上,顺手翻了下历史文章,才猛然发现——我已经五年没在这发过东西了。
一篇篇往回看,那些文章全是读书时遇到问题后、翻遍资料咬牙记下的笔记。文笔稚嫩,排版粗糙,但那股“非要搞懂”的劲儿,隔着屏幕都能感受到。
毕业后参加工作,遇到的问题更杂、更怪,笔记也记了不少,却再没有心性把知识点整理成文章发出来。为什么?说实话,是因为怕——感觉要学的东西太多了,知识铺天盖地涌过来,总觉得“等我把这块吃透了再写”、“等我把体系搭好了再整理”,结果一等就是五年。
现在我想明白了:没有完美的时机,只有此刻。
所以从这篇开始,我会坐下来,把这些年摸爬滚打的经验一点点写下来。要是时光能倒流,我就把这系列文章送给刚毕业时的自己;要是不能,那就送给刚毕业的你们。
我毕业这五年,都干了什么
五年前我进了一家电商公司的大数据部门,做后端相关的工作。这些年经手的项目不少,主线大概有三条:
电商运营 BI 平台——后端服务开发与维护
卖家平台数据体系——实时 + 离线大数据计算任务开发
数据分析 Agent 系统——探索 AI 辅助数据分析
回首这五年,说是“摸爬滚打”一点也不夸张。从被一个 NullPointerException 搞到半夜,到后来能在生产环境宕机时一边安抚运营一边从容查日志,我不敢说自己多厉害,但至少变得遇事不慌了。
而让我“不慌”的底气,正是下面这套技术栈——它是我这几年一点点啃下来的武器库。
这个系列要写什么?(也是我的技术栈全景)
接下来的文章,我会按照下面这个目录一条条展开。
每一篇不讲虚的,只讲我踩过的坑、我理解的原理、我拿来解决过实际问题的方案。
一、编程语言——吃饭的家伙
Java:我的主力语言,从并发到 JVM 调优,该趟的浑水都趟过了
Golang:后来入坑,协程和通道的思维转换让我重新理解了“并发”
Python:脚本粘合剂 + AI 应用的主力,写得快比写得优雅更重要
这一块我会重点讲:语言只是工具,但工具的边界决定了你的效率。
二、数据存储——不同场景选不同刀
服务存储(在线业务)
MySQL:事务、索引、锁、分库分表,该背的八股我全在线上验证过
Redis:缓存击穿、雪崩、穿透,还有那些“用缓存扛了 QPS 翻十倍”的爽事
大数据存储(分析 & 海量数据)
Clickhouse:OLAP 列式存储,千亿级数据查询秒级响应是怎么做到的
Druid:时序聚合场景下的老牌选手
HBase:海量 KV 场景下的 RowKey 设计,一个没设计好就等着 Region 热点了
这一块我会重点讲:存储没有银弹,选错存储比写烂代码更致命。
三、网络通信——服务之间的语言
HTTP:从 RESTful 到连接池配置,那些被超时坑过的日子
RPC:内部服务调用的效率之选,序列化、超时、熔断,一个都不能少
这一块我会重点讲:本地调用可以任性,远程调用必须带敬畏心。
四、大数据计算——离线 & 实时两把刷子
Flink:实时计算的状态、窗口、Exactly-Once,我拿数据一致性换过教训
Spark:离线批处理 + 一些 SQL 优化,百万级任务调度的那些事
这一块我会重点讲:数据量一大,复杂度就藏在 shuffle 和倾斜里。
五、大模型应用开发——新战场,老经验
LLM:大模型的基础能力和调用范式
RAG:检索增强生成,让大模型“长”出私有数据的手脚
MCP/Agentic:从“一问一答”到“自主执行任务”的演进
这一块我会重点讲:AI 没有取代我,但会用 AI 的人会。
为什么我要把这些写下来?
原因有两个,都很自私:
第一,检验自己。
有些知识你说学过吧,确实学过。但如果没有系统整理过,很多细节是漏掉的——以为自己会了,其实还差得远。写作是对抗“学会幻觉”最好的方式。
第二,如果能帮到一个人,就值了。
哪怕你面试时刚好回答上一个相关问题,或者工作中用这些知识解决了一个实际 bug,那这篇文章就没白写。
开篇正文
这篇文章作为开篇,我不想这是一篇口水文章,下面就上干货,先讲讲大学里哪些课程比较重要,为什么它们比较重要?(以下纯属个人站在后端开发角度的观点)
一、计算机组成原理
很多人第一反应可能是哪门编程课,大学时候计算机组成原理可能也只是随便学学,也没怎么当回事,但我却想要把这门课放在首位。因为作为程序员,计算机可以说是我们工作中的亲密合作伙伴,如果你对它都不了解,有什么脸面说自己是计算机专业的。
你要知道,计算机里都有哪些组件,分别在工作中承担着什么样的角色。比如 CPU,它是我们程序中计算的核心组件,CPU 不够会导致你的程序无法正常地处理来自用户的请求;同样的,只有知道内存和外存的性能差异,你才知道在写程序中哪些数据应该放在内存,哪些可以用的时候再加载,以及遇到程序 OOM 了你要怎么处理。可以说,计算机组成原理是计算机专业的基石,它是你理解一切问题的根源。
二、计算机网络
在大学中,我知道很多学校的这个计算机网络课都是教一堆的概念,很多人也很烦这些要记的概念,感觉又多又没用。只有当你的服务请求突然 502 的时候,你才会知道,计算机网络是互联网应用的基石,这个网络崩了,你写再多的代码也都白费,因为请求根本到不了你的程序。
三、数据库
以前天真的我一直没意识到数据的重要性,一直专注于写逻辑代码,因为在大学中,很多程序的数据都是我们自己造出来的,要多少有多少,根本不理解大佬们说的数据是昂贵的。直到进了大数据部门,看着各种业务数据经过数据分析师的分析之后形成一条条转化成金钱的运营决策,再进一步转化成销售额的时候,我才意识到数据简直就是程序的灵魂,如果没有数据,你的系统就是一堆空跑的代码,没有任何意义。甚至有时候,数据的及时性和正确性都可能影响数据分析师对现在局势的判断,导致做出错误决策,给公司带来损失。
而数据库课程教什么呢?教你数据模型、如何设计数据库、事务、SQL 设计等。但这其实远远不够,关于数据库你还要知道索引、数据备份与同步等,甚至进了公司,你还会发现在设计数据库的时候,有时候甚至需要反范式,主要是为了换取性能,比如公司一般会要求不能使用外键。
四、数据结构与算法
这一步才终于到了我们工作的主要内容,写代码。这是最后但并不是最不重要的课程,这是我们日常工作必备的技能,虽然说现在有了 AI 辅助编程,但是代码这块硬实力还是不能丢,因为上了真实项目之后你肯定会发现,AI 辅助编程工具有时候真的很智障,它就像游艇的动力马达,而你才是那个导航的总舵手,它可以让你不用手动去摇桨,但你必须把握前进的方向。这也就是为什么现在面试还是没有取消手撕算法题的原因,你只有自己会写,你才知道 AI 写的对不对,有没有什么潜在的问题。
同时,数据结构与算法可以帮助我们更好地理解其他的知识,比如栈、队列、哈希表等,在很多计算机系统中都有广泛的应用,算法更不用说了,好的算法有时候可以用最少的资源来实现承载更多业务的服务,在这个行行都在追求降本增效的时代,简直就是老板梦寐以求的梦中员工啊。
写在最后
以上列出的只是大学里有教的课程中对于计算机专业比较重要的内容,并不代表其他课就不重要,也不代表着学了这些就够了,路漫漫其修远兮,知道了这些只能算是入门了,后面还有分布式系统、大数据、高并发、虚拟机调优、sql 调优等等要学的,但是不要慌,还记得高中时学过一篇文章,其实就是要“走一步,再走一步”,最后回头就会发现,原来自己已经走了这么远,而那一个个看似巍峨的小山峰,不过是托举你前行的垫脚石~
下一篇,我想讲讲电商平台的系统架构(或者你想先听哪个?评论区告诉我)。