背景介绍 本人本硕985材料科学与工程,学了六年材料,从我本科舍友转行,到我硕士师兄转行,到认识越来越多转行的人,终于,也带动了我这颗躁动的心,明白了什么叫及时止损,最后一年醒悟,自学计算机,怒转码农。我选择的是Java开发入手学习,一是因Java的生态比较成熟,学习资料也比较多;二是因为Java的市场需求特别大,更加容易上岸一点。
在lzy,lyq,yp等同学的帮助下,学习了一年半,也算是成功上岸。
春招:
阿里,腾讯,快手,招行信用卡中心
秋招:
快手,腾讯,字节跳动,百度
转行之路 为什么要转行?
兴趣爱好
这个理由看似空泛,但其实对我来说却真实存在,因为化学材料这种实验性学科具有太大的不确定性,需要经过大量重复试错才有可能取得小成果,甚至继续不会,大家小时候都听说过爱迪生制作电灯的故事,失败99次才成功,虽然是个故事,但也告诉了我们,这条路注定 大部分都是在试错,只有经过不断的试错,才有可能取得成功,大家都知道爱迪生,但是更多的是失败了99次 还在继续失败的科研人员没人关注。
因此 我选择一个容易取得成就感的方向,比如写出一道算法题,开发一个系统 都容易让人取得成就
行业安全系数
材料化学等行业,充满着许多潜在的危险,比如我本科毕设节出的二氯甲烷、三氯甲烷,以及很多实验室存在的氢氟酸等,都需要学生去操作,如果毕业后进入对应企业上班,同样需要操作这些,生命可贵,为什么同样是寒窗苦读,怎么有些专业就要用自己的身体去奉献呢?
具体可移步知乎霍华德大佬的回答:https://www.zhihu.com/question/452810376/answer/1828501401
薪资待遇
薪资待遇也确实是考虑的一部分,同样的大学毕业,谁想比别人薪资低一半呢?当然也有人说计算机是青春饭,材料机械越老越吃香,确实如此,请看下图
生化环材越老越吃香
当然上图可能是开玩笑,但是人在这一辈子最需要用钱的时候是20-30岁的时候,这个时候不赚钱,娶不到老婆,买不起房子,等五六十岁再来赚钱有什么意义?
及时止损
前两天看到个词,叫温水煮青蛙,回顾自己大学研究生生活,说的太对了。选志愿的时候,听说材料是21世纪有前景的专业,听说计算机饱和了,听说找工作不看专业,看个人能力,成功的被第一志愿—材料录取,大学研究生阶段步步温水煮青蛙,沉浸在自己学院出了多少个院士,发了多少篇sci,争取保研,心中不断安慰自己:”都是混不好的才劝退,我们985材料应该混的不会太差“、”读完研究生就好了“、”计算机是青春饭,35岁就失业了“,在这样一种自我安慰下带着但行好事 莫问前程的原则,直到研究生阶段,在某些朋友的劝退下幡然醒悟,也曾想过学了六年材料再转是不是很亏,但是这里我想说,及时止损,错误的方向前进就是一种进步,何必要继续错下去呢?
综上:开始转行
开始转行 在没开始面试前,我是从来不敢想自己能进入大厂的,一开始的目标只是进一个三线互联网或者硬件公司,只能说闷头只管努力,当你抬起头来的时候发现自己已经到了曾经不敢想的地方。
19年4月开始,认识到科研做不下去的时候,就准备开始转程序员。我选择了当下最热门的人工智能开始学习(再一次盲目跟风),瞎学了一个月python,深度学习,tensorflow,感觉就是闭门造车,东学一下,西学一下,完全找不到方向,而且毫无成就感,也不知道在做什么方向。直到认识了一个大佬同学,大佬告诉我,我这样学算法,明年找工作只能成为失业大军中的一员,给我讲了很多算法的现状,什么诸神黄昏,天地寂灭等。告诉我及时换方向,虽然有点不舍,但是这个时候我已经明白了及时止损的道理,于是放弃了一个月的算法学习,开始走java后端的路线(这个时候是5月中旬)。
执于表面,不究原理 Java基础,mysql基础,servlet,spring框架,mybatis框架,springmvc框架
第一阶段就冲的很快,完全不理解原理,只知道照写代码,甚至觉得短短一个月多学这么多感觉计算机也不是那么难(太年轻==)。学了点java,html,sql语法就急于找一个实习证明自己,于是上boss直聘去学校旁边的一家外包公司面试,面试啥都不会。问我JAVA的三大特性我都不知道,当时就感觉自己忽略了很多细节,在外包公司干了几天,啥都不会,代码也看不懂,再此期间小哥告知我去学习ssm。于是就一头扎进了ssm的学习,照着操作一遍还是似懂非懂,后来在b站看的黑马视频课程,总算是大概明白了ssm怎么操作和基本原理。
复盘 : 无人指路,瞎猫乱撞,会白学很多无用的东西,也没有找资源的途径
讯飞实习,开始实践 当时趁着,暑假出去玩了一趟,这个时候已经8月中旬 了,在boss直聘上收到来自科大讯飞的一条消息,问我愿不愿意去实习,随后就去参加了面试,这个时候已经能答出来一点基础东西了,包括synchronized的用法,事务的ACID这些,答得一般般,可能看到我学校不错,还是让我过了面试。进去之后做了一个运营管理平台,大概用到的技术栈就是ssm,加上Shiro,Redis这些,因此学习了一些权限管理框架和Redis。在讯飞做的就基本是这个事情,一些CRUD,在当时也做得挺开心。这个时间段是比较辛苦的一个时间段,因为公司离学校是12公里,所以我早上6点多起床,然后坐车一个多小时到公司上班,晚上下班七点多到学校还没吃饭,有时候晚上回来还要做点实验。不过那个时候总归是开心的,这个时间段,很幸运的认识了一个重要的同学,zy同学(目前就职于拼多多),在这之后,我终于不再是闭门造车,有人给我讲就业行情,有人给我讲大厂招聘消息,有人帮我改简历。元神给我提供了很多有用的资料,还教我如何去描述项目,并且让我少走了很多弯路 。
在此期间学习了一些RedisCluster架构,参考https://www.nowcoder.com/discuss/364714?type=post&order=time&pos=&page=0
复盘: 有人带路,视野会开阔不少,了解行情和正确的学习方式很重要
自学微服务、分布式、高并发 11月底十二月初 ,快三个月了,我就从讯飞离职,学了点中间件,准备自己做一个项目,当时不知道做什么,我从网上找了,是一个微服务项目,用的技术栈还挺繁杂,SpringBoot,SpringCloud,RabbitMq,Redis,MongoDb、ElasticSearch等,之后我再自己加入了一些功能,包括延时队列、分布式锁、消息队列重复消费、消息丢失、幂等性等方案解决办法,这也成为了我春招能吹的一些微服务,分布式的一些东西。不过后面事实证明,这种项目漏洞还是很多,幸运的是面试官都没有深究。
复盘: SpringCloud还是太重了,个人感觉小公司用的多,可以学习Dubbo、Grpc这些,并去阅读源码或了解原理,能够更好的跟面试官交流。
巩固基础 操作系统、网络、数据结构、以及Java相关基础
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Java基础:缓冲池,String,hashcode和equals,抽象类和接口,static,final,多态; 集合:ArrayList, LinkedList,HashMap,HashSet,ConcurrentHashMap,CopyOnWriteArrayList,Queue,PrriorityQueue JVM:JVM内存区域,垃圾收集算法,垃圾收集器,类加载机制,JVM调优 多线程:Synchronized,volatile, CAS,ReentrantLock,Countdownlatch, Semaphore,线程池,Future等 Mysql:B+树索引,存储引擎的区别,覆盖索引,联合索引,最左匹配原则,三大范式,四大隔离级别,MVCC,锁,binglog的能日志的原理和作用,查询一条语句或更新一条语句的流程 Redis:优点,单线程,事件模型,持久化,主从复制,redis集群,缓存一致性,键删除策略,淘汰策略,分布式锁,缓存击穿,缓存雪崩,缓存无底洞,数据类型底层实现,SDS、跳表、渐进式扩容等 Zookeeper: zab协议(加分),结构模型,功能和优点,分布式锁 分布式相关:CAP,BASE,Paxos,分布式事务解决方案,ZAB,分布式锁,消息队列
面试阶段: 因为一开始就没想着去大厂实习(导师不可能同意),听说阿里可以直通车,2月底 ,投了阿里巴巴试试,也没打算过,就想着练习练习,结果很顺利的面的两个部门通过了,当时想多试试,又投了腾讯,结果都过了,当时是出乎我意料之外的。当时我是第一批拿到意向书的人,拿到阿里意向书的时候,那天晚上高兴的没怎么睡着。因为听说阿里流程很慢,要很久才能入职,于是投了个流程快的快手,所以上半年在快手实习,之后又去了阿里实习一阵,后续秋招开启就没什么太多惊喜的了,因为无非就是重复春招的流程,很幸运的时候,面过的公司都拿到了offer。那么在这半年面试期间,其实也是穿插有一个学习和复习的过程的,主要是针对源码和面经主要如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 需要了解的源码: 集合:ArrayList, LinkedList,HashMap,HashSet,ConcurrentHashMap,CopyOnWriteArrayList,Queue,PrriorityQueue AQS:AQS的原理,ReentrantLock,Countdownlatch, Semaphore 线程池的源码 Spring源码:初始化流程,循环依赖 上面只是一些常问的源码,一些更细节(Rpc,Netty这些)的就不提出来了。包括春秋招期间跟同学们讨论的很多面经细节知识。 当然算法的话,应该是整个学习过程中都要刷的,一般leecode 前200+剑指就够用,但是运气不好也有几率碰到难点的算法题,比如手撕跳表,比如手撕前缀树等。
面经不附了,牛客一堆。
复盘:面试经验的积累和思考非常重要,有些知识是在面试中学到的,所以一开始就要多去面试
offer选择 offer选择需要考虑的很多,待后续贴出~
总结 以上就是我为什么转行,以及转行的经历,开发这一行不需要很强的天赋,只需要踏踏实实的学上一年就可以,正确的学习路线非常重要,欢迎大家关注本公众号,并后台回复”后端学习路线“ 获取学习脑图~