
java
文章平均质量分 81
iamzhongyong
这个作者很懒,什么都没留下…
展开
-
池和流的两种数据处理方式
在抽象层面,想了一下,目前很多的数据处理形式,一般分为池和流两种方式。 Pool池,最简单的理解,就是数据先流过来,我用一个池子存下来,之后再从池子里捞出来进行加工处理。 Pipeline管道流,在数据流动或者请求流动的过程中,在pipeline中添加Valve进行处理 ,这样在流的时候,经过处理。...2014-11-19 22:59:23 · 245 阅读 · 0 评论 -
关于AOP的种种疑问
最近在用AOP做一个小东西,于是开始翻阅一些AOP的资料,中间解决了自己的一些疑问,记录下来。 什么是AOP? 其实早就知道呵呵,这里作为引子吧。AOP是面向切面的编程。最大的好处就是对于已有的系统弱侵入。现在用处比较多的就是数据库事务管理、日志处理、性能监控等等方面。因为这些东西足够公共,可以抽取出来,减少对于系统的侵入。 ...2013-08-09 00:17:58 · 91 阅读 · 0 评论 -
关于java协程和kilim的一些概念
最近了解了一下基于协程来做异步话的场景。一些基本概念写在这里。 多任务调度方面,操作系统怎么搞的? 一种是抢占式,指操系统给每个任务一定的执行时间片,在到达这个时间片后,如果任务仍然没有释放对CPU的占用,则操作系统强制释放,这是目前多数操作系统实现的方式。 一种是协作式,指操作系统按照任务的顺序来分配CPU,每个任...2013-07-31 21:27:02 · 241 阅读 · 0 评论 -
Btrace中的几个关键技术
使用Btrace已经一段时间了,对于原理一直处于比较模糊的状态,最近有时间来进一步看代码,所以打算写一下。 类似Btrace的工具目前不少,例如housemd,以及很多基于Btrace的扩展。本来考虑搞一个源码分析的,但是发现没那么多经历,万变不离其宗,还是看一下基本的原理吧。 1、JDK6中的Instrucment (java扩展组件) ...2013-07-29 21:30:17 · 145 阅读 · 0 评论 -
看CopyOnWriteArrayList源代码之后
最近写代码的时候傲然F3点进去看了一下源代码,看了之后有几个问题,然后找资料解决了,记录一下。 CopyOnWriteArrayList在写的时候复制整个数组,这样操作其实比较耗时,所以这个List适合写少读多的并发场景,此时有很好的性能。 读操作(get(),indexOf(),isEmpty(),contains())不加任何锁,而写操作(set(),ad...原创 2013-02-22 18:52:24 · 169 阅读 · 0 评论 -
java中记录方法调用时间,结果按照方法的层级树状的输出
在java中,最常用的埋点时间的方法就是在方法运行前搞个常量记录当前时间,然后再方法结束的时候,搞个常量记录当前时间,然后两个的时间差就是方法的消耗时间。 这种处理问题不大,但是有时候我们想达到这样的效果,就是把树状的结构也搞出来。这样有层次,排查性能问题会非常方便。 1230 [0ms] - rootMethod...2013-12-21 17:36:48 · 483 阅读 · 0 评论 -
一次CMS GC问题排查过程(理解原理+读懂GC日志)
这个是之前处理过的一个线上问题,处理过程断断续续,经历了两周多的时间,中间各种尝试,总结如下。这篇文章分三部分:1、问题的场景和处理过程;2、GC的一些理论东西;3、看懂GC的日志先说一下问题吧问题场景:线上机器在半夜会推送一个700M左右的数据,这个时候有个数据置换的过程,也就是说有700M*2的数据在heap区域中,线上系统超时比较多,导致了很严重(严重程度就不说了)的问题。...2013-12-14 22:21:57 · 1291 阅读 · 0 评论 -
无线测试产品试用记录
最近无意间关注了几款无线app自动化测试的产品(http://www.36kr.com/p/201041.html ),把自己前段时间搞的app上传进行了测试。自动化测试是一个永恒的话题,解放劳动力,避免简单的重复操作,尤其是目前android市场中手机品牌和种类很多(品牌不同,系统版本不同,屏幕大小和分辨率不同),要想人肉全部覆盖,实在是一件痛苦的事情。 ...原创 2013-02-01 11:35:17 · 192 阅读 · 0 评论 -
令牌桶算法和漏桶算法以及流量控制浅谈
在双十一等大促环节,系统需要限流,外部需要在我制定的速率限制来调用(超出的流量直接挡掉,系统不进行处理),有没有理论依据呢?这里看了两个算法约定访问速率是流量管理中比较常用的方法之一,令牌桶算法,是目前最常用的流量限制的方法。 什么是令牌桶算法? 令牌桶算法是网络流量整形(Traffic Shaping)和速...2013-11-27 23:20:43 · 1395 阅读 · 0 评论 -
使用guava带来的方便
guava是在原先google-collection 的基础上发展过来的,是一个比较优秀的外部开源包,最近项目中使用的比较多,列举一些点。刚刚接触就被guava吸引了。。。 这个是guava的一个官网ppt里面的介绍:12345其实你可能发现,一些基本的校验完全可以自己写,但是。。这些东西仅仅是看起来比较简...2013-11-27 00:23:39 · 204 阅读 · 0 评论 -
JVM中Perm区持续上涨问题
公司一位大牛在微博上的一条,打算消化一下,毕竟今后Perm区的上涨还是有可能遇到的。“Java应用Perm区一直呈上涨趋势的原因可以用一个简单的办法排查,就是用btrace去跟踪下是什么地方在调用ClassLoader.defineClass,在大多数情况下这招都是管用的。”(1)Perm区存放的啥信息? Perm叫做持久代,存放了类的信息、类的静态变量、类中fi...原创 2013-01-23 14:02:06 · 426 阅读 · 0 评论 -
服务范围在空间维度如何逐步细化
这篇文章是一个思路,陆续接触空间范的细化过程中的体会和一些实践。抛出来供大家拍砖。 概述 本文的例子是拿物流公司的配送来展开,大家都知道,物流是一个空间属性很强的行业,有些地方能够送到,有些地方送不到,有些服务在一些去也没法履行,而这个时候,我们应该怎样做,才能满足这个需求呢?且看本文逐步道来。 首先国家标准行...2013-07-04 01:02:22 · 240 阅读 · 0 评论 -
互联网网站的反爬虫策略浅析--转载
今天路上时间有点长,路上看了一篇robbin一篇很早的博客,觉得不错,扩展了视野,总结一把,顺便转载呵呵。防止爬虫干扰正常访问的方法:1、监控TCP连接(netstat查看80的端口),这个比较常用;2、分析web请求中的User-Agent和refer信息;3、搞个计数器,把特定ip一天内的总次数和每秒内的频率记录下来,达到实时拦截的目的(这个类似淘宝的TMD,用分布式缓存...原创 2013-01-11 11:46:39 · 116 阅读 · 0 评论 -
android开发菜鸟遇到的炕
最近公司组织进行无线开发大赛,旨在提升团队的无线开发能力,还有大奖呵呵,抱着学习的态度,也没想拿奖,就一个人报名了,服务端和客户端自己搞定,作为服务端开发经验丰富,一天多的时间就搞定了,但是android的开发花了很多时间,中间有很多坑,最后也算能够交差了。 开发环境搭建就不写了,网上资料很多,大致就是下载android 的SDK,添加android开发的e...原创 2013-01-09 16:24:09 · 112 阅读 · 0 评论 -
java分布式系统开关功能设计(服务升降级)
首先讲一下开关的由来,例如东京在6月18日做店庆促销活动,在交易下单环节,可能需要调用A、B、C三个接口来完成,但是其实A和B是必须的,C只是附加的功能(例如在下单的时候做一下推荐),可有可无,在平时系统没有压力,容量充足的情况下,调用下没问题,但是在类似店庆之类的大促环节,系统已经满负荷了,这时候其实完全可以不去调用C接口,怎么实现这个呢?改代码?no,no,no,这样太...2013-07-03 01:04:35 · 355 阅读 · 0 评论 -
CPU上下文切换的次数和时间(context switch)
什么是CPU上下文切换? 现在linux是大多基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个任务,这个过程叫做上下文切换。时间片轮转的方式,使得多个任务利用一个CPU执行成为可能,但是保存现场和加载现场,也带来了性能消耗。 那线程上下文切换的次数和时间以及性能消耗如何看呢? ...2013-06-28 15:23:05 · 1965 阅读 · 0 评论 -
基于iptables来做系统依赖(TCP协议调用)容灾测试
首先说明一下为啥写这篇文章,其实iptables的使用,在网上随便搜一下很多。如果了解原理,然后在做容灾测试的时候,就可以直接用上。重要的不是iptables,重要的是容灾测试、 A和B两个系统,A对B在业务上是非强依赖,也就是说B系统挂掉了,A系统也需要能够正常提供服务。假如系统之间调用是通过TCP协议完成的,在调用B系统的代码的时候,方法体中没有加入try...catc...2013-06-21 19:57:05 · 156 阅读 · 0 评论 -
单元测试压测和http接口压测-工具
在开发过程中,有时候为了简单测试一下接口的性能情况,会写单元测试搞一下,之前是自己用多线程来调用这个接口,也能满足需求,但是每次要调整多线程的配置情况还要修改代码,有点费劲,无意间在一淘测试的网站上面看到一篇文章(http://testing.etao.com/node/626),有人将单元测试压测用注解的形式搞定了。决定用一下,觉得挺好用呵呵。 Con...原创 2012-12-30 15:44:53 · 462 阅读 · 0 评论 -
开发中遇到的编码问题
1、说到编码,最大的问题就是乱码了,为啥会有乱码呢 ?因为字符在编码和解码的时候,用的编码字典不一致,从而导致了乱码,常见的编码有ASCII、GBK、GB2312、UTF-8、UTF-16等。 2、为啥需要编码呢?因为计算机的存储是二进制的,也就是01010这种形式的,这样一些中文、法文、俄文等,就需要编码解码才可以达到效果。 3、java中数据类型的转换是啥?bi...2014-05-22 19:39:35 · 169 阅读 · 0 评论 -
在java中使用groovy怎么搞 (java and groovy)
什么是groovy?一种基于Java虚拟机的动态语言,可以和java无缝集成,正是这个特性,很多时候把二者同时使用,把groovy作为java的有效补充。对于Java程序员来说,学习成本几乎为零。同时支持DSL和其他简介的语法(例如闭包),使代码便于阅读。可以用groovy的动态特性来做规则引擎,在DB中维护脚本,业务变化的时候让应用系统动态加载。 如果引入groovy在java工...2014-01-15 23:17:36 · 418 阅读 · 0 评论 -
java进行debug的几个小技巧
关于debug,在很早之前看过一篇不错的文章(http://iamzhongyong.iteye.com/blog/1397374 ),转载了一下,最近做项目,有些已经忘记了,整理几个技巧在这里。但是,建议大家少做debug,debug是很耗时的操作。。。 1、远程debug(这个大家基本都会)就是本机的eclipse来debug远程的java进程,需要两个步骤。第一个:...2013-08-14 21:04:06 · 424 阅读 · 0 评论 -
关于CodeReview(java)
关于codereview,在平时的开发中,经常忽略的环节,参照目前介绍写好代码的几本书和之前掉进的坑,做了一个总结,分享出来。为什么要做通过review规避一些代码层面的问题提升可读性,方便后续扩展和维护double check 确保代码质量检查列表注释写有意义的注释DO属性上,名字无法识别业务含义的,加注释service接口和manager接口,...2014-10-29 20:42:37 · 273 阅读 · 0 评论 -
系统分布式情况下最终一致性方案梳理
前言目前的应用系统,不管是企业级应用还是互联网应用,最终数据的一致性是每个应用系统都要面临的问题,随着分布式的逐渐普及,数据一致性更加艰难,但是也很难有银弹的解决方案,也并不是引入特定的中间件或者特定的开源框架能够解决的,更多的还是看业务场景,根据场景来给出解决方案。根据笔者最近几年的了解,总结了几个点,更多的应用系统在编码的时候,更加关注数据的一致性,这样系统才是健壮的。基础...2015-09-05 19:34:12 · 861 阅读 · 0 评论 -
ThreadLocal源代码解析
最开始的时候,理解的ThreadLocal,我的理解是这样的:ThreadLocal<Thread,Map<k,v>> K的话是线程,V的话是线程的副本,是一个Map,里面可以方式多个变量的副本,后来发现是错的。今天翻了一下代码,画了一个类图。 关于ThreadLocalMap.table这个属性,类型是Entry[]用于真正存放数据的Entry,继承...2014-04-24 17:54:04 · 139 阅读 · 0 评论 -
关于单例模式(代码篇)
很早的时候,转发过一篇单例模式的文章:http://iamzhongyong.iteye.com/blog/1539642 最近又翻了一本设计模式的书,然后发现单例其实也简单也复杂,于是就打算把代码敲一下,保存下来。---------------------------------------------------------------------------------------...2014-04-23 10:47:26 · 166 阅读 · 0 评论 -
今天遇到的两个spring相关的两个问题
今天在项目中写代码,遇到两个Spring的问题,记录一下。再一次看到了spring的灵活之处。1、@Autowired没有生效打算用unitils来搞一下单元测试,于是搞了一个spring的xml文件,里面配置了几个Bean,然后用unitils的注解搞了(为啥用这个?主要是考虑少写点代码,以前是直接用ClassPath***ApplicationContext来搞的),但是发现有的be...2014-04-18 21:56:30 · 142 阅读 · 0 评论 -
Activiti中的命令模式解析
最近在看Activiti的源代码,发现是基于命令模式进行的开发,所以对于Command模式做了个了解。什么是命令模式?这个随便翻开一本模式的书,都有介绍,这里就不再冗余了。画一个Command的图,然后加一个例子吧,方法和类的命名加入了自己的理解。1、模式的根本是把“行为的请求者”和“行为的处理者”分开,实现解耦;2、实现Command的ConcreteCommand,有时候要跟...原创 2014-04-11 13:10:13 · 2225 阅读 · 0 评论 -
分布式缓存中多机房分布策略
目前的互联网架构中,缓存已经成了一个不可或缺的部分,可以将没有了缓存,很多事情玩不转了,目前开源中用的比较多的例如memcached,也有公司自己研发缓存系统的,例如淘宝已经开源的tair,当缓存的服务器数量增加或者本身就需要多机房容灾的时候,数据在多机房情况下如何分配,就成了一个问题,这篇文章就对这个问题展开讨论。 对于分布式缓存来讲,由一个集群机器组成,这些机...2013-10-29 23:02:41 · 442 阅读 · 1 评论 -
Storm核心概念剖析
最近团队中有分析的场景,用到了JStorm来做数据的实时分析,于是花时间对于一些概念做了了解。 什么是Storm?这个的话出来应该有几年时间了,阿里巴巴也重写了一套JStorm,核心的类名都是服用的Storm的,他是一套实时数据处理系统,容错行好,然后足够稳定,目前很多数据实时分析的场景,选择Storm的越来越多了。 核心概念介绍 Nimbus:负责在集群里面...2015-03-20 20:42:15 · 341 阅读 · 0 评论 -
关于java中的本地缓存-总结概述
java中的本地缓存,工作后陆续用到,一直想写,一直无从下手,最近又涉及到这方面的问题了,梳理了一下。自己构造单例、guava、ehcache基本上涵盖了目前的大多数行为了。 为什么要有本地缓存?在系统中,有些数据,数据量小,但是访问十分频繁(例如国家标准行政区域数据),针对这种场景,需要将数据搞到应用的本地缓存中,以提升系统的访问效率,减少无谓的数据库访问(数据库访问占用数据库连...原创 2014-03-31 19:00:48 · 1209 阅读 · 0 评论 -
使用guava中的EventBus构建内存级别的事件引擎
这个EventBus是guava中比较给力的一个类,从字面上看是事件总线,解决了传统的观察这模式的问题,使用比较灵活方便。最近打算搞一个轻量级的事件驱动引擎,重点参照了这个类EventBus,如果是内存级别的事件分发或者MQ,推荐直接用EventBus。 关于EventBus中的几个问题?1、 事件定义:任意的对象即可;2、 事件处理器的注册:事件处理的方法,添加注解即可,...原创 2014-03-25 19:27:20 · 413 阅读 · 0 评论 -
DSL的基本介绍(groovy来进行构建)
什么是DSL?领域特定语言,针对一个特定的领域,具有受限表达性的一种计算机程序语言。可以看做是一种抽象处理的方式。具有四个元素,第一个是计算机程序设计语言,使用DSL来指挥计算机做事情,语言性(一种特定的语言),受限的表达性,并不像同通用的设计语言那样具有广泛的能力,针对一个明确的领域。分类有哪些?外部DSL:不同于应用系统主要使用语言的语言,通常采用自定义语法,宿主应用的代码采...2014-03-04 23:32:25 · 3513 阅读 · 0 评论 -
qlexpress规则引擎初探
qlexpress是啥?这个是阿里内部的一个开源的java规则引擎。开源的链接地址如下:http://code.taobao.org/p/QLExpress/wiki/index/ 主要的原理是啥?按照之前阅读的文档以及代码,主要是定义规则、解析规则、执行规则几个步骤,编译的过程类似java class文件的编译过程,首先进行词法分解、词法分析、语法分析、规则执行等步骤。 ...2014-02-25 22:28:16 · 3893 阅读 · 0 评论 -
java中各种各样的数据结构
在java中,有非常丰富的数据结构,可能是因为大多数的软件系统都是围绕数据来进行的,那自然而然也就会导致编程原因围绕不同的数据结构来做处理。 PS:栈是后进先出。 ...2014-07-13 20:26:21 · 156 阅读 · 0 评论 -
关于JVM的ClassLoader(笔记)
众所周知,java是编译型的语言,写的是java文件,最后运行的是class文件,class文件是运行在JVM之中的,这时候就有一个问题,JVM如何装载class文件的?是通过ClassLoader来进行的,这里做一下笔记,因为发现原作者写的很好《深入分析java web 技术内幕》。ClassLoader的结构分析 ClassLoader是一个抽象类,他有很多子类,JV...2014-07-13 12:19:52 · 180 阅读 · 0 评论 -
关于事务的几个概念介绍
啥是事务?有一组操作组成的可靠的独立的工作单元。 ACID是咋回事?A(原子性)事务的原子操作单元,对数据的修改,要么全部执行,要么全部不执行;C(一致性)在事务开始和完成时,数据必须保持一致状态,相关的数据规则必须应用于事务的修改,以保证数据的完整性,事务结束时,所有的内部数据结构必须正确;I(隔离性)保证事务不受外部并发操作的独立环境执行;D(持久性)事务完成之后...2014-06-06 22:22:02 · 260 阅读 · 0 评论 -
基于AOP和注解简化异步化处理
Spring3中提供了一个功能,就是在一个方法上添加注解,调用这个方法的时候自动在线程池中异步话执行。由于老系统暂时无法升级到spring的3版本,所以翻了一下Spring3中的实现代码。Spring3中总体就是Spring的AOP和Schema,这两个方式,至于Spring3中注解异步化的使用,这里就不介绍了。 实现思路:1、搞一个注解来做标志位(就是添加了这个注解,方法自...2013-08-15 19:28:38 · 331 阅读 · 0 评论 -
最佳线程数和QPS以及RT
最近在关注性能的事情,所以对于多线程程序中,如何设置最佳的线程数,找了一些文章。虽然有公式可以套用,但是,其实最佳的话只是相对的,了解了过程之后,处理线程数的设置就会游刃有余了。名字解释:1、QPS:系统每秒处理的请求数(query per second)2、RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值3、最佳线程数量:刚好消耗完服务器瓶颈资源的临界线程...2013-08-14 23:48:55 · 372 阅读 · 0 评论 -
快速获取java中的内存和线程信息(MBean)
在排查线上问题的时候,我们经常使用jstat、jstack、jmap查看GC、内存、线程的信息,但是有时候我们需要获取一个整体的信息来帮助我们快速定位,类似linux中自带的top命令,简单而全面的系统信息,在网上找了些资料,发现之前有人写了个jtop的工具,能够全面获取java应用的信息,一看作者,原来是阿里的同事,原理是使用了java中的MBean,借这个机会,把MBean的东西...原创 2012-12-26 20:40:55 · 771 阅读 · 0 评论 -
DisableExplicitGC和Direct ByteBuffer
如果在JVM 的配置中添加了DisableExplicitGC这个配置,但是同时应用中有用到了Direct ByteBuffer(例如用到了NIO框架mina),此时会由于内存问题导致OOM,之前有所了解,但是没有仔细看过,最近同事排查了一个这种问题,然后决定扫盲一下,期间重点参照撒迦(不得不佩服他在JVM上的权威)的这篇Topic(http://hllvm.group.iteye...原创 2012-12-07 14:46:36 · 365 阅读 · 0 评论