Sean's Blog

  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

MySQL锁算法

发表于 2019-08-18 | 更新于 2019-08-22 | 评论数: | 阅读次数:

锁的类型

Mysql提供了两种标准的行级锁:共享锁和排他锁。

共享锁和排他锁可以理解成读锁和写锁,读写锁之间只有读锁和读锁之间不互斥,写锁和写锁,读锁和写锁之间都会互斥。

查看MySQL中的锁情况,可以通过库INFORMATION_SCHEMA中的INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS表来查看具体锁情况。包括当前事务的状态,事务的ID,事务的sql,线程id,等待事务的锁id,事务开始时间,事务锁定的索引,事务锁定的行数量,数据锁定的页数量,事务锁定的主键值等

阅读全文 »

分布式一致性协议介绍

发表于 2019-07-29 | 更新于 2019-08-22 | 分类于 算法 | 评论数: | 阅读次数:

一致性

分布式存储系统通常通过维护多个副本来进行容错,提高系统的可用性。但是分布式存储存在一个问题,如何保证相同时刻存储的数据是一样的,这就是一致性。它是构建具有容错性的分布式系统的基础,一致性保证每个结点存储的数据是一致的,这样即使部分结点宕机也能取得正确的副本数据。目前的一致性一致性协议通常基于replicated state machines,各个节点从一个相同初始化state出发,经过同样的操作序列(log),最后到达相同的state

阅读全文 »

java线程池

发表于 2019-04-10 | 分类于 Java | 评论数: | 阅读次数:

前言

线程池是多并发编程中经常用到,了解是线程池的使用和原理是java程序员的必修课。编写多线程的程序推荐使用线程池而不是自己创建线程,因为线程池中的线程可以复用,复用线程可以降低线程创建和销毁的资源消耗,线程池帮助管理、调度、监控线程,可以防止无限制的创建线程,消耗完系统资源

简单使用

几种常用的线程池:

  • newCachedThreadPool,可缓存的线程池,线程池容量几乎为无限(Interger. MAX_VALUE),当一个新线程任务提交,如果线程池没有空闲的线程,则创建一个新线程执行,否则使用空闲线程。
  • newFixedThreadPool,定长的线程池,线程池维持定长的线程,即使没有任务运行也不会关闭线程,当新任务提交,线程池中线程都在执行,则将任务放入阻塞队列中排队等待空闲线程运行。
  • newScheduledThreadPool,定长的线程池,支持定时及周期性执行任务,newFixedThreadPool的特殊化,线程池容量为1
  • newSingleThreadExecutor,线程池只有一个线程,所有任务按照提交的先后顺序执行
阅读全文 »

ReentrantLock

发表于 2019-04-10 | 评论数: | 阅读次数:

前言

了解了java的队列式同步器AQS的基本实现,接下来可以看看java中频繁使用的可重入锁ReentrantLock。ReentrantLock是基于AQS实现的,内部类Sync继承了AQS,提供了公平锁和非公平锁。同synchronized相比,ReentrantLock是代码实现的锁,而synchronized是虚拟机上实现的锁,都是可重入的排他锁,即一个线程占有锁,其他线程必须等待锁的释放,同一个线程多次进入已将占有的锁,在效率方面,之前是ReentrantLock 效率更高,但后来java对synchronized进行了优化,效率目前来说差不多,ReentrantLock使用起来比synchronized更加灵活,synchronized使用来说更加方便,不用担心加锁释放锁的代码。

阅读全文 »

java同步器-AQS

发表于 2019-03-15 | 分类于 Java | 评论数: | 阅读次数:

前言

AQS,即AbstractQueuedSynchronized,抽象的队列式同步器,它是一个用于构建锁和同步器的基础框架,java中很多锁和同步器的实现都依赖AQS,比如ReentrantLock、 ReadWriteLock、Semaphore、CountDownLatch等。然而这些锁都没有直接来继承AQS,而是定义了一个Sync类去继承AQS.因为锁面向的是使用用户,而同步器面向的则是线程控制,那么在锁的实现中聚合同步器而不是直接继承AQS就可以很好的隔离二者所关注的事情.

AQS的实现是基于CLH队列,CLH队列的提出是用于自旋锁,但在AQS中,JUC并发包的作者(Doug Lea)将其用于阻塞锁。在了解AQS之前首先来看看CAS和CLH队列。

阅读全文 »

红黑树-转载整理

发表于 2019-03-15 | 分类于 算法 | 评论数: | 阅读次数:

前言

红黑树是一种自平衡二叉查找树,其每个结点都有一个存储位来表示结点的颜色,RED或者BLACK。红黑树的实现结构复杂,但是在红黑树上的查找,增加和删除的时间复杂度都为O(logn),因此红黑树的应用广泛,如Java的HashMap当冲突链表长度大于8时,转为红黑树;TreeMap使用红黑树结构等。

阅读全文 »

mapreduce过程-shuffle和sort

发表于 2019-03-07 | 分类于 Hadoop | 评论数: | 阅读次数:

前言

MapReduce作为Hadoop三大核心组件之一,是一种处理大数据的分布式运算框架。虽然当前优秀的分布式运算框架有很多,如spark,flink等,其有着MapReduce没有的流式处理模型,但是MapReduce在批量计算有着独有的优势,了解其内部的运行机制,对于大数据处理技术人员和学习人员都着重要的意义。

阅读全文 »

关于动态规划的想法

发表于 2019-03-07 | 分类于 算法 | 评论数: | 阅读次数:

前言

动态规划是经常用到的算法,一般是通过递推,将一个复杂的问题分解为简单的最小问题求解,即存在着最优子结构。从求解子问题一步步推出原始问题的解。我将目前遇到的动态规划的问题按照开辟数组的维度分为一维和二维两类,背包问题不属于这类,因为背包问题相关的问题也是通过动态规划,但是比较复杂,单独放在外面。以上是我个人对于遇到的动态规范的分类,纯属个人想法,还有树形动态规划,后续遇到会加入进去。

阅读全文 »
123

sean

24 日志
6 分类
20 标签
RSS
© 2021 sean
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Gemini v6.5.0
0%