00 设计模式
设计原则
设计原则
01 | Java代码是怎么运行的?
- 单例模式:保证整个系统中一个类只有一个对象的实例
运行时数据区域
原型模式
- 工厂模式可以分为三类:简单工厂模式、工厂方法模式、抽象工厂模式
定义和特点
- 外观模式(Facade Pattern)又称为门面模式,结构型设计模式,通过引入一个外观角色来简化客户端和子系统之间的交互,为复杂的子系统调度提供一个统一的入口,降低子系统和客户端的耦合度
- 装饰者模式指的是在不改变原文件和不使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装类对象,也就是装饰着来包裹真实的对象实现的
- 代理(Proxy)模式:是一种结构型设计模式,给某一个对象提供代理对象,并由代理对象控制对源对象的引用
概述
- 观察者模式(Observer Pattern):定义对象间一种一对多的依赖关系,使得每一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新
硬件的效率与一致性
什么是2-3树
- ArrayList 的数据结构基于数组实现,这个数组不像普通定义的数组,它可以在 ArrayList 的管理下插入数据时按需动态扩容、进行数据拷贝等
- IO 模型:简单理解为,使用什么样的通道进行数据的发送和同步,很大程度上决定了程序通信的性能
- Fork/Join 框架是 Java 并发工具包中一种可以将一个大任务拆分为多个小任务来异步执行的工具,自 JDK1.7 引入
HashMap 核心知识
当一个对象不适合或者不能被其他对象直接引用时,可以给该对象生成一个代理对象,代理对象具有被代理对象的所有功能,这样其他对象使用代理对象时一样可以达到自己的需求
- 线程的生命周期
* java.util.Collections 排序、二分查找、洗牌等
Java 的集合类、实际使用
Java集合框架概述
接口的默认方法(default)
ConcurrentHashMap
JVM 如何确定垃圾
1. 描述一下 JVM 内存模型,以及这些空间存放的内容
JVM入门
- LinkedList: 基于链表实现,由双向链表next、prev把数据节点穿插起来,并非所有的插入都是高效的,比如在中间区域插入,需要遍历元素找到插入位置
1. getClass():获取类的 class 对象
* Spring
- Stream API 是一种流式的数据处理风格,将要处理的数据当作流,在管道内进行传输,并在管道中的每个节点对数据进行处理,比如过滤、排序、映射、聚合等
* String、StringBuilder、StringBuffer 字符串链接性能对比:
synchronized
* ThreadLocal 主要解决线程内资源共享问题,一般会用在全链路监控中
双亲委派机制的缺点
* volatile 关键字是 Java虚拟机 提供的最轻量级的同步机制,作为一个修饰符出现,用来修饰变量
1. 如何预防死锁
一. 走近JAVA
Java 运行时数据区
* 反射: 有代理的地方几乎都有反射,它们是一套互相配合使用的功能类,在反射中可以调用方法、获取属性、拿到注解等相关内容,这些都可以与接下来的类代理组合使用,完成各种框架中的技术场景
* 红黑树: 是一种高效的自平衡二叉查找树,最初被称为对称二叉B树,可在近似O(logN)的时间复杂度下完成插入、删除、查找等操作
什么是线程池
一. Java 构建线程的方式
- 锁升级 = 无锁 => 偏向锁 => 轻量级锁 => 重量级锁
两种队列