非科班转行互联网经验总结with抓人的开头
晚上十点半,小王告别了仍在奋斗的同事,打车到自家楼下。他拖着身体爬上五楼,借手机的亮光找到门钥匙开门。卧室里已经传来了妻子均匀的鼾声,这声音让小王的动作轻柔了起来。他一边在地毯上换拖鞋,一边在手机上划着一条条钉钉消息,而后把手机调成了静音。小王是他的第三个身份,他以前也被叫过老张和阿坤。就当前这个身份而言,26岁的他是一个程序员,曾经做过搜索引擎,后来跟着领导一起跳槽到另一家大公司,现在自己也开始带小团队,这一切的伪装都天衣无缝。
突然,卧室中的鼾声停止了,两个大汉从卧室中走出,跟他晃了一下自己的警官证,“你叫王科对吧,我是警察,现怀疑你跟多起谋杀案有关,请你跟我们走一趟。”
写这篇文章的原因是想跟各位分享一下我今年秋招找工作的经验和困惑,听说写一篇文章,一定要有一个抓人的开头。
首先做一个自我介绍,我是非科班硕士,找工作的方向为后端开发。网络、操作系统、数据库那些知识都是硕士期间自学的。春招拿到了字节跳动后端开发的实习,暑期在字节实习了两个月,不过转正失败。秋招期间拿到了百度、360、oppo的offer,还有几家在等开奖。接下来的分享,我从学习路线,实习、未来选择三个方面来讨论。
一、学习路线
1、计算机基础
我大概是去年三四月份开始意识到转后端。因为自己本身也不是BAT大佬,因此也没什么干货值得大家学习。自己几乎完整看完的书只有《深入理解计算机系统》。由于疫情原因,今年春天主要还是在家里,因此主要还是看一些技术博客来临时抱佛脚。看书会让知识更加成体系,看博客只是一种突击方法。看书之前可以先搜一些高频或重点问题,比如虚拟内存是干啥用的啊,进程线程区别是什么啊,带着这些问题去看书,才能做到有的放矢。若要追求通读,其实也并无意义且浪费时间。
2、选择什么语言
后端而言,我感觉无非两大派系,阿里美团京东都在用Java,腾讯百度字节这边大部分都是C++/go,不少PHP的项目也都在用go来重构。大多数应届生(尤其是转行的)都会遇到该学C++还是Java的问题。
我自己本身情况特殊,本科的时候一直用python写小玩具,中途也妄想过转算法,所以直到去年这个时候,我都只会用python。后来因为本科有C++课程的原因,就选择了C++作为主语言。今年过年的时候把《C++ primer》和《effective C++》刷了一遍,然而由于缺乏实际的工程经验,而这两本C++书我又没吃透,实习面试时依然被C++问题吊打。由于后来拿到了字节的实习,花了一个月时间学习了go,然后就默默把简历中的技术栈改成了go和python,面试中遇到C++问题直接说不会。
本着围城原理,学C+++的都会推荐学Java,学Java的都会推荐学C++。因此如果让我再选择的话,我会选择Java。毕竟C++在服务端大显身手的机会越来越少,除了腾讯等大厂的历史原因,越来越多公司更倾向于Java和go。而用python的公司太少,go太新,Java还算是一个比较稳妥的选择。当然这也导致了每年Java人数爆炸,学了Java也不一定能找到工作。
真正的大佬是无所谓于语言的区别的,哪怕你只会matlab,你能搞得了后端,我相信也有公司会要你。
3、为什么大佬的面经我都看不懂
要承认的是计算机也越来越卷。算法早就诸神黄昏。而客户端、测试又时常会冒出劝退帖,搞得人心惶惶。以上现象导致一大波人都聚集到了前后端的岗位上,搞得这些岗位面试难度直线上升。7 8月份的面试可能还在问你智能指针是什么,9 10月份就已经让你手撕一个智能指针出来了。
面试的难题我将其分为两个方面,一个是底层,一个是实践。底层类问题很常见,比方说从进程上下文切换开始问,一直问到切换的时候哪几个寄存器改了状态,总会问到你招架不住的。想要应付这一类问题只能认真看书看博客。我对底层了解不多,这样问我的话我是会很快就挂掉的。
我指的实践类问题指的是一些后端开发中常见的组件,比如Redis、Kafka、Zookeeper、Nginx、ElasticSearch等等。我们这种非科班生,这些名字听都没听过,面试中问到的话很吃亏。我自己之前看《Redis设计与实践》这本书,了解了一点redis,实习中接触到了Kafka和ElasticSearch。在秋招1/3的面试问题中都是在问我对Kafka和ElasticSearch的了解。我个人的感受是,如果稍做准备,实践类问题的难度还是小于底层类的,毕竟天下的分布式组件思想都差不多,你再抓住这些组件的主要特点,准备准备,还是能达到校招要求的水平的。
二、我要实习吗
一定要。
之前有个学长说,就算导师把你的腿打断,也要去实习。
实习的优点大家说过无数次,我来说说实习有哪些坑。
1、一定要关注实习转正率和考核指标。
我当时选择字节实习,也是听闻了字节70~80%的转正率,慕名而来,想着今年肯定工作不好找,直接转正了就算秋招结束。然而实际情况并不是这样的,不同部门有不同的考核标准,实习期间你也可能碰到自己没产出、架构调整、名额收紧等等意外的情况。就我实习的部门而言,初来时本以为实习生转正是做一个ppt答辩,后来跟mentor反复确认才知道,是有三轮技术面试(我还是要吐槽三轮技术面试那跟直接秋招何异?况且转正面试还比秋招问的要难)。这对当时满脑子想着实习转正后就平稳降落的我来说无异于当头一棒。不得不每天九十点钟下班后回家继续刷leetcode,上班摸鱼准备基础知识。狡兔三窟,不要押宝到实习转正上。
2、实习时一定要主动自学。
实习有两个好处,一是熟悉软件开发上线的整个流程,二是能接触到实际场景以及中间件。以我为例,我的工作其实就是调一调这些Kafka和es的接口,写一些curd的业务代码,对这些中间件的基本原理一无所知。准备转正面试时,也准备的是换页算法、三次握手这种基础知识,没想到面试官一套Kafka把我问得晕头转向,华丽丽导致转正失败。因此,哪怕实习期间在做curd,也要主动去学去问,把你这个项目里面高大上的、有挑战的点全部整理出来,毕竟,面其他公司时也不能说自己实习就是在curd吧,虽然就是这样。
3、不能耽误投简历。
我一直以来有个误解,那就是提前批都是大佬在投,我投正式批好了。
然而实际情况确是,大佬们收割完提前批还在收割正式批,而我等菜鸡在投正式批的时候发现hc已经被提前批用得差不多了。边实习边面试的小伙伴最终都能拿到好多不错的offer,并且转正成功。而我这种先实习,拖到八月中才开始投简历的人来说,两边都得不偿失。
4、还是要去实习
虽然我最后没转正,但实习仍然很重要。实习让我尽早接触以后的工作内容,也尽早让我反思自己是否合适。实习内容一定是面试官考察的重点,这样在准备起来更会有的放矢,还可以凸显出自己的实践经验和自学能力。
三、未来选择
说到职业发展,作为一个应届生,我反而是最没有发言权的。我把我实习的这段经历看成未来工作的一个缩影,入职、学习、团建、加班、闯祸、发工资、离职这些事情,选择互联网的话,我将来一定会经历。
实习之前觉得字节大小周无非是每个月多工作两天,但是实际上感觉就是很累。实习前期开开心心熟悉项目,开开心心curd。后期发现转正很难,每天都在痛苦中摸鱼,被迫面对秋招。面试时谈起35岁问题我总是振振有词,提出我的规划路线,然而私下我也在考虑,万一35岁后跟我实习转正结果一样拉跨,那该怎么办。
所以,一定要互联网吗?
说到这里,也请大家看一下我这个投票贴,是选择互联网呢,还是直接躺平?
base成都 互联网or银行