其实不需要把语言分的这么清楚,技术应该分为两大类,然后再往这两大类里面闯,从服务的对象来看可分为服务于具体业务应用(需要偏业务的知识)的和服务于底层基础设施(需要偏技术的知识)的。我们可以习惯性把这两大类叫做后端和后端的后端(没错,就是为业务后端服务的技术,比如数据库内核研发,网关基础设施建设等等)。如果要从语言中划出赛道,那么 go 和 Java 绝对是现在偏业务型的最佳选择,rust 和 cpp 是偏技术底层优化的最佳选择。以我个人为例子,我其实偏业务和偏技术相关的技术栈我都学过,我也尝试用 CPP、rust 写过业务代码(不是打工的那种,为自己而写的工具),我不喜欢 Java 那一套,个人感觉是和我的学习路径相关,最初我是以 cpp 造轮子为乐的,然后通过 go 语言接触了业务代码,后面也尝试用 Java 写过业务,给我最大的感触就是,Java 各种框架的使用,会让我对程序运行的底层逻辑产生很大的混淆,框架用着虽然简单,但一出现问题就会一脸懵逼,就算是找到了解决方案,也不能让我的大脑清明,所以我便弃之不用。反而是 go 语言些业务代码更让我舒适,完成任何功能的编写我都能很清楚的知道发生了什么。偏技术的代码编写,我最初是习惯用 CPP,最开始其实都是注重算法的写法,没有用到一些奇淫技巧,后面逐渐关注和了解 cpp 的新标准(就算我现在几乎不怎么用 CPP,我也经常看 cppcon 上面的分享),同时也经常关注开源界的很多库实现,像是打开了一个宝藏库,比如我看 cppcon 中某一期谷歌团队对 hashmap 的分享,同时也是他们开发的 cpp 通用工具库 abseil 中 hashmap 的实现,然后我就跑去 GitHub 上看了源码实现,不禁赞叹,然后还写了一些笔记,之后学 go 语言的时候,我也会尝试去翻一些 go 语言内置 hashmap 以及 sync.map 的实现解析的帖子,然后自己再做总结,后面又基于 cpp 写了一些库和实践(各种网络模型库以及课程 lab)。当你拥有一些底层能力的时候,你总会产生这些到底有什么实际作用的想法,更具体一点就会想这玩意怎么找工作啊都没有具体的业务实践?所以我也开始对实际的业务产品的实现很感兴趣,在以兴趣为导向下,大二下开始学了 go 搭建了一个个业务系统,记得应该写过聊天以及远程控制以及短视频的后台(其实很早就学过,只不过用得少),有了后台,也并不能算作是一个完整的产品,由于比较讨厌学习前端,所以我又学了 flutter 作为跨端的图形化玩具,至此,对于整个互联网应用运行的链路都有了大致的了解,每次写业务系统,只有在对于一个完整的功能实现以及架构设计的非常好的时候会有极大的正反馈,其余时间都会感觉很无趣(重复劳动),于是尝试继续学习底层的 lab(分布式相关),学这个相关的内容时,我开始尝试使用 rust 语言来进行实践,有了 CPP 的基础,学 rust 还是非常迅速的,我尝试使用 rust 重构之前写的业务系统,前端用 flutter rust bridge 来调用 rust 实现,后端把 go 用 rust 重写,由于有之前的一些经历,在写 rust 时,我也会额外注意到一些别人可能不会太注意的性能优化点,比如把内存分配器换成 jemalloc 或 mimalloc,把 hashmap 换成前面提到的 swisstable 的实现的三方库,channel 也找了社区的最佳实现(有事没事多 star 一些库,万一哪天用上了呢?) ,后面大三下开始找暑期实习,也是四处碰壁,大环境太难了,更何况学历挺一般,但神奇的是,BOSS 里打招呼的小厂基本上都没机会(就算进面了也不知为何被刷,当然我记得好像有一个 go 的后台收了我,基本上也都是业务开发,有 go、Java、cpp),但是忙碌两星期,在某天下午,大厂官网投的简历突然集体爆发,先是小米给发了一面,然后腾讯也来了,再然后字节也来了,第一次面的小米(cpp 做偏技术的底层快应用运行框架开发),面试体验非常不错,他在面我之前就看了我 GitHub 的代码,发现我写 cpp 已经写的足够好了(特别是用了蛮多 template),所以他的问题也更多的是挖掘我对 cpp 一些特性的思考,但后面二面主管面挂了(应该是算法没写出来挂的),后面腾讯面的就也是很舒服,但也是二面给挂了(算法题都写出来了,估计排序啥原因挂的吧),但一面的面评应该很不错,不然也不会有后面被捞然后成功拿 offer 的故事了,字节是我最意难平的,只能说也是无缘吧,后面就是我腾讯被捞,然后面试官问的问题以及我的表现都比较契合,最终拿下了 offer。我个人的见解是,无论你校招进的是正常的业务开发还是鸡架相关岗位,你把底层内功修炼好,把眼界放宽到开源工业界,都是一名双非进入大厂的最大杀器,举个最简单的例子,面试官在问哈希表的实现的时候,普通人还在回答八股文,而你可以把业界的几个实现(比如各个语言又或是比较著名的算法)介绍给面试官听(不一定会有效,但遇到水平高的面试官效用直接拉满),所以我觉得作为校招生而言,不是需要把各种框架各种实践都拉满,而是应该从底层去理解这些框架的产生逻辑是什么,那么你在学这些东西的时候脑袋也会非常清明,学起来非常快,并且也能很好的避开很多坑。我个人认为,如果能在大学期间培养一套搜罗信息汲取知识的方法,并且把底层打牢才是最重要的,现在这个时间段一头扎入JAVA按部就班的学习,很难培养这两个技能,我反倒觉得可以学习go语言做一些业务上的实践(go比c的语法还简单,框架的使用也很简单,新手基本上也都一周能上手),然后培养一些底层知识的sense会比较好(可以多学一些国外课程的lab,应该大部分都是cpp写的,然后有空可以关注社区动态,比如cppcon啥的,然后基于这些课程lab应该会有一些reference,应该能看到一些paper,没事的时候可以读一读)
6 6

相关推荐

点赞 评论 收藏
分享
牛客网
牛客企业服务