香雨站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 90|回复: 5

零基础自学从入门到进阶,有什么值得推荐的Java书籍?

[复制链接]

2

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-21 16:00:59 | 显示全部楼层 |阅读模式
本人华科毕业,自学Java,对整个技术栈有一些沉淀,并顺利拿到阿里巴巴集团校招offer,中间也走过很多弯路,所以想把自己的一些经验分享给大家。
看书一定要看经典书(不在多),先放图镇楼,然后按照由浅入深的顺序(Java语言基础->Java语言进阶->分布式&存储->修炼内功)来对书单做描述以及推荐的理由。
而且一定要遵循一个核心原则:“理论+实践”,逐步迭代递进的过程。
基于本人的经验总结了一个学习新知识的方法论:


除了推荐书籍外,第2部分还会分享本人自学Java并拿到阿里巴巴校招offer的方法论
文章字数长达1万+,建议点赞收藏防止迷路~
先贴一张Java技术栈的全局图:


首先是语言基础,有了扎实的语言基础,才可能写出一手好的工业级的代码。
第一阶段:Java入门书单推荐

目的是掌握java语言基础,进行简单的开发。
学习内容:
1.Java入门书籍,后面有列举推荐。
2.代码规范。Java服务端遵循的是Oracle的Java语言编码规范,在编写代码之前,要先熟悉。
3.开发流程。了解开发流程,而且必须要熟悉每一个环节。开发流程大致是:功能开发→单元测试→功能测试→Code Review→集成测试→发布。
4.开发工具。对于入门者来说,首先建议你安装JDK+文本编辑器的开发工具包,并下载和你的JDK版本一致的API帮助。另外,你最好掌握常用类库和工具包,如goole guava等,因为JDK原生API在很多场景下并不方便。
推荐书籍1:《head first java》


Java入门首推《Head First Java》
这本书相比常见的另外两本书《Java编程思想》和《Java核心技术》,偏趣味性,语言也比较轻松,能将高深的知识讲的浅显易懂,不会让人觉得枯燥无味
另外2本书大块头,部分章节比较枯燥难以理解,容易让初学者钻进去出不来。
推荐书籍2:《Java并发编程实战》


要写出工业级的代码,必然和并发脱离不了干系。程序员面试,并发也是必考知识点之一
这本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册
书中从并发性和线程安全性的基本概念出发,重点介绍了以下内容:
如何使用类库提供的基本并发构建块;
用于避免并发危险、构造线程安全的类及验证线程安全的规则;
如何将小的线程安全类组合成更大的线程安全类;
如何利用线程来提高并发应用程序的吞吐量;
如何识别可并行执行的任务;
如何提高单线程子系统的响应性;
如何确保并发程序执行预期任务;
如何提高并发代码的性能和可伸缩性等
最后介绍了一些高级主题,如显式锁、原子变量、非阻塞算法以及如何开发自定义的同步工具类。
但是这本书并没有摆脱译本常面临的翻译枯燥的毛病,没有上面推荐的《Head First Java》那么有趣,需要耐着性子啃下来。


第二阶段:Java语言进阶书单

需要掌握基本的调优技能以及面向对象设计的思想,为写出工业级代码打基础。
学习目标:服务端项目开发
学习内容:
1.Spring。项目开发必备。
2.关系型数据库。主要学习MySQL,包括设计MySQL表结构,基于执行计划的SQL分析优化根据业务特点分表分库,数据库容量规划等。
3.非关系型数据库。主要学习NoSQL,Hadoop、HBase、Hive这些常用的工具一定要学会使用。
4.服务容量规划和性能调优。性能调优知识、可靠性保障、故障处理、监控报警系统,这些也都要掌握。

推荐书籍3:《深入理解Java虚拟机》


作为Java程序员,不懂JVM是不行的。
本书详细讲解了类加载、java内存原理、垃圾回收机制等知识。只有掌握了JVM,才能在实际生产环境遇到线上问题如GC频率过高、内存溢出等应对自如、还有应用系统JVM参数合理配置。
本书是JVM公认的推荐好书,是Java进阶必看书籍



推荐书籍4:《Java性能权威指南》


市面上专注于Java性能的并不多,能游刃有余地展示Java性能优化难点的更是凤毛麟角,本书即是其中之一。
通过使用JVM和Java平台,以及Java语言和应用程序接口,本书详尽讲解了Java性能调优的相关知识,帮助读者深入理解Java平台性能的各个方面,最终使程序如虎添翼。
推荐书籍5:《大话设计模式》


如果以前未接触过面向对象程序设计,那么本书必读,毕竟面向对象程序设计和C语言中面向过程设计有很大的不同。
第三阶段:分布式书单推荐

学习目标:中间件开发和分布式系统
学习内容:
1.开源项目:学会分析项目中的设计思路、中间件开发和项目源码,比如RocketMQ、Netty等。
2.知识体系构建。回顾自己的学习过程,建构自己的知识体系,多看大型网站系统和技术建构,了解核心原理和Java实践过程。
3.参与项目。参与项目的过程是提高深化的过程。在这个过程中你就能发现自己对那些知识掌握不足,也能够提高自己的能力,多参加项目才会提高更快。
4.根据自己的实际需求提升某方面技能。这就是个查漏补缺、优势扩大的过程。在流式计算上有优势,就进一步提升,在找一些相关的书籍精读。

推荐书籍6:《数据密集型应用系统设计》


吐血推荐,本书豆瓣评分9.7分,堪称分布式领域圣经,本人非常后悔没有更早的阅读本书
本书并没有局限于那种分布式框架,而是着重讲解分布式整体架构设计理念和基础知识。
作者水平非常高,本书广度非常大(诚然并不是很深,要在一本书里将那么多知识深度讲解也是不可能的),深入浅出,大家不用担心晦涩难懂(在这里更加推荐英文基础好的话直接读英文原版)。
包含:分布式系统的存储(第三章存储、第五章复制、第六章分片)、分布式一致性、实时计算(第十章和十一章的批处理和流处理)。书中更是给出了相当多的参考文献链接,值得深入研究。


书中有大量插图,将分布式系统高深的技术形象生动的描述,通俗易懂,比如下图是讲数据库多副本 并发写的问题的:



推荐书籍7:数据库《高性能MySQL》


本书深度讲解了mysql引擎架构、索引设计、SQL查询优化的实战技巧、复制、分片等原理,还有运维技能。适合精读。
如果是从事网络相关开发,如rpc框架、mq消息中间件,那么还需要掌握网络相关基础知识,以及业界有名的高性能网络组件Netty。
第四阶段:java内功修炼

推荐书籍8:《重构》


所谓精益求精,同一件事,同一个功能,让不同的人来做会写出不同的代码。本书通俗易懂,教你如何不断优化现有代码,逐步迭代重构,写出清晰易懂、功能正确、可扩展可维护的代码。
如果你的目标是拿到大厂Java工程师offer ↓↓↓

除了钻研上面几本书,下面这些方法论也要掌握!

再来贴出一张自己总结的脑图,然后分别详细介绍。


一、计算机基础

计算机基础非常重要!
计算机基础非常重要!
计算机基础非常重要!
重要的事情说三遍。几乎各个大厂面试前2轮面试都会重点关注基础,如果基础不扎实,那么就很难进入后面的面试。
计算机基础重点课程是这6门课程:
(1)操作系统
操作系统必备的基础知识和常见面试题总结:

  • 进程和线程的区别
  • 并发和并行
  • 常见进程调度算法
  • 程序的编译阶段具体是做什么的
  • 死锁是什么以及如何避免死锁
  • 进程同步的方式有哪些
  • 磁盘调度算法有哪些
  • 软连接和硬链接
(2)计算机组成原理
必备技术点:

  • unicode和utf-8编码的区别
  • 计算机的层次结构
  • 计算机性能指标
  • 翻译和解释分别是什么?
(3)数据结构
典型的数据结构:数组、队列、栈、堆、树、哈希表、并查集、字典树,原理要知晓和理解;并且队列、堆、栈、树这种典型数据结构能手写代码自己实现
(4)算法

  • 排序
  • 分治
  • 动态规划
  • 搜索
  • 回溯
这几个典型的算法一定要能熟练掌握原理并能运用,举一反三,解决实际的问题。
(5)计算机网络
常见面试题:

  • OSI七层协议和TCP/IP的四层模型
  • TCP三次握手和四次挥手
  • sync flood攻击是什么以及应对方案
  • TCP的可靠性保证
  • TCP和UDP的区别
  • TCP的流量控制机制
  • HTTP的几种请求方法
  • 浏览器中输入一个url后总共发生了哪些事情
(6)数据库
这里给大家整理一份详尽的数据库重点知识点脑图:


关于如何打好计算机基础,可以看我下面这个回答:
二、常见框架

只学习语言还不行,还必须对常见的开发框架掌握使用,并对经典的框架了解其架构实现、读其源码。
(1)spring
spring在面试中出现的频率非常高


spring是一个轻量级java开发框架,最早由Rod Johnson,目的是解决企业级应用开发的业务逻辑层和其他各层的耦合问题。其最根本的使命是解决企业级应用开发的复杂性
spring的优点:

  • 解耦,简化开发。开发者可以将所有对象创建和依赖关系维护,交给spring管理。
  • AOP编程的支持。可以方便的实现对程序进行权限拦截、监控等功能。
  • 非常方便集成各种优秀框架。如mybatis、hibernate。
  • 降低javaee api的使用难度,进行了比较好的封装。
架构模块设计:


常见考题可以参考之前总结的这个帖子:
(2)dubbo-阿里巴巴开源的java服务框架
pache Dubbo 是一款高性能、轻量级的开源 Java 服务框架,提供了六大核心能力:

  • 面向接口代理的高性能RPC调用
  • 智能容错和负载均衡
  • 服务自动注册和发现
  • 高度可扩展能力
  • 运行期流量调度
  • 可视化的服务治理与运维。
目前已有非常多的公司使用在实际生产环境中。


官网:Apache Dubbo
github:apache/dubbo
其技术架构:


(3)mybatis-ORM框架
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。


官网:mybatis - MyBatis 3
github:MyBatis
(4)redis
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。
它有4大优势:

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
源码也不多,质量很高,推荐一读。
(5)rocketmq
官网:https://rocketmq.apache.org/
github:apache/rocketmq
阿里巴巴开源的消息中间件,现在已从apache顶级项目毕业。
技术架构:


也可以结合这本《RocketMQ技术内幕:RocketMQ架构设计与实现原理》来看源码。
三、实战练兵怎么做?

Talk is cheap, show me the code.
计算机编程是一个非常注重实战的领域,在Java学习过程中,必须要有一个实战项目,来帮助大家巩固之前的学习成果。
那么有哪些实战的方式呢?
推荐几个优质的练手的项目,github star都非常高
这些项目都非常贴近实际应用,麻雀虽小五脏俱全。
1、电商系统mall

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。
前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
系统架构:


业务架构:


github:macrozheng/mall
2、秒杀系统

一个完整的秒杀系统,用到了诸多开发框架:MQ、SpringBoot、Redis、Dubbo、ZK、Maven,lua。
github:qiurunze123/miaosha


3、一个基于Spring Boot & MyBatis的种子项目

用于快速构建中小型API、RESTful API项目~
github: lihengming/spring-boot-api-project-seed
4、一个博客系统ForestBlog

基于Spring+SpringMVC+Mybatis
github:saysky/ForestBlog
另外,在实战阶段,应该重点关注以下几点:
l 文档编写:编写详细设计文档也是程序员必须具备的一项技能,要学习设计文档的编写格式,编写规范。
l 设计模式: 代码编写时要注意设计模式,尽可能提高代码的可读性、可重复使用性。
l 边界条件的校验和处理:在实际开发过程中,系统出现最多的问题都集中在边界条件的校验和处理上,所以在实际开发过程中,应该要有意识的考虑这些问题。
四、再说一些其他的很重要的

(1)自学能力的培养。
现在已经是互联网时代了,我们能从网络上很方便的获取大量、免费的资料,如公开课、电子书、github上的开源代码。我们需要有从大量信息中筛选有价值信息的能力,人的精力是有限的,我们不可能面面俱到,学习一定要学经典资料。二是提升自己的自学能力,掌握学习新知识的方法论。
(2)养成写博客的习惯。
写博客对我们好处很多:

  • 如果能讲出来让别人懂,那说明自己是真的懂了。勤总结可以不断加深我们对知识的理解;
  • 博客也是自己的一个标签,能够让自己在以后的面试中获得加分;
Java代码写得太烂了应该如何优化呢?下面这个回答一定要看:
为什么阿里巴巴这么喜欢Java语言?你难道不好奇吗?
最后想说的是,看书是一方面,更重要的是实战,勤动手,看源码,多Debug,写DEMO,多参与开源社区讨论。
祝点赞的人都能拿到理想的offer。
回复

使用道具 举报

2

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-21 16:01:31 | 显示全部楼层
刚上学的时候一直向做一个黑客,但基于没有钻研的劲儿,放弃了~
回复

使用道具 举报

1

主题

3

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-12-21 16:02:28 | 显示全部楼层
MARK
回复

使用道具 举报

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-12-21 16:02:55 | 显示全部楼层
可惜了
回复

使用道具 举报

3

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-12-21 16:03:30 | 显示全部楼层
B站绵羊
回复

使用道具 举报

1

主题

4

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2022-12-21 16:04:25 | 显示全部楼层
我怀疑你是卖书的,但没有证据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|香雨站

GMT+8, 2025-7-4 09:45 , Processed in 0.099450 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表