51CTO博客开发
我们知道在关系型数据库里面事务有四个属性:原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的
这段时间一直在思考分布式事务的实现,一开始的思路总是停留在应用层面上,后来经过查看相关资料才知道,要支持分布式事务得需要数据库的支持,也就还是回到了数据库层面,另外在Java里面结合javax.sql扩展包里面使用两段提交协议能轻松支持分布式事务。 后来自己结合之前做过的一些项目,发现原来之前实现的功能已经利用消息队列
今天看到一个技术群里面聊到事务与并发的关系,发现好多开发者的理解不一样,想把自己再工作中遇到的例子在这里呈现出来,以告诉大家自己所理解的事务与并发,先简单说下流程吧! 我们公司的A,B系统通信使用的是ActiveMQ,主要是订单状态的通信,之前遇到的一个问题是A系统通过一个事务修改了订单的状态要通过ActiveMQ通知B系统,B系统收到
package test; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arr
本人博客搬家至 http://blog.csdn.net/chenyanxiliujun
从事Java多线程开发的程序员来说,了解Java的线程池实现原理是必不可少的,以下将会结合Java线程池代码来说明它的实现原理,首先,我们要思考:线程池的表现形式线程池里面的线程什么时候创建线程池里面的线程什么时候结束或者该不该结束线程池的实现原理说道Java线程池就不得不说ExecutorService接口和Executors类了,从源码上来看Executo
之前公司有个同事离职,然后我交接了他的一些项目,其中有一个日志项目,主要就是业务部门调用Client往服务器上传日志文件,这个过程使用了netty,问题很奇怪大致如下:1:一天中总有那么几个文件会上传失败报的异常信息是:20:08:03.937] WARN DefaultPromise - An excepti
最近花了一周的时间,写了一个可扩展的RPC框架,服务可扩展,协议可扩展,目前只有实现netty的服务,协议分别实现了hessian和java自带的序列化协议,后续有时间灰更新其他的服务以及协议,传输协议使用自己自定义的协议前四个字节表示长度,后一位字节表示协议内容长度,后面的字节表示协议,在后面的就是个序列化的Object了,废话不多说了,项目地址:开源中国地址:htt
这篇将会是持续更新的博客,因为这个主要记录自己在团队沟通中遇到的问题,现在把它记录下来,希望能找到共鸣的人。 之前一个项目部署到线上的时候出了点问题,我一直以为是数据库数据的问题,于是找了leader反应情况(因为数据库初始化是由他那边才有权限操作的),他那边一直都说数据没问题,肯定是我代码的问题,可是我知道代码从来都没变
我们一直在说并发编程,我们只知道JDK5有个并发编程包帮我们封装好了多线程下的复杂处理机制,这篇文章的重点不是说它的底层实现原理,只想说下并发包的编程模式思想,我以前一直在想这种思想来源于哪里,面向对象编程的好处应该就是能总结一种模式,只有定义了模式理解了模式,我们平常才能更好的理解一些复杂的编程,这就是抽象到理论的过程吧!我们的前辈把这些编程思想
之前在InfoQ看到一篇关于java重排序的一篇文章,觉得里面有些知识写得太绝对了,于是想通过实际程序来说明一下: 关于java重排序,这里就不做介绍了,我们知道JVM底层封装了与OS的交互,它内部有自己的一套类似于OS的内存模型,程序重排序的设计思路基本上是来源于OS跟硬件层面的设计。下面直接入正题吧! &nbs
import java.util.List; import java.util.Map; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsea
import java.util.List; import java.util.Map; public interface IIndexService<T> { /** * 插入数据 &nb
根据elasticsearch的API,首先,要创建一个客户端实例Client,代码如下 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.elasticsearch.clie
PS:这里使用的ES版本为1.3.0ES的集群搭建比较简单,主要是修改conf/elasticsearch.yml文件##################### Elasticsearch Configuration Example ##################### # This file contains 
这段时间一直在忙着重构公司之前的搜索业务这块,由于公司之前的搜索使用的是基于mysql的方案,因为里面涉及到一些主从搜索,分表搜索,索引整体上比较复杂,重构期间要花很多时间理解业务跟数据表之间的关系,理清之后呢,还要结合elasticsearch的特性开始重构整个搜索平台。 由于公司是使用Hessian搭建的RPC服务,拿到
由于这段时间忙于公司平台的搜索平台搭建的事情,所以一直没时间来写东西了,就把最近看设计模式里面的一些系统设计原则晒出来的,虽然有些观点还不能完全理解,我相信随着自己的项目经验越来越多,理解这些观点是迟早的事情:1:多用继承,少用组合2:为了交互对象之间的松耦合设计而努力3:封装变化,针对接口编程,不针对实现编程4:找出程序中会变化的方面,然后将其和不会变化的方
我们都知道jvm本身提供了很多的命令供使用者调用,有时候我们需要使用这些命令写一些脚本来执行我们的程序,首先说下以下脚本的目录结构:bin 脚本存放处lib 依赖的jar包存放处conf 依赖的配置文件存放处打好的可运行jar放在当前目录#!/bin/bash export JAVA_HOME=/usr/java export PATH=$
今天再看JDK源码的时候看到了String类的不同版本的实现方式的不同,主要是substring这个方法,JDK6里面的实现方式是:很明显可以看到,调用String对象的substring方法后指向的对象地址并没有发生改变,只是改变的是偏移量,这样的话在GC阶段就有可能造成内存泄露了。 还好查了一下资料JDK7解决了这个问题,于是赶紧查看了JDK7
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的
在很多情况下,访问一个程序变量(对象实例字段,类静态字段和数组元素)可能会使用不同的顺序执行,而不是程序语义所指定的顺序执行。编译器能够自 由的以优化的名义去改变指令顺序。在特定的环境下,处理器可能会次序颠倒的执行指令。数据可能在寄存器,处理器缓冲区和主内存中以不同的次序移动,而不是 按照程序指定的顺序。例如,如果一个线程写入值到字段a,然后写入值到字段b,而且b的值不依赖于a的值,那么,处理器就
之前在跑一个任务的时候,那个任务需要使用第三方的jar,关于这个jar可以再打包的时候嵌入到包中也可以查看hadoop-env.sh脚本里面有加载classpath的脚本语句:for f in $HADOOP_HOME/contrib/capacity-scheduler/*.jar; do if [ "$HADOOP_CLASSPATH" ];
早就想写一篇关于数据库主从复制的文章,今天利用一些琐碎的时间操作了一遍并记录下来:首先,我们必须思考,主从复制的大概步骤是什么,即使你不懂数据库这块,我想这个步骤好好想下还是知道的,我们知道数据库是跟用户关联的,那么首先必须建立一个用户,然后授权,这个用户在哪里建立呢?数据来源是主库,当然是在主库里面建立用户了,是的,然后需要利用数据库提供的命令在从库里面对在主库建立的用
前面的文章讲解了hadoop-2.2.0在64位linux系统下的编译步骤,以及zookeeper集群的部署,这篇主要写hadoop集群的部署,因为关于这方面的资料比较多这里就写主要的步骤:1:主机对应关系centos01192.168.6.180(master)centos02192.168.6.181(slave)centos03192.168.6.182(slav
最近一直在开发移动端的接口,在内部测试的时候发现这么个奇怪现象: 现象: 一部Android手机访问服务器响应没什么问题,当使用两部Android手机同时访问的时候会出现有一部手机访问不了接口的现象。 解决思路: 遇到这种问题首先想到的是使用
好久没写技术博客了,因为之前一直在开发跟公司内部业务相关的接口以及项目,感觉大多是跟公司具体业务相关的东西,因此不方便在此公开记录下来。今天抓住休息的时间想在工作之余给自己补充一点大数据的知识(工作上暂时用不到)在自己电脑上安装了6台虚拟linux系统,然后在这个6台机器上分别部署了zookeeper集群以及hadoop-2.2.0集群,部署zookeeper集群相对来说
在Java里面,我们经常使用JSON格式的工具包对字符串或者对象进行解析,一般用得比较广泛的三种分别为:fastJson,jackJson,Gson,关于各个工具包的性能比较网络上比比皆是,在这里我只阐述在我本机环境下的测试结果,然后在根据结果对三种工具包进行一个解析,首先先贴代码:import java.util.Map; import org.c
本网站的博客将要迁移至: http://my.oschina.net/u/143244
最近在看一下跟开发无关的知识,主要就是想让自己的学习更加深入一些,结合之前在看的Mina与Netty的源码,萌发了自己对ISO分层的一些思考,首先,关于四元组跟五元组,我们知道一般企业公司的电脑都在一个局域网内,大家基本上是共用一个对外的私有IP,那这样的就就会有个问题出现了,在同一局域网内四元组的源IP地址是一致的,那怎么保持TCP连接呢?带着这个疑问去补习了毕业后丢
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号