Java学习路线图


=Start=

缘由:

制定学习计划,明确学习目标,提高学习效率

正文:

参考解答:
第一阶段 Java基础

基础语法
面向对象
常用类
集合
异常处理
IO
多线程
网络编程
反射
数据库(JDBC)
#《Java语言程序设计(基础篇)》/《Java核心技术》/《MySQL必知必会》#
#《Java编程思想》/《Effective Java》/《Java并发编程实战》#

第二阶段 Java Web

HTML/CSS/JavaScript/jQuery/Ajax/BootStrap/…
Servlet/JSP
Tomcat/Jetty
#《JavaScript DOM编程艺术》/《Head First HTML与CSS(第2版)》/《Head First Servlets & JSP》#

第三阶段 Java 框架

SpringMVC/MyBatis
Lucene/Solr

#《深入分析Java Web技术内幕》/《深入理解java虚拟机》/《How Tomcat Works》/《Struts2技术内幕》/《Spring技术内幕》#
#《大话设计模式》/《设计模式》#

第四阶段 项目实践

爬虫
CRM

大数据方向(网上找的一些资料以及我个人的使用经历,仅供参考……)

使用:Hadoop/Storm
深入:CS + Math(Statistics/…)


其它需要注意的事项:

编程的学习是贵在坚持,有了规划就应该一步一步的打牢基础,多实战,多Google,多思考,这样才会有进步,共勉。

参考链接:

=

=END=

,

《“Java学习路线图”》 有 30 条评论

  1. 魔鬼在细节中
    http://javatar.iteye.com/blog/1056664
    `
    根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节,
    可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记,
    在每一行代码中都考虑这些因素,是需要很大耐心的,
    大家经常说,魔鬼在细节中,确实如此。

    1. 防止空指针和下标越界
    2. 保证线程安全性和可见性
    3. 尽早失败和前置断言
    4. 分离可靠操作和不可靠操作
    5. 异常防御,但不忽略异常
    6. 缩小可变域和尽量final
    7. 降低修改时的误解性,不埋雷
    8. 提高代码的可测性
    `

  2. 2018年 阿里,百度,腾讯 等公司:对于Java开发者的招聘标准
    https://mp.weixin.qq.com/s/EwX1rdsClkg8yvRfm_35yQ
    `
    扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等
    具有扎实的Java编程基础,理解IO、多线程等基础框架
    熟练使用Linux系统的常用命令及shell有一定了解
    精通多线程编程,熟悉分布式,缓存,消息队列等机制;熟悉JVM,包括内存模型、类加载机制以及性能优化
    精通spring mvc、orm框架(ibatis或hibernate)、模板引擎(velocity)、关系型数据库设计及SQL
    具备良好的面向对象编程经验,深入理解OO、AOP思想,具有很强的分析设计能力,熟悉常用设计模式
    有大型分布式、高并发、高负载、高可用性系统设计和稳定性经验
    熟悉面向对象设计开发,熟悉各种常用设计模式,并有在具体的应用场景落地经验
    熟悉Spring、iBatis,等开源框架及消息,存储等常用中间件。 有通读过开源框架源码
    熟悉基于Oracle或者Mysql的设计和开发、Linux操作系统
    熟悉SOA,有平台化实施经验者,有大数据量、高并发系统和大型网站构建经验
    分布式系统应用架构设计与研发经验,精通Java EE、SOA、OSGI等相关技术
    对各种开源的框架如Spring、Hibernate等有深入的了解,对框架本身有过开发或重构者可优先考虑
    `

  3. JavaMail(2)——给多人发送、抄送
    http://willow-na.iteye.com/blog/1465028
    http://www.blogjava.net/kissyan4916/articles/279128.html
    https://stackoverflow.com/questions/13854037/send-mail-to-multiple-recipients-in-java
    `
    message.addRecipient(Message.RecipientType.CC, InternetAddress.parse(“[email protected]”));
    message.addRecipient(Message.RecipientType.CC, InternetAddress.parse(“[email protected]”));
    message.addRecipient(Message.RecipientType.CC, InternetAddress.parse(“[email protected]”));

    // 或

    message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(“[email protected],[email protected],[email protected]”));
    `

    JavaMail使用SMTP协议发送电子邮件
    http://outofmemory.cn/code-snippet/2423/JavaMail-usage-SMTP-protocol-send-dianziyoujian

  4. Java后端基础设施
    https://github.com/superhj1987/pragmatic-java-engineer/blob/master/book/chapter1-servertech/server-basic.md
    `
    1.1 统一请求入口-API网关
    1.2 业务应用和后端基础框架
    1.3 缓存、数据库、搜索引擎、消息队列
    1.4 文件存储
    1.5 统一认证中心
    1.6 单点登录系统
    1.7 统一配置中心
    1.8 服务治理框架
    1.9 统一调度中心
    1.10 统一日志服务
    1.11 数据基础设施
      数据高速公路
      离线数据分析
      实时数据分析
      数据即席分析
    1.12 故障监控
    `

  5. 全面理解Java内存模型
    https://blog.csdn.net/suifeng3051/article/details/52611310
    `
    Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。

    如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Java1.5版本对其进行了重构,现在的Java8仍沿用了Java1.5的版本。
    `
    深入理解Java内存模型(一)——基础
    http://www.infoq.com/cn/articles/java-memory-model-1

  6. 代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分?
    https://www.zhihu.com/question/58410621/answer/623496434
    `
    1.为什么需要一个好的代码结构
    2.什么样才是一个好的结构
    3.每一个分类代表什么含义
    4.是否适用于WEB,Android和IOS?
    5.进一步的学习的话,是要学习系统架构么?

    名词解释:
    DAO = Data Access Object = 数据存取对象,一般而言,都是用来和底层数据库通信,负责对数据库的增删改查
    Service = 服务,它的重点是在于提供一个服务
    Controller = 控制器,控制中心,所有的指令,调度都从这里发出去
    Util = 工具,常常用来描述和业务逻辑没有关系的数据处理
    Model = 模型,承载的作用就是数据的抽象
    `

  7. 觉得自己学不到东西了,为啥面试却总通不过? | 答水友问
    https://mp.weixin.qq.com/s/nfEtzXlTcKB3uwyQ_YWERQ
    `
    我们不妨问问自己:
    (1)基本功打牢了么?
    (2)工具熟练了么?
    (3)业务搞透了么?
    (4)架构合理么?
    (5)是公司技术最牛逼的人了么?

    别说工作中用的东西千篇一律,别说一直在做业务,别说没有技术含量,再问问自己:
    (1)监控到位么?
    (2)自动化程度如何?
    (3)做类似的业务,扩展性如何?
    (4)高可用保证了么?
    (5)知道系统瓶颈在哪里么?

    问过自己之后,或许你会发现,并不是自己没有提高,而是过于浮躁。不是没有东西学,而是内心的惰性,不愿意去发觉自己不懂的东西。

    真的,脚踏实地的,持续学习和提高吧!
    `

  8. Java 看什么书比较好? – 知乎
    https://www.zhihu.com/question/68487168/answer/803319170
    `
    《阿里毕玄:推荐给Java程序员的7本好书》

    我主要还是个Java程序员,所以进阶类型的书就推荐Java相关的。
    1. 《Java并发编程实战》
并发是高级语言里都需要掌握的稍微高级一些的技巧,这本书尽管是2012年的书了,但我觉得仍然是无比经典,绝对是必读书。
    2. 《Netty实战》
Netty是Java中通信框架实现的典范,非常值得通过这个来学习好语言中IO相关的知识,以及优秀的通信框架的写法。
    3. 《深入理解Java虚拟机(第2版)》
这本书我自己没看过,但听很多读过的同学的评价都是不错的,要真正的理解Java语言,就必须真正的去了解Java虚拟机,这样才能知道它的运行机制,例如Java编译、Java线程机制、Java内存管理等。
    4. 《Java性能优化权威指南》
这书是大神级人物写的,绝对值得一看,对排查问题、性能优化都有不小的帮助。
    5. 《Oracle JRockit: The Definitive Guide》
这书也是一本老书了,2010年写的,同样也是大神级人物写的,只有英文版,当年读这书对我学习JVM起到了很大的帮助,尽管Java同学主要用的是OpenJDK,而不是JRockit,而正因为有了对比,会对Java语言的实现有更深的理解。
    6. 《垃圾回收算法手册:自动内存管理的艺术》
中文版是2016年的,英文版是2011年的,这书对深刻的理解自动内存管理会有很大的帮助,毕竟其实自动内存管理这个领域的实现原理很多年是没有太大改变的,但实现的细节上有了很多的优化。
    7. 《性能之巅:洞悉系统、企业与云计算》
这书放在自己的想读列表里很久了,看评价应该是不错的,之前也说过,对于编程进阶的能力而言,查问题的能力是非常重要的一方面,这书应该有帮助,看过的同学也欢迎回复评价下。
    还有很多书,先就推荐这些了,不过发现如果是论编程进阶相关的书,看起来还真有点缺,大部分书都是多年前写的。

    系统设计相关
    1. 《架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)》
这书没看过,不过英文版我记得有点印象,评价好像不错的,欢迎看过的同学来说说。
    2. 《大型网站系统与Java中间件开发实践》
老伙伴华黎几年前写的书,对于开发大型的Web系统的同学而言是很值得学习的。
    3. 《SRE:Google运维解密》
理论上这不算系统设计的书,但运维其实是系统设计中很重要的要考虑的环节,我以前见过有些架构师设计的系统到上线的时候才发现少考虑了东西,导致上线没法上,我自己其实也干过这样的书,所以对于架构师而言,通过读这些书来扩充视野是非常重要的。
    系统设计相关的书写的好的还真是有点少,当然也有原因是我看这方面的书很少。

    其他
    1. 《智能时代》吴军
很值得推荐,看这书能更充分的感受到智能时代带来的冲击,例如智能+工业可能会发生什么。
    看这些类型的书对自己在技术方向的判断上是能有不错的帮助的。
    1. 《人类简史》
很多地方都在推荐,对我来说是看了后才更加明白了人类发展,例如人类的协同演进。
    2. 《大学之路》 吴军
可能很多人都觉得这书是在讲怎么选美国的大学,以及怎么考,但看了后我觉得最值得推荐的是看这书才明白了高等教育的两个主流理念,以及美国、英国这些大学是怎么建设的,为什么和国内的高等教育会不同,强烈推荐。
    3. 《鞋狗》
看Nike的创始人是怎么把Nike做起来的,挺有意思的,可能是也很对胃口吧,兴趣和专业,是能做起来的关键。
    杂书其实可以推荐的还真很多,不过也就这么点时间,还是不写太多了。

    大家有什么值得推荐的书,也欢迎回复。

    作者:毕玄
    文章来源:微信公众号HelloJava
    `

  9. 【技术干货】如何设计TinyURL
    https://mp.weixin.qq.com/s/MJTASuSx72hKXNOQcsSYWw

    经典系统设计面试题解析:如何设计TinyURL(最终篇)
    https://mp.weixin.qq.com/s/Jo9UM9XQXHbHO-4j3HQvCA
    https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR
    `
    1. Why do we need URL shortening?
    2. Requirements and Goals of the System
    3. Capacity Estimation and Constraints
    4. System APIs
    5. Database Design
    6. Basic System Design and Algorithm
    a. Encoding actual URL
    b. Generating keys offline
    7. Data Partitioning and Replication
    8. Cache
    9. Load Balancer (LB)
    10. Purging or DB cleanup
    11. Telemetry
    12. Security and Permissions
    `

  10. 每天学自学 3~4 小时 java ,一年后能到什么程度?
    https://www.zhihu.com/question/449001544/answer/2304855581
    `
    自学,不参与真实项目,很多东西你是没机会体验到的,也就很难有机会借此获得提高,成长受限。

    ====

    我可以这样说,哪怕你每天学8个小时,一年后还在学,没去工作,虽然可能你掌握了很多java技能,但不想办法通过做项目变现,这一年你属于白学。
    为什么这样说呢?

    1 学习java的模式和工作中用Java的方式截然不同。
    2 这就导致了通过自学掌握的java技能和项目里用到的Java技能完全不同。
    3 更何况,项目里用到的很多java技术或项目级经验,通过自学没法学到,或很难学好。这就就不说分布式组件这种平时自学甚至连环境都搭不好的技术,还是拿最基础的java集合举例。

    所以如果仅靠自学,哪怕你通过视频和各种资料完成了各种所谓学习路线,可能也就堆砌些api的用法,说穿了可能也就通过运行一些好看的代码来自欺欺人,真的要达到能干活的程度,基本不大可能,甚至估计连找工作面试的资格都没。那一般是怎么通过自学找到Java的活呢?

    1 第一周,搭建jdk,idea环境,mysql数据库环境。
    2 第二周到第一个月,运行书里的代码,熟悉Java核心技术和jdbc,入门Java可以看这本书。
    3 第二个月,入门spring boot,关键掌握通过该框架+JPA做增删改查业务的能力,这方面可以用我出版的书。
    `

  11. 初级Java程序员如何快速提升自己的能力(真心求教)?
    https://www.zhihu.com/question/38082180/answer/2302260486
    `
    在讲自学Java的方法和路径前,首先明确如下的观点。

    1 学Java的唯一目标是找工作,所以只需要学到能帮你找到工作的最低限度。而本文给出的学习路径会让你只学到这个最低限度。至于之上的其它Java技能,等你找到工作后在项目中学,这比你自学的效率不知道要高多少。

    2 找工作时,面试官只根据简历来筛选候选人,只根据面试来考核候选人的技能。一定不是根据候选人看了多少书运行通多少个项目来判断候选人的能力。所以不仅要学好Java,还要写好简历,更要掌握相关面试技巧。

    3 学习Java技能,一定得分两个步骤,第一个步骤是入行,找到并从事第一份java工作,在此基础上再考虑提升的事情。在没入行的阶段,可以只学能帮你找到第一份工作的技能,这样一方面能最大程度上压缩你的学习时间,从而不会让你走过多的弯路,另一方面,一些高级的Java技能,比如数据库调优或分布式技能,不仅面试不会问,而且这些技能一定只能在项目中通过实际场景学,自学未必能学好。说了那么多其实想表达的意思是:在没入行阶段,别拔苗助长,先只学能帮你找到工作的技能。其实如果能在短时间(比如2,3个月)内学好这些技能,也是一个很大的挑战。

    随后再讲自学Java的路线,可以分Java核心(Java Core),数据库和Spring Boot方向来学。

    总结:

    1 自学java一定要以找工作为目标。因为衡量学习成败的标准不是运行通多少项目,掌握了多少技能点,只能是“是否找到Java相关工作”
    2 本文不仅讲述了自学Java的路线,而且还讲述了写简历和面试的相关技巧。这些技巧是我从辅导我朋友和学员的诸多案例中总结出来的,对大家多少会有些帮助。
    3 学习Java一定得分两步走,先入行再提升,在入行阶段一定别过多学习高深的技能。
    `

回复 a-z 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注