【并发编程】AQS框架 与 锁框架(JUC.locks)

1. AQS(队列同步器)

AbstractQueuedSynchronizer:队列同步器,简称AQS

  • AQS维护了一个volatile intstate(代表资源共享变量) 和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。
  • AQS定义了两种资源共享方式:Exclusive(独占),Share(共享)

阅读更多

【并发编程】JUC并发容器类

java.util.concurrent包中,提供了两种类型的并发集合:一种是阻塞式,另一种是非阻塞式。

  • 阻塞式集合:当集合已满或为空时,被调用的添加(满)、移除(空)方法就不能立即被执行,调用这个方法的线程将被阻塞,一直等到该方法可以被成功执行
  • 非阻塞式集合:当集合已满或为空时,被调用的添加(满)、移除(空)方法就不能立即被执行,调用这个方法的线程不会被阻塞,而是直接则返回null或抛出异常。

阅读更多

【Java知识梳理】常见集合类 的 数据结构

集合(Collection/Map)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Collection接口
|———— List接口
|———— ArrayList类
|———— Vector类
|———— LinkedList类
|———— Stack类
|———— Set接口
|———— HashSet类
|———— TreeSet类
|———— LinkedHashSet类
|———— Queue接口
|———— LinkedList类
Map接口
|———— HashMap类
|———— TreeMap类
|———— LinkedHashMap类
|———— Hashtable类

阅读更多

【Redis】Redis穿透、击穿、雪崩和数据一致性

1. 缓存穿透

访问一个不存在的key,缓存不起作用,请求会穿透到DB,流量大时DB会挂掉。

阅读更多

【Redis】深入学习Redis及集群

Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。

阅读更多

【数据库优化】MySQL事务处理与并发控制

1. MySQL事务

  1. 事务: 数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;事务是一组不可再分割的操作集合(工作逻辑单元);

阅读更多

【数据库优化】MySQL索引的使用及优化

1. 索引的基本概念

索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构

  • 索引意义:
    1. 索引能极大的减少存储引擎需要扫描的数据量
    2. 索引可以把随机IO变成顺序IO
    3. 索引可以帮助我们在进行分组、排序等操作时,避免使用临时表

阅读更多

【数据库优化】MySQL性能优化基础

1. MySQL基础操作

1.1 MySQL备份与恢复

  1. 备份:在mysql的安装目录的bin目录下有mysqldump命令,可以完成对数据库的备份。
    • 语法:mysqldump -u 用户名 -p 数据库名> 磁盘SQL文件路径

阅读更多

【数据库优化】MySQL慢日志查询分析

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。

阅读更多

【Java知识梳理】深入JVM(三)-内存模型JMM 与 锁机制

Java内存模型(Java Memory Model)

Java Memory Model(JMM)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存中和从内存中读取变量这样的底层细节(可见性,有序性,原子性)。

  • 所有的变量都存储在主内存中
  • 每个线程都有自己的独立的工作内存,里面保存该线程使用到的变量的副本(来自主内存的拷贝)
  • JMM规定:
    • 线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写。
    • 不同线程之间无法直接访问其他线程工作内存中的变量,线程间变量值的传递需要通过主内存来完成。

阅读更多