顽木芽:从小白到收到满意offer-Java开发学习之路
有些读者看过之后,还是有些疑惑,比方说:“虽然知道要看哪些书了,但是具体从哪一本入手?”、“我现在看了一些视频教程,但是接下来不知道该学哪部分了?”等等...
那好,这篇文章我就详细说说,我一路是怎么走过来的...
首先我本科不是计算机专业,只是学过一点皮毛,上过一些C语言、数据结构课等。基本上是没有什么计算机基础的,我主要的计算机的积累,还是在研究生阶段。
考研主要是学习了,操作系统、数据结构两门课,计算机网络和计算机组成原理都没有学。我的基础就是这样的。
主要决定以后从事Java开发,是在研究生入学后,才决定的。因为实验室项目用的也是Java语言。
我首先看的书是《Java编程思想》,当时也是听师兄说的,买来看后,发现读起来有些吃力,看了不到一半,有些看不下去了,因为只看而不实践的话,有些地方是理解不了的。
我又从网上找来了一些培训班的视频教程,跟着看,边看、边敲。那个时候,虽然没有系统的学过Java语言,但是我有C语言基础,而且Java语言用起来也不难,我研一的时候,已经在用了,项目中用的就是Java语言。
之前接触过一些网站开发,一些SSH框架等。研一我又找来一些,网站开发的视频教程,跟着敲,一步一步的做项目,但是做到最后,发现,经常是有一些小地方,出现一些问题,就是解决不了,碰巧解决了,也是从网上搜的解决方法,如果网上找不到,那么我也就解决不了。
这让我开始反思我的学习步骤,可能有问题。跟着视频敲,顶多也就是模仿,对于做项目来说。及时做出来,我也不懂其中的原理,只是照猫画虎的做出来。要是稍微改下,或是从原理级别的理解,我是不够的。
于是,我开始系统地看书,学习Java语言特点,学习JavaAPI,就开始了看书之路了。
这时候,已经是研一下了,我每周都要去市区导师公司上2,3天班,6月底考完试,基本就住在市里开始,全职上班了。
因为白天上班,主要是在输出,在写代码,白天基本上就没有什么时间看书,所以我想办法,挤时间看。
从我住的地方到公司,每天坐公交都要半个小时时间,而我上车的地方人很少,基本每天都有座位,而每天的这半个小时时间,只能在公交车上刷手机。
我不想浪费这半小时,所以我每天背一个包,包里放一本《Java核心技术》(上册),在公交车上看。而且看书的话,时间也过的很快,转眼就到公司了。
下班之后的时间,我也利用起来了。因为我住的地方没有网,公司里有网,还有电脑。下班之后,一般吃完饭,我会回公司,如果白天有没完成的事儿,就做完它,然后剩下的时间,就是看《Java核心技术》(上册)。
对了,看书的时候,我有个习惯,我买来了一些水彩笔,每看书,必拿一支彩笔,边看边把我认为需要重点记得地方画出来。等周六日休息的时候,我就可以把之前看过的章节里的重点勾画过的地方,总结下来,总结成电子版,方便以后复习。
核心技术看完后,我又了解到《疯狂Java讲义》也不错,于是我又买来这本书,利用下班后的时间看,因为已经看过《Java核心技术》(上册),所以这本书读起来就快很多了,而且也不是说,里面的内容必须全部读完,只读我还有些不太清楚的章节,还有重要的章节。不一定非要一页一页地读完。
白天上班开发的时候,经常看到一些重写的hashCode()和equals()方法,而且也遇到过因为这两个方法写的有问题,而导致的bug。我又想起来,之前一位师兄,给我说过的书《Effective Java》。
买来后,不能说是每天晚上读一会儿,反正是想起他来了,就读一会儿。同样也是边读,边划知识点。
其实之前是不知道,书里会讲到hashCode和equals的书写原则的。但是读书就是有好处啊,书中自有黄金屋,是不假的。
一次晚上,我读到书里讲到的重写hashCode和equals方法的原则的时候,开心的不得了,因为这正是我当时心里的疑惑,白天开发中经常看到代码里的hashCode和equals的方法,而且师兄给我说,这两个方法不要轻易改动,我只知道重写这两个方法比较重要,而具体的重写原则,我是不知道的。
正好此书里比较详细的讲了,这两个方法的重写原则,我一下子豁然开朗,茅塞顿开,记得当时还激动的发了一个朋友圈,说这是一本好书。
这本书我没有看完,看到后面,讲的一些原则,涉及的开发领域,我还没有涉及到,所以暂时看不懂,于是就搁置了,没有继续看。
之前接触过网站开发,我就想自己做一个网站,类似博客系统,于是买来Spring开发的书来看。
我是先买的《Spring4.x企业应用开发实战》,这本书讲了Spring开发中的一些方法,常用的开发模式,书里的内容比较多,我也是用到啥模块,就去详细的看具体模块的用法,边结合着在网上查。
网站开发一般都是MVC模式,控制部分据说SpringMVC框架比其他的Struts要要用,而且SpringMVC也是Spring家族里的。我又买来讲解SpringMVC用法的书《SpringMVC学习指南》,书虽***,但是够用了。
做网页的时候,需要用到写jsp页面,我在网上查到前端的框架,有一个很好用的,效果很好的前端框架bootstrap,我又买来了一本《基于Bootstrap的Jsp项目实战实例》,书也***,很容易看,算是入了门,书中也有些例子。我查到写网页用WebStorm IDE 不错,就安装了WebStorm用来写jsp页面。
我在网上看到有的博客的页面也得很好看,于是我就模仿他,去Bootstrap官网的开发文档里,找相关的Demo,让我找到一个和我要的效果类似的页面。于是,我就看官网的各种元素的介绍,使用方法例子,并最终做成了我想要的效果。
数据库用的MySql数据库,DAO(Data Access Object)用的框架是Hibernate,我找来视频教程,跟着学,会用就够了,够我用,就ok。
SpringMVC也看过一些视频教程,学会了简单的用法,然后以上的这些学习,集成在一起,最终做成了一个博客。
期间解决了一个个的问题,那其中的快乐,开心的有时只有自己能体会到...
项目做的差不多了,基本功能都有了,我想发布到网上去。又买来Linux书看了看,在网上查如何部署网站,买域名,租服务器等等,一点一点捣鼓。哦,对了,这些都是我下班后,晚上干的,还有周六日干的。
这时已经快到年底了,哦对了,期间我的上一届师兄们,找完工作后,我向他们取经。有一位师兄推荐看《深入理解Java虚拟机》,我也买来一本,开始看。
这本书,主要是一些重要的概念,对于jvm的理解很有帮助。我看的时候,就是不停的往后看,遇到看不懂的,也不深究,就往后看。有些概念,一遍是记不住的。第一遍看了80%以后,后面就开始总结里面的重要的概念,顺便在网上搜集一些jvm的面试题,针对面试题,去书里找答案,总结,整理出来。
还有并发,并发听师兄们说,也要看。推荐的是《并发编程的艺术》,买来看,业余时间看,边看边划。还有我不是写了个博客吗,里面用到了SpringMVC。
公司项目里,我也阅读了大量前人写的代码,被虐过之后,激发了我读源码的勇气。我就在我的网站项目里,关联上SpringMVC的源码,并买来一本书《看透SpringMVC》,此书就是讲源码的。
我边看此书,边对照着看项目里面关联的SpringMVC jar包里的源码。我在网上搜怎样读Spring源码的时候,发现网上有人说,读源码的话,需要会设计你模式,因为一些优秀的框架中肯定是用了很多设计模式的。于是,我又跟师兄请教,设计模式的书。
后面,我买来《headFirst设计模式》,业余时间开始读,headFirst的书,读起来是很轻松,但是读过之后,就忘了。于是我又搜Spring中用到了哪些设计模式,针对这个框架中的设计模式来学,这才开始读源码,有的类,有的地方,读不明白,没关系,继续读就是了,说不定慢慢地就懂了,读就是了。我知道这是一个过程,总得迈出这一步。
读到里面的责任链模式的实现的时候,仔细的看了它的实现,我又联想到我的项目,是不是可以用到一些设计模式,就是公司中的项目,于是我又把责任链模式,和模板方法模式用到了公司的项目里。
就这样SpringMVC的源码算是看了一遍...
SpringMVC的源码看完的时候,已经是5月份了,是18年5月份。18年2月,在家过年的时候,我才开始刷题的,先开始刷的是牛客里的剑指offer题集。但是刷的很慢,遇到有的题看不懂,人写的ac的代码有的也不好看懂。有时一天一道,有时两天一道,有时一天2道。
开学后,刷的就快很多了。到5月份的时候,一遍已经刷完了。后面又开始刷第二遍,第一遍只是AC了,第二遍才是理解最优的方法,写出最优的代码。并把写过的代码和题目总结下来,6月份我就打印出来了,每天看看,在纸上写写。
6月份回到了学校,全身心准备找工作,中旬开始投简历,一些提前批已经开始了,就开始投。
还有一点,我从4月份开始,就开始每天早上的时候,上班之前,在小区的院子里,找一个座位,读我之前总结的笔记,涉及我看书总结的知识点、我搜集到的面试题和答案、偶尔干脆拿出一本书来读。
我记得很清楚,我拿着打印出来的笔记,4月份早上有点小冷,我把衣服上的帽子,扣在脑袋上,坐在长凳上。旁边时不时有遛狗的大爷大妈,我也就当没看见。一道面试题的答案,我一般都是读10遍,用手指头数着。
6月中旬开始投简历,笔试,面试,这期间也没落下看书。最先面试的是百度SRE团队来我学校招人宣讲。当时没报什么希望,就投了简历,想着试试,涨涨经验。
面试了两面,在第二面挂了,问到的一些网络的东西,没掌握到。虽然我本科自学过计算机网络,并且也考了计算机三级,但是记不清了。于是又买来,计算机网络的课本,针对于面试本问到的问题,开始看,边看边总结。
当时看的很快,可能也是看书多了,反正读起来,就是快,重要的地方,勾出来,并敲在有道云笔记上。这里我要推荐下有道云笔记了,太好用了,我的markdown语法,就是在有道云笔记上,练熟的。现在我的有道云笔记上,已经有好多我的笔记了。
MySql还没提到过,之前3,4月份的时候,我找来pdf版的《MySql必知必会》,很小的一本书,书写的也不错,对于Sql学习已经够了。在学校6月中旬,我才开始看《高性能MySql》,买了这么多书,现在又要买呀!买!有用就买。
《高性能MySql》这本书挺厚的,听师兄说,只需要看几章的内容。买来后,就开始赶紧看,边看边总结在笔记里,并搜一些面试题。边看书边面试,就这样持续到了7月。
《并发编程的艺术》看完了,偶然看到我同学在看《Java多线程实战指南》,跟他聊过后,他说此书是本好书,通俗易懂,比并发艺术的内容多,比《并发编程实战》通俗。
我又赶紧买来此书,也是看的飞起,因为已经看过《并发编程的艺术》了。还是老样子,我看书就是边看边划重点,后面再总结重要的概念内容,并搜集面试题,有针对性的看书找答案。
这本书是真的好,一个名不见经传的作者,写的书,竟然这么好,深入浅出,通俗易懂。
此时我就有了一个体会,很多看书的时候,如果遇到看不懂的书,对是你读一本书的时候,发现自己看不懂,很难懂。那就马上换一本,去找一本更好的书。读不懂不是你的错,很可能是写书的作者没写明白,或者翻译的不好。
后面面试的时候,问到的MySql的问题,总是答不好。我就想办法,可能是我研究的深度不够,不行,还得找本书来看。
搜书也是有方法的,是从我同学那里学到的。
1. 首先确定你要搜的关键字
2. 在豆瓣读书里面搜索
3. 按豆瓣评分,和书评找到你要的好书。
就是这三招,绝对好使。看找书也有对应的方法...
我找到一本《MySql技术内幕InnoDB存储引擎》第二版,速速买来看起,从8月份开始看起,到了9月份面试已经很多了,而且好多都是现场面试,我都还带着这本书,在地铁上看,在滴滴上看...
后面面试真的有用,并且用上了,在一个公司现场面试的时候,面试官问了我一个MySql的问题,我说记不清了,然后我补了一句“我在看《MySql技术内幕InnoDB》第二版,还没看完...”,面试官一听就笑了,她说“那本书是挺厚的”,然后一面给我过了...
网络除了计算机网络的课本外,因为做网站开发,肯定会涉及http协议,所以我买了《图解http》,还有师兄留给我的《深入分析Javaweb》,这两本书都很有用。
图解http较为简洁明了的讲了http的请求头,响应头,响应码等还有http和https等区别等。
《深入分析JavaWeb》则从宏观层面,将tomcat,servlet,框架等东西,还总结了一个网络请求的全过程,DNS的过程等。这些面试经常会问到。你看了,记住了,就赚了。
以上差不多就是我整个学习的过程了,叙述大致是按时间的顺序来的。
对,后面陆续又来了一些之前面试的offer:
除了互联网:百度金融,华为,keep,宜信,58,顺丰科技...
还有一些银行:交通银行,交通银行信用卡中心,浦发银行,工商银行等。
面试有的时候,看运气的,而且面试也很累的,面到后面有了比较满意的offer后,就不想面了...太累...
看我当时看书时,被同学***的那一刻,想想也挺有纪念意义的...
作者: 顽木芽 计算机 硕士;
左手代码,右手文字;
虽为理工男,却依然痴情于文字;
喜欢在书海里求真,解惑,
在音乐里震荡,激昻,
在健身房挥汗,成长。
希望我的文字,能给予你些许力量。