Java 基础学习总结和学习路线规划

工作也有一段时间了,今天休息,正好有时间把最近所学的东西整理一下。
java是一门面向对象编程的语言,不仅吸收了c++语言的各种优点,还摒弃了c++中难以理解的多继承,指针等概念,作为静态面向对象语言编程代表,极好地实现了面向对象理论,让程序员以抽象的思维方式进行复杂的编程。
java语言的主要特点:
简单性
java不支持goto语句,代之以提供break和coninue语句以及异常处理,java还剔除了c++的操作符重载和多继承特征,java没有结构体,所有的数据都是对象,数组和字符串也是,所以不需要指针,java能够自动的处理对象的引用和间接引用,实现自动化的无用单元收集(自动垃圾回收GC),使程序不用为存储问题烦恼,把更多的时间和精力花在处理业务。
面向对象
封装,继承,多态,
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合,数据和方法一起描述对象(object)的状态和行为,每一个对象是其行为和状态的封装,类是按一定体系和层次来安排的,子类可以从父类中继承行为。java程序是用类和包来组织的。包是类的扩展集合,
分布性
java设计成支持在网络上应用,它是分布式语言,支持各种层次的网络连接,java的socket类支持可靠的流网络连接,所以用户可以生产分布式的客户机和服务器,网络变成类软件应用的分布运载工具,java只需编写一次,就可以到处运行。
编译和解释性
java编译程序生成字节码(bytecode)而不是通常的机器码,java字节码提供对体系结构中性的目标文件格式,java程序可以在任何实现了java解释程序和运行环境(JRE)的系统中运行。在java虚拟机环境中,程序开发的标准链接阶段,java只是把新类装进环境的过程,它是增量式,轻量级的过程。
稳健性
java原来是被用来编写嵌入式系统软件的强类型语言,它允许扩展编译时检查潜在的类型不匹配问题,java要求显式的类型声明,不支持c风格的隐式声明,这些严格的要求保证类编译程序能捕捉调用错误,
java的存储模型,java不支持指针,它消除了重写存储和覆盖数据的可能性,java的垃圾回收机制能有效预防内存泄漏和其他有关动态存储分配和内存释放的错误。java解释程序也只需许多运行时的检查,比如空指针,数组越界等异常。说到这,java的异常处理也使得java程序更稳健的,使用try/catch/finally 语句,程序很容易定位出错的代码,大大简化了错误的处理和恢复任务。
安全性
java的存储分配模型是预防恶意代码的主要方法之一
可移植性
java程序是运行在java虚拟机中或者JRE中,java的编译程序也是用java编写的,而java的运行环境是用ANSI C编写的。sun公司提供了不同的操作系统java虚拟机(java运行环境)

语言基础
数据结构
在java中有8种基本数据类型来存储数值,字符串,bool值
有三种表示形式:十进制,八进制,十六进制
数据类型 占用内存(字节)
byte 1
short 1
char 1
int 2
long 4
float 2
double 4
bool(true/false) 1

关键字
abstract
assert 用来查找内部程序错误
break 跳出switch或者循环
byte
case switch的分支
catch 捕捉异常,
class
continue 不执行之后的逻辑,进行下一次循环
char
default
do
double
else
enum
extends
float
final 不能覆盖的类和方法,修饰常量
finally try块中最后总会执行的代码
for
if
implements
import
instanceof 测试一个对象是否是某个类的实例
int
native 由宿主程序实现的方法(本地方法)
new
null
package
private
protected
public
return
short
static 类方法
strictfp 对浮点数据采用严格的规则
super
switch
synchronized 对线程而言是原子的方法或代码块
this 当前类的一个方法或者构造函数的隐含参数
throw 代码中之间抛异常。
throws 在方法声明中,声明可能抛出的异常
transiend 标志非永久性数据
try
void
volatile 标志字段可能会被多个线程访问,而不做同步
while
goto 保留字段

运算符
*/%+-
++ i++,++i,– –i,i–, 自增,自减
= *= /= += -= 赋值
== ,< ,>, >= <= 比较
|| && ! 逻辑

学习路线图
java 语言语法基础
java 面向对象特征
Java IO流体系框架
Java集合框架体系
java 泛型
java 异常处理
java GUI
java 注解
java 网络编程(socket)
java 多线程
java 反射机制
jvm
jdbc数据库编程
sql数据库整理
常用的设计模式
数据结构与算法

java技术体系

  • 设计模式
    porxy 代理模式
    factory 工厂模式
    singleton 单例模式
    Delegate 委派模式
    strategy 策略模式
    Prototype 原型模式
    Template 模版模式
  • 流行的框架
  • spring 5
    • IOC容器设计原理及高级特性
    • AOP 设计原理
    • FactoryBean 与BeanFactory
    • spring 事务处理机制
    • 基于springjdbc手写orm框架
    • springMVC九大组件
    • spring5新特性
  • mybatis
    代码自动生成器
    mybatis关联查询,嵌套查询
    缓存使用场景及选择策略
    spring集成下的sqlsession与mapper mybatis的事务
    分析mybatis的动态代理的真正实现
    手写实现mini版的mybatis
    ide和工具
    intellij idea
  • maven/gradle
    生成可执行的jar,理解scope生成最精简的jar
    类冲突,包依赖,noclassdeffounderror问题定位及解决
    全面理解maven的lifecycle,phase,goal
    架构师必备maven生成archetype
    maven流行插件实战,手写自己的插件
    nexus使用,上传,配置
    对比gradle
  • svn/git
    git工作原理
    git常用命令
    git冲突怎么引起的,如何解决
    架构师职责,gitflow 规范团队
  • jenkins
    搭建jenkins自动部署环境
    jenkins集成maven。git实现自动部署
    test/pre/production/多环境发布
    jenkins多环境配置,权限管理及插件使用
  • sonar
    findbugs/pwd运用
    sonarquber代码质量管理平台安装
    使用jenkins与sonar集成对代码进行持续检测
    idea与sonar集合使用

三 分布式架构
高并发,高可用,海量数据,没有分布式的架构知识肯定玩不转

  • 分布式架构原理
  • 分布式架构策略
  • 分布式架构中间件
  • 分布式架构实战

四 微服务架构
业务越来越复杂,服务分层,微服务架构是架构师升级的必由之路,java技术体系和微服务相关的技术
微服务框架
spring cloud
docker与虚拟化

五 性能优化
任何脱离细节的ppt架构师都是耍流氓,向上能运筹帷幄,向下能解决一线性能问题
性能指标体系
jvm调优
web调优
db调优

六 底层知识
从架构设计,到应用层调优,再深入了解底层原理
内存模型
并发模式
线程模式
锁细节
java 内存模型(jmm)
线程通信
消息传递
重排序
顺序一致性
happens-before
as-if-serial

锁和synchronized
Reentrantlock
Reentrantreadwritelock
condition

学习java必须掌握的知识
什么是面向对象?
是一种更符合我们思维习惯的懒人思想,可以将复杂的事务简单化,让我们从执行者变成指挥者。
面向对象特征:封装,继承,多态
继承的好处:提高代码的复用性,提高代码的维护性,让类与类产生关系,是多态的前提。
弊端:类的耦合性增强
多态的好处:多态就是事物存在多种形态,要有继承关系,有方法重写,父类引用指向子类对象,提高代码复用性和维护性。
弊端:不能使用子类的方法
接口:对外提供的规则都是接口
io流:用来处理设备之间的数据传输,输入流和输出流,字节流和字符流
线程:线程就是程序执行的一个路径,一个进程中包含多个线程
计算机网络:指地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路(有线或无线wifi)连接起来,在网络系统,网络管理软件及网络通信协议的管理下,实现资源共享的信息交换的计算机系统。
网络编程:就死活用来实现网络互联的不同计算机运行的程序间可以进行数据交换。
反射:java的反射机制是在运行状态中,对于任意一个类都能够知道这个类所以的属性和方法,对于任意一个对象都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法就是反射。
要想解剖一个类必须先要获取该类的字节码文件对象。而解剖使用的就是Class类中的方法,所以先要获取到每一个字节码文件对应的Class类类型对象。
枚举:
将变量的值一一列出来,变量的值限于列出的值
JVM默认是如何处理异常的:当main方法收到这个问题就是俩种处理方式,第一种自己处理,然后继续运行,
第二种处理,如果自己没有针对的处理方式,只有交给调用main方法的JVM来处理,jvm有一个默认的异常处理机制,就是将该异常进行处理
并将该异常的名称和异常堆栈信息,异常出现的位置打印到控制台上,并且终止程序。
BigInteger:可以超过Integer范围内的数据进行运行
BigDecimal:可以更加精确的存储小数
内存输出流:该输出流可以向内存写数据,把内存当做一个缓冲区,写出之后可以一次性获取全部数据。
线程池:线程启动一个新线程成本比较高,因为涉及到要与操作系统交互,而使用线程池可以很好的提供性能,尤其是当程序中要创建大量生命周期很短的线程,jdk5内置流线程池
线程组:它可以对一批线程进行分类管理,java允许程序直接对线程组进行控制