java线程池知识点

为什么用线程池,优势

线程池主要是控制运行线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。

主要特点是:线程复用、控制最大并发数、管理线程。

第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

查看更多

HashMap源码分析

继承体系

HashMap 继承体系

在 Java 中,HashMap 的实现采用了(数组 + 链表 + 红黑树)的复杂结构,数组的一个元素又称作桶。

在添加元素时,会根据 hash 值算出元素在数组中的位置,如果该位置没有元素,则直接把元素放置在此处,如果该位置有元素了,则把元素以链表的形式放置在链表的尾部。

当一个链表的元素个数达到一定的数量(且数组的长度达到一定的长度)后,则把链表转化为红黑树,从而提高效率。

查看更多

ArrayList源码分析

继承体系

ArrayList 继承体系

源码分析

属性

/**
* 默认容量为10,也就是通过 new ArrayList() 创建时的默认容量
*/
private static final int DEFAULT_CAPACITY = 10;

/**
* 空数组
* 这种是通过 new ArrayList(0) 创建时用的空数组
*/
private static final Object[] EMPTY_ELEMENTDATA = {};

/**
* 空数组
* 这种是通过 new ArrayList() 创建时用的空数组
* 与 EMPTY_ELEMENTDATA 的区别是在添加第一个元素时使用这个空数组会初始化为 DEFAULT_CAPACITY(10)个元素
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

/**
* 真正存放元素的地方
* 使用 transient 关键字能不序列化这个字段
*/
transient Object[] elementData; // non-private to simplify nested class access

/**
* 真正存放元素的个数
*/
private int size;

ArrayList(int initialCapacity) 构造方法

public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
// 如果传入的初始容量 > 0,新建一个数组存储元素
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
// 如果传入的初始容量 = 0,使用空数组 EMPTY_ELEMENTDATA
this.elementData = EMPTY_ELEMENTDATA;
} else {
// 如果传入的初始容量 < 0,抛出异常
throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity);
}
}

查看更多

Mybatis 知识点

jdbc 问题

  1. 数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果使用数据库连接池可解决此问题。
  2. Sql 语句在代码中硬编码,造成代码不易维护,实际应用中 sql 变化的可能较大,sql 变动需要改变 java 代码。
  3. 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
  4. 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。
查看更多

FastDFS流程图

FastDFS 执行流程

FastDFS 服务端有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  • Tracker Server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比 GFS 中的 Master 更为精简,不记录文件索引信息,占用的内存量很少。

  • Storage Server:存储服务器(又称存储节点或数据服务器),文件和文件属性(Meta Data)都保存到存储服务器上。Storage Server 直接利用 OS 的文件系统调用管理文件。

查看更多