掘金 后端 ( ) • 2024-04-19 16:34

highlight: an-old-hope theme: orange

第1次尝试写这么长的文章(经验贴?),笔者是华南地区某985的天坑研究生,本科专业是化学化工,研究生专业是高分子材料,研究方向是生物材料,自学转码两年(集中学习时间不到一年吧),春节以来找了一个多月实习,最终是收获了两中厂,几个不知名小厂和腾讯后台开发的暑期实习offer,最终也是选择腾讯,戴上红围脖。本文主要从一个非科班的视角,简单聊聊,自学转码以来以及找实习的经历。相信本文对于科班大佬可能参考性不强,但我真心希望本文能给广大生化环材同学,提供一些参考价值(哪怕只是一丝希望)。

曾经犯过的几个错误

笔者的求学路,在青少年时代一直是顺风顺水,小镇做题家,保送市一中创新班,遇到的第一个挫折是在高考,最擅长的数学考到全班倒数,最终只能去一个省内211。在这里我犯了人生中第一个大错误,为了选择211的学校名头,没有选择去省内强双非的好专业,填志愿的时候填到了化学专业。相信很多天坑的同学和我有类似的经历,高考填志愿的时候,也是自己对各行各业都不太了解,简简单单根据班主任或父母的意见参考,稀里糊涂的就填了专业。甚至为了所谓的92名校光环,做出了错误的选择。

我不知道我的这篇文章能否被高中生学习学妹看到,如果可以的话,我想劝他们在任何情况下不要报任何生化环材类专业,哪怕你真的很喜欢做实验,哪怕你是所谓的高中化学竞赛国奖,哪怕你从小励志做一名化学家,你可以去选数学物理,任何可以真正培养数理思维逻辑思维的学科,在这之后你还对生化环材感兴趣,完全可以研究生出去做这些,我们学院不乏有本科物理,硕博常青藤化学材料的高知教授。生化环材不是本科生该学的东西 ,切记切记。

笔者的第二个错误是未能听从一位好朋友的劝解,她曾在大二转专业考试,大四研究生考试之前劝我和她一起跨考cs,因为一些原因,我执拗的没有听从,再一次错过了逃离的机会。现在看来,人家当时离我而去确实正确,庆幸当时的我,没有过多的耽误人家。

笔者稀里糊涂的选择考研,稀里糊涂的选择了一个没听过的学院,稀里糊涂的从应用化学到了高分子材料,做的依旧是不喜欢的工作。大四考上研究生时,我以为我的人生就要这么稀里糊涂下去。感谢我的本科毕业论文导师,他原本是教计算机的,给我们做的毕设也是计算机化学软件相关。在其他同学在实验室闻毒试剂的时候,我得以舒舒服服的编写一些代码,这是我第一次自己去认真学一门语言——C#,之前本科只为了应付计算机二级学过一些VB,这位老师和我们说其实编程语言很好学,只是一门工具,任何一个人都可以在几个月内掌握一门新语言,真正难的是算法,是知道如何去有逻辑的解决问题。

正是这句话让我醒悟,是啊,原来所谓的天坑专业就是,他从不谈基本的数学逻辑,只是在炒菜,今天多放一点盐,明天多加两勺糖,唯一能用的科学方法是对照实验,仅此而已,在研究生初试到复试的期间,我也尝试去找一些本专业的工作,上海深圳南京的工作都有,大部分是药企,做有机合成,工资不过万,郊区,少部分电子厂?找工作的经历深深刺痛了我,原来我一直以来错的那么离谱。于是我决定做点什么,即使我已经拥有了985的研究生入场券,但是我依旧决定做点不一样的。

不交钱的培训班之旅

本科毕业后,当同学们要么沉浸在毕业快乐旅行的时候,要么准备庆祝读研的喜悦的时候,我默默地一个人回家,偷偷地开始学习计算机。当时,没有一个除我之外的人知道我的想法。

22年6月中,我先系统的学了一下C语言的基本语法,花了两周半的时间,基本掌握C语言基础语法,但是却被指针苦苦难住。这两周我除了基本的C语言学习,还大量搜集资料,知乎,b站,微信公众号,百度,甚至抖音快手。我认识到,非科班的我如果真正按照计算机专业的同学从头到尾学一遍,根本是来不及也不现实的。7月我开始学习Java,买了Java核心技术卷(I II),同时为了避免看书倦怠并且更快的入门,我还是看b站的动力节点老杜的JAVA入门视频

这段时光也是我非常开心的时光 ,老杜讲Java讲的非常好,能看出是非常有经验的老Java工程师,我几乎花了一个半月的时间学习JAVA SE基础,每天给自己定计划,例如今天看完循环语句,明天看完面向对象,JAVA集合等等。白天我跟着老杜敲代码,一行一行的敲,一开始他使用的是Editplus的编辑器,我用这种编辑器敲代码,很累很繁琐,一开始我连打字都打不明白,但是仍旧坚持下去。动力节点的视频课会布置作业,晚上我就会去完成这些作业,第2天早上的时候再去看视频,同时将笔记用Editplus进行记笔记。学习记笔记的过程是枯燥的,但是真的每天都能学到新的东西,从一开始运行hello world,在黑色的命令窗口看到 hello world,然后是Java语言的打印星号,打印乘法口诀表,再到后面的面向对象,集合,IO流等等。感觉自己每天都在进步,每天都在变得更强,这种感觉是大学4年都不曾有过的。

这里尤其要建议,如果你也是非科班的同学,千万不要乱跳视频,也不要所谓的二倍速四倍速,一分钟一分钟的看,一秒钟一秒钟的看,一行一行的敲,偶尔回顾是最好的。基础不牢,地动山摇!我有在b站加过几个自学Java的朋友,有几个说什么一天刷完SE,两天刷完Java web,多少倍速多少倍速的,最后他们都没完全坚持下来,欲速则不达,慢慢来即可。这个过程当中加到一位优秀的知乎博主公众号博主,天坑转码徐小虾,也是我的学长,他也是一路从天坑走到了腾讯,在他那边我也学习到了一些新的经验,同时获得了很多后端的电子书籍,受益良多。

这里我是花一个半月的时间学完了JAVA核心卷一的内容,需要掌握的内容有(Java基础语法,面向对象,类抽象类接口的使用,继承和多态的编写,集合,IO流,基础Socket编程,异常、注解、反射,简单多线程,简单锁知识等等

八月半开始,我开始学习数据结构和算法,买了《算法第四版》,清华大学出版的《数据结构教程》 ,视频看的是韩顺平老师数据结构算法,白天看视频,跟着敲算法,晚上默写。链表,二叉树,图,一种一种去学,一种一种去敲,怎么构造,怎么遍历,怎么插入等等。同时同步开始学习动力节点的MYSQL教程,等到九月开学初,已经基本学会了简单的数据结构和基本算法实现,当然仅仅停留在会默写,离会运用还差很多,数据库方面能编写简单的SQL语句了,也会了JDBC。

9月份终于开学了,第一次来广州见到了新室友,大家都在开心的玩,开学那几天也没什么事情,大家都在组团打游戏,我也很想参与进去,但我知道我自己有更重要的事情去做。导致宿舍开黑的时候总是少一个人。如果不是因为我平时非常开朗,喜欢说话,估计舍友们都会觉得我是有什么心理疾病了。

9月份开始,我白天接着JDBC,开始学习MyBatis,之后开始学习Java Web后端基础Spring框架和SpringMVC框架,Netty。白天也是看动力节点的视频,晚上开始刷leetcode,一开始刷题的过程是煎熬的,非常清楚的记得第1题两数之和,无论怎么做都超时,打开题解,看到使用哈希表的那一刻,瞬间感觉整个人的智商受到了侮辱,也确实哈希表在系统学习算法的时候有去学过,但是真正运用到一道题目,能否想起来那又是一个新的问题。

我的第一个项目

9月底的时候我已经能够掌握基本的Java框架和后端编程技巧,leetcode也刷了几十题。这个时候我参加了阿里巴巴的终端训练营项目,这个项目本质上是教前端的比较多,前期的网课也都是前端js、flutter、react等等。在训练营的前期,我自学了前端相关的知识,html、css 、js三件套,react、vue等框架,这部分限于时间原因,确实没有学太多,也发现自己对前端并不太感兴趣,但是了解了前端,至少让我了解了一个Web应用,从无到有,从前端到后端整体逻辑的实现,哪怕最后我不写全栈,也觉得受益良多。

最后结项的时候我们组队做一个项目,我一开始是打退堂鼓的,因为之前从未有过项目经验,又是半路出家,担心耽误大家的进度,所以一开始并没有主动组队。不过最后截止前一个北京的大学团队有一个空缺 他们想写一个全栈项目,所以我抱着试试看的态度过去了。队内五六个人,两位后端,其余都是前端。

项目过程持续了半个多月,因为是前后端分离项目,大家在项目过程中也踩了一些坑,尤其是接口方面,问题比较大。在最后交付前,我们也是熬夜通宵开发,希望实现一个很好的功能,我与前端负责人熬夜开发到凌晨五点。当时我发了一条仅自己可见的朋友圈,你见过凌晨四点的xx吗,现在想到,也是眼睛一酸,原来自己真的可以为了一件事情坚持到如此。那一晚,一直到六点半,我们才差不多实现了所有需求。前端那边还有一些小问题,前端的学妹先让我睡觉。躺了两个小时后的八点半,前端告诉我她解决了所有bug,我当时只想着,告诉她,你现在要做的就是赶紧去休息,后面的项目跑通都由我来。

为了项目更好的展现,阿里那边同意我们延迟两天交项目,于是第二天,我准备将我们的项目打包到服务器上线,同时将Web项目打包成安卓app。这个过程也遇到了巨大的困难,大家都是第1次做的,晚上9点多的时候组长说不上线也没关系,没有app也没关系,大家休息吧。我说好,然后一个人搞到了凌晨五点,遇到不懂的我就去查最终我成功了,成功上线,成功做成安卓APP。

最终我们的项目获得了答辩第一名,我们获得了证书还有奖杯🏆,那是非科班的我第1次获得编程类的奖杯,他的含金量暂且不谈,但是我开心的像个孩子,我感觉我找回了自己,找回了初中时代的自己(那时候爸爸说要以第一为荣,以第二为耻,同时在任何时候都要自信)那两个通宵的晚上现在想来也是感慨良多。

感谢这次的项目经历,让我无比坚定的选择了这条道路,也认识了第一批计算机相关的好友。他们很努力,都非常棒,见贤思齐焉,和他们一起努力去完成一件事的感觉,是无论做多少化学实验都获取不到的。同时这一次项目经历,也让我学会了Git代码管理,基本Linux使用,Docker,Nginx,前端基础,更好地武装了自己的技术,同时也认识到自己的不足。

第一次面试经历

这次项目经历之后,我开始一方面着重学习Redis,消息队列等中间件技术,一方面加紧学习算法,在刷题的过程当中逐渐了解到动态规划,记忆化搜索,单调栈,优先队列等数据结构和算法。同时也改变了我的刷题策略,之前是从前往后刷,后来发现不行,根据总结的经验帖,应该是分门别类刷,面试前才集中刷hot100。

在这个过程当中我认识了几位算法刷题博主,宫水三叶灵茶山艾府,起因是我在看题解的时候我发现他们经常活跃在各大题解,同时对不同的题型有一些总结。于是便关注了他们的公众号,b站视频,跟着三叶姐进行每月刷题活动。同时开始跟着灵茶山艾府(灵神)刷他的基础算法精讲。慢慢的,我的刷题量也到了三位数,能够保证90%秒简单题,一半一半解中档题,少部分情况下运气好能做困难题。同时也形成了自己的刷题库和错题本。

22年11月份的时候,我开始投自己的第1份实习,我不知道这算正确的决定还是错误的决定,现在回想看来有正确的部分也有错误的部分。很幸运的被字节约面试,为了好好准备,约了两周后。最终面试的时候可以说,除了最终的算法题,其他的答的都不太行,操作系统,计网等基础比较薄弱,所以最终也没有通过,一面挂,相信这次的面评也不会太好,因为今年投暑期实习字节对我基本都是秒挂,这或许是错误的部分。这次面试正确的部分在于他让我知道了自己其他欠缺的地方在哪里,于是我开始恶补基础知识。因为之前学习都是比较功利性的,从语言到框架再到算法,还并不算真正的去进入计算机行业。于是后面我开始学习计算机组成原理,操作系统,计算机网络。

这个时候我研一上学期主要是在上课,于是我上课的时候就带操作系统和计网的书,老师在台上讲高分子物理,高分子化学,同学们在台下记高分子物理,高分子化学,我在自学进程调度,死锁,内存,文件管理,网络协议栈,http,tcp-ip,一边学,一边记笔记。选择的教材是谢希仁计算机网络和汤小丹操作系统。晚上没课的时候刷算法题,同时系统性的去学一些新算法(迪杰斯特拉算法,kmp等等,查到的经验帖说这些算法面试大概率不会考,但是依旧奔着去学习和了解,但当涉猎)因为疫情,十二月我便离开广州,一离开之后疫情也就放开了,很奇妙,我有了一个很长很长的寒假。

Go语言项目经历

寒假里,我借了图书馆的《head 设计模式》,《数据库设计与调优》,一方面学习设计模式,另一方面更针对性的去了解数据库,同时继续复习中间件的内容,但是一直苦于没有项目去实践这些中间件。

于是我参加了字节跳动的青训营项目,也是在这里,我接触到了另一群小伙伴,掌握了另一门对我非常重要的语言——Go。字节跳动公司主要使用的技术栈就是Go,很少有Java,之前面试的部门也是Go,不排除面试不过有技术不匹配的原因,毕竟谁愿意等你一个非科班的学生去转语言。青训营的前期就是跟着直播课去做一些学习,写一点稀土掘金的博客,然后系统的学习Go语言,有了Java的基础,Go学的很快,一周左右就掌握了基本语法,再一周学习Gin框架和Hertz框架,期间跟着青训营的课程了解了微服务和分布式架构,手写了一个规则引擎和简易的秒杀系统,了解了Jmeter、ab、pprof等测试工具,对测试开发有了一定的了解。最终组队做了一个模拟抖音项目。

模拟抖音项目我是和之前阿里巴巴终端训练营的后端学妹以及几位新朋友一起做的,在这个过程当中也是认识了不少大佬,其中还有对网安和密码学有研究的大佬,教会了我爬虫和抓包,三人行必有我师焉,结交的朋友越多,能学到的东西也会越多,深以为然!抖音项目最终也取得了不错的成绩,这个项目也投入了比较多的心血,使用了Redis、消息队列等技术,既是学习也是复习,这个项目之后我学会了一门新的语言Go,也有了对应的后端项目,这为我的简历增色不少,也是我能够进入腾讯的最大仪仗之一,因为今年找实习以来,腾讯之所以捞我那么多次,都是因为我有Go相关经历。

一边实验一边学习

字节青训营之后,我进入了很长的真空期,原因是因为疫情过去了,老师也给压力了,开始跟着师姐做本专业的实验,做高分子的纺丝。无聊且毫无逻辑的实验让我愈加强烈的想要逃离,由于我是做生物方向的,后期需要做细胞和动物,活生生的,把生化环材占了三个。在做实验的间隙,还要去完成老师的琐事,各种报账,报表,文献调研,完全消磨了我的热情。经过一年的时间,我也只是系统的刷算法题,复盘优化项目,继续学习新的技术 从23年开春到24年初,我一边做材料类的实验,一边敲代码,参加了华为软件精英挑战赛,认识了不少算法大佬,尽管最终没有获得名次,但也深感受益良多,通过优化算法,看着自己的排名,一点点上升,分数一点点提高,这种感觉远比重复的实验需要开心,远比拿着比自己还值钱的仪器做表征开心。

在此期间还学了Python,了解了机器学习,同时也因为一个契机开始去了解意识科学,去了解一切感兴趣的东西,兴趣是最好的老师(这句话永不过时)!同时这一年里gpt横空出世,我对AIGC和大模型很想去了解,在这个过程当中认识了夏天大佬(知乎:夏天),接触到很多AIGC的知识,同时在夏天大佬的群里也了解了很多计算机专业更丰富的东西。我开始利用AI辅助我的学习,遇到不懂的算法题,可以用gpt帮我去分析,遇到一些晦涩难懂的源码,可以通过gpt帮我去逐行一句一句的理解,解决了长期以来学源码难的问题(这个方法大家或许也可以参考)。

暑期实习之旅

2024年过年结束,就开始优化自己的简历,二月底开始投实习,海投,主要集中在互联网大厂,阿里系,腾讯系,字节,美团,京东,携程,b站,米哈游等等大厂,还有数不清的中厂和小厂。两天一测评,三天一面试,五天一笔试。这个过程是枯燥且乏味的,有很多公司的测评就很耗精力,再加上笔试的算法题,往往也和leetcode不太一样,需要付出更多的时间准备。我从3月开始,全面复习八股,主要看的是Java Guide和小林coding,辅以我的gpt进行学习。算法方面,全面复习,面试常见150和hot100。主要面了腾讯美团阿里等大厂,历经二十多轮面试,其中光腾讯就面了九次四个部门,九战腾讯,最终拿下了腾讯offer,戴上红围脖,在这个过程当中,一面二面hr面,录用评估,每个环节都胆战心惊,吃不好睡不好。不过一切都是值得的,自此我的暑期实习面试也告一段落,彻底拒掉了后面的面试。

在这里我总结实习面试的几点经验:

  1. 宜早不宜迟 不要觉得自己没准备好就先不投,除了少数很看面评的厂,其他的公司完全可以用来当练手,查漏补缺,很多面试官拷打你的项目比你更能清楚地知道自己项目的缺陷在哪里。我在第3次面腾讯的时候,面试官指出我项目中的不少问题,给了我一些建议,同时我之后也自己进行了一些总结和学习,恰好第4次面的时候面试官也问到了类似的问题,我就答的很好,所以我第3次面试挂了,反而帮助我第4次面试过了,面试也是一个学习的过程,宜早不宜迟!
  2. 宜多不宜少 一定不要觉得自己先投一两个试试水,觉得没问题再海投,直接广撒网,才能多捞鱼,我做了100多个测评,却只收到了20多家的笔试,只参加了四到五个公司的面试,海投才能多面,多面才有机会!
  3. 十足的准备 不要抱有侥幸心理,对于面试考察的每一个层面,都要有所准备和了解,常规八股,项目的打磨,场景题,算法等等,八股和算法往往是大家比较重视的内容,项目和场景题往往大家会忽略。乐观的心态和自我调解,面试过程当中会遇到各种各样的压力,面试失败带来的压力不好的面试体验带来的压力,甚至是家庭和自己的性格带来的压力,学校的老师和家人的压力。一定要保持乐观的心态,必要的时候寻求家人爱人的帮助,给自己放一天假出去玩玩等等。

5、相信自己可以掌握一切的信念 这个听着有点违心和玄学,但是真的很重要,信念会给人巨大的自信,会带给自己更好的面试状态,更灵活的思维。面试前抱着舍我其谁的自信,如果你针对某件事情,有不得不完成的理由,那么这件事情你大概率就能完成,只是每个人心中这个不得不完成的理由都不太一样。有些人是家人,有些人是恋人,有些人是自己。

写给天坑转码同学的话

行文至此,我的天坑转码之路,已经回顾的差不多了。总结归纳一下,给有志于转码的天坑同学一点建议吧:

  1. 了解自己的内心 如苏格拉底所说,认识你自己!了解自己真正喜欢和需求的是什么?如果你真的醉心于科研,并已经取得一些论文成果,你热爱实验,你一定会对我的这篇文章从各个角度加以批驳,其实没有必要,因为事实上,中国的生化环材行业需要的也确实是你这样的少数人,请继续加油!如果你是一个喜欢赚钱的人,仅仅只因为本行业的钱不够来选择转码,那我觉得你可能需要充分了解一下码农和计算机的同学的生活,你是不是真正的热爱代码,还是只是热爱钱。当然这两个并不冲突,但是如果只有后者,那请三思后行,在转码的过程当中,我有不少的同伴因为各种原因放弃了。如果你真的热爱技术,真的讨厌材化科研,请坚定自己的内心,做出最正确的选择!
  2. 了解计算机行业 在你决定转码的那一刻,请一定要做好充足的调研。计算机并不等于互联网,这是我一个外行都清楚的东西,分门别类的话,硬件软件,传统制造业软件,互联网等等,请一定做好充足的调研,充分的了解选择最适合你的方向。我选择的是互联网后台开发,这适合我,但并不一定适合你!
  3. 广交朋友 这里的朋友当然是指你转码之后的计算机专业相关的朋友,有各种方法可以去结交他们,无论是参加比赛,还是一起做项目,我在学习的过程当中遇到过许多这样的好朋友,无论是技术上还是情感上,都使我受益良多。本专业的无效社交可以适当少一点,不要害怕与周围的人背道而驰,道不同不相为谋,这并不可耻!
  4. 热爱学习,谦虚与高傲并存,计算机行业是需要热爱学习的人的,当你决定入行,基本上一定要做好终身学习的打算,同时要学会谦虚,你强总有人比你更强,抱着谦虚的态度能学到更多的东西。同时千万不要戒掉自己的狂傲,没有任何人天生比你强,这个世界上只要是人类能做到的事情,你身为人类也能做到,要相信做不到不是你这个人不行,只是你付出的努力还不够多,方法还不够科学,时间还不够长!
  5. 来点实在的 学会水数据,水组会和PPT,抓紧一切能抓紧时间学习自己该学的东西,不要被导师pua,一定要努力找一段实习。这是非科班的学生,唯一证明自己的机会。

结语

在学习后端的路上,会遇到数不清的困难和烦恼,如果你是非科班的同学,这困难和烦恼还会几何倍增。但请记住既然选择,便落子无悔,切莫辜负!最后我想以我最喜欢的一首小诗中的话结束本文:

树林里分出两条路,

而我选了人迹罕至的一条,

成为了我一生的道路。