学java需要C语言基础知识

1次阅读
没有评论

可能是最全最靠谱的 Java 学习指南,文末赠送 3T 学习资料!本文会先介绍一下如何学 Java,接着就是福利分享时间啦!整理了大概 3T 左右的 Java 学习资料,希望对你有所帮助!我写过一个 Java 工程师学习指南,我把它分为了四个部分,第一步是打好 Java 基础,掌握 Java 核心技术,第二步是掌握 Java Web 技术栈,能够做一些项目,第三步是掌握 Java 方面的进阶技术,包括网络编程、并发编程、JVM 等,第四步是掌握后端进阶技术,比如分布式、缓存、消息队列等技术。按照这样的一个脉络,我觉得能够掌握这里面的绝大部分内容,并且有过相应的一些实践,那么可以算是学好了 Java。当然,学好 Java 只是一个开始,要真的干好活,做好项目,以及其他各方面的技术工作,则是在学好 Java 的基础去延伸和展开的。接下来就是具体的四篇文章,建议大家按顺序阅读,有点长,收藏的时候记得点赞或者评论哈。笔芯!Java 工程师学习指南入门篇最近有很多小伙伴来问我,Java 小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在 Java 后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四篇文章讲述 Java 的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的 Java 学习历程。今天我们要讲的是,小白同学如何入门 Java。先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人,如有错误敬请谅解。01 前期准备工作开发环境搭建这一步我们往往会直接跳过,但既然是面向小白的教程,这里就提一下吧。首先你需要一台电脑,然后安装好 JDK 和 JRE,JDK 提供的是 Java 开发工具,也就是一些必备的 jar 包,JRE 则是 Java 的运行环境组件,我们熟悉的 JVM 就在这里面。安装好这两个东东之后,一般还要配置一下环境变量,否则有一些目录可能无法被正确找到。IDE 选择和安装 IDE 指的就是本地开发编辑器,没有了它,你就只能直接在记事本这类工具里敲代码了。IDE 最大的好处就是整合了大量的工具和功能模块,让你非常轻松地完成开发。以前大家都用 eclipse,不过 eclipse 已经不流行了,现在我推荐你直接用 intellij idea 作为你的第一个代码编辑器。如果是用过 eclipse 的同学,基本上也可以无痛切换。intellij idea 可以直接在官网上下载,试用版 30 天,如果想要永久使用,网上也有一些办法滴。关于 jar 包 jar 包是什么,其实就是将一堆 class 格式文件打包,Java 中把它称为 jar 包,这些 jar 包在编译器中能被直接识别,让开发者使用。对于新手来说,可能只需要用到 JDK 自带的一些 API,但是如果你要引用外部 jar 包,可能就会遇到一些困难了。对于 idea 来说,导入外部 jar 包有两种办法,一种是手动导入 jar 包,一种是使用 maven。后者会在 Java Web 相关的文章中讲起。手动导入 jar 包其实也不难,你需要先下载好 jar 包,然后在对应的项目下选择导入 jar 包即可,具体的方法这里就不展开说了,因为在网上都找得到。02 学习 Java 基础的几种方法了解基础语法学习一门语言,最开始要做的事情就是学习它的语法。我最早学习 Java 语法是在 Runoob,这个网站可以让你对任意一门语言完成最快速的语法入门,当然,这只是相当于你浏览了一遍基础语法。想要真正掌握 Java 语言基础,光看基础语法还远远不够,我在大三第一次接触 Java 课程,听老师讲面向对象三大特征听得一头雾水,连数组的初始化方式都理不清楚,但这些内容都是我们需要掌握的。所以,为了学好 Java 基础,我们还需要看视频或者看书进行学习。看视频视频的话,可以到极客学院或者慕课网听 Java 基础课程,当然也可以看我分享的 Java 视频课程。大家也都知道,现在 Java 的培训班非常多,基本上学的东西也都大同小异,不过它们的有些课程还不错,大家有渠道的话也可以去看一看。看视频的好处是你可以更好地接收知识,同时也会耗费你更多实践,所以,有时候你也可以选择看书。看书看书的话,对于小白来说不推荐太复杂的书,比如《Java 编程思想》这种书,新手千万不要看。我个人建议,你只需要先看看《Java 入门到精通》这种类型的书就足够了,因为这个部分的学习只是为你后面的学习开个头,你以后可能还要回过头来重新研究这些内容。现在市面上介绍 Java 基础的书籍实在太多了,质量参差不齐,内容同质化严重,笔者看过的其实也不多。给大家一个建议,你只需要挑一两本书来看即可,这里推荐两本最简单的吧,《head first java》和《Java 从入门到精通》。看博客这里再推荐另一种学习方式,就是看博客,博客比起书籍来说,更适合对于某个技术点的学习,你可以很容易地在网上找到这个知识点相关的原理,实现方法,以及代码范例。我的博客里没有讲解特别基础的东西,如果你看一些比较基础的文章,可以到 Runoob 等网站上查看。如果你有一个很明确的知识点想要学习,相信搜搜引擎会给你更好的答案。代码实践除此之外,一般的 Java 书籍或者视频课程都会要求你相应完成一些练习题,这部分内容你需要自己在电脑里使用 IDE 完成。在 IDE 里,你可以很好地熟悉 Java 语言的使用,基本代码的实现,同时可以尝试各种各样的 API, 并且测试一些语言特性,比如继承,封装,多态等等。另外,这也是你熟悉 IDE 的一个好机会,因为在公司里做开发可能要用到 IDE 各种各样的功能,提前熟悉好 IDE 绝对是有益无害的。03 Java 入门必备知识点梳理在 Java 入门阶段,你可能需要接触到以下这部分知识,不管你是从通过哪种方式学习,这些内容都是你学习 Java 基础时绕不过的重点。Java 基础知识这部分内容是你必须要掌握的内容,在入门阶段你需要把这些基础打扎实,以便于在学习后面的内容时可以更上一层楼。如何把基础打扎实呢,最好的办法就是在 IDE 上把书上或者视频上的每个例子都实现一遍,当然有的时候你也可以自己写一些有意思的例子。1 基本数据类型比如 int,double,char,以及其包装类。熟悉基本数据类型的使用,了解每种类型所占的字节数,以及它们和包装类之间的相互转换。2 流程控制比如 for 循环,if else,while 循环等等如果是学过 c 语言的同学,这部分可以跳过了。3 字符串类型 String 的使用字符串类型是 Java 中很重要的类型,它不是基本数据类型,但却很常用,熟悉和实践 String 相关的 api,开始你对字符串的学习吧。4 数组数组的初始化方式有哪些,二维数组应该怎么写,把数组当成方法参数又该怎么处理?5 类和对象 Java 中最重要的两个概念:类和对象,它们有什么用呢,有什么区别和联系呢,请在代码中实践它们吧。Java 核心技术对于这部分内容,我相信很多小白只能了解它们的基本使用方法,但是并不明白其背后的一些原理:比如为什么接口和抽象类有这些区别,多态的意义是什么,为什么要有反射。新手在学习这部分内容时,只需要知道怎么用就可以了。当然,你最好把这些特性都实现一遍,以加深印象。至于为什么有这些特性,这些特性背后的原理是什么,不是我们现在讨论的内容,这些内容我们将在初级和中级篇中讲述。因为,要了解这些原理,你得了解 JVM,了解并发技术的基础,了解网络基础,甚至更多。显然,这不是你现在能做到的。1 接口和抽象类写一些接口,同时写一些实现类去实现这些接口,并且了解一下为什么我们需要接口,为什么子类需要实现接口里的方法。同理,去实现一些抽象类吧。然后,看看它和接口有什么不同。2 继承,封装和多态如何理解继承,子类和父类之间有什么联系呢。封装是一种保护代码的方式,有哪些方式可以实现封装呢。多态一般分为重载和重写,它们分别怎么使用?3 异常处理 Java 中的异常处理主要用于捕获和处理错误,请你写一些 try catch 代码块去捕获错误吧。4 集合类集合类是我们经常需要打交道的东西,List,Map,Set 等等,赶快去熟悉 API,然后写一些测试例子吧。5 IO 输入流和输出流 IO 输入流和输出流可以操作文件,网络数据等内容,如何在 Java 代码中完成这么复杂的操作呢,其实只需要简单的几个 api 就可以了。6 多线程为了让系统资源最合理地分配和调度,我们需要多线程,多线程会让程序变得有趣,也会带来很多问题,使用 Thread 和相关 API,去尝试这些有趣的事情吧。可选内容:1 反射(了解即可,不是入门必须)2 枚举类型和泛型(了解即可,不是入门必须)3 网络通信(了解基本的 socket 使用即可,需要网络基础)4 数据库操作(了解基本的 JDBC 即可,需要数据库基础)04 总结总而言之,对于一个 Java 小白来说,入门 Java 可以分为这几步:

1 首先搭建好 Java 开发环境 2 通过 Runoob 等一些网站熟悉 Java 的基本语法 3 通过看书看视频等方式熟悉 Java 基础知识,通过代码实践加深理解 4 通过看书看视频等方式初步了解 Java 核心技术,通过代码实践加深理解。

本文主要是为大家提供一个学习的思路,以及推荐一些学习方法,如果你能够按照这样的步骤去学习,并且配合上一些适合你自己的学习方法来完成学习计划,相信你可以很好地完成对 Java 的入门。

微信公众号【Java 技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜(关注公众号后回复”Java“即可领取 Java 基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的 Java 学习指南、Java 程序员面试指南等干货资源)

Java 工程师学习指南初级篇最近有很多小伙伴来问我,Java 小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都是站在 Java 后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四篇文章讲述 Java 的学习路线(分别是入门篇,初级篇,中级篇,高级篇),笔者也打算趁此机会,回忆一下自己的 Java 学习历程。今天我们要讲的是,小白同学如何入门 Java。先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。本文所述的方法不一定适合所有人,如有错误敬请谅解。01 Java Web 项目指南 jav 在上一篇文章中,我们讲到了入门 Java 的几个步骤,先搭建好环境,然后熟悉基本语法,接着熟悉 Java 的一些核心技术,并且在代码中进行实现。如果你已经完成了这部分内容的学习,应该会感觉自己对 Java 已经有一定了解了,可以轻松地写出一些 Java 代码,比如实现多线程输出数字,再如操作 IO 流等等。当然,这些代码通常只是一些 demo,我们在实际的项目中可能并不会这么简单地使用这些技术,我们可能会同时使用集合类,多线程,以及操作数据库的 API。所以,在今天的初级篇中,我们就来谈谈怎么做项目吧。Java Web 项目对于大部分 Java 新手来说,最适合他们入门的项目就是 Java Web 了。因为 Java 天然适合做 Web 应用,并且生态完善,更有很多开源的工具和框架去支撑这些应用,比如 Spring,Hibernate,SpringMVC 等等。那么,如何开始着手做一个 Java Web 项目呢。个人认为最好的方式就是看视频了。因为,看书的话,很多内容比较过时,并且一般不会提供源代码。也有一些大佬喜欢推荐开源的项目(在 GitHub 上面的项目),但是对于小白来说,如果没有很完整的文档去指导他们,那也是毫无意义的。曾几何时,Java Web 的项目还在使用 JSP + Servlet 进行开发,后来出现了 Struts2,再后来,出现了我们现在也一直在用的 SpringMVC,说实话,不论使用哪种开发框架,你都需要先花一些时间去学习相关的技术,否则你会发现,即使是看视频,你也不知道里面在讲什么。要想做好一个 JavaWeb 项目,你不仅需要一个好的项目课程,还需要足够的知识储备,下面就让我们来理一理这些内容把。知识储备 Java 基础部分的内容咱们上次说过了,这里就不再重复啦~ 下面我们分别来说说其他几方面的知识储备把 02 前端知识推荐资源:在 w3cschool 学习 html,css 和 js,支持在线测试代码。既然是做 Web,就难免要涉及到前端技术,不过,现在前后端分离已经是一种趋势,所以,如果你对前端不感兴趣,也没必要花太多时间去学习。对于大部分同学来说,你最好要了解 html 的基本标签和格式,自己能够写一些简单页面,CSS 的话,也可以稍微接触一些。相对于前面两个服务于样式的技术,我们倒是更应该去学习一下 Javascript,了解它的一些基本语法,以及 ajax 的使用,因为在前后端交互时,ajax 是非常重要的。所以,做一个 Java Web 项目,你不需要花太多时间在写前端页面上,如果有源代码可以直接使用,当然,对于一些需要修改的前端页面,你得怎么去做修改它,因为有时候你需要使用 JSP,JSP 既包括前端代码也包括 Java 代码,如果你完全看不懂前端代码的话,那就很尴尬了。03 Java Web 常用技术 JavaWeb 的技术栈其实比较庞大,所以我们不要求面面俱到,只是希望你能够熟悉一下项目中可能用到的技术。下面列举一些常见的技术,大家最好要了解一下。1 JSP 和 Servlet 推荐资源:《JavaWeb 入门到精通》,慕课网、极客学院等网站上的 JavaWeb 基础课程这是 Java Web 开发最原始的形态,现在很少直接使用了,但是后来的各种框架其实也是建立在 servlet 之上来做的。你们需要了解这两个技术分别是用来干什么的,最好能写一些 demo 来实践。对于 JSP,有时候你可能还要学习 jstl 等标签语言,因为这些标签可以让你更方便地往 JSP 中插入 Java 代码。2 Spring 和 SpringMVC 推荐资源:《Spring 实战》,慕课网、极客学院等网站上的 SpringMVC 基础课程。事实上,除了上述资源之外,你也可以直接到官网上查看快速开始文档。Struts2 早已被时代抛弃,Spring 则是当今的霸主,你需要了解 Spring 如何使用,以及 SpringMVC 如何使用,并且学会在项目中使用它。由于 SpringBoot 最近很火,并且搭建方式比 SpringMVC 更简单,你也可以先学习 SpringBoot,以便更快速地搭建起你的第一个 Java Web 项目。3 MySQL 推荐资源:《Sql 必知必会》,Runoob 上的 MySQL 基础教程,慕课网、极客学院等网站上的视频课程一个 JavaWeb 应用一定要有数据啊,所以我们需要用到数据库,其实搭一个 mysql 数据库是非常简单的,但是对于初学者来说最麻烦的就是写 sql 了,所以,先学会建表,熟悉 sql,对你以后做项目也是大有裨益的。4 Hibernate 和 Mybatis 推荐资源:Runoob 上的 Hibernate 和 Mybatis 基础教程,慕课网、极客学院等网站上的视频课程当你学会了使用 sql 去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成 Java 里的对象。orm 框架就是为了解决这一问题而出现的,它可以让一张表和 Java 类一一对应,让数据查询变得非常方便。Hibernate 和 Mybatis 都是 orm 框架,只不过现在 mybatis 越来越火了。所以,你需要了解这一技术,因为它会广泛地运用到大部分 Java Web 项目中。5 Maven 推荐资源:《maven 实战》,易百教程里的 maven 教程,慕课网、极客学院等网站上的视频课程刚才咱们已经说过了 Spring,orm 框架,以及 MySQL 等方面的技术了。实际上,一个简单的 Java Web 项目也只需要这些东西了。但是,有一个问题,就是:一个项目里用到这么多技术,所需要的 jar 包也会很多,我们如何管理这些 jar 包呢。如果直接导入所需 jar 包,那当 jar 包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当 jar 包很多时,项目打包后的 war 格式文件也会很大,不利于传输。为了解决上述问题,maven 应运而生了。maven 通过 pom.xml 文件来指定所需的 jar 包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。当然,新手可能还难以理解这些概念,你必须要知道的是,大部分 Java Web 项目需要用 maven 来管理,你需要学会 maven 的基本用法,最基本的用法就是:学会修改 pom.xml 文件。6 Tomcat 推荐资源:慕课网、极客学院等网站上的视频课程。对于小白来说,Tomcat 相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装 Tomcat 即可。毕竟,它在项目中的作用就是提供一个运行环境而已。正常来说,你只要下载解压 Tomcat 的压缩包即可。由于现在的 IDE 都支持集成 Tomcat,所以一般情况下你都可以在 IDE 中配置好你的 Tomcat 路径,然后设置好你的项目路径,IDE 会自动把你的工程代码部署到 Tomcat 服务器上。如果你使用想跳过 IDE 直接部署工程到 Tomcat 上,也可以直接编译工程并且打包得到 war 格式的文件(这个步骤可以使用 maven 来完成),然后拷贝 war 文件到 Tomcat 下的特定目录即可。上述两种部署方式的详细步骤请到搜索引擎寻找答案。7 Git 和 GitHub 推荐资源:廖雪峰的 Git 教程,GitHub 官网,慕课网、极客学院等网站上的视频课程。既然要做项目,为什么不把它发布在 GitHub 上。当你熟悉了 Git 指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到 GitHub 上,这样既可以让你更好地管理项目版本,又可以让你 GitHub 更加活跃,为你未来的面试加分。所以,赶紧学好 Git 指令,然后开启你的项目之旅吧。04 其他常用组件除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。1 日志系统当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有 log4j,logging 等等,另外你还需要了解一下 slf4j。2 单元测试日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是 JUnit,建议你找个文档看一看,然后下载下来玩一下。3 JSONJSON 逐渐成为前后端数据交互的标准格式,为了在项目中使用 JSON 的 API,你也需要导入它的 jar 包,一般我们都会使用阿里提供的 fastjson,赶快下载来玩一玩吧。当然,常用的 Java Web 组件还有很多,比如 HTTPClient,再比如一些加密工具,一些压缩工具等等,这里就不再一一列举了。5 总结今天的内容就到这里了,与其说是初级篇,反而更像是“项目篇”呢。因为学完基础内容之后,做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开,也就不足为奇了。今天我们主要讲的是,做好一个 JavaWeb 项目,需要哪些知识储备,需要了解哪些技术,并且我也推荐一些比较精品的视频课程。后面我还会写一篇文章,专门讲一讲怎么做项目,会更加详细,更加侧重怎么去做,敬请期待吧。总结以下今天说的几个要点吧:

1 Java 基础知识储备 2 前端知识储备 3 了解和使用 JavaWeb 常用技术 4 JavaWeb 常用组件介绍 5 视频课程推荐

俗话说的好,磨刀不误砍柴工,相信你看了本文之后,可以更好地做好知识储备,然后开始 Java Web 的项目实践,希望你能够顺利地完成你的第一个项目。

微信公众号【Java 技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜(关注公众号后回复”Java“即可领取 Java 基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的 Java 学习指南、Java 程序员面试指南等干货资源)

Java 工程师学习指南中级篇最近有很多小伙伴来问我,Java 小白如何入门,如何安排学习路线,每一步应该怎么走比较好。原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站在 Java 后端的全局上进行思考和总结的,忽略了很多小白们的感受,而很多朋友都需要更加基础,更加详细的学习路线。所以,今天我们重新开一个新的专题,分别按照四个部分讲述 Java 的学习路线,笔者也打算趁此机会,回忆一下自己的 Java 学习历程。今天我们要讲的是第三部分,Java 工程师学习指南(中级篇)。先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。当然,本文提到的大部分内容都能在我的博客中找到对应的一些文章。所以也欢迎大家去我博客找到你们需要的资源。本文中的方法不一定适合所有人,如有错误还请谅解。上期回顾在上一篇文章中,我们主要讨论的是如何做一个 Java Web 项目,以及前期需要哪些方面的基础。最后,我还推荐了几个比较不错的视频课程,以便给大家参考。当然,跟着视频课程做完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有很多东西你并不太理解,比如你可能不知道为什么代码要分层,为什么要用 maven 进行线上编译,为什么 Tomcat 启动时会输出那么多的日志。有疑问很正常,因为一个 Java Web 项目涉及的技术还是很多的,如果要理解这些技术的原理,光靠一个项目课程是远远不够的。所以,在你体验了 Java Web 项目的开发流程以后,你应该花些时间去了解相关技术原理了,今天我们要讲的也是这部分内容。对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解 JVM 虚拟机原理,Java 并发原理,并且熟悉 JDK 的部分源码,了解这些 API 的底层实现。除此之外,还有很多,下面我们分别来谈一谈。PS:文中多次提到我的博客,是因为我的博客里整理了多个技术专栏,基本上包含了下面所说的内容。关注公众号后,在公众号后台回复“练级”即可获得我的技术博客地址,以及其他相关的资源。01 计算机基础知识计算机基础课程 (非科班) 如果你不是计算机专业的同学,那你可能要注意一下了。在学习下面这些内容之前,你最好要学习一下计算机基础课程。这里我们说的计算机课程是:数据结构,操作系统,计算机网络。数据结构:这门课应该算是三门课程比较简单的一门了,推荐《数据结构与算法(Java 语言描述)》,看书结合代码实践,把基本的数据结构算法写一写就可以了。操作系统:关于操作系统我看了很多本书,但是没有感觉特别好的,所以如果有时间的话可以先看另外一本书《深入理解计算机系统》,这本书讲了很多计算机的基本概念,不局限于操作系统。然后可以看一看汤小丹写的《操作系统》,或者你们学校的教材。计算机网络:网络方面的书也非常多,推荐看一下《计算机网络:自顶向下方法》,另外还有一本《TCP/IP 详解:卷一》也是备受推崇的书。除此之外,我还要推荐一下刘欣老师的书《码农翻身》,书中用一些有趣的故事来讲解操作系统和计算网络的一些复杂概念,有助于大家理解这部分内容。02 JVM 虚拟机 JVM 虚拟机为什么把 JVM 放在第一位,因为它是最基础也最重要的一块内容。所有的 Java 代码都运行在 JVM 上,事实上,JVM 在操作系统中只是一个进程。为了了解 Java 代码的运行方式,底层引擎的执行原理,以及内存的分配情况,我们必须要学习 JVM 虚拟机。推荐资源:《深入理解 JVM 虚拟机》很高兴地告诉你们,学习 JVM 你只需要把这本书吃透即可,当然,看一遍可不够,笔者前后至少看了三遍,有条件的话最好把书中的实例都跑一跑。另外,JVM 也是面试必考的内容,所以,相应地去准备一些面试题也是很有必要的,如果你基本掌握了这本书的内容,相信你不会惧怕任何 JVM 面试题。03 设计模式与源码阅读设计模式为什么在这里提到设计模式呢,因为设计模式是 Java 编程规范的经典总结,并且在 JDK 源码中经常使用,由于我们后面会讲到 JDK 源码方面的学习,所以对于设计模式,建议大家先学习一下,最好的学习方式就是看书结合实践,把一些常用的设计模式自己实现一下。推荐资源:《head first 设计模式》JDK 源码(主要指集合类源码)接下来下场的选手是:JDK 源码。不过对于大部分人来说,只要能够掌握集合类,字符串这些源码就可以了,其他部分的源码主要集中在 JUC 并发包里,而这些内容我们会放在 Java 并发技术里来讲。为什么我们需要掌握集合类源码呢,其一是因为面试喜欢考,其二是因为集合类的源码实现都比较经典,难度也不算太大,并且运用了很多优化方法,所以了解它对于学习 Java 的同学来说大有裨益。推荐资源市面上并没有哪本书专门来讲 JDK 源码的,所以这部分内容的学习资源主要是两个部分,一是 JDK 源码本身,而是一些技术博客。1 对于 JDK 源码,直接看可能比较有难度,不推荐新手这么做。2 讲解源码的文章质量参差不齐,所以我只推荐几个我自己比较熟悉的,一个是 importnew。一个是我的博客。另外,我之前分享的一篇文章《你不可错过的 Java 学习资源》中也推荐了很多大牛和博客,大家也可以去看看。Spring 源码说实话,Spring 源码的复杂度远高于集合类的源码,这也是因为 Spring 运用了很多的设计模式,并且有着非常繁杂的类关系。所以,我不建议大家直接去读 Spring 源码,因为即使是看 Spring 源码解析的书籍,你也会感到很吃力。所以,我推荐的方式是,看书 + 看一些比较好的源码解析文章。另外要告诉大家的是,Spring 的源码很多,并不是所有内容都需要你掌握的,大家都知道 Spring 最常用的特性就是 IOC 和 AOP,所以看源码解析时,最重要的也是这两个部分了。另外,看完 Spring 的源码解析以后,别忘了看 SpringMVC 的源码解析,学习方法也是一样的,找重点内容看即可。推荐资源:《Spring 源码深度》,我的博客专栏 04 Java 并发技术 Java 并发技术相信你为了搞定集合类源码和 Spring 源码花了不少功夫了,接下来轮到 Java 并发技术出场了。我们在入门篇其实已经谈到了多线程,但是也仅仅停留在使用 Thread 或者 Runnable 实现简单的多线程 demo。实际上,为了理解 Java 并发技术的底层实现,我们还需要知道 JMM 模型,了解 synchronized 和 volatile 的底层实现,同时还要明白 Java 中的多线程和操作系统的多线程和什么联系和区别。除此之外,我们经常谈到的线程安全,有哪些实现方法,也是这部分内容的要点。学习并发技术,我建议分为三个步骤

1 首先熟悉 Java 的多线程基础知识,比如 Thread 的使用,线程的状态转换,以及一些 api 的使用方式。2 了解一些理论基础,比如 JMM,操作系统的多线程实现。这部分内容推荐通过看书和看博客来学习。3 了解并使用 JUC 的一些 API,然后开始看 JUC 的一些源代码。这个阶段是最重要也是最困难的。

推荐资源:书籍:《Java 并发编程艺术》,《Java 并发编程实战》网站:我的博客专栏,并发编程网,importnew,《你不可错过的 Java 学习资源》05 Java 网络编程 Java 网络编程在搞懂 Java 并发编程技术之后,相信这部分内容也难不倒你。当然,前提是你对计算机网络有一定了解,因为网络编程涉及到 TCP 和 HTTP 相关的知识点。在学习这部分内容的时候,你首先要了解 socket 的使用以及原理,然后再去了解 NIO 的相关 API,多写一些客户端和服务端通讯的 demo,以便熟悉这些内容。为了更好地理解网络编程,你还要去了解 UNIX 网络编程模型。除此之外,如果你想要更好地理解 Java 网络编程,你还需要去了解 Tomcat 的实现原理。同时,Netty 也是值得你去学习的一部分内容,最好有机会去用一用这一网络编程框架,学有余力的同学还可以考虑看看它的源码(笔者没有看)。推荐资源:我的技术博客,《Java 网络编程》,《你不可错过的 Java 学习资源》05 Java8Java 的版本一直在更新,但目前在用的主要还是 Java8 和 Java7,等再过几年可能这部分的内容就过时了。但是目前看来,对 Java8 的学习和了解还是很重要的,毕竟面试也喜欢考。对这部分内容学习的最好方式就是:看文章 + 代码实践推荐资源:《Java8 实战》06 总结今天的内容貌似有点多,大家会不会感觉有点吃不消呢。没关系,因为这部分内容确实需要花很多时间去学习。对于一个在校的 Java 学习者来说,可能没有机会接触到多么高大上的项目,所以对内功的修炼显得格外重要。看书,写 demo,读源码,看似简单的事情实际上需要花费大量时间和精力,这个过程是需要你静下心来,慢慢沉淀的,在学习的过程中你也可以和笔者一样,写一些总结和博客,以便更好地回顾自己的学习历程。总结以下今天所讲的内容吧:

1 计算机基础课程:数据结构,网络和操作系统 2 JVM 基本原理 3 设计模式,JDK 源码,Spring 源码 4 Java 并发技术,JUC 源码 5 Java 网络编程 6 Java8 微信公众号【Java 技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜(关注公众号后回复”Java“即可领取 Java 基础、进阶、项目和架构师等免费学习资料,更有数据库、分布式、微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的 Java 学习指南、Java 程序员面试指南等干货资源)

Java 工程师学习指南完结篇先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。

因为笔者还只是一名在校生,所以写的内容主要还是针对 Java 初学者或者接触 Java 后端不久的朋友,不适用于已经工作多年的 Java 大佬们。所以本文中的方法不一定适合所有人,如有错误还请谅解。

本期的内容是系列文章的最后一部分内容了。这个系列可能还有很多东西没有说清楚,也有很多内容被忽略了。但是这些内容也确实是笔者结合自己经验总结而成的,希望能对大家有用 ~ 当然如果有什么建议也可以随时和笔者交流。上期回顾上期我们重点介绍了 Java 工程师进阶所需要掌握的一些技术内容。特别对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解 JVM 虚拟机原理,Java 并发原理,并且熟悉 JDK 的部分源码,了解这些 API 的底层实现。之所以把这部分放在 Java Web 项目之后来讲,是因为我觉得,一开始做项目的时候你不可能已经掌握好上述内容了,所以你完全可以带着问题去做项目,再花时间去学习底层原理,这样你可以很好地结合你之前实践过的代码去理解那些底层技术了。本期主题本期主要介绍的是 Java 后端技术比较“高端”的一些内容,也就是我们经常聊的分布式,架构,缓存,消息队列等内容,另外我们也会介绍一些大后端相关的技术,比如云计算(OpenStack 和 docker),大数据(hadoop 生态),以及一些常用的后端技术。这些内容其实离我们并不远,只不过在平时的项目中可能用的比较少,所以作为学生党一般也只能通过一些文章或者书本去学习理论知识。那么基于这么一个情况,我们来谈谈怎么学习这部分的内容吧。01 Web 后端架构 Web 后端架构后端进阶第一步,先把 Web 架构相关的技术学好吧,因为之前大家都做过 Java Web 项目,想必对这块内容还是比较熟悉的吧。我们需要了解 Web 架构演化的历史,了解为什么要做服务器集群,为什么要用缓存,为什么要做拆分,做主从,以及为什么要有分布式。推荐资源:《深入分析 Java Web 技术内幕》,《大型网站技术架构》两本都是阿里大佬出的书,两位都是淘宝系的技术大牛。前一本书主要讲述的 Java Web 的一些技术基础,关于 Web 架构的内容比较少。后一本则是李智慧大佬写的架构科普书籍,用非常简单易懂的语言写出了大型 Web 项目架构之美,分别着眼于高可用,高性能,高扩展等方面讲解了很多设计结构的原则和方法。这本书应该是 Web 架构小白最好的入门书籍了。02 分布式理论基础由于下面的内容或多或少都会涉及到分布式相关的知识,所以这一部分我们主要介绍一下有关分布式的基础知识。笔者对分布式的学习主要也停留在理论上,所以这里讲的也是一些理论的东西。推荐资源:《从 Paxos 到 zookeeper 分布式一致性原理与实践》,我的技术博客专栏“分布式系统理论与实践”这本书比较好地科普了分布式基础知识,也介绍了 zookeeper 的原理和使用。了解 zookeeper 是了解分布式技术很重要的一个环节。1 CAP 和 BASE 谈分布式就要谈 CAP,一致性,高可用,网络分区容忍性为何只能三选二,为什么网络分区容忍性必须要被考虑。CAP 在实际应用中真的可靠么?BASE 出现的原因,为什么 BASE 更容易实现,更适合实际应用,BASE 可以通过哪些技术去实现呢?2 一致性协议和算法一致性协议也是分布式理论的一个重点,2PC,3PC,分别指的是什么,其中分别有什么问题。3PC 解决了 2PC 的一个问题,却仍然不完美。Paxos 和 Raft 两种一致性算法,显然前者比后者复杂得多,但是 Raft 可能更加实用。为什么我们需要一致性算法,它们又有什么用呢。3 分布式事务和最终一致性分布式事务是一个复杂的概念,主要指分布式系统中需要强一致场景时所用到的事务。理解和实现它都不是简单的事情。如果我们退而求其次,不要求强一致性,而选择最终一致性,则可以用更加灵活的方案,比如事务消息。03 常见分布式技术推荐资源:《从 Paxos 到 zookeeper 分布式一致性原理与实践》,我的技术博客专栏“分布式系统理论与实践”,《深入理解 Spring Cloud 与微服务构建》,《分布式服务框架原理与实践》。1 zookeeper 上文说到 zookeeper 是分布式技术很重要的一块内容,这是因为 zookeeper 用于管理和协调分布式组件,虽然它出自 hadoop 生态,却用于很多应用当中,基本上有分布式的地方就有 zk 的存在。简单说来,zk 可以提供全局统一的节点树结构,通过节点来管理资源,同时 zk 自身是使用集群方式部署的,所以保证自己是高可用的。根据这一特点,它可以作为服务注册中心,还可以实现分布式锁等功能。2 分布式服务分布式服务是一个挺有意思的东西,也很常用,简单来说,就是把服务组件部署在不同节点上,通过 rpc 的方式访问,为了实现这一功能,我们需要考虑通信协议,序列化方式,进一步来说,我们还要了解如何做服务注册和发现,以及如何做限流,做服务熔断和降级,等等等等。常见的分布式服务框架有 dubbo,以及 Spring Cloud 这类产品,学会使用他们,然后了解它们的底层实现原理,相信会是一个很有趣的过程。3 负载均衡关于负载均衡,说起来其实很简单,就是把一组请求分成多组,按照某种规则分发到多台服务器上。但是负载均衡也涉及很多内容,包括负载均衡的算法,负载均衡的实现方式,我们需要了解它到底是在哪一层实现的。一般来说,常用的负载均衡方式有 nginx 和 lvs 两种,分别是 7 层和 4 层的负载均衡,一个基于域名进行负载均衡,一个基于端口号做负载均衡。了解它们的实现原理,会让你更好地理解这部分内容。4 分布式 session 和分布式锁这两个组件也是分布式项目中经常要用到的,了解它们的使用和实现原理,有助于以后在项目中的实践。分布式 session 一般有多种实现方式,可以存数据库或者缓存,也可以单独部署成一个服务,总之最重要的一点就是,性能要好,并且要高可用。分布式锁则用于一些需要一致性的场景中,比如订单生成这种全局唯一的功能,分布式锁通常可以用缓存或者数据库来实现,但为了保证高性能,并且避免死锁,我们一般采用 Redis 或者 zookeeper 来实现。04 缓存讲到缓存,我们说的最多的就是 Redis,所以我们要讲的也是 Redis。学习 Redis,除了学会使用简单的 api 之外,最好还要了解它的实现原理。推荐资源:我的技术博客专栏“重新学习 MySQL 和 Redis”,《Redis 设计与实现》这里我们主要介绍三部分内容,也是我个人认为比较重要的三块内容。1 数据结构和底层实现 Redis 的数据结构比较丰富,但更有意思的是这些数据结构背后的底层实现,也就是作者如何用 c 语言来实现这些结构的。其中会有你熟悉的数组,链表,还有一些有意思的结构比如跳表,哈希表。2 持久化方式持久化方式主要分两种,aof 和 rdb,前者基于追加日志的方式来实现日志持久化,后者则是使用备份数据的方式来实现持久化。3 分布式方案这是 Redis 最有趣也最复杂的部分。首先,Redis 可以使用主从的方式部署,其中“哨兵”这一组件用于故障切换。基于哨兵的主从部署后来发展为 Redis cluster 的部署方式,也就是 Redis 集群,通过分片的方式来部署 Redis 集群,并且集群中任一节点都可以用来对外提供服务。当然,除了 Redis 集群之外,还有 codis 的分布式方案,codis 基于代理的方式来实现,表面上还是使用原来的 Redis API,但实际上访问的却是一个 Redis 集群。05 消息队列消息队列的作用一般来说就是削峰,控流,解耦合,目前业界也有很多的消息队列产品,在很多公司都会使用,当然,它们各有各的优缺点,我们也不必全都了解,这里我们大概介绍 3 种消息队列,它们各自的特点都比较鲜明,值得大家去了解一番。1 RabbitMQ 笔者刚开始接触的消息队列是 rabbitmq,它的使用方法比较简单。RabbitMQ 是一个由 erlang 开发的 AMQP(Advanced Message Queue)的开源实现,主要有以下特点:

  1. 安装部署简单,上手门槛低,功能丰富,符合 AMQP 标准;
  2. 企业级消息队列,经过大量实践考验的高可靠;
  3. 集群易扩展,可以轻松的增减集群节点;
  4. 有强大的 WEB 管理页面。

2 Kafka 与其他 MQ 相比较,Kafka 有一些优缺点,主要如下优点:

  1. 可扩展。Kafka 集群可以透明的扩展,增加新的服务器进集群。
  2. 高性能。Kafka 性能远超过传统的 ActiveMQ、RabbitMQ 等,Kafka 支持 Batch 操作。
  3. 容错性。Kafka 每个 Partition 数据会复制到几台服务器,当某个 Broker 失效时,Zookeeper 将通知生产者和消费者从而使用其他的 Broker。

缺点:

  1. 重复消息。Kafka 保证每条消息至少送达一次,虽然几率很小,但一条消息可能被送达多次。
  2. 消息乱序。Kafka 某一个固定的 Partition 内部的消息是保证有序的,如果一个 Topic 有多个 Partition,partition 之间的消息送达不保证有序。
  3. 复杂性。Kafka 需要 Zookeeper 的支持,Topic 一般需要人工创建,部署和维护比一般 MQ 成本更高。

RocketMQRocketMQ 是一个纯 java、分布式、队列模型的开源消息中间件,前身是 Metaq,当 Metaq 3.0 发布时,产品名称改为 RocketMQ。具有以下特点:

  1. 1、能够保证严格的消息顺序
  2. 2、提供丰富的消息拉取模式
  3. 3、高效的订阅者水平扩展能力
  4. 4、实时的消息订阅机制
  5. 5、亿级消息堆积能力

除此之外,它还有一个优点,就是支持事务消息,让分布式事务的实现变得简单 05 分布式数据库这里说的分布式”数据库“,其实指的是数据库的分布式方案,更具体来说,主要指的是数据库的主从部署,以及分库,分表。1 主从复制和读写分离这是数据库高可用的基础。MySQL 数据库会使用日志来完成主从复制,先写主库,然后再同步到从库。读写分离则一般是指的是:从库负责读,主库负责写。2 分库分表方案分库分表是解决大表性能瓶颈的一种方法,当然也分为横向拆分和纵向拆分,横向拆分指的就是减少单表的数据量,放到其他表或者其他库中。纵向拆分则一般指按照业务来拆分,把不必要的字段放到其他表中。分库分表可以在应用层做,通过对 id 或者其他字段进行 hash 以便映射到对应的表中。当然也可以通过数据库中间件来完成,例如 mycat 这种中间件,通过代理的方式实现分库分表,非常方便。06 大后端相关技术这部分的内容笔者也只是略知一二,所以这里只是抛砖引玉,做一个简单的科普罢了。毕竟咱们学技术的人都是先讲深度再来谈广度。当你对之前的内容掌握得比较好的时候,再去看看大后端的一些其他技术,也会感觉挺有意思的。下面这些技术主要是我自己学习路上接触过的一些内容,所以比较熟悉,才拿出来分享,至于适不适合大家的口味,可能就见仁见智了。Hadoop 生态笔者之前参与过数据仓库相关的项目,所以稍微了解了这方面的内容,感觉 hadoop 生态还是挺有意思的。大家不妨去了解一下其中的基本组件,然后打一个集群自己玩玩看。常见的组件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。推荐资源:我的技术博客 - 个人分类 -hadoop,《大数据技术原理与应用》对于入门 hadoop 生态来说,这本书完全足够了,如果你要做大数据平台开发或者是数据研发工程师,可能需要非常全面地了解这些组件的底层原理。云计算初探笔者之前参与过私有云相关的项目,所以稍微了解了这方面的内容,感觉这方面的内容也蛮有趣的。我在项目中主要接触到的是 OpenStack,docker 以及 kubenetes,OpenStack 是一个私有云生态,内部结构对于我们来说还是比较复杂的,不过最根本的虚拟化技术还是基于 kvm 虚拟化来实现的。docker 则是现在非常流行的一种容器,用于快速部署应用。kubenetes 也借着 docker 的东风火了起来,可以理解为是基于容器的分布式调度系统。这些技术在企业中也是比较常用的,只不过对于研发同学来说,更多时候扮演的是工具的角色。推荐资源:《Docker 技术入门与实战》,《kubenetes 权威指南》其他常见后端技术除此之外,想必大家还了解过很多其他的技术,只不过不同的业务用到的组件往往不一样,所以并不是每个东西你都需要去了解。比如搜索引擎技术 Lucene,基于它的两款产品 solr 和 elasticsearch,通常出现在需要搜索功能的项目中。再比如流式计算技术,如 storm 和 spark streaming 等等,通常都用于大数据部门,用作实时数据采集。又如 ELK 实现的分布式日志系统,多用于分析和定位系统问题,经常会出现在一些比较重要的应用当中。当然,也有现在大火的人工智能,还有太多的技术我们没机会去了解和使用,我们能做的也就是在自己能力范围内把需要做的东西做到最好了。所以,这些内容并不是每一样你都需要知道,但是如果有时间去了解一下的话,还是建议多了解一点的。07 总结总结今天码的字有点多,所以难免有些写的不太好的地方,希望大家见谅。纵观全文,我们主要讲了这些内容:

1 Web 架构 2 分布式基础理论 3 常见分布式技术 4 缓存 5 消息队列 6 数据的分布式方案 7 大后端相关技术

至此本系列文章就已经结束了,不知道大家有什么问题或者建议想和笔者交流吗~ 赶紧加我的微信来聊聊吧。写本系列文章也是因为有很多朋友想要了解更加清晰的 Java 后端学习路线,所以我总结了之前自己的学习历程,才创作出这四篇文章,希望能够对大家有所帮助~ 敲黑板!!!我最近刚整理的 Java 学习资源大礼包,希望对各位有所帮助。1、Java 电子书大合集学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识2、Java 基础学习资料 学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识3、2018Java 视频课程 学 java 需要 C 语言基础知识4、Java 学习资源大礼包学 java 需要 C 语言基础知识5、Java 架构师视频课 学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识6、Mysql 视频课程学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识7、Java 算法课、笔试面试课 学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识除此之外,还将赠送我原创的求职面试大礼包学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识学 java 需要 C 语言基础知识领取方式:关注微信公众号【Java 技术江湖】后回复“Java”即可领取上述所有资料。学 java 需要 C 语言基础知识如果你想感谢我平时多关注一下公众号发的文章,没事打开看看,点点“在看”或者“guanggao 资料都是免费送的,没有转发、集赞等套路,你也不用给我发红包感谢我,不要钱哒~ 觉得资源还不错的话,分享一下让更多的人来获取福利吧

微信公众号【黄小斜】作者是蚂蚁金服 JAVA 工程师,目前在蚂蚁财富负责后端开发工作,专注于 JAVA 后端技术栈,同时也懂点投资理财。目前我坚持学习和写作,用大厂程序员的视角解读技术与互联网,我的世界里不只有 coding!关注微信公众号「黄小斜」后回复「Java」、「Python」、「C++」、「大数据」、「机器学习」、「算法」、「AI」、「Android」、「前端」、「iOS」、「BAT」、「校招」、「笔试」、「面试」、「计算机基础」、「LeetCode」等关键字可以获取对应的免费学习资料。

学 java 需要 C 语言基础知识

正文完
 
评论(没有评论)