J2EE技术整理大纲

一、Java基础

1.Java集合类

HashMap:

数组+链表+红黑树

2.Java异常

Throwable:error、exception(编译异常和运行时异常)

error:系统中的错误。

exception:程序可以处理的异常。
throw是语句抛出一个异常;
throws是声明一个方法可能抛出的异常信息。

未检查的异常(RuntimeException或Error)会触发回滚,已检查的异常(CheckedException)不会触发回滚。

下图红框为未检查的异常(UncheckedException)。

参考:JAVA基础之异常详解

3.Java I/O流

4.Java反射机制

二、Java高级

参考:面试整理-Java综合高级篇

 1.JVM

 JDK > JRE > JVM

 JVM = 类加载器子系统(classloader) + 运行时数据区域+ 执行引擎(即时编译器+垃圾收集器)

 JVM执行Java程序的过程:1) 加载.class文件(字节码解释器) 2) 管理并分配内存 3) 执行垃圾收集。

 JVM在整个jdk中处于最底层,负责于操作系统的交互,用来屏蔽操作系统环境,提供一个完整的Java运行环境,因此也就是虚拟计算机。

 1.1类加载器子系统(classloader)

 参照:java中类的加载顺序介绍

 jvm中类的生命周期:加载、连接(验证、准备、解析)、初始化、使用和卸载

 类加载机制:双亲委派机制

 1)加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类

 2)在加载类时,每个类加载器会将加载任务上交给其父,如果其父找不到,再由自己去加载。 

 3)Bootstrap Loader(启动类加载器)是最顶级的类加载器了,其父加载器为null。

 类加载器:

 1)BootstrapClassLoader(启动类加载器)

 2)ExtensionClassLoader(标准扩展类加载器)

 3)AppClassLoader(系统类加载器) 

 4)CustomClassLoader(自定义加载器) 

 Java类的初始化顺序:先父类后子类,先静态后普通,最后构造器。成员和初始化块按类中的顺序初始化。

 1)父类静态成员和静态初始化块

 2)子类静态成员和静态初始化块

 3)父类普通成员和普通初始化块

 4) 父类构造方法 

 5)子类普通成员和普通初始化块

 6)子类构造方法

 1.2运行时数据区域

 1)程序计数器:线程私有的,是一块很小的内存空间,可以认作为当前线程的行号指示器

 2)Java栈:线程私有的,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。它主要用于存放Java对象的引用

 3)本地方法栈:线程私有的,为执行本地方法(Native Method)服务的。

 4)堆:所有线程共享的,在JVM中只有一个堆。Java中的堆是用来存储Java对象以及数组(数组引用是存放在Java栈中的)。

 5)方法区:所有线程共享的,存储了Java类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。

 堆中存的是对象。栈中存的是基本数据类型堆中对象的引用栈代表了处理逻辑,而堆代表了数据

 非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同

 参考:JVM内存模型详解

 参考:深入理解JVM之JVM内存区域与内存分配

 1.3GC垃圾收集器(收集的场所线程共享区域-堆和方法区)

 GC检测算法:

 1)引用计数法

  对象引用类型分为强引用、软引用、弱引用和虚引用

  只用收集计数为0的对象。缺点:无法处理循环(相互)引用的问题。

 2)可达性分析算法

 GC回收算法:

 1)标记/清除算法【最基础】缺点:产生内存碎片

 2)复制算法 缺点:需要两倍内存空间

 3)标记/整理算法

 4)分代算法:新生代、老年代、元空间(扩容)。担保机制

 参照:深入理解JVM-内存模型(jmm)和GC

 参照:JVM结构、GC工作机制详解

 1.4JVM调优

 参考:JVM调优总结

  jvm调优工具:Jconsole(JDK自带),jProfile,VisualVM(JDK自带)

2.Java多线程和高并发 

3.数据结构

 3.1队列,栈,堆栈,数组,链表特点与区别:

 1) 队列可以看成是有2个口的集合一个口叫队头一个叫队尾,只能在对头进行删除操作,在队尾做插入。根据这样的操作。队列特点是先进先出。

 2)堆栈可以看成是有1个口的集合,这个口叫栈顶。插入和删除操作只能在栈顶操作。根据这样的操作。堆栈的特点是是后进先出。

 3)链表是一种存储方式,它可以在非连续的内存空间里面存储一个集合的元素。

 4)和它对应的是数组,数组要在连续的空间里存储集合的元素。

 队列、栈是线性数据结构的典型代表,而数组、链表是常用的两种数据存储结构;队列和栈均可以用数组或链表的存储方式实现它的功能

 3.2树(二叉树、B树、红黑树)

 3.3图

 3.算法(时间和空间复杂度)

  程序=数据结构+算法

 4.加密算法

 6.数据库(Oracle)

 

 Oracle体系机构:逻辑结构、物理结构和实例。

 sql执行顺序  

 sql性能调优

   存储结构

   执行计划

   索引

   锁

   事务

7.设计模式

三、互联网流行框架

  SpringMVC Spring MyBatis

  Ngnix Redis(缓存)

  Docker  Zookeeper + Dubbo SpringBoot + SpringCloud 

  消息队列(message queue):(RabbitMQ、Kafka)

  异步:批量数据的异步处理

  解耦:串行任务的并行化

  削峰:高负载任务的负载均衡

  Elasticsearch

四、集群和分布式部署

 session共享

 线程池

 锁

原文地址:https://www.cnblogs.com/wenxiangchen/p/10830723.html