<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[iteye_2355的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/iteye_2355</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iteye_2355]]></copyright><item><title><![CDATA[将博客搬至优快云_http://blog.youkuaiyun.com/surlymo]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82647127</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82647127</guid><author>iteye_2355</author><pubDate>Wed, 03 Feb 2016 15:19:04 +0800</pubDate><description><![CDATA[
RT
]]></description><category></category></item><item><title><![CDATA[博客迁移。请移步http://surlymo.github.io/]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82610896</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82610896</guid><author>iteye_2355</author><pubDate>Wed, 10 Dec 2014 00:36:25 +0800</pubDate><description><![CDATA[RT]]></description><category></category></item><item><title><![CDATA[【大型网站技术架构笔记】（一）演化过程]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82605076</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82605076</guid><author>iteye_2355</author><pubDate>Sun, 21 Sep 2014 20:57:13 +0800</pubDate><description><![CDATA[
开篇明义：
【大型网站技术架构笔记】系列是阅读《大型网站技术架构核心原理与实践》一书的一些笔记，记录了原书的一些重要内容以及我的个人理解。其中很多内容网上都能找得到。其实整本书，我最赞同的是作者阐述的网站架构的价值观——“业务成就技术，而不是相反”。在没有业务场景的时候就一味追逐架构，为技术而技术，或者一上来就想要设计出一个可以适用所有场景的解决方案，是不理智的。我们有的时候可能会陷入技术的...]]></description><category></category></item><item><title><![CDATA[JVM学习笔记（一）]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82605011</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82605011</guid><author>iteye_2355</author><pubDate>Fri, 19 Sep 2014 21:51:48 +0800</pubDate><description><![CDATA[
1、JDK和JRE的区别JDK是开发库，而JRE只是运行环境。JRE没有编译器，也没有JAVA API里面非JAVASE API的部分等。eclipse之所以用jre也能运行，是因为IDE内部集成了编译器。2、运行时数据区域（1）程序计数器（program counter register）    存储字节码指令的地址。如果是java方法，则记录对应的地址，如果是native方法，则为undef...]]></description><category></category></item><item><title><![CDATA[分布式锁的三种实现方式]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82583003</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82583003</guid><author>iteye_2355</author><pubDate>Thu, 19 Jun 2014 18:04:53 +0800</pubDate><description><![CDATA[
一、zookeeper
1、实现原理：
基于zookeeper瞬时有序节点实现的分布式锁，其主要逻辑如下（该图来自于IBM网站）。大致思想即为：每个客户端对某个功能加锁时，在zookeeper上的与该功能对应的指定节点的目录下，生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单，只需要判断有序节点中序号最小的一个。当释放锁的时候，只需将这个瞬时节点删除即可。同时，其可以避免服务宕机导致的...]]></description><category></category></item><item><title><![CDATA[memcached限制以及与reids的比较]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82582976</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82582976</guid><author>iteye_2355</author><pubDate>Thu, 19 Jun 2014 14:26:36 +0800</pubDate><description><![CDATA[
一、memcached限制
在分布式企业级应用中，memcached被广泛使用。但是关于它自身的一些限制需要我们了解：1、过期时间memcached的缓存策略为：失效时间 + LRU(最近最少使用)。其过期时间设置上限阈值为30天，若超过30天后，将获取不到存储的数据。2、数据稳定性memcached需要保证集群的内存空间足够大，否则内存满了之后，会采用LRU置换算法，将部分数据清除，加上其...]]></description><category></category></item><item><title><![CDATA[单测中隔离每个case对DB数据操作]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82571695</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82571695</guid><author>iteye_2355</author><pubDate>Sat, 08 Mar 2014 20:07:31 +0800</pubDate><description><![CDATA[
在公司项目中对单测框架做升级的时候，引入了h2数据库，同时希望每个case在访问h2做读写操作之后，不会影响下一个case对h2的数据访问。
 
1、最先想到的肯定是dbunit和unitils，但经过调研，发现和现有单测框架存在测试入口不一致、构造数据过程繁琐、xml导入的方式或者xsl的方式相比于SQL脚本来说更加麻烦等问题，所以就否了。
 
2、其次想到的是采用事务管理，spri...]]></description><category></category></item><item><title><![CDATA[rabbitmq学习笔记]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82568102</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82568102</guid><author>iteye_2355</author><pubDate>Sun, 26 Jan 2014 15:15:03 +0800</pubDate><description><![CDATA[
前一阵子写SEDA异步框架的时候，使用了rabbitmq作为分布式消息队列（见前文），把一些学习官网教程的笔记简单备忘。示例都来自官网
 
Part 2 Work Queues
 

1、round-robin dispatchering  
缺陷：存在不能准确负载均衡的弊端
2、fair dispatch  --&amp;gt; 针对管道
采用channel.basicQos(pref...]]></description><category></category></item><item><title><![CDATA[格式化代码、风格检查、代码漏洞检查以及UT覆盖率检查]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82568094</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82568094</guid><author>iteye_2355</author><pubDate>Sun, 26 Jan 2014 13:21:15 +0800</pubDate><description><![CDATA[
    在敏捷开发中，随着文档地位不断被削弱，此时代码的可读性和质量往往成为直接决定项目是否健壮可维护的关键。这就要求我们的代码具有良好的风格（包括注释、命名等）、代码格式标准、程序没有非法调用和低级bug，以及用以对功能进行解释的单元测试能够尽可能多地覆盖核心功能。如果每次我们都手动去依次检查这些点是否达标，那持续集成将变得无比缓慢。更遑论持续交付了。
    所以在持续集成（CI）的过程...]]></description><category></category></item><item><title><![CDATA[【SEDA异步框架】【四】异步框架总体设计与实现]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82566750</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82566750</guid><author>iteye_2355</author><pubDate>Mon, 13 Jan 2014 11:43:17 +0800</pubDate><description><![CDATA[
基于SEDA的异步框架设计与实现
四、异步框架总体设计与实现
 1、框架中的stage理想结构
       前文提到，基于SEDA的异步框架，一个stage的理想结构描述如下：
      
       在这个框架的设想中，一个stage一般需要有如下几个组件：
       1、D-MQ：分布式消息中间件。用做事件队列，以进行消息的传递。
       2、Local-Qu...]]></description><category></category></item><item><title><![CDATA[【SEDA异步框架】【三】异步框架技术选型]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82566351</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82566351</guid><author>iteye_2355</author><pubDate>Thu, 09 Jan 2014 15:18:27 +0800</pubDate><description><![CDATA[
基于SEDA的异步框架设计与实现
三、异步框架技术选型
       在这次实现的SEDA异步框架中，采用的基础架构原型如下：
        采用了spring+quartz+fastjson+rabbitmq来实现。和传统SEDA架构区别比较大的地方在于：
        1、采用分布式mq（使用了rabbitmq）而不是blockingqueue。如此既可以支持以后可能进行的分布...]]></description><category></category></item><item><title><![CDATA[【SEDA异步框架】【二】为什么使用SEDA]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82566268</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82566268</guid><author>iteye_2355</author><pubDate>Wed, 08 Jan 2014 21:17:26 +0800</pubDate><description><![CDATA[
基于SEDA的异步框架设计与实现
 
 
 
二、为什么使用SEDA
 
       目前，面对并发环境，主流互联网服务器编程模型有两种：多线程模型以及事件驱动模型。但是这两个模型都不足以解决这个问题。我们来首先看一下这两种编程模型。
 
1、多线程并发模型    
       多线程并发模型是目前最普遍的服务器编程模型，该模型的架构如下图所示：        该模型针对...]]></description><category></category></item><item><title><![CDATA[【SEDA异步框架】【一】SEDA国内外研究现状]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82566267</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82566267</guid><author>iteye_2355</author><pubDate>Wed, 08 Jan 2014 20:58:45 +0800</pubDate><description><![CDATA[
 
基于SEDA的异步框架设计与实现
 
一、SEDA国内外研究现状
1、SEDA架构的起源和特点    当前最流行的互联网服务器模型基本都是基于多线程／进程并发服务模型。然而当线程数目增加到一定值后，系统性能会下降，这就限制了系统支持高并发请求的能力。这种缺陷是多线程／进程本身的架构造成的。加州大学伯克利分校的Matt Welsh提出了一种新的服务器软件架构SEDA。SEDA是Sta...]]></description><category></category></item><item><title><![CDATA[在linux环境中安装rabbitmq出现的错误]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82565347</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82565347</guid><author>iteye_2355</author><pubDate>Fri, 03 Jan 2014 15:46:45 +0800</pubDate><description><![CDATA[
安装了erl之后，在将rabbitmq搭建到linux服务器的时候，根据在windows搭建的经验，本以为可以几下搞定，结果启动不断地报错误（plugins启用了web管理界面），到google上找了一圈也没看到合理的解答，而其错误log为erlang的crash.dump文件，阅读起来太过困难。
后来才开始将怀疑点集中在内核、erlang以及rabbitmq的版本问题上。在更换内核到新版本...]]></description><category></category></item><item><title><![CDATA[Spring依赖配置化管理]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82564805</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82564805</guid><author>iteye_2355</author><pubDate>Mon, 30 Dec 2013 15:11:02 +0800</pubDate><description><![CDATA[图省事在开发新系统的时候把老工程拿来改造，由于老工程有不少版本不一致的spring组件依赖，导致在加入新spring依赖的时候，各种jar包冲突，什么接口不能被初始化，什么找不到方法等等的。

比如
[code=&quot;java&quot;]java.lang.NoSuchMethodError: org.springframework.context.support.AbstractRefreshable...]]></description><category></category></item><item><title><![CDATA[Quartz框架使用时候异常原因记录]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82564425</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82564425</guid><author>iteye_2355</author><pubDate>Thu, 26 Dec 2013 23:27:02 +0800</pubDate><description><![CDATA[在公司做的项目所搭建框架中需要使用定时器功能，但是对于Quartz需要配置的一大坨配置不感冒，采用配置则无法很好与框架耦合。于是参阅同事代码采取了非配置的写法。

有几个需要注意的：
1、Job不能为内部类，否则无法初始化
2、保证spring升级到新版本。如果使用老版本比如3.0.5，则会出现如下异常：
[code=&quot;java&quot;]java.lang.IncompatibleClassC...]]></description><category></category></item><item><title><![CDATA[一致性哈希原理与实现]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82554381</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82554381</guid><author>iteye_2355</author><pubDate>Fri, 20 Dec 2013 15:25:57 +0800</pubDate><description><![CDATA[实现集群软负载均衡时候可以使用。实现感觉有点类似zookeeper关于共享锁和主从选择的算法。都是通过有序且唯一的节点来实现的。


相关资料：

一致性哈希原理
1、http://blog.youkuaiyun.com/sparkliang/article/details/5279393
一致性哈希的JAVA实现（hash采用了murmurhash算法）
2、http://www.blogj...]]></description><category></category></item><item><title><![CDATA[linux安装mysql客户端问题总结]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82525246</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82525246</guid><author>iteye_2355</author><pubDate>Tue, 13 Aug 2013 19:10:25 +0800</pubDate><description><![CDATA[在linux上安装mysql，直接从测试机上scp过来的mysql目录，出了一些问题，备忘一下出现的问题和解决方案：


1、发现找不到
libmysqlclient.so.15  
libmysqlclient.so.15.0.0
解决方案：在你的.bash_profile文件中加入
[code=&quot;java&quot;]export LD_LIBRARY_PATH=&quot;xxxx/mysql/l...]]></description><category></category></item><item><title><![CDATA[Hibernate使用问题记录]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82408190</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82408190</guid><author>iteye_2355</author><pubDate>Mon, 10 Sep 2012 15:16:51 +0800</pubDate><description><![CDATA[复习hibernate的时候老混淆了@joincolumn的用法。mark一下。原文地址http://blog.youkuaiyun.com/angryant/article/details/5495810


@ManyToOne中是在本类对应的数据库表中生成

例如

[code=&quot;java&quot;]@Entity  
@Table(name=&quot;score&quot;)  
public class S...]]></description><category></category></item><item><title><![CDATA[ThreadPoolExecutor和CyclicBarrier配合使用可能带来的隐患]]></title><link>https://blog.youkuaiyun.com/iteye_2355/article/details/82373740</link><guid>https://blog.youkuaiyun.com/iteye_2355/article/details/82373740</guid><author>iteye_2355</author><pubDate>Sat, 21 Jul 2012 04:04:47 +0800</pubDate><description><![CDATA[今天是很蛋疼的一天，排查一个bug排查了4个多小时。

情形简化之后大概是这样的：

我使用了spring的ThreadPoolTaskExecutor来进行并发时候的异步处理。并且给任务Runnable加上了CyclicBarrier，以达到让所有线程处理完之后再进行主线程的下一步操作的目的。其中executor的配置如下：

[code=&quot;java&quot;]	
		
		
		
...]]></description><category></category></item></channel></rss>