前言
事先说明一下写这篇文章的目的,是因为周围一些朋友,主要是安卓开发、iOS开发吧,他们在知道了我的经历之后,也想像我一样。所以写下这篇,以我的亲身经历,给他们作为参考,希望能够帮助到他们。在文章底部,我会贴出我文章中提到过的所有资料和视频的链接地址。
缘起
首先说一下我的个人经历。我是2015年本科毕业,大学是非计算机专业,但是我对我的专业完全不感兴趣也不看好。事实上和我专业对口的工作大部分工资都很低,而且工作环境很糟糕。毕业以后在公司干了半年,当时看我的一个同学在培训了iOS开发之后当了程序员,于是在2016年的3月,我也去了培训机构,当时培训的是安卓开发,在x马。16年8月左右,为期半年的培训终于结束了,我从机构出来,编了一份简历,成功找到了一份安卓开发的工作。 时间一晃到了2019年的4月,这个时候安卓开发的市场行情已经远远不如14、15年的时候,其实我也早就已经察觉到,只是脑子里总有个声音,觉得好不容易培训出来,马上又转其他的,多可惜啊。然而事实上,互联网行业的变化总是极快的,很多时候,选择大于努力,除非你是那种对安卓技术钻研的很深的稀缺人才,然而大多数情况下,这样的人总是少数,并且需要付出非常多的努力,而我应该并不是,我也对安卓开发没有特别深的感情和兴趣,只是因为当初培训的恰好是这个而已,才走到了现在。 在18年底的时候,我开始看尚硅谷的springboot课程和慕课网上廖师兄的微信点餐的视频。因为那段时间工作很闲,我就上班在看视频。看视频之余还看在简书上的博客,恒宇少年写的springboot系列的教程。我觉得在当时看到这几个视频和博客非常适合新手打基础用,下面我就逐一介绍一下
- 尚硅谷springboot 由尚硅谷的雷丰阳老师讲课,讲的十分良心,非常清楚,很多同学都炒鸡喜欢。从springboot的入门,配置文件,自动配置原理,日志配置,到后面的docker,rabbitmq,redis整合,非常详细全面,而且容易理解。
- 慕课网廖师兄的微信点餐 一个实战的小项目,全程使用springboot开发,前后端都有,但是主要理解后端就行了。廖师兄是之前在网易工作的Java开发工程师,代码水平自然不低,看他的视频能学到很多,包括代码规范,一些良好的开发习惯什么的。唯一不足的是廖师兄讲话没有雷丰阳老师那么生动,稍微有些小枯燥吧。另外一点是这个是慕课网的付费视频,我当时是看的网上流传的盗版,至于大家有能力就支持正版吧。
-
恒宇少年的springboot学习系列博客 如果你是上班时想要学习,但是公司又不准上班看视频,那这份博客就很适合你。里面涵盖了很多关于springboot的基础内容,具体那些自己去看吧。我是只看了前面的一些章节,跟着敲了demo。后面的那些章节中的知识对我来说我觉得暂时用不到,需要的时候再看吧。
到19年初的时候,这两个视频都看完了,博客看了前面一部分,我觉得是时候做点项目实战了。然后我对我们项目经理说我有转后端开发的意向。我们项目经理人挺好,而且也愿意我往这个方向发展。然后我就开始写一些简单的controller的代码。真的只是controller相关的代码,因为那个时候我连sql语句都不懂,只是知道一些controller相关的注解,仅此而已。然而好景不长,公司在4月份倒闭解散了。幸好我这个人有点居安思危的意识再加上运气好,在公司倒闭之后立刻就找到了新公司。 但是,戏剧性的转折又来了。在这个新公司干了一个多月,大概在6月20号左右,公司的人居然把我劝退了,说的理由也是可笑,就因为我有事请了假,我做的一个模块比预期迟了半天时间。说实话,即使我对安卓开发已经没有了热情,但是我对我的技术还是有着充分的自信的,在试用期把我劝退并且理由是工作能力不够的公司我还是头一次遇到。被劝退以后,我绝望的想要继续面试找工作(我深知没有任何准备想找到一份不错的安卓开发工作是有多么困难),但是我感到我实在缺乏对安卓开发的热情和后劲,继续找安卓开发的工作或许已经不再适合了。公司把我劝退,我正好有时间全职来学习Java后端开发,恰好也是一个机会。于是在经历了几天的沮丧之后,我正式开始了脱产的Java学习。
学习历程
整个Java的学习时间大概是3个月左右,我原本的计划是2个月,因为我也不想这段没有经济收入的日子持续太久,但是事情总是有点超出预期。下面我将以我学习的先后顺序分项目介绍我的学习过程。因为之前我做安卓的时候已经有了java基础,所以java基础这部分我跳过了,直接开始项目实战。如果有同学想要从零基础开始学习Java开发,需要一份学习路线的话,我这里有一份我觉得比较不错的:2019零基础自学Java路线总结2.0
视频的话推荐黑马57期的java基础视频Java-黑马就业班
或者网上流传据说有个刘意讲的java基础比较好, 可以去b站搜一下
我当年看的是这套<<传智播客-黑马程序员>>冯佳老师Java/Android基础视频,也还不错
乐优商城
我学习的第一个项目是乐优商城,这是我在一个java学习群里听人说的。这是一个电商项目,有后台管理系统和前台的商品购物页面系统,前后端分离分开部署。在这个项目里我学到的东西还是蛮多的,例如js的es6语法,vue框架,springboot, springcloud相关的例如feign、hytrix、ribbon, 通用mapper, 分布式的图片存储框架fastdfs, nginx相关,搜索引擎elasticsearch, 消息中间件rabbitmq, redis, 一些linux的命令,虚拟机的使用,阿里短信sdk的使用,微信支付的流程等等。还有电商方面的相关知识,比如spu, sku。总的来说,还是不错的一个项目,黑马出品的东西确实不错。 因为之前已经学习了一些springboot的基础知识,我就直接开始学习这个项目了。学习的方式是一边看着视频,一边敲代码。因为我有两个电脑,所以我就一个电脑用来播放视频,一个电脑用来敲代码。视频我是在b站看的。不得不说,b站真是个学习的好地方,各种资料应有尽有。b站上的乐优视频有两套,一套是虎哥讲的,使用mac开发,还有一套是锋哥讲的,使用windows环境开发。建议如果想踩坑少的话,就看锋哥版本的。
我当时看的是虎哥那套,因为我平时敲代码习惯用mac, 一些虚拟机软件什么的我也是和虎哥一样用的parallel desktop。然后我又在百度找了一份跟乐优商城视频配套的资料,主要是一些笔记、软件。完全配套的代码的话,说实话没有网上并没有流传出来,这点比较蛋疼。不过还好,我在github上搜到了一份比较匹配的,并且在后来我把这整个完整的项目做出来了,把代码放到了我的github上面,稍后会贴出我的github地址。
在学习这个乐优商城的时候,我还搜到了一个csdn的博客,是一个博主记录了他做乐优商城的整个过程,并且建立了一个QQ群,里面的人好多都是循着乐优这个项目加入进来的,也有一些自学Java的人,后面我会贴出这个群的二维码,有需要的可以加一下。有时候我遇到了问题也会去这个群问。
但是说实话,大多数问题都是我自己凭着以前的编程经验或者百度解决的。自学确实是比较困难的,我都尚且如此,何况那些初学者。我所能告诫那些自学者的就是,一些软件,环境,版本什么的尽量跟视频里老师的保持一致,文件夹路径老师创建的是怎样,也一模一样的照抄。千万不要自己作死擅自改动,不然一些环境安装问题就能把你折磨死。作为初学者,首先要做的就是模仿,模仿的多了代码量上去以后自然就会了这个不用着急,等会了再去做一些改动和创新也不迟。新人能像老师一样把效果实现,把流程跑通就已经很不错了。比如我自己在安装fastdfs的时候就花了半天时间,才把它装成功,要是和视频里老师敲的一模一样就不会有这样的问题。
在学习节奏方面,我是基本按照视频走的。因为视频是按day01,day02,day03这样分p的,所以我基本上也是一天一p的学习,偶尔也有想混吃等死的时候,但是基本上相差不大。一般的话在b站上看我会选择1.5倍速度甚至两倍速度加速观看。
springmvc、mybatis、spring、mysql
在第二阶段,我才选择补一些基础,学习ssm基础和mysql的sql语句语法,看的也都是b站上的57期的黑马java视频, 应该是2018年比较新的。我首先看的是springmvc,这个倒是挺简单的,感觉没什么特别好说的。然后学习了mybatis, 主要是一些标签的使用吧。在学习mybatis的时候我发现我的sql知识严重不足。所以在学习了mybatis的同时我还穿插学习了mysql数据库的视频。最后就是spring的学习了,这应该是ssm框架中难度最高的,尤其一些面试也比较喜欢问spring的相关问题,比如事务相关。
品优购
在补完ssm基础后,我决定选择一个项目实战,并且能将ssm框架整合一下。虽然现在大多数公司用的都是springboot,但是可能还是会有部分公司仍在使用ssm,所以我觉得ssm框架的项目还是得练一个。于是在这里选择了品优购。这个项目涉及到的内容有spring, spirngmvc, mybatis, 通用mapper, 分布式框架选择了zookeeper+dubbo,还有freemaker模板引擎,前端框架angular。其他的知识点其实跟乐优商城一样,比如redis,消息队列什么的,因为都是电商项目。不过品优购后面还补充了一个秒杀,还有一些代码生成器快速生成业务代码,还是比较有价值的。品优购我也是在b站上看的,b站有两个版本的品优购,一个是旧版的eclipse开发的,一个是新版使用idea开发的。我看的是新版,但是新版的第一天和第四天内容是缺失的,于是就看旧版补全,其实几乎无缝衔接。学习节奏嘛也和乐优商城差不多,不过真心感觉讲品优购的老师没有乐优商城的老师讲得好。
面试找工作
其实要我说,学Java最煎熬最辛苦的不是学习而是面试找工作环节。首先是简历。简历我写的是半真半假的,就是之前的安卓工作经验也写了一点,但是主要是Java的工作经历。然后这里我特别感激我之前公司的项目经理。因为之前基本上只写了一些controller的代码,对整个项目的流程并不理解。于是我就向他请教,总算把一些细节都了解清楚了,这样面试的时候讲述自己的项目经历就流畅多了。对于面试问的一些问题的话,我觉得对新人来说是挺困难的。随便举例一些我遇到的面试题吧,hashmap和concurrenthashmap原理,分布式事务怎么解决,分布式下session怎么处理,数据库优化等等。我做了一个分类,大致有以下这些内容:
- mysql(oracle)数据库
- elasticsearch(如果你写了电商项目的话)
- 计算机网络
- 设计模式
- 设计场景,比如让你设计秒杀场景
- 项目相关,看你对业务熟悉不熟悉
- 分布式问题
- dubbo
- springcloud
- 高并发解决方案
- mq消息中间件
- springmvc
- spring以及事务
- java基础,jdk新特性
- jvm
- 多线程,线程池相关
- 集合
刚开始面的时候真的很惨,我甚至被打击的心灰意冷,陷入绝望。不过后来随着面试经验的慢慢积累,有些问题也就记住了,甚至形成了模板式的回答方式,成了一台毫无感情的面试机器。后来的话,也算拿到几个offer。总的来说,面试没有offer的时候也不要心急,因为随着经验值的增加,你终究会升级的。这里我建议面试的时候用手机悄悄录音,就是在面试官一进门的时候,你就打开手机录音然后把手机放在桌子上。回去之后把录音再听一遍,看看自己回答的有哪些不足,然后将一些问题记录到纸上或者文档上,这样就可以方便复习和回顾了。这里的话我再推荐拉勾的32个Java面试必考点,这是个面试提纲,虽然讲的不是很详细,但是覆盖的够全面,照着这个提纲去准备面试我感觉挺好的。面试时有一点要特别记住,扯得多不如扯得深,说一万句浅薄的理解不如你说一句有深度的理解让面试官对你刮目相看
实际工作
现在我已经入职快两个月了,感觉还算适应。总体感受的话,我觉得实际工作中sql语句以及mybatis(jpa)一定要好好学,那些标签都需要熟练掌握,因为平时写业务就这些用的最多。学的时候一定要亲手敲,多练习项目,新手一定要提升自己的代码量,否则就会出现面试通过,然后进了公司写不了项目的情况,很危险。
一些资料地址
下面是一些我之前提到的资料,或者我觉得一些不错的学习或者面试资料的链接地址 学习相关:
微服务电商【黑马乐优商城 11 月份完整版】(锋哥版)
2019JAVA-57 期教学视频 - 微服务电商【黑马乐优商城】(虎哥版)
我上传到github的乐优项目代码:leyou
品优购电商系统开发
Java 品优购互联网商城 项目实战(基于 IDEA)新版
Mybatis 教程 IDEA 版 - 4 天 - 2018 黑马 SSM-01
Spring 教程 IDEA 版 - 4 天 - 2018 黑马 SSM-02
SpringMVC 教程 IDEA 版 - 3 天 - 2018 黑马 SSM-03 【黑马】MYSQL 基础
面试相关:
拉勾官方 32个Java面试必考点(这个不完整,完整的是要付钱的,或者找盗版的)
程序员小伙收到 17K 的 offer 看看都问了哪些问题(上)(记得看这个视频下面的置顶评论哦,里面的那些面试资料帮了我大忙,一定要看)
我是程序汪(一个工作很多年的java程序员,平时会录一些电话面试的视频)
心静思远 - 9527(这个up很贴心哦,从面试到入职工作很多事项都讲了)
一个三年工作经验和月薪 16k 的 java 程序员应该要具备什么样的技能?(宝藏up)
其他java实战项目,主要都是黑马57期里面的,建议大家可以自行百度搜索黑马57期java:
学成在线
十次方
我自己找到的就业面试指导课程,里面有别人面试时的录音,我觉得也不错
链接: https://pan.baidu.com/s/1TAdj_igJ3iloKw_sY_8E3Q 提取码: wcck
b站还有很多很有用的资料,推荐大家自己找找,另外我觉得尚硅谷的教程也很不错。
一些好用的网站,:
菜鸟教程
w3school
how2j
一些经验
实践是最好的老师,有句话叫try, it won't boom,试一试,这个不会爆炸的。意思就是实践出真知,因为计算机编程相比其他行业最大的优势就在于实验成本低。有什么问题不清楚的话,与其问别人,不如自己写个demo亲自测试一下,又省时间又稳妥。