自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何抓获JVM crash的幕后黑手?(三)

通过前两篇如何抓获JVM crash的幕后黑手?(一) 如何抓获JVM crash的幕后黑手?(二)的分析,如果还不能查到原因,那很有可能不是应用自身的问题,而是系统将应用强行kill了,如何判断是系统强行kill的呢?      我们需要先了解下linux的一个oom-killer机制。linux oom-killer是一种自我保护机制,当系统分配不出内存时会触发这个机制,由操作系统在己

2013-01-30 22:21:12 1618

转载 架构相关领域的学习材料

对于工程师来说,到一定阶段后往往会遇到成长瓶颈。要突破此瓶颈,需要在所属技术领域更深入学习,了解本领域的问题本质、方法论与设计理念、发展历史等。以下提供一些架构相关领域的学习材料,附上简单点评,供有兴趣的工程师参考。希望大家能通过对这些领域的了解和学习,掌握更多system design principles,在自己的工作中得心应手,步入自由王国。1.        Operating Sys

2012-06-24 15:35:22 1473

转载 Shell中的grep、awk和sed的常用命令和语法

Grep的常用命令语法1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来。例如:”m y s t r i n g”。这样做有两个原因,一是以防被误解为 s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:”jet plane”,如果不用双引号将其括起来,那么单词 p l a n e将被误认为是一个文件,查询结果将返回”文件不存在”的错

2012-05-21 22:57:29 1145

原创 Httpclient的会话保持引起的线程安全问题

这两天线上出现一个问题,通过httpclient来抓取页面,服务端在页面渲染的时候出现了串号现象。首先看下代码,controller中代码如下:request.getSession().setAttribute("sid", id);vm页面再通过$!request.session.getAttribute("sid")获取参数值,这代码很常见,看起来单线程和多线程并发都不会有问题,因

2012-04-01 18:51:04 6606

原创 两种SOA平台建设方案比较

为了能支撑业务迅速发展,应用系统需要重构,做相应的分层和拆分,原来在一个系统内部能处理完的逻辑现在可能分散到多个系统协作完成,系统间调用的方式有很多种,比如Http,Hession,RMI,WebService,还有同步和异步的区分,可以想象一下如果不通过SOA平台进行封装和统一,光这些调用方式就会让系统变得很乱,也会增加学习和开发成本。如何做SOA化?下面对两个方案进行了比较(整理自blueda

2012-02-19 14:11:29 3101

原创 两种系统间通信方式的比较

对分布式java应用来说,如何实现系统间通信?常见的两种典型方法如下:(整理自bluedavy的《分布式java应用:基础和实践》)系统间通信方式基于消息基于远程调用协议TCP/IP、UDP/IPHTTPjava实现TCP/IP+BIO:socket和serverSocketTCP/IP+NIO:SocketChann

2012-02-19 14:05:07 6193

原创 如何抓获JVM crash的幕后黑手?(二)

其实通过上一篇所讲的core dump方法可以比较方便找到jvm crash问题所在,但这种方法适合crash比较频繁,容易获取到core dump文件,如果没有这个文件,那怎么可以查到问题呢。现在回过头想想通过跟踪crash时的apache日志,其实也能找到造成crash的请求,下面是某次crash时的日志:[07/Jan/2012:07:52:40 +0800] "GET /a.xhtml

2012-01-12 13:23:28 2638

原创 如何抓获JVM crash的幕后黑手?(一)

最近几天线上jboss服务器经常莫名地突然停止运行,导致半夜都被报警短信吵醒,元旦几天也基本就在收报警,然后重启系统。查看jboss控制台错误日志,发现只有下面一行:/opt/.../jboss/bin/run.sh: line 181: 26430 段错误                  "$JAVA" $JAVA_OPTS -Djava.endorsed.dirs="$JBOSS_END

2012-01-11 14:35:20 24852

原创 为什么CMS GC时出现Concurrent Mode Failure?

并发收集器(concurrentcollector)指的是回收年老代和持久代时,采用多个线程和应用线程并发执行,减少应用停顿时间,但如果参数设置不当,容易出现Concurrent ModeFailure现象,此时JVM将采用停顿的方式进行full gc,整个gc时间相当可观,完全违背了采用CMS GC的初衷。    出现此现象的原因主要有两个:一个是在年老代被用完之前不能完成对无引用对象的回收

2011-10-27 22:59:41 32900 1

转载 企鹅快跑——腾讯敏捷历程揭秘

腾讯这只企鹅在13年的成长历程中,不断长大,但却并不笨拙,这其中的秘密就在于研修了敏捷方法!本文就将为您揭开其中不为人知的敏捷故事。天生敏捷基因企鹅出生在极速变化的互联网行业,出生之时便面临着四大挑战。海量用户的需求:企鹅服务于数以亿计的互联网用户,在保证业务稳定

2011-10-06 18:39:49 1309

原创 JVM GC的几个叫法

根据GC所处的代,试图将GC叫法归纳如下:young generationyoung gc == minor gctenured generationold gc == cms gc == major gc == full gc  full gc都是串行方式的,耗时很长,所以我们需要尽量减少发生频次。

2011-09-30 17:32:02 1305

原创 JVM垃圾收集器异同

JVM 垃圾收集器有3类,这里主要介绍我们常用的 并行和并发收集器:The Throughput Collector (也叫并行收集器)串行收集器在GC时会停止其他所有工作线程(stop-the-world),CPU利用率是最高的,所以适用于要求高吞吐量(throughp

2011-09-30 17:12:31 6031

原创 记一次JVM GC日志分析

这几天在准备升级JDK版本到1.6,对目前线上JVM(版本是1.5.0_08-b03) GC日志进行了分析,发现一些参数设置不太合理的地方,有待后续通过数据来进行验证。1.原始GC日志(通过JVM配置GC Print参数获取GC日志)...695.775: [GC 695.776: [ParNew: 130944K->0K(131008K), 0.0174100 secs] 43296

2011-09-29 22:30:34 22789 3

原创 maven编译插件maven-compiler-plugin误将WARNING当ERROR

【问题描述】经常碰到这样的问题,在eclipse中编译是正常的,但是在maven编译时不通过,错误信息如下:E:\workspace\*.java:[760,31] 警告:sun.misc.BASE64Encoder 是 Sun 的专用 API,可能会在未来版本中删除

2011-09-08 21:02:29 9848 2

原创 开发自测到底如何做?

开发自测到底要不要做?         有些同学会觉得开发职责是编码,如果还做自测,那测试做什么,难道要失业。其实我觉得不是这样,开发自测和测试的侧重点是不一样的,开发自测不是为了替代测试的工作。我们都知道bug越早发现,解决的成本越低,风险也越小。测试发现的bug要确认,提

2011-08-09 21:36:44 11172 1

原创 Android emulator模拟器启动错误

问题描述启动时报如下错误:invalid command-line parameter: Files\Android\android-sdk\tools/emulator-arm.exe.Hint: use '@foo' to launch a virtual dev

2011-08-08 00:00:25 3132

原创 面试前五问自己

面试时除了会考察一些专业知识外,还会被问及一些个性及职业规划方面的问题,有点像我们产品中的功能性需求和非功能性需求一样。其实不是为了面试才去准备这些问题的答案,而是我们自身应该考虑的,对这些有了清晰的认识,才能避免少走弯路。1.个人职业规划比如说是走技术线(架构师、技术专家),还

2011-07-27 20:22:57 1399

原创 今天maven install时碰到的两个问题(堆溢出和编译错误)

问题1.maven install时出现,日志如下:系统资源不足。有关详细信息,请参阅以下堆栈追踪。java.lang.OutOfMemoryError: Java heap space        at com.sun.tools.javac.util.List.prepen

2011-07-20 19:59:06 14463 1

原创 maven仓库repository地址最佳声明方式

maven中的仓库repository地址可以在以下几个地方声明:%M2_HOME%\conf\settings.xml,这是机器级的,会影响到所有使用此工具的构建\.m2\settings.xml,这是用户级的,会影响到当前用户的构建定义在pom.xml里,这是项目级的,会影响

2011-07-20 18:51:28 2137

转载 深度分析HTML5在移动开发方面的发展状况

“我们正在用HTML5编写我们下一套移动产品。”“是啊,这些天很多人在玩着Appcelerator,我也在玩着。”“嗯,但这并不是我要说的那种HTML5产品。”最近,我有很多类似的交流对话,可能因为我正在开发一套HTML5的应用吧。就像2005年的“AJAX”,“HTML5”这个

2011-07-13 13:50:22 1130

原创 我们是如何做敏捷回顾的

回顾(Retrospect)是敏捷开发中的一个必不可少的实践,也是把整个敏捷开发过程连接成一个闭环的关键节点,本文将阐述我们是如何做敏捷回顾的。敏捷回顾最高指导原则ž无论我们发现了什么,考虑到当时的已知情况、个人的技术水平和能力、可用的资源,以及手上的状况,我们理解并坚信:每个人

2011-07-13 12:24:03 5460

原创 敏捷开发之结对编程最佳实践

讲到结对编程,我想大家首先想到的是XP极限编程中描述的,两位程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起完成编码工作。这种编程方式为众多敏捷爱好者所向往,但实际工作中尝试采用的却寥寥无几,究其原因:喜的是它可以提高代码质量,增进沟通,并起到传帮带的作

2011-07-12 19:26:02 4089 3

转载 java编程中影响性能的一些点

本次迭代,在做一些代码的优化和重构,网上整理的一篇文章,推荐大家看看,平常编码中加以应用,红色标注的点是我认为在现在的项目开发中需要特别注意的,有不同意见的点欢迎大家一起讨论。原文地址:http://blog.csdn.net/kome2000/archive/2010/04/2

2011-07-12 19:13:27 3211

转载 HTML5设计原理--Jeremy Keith在 Fronteers 2010 上的主题演讲

 今天我想跟大家谈一谈HTML5的设计。主要分两个方面:一方面,当然了,就是HTML5。我可以站在这儿只讲HTML5,但我并不打算这样做,因为如果你想了解HTML5的话,你可以Google,可以看书,甚至可以看规范。实际上,确实有人会谈到规范的内容。史蒂夫·福克纳(Steve Faulkner)会讲HTML5与可访问性。而保罗·艾里什(Paul Irish)则会讲HTML5提供的各种API

2011-06-26 22:05:00 2682

原创 性能调优三步走

在性能调优前,我们首先需要制定性能调优目标(响应时间和TPS),这个可以根据业务场景,线上服务器集群配置等来确定。确定好目标就可以准备数据、压力测试脚本了,这些都完成后就一个一个场景进行测试,对不能达到目标的场景再寻找瓶颈所在,那么如何来找到瓶颈呢?概括来说就是使用排除法,比如说在应用程序层面,可以将怀疑有性能瓶颈的代码注释起来,再跑一次测试脚本,看响应时间和TPS的变化,直到找到最终瓶颈所在的代码块。        调优时可以从以下三个层面入手:1.       应用程序优化应用程序优化主要指的是从应用代

2011-05-31 17:39:00 954

原创 对HashMap排序

<br />      在项目中有个业务场景,需要对访问我店铺轨迹按访问次数排序,访问我店铺轨迹保存在HashMap中,key为访问次数。不知道大家会怎样实现对HashMap的排序,排序之后保存为一个List。HashMap是无序的,如果需要使用有序的Map,可以使用TreeMap。<br />      <br />      HashMap和TreeMap有如下区别:<br />特性HashMapTreeMap排序无序有序数据结构Hash表平衡树实现的接口(抽象类)AbstractMap抽象类Sorte

2011-05-16 20:30:00 893

原创 解决mysql连接异常—-com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception

<br />      前两天机房搬迁,DNS域名切换,导致出现如下异常。经查原因发现,是连接池中的连接在应用端空闲,但该连接的vip(服务器集群地址)已经超时(超时时间是60s,而应用端的连接回收时间是180s),所以当再次使用该连接时会出现连接失效的异常。解决办法是将vip的超时时间调大,改成300s,这样就能保证连接池中的等待连接不会因为vip的超时而失效。<br />异常如下:<br />org.springframework.dao.DataAccessResourceFailureExcepti

2011-05-16 20:25:00 11701

原创 java对象初始化顺序

<br />java对象初始化遵循以下原则:<br /> <br />1.先父类后子类,依据2-7原则,交替初始化;<br />2.先分配静态成员空间,并初始化静态成员;<br />3.执行静态代码块;<br />4.为对象分配内存空间,执行默认初始化,即所有变量初始化为默认值;<br />5.显示初始化,即对成员进行赋值;<br />6.执行非静态代码块;<br />7.调用构造函数执行;

2011-05-16 20:24:00 853

原创 ThreadPoolExecutor线程池参数说明

之前做的一个项目,由于消息量太大,为缓解消息发送服务器的压力,将接收消息由之前的同步处理改成了异步处理,即收到一条消息交给一个线程处理,马上返回接收成功给服务器。这样就涉及到多线程和线程池,在做压力测试时总感觉这个线程池的状态不对,当前线程数总上不去,原来忽略了一个逻辑,就是当前线程数到达核心线程数时,后面的请求就会加到任务队列里,任务队列满了之后才会去创建新的线程,一直达到允许的最大线程数为止。在测试过程中,主要监控了线程池(java.util.concurrent.ThreadPoolExecutor)

2011-05-16 20:15:00 5159

原创 SecureCRT乱码问题解决方法

<br />网上有很多达人给出了SecureCRT登录linux,中文乱码问题的解决办法,我这里总结一下解决思路,原因还是SecureCRT客户端字体/字符集的原因,主要分以下两种情况解决:一 后台刷日志时(tail –f logs/jboss_stdout.log)<br />首先,确保Linux下的文件(比如日志)在Windows下打开没有乱码,显示正常就表明linux的字符集设置没有问题,不用去修改;<br />其次,修改SecureCRT中的Session Options参数配置,如图中的红框:<b

2011-05-16 19:56:00 42206 1

原创 高级语言分类特性

<br />在介绍一门语言时,总会提到编译型、解释型、脚本、动态这些特性,其实了解了语言的翻译过程也就可以给它归类了。<br /> <br />计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。<br /> <br />编译型语言(Compiling Languages):程序在执行之前,需要先编译成机器语言文件,比如exe,运行的时候不需要再去翻译,直接运行就行,所以

2011-05-16 19:46:00 3477

原创 动态代理:JDK动态代理和CGLIB代理的区别

AOP包括切面(aspect)、通知(advice)、连接点(joinpoint),实现方式就是通过对目标对象的代理在连接点前后加入通知,完成统一的切面操作。1.JDK动态代理当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象,此代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前后加上其他业务处理逻辑。代理模式在实际使用时需要指定具体的目标对象,如果为每个类都添加一个代理类的话

2011-05-16 00:14:00 27463 4

转载 当问题成为问题时才去担心

      晚上看到Getting Real by 37signals中写的一段对待未成为问题的问题的一个处理原则,挺有同感,在我们项目过程中也经常会出现,设计产品时过高估计客户的使用程度,产品越做越复杂,TC也会设计些基本不会出现的并发,这个我觉得只要出现这种问题系统不会崩溃,就没有必要纠结类似的问题,而是把精力放在核心功能,提高产品价值,改善用户体验。      转载如下:不要把时间浪费在还未成为问题的问题你真的的需要考虑当用户到达10万以上的时候会出现的问题吗?它可能已经是两年以后的事了。如果你现在只

2011-04-25 23:38:00 756

原创 0 bug是如何做到的?

<br />      刚刚结束的一个项目,20人天的开发工作量,真正做到了0bug,这是带项目以来的第一次,还是挺不容易的。项目启动时,和QA商定bug目标时,所有开发同学都喊出了0bug,看着大家士气高涨,作为PM也想挑战一下这个目标,最终通过大家的齐心协力达成了,总结起来,主要有以下几个关键因素:<br />1.这个目标是所有人自发喊出来的,而不是自上而下定的目标,每个开发自身负责的模块都设定的是0bug目标;<br />2.建立共同的游戏规则,个人或项目bug目标没达成是需要请客的;<br />3.

2011-04-18 00:21:00 1855

原创 策略模式还是模板方法模式?

      之前做的一个产品中,存在一个重要的场景—-生成询盘,来源有网站、留言、PM、手工等等,考虑到目前的代码有些凌乱,准备做下重构,到底是采用策略模式还是模板模式?这里简单做个分析。询盘生成的过程中包含这么一些步骤:构造询盘对象,计算询盘意向度,创建买家,获取意向商品,创建询盘,其中差别就是根据传进来的参数构造询盘对象。      将每种来源的询盘生成看做一个大的算法,可以套用策略模式,

2010-04-18 23:45:00 1845

原创 多用右脑思考 --读《全新思维》有感

                                             未来将属于那些拥有与众不同思维的人,由左脑统治的逻辑、线性、计算能力为主的“信息时代”即将过去,取而代之的是一个全新的以创意、幽默等右脑能力为主导的“概念时代”。作为一个程序员,我们习惯了左脑思考,习惯了推理,缺乏的是感性、活跃的思维。要想让自己全面发展,除了需要在技术上(包括深度和广度)有更多的积累外

2010-01-24 23:55:00 1715

原创 开博啦

新年新气象,开始新征程......

2010-01-03 19:45:00 485

空空如也

空空如也

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

TA关注的人

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