从Java小白到蚂蚁金服,我看了这些书
先简单介绍下个人情况,笔者本科跟硕士都是就读于国内中游985的学校,所学专业是机械工程,本科阶段只学习过c++,研究生阶段基本没有上过跟计算机相关的课程,可以说刚开始完全是一个计算机小白。
读研阶段空闲时间比较多的,当时就是想着珍惜时间多了解点东西,就开始了自学Java,期间兜兜转转也走了很多弯路,也咨询了很多大佬的意见,总算是拿到了互联网的入场券。
春招有幸通过阿里巴巴的实习生面试,5月底前往蚂蚁金服实习,8月底顺利转正,实习回来之后投了几家头部的大厂,基本也都拿到了offer,后来权衡了很多因素,还是选择了蚂蚁金服,在10月底完成签约。
最近有很多在Java自学路上的朋友咨询我学习Java的比较靠谱的路线,因此就想着出一篇指南,当然并不一定适合所有人,只是个人觉得比较好的一条学习路线,以及一些推荐的书籍,希望能给准备跨行学习Java的朋友提供一些帮助。
Java基础篇
对学习一门新的编程语言的同学来说,一本合适的入门书籍的重要性是不言而喻的,如果这本书晦涩难懂,里面的概念模糊不清,肯定会打击到不少同学学习的积极性。
如果是一个小白的话,特别推荐的一本入门书籍就是《Head First Java》。
这本书以漫画故事的形式,深入浅出介绍Java世界的基本知识,特别适合刚刚入门的同学阅读,能够极大地勾起刚入门者学习的兴趣。
但是这本书由于大多以漫画的形式展开,有些概念介绍的不是特别全面具体,因此需要一本介绍全面的书籍作为补充,这里比较推荐的是《Java核心技术》,这本书分卷一与卷二,初学者可以先通读卷一,这里面已经覆盖了大多数的Java基本知识,且每个知识点讲解都比较详细,基本上读完这本书,对Java就有了一个整体的认识。
除此之外,李刚的《疯狂Java讲义》也比较全面,亦可作为入门类书籍。
一般来讲,这类书籍主要是起到一个字典的作用,在我们碰到一些没见过的或者遗忘的知识的时候,翻阅查看用。
因此,语言基础入门推荐书籍有三本:
《Head First Java》
《Java核心技术》
《疯狂Java讲义》
关于要不要看视频这个问题,个人意见是能不看就不看,当然如果觉得直接看书有压力,也可以先以视频入门,但是要明白的一点是,看视频是一个被动学习的过程,而自己去看书是一个主动学习的过程,主动学习思考远比看视频对知识的理解更深刻。
在阅读完入门书籍之后,下面的概念是必须要掌握的,可以对照测试一下,是否真的能根据这些提示,将知识完整的串起来:
Java语言的特性,与C++等语言的优劣对比
Java的8种基本数据类型
数组
条件、循环等控制流程
对象与类,继承封装多态
反射
泛型
异常
学习完是否能够轻松的在脑海中浮现各个模块的一些重点知识呢?关于每个模块里面的必须掌握的知识点,我会在个人公众号里面慢慢更新。
在这里给大家一个小建议,在学习一门新的语言的时候,各种概念会相当繁琐难记,因此在学习的时候,尽量养成一个做笔记的好习惯,可以每学习一个知识点,就以博客的形式记录下来,一方面是加深印象,另一方面是以便以后翻阅。
在掌握了这些基本概念之后,我们还要学习的一个重头戏就是数据结构,在这里推荐两本学习数据结构的书籍:
《大话数据结构》
《数据结构Java语言实现》
理解了数据结构,我们才能知道自己要写的一些算法程序为什么这么写,不然只是单纯的去看别人写好的程序,只是知道这么写是对的,而不知道这么写的原理。
学会了Java基础与数据结构,我们就可以找一些简单的算法题练习了,在这里给大家推荐一下牛客网这个平台,在这里有大量的在线编程的题目供自己练习,还有一些与概念相关的选择问答类题目,自己练习的第一类题目就是PAT练兵场先从乙级练起,这里的题目都相对基础,但是能让自己快速掌握基本数据类型与集合的使用。
后面的话就根据自己的能力,在这个平台上面多多使用Java语言去完成一些编程题目,我是在牛客网上完成了剑指offer以及一些公司的笔试真题,不断的训练自己做题的手感。
除此之外LeetCode也是必须要多刷的,笔者就感觉刷的少了,只刷了大概200多道,有时间的朋友一定要多花点时间刷题。
在完成Java语言的基础学习期间,对非科班的学生来说,计算机方向的基本知识也要恶补,计算机网络,操作系统,计算机组成原理,编译原理等等这些基本功课都要做足,在这里我罗列一下自己的参考书籍:
计算机网络:《计算机网络》,《计算机网络自顶向下方法》《TCP/IP详解》《图解HTTP》
操作系统:《计算机操作系统》
计算机原理:《计算机组成原理》
编译原理:《编译原理》
这些计算机基本功一方面可以参考学校的教材,另一方面也可以参考网上的一些比较推荐的书籍,有些书籍我没有看过,不太知道质量如何,在这里就不做推荐了。
除此之外,在看书的同时,网上的一些技术类博客还有知乎的一些技术贴都是很好的学习途径,一般这些帖子都是作者经过自己的理解提炼出来的比较独到的知识,这些都能够帮助我们加深理解。
在完成以上的学习之后,Java基本上就算是入门了。
中阶篇
对Java来说,只是解决一些基本的算法题目肯定不是这门语言诞生的初衷,
在掌握了基础之后,就可以真正的用这门语言去做一些事情,Java主要是用在后端开发中,这个时候,我们就可以真正的用Java去搭个网站,去搞搞事情。
在准备开始做项目之前,有些知识是必须要掌握的:
对Java来说,框架是其中重量级的一部分,各种应用都是在框架上面搭建起来的,现在企业最常见的就是基于SSM框架在做项目开发,一些比较大的公司可能会在这些框架的基础上进行一些适配开发,比如我在蚂蚁金服实习的时候,他们所用的就是SOFA框架。
不过自学练习的话还是推荐Spring,SpringMVC,MyBatis等这些开源的框架,有什么问题可以在网上很方便的查到答案。
学习框架的第一部分就是要学会使用,然后才是深挖原理。虽然现在大厂的面试特别喜欢问底层实现,但是这些都是在我们能够熟练使用的基础上去考虑的事情。
这里推荐一本学习Spring的经典书籍《Spring实战》,通过这本书,我们可以了解到什么是IOC,AOP,什么是bean,以及SpringMVC与SpringBoot等等相关的东西,从这里才真正体会到Java语言的优美之处,除此之外《Spring技术内幕》也是一本不错的书籍。
在一个完整的项目中,除了框架知识,数据库知识是必不可少的,在这里推荐我学习数据库的几本书籍:
MySQL:《MySQL必知必会》《高性能MySQL》《MySQL技术内幕》
Redis:《Redis设计与实现》《Redis实战》
关系型数据库MySQL与非关系型数据库Redis是最常用的两款开源数据库,一般个人做项目的话,这两款基本就能够满足需求了。
除此之外,一个好的项目应该看起来条理清晰,方便扩展,设计模式是帮助自己在项目中进行设计的很重要的一部分,在这里推荐基本我用过的感觉很不错的两本书:
《Head First设计模式》
《大话设计模式》
Java语言天生就有多线程的特性,多线程也是项目中常常用到的部分,在这里我主要参考了三本书:
《Java并发编程的艺术》
《Java多线程编程核心技术》
《并发编程实战》
关于框架这一块学习的话,个人建议是多多使用就能慢慢摸清里面的门路,只是单纯的去看书,查阅资料,难以有大的提升,可以多多去github上看看一些经典项目是如何搭建框架的,自己去多多去尝试,有了几个项目经验之后,对框架这一块就会逐渐熟悉。
学会使用之后,后面的话就可以去深挖原理。真正的进行一些项目的开发实战才能对这些知识有更深刻的理解,如果实验室没有相关项目的话,在这里推荐一个比较好的实战项目,牛客网的项目课视频,初级篇是Python语言,中级跟高级都是Java语言,叶神讲的真的很到位,而且前端页面都已经帮我们写好了,我们可以重点关注后端代码的实现。
高阶篇
仅仅是完成Java基础学习与项目实战还不足以支撑自己在求职中找到一个好工作的,越是大厂的面试官考察的问题就越深,而不仅仅是流于表面,在这里还要给大家推荐几本必读书籍:
《算法》:这本书是基于Java语言讲解,从基本的数据结构到各种经典算法都有涉及,可以说是Java提升的必备书籍。
《深入理解Java虚拟机》:通过这本书可以以一种轻松的方式虚拟机的运作原理。
《程序员代码面试指南》:左神的一本介绍在笔试面试中常见算法题目的书籍,有了它,相信征服大多数面试官不是问题。
《鸟哥的Linux私房菜》:对程序员来说,Linux系统最起码也要有所了解,这本书以一种轻松易懂的方式介绍Linux操作系统。
《大型网站技术架构核心原理与案例分析》:作者是阿里巴巴的工作员工,用最简洁易懂的方式介绍一个网站的发展历程。
《大型网站系统与Java中间件实践》:了解各类中间件在一个网站系统中如何发挥作用。
Netty与Maven也是需要掌握的,在这里推荐两本书:
《Netty实战》与《Maven实战》
以上基本上都是Java程序员必看的书籍,除此之外,随着涌入计算机行业的人越来越多,面试时在考察的深度与广度上都在不断加深,对一些集合,框架源码以及中间件的考察,对分布式,微服务的考察,对底层操作系统的考察等等都越来越普遍,因此,在学习完必备的知识之后,也要对这些方面多多关注,如果对某个点研究得很深入,在面试时对面试官加以引导,展现自己擅长的方面,相信进入大厂不是梦。
求职篇
不管是看书还是做项目,我们的的目的就是找到一个好工作,这些书籍跟项目的作用就是完善我们的知识体系,但是我们在求职的过程中也要注意方法。
老实来说,想找一份Java的高薪工作需要学习的东西确实很多,因为面试官可以问的范围太广了,但是,面试官问问题也是有侧重点的,并不是所有的东西都会问到,在这里,大家在求职的时候就要多多去一些论坛上刷一刷别人的面经,保证心中有数。
比如美团面试中就会经常问到HashMap,ConcurrentHashMap,阿里就喜欢问一些框架底层原理,腾讯就喜欢问一些网络编程的东西,字节跳动喜欢问BIO/NIO等等,这里只是举一个简单的例子,并不一定会在面试中真的问到,但是问到的频率还是蛮高的。
其实多刷一刷面经,就可以了解一些公司常见的问题以及面试套路,自己可以针对这些问题,给出自己的答案,多多练习,真正把自己的实力展现出来,相信都能给面试官留下一个好印象。
关于各大厂喜欢问的面试题目,我会在个人的公众号里面慢慢总结,感兴趣的朋友可以关注我的公众号“Java技术方舟”,我会定期分享一些有意思的内容。
回复关键字:“Java”,即可获取超全Java学习资料,包含入门,进阶,面试以及大量项目实战。回复关键字“电子书”即可获取文中提及的所有书籍电子版。
回复关键字“IT”就可以加入互助群啦,分享资料,交流心得,认识好友~