大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

掌握Java开发的具体时间因人而异,而且也要看掌握到什么程度,通常情况下,如果每天都能保证4个小时左右的学习时间,那么使用3个月左右的时间是可以达到参加项目组实习的水平。下面以Java Web开发为例,来说明一下学习Java的过程和需要的时间。

Java基础部分

Java学习的第一个阶段是初级阶段,这个阶段以学习Java基础内容为主,当然还需要学习开发工具的使用。Java是一门先难后易的编程语言,一定要重视早期的学习过程。

Java基础部分首先接触到的内容包括类、对象、属性和方法几个概念,其中类代表了同一类事务概念层次上的抽象(抽象是Java的重要特点),对象则是具体的实例,属性代表状态,方法代表功能。Java面向对象的编程过程则分成三个步骤,分别是类的定义、对象的创建和方法的调用,看一个例子:大学毕业,零基础学习java,学几个月能学会呢?该注意什么?大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

接下来要学习的内容包括封装、继承和多态,这三个内容中以多态的理解难度较高。多态简单的说就是对象在不同情况下具备的不同表现形式,具体到编码中可以用“三个定义两个方法”来描述,“三个定义”分别是父类定义子类构建、接口定义实现类构建、抽象类定义实体类构建,“两个方法”分别是方法重写和方法重载(这部分内容可以参考我之前在头条上的系列文章)。

接下来的学习内容包括异常处理、**、多线程等内容,这些内容也都比较重要,其中多线程是一个重点内容也是一个难点内容。通常情况下,零基础的学习者,学习这部分内容需要一个月左右的学习时间。

Java Web开发部分

在Java基础部分学习结束以后就可以进入Web开发部分的学习了,Web开发部分需要学习的内容相对于基础部分来说要多一些。Web开发包括两个大的内容块,一部分包括Servlet、JSP、JDBC、JavaBean等基础内容,另一部分包括SpringMVC、SpringBoot以及SpringCloud等内容。

目前不推荐学习EJB相关的开发知识,毕竟Java EE已经转交给Eclipse基金会了,未来的发展情况还有待观察。通常情况下,Java Web这部分内容需要两个月左右的学习时间。

我使用Java的时间比较久,目前也在带Java开发团队,我会陆续在头条写一些关于Java开发方面的文章,对Java开发感兴趣的朋友可以关注我,相信一定会有所收获。

如果有Java开发方面的题,也可以咨询我。

谢谢!

零基础,学习几个月能掌握,这需要看你怎么学?

  • 自学?可能很考验的意志力,并且需要的时间会比较长!如果你的意志力和学习能力都不错,那自学肯定没有问题!

  • 培训?培训时间一般为半年左右,非常的辛苦,你要做好一天都在上课的准备,就和高中上学一样,有晚自习,想要学好的同学有的需要学到十二点!曾经有在**程序员的学员给我说,他每天晚上学到十二点,但是他的付出有回报,最后拿到了oppo的offer!

因此,不管你怎么学,能不能掌握,结果都是靠自己的!我能分享给你的就是一些学习技巧,学习线路图!

java学习线路图

大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

这个学习线路图我分为了几个阶段,每个阶段能学到什么,能做什么,具体知识点请往下看,每个阶段知识点我都整理出来了,更适合学习!

java语言入门

大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

掌握Java开发环境基本配置;

掌握运算符、表达式、流程控制语句、数组等的使用;

熟练使用Idea开发工具;

掌握Java基本面向对象知识;

掌握常用类String、ArrayList等的使用。

配套**:

毕向东Java基础教程(适合初学者入门的Java基础**)

java语言进阶大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

深入理解Java面向对象相关知识点;

掌握开发中常用类如**、IO流、时间日期等操作;

掌握Java异常处理机制,熟悉Java多线程开发;

掌握网络基础知识,了解Socket原理,TCP、UDP协议;

掌握java基本语法完成单机程序的编写;

熟悉Java新特性,如L**bda、Stre**流等操作

配套**:

Java快速入门教程(Java基础班全套教程)

Javaweb大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

掌握Java JDBC、连接池操作,熟练操作mysql数据库;

熟悉web开发中常用知识如 HTML5、CSS3、JavaScript、BootStrap、jQuery等;

掌握JavaWeb开发核心技术 Servlet、Listener、Filter等;

熟悉Linux服务器,并安装开发常用软件***cat、mysql、nginx等;

掌握同步及异步操作的JavaWeb开发,具备B/S结构软件开发能力,完成基本的JavaWeb项目;

熟悉基本的项目管理工具Maven的使用。

配套**:

JavaWeb教程_JavaWeb入门教程

项目一大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

掌握企业中最常用S**框架开发,开发出结构清晰、可复用性好、维护方便的企业级应用程序;

掌握AngularJS框架;

掌握Spring security框架;

掌握dubbox分布式调用技术;

掌握zookeeper分布式应用协调服务;

掌握Free**rker模板引擎;

掌握全文检索解决方案;

掌握spring boot1.x框架的基本应用;

掌握CAS实现单点登录;

掌握CORS实现跨域;

掌握微信扫码支付;

掌握电商秒杀解决方案;

掌握SpringTask实现任务调度;

掌握MavenProfilel实现开发与生产环境切换;

了解电商开发中相关业务模块如商品、订单基本操作;

了解电商开发中相关术语SPU和SKU等;

积累互联网电商项目开发经验。

配套**:

Java教程|Springmvc由浅入深教程

Java教程|Mybatis由浅入深教程

Maven教程_Maven**教程

项目二大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

熟悉基本的Java爬虫开发,掌握web**gic爬虫框架使用;

掌握httpClient的使用;

掌握spring data jpa框架;

掌握Spring boot2.x框架;

掌握Spring Cloud框架;

掌握MongoDB数据库使用;

掌握RabbitMQ消息中间件使用;

掌握Elasticsearch分布式搜索引擎;

掌握Rancher实现容器部署管理;

掌握Grafana实现服务的实时监控;

熟悉NodeJs环境,使用Npm和cnpm管理包资源;

熟悉ESlint进行前端语法校验;

熟悉axios的使用;

掌握vuejs框架的基本使用;

掌握瀑布流组件使用;

掌握前端页面分享功能的实现;

掌握企业级DevOps解决方案,熟悉Docker、Jenkins、git等;

了解spark mllib als 机器学习算法库实现智能分类;

了解DL4J深度学习框架实现智能推荐。

配套**

2018年Vue.js深入浅出教程

深度掌握Springboot实践技术教程

微服务初级课程大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

配套**

SpringBoot教程_SpringBoot**教程

微服务高级课程大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

ServiceComb改造十次方项目;

了解Kubernetes作用及为什么使用Kubernetes;

会使用K8S API完成基本操作;

理解微服务引擎CSE的功能;

能够实现ServiceComb项目接入CSE;

能够实现学成在线项目接入CSE;

理解云容器引擎CCE的功能;

能够使用容器镜像服务上传镜像;

能够将学成在线微服务部署到CCE;

能够测试微服务治理常用策略;

能够理解Mesher的作用;

能够完成学成在线使用Mesher接入CSE。

**未更新,更新后上传

框架架构高级大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

能够理解ORM框架;

使用Socket进行系统之间通信;

掌握在Java中开启多线程的三种方式;

掌握使用Netty实现通信;

掌握Netty常用的传输方式及ByteBuff的使用方法;

理解及时通信框架的架构;

掌握Protobuf数据格式及在Java中应用Protobuf;

掌握使用Netty实现服务端、客户端;

理解虚拟机client与Server的运行模式;

学习垃圾回收的算法;

掌握jps、jstat、jinfo、jstack、hprof等命令的使用;

掌握图形化监控工具JConsole工具的使用;

掌握Mission Control虚拟机诊断工具的使用;

掌握压力测试工具JMeter的使用;

掌握调整参数测试Tomcat的性能;

掌握“双亲模式”的原理以及解决方案。

好客租房项目大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

可掌握的核心能力:

能够实**源信息更新的通知;

实现用户信息、房东、审核等功能;

能够实现API文档与模拟数据接口开发;

能够实现收藏、分享、举报、联系房东、预约**、在线签约功能;

掌握微信小程序开发;

实现日志数据的清理以及推荐。

大数据转型Hadoop3

大学毕业,零基础学习java,学几个月能学会呢?该注意什么?大数据hadoop教程入门

目前有几个阶段还未有**更新,有**了我会继续上传哦!如果有特别想要我放出的**,也可以留言哒!后台回复:“微服务”有**哦!

首先来说,需要确定“零基础”的程度。

如果说某个人接触计算机不多(但年龄在26以下),甚至上网打字、常用软件都不清楚的话,那么学Java的话,时间很久,至少至少入门要一年左右时间。

如果说常用电脑操作都行,但年龄较大 ,一般来说,上了30岁如果之前没有接触过编程相关的想学Java,也不现实,我们不建议去学习Java了。

如果年龄在26以下,有一定计算机基础的,并且对编程有兴趣的,那么学习Java是有可能学会的,具体要看每个人的领悟能力。

因为现代的Java应用场景更多的是WEB应用的开发,需要掌握的知识很多,不是说单单掌握Java语法就能做项目了,每项技能我按最快的时间给你计算下:

* HTML:7天

* CSS:7天

* DIV+CSS:20天

* JavaScript:20天

* JQ:3天

* 数据库:20天

* Java基础:45天

* SSH框架:60天

* 项目实践:30天

以上,按最快的节奏来看,掌握以上知识共计要212天,7个月的时间才能算是入门,然后还要考虑你当前是不是已经工作了,会不会受到其它事项的干扰,所以没个1年时间很难入门呀。

学习Java不是一件容易的事情,时间成本较高。如果你有恒心去学习Java,可以关注我哦,近期我在头条号上也会推出Java入门教程,希望对你所有帮助。

虽然学习java需要一定的理解力,但是如果真要想学也是可以学通的,关键是自己感不感兴趣!

一、自学(推荐至少学习半年)

如果是自己看书,看**学习java,作为过来人说,其实是挺难的,你不仅要学习java基础,还要学习数据库,java spring框架等,还需要懂点前端的js,系统的学习最为关键。

二、培训班(三个月)

报一个培训班,这样学习java就比较快一点,毕竟有老师带着你学习基础,有问题不需要自己琢磨,直接问老师还是比较透彻的。还有后期老师会给您一个小项目进行练手,对你以后工作会有很大的帮助、

我同事去学习一般是脱产半年培训,如果自学的话,一定要有合适的资料,并且带着项目实践去做,否则如果单纯的去看书学习,作用不大,也很难坚持下去。

当然,编程语言本身都是相通的,如果你学习过其它如c,python之类的。java入门也会很快。关键还是要实践。

大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

零基础,还得看你自身的有效学历等级。

一般来说,对于高职专科来讲,3—6个月,只要个人努力,理解力强些,多动手练习,多请教钻研,应该可以达到初中级别水平,这只是学习上的表现,离实战还有较大距离。

做两个完整的项目,综合所学,再总结。如果没问题了都,那基本可以做项目了……

当然,每个人的学习能力是不一样的,没有统一口径的。

这种模式还是值得操作的:

一教二学三实践!!!

……

零基础,那还是先看看咱们Java的学习路线吧,让你了解下怎么样才是有基础了

你可能觉得自己能一天学习8小时,实际上平均下来每天能学4小时都算厉害了。

因为有些时候你就是学不下去,或者某阶段**内容太难光看完半天内容就够呛,或者其他事情耽搁了。

我自己从完全零基础,学Java一直到找到进入百度这样大公司的实习岗位需要一年半。

当然,这和我边上学边学习,以及没有人帮我找资料指导我有很大关系。很多时间花在找资料上了。你会明白,我这篇回答对现在迷茫的你份量有多重。

一般来说,按本套教程,从零基础到达到工作后能被人带,至少需要8个月!

就连培训班现在也需要6个半月。不过现在自学或培训出来的已经很难找工作了。

1 入门 – Java SE

从大二前的暑假开始,网上看了一大堆推荐,知乎也反复看别人的回答,最终选了


毕向东Java基础教程(适合初学者入门的Java基础**)

本套**是传智播客历经5年不断锤炼,推出的一套Java入门**教程,该**专门针对零基础的学员录制,授课讲究通俗易懂,生动幽默。通过该**的学习,相信你能够轻松地入门Java语言。注:掌握了该**的知识,就可以具备报读Java就业班的条件。

大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

第一阶段:

1、计算机基本原理,Java语言发展简史,Java开发环境的搭建,体验Java程序的开发,环境变量path和classpath的设置,Java程序的执行过程,Java反编译工具介绍。计算机常用进制二、八、十六的介绍,以及它们与十进制之间的相互转化,ASCII码。Java语法格式,常量和变量,变量的作用域,函数和函数的重载,运算符,程序流程控制,数组和操作数组的类。针对数组的常用查找、排序算法原理,以及其Java实现。

第二阶段:

2、对象的本质,理解面向对象,类与对象的关系,在程序中如何应用面向对象的思想解决问题。如何设计类,设计类的基本原则,类的实例化过程,类的细节:构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃极回收机制,Javadoc介绍。对象的三大特性:封装、继承和多态,以及相应的Java实现:子类对象的实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析。对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。Extensibility的理解 、Extensibility的运用。常用设计模式:Singleton、Template、Strategy模式。

第三阶段:

3、JavaAPI介绍、Eclipse的安装和使用、String和StringBuffer、各种基本数据类型包装类,System和Runtime类,Date和DateFo**t类等。

Java Collections Fr**ework:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用**类API。IO概念,File和FileRandomAccess类,字节流InputStre**和OutputStre**,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。递归程序,Java的高级特性:反射、代理和泛型。

第四阶段:

4、多线程的概念,如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。Java图形用户介面编程(AWT、Swing),Java的事件处理机制,Java Applet简介。

Java网络编程,网络通信底层协议TCP和UDP,以及其相应的Java实现:Datagr**Socket,Datagr**Packet,ServerSocket,Socket编程。网络通信常用应用层协议简介:HTTP、**TP、POP3、MIME,以及WEB服务器的工作原理。编写网络聊天程序。

Java正则表达式API详解及其应用。

第五阶段:

5、JavaScript课程:HTML语言,HTML语言背景知识、HTML全局标签、格式标签、文件标签、超链接标签、图像标签、客户端图像地图、表格标签、帧标签、表单标签、头元素、分区标签。CSS介绍、CSS的设置方法、样式选择器、样式属性介绍,Dre**weaver的使用。

JavaScript编程,JavaScript语法、运算符、流程控制、函数、数组、对象、JavaScript的内部对象,JavaScript中专用于操作对象的语句。DHTML编程,理解DOM树,DOM对象,常用DOM对象的属性、方法和事件,编写事件处理程序、使用DOM操作HTML文档、遍历文档树上的节点、搜索文档**定的元素、修改文档内容、往文档添加新内容、使用DOM操作XML文档。DHTML编程的实用案例:网页换肤、HTML表格排序等,以及JavaScript中的正则表达式及其应用。

学习千万不要断!!!

毕老师的25天**,善用类比,语言幽默,每个知识点掰开了揉碎了喂给你,非常适合初学小白。毕老师讲课的魅力在于,让小白能听得进去,不枯燥,甚至觉得很有意思!自己也很喜欢他的讲课风格。但零基础的各位可能会和我当时一样,看到第五天时完全懵逼。

因为对于零基础初学者,Java还是挺难的。

后来发现毕老师还有其他版本的**,相比25天版调整了部分知识点讲解顺序。

但毕老师很多地方之所以听起来绕,是因为真的太照顾初学者了。算是为了初学者做出的让步吧。

JavaSE阶段,完全零基础的朋友,先看毕老师的

看**学习,不要看书学习

我自己,此前完全没有接触过编程,对编程是完全没概念的.

很多人都说看**慢,建议直接看优秀的书籍,所以我就买了Java的一些书(都是初学入门的),但都看不懂,看不下去。反而是后期跟着**学习一段时间后,再翻开书本(其实几乎没看过书),慢慢能知道书里在讲什么了。大家千万不要觉得看**会显得自己学习能力不够强。实际上,大学选择计算机专业的同学,又有多少比例是不靠老师上课,自己躲图书馆把编程学会的呢?从这个角度来说,看**相当于大学课堂听课。并没什么不妥。

不懂的知识点**多看几遍

如果**有配套笔记,第二天起来复习一遍,加深印象。自己也可用博客做笔记,写学习日志。JavaSE初期建议用最简单的VS Code敲代码,顺便掌握最简单的dos命令(cd.. cd javac java差不多了)。JavaSE中后期,立即跟着**换IDEA,赶紧熟练工具的使用。Java SE有不懂的,可以百度或谷歌,看看别人的技术博客。再回过头看**可能就突然明白了。因为我也这么试过,对我帮助很大,希望你也能试试。

初级阶段不建议买任何书籍,专心看**和附带的笔记足够了。

包括知乎上推荐的《head first Java》,《疯狂Java讲义》,《Java核心技术》都不太适合现阶段完全零基础的我们。太厚,知识点太详细。要知道,才了解编程的循环语句而已。再怎么好的入门书籍,它对受众也是有一定要求的。当然,我不是说看书不好,只是本阶段不推荐。至少我从零基础到学习框架,从书本上学到的可能就占了0.5%,看博客学到的也比书本多。几乎完全是靠**学来的。而且**也有源码和笔记,已经很方便。

对零基础的学习者来说,JavaSE的学习非常困难,因为完全白纸一张。你会有无数疑问,会经历无数次沮丧,无数次想放弃,无数次怀疑自己的智商。比如我,学了一个多月才学到毕老师的异常一章。之前在面向对象一章就已经很崩溃,哪知异常也这么抽象,完全不知道它是干嘛的….但千万不要放弃学习,也不要停下进度。可以多看几遍或者先往后看,到时候再回过头来学习。不要理会别人的嘲讽。很多人是科班出身,早就忘了当初自己连软件都不会装的窘境。

2 Java Web

直接开始了JavaWeb的学习,学到JDBC后发现基础实在太差,学不下去

选择一家培训机构的**,就看他们全套的。因为知识点安排和讲课风格会大体接近,比较熟悉。毕老师的**没必要把每个版本看一遍,非常浪费时间。我也只看过毕老师25天版本全部、当你发现**讲得有点浅,说明你学的还不错。此时你想理解得更深的话,不要再找**了,**都是给初学者的,点到即止(不论哪家的**)。直接去看书,《Java编程思想》保证够深。但还是*住,先往后学JavaWeb吧!

毕老师30天的**最后有简单地讲解HTML CSS JavaScript和DOM,可以给我们一个基本概念。

建议学完HTML就马上做一个小页面,巩固下标签的知识。HTML是三剑客里最基础的,必须掌握常用的标签。

这里是我写的**网页代码,仅供参考:

【前端部分】

1、HTML5(常用浏览器与浏览器内核、HTML的语义化、HTML中常用的标签以及每个标签的语义。HTML5新特性及新增常用标签)

2、Css3(CSS语法、选择器、字体样式、边框、背景、图片格式详解、定位、浮动、盒模型。CSS3新增选择器及新增属性、圆角、阴影、伸缩布局、变形、过渡、动画。CSS使用的高级技巧)

3、京东综合项目(代码分离原则,使用div+css布局完成一个完整的页面,使用CSS3完成动画效果)

【JavaWeb核心技术】

***cat一定要跟着**配置一遍。光看**是记不住的!!

Http协议和servlet超级重要,多看几遍,看一遍我敢打赌你会晕。东西太多了。建议做一下思维导图,理清知识点。

request和response超级重要,也很难。多看几遍,不要心急。request域超级重要。

cookie、session、JSP超级重要。多看几遍,不要心急。session域超级重要。

JavaWeb总共四大域对象

AJAX,很难。但听说现在和json一起用的越来越多。

综合练习,一定要敲,即使你觉得很难,也要硬着头皮敲完。敲完以后,自信心暴涨,那时你自己对JavaWeb那些知识点是重要的哪些是次要就会有自己的理解。重要的知识点,在你心里沉淀出来。就是这么神奇!!

JavaWeb(建议两个月):崔希凡——超全面的JavaWeb**和刘意的JavaSE衔接比较好,深入浅出。中间和后面的项目,JDBC以及最后两天的基础提高非常棒,强烈推荐,两遍。但里面没有jQuery和bootstrap 等前端内容,需要自己另外找。jQuery可以去菜鸟教程或者w3cschool学一下就好了。或者看就业班里的。JavaSE及JavaWeb阶段工具:链接:

4 S**框架(重点中的重点)

①先看**32期李旭讲的mybatis和springmvc,不为别的,因为他只讲重点,十小时讲完springmvc+mybatis。先有个感性认识。

②再看**程序员官网放出的《mybatis由浅入深》、《springmvc由浅入深》,很详细,很不错。

③在掌握了上面的**内容并有自己的一些见解后再去看尚硅谷的(最后有讲源码)

5 学习方法

小白自学的难点在于:

1,找不到合适的资料。

2,不知道学习重点。资料我已经放这了,是个人认为最适合小白的教程。

所以我建议:不要想着彻底掌握一块知识点再去学下一块知识点,这样永远不可能把这一套**学好。你应该用最快的时间完整过一遍,对整体学习路线有个把握。第一次学习争取每个知识点懂个50-60%,从后面的内容判断前面哪些知识点是重要的,常用的。然后回过头来有重点突出的攻克,抓大放小。最后,我推荐的**都是自己用过的,对比挑出来的最深入浅出的。如果你觉得没看懂,就多看几遍!!这句话很淳朴,但是很奏效。如果你相信我的话。其他的跟着**就好。

这就要看个人先天的资质、悟性和后天的恒心与毅力了。当然,如果再了解些电脑方面的知识的话,可能就会快些。正常情况下,基本掌握也要在5、6个月时间,一般资质者可能时长要再多些。不用说,悟性高、又遇高师指点的话,效果自然会更好,3、4个月即可掌握。至于找工作,最好先考个相关从业证,然后由国内比较正规的相关培训机构,比如达内等推荐可能效果会明显好些,如果自己找,可能把握性不大,即便找到,各方面待遇可能也会让自己不满意。

恰好我之前写了四篇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包,一种是使用**ven。后者会在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。
先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。
本文所述的方法不一定适合所有人,如有错误敬请谅解。
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 My**L
推荐资源:《Sql必知必会》,Runoob上的My**L基础教程,慕课网、极客学院等网站上的**课程
一个JavaWeb应用一定要有数据啊,所以我们需要用到数据库,其实搭一个mysql数据库是非常简单的,但是对于初学者来说最麻烦的就是写sql了,所以,先学会建表,熟悉sql,对你以后做项目也是大有裨益的。
4 Hibernate和Mybatis
推荐资源:Runoob上的Hibernate和Mybatis基础教程,慕课网、极客学院等网站上的**课程
当你学会了使用sql去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的,它可以让一张表和Java类一一对应,让数据查询变得非常方便。Hibernate和Mybatis都是orm框架,只不过现在mybatis越来越火了。
所以,你需要了解这一技术,因为它会广泛地运用到大部分Java Web项目中。
5 Maven
推荐资源:《**ven实战》,易百教程里的**ven教程,慕课网、极客学院等网站上的**课程
刚才咱们已经说过了Spring,orm框架,以及My**L等方面的技术了。实际上,一个简单的Java Web项目也只需要这些东西了。
但是,有一个问题,就是:一个项目里用到这么多技术,所需要的jar包也会很多,我们如何管理这些jar包呢。如果直接导入所需jar包,那当jar包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当jar包很多时,项目打包后的war格式文件也会很大,不利于传输。
为了解决上述问题,**ven应运而生了。**ven通过pom.xml文件来指定所需的jar包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。
当然,新手可能还难以理解这些概念,你必须要知道的是,大部分Java Web项目需要用**ven来管理,你需要学会**ven的基本用法,最基本的用法就是:学会修改pom.xml文件。
6 Tomcat
推荐资源:慕课网、极客学院等网站上的**课程。
对于小白来说,Tomcat相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装Tomcat即可。毕竟,它在项目中的作用就是提供一个运行环境而已。
正常来说,你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat,所以一般情况下你都可以在IDE中配置好你的Tomcat路径,然后设置好你的项目路径,IDE会自动把你的工程代码部署到Tomcat服务器上。
如果你使用想跳过IDE直接部署工程到Tomcat上,也可以直接编译工程并且打包得到war格式的文件(这个步骤可以使用**ven来完成),然后拷贝war文件到Tomcat下的特定目录即可。
上述两种部署方式的详细步骤请到搜索引擎寻找答案。
7 Git和GitHub
推荐资源:廖雪峰的Git教程,GitHub官网,慕课网、极客学院等网站上的**课程。
既然要做项目,为什么不把它发布在GitHub上。当你熟悉了Git指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到GitHub上,这样既可以让你更好地管理项目版本,又可以让你GitHub更加活跃,为你未来的面试加分。
所以,赶紧学好Git指令,然后开启你的项目之旅吧。
04 其他常用组件
除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。
1 日志系统
当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有log4j,logging等等,另外你还需要了解一下slf4j。
2 单元测试
日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是JUnit,建议你找个文档看一看,然后下载下来玩一下。
3 JSON
JSON逐渐成为前后端数据交互的标准格式,为了在项目中使用JSON的API,你也需要导入它的jar包,一般我们都会使用阿里提供的fastjson,赶快下载来玩一玩吧。
当然,常用的Java Web组件还有很多,比如HTTPClient,再比如一些加密工具,一些压缩工具等等,这里就不再一一列举了。
5 总结
今天的内容就到这里了,与其说是初级篇,反而更像是“项目篇”呢。因为学完基础内容之后,做项目是最好的复习和实践方式了。所以这篇文章围绕着做项目来展开,也就不足为奇了。
今天我们主要讲的是,做好一个JavaWeb项目,需要哪些知识储备,需要了解哪些技术,并且我也推荐一些比较精品的**课程。
后面我还会写一篇文章,专门讲一讲怎么做项目,会更加详细,更加侧重怎么去做,敬请期待吧。
总结以下今天说的几个要点吧:
1 Java基础知识储备 2 前端知识储备 3 了解和使用JavaWeb常用技术 4 JavaWeb常用组件介绍 5 **课程推荐
俗话说的好,磨刀不误砍柴工,相信你看了本文之后,可以更好地做好知识储备,然后开始Java Web的项目实践,希望你能够顺利地完成你的第一个项目。
笔者在今年秋招中成功拿到BAT头条网易等大厂的研发offer,期间总结了很多经验和技巧,我把它们写成文字,做成专题,发表在公众号上,希望让更多有需要的朋友看到。
关注微信公众号【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包,一种是使用**ven。后者会在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。
先声明一点,文章内容不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦。
本文所述的方法不一定适合所有人,如有错误敬请谅解。
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 My**L
推荐资源:《Sql必知必会》,Runoob上的My**L基础教程,慕课网、极客学院等网站上的**课程
一个JavaWeb应用一定要有数据啊,所以我们需要用到数据库,其实搭一个mysql数据库是非常简单的,但是对于初学者来说最麻烦的就是写sql了,所以,先学会建表,熟悉sql,对你以后做项目也是大有裨益的。
4 Hibernate和Mybatis
推荐资源:Runoob上的Hibernate和Mybatis基础教程,慕课网、极客学院等网站上的**课程
当你学会了使用sql去查询数据,可能还不足以让你在项目中很方便地处理数据,因为我们还需要一个步骤,就是把数据库的数据转化成Java里的对象。orm框架就是为了解决这一问题而出现的,它可以让一张表和Java类一一对应,让数据查询变得非常方便。Hibernate和Mybatis都是orm框架,只不过现在mybatis越来越火了。
所以,你需要了解这一技术,因为它会广泛地运用到大部分Java Web项目中。
5 Maven
推荐资源:《**ven实战》,易百教程里的**ven教程,慕课网、极客学院等网站上的**课程
刚才咱们已经说过了Spring,orm框架,以及My**L等方面的技术了。实际上,一个简单的Java Web项目也只需要这些东西了。
但是,有一个问题,就是:一个项目里用到这么多技术,所需要的jar包也会很多,我们如何管理这些jar包呢。如果直接导入所需jar包,那当jar包更新或者需要替换时,每次都要手动操作,非常麻烦。另外,当jar包很多时,项目打包后的war格式文件也会很大,不利于传输。
为了解决上述问题,**ven应运而生了。**ven通过pom.xml文件来指定所需的jar包,并且自带了很多构建相关的功能,比如编译,打包,运行单元测试等等,因为它本身就是一个构建工具。
当然,新手可能还难以理解这些概念,你必须要知道的是,大部分Java Web项目需要用**ven来管理,你需要学会**ven的基本用法,最基本的用法就是:学会修改pom.xml文件。
6 Tomcat
推荐资源:慕课网、极客学院等网站上的**课程。
对于小白来说,Tomcat相关的技术是非常复杂的,毕竟它是一个应用服务器啊,事实上这个时候,你只需要学会如何安装Tomcat即可。毕竟,它在项目中的作用就是提供一个运行环境而已。
正常来说,你只要下载解压Tomcat的压缩包即可。由于现在的IDE都支持集成Tomcat,所以一般情况下你都可以在IDE中配置好你的Tomcat路径,然后设置好你的项目路径,IDE会自动把你的工程代码部署到Tomcat服务器上。
如果你使用想跳过IDE直接部署工程到Tomcat上,也可以直接编译工程并且打包得到war格式的文件(这个步骤可以使用**ven来完成),然后拷贝war文件到Tomcat下的特定目录即可。
上述两种部署方式的详细步骤请到搜索引擎寻找答案。
7 Git和GitHub
推荐资源:廖雪峰的Git教程,GitHub官网,慕课网、极客学院等网站上的**课程。
既然要做项目,为什么不把它发布在GitHub上。当你熟悉了Git指令之后,你可以很方便地发布你项目中的每一次更新,并且同步到GitHub上,这样既可以让你更好地管理项目版本,又可以让你GitHub更加活跃,为你未来的面试加分。
所以,赶紧学好Git指令,然后开启你的项目之旅吧。
04 其他常用组件
除了上面几种必备的技术之外,有时候我们在项目中还会用到其他东西,在这里我们把它们叫做组件。这里只做简单的介绍,至于具体怎么使用,在网上都可以很容易地找到相关文章。
1 日志系统
当项目代码比较多的时候,容易发生错误,日志可以很好地记录代码运行时的错误,常用的日志系统有log4j,logging等等,另外你还需要了解一下slf4j。
2 单元测试
日志系统可以记录代码问题,单元测试则是为了避免代码出错,常用的单元测试组件主要是JUnit,建议你找个文档看一看,然后下载下来玩一下。
3 JSON
JSON逐渐成为前后端数据交互的标准格式,为了在项目中使用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 Web项目,以及前期需要哪些方面的基础。最后,我还推荐了几个比较不错的**课程,以便给大家参考。
当然,跟着**课程做完一个项目,你只是照葫芦画瓢又练习了一遍,可能其中有很多东西你并不太理解,比如你可能不知道为什么代码要分层,为什么要用**ven进行线上编译,为什么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 Java8
Java的版本一直在更新,但目前在用的主要还是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工程师进阶所需要掌握的一些技术内容。特别对于即将参加校招的同学来说,最重要的也是这部分内容,你需要了解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,**C,分别指的是什么,其中分别有什么问题。**C解决了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之外,最好还要了解它的实现原理。
推荐资源:我的技术博客专栏“重新学习My**L和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成本更高。
RocketMQ
RocketMQ是一个纯java、分布式、队列模型的开源消息中间件,前身是Metaq,当 Metaq 3.0发布时,产品名称改为 RocketMQ。
具有以下特点:
  1. 1、能够保证严格的消息顺序
  2. 2、提供丰富的消息拉取模式
  3. 3、高效的订阅者水平扩展能力
  4. 4、实时的消息订阅机制
  5. 5、亿级消息堆积能力
除此之外,它还有一个优点,就是支持事务消息,让分布式事务的实现变得简单
05 分布式数据库
这里说的分布式”数据库“,其实指的是数据库的分布式方案,更具体来说,主要指的是数据库的主从部署,以及分库,分表。
1 主从**和读写分离
这是数据库高可用的基础。My**L数据库会使用日志来完成主从**,先写主库,然后再同步到从库。读写分离则一般是指的是:从库负责读,主库负责写。
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 stre**ing等等,通常都用于大数据部门,用作实时数据采集。
又如ELK实现的分布式日志系统,多用于分析和定位系统问题,经常会出现在一些比较重要的应用当中。
当然,也有现在大火的人工智能,还有太多的技术我们没机会去了解和使用,我们能做的也就是在自己能力范围内把需要做的东西做到最好了。
所以,这些内容并不是每一样你都需要知道,但是如果有时间去了解一下的话,还是建议多了解一点的。
07 总结
总结
今天码的字有点多,所以难免有些写的不太好的地方,希望大家见谅。纵观全文,我们主要讲了这些内容:
1 Web架构 2 分布式基础理论 3 常见分布式技术 4 缓存 5 消息队列 6 数据的分布式方案 7 大后端相关技术
至此本系列文章就已经结束了,不知道大家有什么问题或者建议想和笔者交流吗~赶紧加我的微信来聊聊吧。
写本系列文章也是因为有很多朋友想要了解更加清晰的Java后端学习路线,所以我总结了之前自己的学习历程,才创作出这四篇文章,希望能够对大家有所帮助~
大学毕业,零基础学习java,学几个月能学会呢?该注意什么?

如果真的能恒下心几个月坚持学下来而且不会断断续续的话,大概三个月可以把整个java基础全部了解,熟悉的程度,但说掌握还远远不够,能说完全掌握java基本还是要几年的功夫。建议一开始不要直接埋头看书,可以先找个讲解基础较好的**全程看一遍,跟着敲一边,同时买一部不要太厚的书,在看**学习如果有不理解可以结合书本再理解一番

原创文章,作者:秒收,如若转载,请注明出处:https://www.miaoshou.cc/25564.html

(0)
上一篇 2021年7月2日 07:20
下一篇 2021年7月2日 07:24

相关推荐