2 向程序猿进化

尚未进行身份认证

暂无相关描述

等级
TA的排名 27w+

一致性非锁定读和一致性锁定读

一致性的非锁定读在默认配置下innodb的隔离级别是repeatableread,innodb的select操作使用的是一致性非锁定读一致性的非锁定行读(consistentnonlockingread,简称CNR)是指InnoDB存储引擎通过行多版本控制(multiversioning)的方式来读取当前执行时间数据库中运行的数据。如果读取的行正在执行delete、update操作...

2019-03-02 18:49:03

设计模式的六大原则

一、"开放-封闭"原则(OCP)Open-ClosedPrinciple原则讲的是:一个软件实体应当对扩展开放,对修改关闭二、里氏代换原则(LSP)LiskovSubstitutionPrinciple(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。三、 依赖倒置原则(DIP) 依赖倒置(DependenceInversionPrinciple)...

2018-08-21 10:55:37

java线程的5种状态及其转换

Java中的线程的生命周期大体可分为5种状态。1.新建(NEW):新创建了一个线程对象。2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu时间片(timeslice)...

2018-08-16 19:43:06

创建线程的三种方式

一、继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。二、通过Runnable接口创建线程类(1)定义runnable接口的实现类,并重写该接口的run()方法,该...

2018-08-16 19:40:55

ABA问题的解决方法

CAS操作可能带来ABA问题,因为CAS操作需要在操作值的时候,检查值有没有发生变化,如果没有发发生变化则更新。如果一个值原理是A,变成了B,又变成了A,那么使用CAS进行检查时会认为它的值没有变化,但是实际上却变了。ABA问题的解决办法就是使用版本号,在变量前面追加版本号,每次变量更新时把版本号加1,那么A-B-A就会变成1A-2B-3A。从jdk1.5开始,jdk中的Atomic包里提...

2018-08-16 19:39:47

ThreadLocal

对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量(实际上,这项工作需要程序员自己实现),因此可以同时访问而互不影响。比如,要让100个人填一张表,如果只有一支笔。对于管理人员必须保证大家不会哄抢这一支笔,否则,大家都填不完。从另一个角度,我们可以准备...

2018-08-16 19:38:18

线程池

什么是线程池合理使用线程池的好处:线程池的实现原理参考博客:https://blog.csdn.net/mine_song/article/details/70948223ThreadPoolExecutor大的实箭头表示继承(箭头尾是子类),大的虚箭头表示实现,小的实箭头表示表示关联即Executors中有ThreadPoolExecutor的实例引用。Thr...

2018-08-16 19:33:53

ReentrantLock 重入锁(互斥锁)

参考博客:https://blog.csdn.net/jiangjiajian2008/article/details/52226189Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的与synchronized相比,重入锁有着显式的操作过程,开发人员必须手动的指定何时加锁(调用lock方法),何时释放锁(调用unlock方法)。因此,重入锁对逻辑的控...

2018-08-16 19:22:57

AQS,同步器框架(AbstractQueuedSynchronizer,队列同步器)

参考博客:https://blog.csdn.net/vernonzheng/article/details/8275624https://www.cnblogs.com/200911/p/6031350.html而juc(java.util.concurrent)里的思想是将这些场景抽象出来的语义通过统一的同步框架来支持。juc里所有的这些锁机制都是基于AQS(AbstractQueu...

2018-08-16 19:18:42

happens-before(先行发生原则)

JSR-133使用happens-before的概念来阐述操作之间内存的可见性,在JMM中如果一个操作的结果需要对另一个可见,那么这两个操作之间必须要存在happens-before规则注意:两个操作之间有happens-before关系,并不意味着前一个操作必须要在后一个操作之前执行。happens-before仅仅要求前一个操作的(执行的结果)对后一个操作可见。JMM的设计思想:程序员...

2018-08-16 19:15:04

Synchronized的实现原理

版本1:每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:1、如果monitor的锁计数器为0,则该线程进入monitor,然后将计数器设置为1,该线程即为monitor的所有者。2、如果线程已经占有该monitor,只是重新进入,则进入monitor的计数器加13....

2018-08-16 19:14:08

volatile的实现原理

关键字volatile是JVM提供的最轻量级的同步机制为什么要使用VolatileVolatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。Java内存模型对volatile专门定义了一些特殊的访问规则,当一个变量被定义成volatile之后,他将具备两种特性:1、保证此变量对所有线程的可见性。2、禁止...

2018-08-16 19:12:09

锁的类型

锁对象用于管理对共享资源的并发访问Innodb存储引擎实现了如下2种标准的行级锁:共享锁(Slock),允许事务读取一行数据。排它锁(Xlock),允许事务删除或者更新一行数据。当一个事务获取了行r的共享锁,那么另外一个事务也可以立即获取行r的共享锁,因为读取并未改变行r的数据,这种情况就是锁兼容。但是如果有事务想获得行r的排它锁,则它必须等待事务释放行r上的共享锁—这种情况就是锁...

2018-08-07 16:41:36

悲观锁和乐观锁

数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。我们都知道锁的种类一般分为乐观锁和悲观锁两种,InnoDB存储引擎中使用的就是悲观锁,而按照锁的粒度划分,也可以分成行锁和表锁。Innodb支持行锁,MyIsam只支持表锁乐观锁乐观锁和悲观锁其实都是并发控制的机制,同时它们在原理上就有着本质的差别;乐观锁是一种思想,它其实并不是一种真正的『锁』,它会先尝...

2018-08-07 15:40:03

前缀索引和覆盖索引

前缀索引当索引的字符串列很大时,创建的索引也就变得很大,为了减小索引体积,提高索引的扫描速度,就用索引的前部分字串索引,这样索引占用的空间就会大大减少,并且索引的选择性也不会降低很多。而且是对BLOB和TEXT列进行索引,或者非常长的VARCHAR列,就必须使用前缀索引,因为MySQL不允许索引它们的全部长度。使用:列的前缀的长度选择很重要,又要节约索引空间,又要保证前缀索引的选择性要和...

2018-08-07 15:38:08

联合索引(多列索引)

联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.最左匹配原则假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序的基础上,对索引b排序。所以数据按照(1,1),(1,2)......顺序排放。对于selete*fromtablewherea=XXandb=XX,显然是可以使用...

2018-08-07 15:37:09

聚簇索引和非聚簇索引

参考博客:http://www.admin10000.com/document/5372.html聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体细节依赖于其实现方式。MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clusteredindex)和辅助索引(有时也称非聚簇索引或二级索引,secondaryindex,non-clustere...

2018-08-07 15:34:30

B+树索引

参考博客:http://www.admin10000.com/document/5372.htmlB+树索引的构造类似于二叉树,根据键值快速找到数据,B+树中的B代表平衡(balance),B+树索引并不能找到一个给定键值的具体行,B+树索引只能找到被查找数据行所在的页,数据库把页读入到内存中,最后在内存中查找到相应的数据。B树和B+树详见:https://blog.csdn.net/...

2018-08-07 15:28:03

MySQL索引的类型

在《高性能MySQL》中按照数据结构的不同将索引分为B+树索引、哈希索引、全文索引。B+树索引就是传统意义上的索引使用索引的优点:第一,索引大大减少了服务器需要扫描的数据量,可以帮助服务器避免排序和临时表,索引可以将随机I/O变为顺序I/O第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四...

2018-08-07 15:17:21

MySQL事务的四大特性

事务(transaction):是一组原子性的SQL查询,或者说是一个独立的工作单元。事务内的语句,要么就全部执行,要么就全都不执行。⑴原子性(Atomicity)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。⑵一致性(Consistency)  一致性是指事务必须使数据库从...

2018-08-07 15:14:53

查看更多

勋章 我的勋章
    暂无奖章