自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

转载 分布式系统事务一致性解决方案

开篇在OLTP系统领域,我们在很多业务场景下都会面临事务一致性方面的需求,例如最经典的Bob给Smith转账的案例。传统的企业开发,系统往往是以单体应用形式存在的,也没有横跨多个数据库。我们通常只需借助开发平台中特有数据访问技术和框架(例如Spring、JDBC、ADO.NET),结合关系型数据库自带的事务管理机制来实现事务性的需求。关系型数据库通常具有ACID特性:原子性(Atomicity...

2018-02-24 15:46:27 341

原创 轮训、长轮训、长连接

轮询:客户端定时向服务器发送请求,服务器接到请求后马上返回响应信息并关闭连接。 优点:后端程序编写比较容易。 缺点:请求中有大半是无用,浪费带宽和服务器资源。 长轮询:客户端向服务器发送请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。 优点:在无消息的情况下不会频繁的请求,耗费资源小。 缺点:服务器hold连

2017-10-30 15:26:23 2469

转载 MySQL事务的隔离级别

Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。支持降级、熔断、隔离等高可用特效。下面一一介绍。一、基本用法将需要封装接口,继承HystrixCommand,并实现run()方法。HystrixCommand支持4种调用方式。1、execute():以同步堵塞方式执行run()。以demo为例,调用execute()后,hystrix先创建一个新线

2017-07-19 16:23:45 373

原创 HystrixCommand vs HystrixObservableCommand

Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。支持降级、熔断、隔离等高可用特效。下面一一介绍。一、基本用法将需要封装接口,继承HystrixCommand,并实现run()方法。HystrixCommand支持4种调用方式。1、execute():以同步堵塞方式执行run()。以demo为例,调用execute()后,hystrix先创建一个新线

2017-07-14 14:31:27 3593

原创 Hystrix常见用法说明

Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。支持降级、熔断、隔离等高可用特效。下面一一介绍。一、基本用法将需要封装接口,继承HystrixCommand,并实现run()方法。HystrixCommand支持4种调用方式。1、execute():以同步堵塞方式执行run()。以demo为例,调用execute()后,hystrix先创建一个新线

2017-07-14 14:16:44 2583

原创 JStorm部署备忘

1、部署zookeeper下载zookeeper 编辑zoo.cfg, 启动zookeeper如果集群部署,需要在zookeeper 目录新建myid文件,zookeeper的zab leader选举算法使用。2、部署Jstorm下载jstorm,并解压编辑/etc/hosts,配置机器名与IP的映射。10.19.182.153 10-19-182-153127.0.0.1 loca

2017-07-10 11:26:24 710

原创 Spark Pipe调用外部程序

spark 中,有种特殊的Rdd,即pipedRdd,提供了调用外部程序如基于CUDA的C++程序,使其能够更快的进行计算。caffe on spark 和tensorflow on spark 也是基于此机制,那么,spark 和 外部程序是怎么交互的呢? 下面通过一个简单的例子验证。步骤1:创建外部脚本#!/bin/shecho "Running shell script"while rea

2017-07-07 16:00:13 3716 1

转载 MySQL 处理海量数据时的SQL语句调优

在参与实际项目中,当 MySQL 表的数据量达到百万级时,普通的 SQL 查询效率呈直线下降,而且如果 where 中的查询条件较多时,其查询速度无法容忍。想想可知,假如我们查询淘宝的一个订单详情,如果查询时间高达几十秒,这么高的查询延时,任何用户都会抓狂。因此如何提高 SQL 语句查询效率,显得十分重要。查询速度慢的原因1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I

2017-06-26 14:41:10 460

原创 ISO8601时间转换

最近处理logstash的日志,其中的时间是ISO8601格式的,需要对其转换。 查了下资料,下面给出java和python的实现。java实现引入joda-time,jdk的时间处理实现很麻烦。 <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artif

2017-06-26 11:24:31 13462

原创 Rocket MQ consumer 源码分析(绝对干货)

在使用rocket mq 的时候,接触最多的还是consumer端。在实际使用的时候,踩过不少坑,如订阅关系不一致、广播消息重复消费等,因此,是时候对rocket mq的源码进行一下分析了。消息订阅当consumer订阅topic时,例如 consumer.subscribe(“TopicTest”, “*”); 实际上,源码里只是将订阅消息放到rebalanceImpl对象的subscript

2017-05-04 12:17:07 4134

原创 Spring事务的“坑”

最近在项目中发现了个严重的bug,添加事务@Transactional的方法,并没有生效。这样,虽然事务中有for update行级锁,但没有生效,导致数据不一致。 经过调查,如果标记为@Transactional的函数,如果从同一个bean内部调用,则事务不生效。下面是spring官方文档的说明:Method visibility and @TransactionalWhen using pro

2017-04-07 16:06:42 790

原创 DBSCAN 聚类算法

dbscan算法是一种基于密度聚类的算法。核心概念核心点:若某个点的密度达到算法设定的阈值(即 r 邻域内点的数量不小于 minPts),则其为核心点。 直接密度可达:若某点p在点q的 r 邻域内,且q是核心点,则称p从q出发直接密度可达。 密度可达:若有一个点的序列q0、q1、…qk,对任意qi从qi-1出发是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。

2017-03-08 20:34:03 708

原创 StampedLock的使用

由于ReadWriteLock存在严重的性能问题,甚至在很多情况下比synchronized要慢,Java8新出了StampedLock,这个锁不仅更快,而且它提供强大的乐观锁API,这意味着你能以一个较低的代价获得一个读锁, 在这段时间希望没有写操作发生,当这段时间完成后,你可以查询一下锁,看是否在刚才这段时间是否有写操作发生?然后你可以决定是否需要再试一次 或升级锁或放弃。悲观用法悲观用法和Re

2017-03-06 17:31:52 1771

原创 JAVA并行流的性能“陷阱”

从java8开始,并行编程变得很容易,通过并行流(parallelStream),可以很轻松的实现多线程并行处理。但是,这里面有个性能“陷阱”,如果不注意,使用并行流的效果反而更差,这个陷阱是什么呢?这个陷阱就是,并行流默认都是用同一个默认的ForkJoinPool,这个ForkJoinPool的线程数和CPU的核心数相同。如果是计算密集型的操作,直接使用是没有问题的,因为这个ForkJoinPoo

2017-03-06 13:56:47 7652 4

原创 tomcat高并发优化

公司的运行websocket 的tomcat 需要支持1000+长连接,需要对此进行优化。经过半天得实验,优化点主要有三处。 1、设置JVM堆内存。 方法:vim catalina.sh,在文件头添加 JAVA_OPTS=’-Xms2048m -Xmx2048m’2、设置tomcat为NIO方式,并增大线程数(默认BIO,线程数过多,无法支撑1000+个并发)。 方法:修改 Server.xm

2017-03-01 19:56:51 2034

翻译 PG数据库事务隔离级别

事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:脏读(dirty read):事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。幻读(phantom read):事务T1读取一条指定where条件的语句,返回结果集。此

2017-02-10 14:05:04 1694

转载 学习(复习)数据结构的一个好网站

如题,http://www.cs.usfca.edu/~galles/visualization/flash.html 可视化学习,值得推荐!!!

2017-02-09 19:40:40 435

原创 hadoop(2.7.3) 源码分析--RPC部分

hadoop(2.7.3) 源码分析,RPC

2017-02-02 16:58:02 1206

原创 leveldb对skiplist的使用

关于skiplist(跳表),原理很简单,网上有很多介绍,这里不再阐述。 本文主要介绍leveldb如何使用skiplist。 leveldb使用skiplist的地方主要在memtable。源码主要在skiplist.h 、memtable.cc和dbformat.cc里。 先看skiplist.h:template<typename Key, class Comparator>class

2016-09-13 20:17:31 1540

原创 JAVA SortedSet的坑

今天在用ConcurrentSkipListSet的时候,发现有些对象在调用add方法时,返回false。调用contains方法返回true,说明元素在set中已经存在了,但实际上没有。首先,我先查看java帮助,contains方法是这么说的: “Returns true if this set contains the specified element. More formally, re

2016-09-07 15:53:03 2346 1

原创 逻辑回归(LogisticRegress)

1、逻辑回归原理 和线性回归很像,逻辑回归将多元线性函数的结果,再通过sigmod激活函数进行运算,从而将结果压缩至0-1区间,该区间表示事件是否发生的概率。 2、公式推导 sigmod函数定义如下: 设线性方程为: 则预测函数H为: 注意:hθ(x)函数的值表示结果取1的概率,写成条件概率形式,则为: 注意:y只能取0或1,当为1时,该式为hθ(x),为0时,

2016-09-06 15:23:10 1526

原创 scala实现wordcount

这里给出两种方式,供初学者参考。 方式一:val lines = List("show me the money", "show me the meaning of being lonely", "triple kill", "mega kill","monster kill","holy shit")val map = lines.flatMap { line => line.split(" "

2016-09-06 13:12:31 953

原创 scala集合操作

scala有强大的集合操作函数,网上有不少例子,但部分例子存在错误。我对常用操作做了些整理,并通过实际运行确保结果的正确性。好了,上代码:object try4 { def main(args: Array[String]) { println("=========================常用操作符===================") val left = L

2016-09-06 13:04:25 1918

原创 JAVA8 函数式编程小结

java8终于引入了lambda表达式及有限的函数式编程,下面我对这些常用的操作做下小结。 1、map操作 对每个元素执行一个变换操作。很简单,不解释。 2、flatmap操作 先执行map操作(map操作必须返回集合),再将map操作返回的集合进行flaten操作。 3、groupingBy操作 聚合操作,把key相同的集合到一起,返回值为map。 下面通过wordcount 来展示

2016-09-05 23:27:05 1534

原创 AKKA Cluster 原理及实战

Akka集群支持去中心化的基于P2P的集群服务,没有单点故障(SPOF)问题,它主要是通过Gossip协议和向量时钟(VECTOR CLOCKS)来实现。对于集群成员的状态,Akka提供了一种故障检测机制,能够自动发现出现故障而离开集群的成员节点,通过事件驱动的方式,将状态传播到整个集群的其它成员节点。关于GOSSIP PROTOCOL和向量时钟(VECTOR CLOCKS): akka使用了一种

2016-09-05 22:31:09 7466

原创 线性回归LinearRegress

线性回归,实际上是做拟合,即根据样本X和观测值Y,回归出一个公式,使残差的平方和达到最小值。 观测值Y和样本X1……Xn的关系为: Y=b0+b1x1+……+bnxn 残差平分和为: 通过求导来求极值,对b0,b1….依次求偏导,可得 把负的部分移到等号右边,可得 如果用矩阵A来表示系数,可得 * 等号右边也用矩阵表示,可得 由于Ab=D b = A-1*D=(X‘X

2016-09-05 16:04:36 917

原创 动态规划经典问题:寻找最长公共子序列

该问题为动态规划的经典问题。输入两个字符串,如cnblogs和belong,则最长公共子序列为blog。        设序列X=和Y=的一个最长公共子序列Z=,则:       1. 若xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的最长公共子序列;       2. 若xm≠yn且zk≠xm ,则Z是Xm-1和Y的最长公共子序列;       3.

2015-01-19 21:54:06 570

原创 2014.12面试总结

之前换工作,总是骑驴找马,所以面试的公司不多,因为面试是需要请假的。今年12月,由于自己突然被裁掉,因此时间比较充裕,面试了10几家公司,下面谈谈面试的心得与体会。关于技术面试,由于本人经验比较丰富了,不少公司都没有笔试了。技术面试的内容大概包括以下知识点:1, 编程语言基础。以C++为例,主要涉及OOP的三特征:封装,继承,多态构造函数与析构函数:调用顺序,拷贝构

2015-01-19 21:41:36 386

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除