坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Category Archives: java

这里有原创java教程,都是来自工作中的积累,有时候有些些弱。

rose手册第一章:入门指引

ROSE 1.1 简介: 人人网、糯米网释出的、开源的高效Java web开发框架。在小米米聊服务端再次被验证和使用。一个从零开始的创业公司,在大家技术背景不一的情况下,rose很简单快速地传达到了大家中间。本手册致力于让php开发人员也能快速使用上java开发高性能服务。 1)rose是什么? 基于IoC容器 (使用Spring 2.5.6). 收集最佳实践,形成规范和惯例,引导按规范惯例,简便开发. 收集通用功能,形成一些可使用的组件,提高生产效率. 特性的插拔,使用基于组合而非继承的设计. 提供可扩展的点,保持框架的可扩展性. 注重使用简易性的同时,注重内部代码设计和实现. 如果你是一个创业公司在选择php还是java,同时如果你的团队有一个人写过一年java其他人都没写过。如果你想选择一个更加大型的系统框架,请使用rose,它收集了来自人人网、糯米网、小米科技的众多工程师的经验,你可以免费拥有这些。 2)rose能做什么? 初级rose用户: rose可以用来完成一个网站。 中级rose用户: rose可以用来完成一个大型网站,它提供的jade功能使得你的项目可以快速开发,自然切入连接池;它提供的portal功能,可以将一个网页分多个线程发起向DB的请求,节省用户的时间;它提供的pipe功能类似facebook的bigpipe,让前端加速,与此同时还有portal多线程的优势。 高级rose用户: rose可以自由加入spring任何特性,比如定时执行(去TM的crontab);比如拦截器做统一权限控制。可以自

Continue reading

Posted in java | Tagged | 4 Comments

maven库nexus拖不到jar包小记

使用maven,nexus是个不错的选择。 最常见的问题: 1.SNAPSHOT拿不到最新的包。 2.明明在maven central库里搜索到的包,却提示Missing。 3.plugin提示Missing。 1.SNAPSHOT拿不到最新的包。 这个问题往往得nexus+hudson造成的。因为daily build导致与日俱增的jar包堆积在一个文件夹下,文件数目过多,导致在取最新的包时超时了。 解决办法: 浏览器打开nexus, login->scheduled tasks->add,添加一个定时清理目录的计划任务即可。最后一个选项“remove if released”需要慎重,平时开发可能不是特别正规的时候可能会snapshot和release都需要。 2.明明在maven central库里搜索到的包,却提示Missing。 网上大多数说法都是index失败了,个人经验实际不然(当然不排除你的问题就是index失败)。 当nexus.log里没有任何异常时,请注意以下内容: 在central搜索时,如果只有pom没有jar,那说明这个依赖的项目可能有多个依赖,一定要加上pom,默认是jar。 3.plugin提示Missing。 通常原因是:nexus设置的搜索顺序有问题。 login->Public Repositories -> configuration 左边的是正在使用的定义好的仓库组,右边是可以使用的,正确的顺序应该是先在Release找,然后Snapshots,然后3rd party,最后才去外网下(这时nexus才拖下来新的jar/pom)。

Continue reading

Posted in java | Tagged , | 2 Comments

maven插件编写实例

概况 实现一个自定义的类,必须要继承自 org.apache.maven.plugin.AbstractMojo,同时实现execute方法。 maven使用了在注释中写代码,BT的写法,所以注释里的@goal @parameter都是有含义的。 实例 mvn hello:gogo   这样的一个命令,到代码里,应该是如下过程 进入 hello被叫做plugin的prefix,maven会去寻找以hello开头的插件。 在插件的pom里必须定义其名字为hello开头的,例如: <artifactId>hello-maven-plugin</artifactId>   goal目标 hello后面的gogo叫做goal,目标,则以注释中写代码的方式来完成: /**  *@goal gogo  **/   HelloMojo extends AbstractMojo   需要的依赖 <dependency>    <groupId>org.apache.maven</groupId>    <artifactId>maven-plugin-api</artifactId>    <version>3.0.3</vers

Continue reading

Posted in java | Tagged | Leave a comment

thrift快速入门实例

Thrift是Facebook的核心框架之一,使不同的开发语言开发的系统可以通过该框架实现彼此的通信,类似于webservice,但是Thrift提供了近乎变态的效率和开发的方便性,是webservice所不能比拟的。给分布式开发带来了极大的方便。但是这柄利器也有一些不完美。 安装thrift 1、./configure --with-boost=/usr/include 2、make 3、make install 定义接口文件 vim chen.thrift      #!/usr/local/bin/thrift --gen java   namespace java com.chen   service Hello{           i32 hello()   }   生成代码 thrift --gen java chen.thrift    要使用1.6的jdk 实现server代码: /**   * @author 54chen(陈臻) [chenzhen@xiaomi.com czhttp@gmail.com]  &n

Continue reading

Posted in java | Tagged | 1 Comment

记hadoop故障一例:BlockAlreadyExistsException

hive版本:0.7.0 hadoop版本:0.20.2 在线上跑了一个季度了,基本上没什么问题,今天突然出了问题。 在hive执行时留下的蛛丝马迹: Failed with exception org.apache.hadoop.hdfs.server.namenode.NotReplicatedYetException: Not replicated yet:/tmp/hive-root/hive_2011-08-15_00-31-02_332_247809173824307798/-ext-10000/access_bucket-2011-08-14_00004 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1257) at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:422) at sun.reflect.GeneratedMethodAccessor2037.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Met

Continue reading

Posted in java | Tagged , | Leave a comment

spring配合easymock搞定不依赖环境的测试用例

在写java的test case的时候,往往有太多依赖环境的情况,WEB项目更甚,如果每次测试都要准备数据库或者其他环境,相当麻烦,换一个人就入手困难,在这种情况下,mock就是最好的选择。 Mock 对象能够模拟领域对象的部分行为,并且能够检验运行结果是否和预期的一致。领域类将通过与 Mock 对象的交互,来获得一个独立的测试环境。 入门 //准备一个mock IMocksControl mocksControl = EasyMock.createStrictControl(); //创建录像 aDAO = mocksControl.createMock(AnalyzeResultDAO.class); //录制 输入 期望输出 EasyMock.expect(aDAO.getARByLimit(type)).andReturn(ar); //重放 表示录制结束 EasyMock.replay(aDAO); //调用相关的类 验证结果是否正常 Assert.assertNotNull(analyzeResultBiz.getLastAR(type)); //验证是否使用了上面录制的DAO EasyMock.verify(aDAO); 提高 * 配合spring如何做? int type = 1; AnalyzeResult ar = new AnalyzeResult(); …

Continue reading

Posted in java | Tagged , | 2 Comments

持续构建工具hudson使用手记

hudson是一个强大的持续性构建服务器。(现在开发者们分了一个分支,改叫Jenkins。)我(54chen)在使用过程中的手记如下: 下载 地址:http://hudson-ci.org/ wget http://java.net/projects/hudson/downloads/download/war/hudson-2.0.1.war 速度不咋的,60k/s. 先决条件 系统:centos 5.5 resin4下不work,换成了tomcat。 cp /opt/soft/hudson/hudson-2.0.1.war /opt/soft/apache-tomcat-7.0.16/webapps/ 遇到的问题 1)tomcat使用utf8环境。 vim tomcat/conf/server.xml 找到8080,加入一行 URIEncoding="UTF-8"。 2)maven不工作 hudson启动后,系统管理里面,设置maven的地址:MAVEN_HOME指到maven的主目录,不是bin目录。 3)svn不工作 报re_version错误,在你的svn地址的最后面加上@HEAD 4)hudson一切正常后,有svn bug FATAL: tried to access method hudson.scm.ChangeLogSet$Entry.setParent(Lhudson/scm/ChangeLogSet;)V from class hudson.scm.SubversionChangeLogSet 报上面的错误,我(54chen)在http://i

Continue reading

Posted in java | Tagged , | 1 Comment

java log4j 日志分析工具分享

java线上项目往往有许多的exception出现了没来得及去看,通过下面的工具,可以在每天早晨上班的时候通过邮件发出头一天出现的异常次数,是提高生产力和提早发现问题的好办法。 配置: 1.解压到指定目录 /data/analyze 2.email发送配置 vim mail.pl 5行,6行,7行,14行 修改为自己的配置 3.server配置 ssh-keygen打通ssh cd server 项目名_server写服务器ip,多个机器一行一个 4.其他 可能会有不相同的log目录地址,看着修改一下shell就行。 *修改自烧饼的脚本,点击下载: http://ishare.iask.sina.com.cn/f/16530420.html

Continue reading

Posted in java | Tagged , , | Leave a comment

java实时日志大文件分析

日志分析时经常会遇到这个问题:一个正在增长中的大文件,要分析新增的每一行的固定内容进行统计并展示啥的。用java的RandomAccessFile盯住文件的末尾,是一个不错的选择,下面的实现,是一个高效的java tail工具,实现类似linux的tail工具的功能。用来做大日志文件的实时分析,是一个不错的选择。 public class LogFileTailer extends Thread { private Logger logger = LoggerFactory.getLogger(LogFileTailer.class); /** * How frequently to check for file changes; defaults to 5 seconds */ private long sampleInterval = 5000; /** * The log file to tail */ …

Continue reading

Posted in java | Tagged , , | 5 Comments

改写java TreeMap制造方便查询的ip内存库

国库流行的ip库记录数大约在6万条左右,数据格式大约都是如下: start,end,country... 要查询的时候都是放到mysql里去,然后select * from ip where start>=xx and end end <=xx来得到ip信息,我(54chen)在搞一个实时监控时,因为并发量非常大,全部查询IP库,需要好几万每秒的查询,特改了java的TreeMap的get方法,将所有数据放到内存里来操作,put的时候还是保持TreeMap的红黑树实现,以start作为key,而在get的时候有一个 compare的过程,在发现compare是大于0的时候进行如下修改: else if (cmp > 0) { int start = ((Data) p.value).getStart(); int end = ((Data) p.value).getEnd(); int intKey = Integer.parseInt(k.toString()); if (intKey >= start && intKey <= …

Continue reading

Posted in java | Tagged , , | 2 Comments
Page 3 of 812345...Last »