Archive: 2016

MySQL锁机制总结

实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的RD

spring+rabbitmq+protobuf

好久没有用Java写过东西了,感觉都手生了。最近项目中需要用到rabbitmq作为消息队列,在各个模块和服务之间发送Protobuf类型的消息。这里记录一下简单的接入过程,以及碰到的坑。 RabbitMQ Mac上的简单安装1234brew install rabbitmq#启用RabbitMQ UI management: http://localhost:15672/usr/local/Cel

maven-shade-plugin解决包冲突问题

使用Maven做依赖包管理的时候,经常如下问题:A和B都依赖一个第三方库(分别是V1和V2), 但是V1和V2又是不兼容的,这个时候就很蛋疼了。比如Guava 1.2和1.8就是不兼容的。 这个时候可以用maven-shade-plugin将A或者B打成一个独立的jar包来解决。 maven-shade-plugin 在打包时,可以将项目中依赖的 jar 包中的一些类文件打包到项目构建生成的 ja

排序去重

场景:对数组进行排序和去重java 8 stream实现12345List<String> list = Arrays.asList("EE", "AA","AA","BB");list.stream() .distinct() .sorted() .forEach(x -> System.out.println(x)); 二叉树实现思路

Shipyard Docker management

Shipyard是一个高效的Docker容器管理工具,下面简单介绍一下利用docker-machine创建swarm集群的步骤 利用Docker machine创建3个Node前提要安装Docker tool box和VirtualBox123docker-machine create --driver virtualbox masterdocker-machine create --driver

Dockerfile命令

CMDCMD命令用于指定一个容器启动时要运行的命令,和RUN指令有点类似。不过RUM命令是指镜像被构建时要运行的指令,而CMD是指容器被启动时要运行的命令。这和docker run命令启动的时候指定的运行命令非常类似,并且docker run命令启动时指定的运行命令会覆盖CMD命令。例如Dockerfile中的如下CMD命令:1CMD ["/bin/bash"] 如果以下面的方

Golang-基于reflect和tag自动填充struct数据

用Go开发Server端提供一些JSON数据格式的API,会定义业务Model,同时标记其json名字。1234type School struct { ID int `json:"id"` Name string `json:"name"`} 通常也会复用这个Model来接收创建或者更新请求的参数。1234567var

MongoDB两阶段提交实现事务

MongoDB数据库中操作单个文档总是原子性的,然而,涉及多个文档的操作,通常被作为一个“事务”,而不是原子性的。因为文档可以是相当复杂并且包含多个嵌套文档,单文档的原子性对许多实际用例提供了支持。尽管单文档操作是原子性的,在某些情况下,需要多文档事务。在这些情况下,使用两阶段提交,提供这些类型的多文档更新支持。因为文档可以表示为Pending数据和状态,可以使用一个两阶段提交确保数据是一致的,在

谷歌两步验证

谷歌验证(Google two-factor Authenticator)通常来讲,身份验证系统都实现了基于时间的一次性密码算法,即著名的TOTP(Time-Based One-Time Password)。该算法由三部分组成: 一个共享密钥(一系列二进制数据)一个基于当前时间的输入一个签名函数 共享秘钥用户需要开启Google Authenticator服务时: 服务器随机生成一个类似于『DP

Go高性能编程技巧

原文: http://studygolang.com/articles/6859 ChannelsChannel在Go语言中受到了很多的关注,因为它是一个方便的并发工具,但是了解它对性能的影响也很重要。在大多数场景下它的性能已经“足够好”了,但是在某些延时敏感的场景中,它可能会成为瓶颈。Channel并不是什么黑魔法。在Channel的底层实现中,使用的还是锁。在没有锁竞争的单线程应用中,它能工作