我的知识点

来源:互联网 发布:可以编辑照片的软件 编辑:程序博客网 时间:2024/05/18 02:57

本人做Java5年有余,仍像个应届毕业生,知其然不知其所以然,面试多次失败,痛定思痛,决定梳理下自己的知识点。

本章知识点基于JDK 8

  • Java知识点总结
    • JVM相关知识
      • JVM内存结构
        • 程序计数器
        • Java虚拟机栈
        • 本地方法栈
        • Java堆
        • 方法区
          • 运行时常量池
        • 直接内存
      • 类加载机制
      • 垃圾回收机制
        • 如何确定回收对象
        • 垃圾收集算法
        • HotSpot算法实现
        • 垃圾收集器
      • JVM调优
    • 基础
    • 集合
      • List
      • Map
    • 反射
    • 多线程
      • Java内存模型
        • 先行发生原则happens-before
        • volatile 语义
        • synchronized 语义
        • final 语义
      • Unsafe
      • 线程池
    • 网络
    • 日期
    • 异常
    • Steam
  • 分布式
    • CAP理论
    • 分布式事务
  • 数据库
    • ACID

Java知识点总结

JVM相关知识

JVM内存结构

程序计数器

Java虚拟机栈

栈帧
栈帧存储了局部变量表、操作数栈、动态链接、方法出口等信息。

本地方法栈

Java堆

方法区

运行时常量池

直接内存

http://blog.csdn.net/bluetjs/article/details/52874852


类加载机制

http://blog.csdn.net/u013256816/article/details/50829596


垃圾回收机制

如何确定回收对象

  1. 引用计数器算法
  2. 可达性分析算法
  3. 引用类型
  4. finalize方法

垃圾收集算法

  1. 标记清楚算法(Mark-Sweep)
  2. 复制算法(Copying)
  3. 标记整理算法(Mark-Compact)

HotSpot算法实现

  1. 枚举根节点
  2. 安全点
  3. 安全区域

垃圾收集器

http://blog.csdn.net/tonytfjing/article/details/44278233
http://blog.csdn.net/java2000_wl/article/details/8030172
http://blog.csdn.net/renfufei/article/details/54885190


JVM调优


基础

集合

List

  1. ArrayList和LinkedList的选型?

  2. sdsd

Map


反射

多线程

Java内存模型

先行发生原则(happens-before)

  1. 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作。准确地说,应该是控制流的顺序而不是程序代码顺序,因为要考虑分支、循环等结构。
  2. 锁定规则:一个unLock操作先行发生于后面对同一个锁的lock操作
  3. volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作
  4. 传递规则:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C
  5. 线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作
  6. 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生
  7. 线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行
  8. 对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始

volatile 语义

volatile提供了两种特性:
1. 保证此变量对所有其他线程的可见性,指当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。
2. 禁止指令重排序优化。

实现原理:
1. Lock前缀指令会引起处理器缓存回写到内存
2. 一个处理器的缓存回写到内存会导致其他处理器的缓存失效

要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
1. 对变量的写操作不依赖于当前值。
2. 该变量没有包含在具有其他变量的不变式中。

synchronized 语义

synchronized实现同步的基础:java中每一个对象都可以作为锁
1. 普通同步方法,锁是当前实例对象。
2. 静态同步方法,锁是当前类的class对象
3. 同步方法块,锁是Synchronized括号里的对象

1和3的实现方式是monitorenter和monitorexit指令。2的实现方式是方法的签名里有ACC_SYNCHRONIZED标记,实质上还是用的monitorenter和monitorexit实现。

Java对象头
如果对象是数组类型,则虚拟机用3个字宽存储对象头,如果不是,则用2个字宽存储。在32位虚拟机里,一个字宽是4个字节。

长度 内容 说明 32/64bit Mark Word 存储对象的Hashcode和锁信息 32/64bit Class Metadata Address 存储到对象类型数据的指针 32/32bit Array length 数组长度(如果是数组)

Mark Word在不同锁状态下的存储格式:
这里写图片描述

锁的状态

  1. 偏向锁
  2. 轻量锁
  3. 重量级锁

final 语义

Unsafe

线程池

实现原理:

网络

日期

异常

Steam

分布式

CAP理论

分布式事务

http://www.codeceo.com/article/distributed-transaction.html
http://blog.jobbole.com/89140/
http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency

数据库

ACID

  1. 原子性(Atomicity)
  2. 一致性(Consistency)
  3. 隔离性(Isolation)

  4. 持久性(Durability)


原创粉丝点击