如何技术探索与实践?一个深圳南山区考公程序员的血泪复盘
作者:李小码(化名),31岁,深圳南山科技园某中型互联网公司后端开发,月薪22K,房租3500,备考2024年广东省考已有8个月。
开篇:凌晨两点的阳台,一杯冷掉的美式,和一道LeetCode Hard
去年十月的一个周五晚上,我坐在阳台上,盯着手机里刚收到的一封拒信——“很遗憾,您未通过本次公务员考试资格审查”。
不是笔试没过,也不是面试挂了,而是连报名都没报上。
原因?报考岗位要求“计算机类”专业,而我的毕业证写的是“信息与计算科学”——听起来像数学系,实际上课程表里Java、数据库、操作系统全齐了。但系统自动审核不过,人工申诉石沉大海。
那一刻,我盯着楼下深南大道依旧川流不息的车灯,突然觉得特别荒诞:我在这家公司写了五年代码,带过三个实习生,重构过核心支付模块,还顺手搞定了高并发下的库存超卖问题……结果连一张准考证都拿不到?
老婆在屋里喊:“还不睡?明天还要上班呢!”
我回了句“马上”,却点开了LeetCode,刷起了第315题《计算右侧小于当前元素的个数》——一道典型的归并排序+索引追踪的Hard题。
为什么一个想考公的人还在刷算法?
因为我知道:就算考不上,我也得保住这份工作;而保住工作的前提,是别在技术上被年轻人甩开十八条街。
项目案例剖析:从“能跑就行”到“经得起推敲”
说回正题——如何做技术探索与实践?很多人以为这事儿得靠大厂光环、开源项目、K8s集群……但对我这种夹在房贷和考公之间的普通程序员来说,真实的技术成长,往往发生在最不起眼的需求里。
案例一:一个“导出Excel”的需求,逼我重读《高性能MySQL》
去年三月,产品提了个看似简单的需求:“后台订单列表加个导出功能,支持筛选后导出。”
我一开始心想:不就是SELECT * FROM orders WHERE ... 然后用Apache POI写个Excel嘛?十行代码搞定。
结果上线第二天,客服电话被打爆——财务同事导出3万条数据时,系统直接OOM(内存溢出),服务重启三次。
我查日志一看:好家伙,前端传了个空筛选条件,后端没做分页限制,直接把全表80万订单拉进内存生成Excel。
当时真的很焦虑。那周我刚交完公积金贷款月供(6800块),老婆又在备孕,哪敢出生产事故?
于是周末没去图书馆刷行测,而是窝在出租屋重读《高性能MySQL》第4章——“查询性能优化”。书里那句“永远不要相信前端传来的参数”简直像在指着我鼻子骂。
我做了三件事:
- 强制分页:哪怕导出,也按每批5000条循环查询;
- 流式写入:改用EasyExcel的SAX模式,内存占用从2G降到200MB;
- 异步队列:导出任务扔进RabbitMQ,前端轮询状态,避免HTTP超时。
上线后,财务大姐发微信:“小李啊,现在导出快多了,谢谢你!”
我没告诉她,这背后是我熬了两个通宵,还自费买了本《MySQL是怎样运行的》电子书(花了39块,心疼)。
开发心得:
技术深度,往往藏在“脏活累活”里。别瞧不起CRUD,能把CRUD写出花的人,才是真高手。
案例二:面试题挑战逼我啃下《Java并发编程实战》
今年春节前,公司突然宣布要裁员10%。虽然我绩效A,但架不住“35岁危机”的阴影笼罩整个科技园。
为了给自己留条后路,我开始偷偷投简历——不是为了跳槽,而是验证自己的市场价值。
结果第一次面试就翻车了。
面试官是个戴黑框眼镜的架构师,上来就问:“说说ConcurrentHashMap在JDK8中的扩容机制?”
我支支吾吾说了“transfer方法”、“多线程协助扩容”,但他追问:“如果两个线程同时发现需要扩容,怎么协调?sizeCtl字段的作用是什么?”
答不上来。
回家路上,地铁1号线挤得像沙丁鱼罐头。我站在车厢角落,看着窗外腾讯大厦的霓虹灯,心里发虚:我都工作五年了,怎么连基础并发模型都说不清?
当晚我就下单了《Java并发编程实战》(俗称“JCIP”),花了328块,咬牙买纸质版——因为电子书我根本看不进去。
接下来一个月,每天下班后雷打不动两小时:
- 周一~周五:精读一章 + 写Demo验证;
- 周末:在牛客网刷“并发面试题挑战”专题。
最有意思的是第7章讲“非阻塞算法”,我照着书里的Treiber Stack自己实现了一个无锁栈,结果在JMH基准测试中比synchronized版本慢了3倍——理论很美,现实骨感。
但正是这些“失败”的实践,让我真正理解了CAS的ABA问题、内存屏障的作用、以及为什么Doug Lea要在ConcurrentHashMap里用sun.misc.Unsafe。
后来再去面试,再没人能用并发问题难住我。虽然最后没跳槽(考公要紧),但技术自信回来了。
教程与书籍:别被“速成”骗了
说到学习资源,现在网上教程多如牛毛。B站有“三天精通Spring Cloud”,知乎有“零基础转码攻略”,小红书还有“程序员副业变现100招”……
但老实说,对在职备考的人来说,时间碎片化到极致——早上地铁背常识判断,午休刷图形推理,晚上要么看书要么做题,哪有整块时间看2小时视频?
所以我摸索出一套“精准打击式学习法”:
- 以问题驱动:遇到啥学啥,绝不提前囤课。比如最近复习“数字政府”建设,我就专门研究政务系统的权限模型(RBAC vs ABAC),顺手看了《微服务安全设计》第三章。
- 优先选书:视频太慢,文字可跳读。我的书单就三本常驻枕边:《Effective Java》《深入理解Java虚拟机》《领域驱动设计》。每本都翻烂了,书页卷得像泡面。
- 用面试题反向牵引:每周抽一晚做“面试题挑战”,错题整理成Notion卡片,睡前过一遍。比如上周错了一道关于Redis持久化的题,立刻翻《Redis设计与实现》对应章节。
别信什么“三个月从入门到架构师”。真正的技术沉淀,是每天15分钟的死磕,是把一个知识点嚼碎了咽下去,而不是囫囵吞枣。
转折:从“被动防御”到“主动构建”
今年五月,我做了一个决定:不再只为了应付工作或面试而学技术,而是围绕“考公可能用到的技术场景”主动构建知识体系。
比如:
- 公务员系统常用单体架构 → 我深入研究Spring Boot自动装配原理;
- 政务云强调安全合规 → 我啃完了《网络安全法》和等保2.0标准;
- 数字政府推“一网通办” → 我用业余时间搭了个简易的SSO(单点登录)Demo。
最夸张的是,上个月我还用Flask+Vue写了个“行测错题本”Web应用,支持自动归类错误类型、生成薄弱点雷达图——不仅练了全栈,还顺便提升了自己的行测正确率。
老婆笑我:“你这是考公还是创业?”
我说:“万一考上技术岗呢?总不能连电子政务平台都说不出个一二三吧。”
思考:技术人的“Plan B”不该是逃避,而是底气
写到这里,可能有人会问:既然这么拼技术,干嘛还要考公?
说实话,我羡慕大厂P8的薪资,也向往自由职业者的潇洒。但在深圳,31岁、已婚未育、父母在老家县城……稳定,有时候不是选择,而是责任。
但我不认为考公就是“躺平”。恰恰相反,越是准备退路,越要把主业做到无可替代——因为体制内也在数字化转型,懂技术的公务员越来越吃香。
更重要的是:技术探索本身,就是一种抵抗焦虑的方式。
当你能用代码解决实际问题,当你的方案被同事认可,当你在面试中从容应对难题……那种“我还能掌控局面”的感觉,比刷100道言语理解题都管用。
展望:无论上岸与否,代码和行测都要写下去
现在,我依然每天6:30起床,先刷30道行测题,再看15分钟《Java并发编程的艺术》;晚上下班后,要么去图书馆自习,要么在家调试那个“政务审批流程模拟器”。
房租还是3500,工资涨到了22K(感谢去年那次导出优化),考公资料堆满了半个书架。
我不知道明年春天能不能穿上那身制服。但我知道:
- 如果上岸,我会是那个能跟技术供应商对需求、能看懂系统架构图的公务员;
- 如果没上岸,我也有足够的技术资本,在这个卷成麻花的行业里继续生存。
技术探索与实践,从来不是为了成为别人眼中的“大神”,而是让自己在任何风暴里,都能稳稳站住。
就像我常对自己说的那句话:
“代码要写,行测也要刷;今天重构业务模块,明天申论写‘科技赋能基层治理’——两手抓,两手都别软。”
最后送大家一句真心话:
别把“考公”和“搞技术”对立起来。在这个时代,复合型人才才是真正的稀缺品。你写过的每一行代码,刷过的每一道题,终会在某个路口交汇。
共勉。

评论 0