
应届生写简历,请收起你的‘技术表演欲’——克制,才是高级感
前言
我看了网络上不少简历,编程导航里的,🐂客里的,也结合我自己的求职经历,想谈谈我对应届生写简历的看法。(仅针对实习/应届/初级开发) 我的观点是,写简历是克制的艺术。
故事
故事是这样的,你是一个计算机专业的新同学,梦想成为一个高冷帅气的理工码男/女。你了解到近几年计算机专业的行情不太好(事实上是各行各业),你早早下定决心要努力学习。你早早打破了信息壁垒,找到了学习目标,学习路线,一路披荆斩棘,打下了所有基础,并且你从已经毕业的学长也好,还是论坛上,某编程导航上的知识分享也好,你早已经意识到了实习的重要性,你甚至大二就做好了即将实习的准备。怎么实习呢,得准备简历!
开始写简历
这可能是你人生近20年来第一次准备简历,你自然要参考已有的简历,或者网上的经验帖,此时你对简历应该是什么样的毫无概念,但至少你是照猫画虎地把格式整理好了,至于内容,有些网上跟着做过的项目大抵会给你提供简历写法,你直接用了,其它人可能自己写写,或者给AI润色一下。问题就在这,对于没有上过班,亦或是正在实习纯打杂的你,不知道具体内容应该写,才是最合乎逻辑的,看着别人说,写个轮子项目加业务项目好;写个微服务的项目好,没有springcloud就感觉没亮点;没有高并发就感觉浑身难受;然后各种中间件,微服务堆在简历上,感觉心满意足,开始投递简历了。 有没有面试先不提,学历好点的怎么都有面试,学历差点的大不了投小厂,虽然只有零星几个面试。不论怎么样,真正到了面试时,感觉哪哪都不对劲,我面的是实习岗吗,给我干哪来了。。。
开始打工
不管怎么样,你也不知道为什么,突然就找到了一个实习岗,你顺利成章地收到了公司的电脑,第一天在安装环境。你到了会议室,mentor给你讲解整个业务流程,给你分配了任务,你拉了代码,连上数据库,产品原型图与idea编辑器来回切换,脑中构思你应该准备怎么写接口给前端,返回什么值。。。。 但是做着做着你就会发现,我怎么好像中间件只用过MySQL。什么redis,mq,springcloud这些高档玩意一点也没接触过,并发处理,缓存优化、异步队列、亿级流量,深分页......没听说过!每天只是crud boy,即便你看到手头上的yml文件里确实配置了seata ,mq,redis,sharding分库分表,elasticsearch, 但他们好像和你这个sql boy半毛钱关系都没有,你发现天天crud,根本没法写简历,那我秋招怎么办,我的高薪梦不就寄了/(ㄒoㄒ)/~~ 你不甘心,又想在你的简历上往你的实习项目上堆各种各样的中间件,微服务。
故事结束
算了还是不讲故事了,直接说结论吧,判断一个简历项目亮点,不是说你用了什么牛逼的技术,解决了一个牛逼的问题,而是你遇到了什么棘手的问题/场景,权衡利弊下采用了什么解决方案(解决方案里恰好包含了某个技术),达到了什么效果,对比其它方案的优劣。 再具体点说,你认为使用redis、mq、springcloud、es或者其它什么中间件/框架就代表着高技术力 === 简历有亮点吗?想象一下,如果你是面试官,看到了一份堆满技术栈的简历项目,你作何感想,你想问候选同学什么问题? 实际上,亮点不是技术本身,而是你解决了什么问题。以下是我的示例
库存扣减问题
比如想象一个经典的库存扣减的场景,电商系统的经典问题。 很自然的就想到用分布式锁去实现解决并发安全的问题,防止超买超卖(电商系统就不考虑单体了) 分布式锁基本上用redis实现,可能大多数同学也会写用redisson实现分布式锁,这也是官方推荐的解决方案,相信大多数同学redisson底层实现也看得差不多,就等着面试官问。
但是不用redis就实现不了这个问题吗?因为作为卑微的实习生,你手中没有各种中间件的使用权。 用MySQL的乐观锁版本号来解决行不行?加一个version版本号的字段,扣减库存的时候带上当前的版本号、商品、用户id,利用数据库的特性来解决这个问题。 update table set stock = stock - 1 and version = version + 1 where id = #{id} and version = #{version}
此时,你没有redis就能轻松解决这个问题,算不算亮点呢?特别是此时如果是真实的电商系统,可能本身业务量不是很大,你没有硬上redis分布式锁,用MySQL就能轻松解决,对比redis的方案,你又能说,减少了系统复杂度,运维成本降低,增加了可维护性,更适合当前场景,显得你有思考,而不是无脑堆中间件。
即便是并发量大了,锁竞争失败多了,你还可以分散热点,再增加一个bucket字段,给一个商品库存分散到多个bucket中,扣减库存的适合随机扣减,统计的适合直接累加和就行了,又是一个经典的并发问题的解决方案:分散热点,类似于longAdder解决并发计数的思想。 面对面试官的质问,你只是微微一笑,开始吟唱你的方案(^_^)。此时你还是没有引入新的中间件,优雅地解决了这个问题,因为你只是个卑微的实习生,没有那么多使用中间件的权限(╯‵□′)╯︵┻━┻。
RAG语义歧义问题
AI应用开发是目前的热门方向。但是你的简历上只写了我的智能体用了RAG减少了AI幻觉,用了XXX MCP增强了AI的能力,使其有XXX的能力。看起来索然无味。
但是有一天,你在整理RAG文档时,发现AI读取文档输出了一些奇怪的内容,导致结果和预期大相径庭。 原因是文档里出现了“老婆饼”这个关键字,ai分不清老婆饼里到底有没有老婆,有没有饼。
1.于是你在检索文档前,用了小型AI先重写文档内容,消除歧义。 2.提前准备好解释文档存入向量数据库,当用户提问关键词时及时召回 3.在提示词上加入防幻觉指令,避免AI瞎猜
于是你拍着胸脯说前后AI幻觉出现率减少了90% O(∩_∩)O
以上的案例的共同点是,我没有强调自己用了什么技术,而是基于某某场景出现的问题,我提出了一个合理的解决方案。所谓的那些高端技术不是不能用,而是你要给出你的合理性。你需要回答一个问题:为什么有更简单的方案你不用,非得用那个高级技术?
不要做什么
目前我的所有建议都针对项目经历,仅供参考,一家之言(叠甲(^_^)) 1.万金油类的简历写法:什么项目都能写上去,你发现只要换个项目名字,这些内容都用的上。 2.过度强调微服务/DDD架构:最多在技术栈层面上点一下用了XXX,但凡你学过微服务都知道,你只是引入了个pom文件,配置了yml文件,写了点样版代码,在可视化面板上配置了一下,这不是技术含量的体现。真正用微服务框架解决问题的商业化场景轮不到现在的你来做,这些都是高级开发和架构师的工作。 3.设计模式尽量少写,没什么好问的,你也不好回答,并且设计模式本身很难有一个量化的标准。 4.登录功能别随便写,除非你真的做过。登录是我认为做系统最复杂的功能之一,不是你随便在网上抄个项目你就能理解的,你不可能说明白不同类型的系统应该如何设计好的登录功能,怎么解决遇到的问题 比如: 你们用什么认证方式?Session / JWT / OAuth2?” “Token 怎么存储?前端 LocalStorage 有 XSS 风险知道吗?” “怎么防 CSRF?SameSite 怎么配?” “密码怎么加密?bcrypt 还是 PBKDF2?盐值怎么管理?” “单点登录(SSO)怎么实现的?CAS 还是 OIDC?” “登出怎么做到全局失效?JWT 无法 revoke 怎么办?” “多端登录冲突怎么处理?踢人逻辑?” “如果 Redis 挂了,用户全掉线,有降级方案吗?”
企业里基本上都是经验丰富的中高级开发负责的。我见过为了处理一个登录上的bug,几个高级开发+架构师连着吵了几天。 5.轮子项目:针对这类项目看法有点多,懒得展开了,以后单独写一篇聊聊我的看法
结论
简历是克制的艺术,简历的精彩程度并不由你用了多少高级的技术决定,而是如何凸显你解决问题的能力,解决问题的能力体现在你面对问题时是如何思考的,技术选型是怎么想的,利弊权衡,再扪心自问是否是当下最优,后续有优化空间吗,应该如何再优化,最终带来了什么效果。 相信想明白这些问题,你的简历不会食之无味了。
