2018-09-12 Java Web学习路径

2018-09-12 Java Web学习路径_第1张图片
  • 来源于知乎live 学习Java,我建议这样做——E-臻
  • 本文是JavaWeb的学习路径。
  • Live内容以Java Web学习的脉络梳理为主,涵盖主线重要知识点。
  • Live也是以作者自己的学习路径整理而来,以实用为主。

本文规范:
1.章节标题: ## 1.Java基础
2.小节标题:#### 基础语法
3.内容: - 面向对象语言的三大特征:封装、继承、多态



1. Java基础

2018-09-12 Java Web学习路径_第2张图片

基础语法

  • 面向对象语言的三大特征:封装、继承、多态。

类、封装和继承

  • 学完基础语法、类与继承之后——一切皆对象。一切类皆继承自Object类,Object类是所有类的基类.Object类的11个基本方法。toString(),equals(),hashCode(),clone(),finalize()、getClass()、wait()(3个)、notify()、notifyAll()等
  • 需深入学习
  • 其中wait()、notify()、notifyAll()方法是多线程里面的,可以在后面多线程的时候再深入学习。
2018-09-12 Java Web学习路径_第3张图片

接口与多态

  • 多态经常被面试官问到
  • 接口
  • 面向接口编程
  • 常用的接口(见图片) serializable comparable
    List:
    Set:
    Map:
    Queue:
    Stack:
  • 这些接口的实现、使用方法
    2018-09-12 Java Web学习路径_第4张图片

Java异常处理机制

  • 两种:错误(Error)异常(Excetion)两类
  • 异常链机制,一层一层catch,打到日志里
  • 异常很重要,必须去学习和理解
2018-09-12 Java Web学习路径_第5张图片

泛型

  • 需要深入理解,是Java基础
  • 看视频 or 看书:环境搭建的建议看视频,学习语法的时候建议看书。视频较多,鱼龙混杂。
  • 深入理解泛型的意义:本该用泛型解决的问题,如用继承解决了,会增强耦合。

枚举的使用

  • 枚举:一种特殊的类
  • 枚举和类的区别,类的对象有无数个,枚举的对象只有几个。
  • 枚举作为基础 需要好好掌握

Java的IO流 输入输出流

  • 四个基础的类
  • Object 对象的输入输出流
  • ByteArray 内存的输入流和输出流
  • File 文件的输入流和输出流
  • Piped 管道的输入流和输出流 多线程 流的输入输出

Java注解

  • 四种原注解@Targe @Retention @Documented @Inhented注解
  • 架构中很有用

反射

  • 一句话描述:通过Object的getClass()方法得到当前类的信息,从而对类进行操作

注解和反射,在Spring方法中经常能够看到。

Java网络 (可选)

  • 初学的时候可以跳过,实际过程中可以略过。按照业务中实际需求再说。

Java图形化(可选)

总结

  • 图片上是脉络梳理的重点。
  • 建议看书,快的话就1-2个月。
  • 推荐一本书《Java开发实战经典》(无基础的情况下,从编译环境开始搭)
    Import 入门不适合看 《Thinking in Java》、《Java编程思想》

2. Java Web开发/Java后台

2018-09-12 Java Web学习路径_第6张图片

2018-09-12 Java Web学习路径_第7张图片

前端脚本 HTML、js、velocity、xml

  • 前端:页面展示不是主要部分。了解(适度)HTML等

Servlet

  • 理解成网站开发。
  • 重点:servlet开发
  • Java Web开发的基础,一切框架的基础。
  • servlet的理解,需要深入研究和理解
  • 看一下J2EE的API文档,看一下servlet类的实现.其中四个方法:init()、destory()、service(req,res)、getServlet()
  • service()方法是精髓,中间的调用。

理解整个request的整个过程。
强调:不要上来就学spring、strust等框架,会浮于表面。而忽略了Servlet。Servlet是Java Web的基础。

  • 要使用servlet配合前端,写一个小程序来练手。
    2018-09-12 Java Web学习路径_第8张图片

MVC设计模式

  • 分层、架构。module-view-controller
  • 此为纯理论内容
  • 如何分层 该写什么 不该写什么
  • 开放接口:不是以浏览器形式,而是以调用接口的形式。
  • manage层:调用其他系统的接口。
  • 代码的好坏取决于两方面:1.规范 2.基础。
  • MVC是代码规范
2018-09-12 Java Web学习路径_第9张图片

Tomcat /Jetty -Web容器

  • 学会如何启动
  • 了解、会用即可

MySQL的使用

  • 数据库的掌握
  • 增删改查
  • 索引(聚集、非聚集)常问到怎么建立
  • 树是怎么管理的
  • 怎么建表 建树 建库 基础的部分,需要会
  • 事物、锁(略)

基础的理论都掌握后,就可以写一个基础的框架程序,来上手
推荐一个SSM框架

  1. Spring MVC Controler
  2. Sring 业务层
  3. myBatis 数据库的管理 ORM

用此上手写一个程序,GitHub等博客上很多,去研究,去会写。

总结

两个项目练手1.Servlet 2.ssm

推荐书籍

  • Java Web开发实战经典
  • 不推荐看《spring框架》、《spring action》不适合这一阶段看 书是好的。

Java基础和Java Web学完之后还要进阶。
这两个部分学完达到外包水平


3. Java多线程

线程入门

  • 入门的类:Thread()类、Runnable()接口
  • 常用的方法 run() 、join()、sleep()、start()、yield()方法,弄懂用法、功能
  • 内置锁 synchronized ,描述一个方法是同步方法

线程协作

  • wait()、notify()、notifyAll()

以上为Java 多线程的基础知识
下面是更高的进阶

Executor体系

  • callable接口
  • 里面的call()方法
  • call()跟run()的区别:一个有返回值(call),一个没有(run)

显示锁 Lock

  • ReentrantLock,可重用锁
  • 与 synchronized的区别。(lock-显示,synchronized隐式锁)

条件队列 condition

  • 和 wait()、notify()、notifyAll()的区别

多线程其实有两个体系

  1. 内置锁体系 synchronized:体系协作通过wait()、notify()、notifyAll()来实现,属于Object类。
  2. 外置锁体系 Executor:以lock为核心,常用ReentrantLock来实现锁的机制,条件队列是condition(地位相当于synchronized体系中的wait()、notify()、notifyAll()).

常用并发编程类

  • 常用的并发编程类:Semaphore信号量类、CyclicBarria ??栈的类、CountDownLatch门栓类、ThreadPoolExecutor线程池的类
  • volatile关键字:需要理解,volatile和synchronized的区别:
    前者保证线程的可见性,不保证原子性;后者既保证线程的可见性,又保证线程的原子性
  • volatile关键字的理解,体现了你多线程基础的功力,需要好好理解
体现功力的ThreadLocal类(线程本地变量)
  • 框架中经常使用的类,赋予了线程能够绑定一个线程本地变量的能力。
  • 在Java中使用ThreadLocal,可以定义一个变量,此变量跟线程绑定。
  • 例:每一个线程运行这个方法都会获得这样的一个量。功能强大,用处很多
  • 深入掌握

以上是Java多线程编程的主要内容,下面是线程安全

线程安全

  • 本质:多线程并发访问可变变量时,会遇到安全问题,就需要加锁
  • 加锁就有可能导致死锁。死锁的条件(四个),打破死锁(使四个条件有一个不满足)
  • 了解乐观锁、悲观锁,使用场景,实现方案
  • 常见的死锁的原因,四个因素如果同时具备了,就会导致死锁。
  • 推荐书籍


    2018-09-12 Java Web学习路径_第10张图片
  • Java工程师必读,进阶必读。

4. Java虚拟机

目的:了解我们写的代码在底层如何运行的,并不是为了去写虚拟机
掌握虚拟机常见的内容、体系,在底层如何运行的
包括5小节,掌握就可以了。不用再深入研究。(对编译原理有深入研究除外)

2018-09-12 Java Web学习路径_第11张图片

JVM体系架构:必须掌握内容

  • 内存的分区:方法区、堆、栈,用来做什么,每一个线程对于每一个区的使用(理论知识,理解)
  • 程序的.class类加载放到哪里,程序运行时哪些对象放到堆里,哪些对象放到栈里
  • 多线程开始时,对于栈的管理

类的生命周期:

  • .java文件 编译产生.class文件,运行class文件
  • class文件的生命周期,通过classLoader这个加载器加载到方法去,又是怎样运行起来的。【知道】
  • 生命周期中的重要方法:编译器生成的方法 (class-init)是用来干嘛的--单列模式中

对象的初始化:

  • 对象的生命管理, 类加载到方法区之后之后,怎么根据类,创造出对象,类的对象在内存中的组织,怎么找到对象所属的类,
  • 怎么根据一个已有的类,创建出一个对象,并且把对象放在堆区还是栈区,如何组织的

容量池:String、Integer---这两部分的源码【理解】

  • JVM对于自身性能的优化。
  • 面试常见问题:string常量池、Integer常量池怎么用。
  • 示例(图片)语句有什么不一样。
  • String常量池的范围:
  • Integer常量池的范围:-128~127,为什么要这样,为什么不是所有的Integer类型都放在常量池里面

垃圾回收机制

  • 体现JVM理论功底的时候。垃圾回收是怎么样的
  • 两种算法(引用计数、可达性分析算法(主流JVM)),各自的流程,为什么主流JVM用可达性分析算法而不是引用计数算法,来实现垃圾回收。

了解这5部分内容就可以了,对于JVM有一个基本常识性了解,对于写的代码在JVM中是怎么运行的,生命周期如何管理的,垃圾如何回收的,有一个充分的理论性的支撑。——了解代码是怎么运行的。

  • 推荐书籍《深入Java虚拟机》(机械工业出版社)文那斯

5. 设计模式

2018-09-12 Java Web学习路径_第12张图片

如果说JVM是程序员从Java应用向底层的拓展,那么设计模式就是从Java应用向上层的拓展,对于软件架构的设计模式。

外国人提出,常见的有23种
设计模式是进阶阶段需要掌握的知识
本质:软件的可复用性,常用场景的高度抽象
其中常见的设计模式 7种:

1.单例模式:5种

  • 最常见的模式。
  • 5种实现,对提升功力有很大的帮助

2.工厂模式:

  • 需要深入掌握

3.策略模式

  • 动态的多态。在接口的实现的时候选择不同的策略。

4.适配器模式

  • 把一个已有的不喜欢的接口类型转变成一个喜欢的接口类型.动态的多态。

5.模板模式

  • 对于一个代码的流程有高度的抽象,定义出一个流程,把流程写成模板,留一个钩子函数

6.回调模式

  • 框架设计当中经常使用。

7.建造者模式

  • 类有很多类的对象,创建一个类的时候使用,比set get方法更搞笑

没有推荐书籍,blog上搜一搜,解释很多


6.网站架构

2018-09-12 Java Web学习路径_第13张图片

大型网站的架构

  • 大型网站的架构,你需要知道演化过程:
  • 从PC到分布式系统、分布式缓存、分布式数据库、分布式的session管理 等大型网站的架构,主要在推荐的书里面。

网站常用优化手段

  • 面试经常问道:一台机器无法负载,要做分布式,怎么做负载均衡、分层、分割、缓存等,这就涉及到常用的优化手段。

分布式与无状态

  • 分布式一个特性:任何一个服务器上都不能有状态
  • session:不能保存在单态机器上,需要去理解。不能把web中有状态的量放进去

负载均衡

  • 是干什么的
  • 学一下常见的实现方式,lvs、http、dns等手段。

推荐书籍 《大型网站程序架构》李智慧
每一个Java程序员都应该看一下


7. spring框架

2018-09-12 Java Web学习路径_第14张图片

AOP如何实现

  • 面向切面编程,如何实现,——需要懂Java动态代理、反射。然后动手写一个AOP的小框架
  • 需要去学习如何使用,理解机理,如何实现。

IOC如何实现

  • 控制反转
  • spring如何是对Java Web中的一些bean、bean主键、service主键进行管理的---涉及到工厂模式

对象如何管理(控制反转如何管理)

  • 控制反转如何实现的
  • 里面有一个:单例、多线程。
  • JavaWeb程序就是一个单例多线程程序

事物如何实现

  • 事物指数据库事物
  • 比如,spring如何进行事务管理,怎么做到的,需要懂**模板方法、AOP、strictLocal **


8. 闲谈与问答

2018-09-12 Java Web学习路径_第15张图片

他准备了一个月
希望大家能不要踩坑
希望大家把Java学的扎实,不要浮躁

关于面对对象的练习 有没有什么小技巧 感觉不太理解

  • 抽象能力很重要,面向编程的6大规范
  • 规范清楚内部类 外部类 封装时要定义清楚。** 高内聚,低耦合**
  • 培养自己抽象的能力

推荐的书 Effictive Java
How tomcat works

你可能感兴趣的:(2018-09-12 Java Web学习路径)