死锁

死锁的概念

两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。

产生死锁的原因

1
2
3
4
5
1'互斥条件': 一个资源每次只能被一个进程使用。
2'请求与保持条件': 一个进程因请求资源而阻塞时, 对已获得的资源保持不放。
3'不可剥夺条件':进程已获得的资源, 在末使用完之前, 不能强行剥夺。
4'环路等待条件':若干进程之间形成一种头尾相接的循环等待资源关系。
只要系统发生了死锁, 这些条件必然成立, 而只要上述条件之一不满足, 就不会发生死锁。

SQL-优化查询

优化查询的方法

1.使用索引

尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。

2.优化SQL语句

2.1 explain查看SQL语句执行效果

1
2
可以帮助选择更好的索引和优化查询语句, 写出更好的优化语句。 通常我们可以对比较复杂的尤其是涉及到多表的 SELECT 语句,
把关键字 EXPLAIN 加到前面, 查看执行计划。例如: explain select * from news;

设计模式-六大原则

六原则一法则

1
2
3
4
5
6
7
s( Single-Resposibility Principle ): 单一职责原则。
o( Open-Closed principle ): 开放封闭原则。
l( Liskov-Substituion Principle ): 里氏替换原则。
d( Dependecy-Inversion Principle ): 依赖倒置原则。
i( Interface-Segregation Principle ): 接口隔离原则。
合成/聚合复用。
迪米特法则(最少知道)<!--more-->

JAVA中的【IO】、【NIO】、【AIO】

IO和NIO的区别

IO NIO
面向流 面向缓冲
阻塞IO 非阻塞IO
选择器

1.面向流与面向缓冲

1
2
3
4
5
>     Java IO 面向流意味着每次从流中读一个或多个字节, 直至读取所有字节,它们没有被缓存在任何地方。 此外, 它不能前后
> 移动流中的数据。
> Java NIO 中把数据读取到一个缓冲区中, 需要时可在缓冲区中前后移动。 这就增加了处理过程中的灵活性。而且, 需确保当
> 更多的数据读入缓冲区时, 不要覆盖缓冲区里尚未处理的数据。
>

设计模式-工厂模式

工厂模式

定义一个用于创建对象的接口,让子类决定实例化哪个类,工厂方法使一个类的实例化延迟到其子类。

提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类。工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。

HashMap底层

HashMap简介

1.实现原理

底层是链表+数组,当链表长度大于8自动转化成红黑树。

首先有一个每个元素都是链表的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。

| 139.6k