- 博客(51)
- 资源 (7)
- 收藏
- 关注

原创 MySQL InnoDB引擎 MVCC并发控制
首先,我们来介绍一下什么是MVCC,为什么要使用MVCC,MVCC的原理,然后结合MySQL的事务隔离级别来说一下MVCC的实现。1.MVCC定义MVCC全称Mutli Version Concurreny Control,多版本并发控制,也可称之为一致性非锁定读;它通过行的多版本控制方式来读取当前执行时间数据库中的行数据。实质上使用的是快照数据。2.为什么要使用MVCC消除锁的开销;这个较好理解
2017-03-26 11:38:13
3098
原创 分布式系统之Quorum机制
在《分布式系统之中心副本控制协议(Primary-secondary协议)》 中略微提及到了Quorum,但没有进行详细的阐述,这篇文章将带你走进Quorum.1. Quorum介绍首先,先认识发音和基本含义,英[ˈkwɔ:rəm], 美[ˈkwɔrəm, ˈkwor-],n. 法定人数. 在介绍Quorum之前,先对一些概念进行定义:系统中的更新操作定义为wiwiw_i,iii ...
2018-05-10 16:45:54
13379
原创 分布式系统之Lease机制
在上一篇文章2.3节primary副本切换中,我们提到了利用Lease机制进行节点状态判断;在这篇文章中,我们围绕Lease机制进行阐述。1. Lease机制介绍首先,先认识发音和基本含义,英[li:s],美[lis];n. 租约; 租契; 租赁物; 租赁权。我们首先介绍一种问题背景,并利用Lease机制来进行解决。在上节提到的中心化的分布式系统中,节点的元数据信息需要一个中心化的...
2018-05-07 10:20:35
1123
原创 分布式系统之中心副本控制协议(Primary-secondary协议)
最近又把之前接触过一段时间的分布式系统及相关算法拾了起来,继续研究研究。大体将分布式涉及的一些基本原理及算法进行了理解掌握之后,又沿着从简到繁的次序依次记录了下来。1. 副本协议简单来讲,副本控制协议是按照指定的流程控制副本数据进行读写行为的协议,使副本满足一定的可用性和一致性要求的分布式协议。一般来说,副本协议需要满足:容错性、可用性和一致性(强一致性、会话一致性、最终一致性)。 ...
2018-05-04 15:02:28
3612
1
原创 R 按照某列值进行行间排序
library(dplyr)x_importance <- c( 0.00214138, 0.00223875, 0.00417543, 0.00190968, 0.00401864, 0.00217691, 0.00433094, 0.00226843, 0.00325509, 0.00216857, 0.10460003, 0.00391664,0.007673
2017-12-29 15:49:03
4098
原创 使用R进行缺失值填充
最近逼事一堆,但不得不做,谁让自己XX呢? Stop complaining, and keep moving.1. R进行缺失值填充library(readxl)library(mice)library(proto)factory <- read_excel("factory_mice.xls")# factory <- read.csv("factory_mice.csv")# 观测f
2017-12-29 15:32:10
10992
原创 Integer中equlas()方法的运用与问题总结
说实话,在写这篇博文之前真的不知道Integer还有这么一个大坑。还好最近看了阿里v1.2版本的Java开发手册才发现了,先给自己打个预防针。1.问题下面我们先来看几小段代码,先自己想想运行结果是什么?public class Test1{ public static void main(String[] args) { Integer a=100; Inte
2017-05-26 21:34:47
1089
原创 【算法】字符串模式匹配Sunday算法
之前对于字符串模式匹配的了解仅限于那几个API函数和暴力求解方法,没有真正地探讨过关于字符串匹配的问题,今天因为一些原因看到了这个问题引发了我的兴致,故研究了一下sunday算法。1.sunday思路sunday算法是从前往后匹配,在匹配失败时关注的是源字符串参与匹配最末尾字符的下一个字符:如果该字符没有在模式串中出现则直接跳过,匹配移动位数=模式串长度+1否则,匹配移动位数=模式串中最右端的该
2017-04-14 22:41:05
748
原创 事务ACID的实现
事务需要满足ACID特性,那在数据库中,它是如何实现的?我们接下来的内容将一一介绍。1.隔离性其实我们在《MySQL InnoDB引擎 MVCC并发控制》中谈到了事务的隔离级别,但没有谈到怎样实现隔离性。我们提到了要消除幻读,一般的数据库系统需要保证串行化的事务隔离级别,而MySQL InnoDB在可重复读的事务隔离级别下消除了幻读,功劳应该归于Next-key Lock锁。这个具体详述在《MySQ
2017-04-14 09:20:55
3977
原创 AbstractQueuedSynchronizer同步队列与Condition等待队列协同机制
之前对AbstractQueuedSynchronizer(AQS)同步队列与Condition等待队列的功能一直不是很清晰,没太清楚地区分开二者的区别和联系,最近研究了一下分享出来。1.同步队列和等待队列简述AQS维护的队列是当前等待资源的队列。当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线
2017-04-04 11:32:22
5390
2
原创 网站架构模式
这篇是读《大型网站技术架构》后的一些总结和个人理解。1.模式“模式”词我们应该是很熟悉的, 我们最常见和最常用到的就是设计模式了。那如何来解释“模式”这个词呢? 个人理解:在相似场景下可复用的解决方案。两个比较关键的点:1.相似场景 2.可复用方案2.网站架构模式2.1 分层(横向)分层主要是将系统进行横向切割。例如我们一般把系统分为应用层,服务层,数据层。进一步地,我们还可以继续在大的层次
2017-03-30 15:36:57
584
原创 经典的排序算法--归并排序
归并排序核心思想:递归过程,使得前1/2和后1/2分别有序,然后对两个有序序列进行合并。从递归的逆过程看,就是两两合并,最终达到有序。 递归逆过程举例: 【3】【1】【5】【8】【7】【4】【2】【6】 【1,3】【5,8】【7,4】【2,6】 【1,3,5,8】【2,4,6,7】 【1,2,3,4,5,6,7,8】对于归并排序来说,合并过程是算法中的核心步骤,我们不多说了,来看看代码。i
2017-03-28 21:03:55
464
原创 ReentrantLock的源代码解析和锁的内存语义实现
我们这一篇重点解析的是ReentrantLock,对AbstractQueuedSynchronizer(AQS)的解析会相对较少。所以,如果对AQS的原理还不是很了解的话,建议先去了解AQS的实现原理,然后再来看本篇,一些之前看不太懂的地方应该就会恍然大悟了。1.ReentrantLock类我们先来看看ReentrantLock类中大体包含一些什么成员变量和函数:public class Reen
2017-03-28 18:42:29
910
原创 volatile和锁的内存语义与实现
1.volatile的内存语义与实现1.1 volatile写读的内存语义在介绍锁的内存语义之前,我们先简单介绍一下volatile写读的内存语义:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存中。当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量这两条保证了volatile能够达到它的即时可见的
2017-03-28 14:43:06
1695
原创 经典的排序算法--快速排序
快排的核心思想:确定基准,然后按照基准进行分割。递归0.快速排序的框架快速排序(升序)的思想就是先确定一个基准,然后通过partition函数去让数组保持小于等于和大于分别置于数组两端。然后通过递归不断对数组进行划分,最终达到有序。 例如:ABCDEFGHIJK;如果此序列的基准为F,那么我们最终通过一次partition要达到的效果就是:ABCDE都小于等于F,GHIJK都大于F。ABCDE和
2017-03-27 18:26:26
1401
原创 【算法】平衡数
题目:平衡数的定义是:将一个数分成左右两部分,分别成为两个新的数。 左右部分必须满足以下两点: 1,左边和右边至少存在一位。 2,左边的数每一位相乘如果等于右边的数每一位相乘,则这个数称为平衡数。 例如:1221这个数,分成12和21的话,1*2=2*1,则称1221为平衡数,再例如:1236这个数,可以分成123和1*2*3=6,所以1236也是平衡数。而1234无论怎样分也不满足平衡数。
2017-03-25 10:34:03
4788
原创 【算法】字符串分类
题目:字符串分类,两个字符串A和B属于同一类需要满足以下条件: A中交换任意位置的两个字符,最终可以得到B,交换的次数不限。比如:abc与bca就是同一类字符串。 输入:首先输入一个正整数N(1 <= N <= 50),接下来输入N个字符串 输出:输出一个整数表示分类的个数。 例子: 3 abc bca cab 1 解题要点:需要抓住同类字符串的共同点(含有
2017-03-25 10:23:21
2100
原创 经典的排序算法--堆排序
核心点:堆调整如何形成最小堆/最大堆,那就先需要了解最小堆/最大堆的概念。最大堆(大根堆)要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值,且要求是完全二叉树。
2017-03-25 10:05:50
403
原创 【算法】不能被素数相加得到的偶数
问题:求[m,n]区间内所有不能被素数相加得到的偶数. 思路:先求能相加得到的,然后再根据得到的找出得不到的。import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import java.util.TreeSet;public class PrimeNum
2017-02-19 09:27:54
1187
原创 设计模式_模板方法模式(Java)
模板方法模式(Template),定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。举个栗子:小明想在学习过后去运动或者上会网,那么小明在学习某门课程过后一定会搞点事情,而这些事情是可变化的,谁也不知道他要干什么,所以我们需要在它需要的时候进行“实现”。类图示例代码//package com.dlut.designpatt
2017-01-11 11:14:54
434
原创 canal的使用错误“Context namespace element 'component-scan' and its parser class”
在继上次为了用canal发生意外之后,今日又被canal坑了一把。在上次的CanalClient实现时,为了测试方便,直接将CanalClient类放置于项目的Test中进行测试,同时加载了canal的maven依赖,然后就没有继续执行其他操作。今日启动tomcat,发现无法正常启动,启动日志出现一堆错误org.springframework.beans.factory.BeanDefinition
2016-12-30 15:13:38
4122
原创 使用canal进行mysql数据同步到Redis
写这篇博文时,自己一定是含着误删数据库的眼泪写完的,文中的后续部分会谈到这个“从删库到**”的悲惨故事,这个故事深刻地教训了我,我也想以此来警示大家,注意数据安全和数据备份。1. 可行方案回归正题:我们的标题为《使用canal进行mysql数据同步到Redis》,那就先来说说我们的目的:mysql数据同步到Redis,想达到读写分离,Redis只做缓存,MySQL做持久化。刚开始想这样干的时候就去网
2016-12-29 15:16:20
25526
2
原创 Java泛型接口、迭代器与反射机制结合实例,和泛型方法的使用原则
本来这部分的内容是相对简单的,但是在看书的过程中发现了一个很好的例子,涉及了好几个知识点,忍不住要写一篇博文。泛型接口,顾名思义,泛型也可以应用于接口,接口使用泛型和类使用泛型没什么区别。下面举一个生成器的例子,是工厂方法的一种应用,负责创建对象的类。生成器接口://接口方法返回类型是参数化的T,切记要与泛型方法进行区别;泛型方法是为了参数的泛化,后面我们将会给出一个简单的实例public int
2016-12-26 14:21:08
1418
原创 从代理模式到Java动态代理
在之前的设计模式博文《设计模式_代理模式(Java)》中,介绍了代理模式。它是为了提供额外的操作,而创建的用来替代实际对象的对象,原理和实现都较为简单,在这片文章中我们主要是介绍Java中提供的动态代理。动态代理比代理的思想更向前迈进一步,因为它可以动态地创建代理,并动态地处理对所代理方法的调用。在动态代理上所做的所有调用都会被重定向到单一的调用处理器(InvocationHandler实现)上。在
2016-12-23 21:36:13
713
原创 <a>标签href与js(onclick)的触发顺序
在前端标签<a> 的执行过程中遇到问题,发现了href与js(onclick)的触发是存在先后顺序的。 优先级:onclik > href 如果不需要href的跳转可以使用event.preventDefault() 方法置于onclick函数中。 如果只是把<a> 作为按钮使用可以使用href="javascript:void(0);"。<a href="index" onclick="to
2016-12-22 21:29:18
8051
原创 SpringMVC绑定ajax传递json数据到pojo对象错误(400 Bad Request)
问题如标题所述,ajax向SpringMVC Controller传递JSON数据,遇到了错误“Failed to load resource: the server responded with a status of 400 (Bad Request)”,该错误为前端报错,JSON数据压根没有被Controller接收。因为后端想通过接收JSON数据直接转换为pojo对象,进行pojo绑定。经过
2016-12-21 16:57:19
9387
原创 shogun-toolbox的使用方法和问题总结
本以为在上一次安装入坑之后能顺利使用,没想到在matlab接口具体使用时又出现了问题,接下来我将一一进行说明.上一篇shogun-toolbox的安装与问题总结 1. matlab接口示例代码生成 这块内容一定是shogun的新手遇到的头疼的问题,找不到切入点,没办法模仿示例代码进行改写.一开始我也是摸不着头脑,后来就看shogun包中的doc/cookbook,但发现里面压根没有关于matla
2016-09-30 15:39:07
3106
3
原创 shogun-toolbox的安装与问题总结
最近要做一些核学习的实验,找到了shogun-toolbox,但是在安装过程中屡屡遇坑,终于在一番折腾之后安装成功,所以记录一下,以免下次重新入坑。对于shogun就不多介绍了,它就是一个机器学习的工具箱。有兴趣可以访问shogun官网:http://www.shogun-toolbox.org/ 或者它的github:https://github.com/shogun-toolbox/shogun
2016-09-28 18:42:35
3015
1
原创 设计模式_工厂方法模式(Java)
工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到了其子类。在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。工厂方法模式是简单工厂模式的进一步抽象和推广,简单工厂模式在
2016-09-23 22:22:22
492
原创 设计模式_适配器模式(Java)
适配器模式(Adapter),别名:包装器Wrapper,将一个类的接口转换成Client希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。时机:我们经常会碰到的情况是你无法修改你想要使用的类,这些类库是被发现而非被创建的,在这种情况下,我们可以考虑使用适配器模式。适配器中的代码将接受你所拥有的接口,并产生你所需要的接口。适配器模式主要应用与希望复用一些
2016-09-23 19:43:53
347
原创 23种设计模式(Java)--- 持续更新
最近在读《Thinking in Java》,书中在阐述一些知识点的时候就会提及到一些设计模式,正好趁此机会回顾学习学习,并把学习过程和自己收集或者思考的一些知识点、重点拿出来,与大家分享,仅此而已。23种设计模式(Java)— 持续更新按照学习时间顺序:《设计模式_组合模式(Java)》《设计模式_代理模式(Java)》《设计模式_状态模式(Java)》《设计模式_策略模式(Java)》
2016-09-23 10:59:37
697
原创 设计模式_改进策略模式_策略模式与简单工厂模式结合(Java)
上一篇我们介绍了《设计模式_策略模式(Java)》,同时讲述了策略模式与状态模式的区别,如果仔细查看代码或者类图,我们会发现策略模式在一定程度上是存在缺陷的,Client(Test类)必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着Client必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于Client知道所有的算法或行为的情况。这个改进版的就不放类图了,相信你
2016-09-22 20:00:53
3430
原创 设计模式_策略模式(Java)
策略模式(Strategy):它定义了算法家族,分别进行了封装,让他们之间可以相互转换,这种变化不会影响到使用算法的用户。策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。策略模式就是用来封装算法的,在实践中,可以用它来封装几乎任何类型的规则,在分析过程中需要在不同的时间应用不同
2016-09-22 15:16:20
987
1
原创 设计模式_状态模式(Java)
状态模式(State),当一个对象的内在状态改变时允许改变其行为。这个对象看上去就像是改变了它的类一样。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。状态模式的好处:将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。将特定的状态相关的行为都放到一个对象中,由于所有与状态相关的代码都存在于某
2016-09-21 16:06:22
514
原创 设计模式_代理模式(Java)
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。应用: 远程代理,为一个对象在不同的地址空间提供局部代表。隐藏一个对象存在于不同地址空间的事实,如WebService。 虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。 安全代理,用来控制真实对象访问时的权限。 智能指引,调用真实对象时,代理处理另外的事。类图: 示例代码://packa
2016-09-21 13:06:56
452
原创 设计模式_组合模式(Java)
组合模式(Composite),将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。使用时机:需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了。组合模式基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,客户代码中,任何用
2016-09-21 12:50:11
550
原创 R读取txt、csv、xls和xlsx格式文件
最近项目中运用到了R读取文件数据,所以把相关好用的、经过验证的方法总结了一下,有效避免下次入坑。1. R读取txt文件 使用R读取txt文件直接使用read.table()方法进行读取即可,不需要加载额外的包。read.table("/home/slave/test.txt",header=T,na.strings = c("NA"))注意,此处的na.strings = c("NA") 的意思
2016-09-16 19:45:36
89238
原创 Rsession让Java与R建立连接
接着上一篇文章《Rserve安装、配置和远程操控》,这篇文章主要是介绍如果使用Rsession来使Java与R建立连接,Rsession为Rserve的进一步封装,废话不多说,开始介绍。1. Rsession下载与配置Rsession的使用需要Rserve的Jar来支撑,所以需要的Jar包有:REngine.jar、RserveEngine.jar 和Rsession.jar,前两个Jar的下载配置
2016-09-04 23:36:32
3136
1
原创 Rserve安装、配置和远程操控
关于ubuntu下R的安装在上一篇博文《Ubuntu安装更新最新版本R》中已经讲过了,这篇博文主要介绍的是如何使用Java来调用R。1. Rserve的安装与配置 Rserve是个什么东西?从这个词面的意思来理解就是R的一个服务,主要是提供远程连接的服务,当然功能是很多的,具体可参考:https://rforge.net/Rserve/在安装Rserve之前确保R能够正常运行,并正确配置了R的环境
2016-09-04 16:55:34
5377
原创 Ubuntu安装更新最新版本R
最近项目遇到一个问题,Ubuntu中低版本的R无法很好的支持一些库,所以想升级R,但找了很多方法都不太合适,后来终于找到了解决的有效办法。1. 修改sources.list源文件 在 /etc/apt/sources.list 文件末尾根据系统版本添加相应的R源16.04 LTS deb https://cloud.r-project.org//bin/linux/ubuntu xenial
2016-09-02 22:12:01
3894
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人