何足道哉


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

NIO

发表于 2018-08-20 | 分类于 IO
NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。 NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(选择器)。传统IO基于字节流和字符流进行操作,而NIO基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数 ...
阅读全文 »

关于锁

发表于 2018-08-18 | 分类于 并发
AQSAQS是AbstractQueuedSynchronizer类的简称,即队列同步器。它是构建锁或者其他同步组件的基础框架。 AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)。 AQS 使用一个 volatile int 类型的成员变量 state 来表示同步状态: 当 state > 0 时,表示已经获取了锁。 当 state = 0 时,表示释放了锁。 AQS 通过内置的 FIFO 同步队列来完成资源获取线程的排队工作。如果当前线 ...
阅读全文 »

垃圾收集器

发表于 2018-08-18 | 分类于 JVM
图中展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。 Serial收集器 这个收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程(stop the world),直到它收集结束。 特点新生代、老年代都会使用串行回收。 新生代使用复制算法, 老年代使用标记-整理算法。 ParNew收集器 ParNew收集器其实就是Serial收集器的多线程版本。 特点新生代并行,老年代串行 ...
阅读全文 »

垃圾收集算法

发表于 2018-08-18 | 分类于 JVM
标记-清除算法首先标记出所有需要回收的对象,在标记完成之后统一回收所有被标记的对象。 标记算法引用计数法给对象添加一个引用计数器,每当有一个地方引用它时,计数器加1;当引用失效时,计数器就减1。任何时刻计数器为0的对象就是不能再被使用的。 可达性分析法以一系列的GC Roots对象为起点,从起点开始向下搜索,搜索所有走过的路径称为引用链,当一个对象到GC Roots没有任何引用链时,则证明此对象时不可用的。 在java中,可作为GC Roots的对象有: 虚拟机栈(栈帧中的本地变量表)中引用的对象; 方法区中的类静态属性引用的对象; 方法区中常量引用的对象; 本地方法栈中JNI(即一般说的 ...
阅读全文 »

事务

发表于 2018-08-18 | 分类于 数据库
所谓事务是用户定义的一个数据库操作系列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 特性原子性事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。 隔离性多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 持久性一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。 隔离级别冲突问题脏读脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。 不可重复读不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询 ...
阅读全文 »

索引

发表于 2018-08-18 | 分类于 数据库
索引原理索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。 类型普通索引这是最基本的MySQL数据库索引,它没有任何限制。 唯一索引索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。 主键索引它是一种特殊的唯一索引,不允许有空值。 主键索引是聚簇索引。聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找 ...
阅读全文 »

关于分布式事务

发表于 2018-08-17 | 分类于 分布式
分布式事务顾名思义就是在分布式环境下运行的事务,对于分布式事务来说,事务的每个操作步骤是运行在不同机器上的服务的。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚) CAP原则 一致性(C) 可用性(A) 分区容错性(P) 一致性在分布式系统中的所有数据备份,在同一时刻是否同样的值。 强一致性当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。 弱一致性系统并不保证连续进程或 ...
阅读全文 »

排序

发表于 2018-08-17 | 分类于 算法
插入排序插入排序是最简单的排序算法之一。插入排序由N-1次排序组成。每一次插入,都保证数组为已排序状态。 时间复杂度:O(n2)。 实现: 123456789101112131415161718/** * 插入排序 * @param array * @return */private static int[] insertSort(int[] array) { int temp; for (int i = 0; i < array.length; i++) { for (int j = array.length - 1; j > i; ...
阅读全文 »

二叉堆

发表于 2018-08-17 | 分类于 数据结构
二叉堆是一种特殊的堆,是一棵完全二叉树。 特性: 完全二叉树 最大堆:父节点总是大于等于子节点;最小堆:父节点总是小于等于子节点 二叉堆常用数组实现。并且对于数组中的任意位置i上的元素,其左儿子在位置2i上,其右儿子在左儿子后的2i+1上,其父节点在i/2取整数的位置上。(注意:根节点的位置是1,数组从1位置开始排列,0位置为空) 插入二叉堆插入的过程是一个上滤的过程。 将新节点插入到完全二叉树中的最后 与父节点进行比较,当小于父节点时,跟父节点互换,此时新节点上移(假设为最小堆) 直到大于父节点,插入完成 插入 1234567891011121314151617public vo ...
阅读全文 »

红黑树

发表于 2018-08-17 | 分类于 数据结构
红黑树是具有着色性质的二叉查找树。平均红黑树和评级AVL树一样深,从而查找时间一般接近最优。同时红黑树执行插入操作时,产生的旋转相对较少,性能更优。 特性 每一个节点或者是红色,或者是黑色 根是黑色 如果一个节点是红色的,那么它的子节点必须是黑色的 任何一个节点向下遍历到其子孙的叶子节点,所经过的黑节点个数必须相等 null节点为黑色 旋转左旋 左旋做了三件事: 将y的左子节点赋给x的右子节点,并将x赋给y左子节点的父节点(y左子节点非空时) 将x的父节点p(非空时)赋给y的父节点,同时更新p的子节点为y(左或右) 将y的左子节点设为x,将x的父节点设为y 右旋 右旋做了三 ...
阅读全文 »
1234

傅鹏

34 日志
16 分类
60 标签
© 2019 傅鹏
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4