写在前面:
我是18年双非考入华科软院的,本科材料专业,感觉就业前景不佳才转了计算机,记得当初考完研还写了篇 普通一本如愿跨考华科软件工程经验之谈 。
转眼间两年多的研究生生活马上就要结束了,回想起来,两年后回头看转行的经历还是挺感慨的!其实读研的时光并不比考研的日子轻松,除了要兼顾日常的课程安排,还需要统筹实验室项目的进度,另外还需要抽时间补习专业知识,为找实习做准备。很累,但回过头来,的确很充实!
研究生的时光仿佛少了本科阶段的迷茫,大家都在为一份理想的工作努力学习,为了不被拉下,你只得跟着奔跑,不断通过自己的努力补上了专业知识的空缺,进入到了自己理想的鹅肠~
这里把读研后自己遇到的坑和学习路线做个总结,希望能帮助和我有相同经历的小伙伴避坑欢迎批评指正~
以下正文:
1)基础篇
本科阶段我只学过C语言的基础知识,考研期间在b站上找了个视频大概看了一周左右,后面就以C语言作为复习的工具。
考完研之后,开始学习Java,为复试的上机做准备。照着B站上的视频,跟着敲一个个的案例,但总觉得学得不如忘得快!好记性不如烂笔头,还好自己有个做笔记的习惯,经常反复的看自己做的笔记,不断回忆前面学的知识点,配合案例,熟悉JavaSE的常用API的用法。暑假时间抽时间学习了HTML、CSS、JavaScript、tomcat这些javaWeb基础内容。
学习过程中最大的痛苦莫过于学习资料的选择,新手应该都深有感触。现在的学习资料实在是太多太多,就拿java学习来说,在b站上一搜就是一大堆,但是像我这种强迫性特别强的人来说,又特别希望学习的连贯性,和前面的内容很好的衔接起来,因此在找资源的过程浪费了大量的时间。所以后面我会把我这两年学习的资源整理出来,供大家借鉴,少走弯路。【后面我会为大家推荐资料,看到后面】
开学之后,每周的课程比较多,加上实验室的项目进度也比较紧,开始了忙碌的生活!
2)项目篇
实验室的项目主要是Web相关的需求。刚入坑的我真是一脸懵逼(跨考的小伙伴应该深有体会)。参与项目的第一件事是安装各种开发环境,例如:Git、IDEA、Node、Maven等很多都是第一次听说(原谅我当时基础太差了,哈哈),只好挨个的去搜索这个工具是干啥的以及安装教程等等,偶尔还遇到环境问题,想在回想起来当时的自己就是很sb!
在任务分工时,我选择了管理端前端的开发(写了大概半年的前端),框架为React,刚开始只能是依葫芦画瓢,照着学长的demo写需求,遇到没遇到的组件,经常会焦头烂额,查官网或者咨询学长。经过1个需求从头到尾的参与之后,似乎慢慢开始摸到了一点门道,开始结合b站上的视频和官网,学习组件的基本用法、属性、生命周期等,对框架也慢慢熟练起来,对开发中后台、web前端、app前端的工作也有了大概的轮廓。
写了大概半年的前端,我准备接触下后端的内容,后端这边主要用的SpringBoot,代码管理用的Gradle和Git,刚开始也只是照着学长的demo,完成一些CRUD的工作,不过慢慢对数据库的相关操作和需求开发的流程熟悉起来了(因为这边的需求基本都会先开个小会,总结出设计的模块,由我们共同设计出表结构以及表间依赖等)。
3)实习篇
转眼间研究生的第一年就要接近尾声了,意味着我们要开始着手准备找实习的工作了。这时才意识到,之前自己过于机械的花了太多的时间在项目上,没有更深入的去学习底层原理(当时对Java核心类基本没去研究过,更不用说JVM了)。
为了找到一份满意的实习,开始疯狂的搜Java后台开发岗位的面经,然后开始补习Java常见问题,涉及Java集合、并发、jvm、项目经历等。但是前几次的面试总是答的不是太好。一方面自己有些内容有背题的成分,比如,刚开始对HashMap在jdk1.7和1.8的区别这块总是答的不全,另一方面,就是自己没有踏踏实实的钻研底层的实现。
经过2个月的准备,秋招和春招先后拿到了douYu、ali、鹅厂等几个公司的实习offer。当时准备面试那段时间是真心累~~
4)工作篇
先后在douyu和鹅肠实习。说说在斗鱼的成长吧!
douyu是服务端开发岗,主要参与内部中台系统的迭代,技术栈涉及Java、SpringBoot、Dubbo、Grpc、Apollo等。在实习过程中遇到了很多之前在实验室没用到的工具和知识点,例如Apollo和RPC框架(大佬勿喷,当初真的很菜鸡!)。通过参与一个个的生产项目,不断实习了对SpringBoot框架的用法,特别是拦截器、过滤器等的用法,也接触到了Maven代码管理工具、jenkins打包工具等,自己利用业务的时间不断完善了Spring全家桶的知识,加强对各种注解的理解,并总结了接触到的各个技术栈的内容,方便自己复盘。还有一点,就是实习期间慢慢开始阅读源码,因为会涉及到对老服务收拢的改造。有压力才有动力!
期间也参与了一个前端项目的研发,当初组内很少有人会React框架,然后我就被顶上了,哈哈!所以技多不压身,你现在学的东西不要绝对没用,可能某一天就用上了。
总结一下吧:
回想一下,转行以来的这段时间,确实感觉比较累,但也挺充实的!估计跨考的小伙伴都懂,因为你本身就有比较多的基础需要恶补,加上后端的内容也比较多。很多人是科班出身,早就忘了当初自己连软件都不会装的窘境。
我永远相信水滴石穿的道理,如果你也在奋斗的路上,坚持下去,就像跑步一样,坚持10天看不到变化,30天看不到进步,但是1年后你会感到惊讶,时间不会辜负自己!
下面,我结合自己转行遇到的坑,给大家总结几点避坑的拙见!
先上一张后端学习的路线图(别怕)
先说明一下这张图:
这张图基本上涵盖了后端大多数的知识点,小白可以按照这个顺序来学习,也可以看看自己哪块内容比较薄弱,来有针对性的补习。不需要你掌握所有的内容(这里是尽可能的把知识点整理全),比如像RPC框架,你只需要掌握一种即可,原理相通的,后面用到了再去查资料就很快了!但是像编程基础、Spring全家桶、常用中间件和分布式系列属于面试高频点,也是现在绝大多数公司的标配,需要脚踏实地的掌握。下面就每一块的内容补充下我个人的建议。
1)启蒙阶段
(这一部分针对完全的小白,有基础的小伙伴跳过该部分)
如果你是从其他专业(特别是和计算机八竿子打不着的专业)转过来的小白,且没有什么计算机的基础,小编建议还是在B站上找个C语言相关的视频,花个几天的时间,快速的把计算机的基础知识过一遍,大概对编程有个简单的概念,方便后面的学习。
关于资源,小编一直以来基本都是从b站找资源(可以选择播放量靠前且评论区有课程源码的视频,可以配合视频源代码学习)。例如,这个 C语言快速入门
(很多人不学C也能很好学习Java,该部分仅供参考)
2)编程基础
这个阶段的内容涵盖了Java语言、数据结构、计网、操作系统、设计模式这些内容,也是后端最为基础和核心的知识点,更是面试的高频考点,所以需要花最多的时间深挖实践!
(1)Java从入门到进阶
这里是我最近整理的Java从入门到进阶 的大纲,分为基础部分和进阶部分两部分内容。这里把内容简答做个分类:
最基础:
重要:
上述标记为简单的知识点基本可以通过视频/博客很容易掌握,主要是要提高熟练度即可。标记为重要的知识点(反射)要么是主流框架的基石,要么是面试的高频考点(JUC、JVM),所以需要结合书籍、阅读源码、学习优秀的博客掌握。
<这里给初学者提几点建议:>
① 结合视频学习,新手可以先不用看书。视频可以在b站上找,我当时看的是刘意的javaSE入门 ,后来准备面试又看了部分java基础+进阶 。拿我自己的例子来说,当初本科毕业的时候,在网上淘了很多盗版的计算机相关的书籍(哈哈,别人都是毕业买书,捂脸~~),但是很多到现在都没来得及翻过。两个原因,一个是因为基础太差了,看不懂,特别是像javase这种基础知识,书本上的案例完全没有结合视频,马上敲出来看到效果有感觉;第二点就是真的没时间。所以这里不建议新手马上看书,而是等到有了一定基础之后,再翻书来深化效果更佳。视频推荐(前者主线+后者补充):
刘意的JavaSE入门
【狂神说Java】Java零基础学习视频通俗易懂
② 做笔记。我一般是用typora(markdown编辑器)和xmind来做笔记的。因为技术点多,很容易第二天就不知道学了啥了。xmind相当于大纲的作用,markdown文件可以详细的整理内容,用自己最容易复习的方式记笔记,这样你第二天复习或者之后面试前都只需要看看笔记,就可以快速回忆起知识点。下面是我的笔记:
③ 核心知识点要熟练语法。比如:像string、集合类、线程这些经常用到的类API一定要特别熟悉,并了解同类的区别。要区分string、stringBuffer、stringBuilder的区别,concurrenthashmap、hashmap、hashtablle的区别等,主要目的就是在你真正开发的时候能够根据应用场景合理选择,不至于一用集合就是ArrayList!!!
大家除了对这些核心知识点做好笔记之外,也可以建立一个java工程,针对知识点可以整理一些demo,忘记的时候通过例子可以快速区分。下面是我平时练习的demo工程。
④ 原理性的东西要理解+记忆。像JVM、JUC并发包这些面试高频问到的东西,一定要理解原理。我通常的做法是:看视频->理解原理->记忆。
JVM:我当时看的视频是深入理解Java虚拟机 。其实看视频还是很好理解的,看完之后一定要自己动手整理成精炼的笔记,最后记忆。这样才能在面试的时候用自己的话表述清楚。下面是当时做的JVM的笔记。
JUC:面试的时侯经常会问到是否对JUC并发包有了解?所以需要了解AQS、锁机制、并发原理相关内容,我一般像这些内容都是通过视频(Java8+JUC+NIO)或看别人优秀的博客来学习。好的博客会结合图书的方式帮你理清源码的思路。所以大家在遇到不好理解的内容时,谷歌搜索可以解决你绝大多数的问题!
其他java源码,推荐大家看:
java源码分析
hashmap源码分析
(2)数据结构
其实在学习javaSE的过程中或多或少你已经掌握了一些数据结构,例如:数组、集合,还有像排序、查找等操作。但是对栈、队列、图、链表、树这些开发中也可能用到的结构还是需要好好掌握。
我考研考的有数据结构这门课,但是当时只会C,基本实现也都是用C来实现的。如果你是小白的话,我建议可以在学习JavaSE的同时学习数据结构的Java版,刚好复习Java语法,例如这个:尚硅谷韩顺平图解Java数据结构与算法 。
一定要亲自动手实现,不要只是看看视频,因为大多数时候你看的时候都觉得你会,但是到面试的时候让你写个快排可能都写不出来,切记!!
(3)计算机网络+操作系统
因为我是非科班出生,本科未接触过这两门课程,考研也不用考。很久之前买了几本《计算机网络自顶向下》和《现代操作系统》至今还在宿舍吃灰(捂脸),实在是没时间去看。所以这两门课的内容应对面试基本都是看优秀的博客或者知乎的文章,比如,像这篇:老刘:计算机网络太难?了解这一篇就够了,然后针对高频的考点整理成自己的笔记,面试前看看就OK,经过多次面试,你的笔记基本就比较完善了,下面是笔记截图:
(4)设计模式
设计模式虽然不是面试必考点,但是对你的技术提升大有裨益,熟练掌握设计模式可以帮你看懂很多框架的源码,不至于一脸懵逼。尚硅谷韩顺平图解设计模式 ,这是我当时学习的视频,设计模式本身就比较抽象,我基本上都是学完一种之后,就会整理一个经典的demo。基本上能回忆起来你的demo,它的原理基本上就回想起来了。
3)JavaWeb入门
很多同学觉得自己想做后端方向,像HTML、CSS、JavaScript这些东西不用去学。其实如果你时间比较紧的话,这块内容可以暂时放下。但是如果时间充裕的话还是有必要学习一下,不仅利于后面框架的学习,而且也是自己的一项软技能。比如,你的公司人手不够的时候,你能够顶上前端的任务,这都是你的绩效呀!!
视频建议:崔希凡JavaWeb28天入门 + 【狂神说Java】JavaWeb入门到实战 。
重要知识点:
4)Java框架
(1)Spring
现在公司基本很少用SSH框架了,大多数都用的是SSM框架或者SpringBoot。面试中关于Spring系列的问题还是有可能遇到的。所以建议还是系统的学习一下,也有利于加深对前面内容的掌握。
我看的是黑马程序员IDEA版4天 视频。这个视频对新手还是比较友好的,由浅入深的配合案例帮助你理解AOP、IOC、动态代理这些核心内容,由XML版过渡到注解版。
(2)SpringMVC
这块儿内容我看的是黑马程序员IDEA版3天 。这个视频和上面的Spring视频衔接较好,可以加深对Spring内容的掌握。尚硅谷佟刚SpringMVC 这个视频也不错!
(3)SSM整合
【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂
MyBatis-Plus进阶
雷神的Spring、Spring MVC、MyBatis课程
Mybatis现在在公司用的还是挺多的,所以有必要好好掌握以下基本的配置和复杂SQL的语法,再说一遍,学的任何知识点都要整理为自己精炼的笔记,方便复盘哦~
(4)SpringBoot
SpringBoot框架极大简化了SSM框架的配置,比如,利用SSM框架开发的时候需要配置web.xml,配置Spring,配置Mybatis来将他们整合,而SpringBoot大量的默认配置可以简化这些配置。
尚硅谷SpringBoot
关于SpringBoot的学习,我是先用后学的。在实习的时候经常会遇到后端各类异常的问题,虽然能通过谷歌找到答案,但总是一知半解。所以之后利用周末的时间回过头来学习了上面的尚硅谷的SpringBoot的课程,结合实习的项目,加深对框架的理解。
5)数据库
(1)Mysql
通过【狂神说Java】MySQL最新教程通俗易懂(3天) 这个视频掌握基本的SQL语句的编写,包括表定义、查询等。通过 Mysql进阶 这个视频可以加强对Mysql索引、索引优化、Innodb存储引擎、锁机制、分布式等高级功能的掌握。
Mysql在面试中属于高频考点,开发中也同样重要。小白首先需要掌握基础SQL语句的编写,之后再加深对Innodb存储引擎的掌握,切记在理解的基础上整理好笔记,方便复盘。这是我的笔记:
2)Redis
Redis尚硅谷周阳
Redis千峰教育
Redis应该算是后端程序员必备技能,广泛应用在缓存、分布式锁、LUA脚本等场景,之前面试过的几个大厂也都有问到这部分内容。小白建议配合视频熟练掌握常用指令、redis事务、redis持久化和分布式锁等这些内容,因为这些都是开发中的基础知识,不然可能连面试都过不了的。
6)开发工具
(1)IDEA
尚硅谷Java视频教程_IDEA视频教程
IDEA教程-干货大合集
idea超详细使用教程
其实用eclipse和IDEA没有太大区别,两者的功能也较为相似。但是有的公司可能自研有针对IDEA的插件,所以熟悉IDEA的用法也很有必要,并且IDEA可以导入eclipse中的快捷键,实现无缝衔接。上面是看过的几个IDEA的教程,教你快速掌握IDEA的核心功能。
(2)git
尚硅谷git-github
现在公司的代码管理估计都是用的git,所以小白一定要掌握git的基础指令,至少要熟悉一些开发中基础指令:推送代码、拉取代码、解决冲突等。
(3)maven
尚硅谷maven
Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以支持整个项目的开发、打包、测试、部署等一系列行为。学习Java的话,一定要掌握Maven或者Gradle其中的一种包管理工具,要学会基本的包引入、解决包冲突这些开发中的常见操作。
<–叮嘱几句–>
或许只有经历过的人,才懂得转行的路有多难走!
转行以来属实遇到了太多的坑,走了太多的弯路,主要原因是缺乏规划,今天学学这个,遇到瓶颈之后,转身又去学习那个,导致效率低下。写这篇文章就是把自己遇到的坑和些许经验分享给大家,帮助大家避坑。
最近各个大厂的薪资陆续出炉,我身边的很多本科同学也萌生了要转行的想法。这里说上几句。其实互联网相比于其他行业在薪资方面的确很有优势,想要转行的同学一定要想清楚。
其实计算机的门槛虽然没那么强,但是要学到能够工作的水平还是需要付出较多的努力,需要丢掉三天打鱼两天晒网的坏习惯,不要只看到高薪,却忽视了现在与日俱增的竞争压力。最后给几点建议:
真想转行的话,给大家一个建议:选计算机专业>早点换专业>跨专业考研>在职自学>裸辞自学。毕竟成年人的世界都不容易,一起加油吧~~
如果需要我规划后端学习路线的同学,可以戳戳我哦。
小白后端路线规划
最后,大家如果需要我整理的后端资料大礼包,可以关注我的公众号【跨考菌】,在后台回复【笔记】获取,我也会定期把笔记整理成文章,也欢迎大家拜读。欢迎大家来撩~~