这一篇主要是通过一个实验来进行描述,过程是比较枯燥的. 实验准备 create table test_lock(id int auto_increment primary key ,stock int) engine=innodb; insert into test_lock(id,stock) value(1,50); 这里我把堆栈信息尽可能的简化,25个主要函数的名称和入参 后面为了突出主题,我对事务相关的函数加上这个开头死锁检测函数列表,一共10个函数   死锁检测函数列表A row_se…
上篇文章我们学习了如何自己实现一个动态代理,这篇文章我们从源码角度来分析下JDK的动态代理 先看一个Demo: public class MyInvocationHandler implements InvocationHandler { private MyService target; public MyInvocationHandler(MyService target) { this.target = target; } @Override public Object invoke(Ob…
开发环境 master环境:ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/php7/apache2 slave环境:kvm虚拟机/ubuntu14.04.01/1G/30G/mysql5.7.23 主从复制读写分离原理 主从复制: 主服务器数据库的每次操作都会记录在二进制日志文件 A 中.从服务器的I/O线程到主服务器中读取 A ,并将 A 内容写入到自己本地的中继日志 B 中.然后从服务器的SQL线程会根据 B 中的内容执行SQL语句从而完成数据的复制…
1. ByteArrayInputStream 定义 继承了InputStream,数据源是内置的byte数组buf,那read ()方法的使命(读取一个个字节出来),在ByteArrayInputStream就是简单的通过定向的取buf元素实现的 核心源码理解 源码: public ByteArrayInputStream(byte buf[], int offset, int length) { this.buf = buf; this.pos = offset; this.count =…
接上篇,分析equals方法在Long包装类中的重写,其他类及我们自定义的类,同样可以根据需要重新equals方法. equals方法定义 equals方法是Object类中的方法,java中所有的对象均继承自Object类,也就继承了equals方法,下面是Object类中equals方法的实现, public boolean equals(Object obj) { return (this == obj); } 可以看到,equals方法使用的就是==的比较方式,那么如果是两个引用类型,比…
三.配置文件详解(config.py) import os # 数据集路径,和模型检查点路径 # # path and dataset parameter # DATA_PATH = 'data' # 所有数据所在的根目录 PASCAL_PATH = os.path.join(DATA_PATH, 'pascal_voc') # VOC2012数据集所在的目录 CACHE_PATH = os.path.join(PASCAL_PATH, 'cache') # 保存生成的数据集标签缓冲文件所在文件…
CrawlerProcess主进程 它控制了twisted的reactor,也就是整个事件循环.它负责配置reactor并启动事件循环,最后在所有爬取结束后停止reactor.另外还控制了一些信号操作,使用户可以手动终止爬取任务. 此类在scrapy/crawler.py中定义,此模块有三个类:Crawler.CrawlerRunner和CrawlerProcess.Crawler代表了一种爬取任务,里面使用一种spider,CrawlerProcess可以控制多个Crawler同时进行多种爬取…
Solr4.8.0源码分析(19)之缓存机制(二) 前文<Solr4.8.0源码分析(18)之缓存机制(一)>介绍了Solr缓存的生命周期,重点介绍了Solr缓存的warn过程.本节将更深入的来介绍下Solr的四种缓存类型,以及两种SolrCache接口实现类. 1.SolrCache接口实现类 前文已经提到SolrCache有两种接口实现类:solr.search.LRUCache 和 solr.search.LRUCache. 那么两者具体有啥区别呢? 1.1 solr.search.LR…
本篇博客的目录: 一:put方法源码 二:get方法源码 三:rehash的过程 四:总结 一:put方法的源码 首先,我们来看一下segment内部类中put方法的源码,这个方法它是segment片组的,也就是我们在用concurrentHash的put方法的时候,实际上它会取得key的hashcode值,再计算它的hash,然后它会选择一个片组,进入segment中的这个方法.所以我们根本上要看的是这个方法: public V put(K key, V value) { if (value…
数据越来越和我们的生活离不开,数据在生命周期的各个阶段有着不同的痛点和需求以及特殊场景. CURD是数据的四大基本需求:写入,更新,读取,删除. 今天,来谈一谈死锁问题 死锁是高并发下MySQL不可回避的一个问题. 这句话可以引申四个问题: 1.什么是死锁? 2.MySQL什么时候会检测死锁? 3.数据库系统如何处理死锁? 4.有哪些典型的高并发死锁场景? 1.我们先来看看什么是死锁. 在<数据库系统实现>第八章第二节这样定义死锁 并发执行的事务由于竞争资源而到达一个存在死锁的状态:若干事务的…