java编程学习(怎样学习Java)
资讯
2023-10-26
202
1. java编程学习,怎样学习Java?
感谢邀请。
我自己也是一名软件开发工程师,目前在杭州某电子商务公司进行中间件软件的开发。职业生涯中用过C++,C#,Java,Python,Go等语言,使用最多的也是Java语言。接下来我就谈谈我对Java开发的一些理解,谈一下我是怎么学习Java的吧,希望能对想学习Java的有些帮助,能够抛砖引玉就很开心了。
Java语言学习Java语言之前,先来认识一下Java语言吧,这样对我们学习会有好处。
Java是一门面向对象编程语言,即经常说的OOP(Object Oriented Programming)。说起面向对象编程,大部分人在大学时应该都学过了C++语言,C++是很经典的面向对象语言。Java吸收了C++的OOP思想,同时也摒弃了C++中一些难以理解的元素,比如指针,多继承等。所以,Java语言同时具有了功能强大和简单易用的优点。
JVM说起Java,就不得不说Java的一个很重要的特性了,那就是JVM(Java Virtual Machine)。Java语言一经发布就收到了巨大的关注和欢迎,一门新的语言,能够迅速流行,肯定是在某些方面有着巨大的进步。尤其是在老前辈C,C++面前。
JVM是Java语言和同时代语言相比的一个重大突破。Java的口号是“Write Once, Run everywhere”。用Java语言编写的应用,只需编写一次,可以在各个平台运行,包括Window,Linux,Mac等。简言之,Java应用可以跨平台。目前有很多的跨平台语言,但是在当时,这可谓是一个巨大的突破。使用Java语言可以极大的减少跨平台应用的开发成本,收广大开发者和企业的欢迎。
JVM是如何做到跨平台呢?软件是运行在操作系统之上的,而不同的操作系统的内核,系统API都是不同的。这也导致了不同操作系统的软件不能在其他系统上直接运行。比如Windows的exe文件在Mac上无法运行。Mac的app软件在Windows上也无法运行。
计算机系统软件体系结构采用一种层的结构,有人说过一句名言:
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决JVM也是采用了这种方法。即Java代码不是编译成可在各平台直接运行的二进制文件,而是编译为一种Class文件。Class文件运行在JVM中,JVM负责将Class文件翻译成各平台的二进制文件。通过引入JVM中间层,Java应用实现了跨平台功能。
JVM工作原理如下图所示:
在学习Java的时候,要记住Java的JVM特性。这样对后续的Java学习很有好处,比如后面我将要提到的动态代理,AOP等特性。
Java开发环境搭建知道了Java的JVM原理之后,搭建Java开发环境就很简单了。不同的操作系统上需要安装平台相关的Java开发工具,即常说的JDK,或JRE。
JDK = JRE + 开发工具。JRE是Java应用的运行时环境,是必须的。JDK包含了JRE和开发工具(比如调试,日志,监控等)。安装Java有两种方式:
安装文件安装:手动去Oracle官网下载安装文件,进行安装。
包管理工具安装:在Mac平台推荐使用Homebrew安装;Linux上使用apt-get或yum来安装。
Java IDE推荐工欲善其事必先利其器一个好的开发工具,能为我们提升效率。
Java IDE有很多,比较主流的有Eclipse和IntelliJ IDEA。强烈推荐IntelliJ IDEA,比Eclipse要强大很多,唯一的缺点是IntelliJ IDEA完整功能是收费的。不过,作为日常开发,社区办已经足够强大,满足我们的需求了。如果想使用IntelliJ IDEA商业版,可以购买,获得更好的体验。
另外,如果资金不足,可以去网上找找破解版本,作为学习使用。不过,还是推荐使用正版软件哦。Java一些容易混淆的概念我是从C#转Java的。C#是微软闭环的一个开发语言,刚开始接触Java时,还没开始写代码,就已经被Java各种概念弄的晕头转向。接下来我就理清一下那些容易混淆的概念。
Java1.6和Java6:关于Java的版本,经常看到Java 1.6和Java6的说法。其实Java 1.6和Java6是同样的版本,只是叫法不一样。目前在使用的版本一般都是Java 6或以上了。
Java SE,Java EE,Java ME:是很早的时候提出来的一些概念,现在基本已废弃了,其实可以不用关注了。但我还是简单说明一下吧,Java SE:Java Standard Edition,可以认为是Java的核心。Java EE:Java Enterprise Edittion:Java企业版,基于Java SE,添加了一些企业开发的特性,用于开发企业级的大项目。Java ME:Java Mobile Edition:移动端开发版本。现在基本没有这样的区分了,在Oracle下载Java时,也只有Java SE。Java SE就是Java。
J2EE:J2EE就是Java EE。这个概念也基本被废弃了。不用太关心。
Apache:Apache是一个开源软件基金会,也是一款Web服务器,同时还是一种武装直升机。。。。
学Java即学习Java的生态这是我自己感触最深的一点,学习Java最重要的就是要学习Java的生态。这也是刚学习Java时,大部分人比较迷茫的。学习其他语言时,主要的精力可能在学习语言本身。而学习Java,将会需要花费大量的精力来学习Java生态中的各个组件,类库,框架,产品等。当然Java语言本身也是很重要的,需要花很多时间来学习。下面我就列一下Java常用的组件吧:
Tomcat:Web容器。用于运行Java的Web应用。
Jetty:Web容器。
Maven:项目构建工具。大多数的项目都是使用maven构建的。
Gradle:角色同Maven,是Maven的下一代,升级版。但市场普及度不如Maven。
Spring:Java中最常用的框架。几乎所有的项目都会使用。我会在后面单独介绍。
Mysql:数据库。Java应用一般选择Mysql作为数据库。
Mybatis:数据库访问框架,简化数据库访问。
Netty:网络通信组件。简化网络编程。
log4j:Log for Java的缩写,一款日志框架。
junit:Java Unit的缩写,Java的单元测试框架。
Apache Commons:Apache提供的通用功能的类库。比如字符串处理,集合处理等。
上面列出的是现在使用比较多的框架,一些过时了的比如Structs,Hibernate就不列举了。框架太多了,一些过时的就不要去学习了,不要迷失在眼花缭乱的框架中。有时间可以慢慢了解。
SpringSpring框架,是目前Java生态中最重要,也是使用最广的一个框架了。Spring框架由最初提供的一些核心功能,发展到今天,已经是一个非常完整的生态了。
Java是一个大生态,Spring是这个大生态中的另一个大生态。为什么Spring如此重要,Spring提供了什么功能呢?
Spring最重要,最核心,最有价值的地方其实就两点:
IoC:Inverse of Control,控制反转。
AOP:Aspect Orentied Programming,面向切面编程。
什么是IoC?我第一次接触IoC时,我是一脸蒙圈的,我问了隔壁搞了一年多Java的哥们,什么是IoC,他噼里啪啦和我说了一通,什么解耦,依赖注入,Bean。完了我说,这个IoC有什么关系。
IoC是什么?如果要好理解,先从IoC这三个字母说起,Inverse of Control,控制反转。
那就要解释什么是控制反转了。我们来看下面这两段代码:
MysqlDB是Mysql数据库操作实现类
public class UserRepository {
private MysqlDB db;
public void insert(User user) {
db.insert(user);
}
}
IDB是一个接口,可能有Mysql,Oracle,Mondo等实现。
public class UserRepository {
private IDB db;
public void insert(User user) {
db.insert(user);
}
}
这两段代码的唯一区别就是一个使用了MysqlDB,一个使用了IDB。他们都是UserRepository的依赖。UserRepository依赖他们来实现数据库操作。
使用MysqlDB的代码中,UserRepository自己控制它依赖的组件是什么,是很明确的MysqlDB。注意这里出现了控制的字眼哦。
使用IDB的代码中,UserRepository自己不能控制它依赖的组件是什么,可能是MysqlDB,可能是OracleDB,也可能是MondoDB。
本来UserRepository依赖谁是它自己控制的,这也是绝大部分其他语言和Java代码使用的方式。但是使用IDB的代码中,控制权不在UserRepository自己这里,而是有外部来控制的。这个外部可能是其他类,可能是其他框架,总之,不是UserRepository自己。这就是控制反转。
所以,控制反转说的主要是类之间的依赖关系。当一个类将它依赖的一个具体类,变成一个抽象的接口时,这是控制反转的表现形式。那控制反转有什么好处呢?
还是以上面的例子举例:UserRepository真实想要的功能其实是“保存数据”,而不是“保存数据到Mysql”。可能今天使用Mysql,但某天发现数据量大了,需要迁移到Oracle获取更大的吞吐量,也可能使用Nosql的Mongo实现更灵活的弱Schema存储。如果使用具体的MysqlDB,代码就和MysqlDB耦合了,一旦更换了数据库,所有依赖MysqlDB的地方的代码都需要改。而采用IDB的方式,代码是不用修改的。是解耦的。而且使用接口还有个好处是,我们可以基于抽象的接口生成动态代理,来实现更高级的功能。也就是动态给Java类添加功能。
关于IoC下面的图解释的比较清楚:
图一中四个齿轮是互相啮合在一起,在软件的角度上,就是类互相耦合。
图二中四个齿轮不是啮合在一起的,而是通过IoC容器连接在一起,是解耦的。
还记得前面引用的那句话吗?
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决IoC也是通过引入了额外的IoC容器来解决类之间的耦合问题。
图一
图二
AOPAOP:面向切面编程。我们可以看上面的图。向下的三个箭头是3个业务逻辑处理工程。他们处理了各自不同的逻辑。同时这3个业务处理都有打印日志和安全的问题。那么我们可以把这些通用的逻辑提取到一个公共的地方。就是AOP中的切面。日志和安全是两个切面,这两个切面是可以横切多个业务处理逻辑的。
使用AOP可以将一些公共的代码从各个业务类中剥离到切面中,提高系统的可维护性和扩展性。
Java进阶有了上面这些基础之后,基本算是Java入门了,开发基本的功能是可以了。接下来是一些进阶的推荐:
Java多线程编程。
Netty网络编程。
JVM调优,排查问题。
Spring MVC,Spring Boot。
RPC框架使用:Dubbo,Spring Cloud,gRPC。
消息中间件的使用。可以看看RocketMQ源码来学习。
容器:Docker,k8s等。(这个不是Java特有的,但是未来的趋势,值得学习)
以上就是我关于学习Java的一些思路吧,更多是从我自己的真实经历出发,希望能给大家一些参考吧。能力有限,有错误之处,还请大家帮着指正。
2. Java程序员学习的方向是什么?
我就是毕业后开始学习java,一步一步上来的,目前开始弄python人工智能方面。
第一步,认为是学好java的基础知识,包括语法、面向对象理念等。
第二步,了解jvm相关,并以此切入计算机组成原理。
第三步,开始学习一些框架,比如netty、spring系列等,并以此读些源代码(包括jdk中一些源代码)。
第四步,学习一些项目中需要用到的内容,比如数据库、消息传输、tomcat容器等,他们的安装、使用以及原理。
第五步,具体项目的开发,目前用的较多的是springcloud微服务框架,自己动手从头开始搭建。简单crud做起,逐渐形成一个项目。
第六步,linux及容器的一些部署方式,将你的项目部署到容器中运行。
以上完成,基本上一个优秀的资深程序员了。
我的项目中,因为要嵌入目前热门的AI技术,因此使用了python的numpy、pandas、tensorflow等技术,使用flask提供接口服务,目前也在深入学习中。
以上,是我的学习路径。 不过我以前一大段时间是做应用运维的[捂脸]
3. 如何学好java?
主要概括学习路线及方法通过优秀的 github 学习库学习Java工程师必看书籍学习路线以及方法推荐
对于学习路线的话,我说一条我比较推荐的,我相信照着这条学习路线来你的学习效率会非常高。
掌握 Java 基础知识:可以看《Think in Java》、《Java 核心技术卷1》、《Head First Java》这几本书,一定不要忽略书籍,书籍的阅读过程会变成一种思考过程,能够锻炼理解力和定力,当然你也可以边看视频边看书学习(推荐黑马或者尚硅谷的视频)。记住初学者一定要跟着视频一起写,哪怕不懂也要写,只有写了记录才能总结,最好代码分章节提交到 github。掌握多线程的简单实用(推荐《Java并发编程之美》)。想进入高级岗位,就一定要持续的提升自己,我推荐在学习完Java基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷Leetcode,这是一个艰难的过程,但是会让自己更加完美。学习前端基础(HTML、CSS、JavaScript),当然BootStrap、VUE、react、angular等等前端框架你也可以了解一下,如果不感兴趣建议放弃,因为人的精力有限,需要放到自己更喜欢的方向。学习MySQL 的基本使用,基本的增删改查,SQL命令,索引、存储过程,而且最好看看mysq 原理,这个很重要,只有知道了底层原理比如 mysql 书籍存储结构,才能更好的理解索引,如何优化等。 建议学习J2ee框架之前可以提前花半天时间学习一下Maven的使用。(到处找Jar包,下载Jar包是真的麻烦费事,使用Maven可以为你省很多事情)学习Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis 等框架的使用,(可选)熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下SpringBoot。我也遇到很多公司对于应届生直接上手SpringBoot,不过我还是推荐你把Spring、SpringMVC好好学一下。学习Linux的基本使用(常见命令、基本概念)学习Dubbo、Zookeeper、常见的消息队列(比如ActiveMq、RabbitMQ)的使用。可以学习一下NIO和Netty,这样简历上也可以多点东西。推荐java 学习仓库https://github.com/Snailclimb/JavaGuide
这个仓库现在 star 78.3K ,涵盖了非常丰富的 java 知识体系,可以不用一下子全看,从基础的开始,随着自己的水平不断提升,经验更加丰富以后,可以接触分布式、JVM、算法之类的。
但是同时,还是要有自己的学习笔记。不断的整理查漏补缺。这个习惯非常有用,能够让自己不断提升的同时,有其他意外惊喜,比如交到同行的朋友,这些都是隐形资源。
书籍推荐《Head First Java》 : 可以说是我的 Java 启蒙书籍了,特别适合新手读当然也适合我们用来温故 Java 知识点。《Java 核心技术卷 1+卷 2》: 很棒的两本书,建议有点 Java 基础之后再读,介绍的还是比较深入的,非常推荐。这两本书我一般也会用来巩固知识点或者当做工具书参考,是两本适合放在自己身边的好书。《Java 编程思想 (第 4 版)》(推荐,豆瓣评分 9.1,3.2K+人评价):大部分人称之为Java领域的圣经,但我不推荐初学者阅读,有点劝退的味道。稍微有点基础后阅读更好。《JAVA 网络编程 第 4 版》: 可以系统的学习一下网络的一些概念以及网络编程在 Java 中的使用。《Java性能权威指南》:O'Reilly 家族书,性能调优的入门书,我个人觉得性能调优是每个 Java 从业者必备知识,这本书的缺点就是太老了,但是这本书可以作为一个实战书,尤其是 JVM 调优!不适合初学者。前置书籍:《深入理解 Java 虚拟机》并发《Java 并发编程之美》 :我觉得这本书还是非常适合我们用来学习 Java 多线程的。这本书的讲解非常通俗易懂,作者从并发编程基础到实战都是信手拈来。 另外,这本书的作者加多自身也会经常在网上发布各种技术文章。我觉得这本书也是加多大佬这么多年在多线程领域的沉淀所得的结果吧!他书中的内容基本都是结合代码讲解,非常有说服力!《实战 Java 高并发程序设计》: 这个是我第二本要推荐的书籍,比较适合作为多线程入门/进阶书籍来看。这本书内容同样是理论结合实战,对于每个知识点的讲解也比较通俗易懂,整体结构也比较清。《深入浅出 Java 多线程》:这本书是几位大厂(如阿里)的大佬开源的,Github 地址:https://github.com/RedSpider1/concurrent几位作者为了写好《深入浅出 Java 多线程》这本书阅读了大量的 Java 多线程方面的书籍和博客,然后再加上他们的经验总结、Demo 实例、源码解析,最终才形成了这本书。这本书的质量也是非常过硬!给作者们点个赞!这本书有统一的排版规则和语言风格、清晰的表达方式和逻辑。并且每篇文章初稿写完后,作者们就会互相审校,合并到主分支时所有成员会再次审校,最后再通篇修订了三遍。《Java 并发编程的艺术》 :这本书不是很适合作为 Java 多线程入门书籍,需要具备一定的 JVM 基础,有些东西讲的还是挺深入的。另外,就我自己阅读这本书的感觉来说,我觉得这本书的章节规划有点杂乱,但是,具体到某个知识点又很棒!这可能也和这本书由三名作者共同编写完成有关系吧!......JVM《深入理解 Java 虚拟机(第 3 版)》):必读!必读!必读!神书,建议多刷几篇。里面不光有丰富地JVM理论知识,还有JVM实战案例!必读!《实战 JAVA 虚拟机》:作为入门的了解 Java 虚拟机的知识还是不错的。Java8 新特性
《Java 8 实战》:面向 Java 8 的技能升级,包括 Lambdas、流和函数式编程特性。实战系列的一贯风格让自己快速上手应用起来。Java 8 支持的 Lambda 是精简表达在语法上提供的支持。Java 8 提供了 Stream,学习和使用可以建立流式编程的认知。《Java 8 编程参考官方教程》:建议当做工具书来用!哪里不会翻哪里!代码优化《重构_改善既有代码的设计》:豆瓣 9.1 分,重构书籍的开山鼻祖。《Effective java 》:本书介绍了在 Java 编程中很多极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。这篇文章能够非常实际地帮助你写出更加清晰、健壮和高效的代码。本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。《代码整洁之道》:虽然是用 Java 语言作为例子,全篇都是在阐述 Java 面向对象的思想,但是其中大部分内容其它语言也能应用到。阿里巴巴 Java 开发手册 :https://github.com/alibaba/p3cGoogle Java 编程风格指南: http://www.hawstein.com/posts/google-java-style.html网络《图解 HTTP》: 讲漫画一样的讲 HTTP,很有意思,不会觉得枯燥,大概也涵盖也 HTTP 常见的知识点。因为篇幅问题,内容可能不太全面。不过,如果不是专门做网络方向研究的小伙伴想研究 HTTP 相关知识的话,读这本书的话应该来说就差不多了。《HTTP 权威指南》:如果要全面了解 HTTP 非此书不可!操作系统《鸟哥的 Linux 私房菜》:本书是最具知名度的 Linux 入门书《鸟哥的 Linux 私房菜基础学习篇》的最新版,全面而详细地介绍了 Linux 操作系统。数据结构《大话数据结构》:入门类型的书籍,读起来比较浅显易懂,适合没有数据结构基础或者说数据结构没学好的小伙伴用来入门数据结构。算法入门《我的第一本算法书》 (豆瓣评分 7.1,0.2K+人评价) 一本不那么“专业”的算法书籍。和下面两本推荐的算法书籍都是比较通俗易懂,“不那么深入”的算法书籍。我个人非常推荐,配图和讲解都非常不错!《算法图解》(豆瓣评分 8.4,1.5K+人评价) :入门类型的书籍,读起来比较浅显易懂,非常适合没有算法基础或者说算法没学好的小伙伴用来入门。示例丰富,图文并茂,以让人容易理解的方式阐释了算法.读起来比较快,内容不枯燥!《啊哈!算法》 (豆瓣评分 7.7,0.5K+人评价) :和《算法图解》类似的算法趣味入门书籍。经典下面这些书籍都是经典中的经典,但是阅读起来难度也比较大,不做太多阐述,神书就完事了!推荐先看 《算法》,然后再选下面的书籍进行进一步阅读。不需要都看,找一本好好看或者找某本书的某一个章节知识点好好看。
《算法 第四版》(豆瓣评分 9.3,0.4K+人评价): 我在大二的时候被我们的一个老师强烈安利过!自己也在当时购买了一本放在宿舍,到离开大学的时候自己大概看了一半多一点。因为内容实在太多了!另外,这本书还提供了详细的Java代码,非常适合学习 Java 的朋友来看,可以说是 Java 程序员的必备书籍之一了。再来介绍一下这本书籍吧!这本书籍算的上是算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。编程珠玑(豆瓣评分 9.1,2K+人评价) :经典名著,被无数读者强烈推荐的书籍,几乎是顶级程序员必看的书籍之一了。这本书的作者也非常厉害,Java之父 James Gosling 就是他的学生。很多人都说这本书不是教你具体的算法,而是教你一种编程的思考方式。这种思考方式不仅仅在编程领域适用,在其他同样适用。《算法设计手册》(豆瓣评分9.1 , 45人评价) :被 Teach Yourself Computer Science 强烈推荐的一本算法书籍。《算法导论》 (豆瓣评分 9.2,0.4K+人评价)《计算机程序设计艺术(第1卷)》(豆瓣评分 9.4,0.4K+人评价)面试**《剑指Offer》(豆瓣评分 8.3,0.7K+人评价)**这本面试宝典上面涵盖了很多经典的算法面试题,如果你要准备大厂面试的话一定不要错过这本书。《剑指Offer》 对应的算法编程题部分的开源项目解析:CodingInterviews程序员代码面试指南:IT名企算法与数据结构题目最优解(第2版) (豆瓣评分 8.7,0.2K+人评价) :题目相比于《剑指 offer》 来说要难很多,题目涵盖面相比于《剑指 offer》也更加全面。全书一共有将近300道真实出现过的经典代码面试题。编程之美(豆瓣评分 8.4,3K+人评价):这本书收集了约60道算法和程序设计题目,这些题目大部分在近年的笔试、面试中出现过,或者是被微软员工热烈讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。数据库MySQL:
《高性能 MySQL》:这本书不用多说了把!MySQL 领域的经典之作,拥有广泛的影响力。不但适合数据库管理员(dba)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获。如果你的时间不够的话,第5章关于索引的内容和第6章关于查询的内容是必读的!《MySQL 技术内幕-InnoDB 存储引擎》(推荐,豆瓣评分 8.7):了解 InnoDB 存储引擎底层原理必备的一本书,比较深入。Redis:
《Redis 实战》:如果你想了解 Redis 的一些概念性知识的话,这本书真的非常不错。《Redis 设计与实现》:也还行吧!系统设计设计模式
《设计模式 : 可复用面向对象软件的基础》 :设计模式的经典!《Head First 设计模式(中文版)》 :相当赞的一本设计模式入门书籍。用实际的编程案例讲解算法设计中会遇到的各种问题和需求变更(对的,连需求变更都考虑到了!),并以此逐步推导出良好的设计模式解决办法。《大话设计模式》 :本书通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解GOF(即《设计模式 : 可复用面向对象软件的基础》这本书)),但是不像《设计模式 : 可复用面向对象软件的基础》难懂。但是设计模式只看书是不够的,还是需要在实际项目中运用,在实战中体会。常用框架Spring/SpringBoot
《Spring 实战(第 4 版)》 :不建议当做入门书籍读,入门的话可以找点国人的书或者视频看。这本定位就相当于是关于 Spring 的新华字典,只有一些基本概念的介绍和示例,涵盖了 Spring 的各个方面,但都不够深入。就像作者在最后一页写的那样:“学习 Spring,这才刚刚开始”。《Spring源码深度解析 第2版》 :读Spring源码必备的一本书籍。市面上关于Spring源码分析的书籍太少了。《Spring 5高级编程(第5版)》 :推荐阅读,对于Spring5的新特性介绍的很好!不过内容比较多,可以作为工具书参考。《精通Spring4.x企业应用开发实战》 :通过实战讲解,比较适合作为Spring入门书籍来看。《Spring入门经典》 :适合入门,也有很多示例!《Spring Boot实战派》 :这本书使用的Spring Boot 2.0+的版本,还算比较新。整本书采用“知识点+实例”的形式编写。本书通过“58个基于知识的实例+2个综合性的项目”,深入地讲解Spring Boot的技术原理、知识点和具体应用;把晦涩难懂的理论用实例展现出来,使得读者对知识的理解变得非常容易,同时也立即学会如何使用它。说实话,我还是比较推荐这本书的。《Spring Boot编程思想(核心篇)》 :SpringBoot深入书,不适合初学者。书尤其的厚,这本书的缺点是书的很多知识点的讲解过于啰嗦和拖沓,优点是书中对SpringBoot内部原理讲解很清楚。Netty
《Netty进阶之路:跟着案例学Netty》 : 这本书的优点是有不少实际的案例的讲解,通过案例来学习是很不错的!《Netty 4.x 用户指南》 :《Netty 4.x 用户指南》中文翻译(包含了官方文档以及其他文章)。《Netty 入门与实战:仿写微信 IM 即时通讯系统》 :基于 Netty 框架实现 IM 核心系统,带你深入学习 Netty 网络编程核心知识《Netty 实战》 :可以作为工具书参考!分布式
《从 Paxos 到 Zookeeper》:简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了 Paxos 和 ZAB 协议。同时,本书深入介绍了分布式一致性问题的工业解决方案——ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法、内部实现及运维技巧,旨在帮助读者全面了解 ZooKeeper,并更好地使用和运维 ZooKeeper。《RabbitMQ 实战指南》:《RabbitMQ 实战指南》从消息中间件的概念和 RabbitMQ 的历史切入,主要阐述 RabbitMQ 的安装、使用、配置、管理、运维、原理、扩展等方面的细节。如果你想浅尝 RabbitMQ 的使用,这本书是你最好的选择;如果你想深入 RabbitMQ 的原理,这本书也是你最好的选择;总之,如果你想玩转 RabbitMQ,这本书一定是最值得看的书之一《Spring Cloud 微服务实战》:从时下流行的微服务架构概念出发,详细介绍了 Spring Cloud 针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud 微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。网站架构
《大型网站技术架构:核心原理与案例分析+李智慧》:这本书我读过,基本不需要你有什么基础啊~读起来特别轻松,但是却可以学到很多东西,非常推荐了。另外我写过这本书的思维导图,关注我的微信公众号:“Java 面试通关手册”回复“大型网站技术架构”即可领取思维导图。《亿级流量网站架构核心技术》:一书总结并梳理了亿级流量网站高可用和高并发原则,通过实例详细介绍了如何落地这些原则。本书分为四部分:概述、高可用原则、高并发原则、案例实战。从负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案、缓存、池化、异步化、扩容、队列等多方面详细介绍了亿级流量网站的架构核心技术,让读者看后能快速运用到实践项目中。《从零开始学架构(李运华)》 : 这本书对应的有一个极客时间的专栏—《从零开始学架构》,里面的很多内容都是这个专栏里面的,两者买其一就可以了。我看了很小一部分,内容挺全面的,是一本真正在讲如何做架构的书籍。《架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》 :非常喜欢的一本书,对一些知识点比如消息队列、API网管讲解的很好,通俗易懂。底层
《深入剖析 Tomcat》:本书深入剖析 Tomcat 4 和 Tomcat 5 中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发 Tomcat 组件,或者扩展已有的组件。 读完这本书,基本可以摆脱背诵面试题的尴尬。《深入理解 Nginx(第 2 版)》:作者讲的非常细致,注释都写的都很工整,对于 Nginx 的开发人员非常有帮助。优点是细致,缺点是过于细致,到处都是代码片段,缺少一些抽象。4. 怎么才能学好java?
给您推荐Java学习路线图,是菊厂童鞋做开发经常使用的一些技术和工具,希望能帮助到您~
前端部分:1)HTML:网页的核心语言,构成网页的基础2)CSS:使网页更加丰富多彩灿烂的利器3)JavaScript:使网页动起来的根本,加强了网页和用户之间的交互4)HTML DOM:换一种更加形象化的角度来看待网页,让我们更加方便的控制网页5)HTML BOM:与浏览器交互不可或缺的工具6)JavaScript库,主要是:jQuery及其插件、YUI及其插件,使编写网页更加的方便快捷和健壮的强大工具7)AJAX:异步提交,增强了用户使用网页的良好交互体验8)JSON:比 XML更小、更快,更易解析的数据传输工具9)FLEX:提供丰富多彩的动画效果10)普元工作流:更加清晰明了的帮助用户处理业务流程上面的工作11)JSP:Servlet的展示层,使网页逻辑与网页设计的显示分离12)JSTL:加强和简化了JSP页面的开发13)EL:使JSP页面写起来更加简单后台部分:1)JAVA语言编程基础部分:内容丰富是Java知识体系结构的核心和基础2)JDBC:提供了一种基准,据此可以构建更高级的工具和接口,使Java开发人员能够编写数据库应用程序3)JavaMail:用于电子邮件的相关的编程工作4)JUnit:单元测试,整个变成工作测试的地位始终非常重要5)Log4j:使我们能够更加细致地控制日志的生成过程6)Servlet:JavaWeb的核心7)Struts2:JavaWeb编程中明星级的框架,优点多功能强使编程工作更简单,主要用于控制跳转8)Spring:JavaWeb编程中明星级的框架,同样优点多功能强使编程工作更简单,主要用于管理对象9)iBatis:JavaWeb编程中明星级的框架,同样也是优点多功能强使编程工作更简单,主要用于程序和数据库之间的交互10)SQL:与数据库交互式编程的必备工具版本控制:1)SVN:版本控制,方便团队协同工作WEB服务器:1)Tomcat:优秀免费的中小型WEB服务器2)Weblogic:功能很强大的WEB服务器开发工具:1)Eclipse:开源强大的Java编程工具2)MyEclipse:在eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境数据库:1)Oracle:数据库业界老大,这个常用一点当然,也仅仅是常用一些常用的功能而已,需要加强2)MySQL:最好的关系型数据库之一3)SqlServer:最好的关系型数据库之一数据库客户端:1)Toad:非常棒的数据库客户端软件操作系统:1)Windows2)Linux远程登录的会话工具:1)SSH:一直在用,非常不错其他:各种种类和版本的浏览器(推荐使用FireFox)、office办公软件系列、各种文本编辑器(推荐Sublime)、各种阅读器等等下面是从网上找的三幅图片,比较好的说明了作为一个Java程序员的学习路线图,这里作为一种自我提醒的工具,不时看看,并且会赶紧修补自己的知识树!1、Java的知识体系结构2、JavaWeb开发的基本学习路线图3、JavaWeb开发的成长路线图第一部分:Java高级学习课程大纲
1、工程化专题我们的工程化专题有五大内容:Maven、Nexus 、jenkins、代码审查 、Git/SVN一共耗时一个月2、源码分析专题源码分析有三大内容: spring的源码分析,里面包括FactoryBean和MVC和事务处理与Spring源码中设计模式分析;持久层 ;企业级开发前瞻,一共耗时2个月3、高并发与高性能高并发与高性能有四大内容:并发编程, 里面又包含有线程安全和NIO和AIO 。异步通信,里面包含有本地队列和消息中间件。分布式协调技术,里面包含有Zookeeper和服务锁 。NoSqI: 里面包含有 MongoDB和Redis和Memcached 。一共耗时2个月4、高可用性与可扩展高可用性与可扩展有两大内容: 分布式架构介绍,里面有导流技术和服务设计和存储设计。服务调用,里面包含有WebService和Dubbo。 一共耗时2个月5、性能优化性能优化有四大内容:优化技巧,如何寻找性能瓶颈。JVM优化。数据库优化。服务器优化。一共耗时2个月上面这五大专题,是几位工作经验十多年的大牛,根据自己往年的工作经验与经历,在根据现在科技发展的实际情况,历经几个月的时间编写而成,换句话说,上面的五大专题,也就是他们这十几年精华总结,现在,您只要按照上面的课题学习,只需要花费掉七个月多的时间,就能够学会与理解几位大牛十多年总结出来的精华。学完这些,还怕公司老总不给涨工资和升职么?第二部分:阶段性的学习
学什么东西都一样,小宅相信大家也是一样,在学东西的时候,总会安排好自己阶段性的学习,这样才能有效的提升自己与有效的理解和认知所学的知识。合理安排好,才能起到事半功倍的效果。阶段一:阶段二:阶段三:阶段四:阶段五:5. 新手如何学习Java?
作为一名从业多年的Java程序员,同时也出版过Java编程书籍,所以我来回答一下这个问题。
对于新手来说,要想学好Java,应该注重以下几个方面:
第一:正确理解Java的各种“抽象”。学习Java就是学习各种“抽象”,包括类、接口和抽象类等,不同层次的抽象意味着不同的作用。对于初学者来说,要想正确的掌握各种抽象,应该从基本的Java编程过程开始,包括类的设计、对象的创建和方法的调用,另外要重点学习一下多态的使用。多做实验是理解各种抽象的好办法,因为实验往往能够为初学者建立起概念的“画面”,从而辅助理解。
第二:注重知识结构的全面性。学习Java开发的过程中要系统地学习一下操作系统、计算机网络、数据结构、算法设计和数据库知识,这些计算机基础内容对于学习Java具有重要的意义,如果想在Java开发领域走得更远,一定要注重基础知识的学习。在学习期间建议使用Linux操作系统开展实验,未来很多Java开发都离不开Linux操作系统,比如大数据应用开发、物联网平台开发等。
第三:确定一个主攻方向。Java目前主要的应用领域包括Web开发、Android开发和大数据开发,不少网络服务也需要采用Java完成后端功能的编写,另外Java也是研发级程序员的常见工具,涉及到一些平台和容器的开发,比如大数据平台Hadoop就是采用Java语言编写的。对于Java初学者来说,要根据自身的知识结构和兴趣爱好,选择一个适合自己的主攻方向。
最后,在当前的大数据、云计算时代背景下,Java全栈程序员的岗位需求量比较大,所以学习Java全栈开发也是一个不错的选择。Java全栈开发需要重视一下前端开发技术的学习,重点是JavaScript语言的学习。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言!
6. 新手java程序员如何进阶?
现在招聘市场最热门的还是Java岗位,毕竟每个项目都需要后端的支撑,而Java就是后端最热门的编程语言,而且Java的生态也非常完善。那么新手Java该如何进阶,从只会增删改查的码农变成优秀的工程师呢?
阅读常见类的源码
掌握并发编程
掌握常见的设计模式
使用Linux系统,知道操作系统的一些基本知识
对网络编程有一定了解,对后面的web开发很有帮助
掌握常见的开发工具
关注新的Java特性
对项目的架构先有一定了解,后面在进行深入
对数据结构和算法有一定了解
学会通过反编译工具进行排错
7. java编程好学吗?
对于任何一门语言都不能用好不好来讲,正所谓术业有专攻,不同语言针对不同方向。Java语言只能说相对于其他语言来说各方面更为均衡,某些方面更优秀,使用率高,适用范围广,所以才显得Java与其他语言相比更好,其实并不然,每一门语言都有自己的优势,并不是Java就一定是最好的,但是一定是用最广的。
本站涵盖的内容、图片、视频等数据系网络收集,部分未能与原作者取得联系。若涉及版权问题,请联系我们删除!联系邮箱:ynstorm@foxmail.com 谢谢支持!
1. java编程学习,怎样学习Java?
感谢邀请。
我自己也是一名软件开发工程师,目前在杭州某电子商务公司进行中间件软件的开发。职业生涯中用过C++,C#,Java,Python,Go等语言,使用最多的也是Java语言。接下来我就谈谈我对Java开发的一些理解,谈一下我是怎么学习Java的吧,希望能对想学习Java的有些帮助,能够抛砖引玉就很开心了。
Java语言学习Java语言之前,先来认识一下Java语言吧,这样对我们学习会有好处。
Java是一门面向对象编程语言,即经常说的OOP(Object Oriented Programming)。说起面向对象编程,大部分人在大学时应该都学过了C++语言,C++是很经典的面向对象语言。Java吸收了C++的OOP思想,同时也摒弃了C++中一些难以理解的元素,比如指针,多继承等。所以,Java语言同时具有了功能强大和简单易用的优点。
JVM说起Java,就不得不说Java的一个很重要的特性了,那就是JVM(Java Virtual Machine)。Java语言一经发布就收到了巨大的关注和欢迎,一门新的语言,能够迅速流行,肯定是在某些方面有着巨大的进步。尤其是在老前辈C,C++面前。
JVM是Java语言和同时代语言相比的一个重大突破。Java的口号是“Write Once, Run everywhere”。用Java语言编写的应用,只需编写一次,可以在各个平台运行,包括Window,Linux,Mac等。简言之,Java应用可以跨平台。目前有很多的跨平台语言,但是在当时,这可谓是一个巨大的突破。使用Java语言可以极大的减少跨平台应用的开发成本,收广大开发者和企业的欢迎。
JVM是如何做到跨平台呢?软件是运行在操作系统之上的,而不同的操作系统的内核,系统API都是不同的。这也导致了不同操作系统的软件不能在其他系统上直接运行。比如Windows的exe文件在Mac上无法运行。Mac的app软件在Windows上也无法运行。
计算机系统软件体系结构采用一种层的结构,有人说过一句名言:
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决JVM也是采用了这种方法。即Java代码不是编译成可在各平台直接运行的二进制文件,而是编译为一种Class文件。Class文件运行在JVM中,JVM负责将Class文件翻译成各平台的二进制文件。通过引入JVM中间层,Java应用实现了跨平台功能。
JVM工作原理如下图所示:
在学习Java的时候,要记住Java的JVM特性。这样对后续的Java学习很有好处,比如后面我将要提到的动态代理,AOP等特性。
Java开发环境搭建知道了Java的JVM原理之后,搭建Java开发环境就很简单了。不同的操作系统上需要安装平台相关的Java开发工具,即常说的JDK,或JRE。
JDK = JRE + 开发工具。JRE是Java应用的运行时环境,是必须的。JDK包含了JRE和开发工具(比如调试,日志,监控等)。安装Java有两种方式:
安装文件安装:手动去Oracle官网下载安装文件,进行安装。
包管理工具安装:在Mac平台推荐使用Homebrew安装;Linux上使用apt-get或yum来安装。
Java IDE推荐工欲善其事必先利其器一个好的开发工具,能为我们提升效率。
Java IDE有很多,比较主流的有Eclipse和IntelliJ IDEA。强烈推荐IntelliJ IDEA,比Eclipse要强大很多,唯一的缺点是IntelliJ IDEA完整功能是收费的。不过,作为日常开发,社区办已经足够强大,满足我们的需求了。如果想使用IntelliJ IDEA商业版,可以购买,获得更好的体验。
另外,如果资金不足,可以去网上找找破解版本,作为学习使用。不过,还是推荐使用正版软件哦。Java一些容易混淆的概念我是从C#转Java的。C#是微软闭环的一个开发语言,刚开始接触Java时,还没开始写代码,就已经被Java各种概念弄的晕头转向。接下来我就理清一下那些容易混淆的概念。
Java1.6和Java6:关于Java的版本,经常看到Java 1.6和Java6的说法。其实Java 1.6和Java6是同样的版本,只是叫法不一样。目前在使用的版本一般都是Java 6或以上了。
Java SE,Java EE,Java ME:是很早的时候提出来的一些概念,现在基本已废弃了,其实可以不用关注了。但我还是简单说明一下吧,Java SE:Java Standard Edition,可以认为是Java的核心。Java EE:Java Enterprise Edittion:Java企业版,基于Java SE,添加了一些企业开发的特性,用于开发企业级的大项目。Java ME:Java Mobile Edition:移动端开发版本。现在基本没有这样的区分了,在Oracle下载Java时,也只有Java SE。Java SE就是Java。
J2EE:J2EE就是Java EE。这个概念也基本被废弃了。不用太关心。
Apache:Apache是一个开源软件基金会,也是一款Web服务器,同时还是一种武装直升机。。。。
学Java即学习Java的生态这是我自己感触最深的一点,学习Java最重要的就是要学习Java的生态。这也是刚学习Java时,大部分人比较迷茫的。学习其他语言时,主要的精力可能在学习语言本身。而学习Java,将会需要花费大量的精力来学习Java生态中的各个组件,类库,框架,产品等。当然Java语言本身也是很重要的,需要花很多时间来学习。下面我就列一下Java常用的组件吧:
Tomcat:Web容器。用于运行Java的Web应用。
Jetty:Web容器。
Maven:项目构建工具。大多数的项目都是使用maven构建的。
Gradle:角色同Maven,是Maven的下一代,升级版。但市场普及度不如Maven。
Spring:Java中最常用的框架。几乎所有的项目都会使用。我会在后面单独介绍。
Mysql:数据库。Java应用一般选择Mysql作为数据库。
Mybatis:数据库访问框架,简化数据库访问。
Netty:网络通信组件。简化网络编程。
log4j:Log for Java的缩写,一款日志框架。
junit:Java Unit的缩写,Java的单元测试框架。
Apache Commons:Apache提供的通用功能的类库。比如字符串处理,集合处理等。
上面列出的是现在使用比较多的框架,一些过时了的比如Structs,Hibernate就不列举了。框架太多了,一些过时的就不要去学习了,不要迷失在眼花缭乱的框架中。有时间可以慢慢了解。
SpringSpring框架,是目前Java生态中最重要,也是使用最广的一个框架了。Spring框架由最初提供的一些核心功能,发展到今天,已经是一个非常完整的生态了。
Java是一个大生态,Spring是这个大生态中的另一个大生态。为什么Spring如此重要,Spring提供了什么功能呢?
Spring最重要,最核心,最有价值的地方其实就两点:
IoC:Inverse of Control,控制反转。
AOP:Aspect Orentied Programming,面向切面编程。
什么是IoC?我第一次接触IoC时,我是一脸蒙圈的,我问了隔壁搞了一年多Java的哥们,什么是IoC,他噼里啪啦和我说了一通,什么解耦,依赖注入,Bean。完了我说,这个IoC有什么关系。
IoC是什么?如果要好理解,先从IoC这三个字母说起,Inverse of Control,控制反转。
那就要解释什么是控制反转了。我们来看下面这两段代码:
MysqlDB是Mysql数据库操作实现类
public class UserRepository {
private MysqlDB db;
public void insert(User user) {
db.insert(user);
}
}
IDB是一个接口,可能有Mysql,Oracle,Mondo等实现。
public class UserRepository {
private IDB db;
public void insert(User user) {
db.insert(user);
}
}
这两段代码的唯一区别就是一个使用了MysqlDB,一个使用了IDB。他们都是UserRepository的依赖。UserRepository依赖他们来实现数据库操作。
使用MysqlDB的代码中,UserRepository自己控制它依赖的组件是什么,是很明确的MysqlDB。注意这里出现了控制的字眼哦。
使用IDB的代码中,UserRepository自己不能控制它依赖的组件是什么,可能是MysqlDB,可能是OracleDB,也可能是MondoDB。
本来UserRepository依赖谁是它自己控制的,这也是绝大部分其他语言和Java代码使用的方式。但是使用IDB的代码中,控制权不在UserRepository自己这里,而是有外部来控制的。这个外部可能是其他类,可能是其他框架,总之,不是UserRepository自己。这就是控制反转。
所以,控制反转说的主要是类之间的依赖关系。当一个类将它依赖的一个具体类,变成一个抽象的接口时,这是控制反转的表现形式。那控制反转有什么好处呢?
还是以上面的例子举例:UserRepository真实想要的功能其实是“保存数据”,而不是“保存数据到Mysql”。可能今天使用Mysql,但某天发现数据量大了,需要迁移到Oracle获取更大的吞吐量,也可能使用Nosql的Mongo实现更灵活的弱Schema存储。如果使用具体的MysqlDB,代码就和MysqlDB耦合了,一旦更换了数据库,所有依赖MysqlDB的地方的代码都需要改。而采用IDB的方式,代码是不用修改的。是解耦的。而且使用接口还有个好处是,我们可以基于抽象的接口生成动态代理,来实现更高级的功能。也就是动态给Java类添加功能。
关于IoC下面的图解释的比较清楚:
图一中四个齿轮是互相啮合在一起,在软件的角度上,就是类互相耦合。
图二中四个齿轮不是啮合在一起的,而是通过IoC容器连接在一起,是解耦的。
还记得前面引用的那句话吗?
计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决IoC也是通过引入了额外的IoC容器来解决类之间的耦合问题。
图一
图二
AOPAOP:面向切面编程。我们可以看上面的图。向下的三个箭头是3个业务逻辑处理工程。他们处理了各自不同的逻辑。同时这3个业务处理都有打印日志和安全的问题。那么我们可以把这些通用的逻辑提取到一个公共的地方。就是AOP中的切面。日志和安全是两个切面,这两个切面是可以横切多个业务处理逻辑的。
使用AOP可以将一些公共的代码从各个业务类中剥离到切面中,提高系统的可维护性和扩展性。
Java进阶有了上面这些基础之后,基本算是Java入门了,开发基本的功能是可以了。接下来是一些进阶的推荐:
Java多线程编程。
Netty网络编程。
JVM调优,排查问题。
Spring MVC,Spring Boot。
RPC框架使用:Dubbo,Spring Cloud,gRPC。
消息中间件的使用。可以看看RocketMQ源码来学习。
容器:Docker,k8s等。(这个不是Java特有的,但是未来的趋势,值得学习)
以上就是我关于学习Java的一些思路吧,更多是从我自己的真实经历出发,希望能给大家一些参考吧。能力有限,有错误之处,还请大家帮着指正。
2. Java程序员学习的方向是什么?
我就是毕业后开始学习java,一步一步上来的,目前开始弄python人工智能方面。
第一步,认为是学好java的基础知识,包括语法、面向对象理念等。
第二步,了解jvm相关,并以此切入计算机组成原理。
第三步,开始学习一些框架,比如netty、spring系列等,并以此读些源代码(包括jdk中一些源代码)。
第四步,学习一些项目中需要用到的内容,比如数据库、消息传输、tomcat容器等,他们的安装、使用以及原理。
第五步,具体项目的开发,目前用的较多的是springcloud微服务框架,自己动手从头开始搭建。简单crud做起,逐渐形成一个项目。
第六步,linux及容器的一些部署方式,将你的项目部署到容器中运行。
以上完成,基本上一个优秀的资深程序员了。
我的项目中,因为要嵌入目前热门的AI技术,因此使用了python的numpy、pandas、tensorflow等技术,使用flask提供接口服务,目前也在深入学习中。
以上,是我的学习路径。 不过我以前一大段时间是做应用运维的[捂脸]
3. 如何学好java?
主要概括学习路线及方法通过优秀的 github 学习库学习Java工程师必看书籍学习路线以及方法推荐
对于学习路线的话,我说一条我比较推荐的,我相信照着这条学习路线来你的学习效率会非常高。
掌握 Java 基础知识:可以看《Think in Java》、《Java 核心技术卷1》、《Head First Java》这几本书,一定不要忽略书籍,书籍的阅读过程会变成一种思考过程,能够锻炼理解力和定力,当然你也可以边看视频边看书学习(推荐黑马或者尚硅谷的视频)。记住初学者一定要跟着视频一起写,哪怕不懂也要写,只有写了记录才能总结,最好代码分章节提交到 github。掌握多线程的简单实用(推荐《Java并发编程之美》)。想进入高级岗位,就一定要持续的提升自己,我推荐在学习完Java基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷Leetcode,这是一个艰难的过程,但是会让自己更加完美。学习前端基础(HTML、CSS、JavaScript),当然BootStrap、VUE、react、angular等等前端框架你也可以了解一下,如果不感兴趣建议放弃,因为人的精力有限,需要放到自己更喜欢的方向。学习MySQL 的基本使用,基本的增删改查,SQL命令,索引、存储过程,而且最好看看mysq 原理,这个很重要,只有知道了底层原理比如 mysql 书籍存储结构,才能更好的理解索引,如何优化等。 建议学习J2ee框架之前可以提前花半天时间学习一下Maven的使用。(到处找Jar包,下载Jar包是真的麻烦费事,使用Maven可以为你省很多事情)学习Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis 等框架的使用,(可选)熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下SpringBoot。我也遇到很多公司对于应届生直接上手SpringBoot,不过我还是推荐你把Spring、SpringMVC好好学一下。学习Linux的基本使用(常见命令、基本概念)学习Dubbo、Zookeeper、常见的消息队列(比如ActiveMq、RabbitMQ)的使用。可以学习一下NIO和Netty,这样简历上也可以多点东西。推荐java 学习仓库https://github.com/Snailclimb/JavaGuide
这个仓库现在 star 78.3K ,涵盖了非常丰富的 java 知识体系,可以不用一下子全看,从基础的开始,随着自己的水平不断提升,经验更加丰富以后,可以接触分布式、JVM、算法之类的。
但是同时,还是要有自己的学习笔记。不断的整理查漏补缺。这个习惯非常有用,能够让自己不断提升的同时,有其他意外惊喜,比如交到同行的朋友,这些都是隐形资源。
书籍推荐《Head First Java》 : 可以说是我的 Java 启蒙书籍了,特别适合新手读当然也适合我们用来温故 Java 知识点。《Java 核心技术卷 1+卷 2》: 很棒的两本书,建议有点 Java 基础之后再读,介绍的还是比较深入的,非常推荐。这两本书我一般也会用来巩固知识点或者当做工具书参考,是两本适合放在自己身边的好书。《Java 编程思想 (第 4 版)》(推荐,豆瓣评分 9.1,3.2K+人评价):大部分人称之为Java领域的圣经,但我不推荐初学者阅读,有点劝退的味道。稍微有点基础后阅读更好。《JAVA 网络编程 第 4 版》: 可以系统的学习一下网络的一些概念以及网络编程在 Java 中的使用。《Java性能权威指南》:O'Reilly 家族书,性能调优的入门书,我个人觉得性能调优是每个 Java 从业者必备知识,这本书的缺点就是太老了,但是这本书可以作为一个实战书,尤其是 JVM 调优!不适合初学者。前置书籍:《深入理解 Java 虚拟机》并发《Java 并发编程之美》 :我觉得这本书还是非常适合我们用来学习 Java 多线程的。这本书的讲解非常通俗易懂,作者从并发编程基础到实战都是信手拈来。 另外,这本书的作者加多自身也会经常在网上发布各种技术文章。我觉得这本书也是加多大佬这么多年在多线程领域的沉淀所得的结果吧!他书中的内容基本都是结合代码讲解,非常有说服力!《实战 Java 高并发程序设计》: 这个是我第二本要推荐的书籍,比较适合作为多线程入门/进阶书籍来看。这本书内容同样是理论结合实战,对于每个知识点的讲解也比较通俗易懂,整体结构也比较清。《深入浅出 Java 多线程》:这本书是几位大厂(如阿里)的大佬开源的,Github 地址:https://github.com/RedSpider1/concurrent几位作者为了写好《深入浅出 Java 多线程》这本书阅读了大量的 Java 多线程方面的书籍和博客,然后再加上他们的经验总结、Demo 实例、源码解析,最终才形成了这本书。这本书的质量也是非常过硬!给作者们点个赞!这本书有统一的排版规则和语言风格、清晰的表达方式和逻辑。并且每篇文章初稿写完后,作者们就会互相审校,合并到主分支时所有成员会再次审校,最后再通篇修订了三遍。《Java 并发编程的艺术》 :这本书不是很适合作为 Java 多线程入门书籍,需要具备一定的 JVM 基础,有些东西讲的还是挺深入的。另外,就我自己阅读这本书的感觉来说,我觉得这本书的章节规划有点杂乱,但是,具体到某个知识点又很棒!这可能也和这本书由三名作者共同编写完成有关系吧!......JVM《深入理解 Java 虚拟机(第 3 版)》):必读!必读!必读!神书,建议多刷几篇。里面不光有丰富地JVM理论知识,还有JVM实战案例!必读!《实战 JAVA 虚拟机》:作为入门的了解 Java 虚拟机的知识还是不错的。Java8 新特性
《Java 8 实战》:面向 Java 8 的技能升级,包括 Lambdas、流和函数式编程特性。实战系列的一贯风格让自己快速上手应用起来。Java 8 支持的 Lambda 是精简表达在语法上提供的支持。Java 8 提供了 Stream,学习和使用可以建立流式编程的认知。《Java 8 编程参考官方教程》:建议当做工具书来用!哪里不会翻哪里!代码优化《重构_改善既有代码的设计》:豆瓣 9.1 分,重构书籍的开山鼻祖。《Effective java 》:本书介绍了在 Java 编程中很多极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。这篇文章能够非常实际地帮助你写出更加清晰、健壮和高效的代码。本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。《代码整洁之道》:虽然是用 Java 语言作为例子,全篇都是在阐述 Java 面向对象的思想,但是其中大部分内容其它语言也能应用到。阿里巴巴 Java 开发手册 :https://github.com/alibaba/p3cGoogle Java 编程风格指南: http://www.hawstein.com/posts/google-java-style.html网络《图解 HTTP》: 讲漫画一样的讲 HTTP,很有意思,不会觉得枯燥,大概也涵盖也 HTTP 常见的知识点。因为篇幅问题,内容可能不太全面。不过,如果不是专门做网络方向研究的小伙伴想研究 HTTP 相关知识的话,读这本书的话应该来说就差不多了。《HTTP 权威指南》:如果要全面了解 HTTP 非此书不可!操作系统《鸟哥的 Linux 私房菜》:本书是最具知名度的 Linux 入门书《鸟哥的 Linux 私房菜基础学习篇》的最新版,全面而详细地介绍了 Linux 操作系统。数据结构《大话数据结构》:入门类型的书籍,读起来比较浅显易懂,适合没有数据结构基础或者说数据结构没学好的小伙伴用来入门数据结构。算法入门《我的第一本算法书》 (豆瓣评分 7.1,0.2K+人评价) 一本不那么“专业”的算法书籍。和下面两本推荐的算法书籍都是比较通俗易懂,“不那么深入”的算法书籍。我个人非常推荐,配图和讲解都非常不错!《算法图解》(豆瓣评分 8.4,1.5K+人评价) :入门类型的书籍,读起来比较浅显易懂,非常适合没有算法基础或者说算法没学好的小伙伴用来入门。示例丰富,图文并茂,以让人容易理解的方式阐释了算法.读起来比较快,内容不枯燥!《啊哈!算法》 (豆瓣评分 7.7,0.5K+人评价) :和《算法图解》类似的算法趣味入门书籍。经典下面这些书籍都是经典中的经典,但是阅读起来难度也比较大,不做太多阐述,神书就完事了!推荐先看 《算法》,然后再选下面的书籍进行进一步阅读。不需要都看,找一本好好看或者找某本书的某一个章节知识点好好看。
《算法 第四版》(豆瓣评分 9.3,0.4K+人评价): 我在大二的时候被我们的一个老师强烈安利过!自己也在当时购买了一本放在宿舍,到离开大学的时候自己大概看了一半多一点。因为内容实在太多了!另外,这本书还提供了详细的Java代码,非常适合学习 Java 的朋友来看,可以说是 Java 程序员的必备书籍之一了。再来介绍一下这本书籍吧!这本书籍算的上是算法领域经典的参考书,全面介绍了关于算法和数据结构的必备知识,并特别针对排序、搜索、图处理和字符串处理进行了论述。编程珠玑(豆瓣评分 9.1,2K+人评价) :经典名著,被无数读者强烈推荐的书籍,几乎是顶级程序员必看的书籍之一了。这本书的作者也非常厉害,Java之父 James Gosling 就是他的学生。很多人都说这本书不是教你具体的算法,而是教你一种编程的思考方式。这种思考方式不仅仅在编程领域适用,在其他同样适用。《算法设计手册》(豆瓣评分9.1 , 45人评价) :被 Teach Yourself Computer Science 强烈推荐的一本算法书籍。《算法导论》 (豆瓣评分 9.2,0.4K+人评价)《计算机程序设计艺术(第1卷)》(豆瓣评分 9.4,0.4K+人评价)面试**《剑指Offer》(豆瓣评分 8.3,0.7K+人评价)**这本面试宝典上面涵盖了很多经典的算法面试题,如果你要准备大厂面试的话一定不要错过这本书。《剑指Offer》 对应的算法编程题部分的开源项目解析:CodingInterviews程序员代码面试指南:IT名企算法与数据结构题目最优解(第2版) (豆瓣评分 8.7,0.2K+人评价) :题目相比于《剑指 offer》 来说要难很多,题目涵盖面相比于《剑指 offer》也更加全面。全书一共有将近300道真实出现过的经典代码面试题。编程之美(豆瓣评分 8.4,3K+人评价):这本书收集了约60道算法和程序设计题目,这些题目大部分在近年的笔试、面试中出现过,或者是被微软员工热烈讨论过。作者试图从书中各种有趣的问题出发,引导读者发现问题,分析问题,解决问题,寻找更优的解法。数据库MySQL:
《高性能 MySQL》:这本书不用多说了把!MySQL 领域的经典之作,拥有广泛的影响力。不但适合数据库管理员(dba)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获。如果你的时间不够的话,第5章关于索引的内容和第6章关于查询的内容是必读的!《MySQL 技术内幕-InnoDB 存储引擎》(推荐,豆瓣评分 8.7):了解 InnoDB 存储引擎底层原理必备的一本书,比较深入。Redis:
《Redis 实战》:如果你想了解 Redis 的一些概念性知识的话,这本书真的非常不错。《Redis 设计与实现》:也还行吧!系统设计设计模式
《设计模式 : 可复用面向对象软件的基础》 :设计模式的经典!《Head First 设计模式(中文版)》 :相当赞的一本设计模式入门书籍。用实际的编程案例讲解算法设计中会遇到的各种问题和需求变更(对的,连需求变更都考虑到了!),并以此逐步推导出良好的设计模式解决办法。《大话设计模式》 :本书通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解GOF(即《设计模式 : 可复用面向对象软件的基础》这本书)),但是不像《设计模式 : 可复用面向对象软件的基础》难懂。但是设计模式只看书是不够的,还是需要在实际项目中运用,在实战中体会。常用框架Spring/SpringBoot
《Spring 实战(第 4 版)》 :不建议当做入门书籍读,入门的话可以找点国人的书或者视频看。这本定位就相当于是关于 Spring 的新华字典,只有一些基本概念的介绍和示例,涵盖了 Spring 的各个方面,但都不够深入。就像作者在最后一页写的那样:“学习 Spring,这才刚刚开始”。《Spring源码深度解析 第2版》 :读Spring源码必备的一本书籍。市面上关于Spring源码分析的书籍太少了。《Spring 5高级编程(第5版)》 :推荐阅读,对于Spring5的新特性介绍的很好!不过内容比较多,可以作为工具书参考。《精通Spring4.x企业应用开发实战》 :通过实战讲解,比较适合作为Spring入门书籍来看。《Spring入门经典》 :适合入门,也有很多示例!《Spring Boot实战派》 :这本书使用的Spring Boot 2.0+的版本,还算比较新。整本书采用“知识点+实例”的形式编写。本书通过“58个基于知识的实例+2个综合性的项目”,深入地讲解Spring Boot的技术原理、知识点和具体应用;把晦涩难懂的理论用实例展现出来,使得读者对知识的理解变得非常容易,同时也立即学会如何使用它。说实话,我还是比较推荐这本书的。《Spring Boot编程思想(核心篇)》 :SpringBoot深入书,不适合初学者。书尤其的厚,这本书的缺点是书的很多知识点的讲解过于啰嗦和拖沓,优点是书中对SpringBoot内部原理讲解很清楚。Netty
《Netty进阶之路:跟着案例学Netty》 : 这本书的优点是有不少实际的案例的讲解,通过案例来学习是很不错的!《Netty 4.x 用户指南》 :《Netty 4.x 用户指南》中文翻译(包含了官方文档以及其他文章)。《Netty 入门与实战:仿写微信 IM 即时通讯系统》 :基于 Netty 框架实现 IM 核心系统,带你深入学习 Netty 网络编程核心知识《Netty 实战》 :可以作为工具书参考!分布式
《从 Paxos 到 Zookeeper》:简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了 Paxos 和 ZAB 协议。同时,本书深入介绍了分布式一致性问题的工业解决方案——ZooKeeper,并着重向读者展示这一分布式协调框架的使用方法、内部实现及运维技巧,旨在帮助读者全面了解 ZooKeeper,并更好地使用和运维 ZooKeeper。《RabbitMQ 实战指南》:《RabbitMQ 实战指南》从消息中间件的概念和 RabbitMQ 的历史切入,主要阐述 RabbitMQ 的安装、使用、配置、管理、运维、原理、扩展等方面的细节。如果你想浅尝 RabbitMQ 的使用,这本书是你最好的选择;如果你想深入 RabbitMQ 的原理,这本书也是你最好的选择;总之,如果你想玩转 RabbitMQ,这本书一定是最值得看的书之一《Spring Cloud 微服务实战》:从时下流行的微服务架构概念出发,详细介绍了 Spring Cloud 针对微服务架构中几大核心要素的解决方案和基础组件。对于各个组件的介绍,《Spring Cloud 微服务实战》主要以示例与源码结合的方式来帮助读者更好地理解这些组件的使用方法以及运行原理。同时,在介绍的过程中,还包含了作者在实践中所遇到的一些问题和解决思路,可供读者在实践中作为参考。网站架构
《大型网站技术架构:核心原理与案例分析+李智慧》:这本书我读过,基本不需要你有什么基础啊~读起来特别轻松,但是却可以学到很多东西,非常推荐了。另外我写过这本书的思维导图,关注我的微信公众号:“Java 面试通关手册”回复“大型网站技术架构”即可领取思维导图。《亿级流量网站架构核心技术》:一书总结并梳理了亿级流量网站高可用和高并发原则,通过实例详细介绍了如何落地这些原则。本书分为四部分:概述、高可用原则、高并发原则、案例实战。从负载均衡、限流、降级、隔离、超时与重试、回滚机制、压测与预案、缓存、池化、异步化、扩容、队列等多方面详细介绍了亿级流量网站的架构核心技术,让读者看后能快速运用到实践项目中。《从零开始学架构(李运华)》 : 这本书对应的有一个极客时间的专栏—《从零开始学架构》,里面的很多内容都是这个专栏里面的,两者买其一就可以了。我看了很小一部分,内容挺全面的,是一本真正在讲如何做架构的书籍。《架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》 :非常喜欢的一本书,对一些知识点比如消息队列、API网管讲解的很好,通俗易懂。底层
《深入剖析 Tomcat》:本书深入剖析 Tomcat 4 和 Tomcat 5 中的每个组件,并揭示其内部工作原理。通过学习本书,你将可以自行开发 Tomcat 组件,或者扩展已有的组件。 读完这本书,基本可以摆脱背诵面试题的尴尬。《深入理解 Nginx(第 2 版)》:作者讲的非常细致,注释都写的都很工整,对于 Nginx 的开发人员非常有帮助。优点是细致,缺点是过于细致,到处都是代码片段,缺少一些抽象。4. 怎么才能学好java?
给您推荐Java学习路线图,是菊厂童鞋做开发经常使用的一些技术和工具,希望能帮助到您~
前端部分:1)HTML:网页的核心语言,构成网页的基础2)CSS:使网页更加丰富多彩灿烂的利器3)JavaScript:使网页动起来的根本,加强了网页和用户之间的交互4)HTML DOM:换一种更加形象化的角度来看待网页,让我们更加方便的控制网页5)HTML BOM:与浏览器交互不可或缺的工具6)JavaScript库,主要是:jQuery及其插件、YUI及其插件,使编写网页更加的方便快捷和健壮的强大工具7)AJAX:异步提交,增强了用户使用网页的良好交互体验8)JSON:比 XML更小、更快,更易解析的数据传输工具9)FLEX:提供丰富多彩的动画效果10)普元工作流:更加清晰明了的帮助用户处理业务流程上面的工作11)JSP:Servlet的展示层,使网页逻辑与网页设计的显示分离12)JSTL:加强和简化了JSP页面的开发13)EL:使JSP页面写起来更加简单后台部分:1)JAVA语言编程基础部分:内容丰富是Java知识体系结构的核心和基础2)JDBC:提供了一种基准,据此可以构建更高级的工具和接口,使Java开发人员能够编写数据库应用程序3)JavaMail:用于电子邮件的相关的编程工作4)JUnit:单元测试,整个变成工作测试的地位始终非常重要5)Log4j:使我们能够更加细致地控制日志的生成过程6)Servlet:JavaWeb的核心7)Struts2:JavaWeb编程中明星级的框架,优点多功能强使编程工作更简单,主要用于控制跳转8)Spring:JavaWeb编程中明星级的框架,同样优点多功能强使编程工作更简单,主要用于管理对象9)iBatis:JavaWeb编程中明星级的框架,同样也是优点多功能强使编程工作更简单,主要用于程序和数据库之间的交互10)SQL:与数据库交互式编程的必备工具版本控制:1)SVN:版本控制,方便团队协同工作WEB服务器:1)Tomcat:优秀免费的中小型WEB服务器2)Weblogic:功能很强大的WEB服务器开发工具:1)Eclipse:开源强大的Java编程工具2)MyEclipse:在eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境数据库:1)Oracle:数据库业界老大,这个常用一点当然,也仅仅是常用一些常用的功能而已,需要加强2)MySQL:最好的关系型数据库之一3)SqlServer:最好的关系型数据库之一数据库客户端:1)Toad:非常棒的数据库客户端软件操作系统:1)Windows2)Linux远程登录的会话工具:1)SSH:一直在用,非常不错其他:各种种类和版本的浏览器(推荐使用FireFox)、office办公软件系列、各种文本编辑器(推荐Sublime)、各种阅读器等等下面是从网上找的三幅图片,比较好的说明了作为一个Java程序员的学习路线图,这里作为一种自我提醒的工具,不时看看,并且会赶紧修补自己的知识树!1、Java的知识体系结构2、JavaWeb开发的基本学习路线图3、JavaWeb开发的成长路线图第一部分:Java高级学习课程大纲
1、工程化专题我们的工程化专题有五大内容:Maven、Nexus 、jenkins、代码审查 、Git/SVN一共耗时一个月2、源码分析专题源码分析有三大内容: spring的源码分析,里面包括FactoryBean和MVC和事务处理与Spring源码中设计模式分析;持久层 ;企业级开发前瞻,一共耗时2个月3、高并发与高性能高并发与高性能有四大内容:并发编程, 里面又包含有线程安全和NIO和AIO 。异步通信,里面包含有本地队列和消息中间件。分布式协调技术,里面包含有Zookeeper和服务锁 。NoSqI: 里面包含有 MongoDB和Redis和Memcached 。一共耗时2个月4、高可用性与可扩展高可用性与可扩展有两大内容: 分布式架构介绍,里面有导流技术和服务设计和存储设计。服务调用,里面包含有WebService和Dubbo。 一共耗时2个月5、性能优化性能优化有四大内容:优化技巧,如何寻找性能瓶颈。JVM优化。数据库优化。服务器优化。一共耗时2个月上面这五大专题,是几位工作经验十多年的大牛,根据自己往年的工作经验与经历,在根据现在科技发展的实际情况,历经几个月的时间编写而成,换句话说,上面的五大专题,也就是他们这十几年精华总结,现在,您只要按照上面的课题学习,只需要花费掉七个月多的时间,就能够学会与理解几位大牛十多年总结出来的精华。学完这些,还怕公司老总不给涨工资和升职么?第二部分:阶段性的学习
学什么东西都一样,小宅相信大家也是一样,在学东西的时候,总会安排好自己阶段性的学习,这样才能有效的提升自己与有效的理解和认知所学的知识。合理安排好,才能起到事半功倍的效果。阶段一:阶段二:阶段三:阶段四:阶段五:5. 新手如何学习Java?
作为一名从业多年的Java程序员,同时也出版过Java编程书籍,所以我来回答一下这个问题。
对于新手来说,要想学好Java,应该注重以下几个方面:
第一:正确理解Java的各种“抽象”。学习Java就是学习各种“抽象”,包括类、接口和抽象类等,不同层次的抽象意味着不同的作用。对于初学者来说,要想正确的掌握各种抽象,应该从基本的Java编程过程开始,包括类的设计、对象的创建和方法的调用,另外要重点学习一下多态的使用。多做实验是理解各种抽象的好办法,因为实验往往能够为初学者建立起概念的“画面”,从而辅助理解。
第二:注重知识结构的全面性。学习Java开发的过程中要系统地学习一下操作系统、计算机网络、数据结构、算法设计和数据库知识,这些计算机基础内容对于学习Java具有重要的意义,如果想在Java开发领域走得更远,一定要注重基础知识的学习。在学习期间建议使用Linux操作系统开展实验,未来很多Java开发都离不开Linux操作系统,比如大数据应用开发、物联网平台开发等。
第三:确定一个主攻方向。Java目前主要的应用领域包括Web开发、Android开发和大数据开发,不少网络服务也需要采用Java完成后端功能的编写,另外Java也是研发级程序员的常见工具,涉及到一些平台和容器的开发,比如大数据平台Hadoop就是采用Java语言编写的。对于Java初学者来说,要根据自身的知识结构和兴趣爱好,选择一个适合自己的主攻方向。
最后,在当前的大数据、云计算时代背景下,Java全栈程序员的岗位需求量比较大,所以学习Java全栈开发也是一个不错的选择。Java全栈开发需要重视一下前端开发技术的学习,重点是JavaScript语言的学习。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言!
6. 新手java程序员如何进阶?
现在招聘市场最热门的还是Java岗位,毕竟每个项目都需要后端的支撑,而Java就是后端最热门的编程语言,而且Java的生态也非常完善。那么新手Java该如何进阶,从只会增删改查的码农变成优秀的工程师呢?
阅读常见类的源码
掌握并发编程
掌握常见的设计模式
使用Linux系统,知道操作系统的一些基本知识
对网络编程有一定了解,对后面的web开发很有帮助
掌握常见的开发工具
关注新的Java特性
对项目的架构先有一定了解,后面在进行深入
对数据结构和算法有一定了解
学会通过反编译工具进行排错
7. java编程好学吗?
对于任何一门语言都不能用好不好来讲,正所谓术业有专攻,不同语言针对不同方向。Java语言只能说相对于其他语言来说各方面更为均衡,某些方面更优秀,使用率高,适用范围广,所以才显得Java与其他语言相比更好,其实并不然,每一门语言都有自己的优势,并不是Java就一定是最好的,但是一定是用最广的。
本站涵盖的内容、图片、视频等数据系网络收集,部分未能与原作者取得联系。若涉及版权问题,请联系我们删除!联系邮箱:ynstorm@foxmail.com 谢谢支持!