2018-09-12 Java Web学习路径
- 来源于知乎live 学习Java,我建议这样做——E-臻
- 本文是JavaWeb的学习路径。
- Live内容以Java Web学习的脉络梳理为主,涵盖主线重要知识点。
- Live也是以作者自己的学习路径整理而来,以实用为主。
本文规范:
1.章节标题: ## 1.Java基础
2.小节标题:#### 基础语法
3.内容: - 面向对象语言的三大特征:封装、继承、多态
1. Java基础
基础语法
- 面向对象语言的三大特征:封装、继承、多态。
类、封装和继承
- 学完基础语法、类与继承之后——一切皆对象。一切类皆继承自Object类,Object类是所有类的基类.Object类的11个基本方法。toString(),equals(),hashCode(),clone(),finalize()、getClass()、wait()(3个)、notify()、notifyAll()等
- 需深入学习
- 其中wait()、notify()、notifyAll()方法是多线程里面的,可以在后面多线程的时候再深入学习。
接口与多态
- 多态经常被面试官问到
- 接口
- 面向接口编程
- 常用的接口(见图片) serializable comparable
List:
Set:
Map:
Queue:
Stack: -
这些接口的实现、使用方法
Java异常处理机制
- 两种:错误(Error)和异常(Excetion)两类
- 异常链机制,一层一层catch,打到日志里
- 异常很重要,必须去学习和理解
泛型
- 需要深入理解,是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后台
前端脚本 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配合前端,写一个小程序来练手。
MVC设计模式
- 分层、架构。module-view-controller
- 此为纯理论内容
- 如何分层 该写什么 不该写什么
- 开放接口:不是以浏览器形式,而是以调用接口的形式。
- manage层:调用其他系统的接口。
- 代码的好坏取决于两方面:1.规范 2.基础。
- MVC是代码规范
Tomcat /Jetty -Web容器
- 学会如何启动
- 了解、会用即可
MySQL的使用
- 数据库的掌握
- 增删改查
- 索引(聚集、非聚集)常问到怎么建立
- 树是怎么管理的
- 怎么建表 建树 建库 基础的部分,需要会
- 事物、锁(略)
基础的理论都掌握后,就可以写一个基础的框架程序,来上手
推荐一个SSM框架
- Spring MVC Controler
- Sring 业务层
- 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()的区别
多线程其实有两个体系
- 内置锁体系 synchronized:体系协作通过wait()、notify()、notifyAll()来实现,属于Object类。
- 外置锁体系 Executor:以lock为核心,常用ReentrantLock来实现锁的机制,条件队列是condition(地位相当于synchronized体系中的wait()、notify()、notifyAll()).
常用并发编程类
- 常用的并发编程类:Semaphore信号量类、CyclicBarria ??栈的类、CountDownLatch门栓类、ThreadPoolExecutor线程池的类
- volatile关键字:需要理解,volatile和synchronized的区别:
前者保证线程的可见性,不保证原子性;后者既保证线程的可见性,又保证线程的原子性 - volatile关键字的理解,体现了你多线程基础的功力,需要好好理解
体现功力的ThreadLocal类(线程本地变量)
- 框架中经常使用的类,赋予了线程能够绑定一个线程本地变量的能力。
- 在Java中使用ThreadLocal,可以定义一个变量,此变量跟线程绑定。
- 例:每一个线程运行这个方法都会获得这样的一个量。功能强大,用处很多
- 需深入掌握
以上是Java多线程编程的主要内容,下面是线程安全
线程安全
- 本质:多线程并发访问可变变量时,会遇到安全问题,就需要加锁
- 加锁就有可能导致死锁。死锁的条件(四个),打破死锁(使四个条件有一个不满足)
- 了解乐观锁、悲观锁,使用场景,实现方案
- 常见的死锁的原因,四个因素如果同时具备了,就会导致死锁。
推荐书籍
- Java工程师必读,进阶必读。
4. Java虚拟机
目的:了解我们写的代码在底层如何运行的,并不是为了去写虚拟机
掌握虚拟机常见的内容、体系,在底层如何运行的
包括5小节,掌握就可以了。不用再深入研究。(对编译原理有深入研究除外)
JVM体系架构:必须掌握内容
- 内存的分区:方法区、堆、栈,用来做什么,每一个线程对于每一个区的使用(理论知识,理解)
- 程序的.class类加载放到哪里,程序运行时哪些对象放到堆里,哪些对象放到栈里
- 多线程开始时,对于栈的管理
类的生命周期:
- .java文件 编译产生.class文件,运行class文件
- class文件的生命周期,通过classLoader这个加载器加载到方法去,又是怎样运行起来的。【知道】
- 生命周期中的重要方法:编译器生成的方法<clinit> (class-init)是用来干嘛的--单列模式中
对象的初始化:<init>
- 对象的生命管理, 类加载到方法区之后之后,怎么根据类,创造出对象,类的对象在内存中的组织,怎么找到对象所属的类,
- 怎么根据一个已有的类,创建出一个对象,并且把对象放在堆区还是栈区,如何组织的
容量池:String、Integer---这两部分的源码【理解】
- JVM对于自身性能的优化。
- 面试常见问题:string常量池、Integer常量池怎么用。
- 示例(图片)语句有什么不一样。
- String常量池的范围:
- Integer常量池的范围:-128~127,为什么要这样,为什么不是所有的Integer类型都放在常量池里面
垃圾回收机制
- 体现JVM理论功底的时候。垃圾回收是怎么样的
- 两种算法(引用计数、可达性分析算法(主流JVM)),各自的流程,为什么主流JVM用可达性分析算法而不是引用计数算法,来实现垃圾回收。
了解这5部分内容就可以了,对于JVM有一个基本常识性了解,对于写的代码在JVM中是怎么运行的,生命周期如何管理的,垃圾如何回收的,有一个充分的理论性的支撑。——了解代码是怎么运行的。
- 推荐书籍《深入Java虚拟机》(机械工业出版社)文那斯
5. 设计模式
如果说JVM是程序员从Java应用向底层的拓展,那么设计模式就是从Java应用向上层的拓展,对于软件架构的设计模式。
外国人提出,常见的有23种
设计模式是进阶阶段需要掌握的知识
本质:软件的可复用性,常用场景的高度抽象
其中常见的设计模式 7种:
1.单例模式:5种
- 最常见的模式。
- 5种实现,对提升功力有很大的帮助
2.工厂模式:
- 需要深入掌握
3.策略模式
- 动态的多态。在接口的实现的时候选择不同的策略。
4.适配器模式
- 把一个已有的不喜欢的接口类型转变成一个喜欢的接口类型.动态的多态。
5.模板模式
- 对于一个代码的流程有高度的抽象,定义出一个流程,把流程写成模板,留一个钩子函数
6.回调模式
- 框架设计当中经常使用。
7.建造者模式
- 类有很多类的对象,创建一个类的时候使用,比set get方法更搞笑
没有推荐书籍,blog上搜一搜,解释很多
6.网站架构
大型网站的架构
- 大型网站的架构,你需要知道演化过程:
- 从PC到分布式系统、分布式缓存、分布式数据库、分布式的session管理 等大型网站的架构,主要在推荐的书里面。
网站常用优化手段
- 面试经常问道:一台机器无法负载,要做分布式,怎么做负载均衡、分层、分割、缓存等,这就涉及到常用的优化手段。
分布式与无状态
- 分布式一个特性:任何一个服务器上都不能有状态
- session:不能保存在单态机器上,需要去理解。不能把web中有状态的量放进去
负载均衡
- 是干什么的
- 学一下常见的实现方式,lvs、http、dns等手段。
推荐书籍 《大型网站程序架构》李智慧
每一个Java程序员都应该看一下
7. spring框架
AOP如何实现
- 面向切面编程,如何实现,——需要懂Java动态代理、反射。然后动手写一个AOP的小框架
- 需要去学习如何使用,理解机理,如何实现。
IOC如何实现
- 控制反转
- spring如何是对Java Web中的一些bean、bean主键、service主键进行管理的---涉及到工厂模式
对象如何管理(控制反转如何管理)
- 控制反转如何实现的
- 里面有一个:单例、多线程。
- JavaWeb程序就是一个单例多线程程序
事物如何实现
- 事物指数据库事物
- 比如,spring如何进行事务管理,怎么做到的,需要懂**模板方法、AOP、strictLocal **
8. 闲谈与问答
他准备了一个月
希望大家能不要踩坑
希望大家把Java学的扎实,不要浮躁
关于面对对象的练习 有没有什么小技巧 感觉不太理解
- 抽象能力很重要,面向编程的6大规范
- 规范清楚内部类 外部类 封装时要定义清楚。** 高内聚,低耦合**
- 培养自己抽象的能力
推荐的书 Effictive Java
How tomcat works