`
文章列表
做一个苦逼的Java攻城师, 我们除了关心系统的架构这种high level的问题, 还需要了解一些语言的陷阱, 异常的处理, 以及日志的输出, 这些"鸡毛蒜皮"的细节. 这篇文章是JCP成员, Tomasz Nurkiewicz( http://nurkiewicz.blogspot.com/ )总结的10条如何正确使用日志的技巧(参见原文). 跟那篇"java编程最差实践"一样, 也是针对一些细节的, 因为日志是我们排查问题, 了解系统状况的重要线索. 我觉得对我们平常coding非常有借鉴意义. 所以转换成中文, 加深一下印象, 也作为自己工作的一个 ...
在Lucene/Solr的SVN trunk中的SolrCloud已经可用, 在即将发布的4.0版本中将正式包含. 目前SolrCloud已经成熟, 可以支持分布式索引和分布式搜索. 下面是我们一个项目采用新的SolrCloud的部署结构图: 看起来是否非常简单? 下面我们看看内 ...
这里的观点非常值得探讨, 所有的产品代码就像是一项投资, 有些代码的价值大, 因此需要写更多的单元测试来提高测试覆盖率. 另外有些代码的单元测试编写非常困难, 下面的一些因素可以用来帮助我们理解每个单元测试的价值: 1.代码被用的次数和它的价值成正比. 2.被依赖程度决定测试价值. 如果其他代码严重依赖被测试代码, 那么对应的测试价值大, 如果被测试代码严重依赖其他代码, 那么这个代码将难以测试. 而且不易于发现问题. 3.对I/O(网络, DB, 文件)依赖的代码难以测试, 需要使用mock技术, 而mock代码工作量大, 维护成本高 4.多线程代码更难以测试. 5.代码越复杂越需要测试. 6 ...
在Google Guava 10版本引入了EventBus, 它主要用来简化我们处理生产/消费者编程模型. 基本用法 使用Guava之后, 如果要订阅消息, 就不用再继承指定的接口, 只需要在指定的方法上加上@Subscribe注解即可: public class EventListener { public int lastMessage = 0; @Subscribe public void listen(OurTestEvent event) { lastMessage = event.getMessage(); ...
通过下面的例子了解Guava Supplier的用法.在做单元测试的时候, 我们可能需要Mock掉一些对外部资源的依赖. 比如时间, 随机数, 系统文件访问. 下面是将要测试的代码, 将当前时间输出: @Controller @RequestMapping(value = "/time") @VisibleForTesting class TimeController { @RequestMapping(value = "/current", method = RequestMethod.GET) @ResponseBody ...
在未出现开源搜索引擎以前, Doug Cutting整了个Lucene, 随后Yonik Seeley写了一个Solr, 在2010年 Shay Banon发布了ElasticSearch, 大概在两年前, 我们迎来了Sensei, 最近他们发布了1.0版本, 下面通过@sematext对LinkedIn的搜索架构师John Wang的一个采访. ...

Java编程最差实践

    博客分类:
  • Java
原文地址:http://www.odi.ch/prog/design/newbies.php 每天在写Java程序, 其实里面有一些细节大家可能没怎么注意, 这不, 有人总结了一个我们编程中常见的问题. 虽然一般没有什么大问题, 但是最好别这样做. 另外这里提到的很多问题其实可以通过Findbugs( http://findbugs.sourceforge.net/ )来帮我们进行检查出来. 字符串连接误用 错误的写法: String s = ""; for (Person p : persons) { s += ", " + p.getNa ...
这篇文章通过用一个如何处理feed数据的应用场景来说明为什么会出现Storm实时计算框架, 对我们自己的技术选型和系统架构设计非常有参考价值. 原文在这里 Storm 成为最近开源社区的一个热门, 其作者Nathan Marz 所在的公司Backtype现在已经被Twitter收购. 该项目的wiki 非常完善. 从这里对Storm做一个全面了解. 目前的场景是这样的, 通过解析xml feed来生成索引数据. 已经通过搭建hadoop来批量生成全量索引. 但是如果需要实时更新数据增量生成索引该如何处理呢? 1.最简单单机方案 用一台机器持续抓取feed数据, 但是这个会受到单机的处理和 ...
Storm作为Twitter开源的实时计算框架, 已经成为big data下一个热点. 下面是一些主要特性: 简单的编程模型: 类似MapReduce, 不过MR用来降低并行批量处理的复杂性, 而Storm用来简化实时处理模型. 支持多种编程语言: 目前支持Clojure, Java, Ruby, Python 容灾高可用: Strom管理整个worker集群, 允许单节点失败 支持水平扩展:支持多线程, 进程, 服务器平行处理 高可靠:保证消息能被全部处理, 一旦执行任务过程中失败, 能从失败处开始对消息进行回放. 高效:用ZeroMQ作为底层消息队列, 保证消息能快速被处理 支持本地模式: ...
原文:http://java.sys-con.com/node/2116436 原作者的帅照 虽然自己开发的一直都是号称"高性能, 高可用, 高并发"的"三高"应用. 但是一直没有对如何实现这种"三高"应用没有进行深入的思考, 直到最近看到这篇文章, ...
Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKe ...
原文:http://lukaseder.wordpress.com/2011/12/29/a-neater-way-to-use-reflection-in-java/ Java的反射机制是Java一个非常强大的工具, 但是和大多数脚本语言相比, 使用起来却是有种"懒婆娘的裹脚布——又臭又长"的感觉.  比如在PHP语言中, 我们可能这样写: // PHP $method = 'my_method'; $field = 'my_field'; // Dynamically call a method $object->$method(); ...
最近要实现定期删除N天前的日志。 以前都是利用运维的一个cron脚本来定期删除的, 总觉得可移植性不是很好, 比如要指定具体的日志文件路径, 有时候想想为什么log4j自己不实现这个功能呢? 后来发现在logback中已经实现了这个功能. 其配置如下: <appender name="vstore" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>default.log</file> ...
一本关于写代码的文集大杂烩, 涵盖编码, 结对编程, 代码质量等诸多方面, 也是在各个领域的老鸟给初哥的一些个人的经验总结。看这本书的人, 也各取所需吧, 没必要全看。 另外,译者的序写的不错^_^ =========================== ...
原文: http://java.dzone.com/reviews/java-performance 这个是老外写的关于《Java Performance》的书评,以前对这个东西也有所接触和了解,  最近略有实战, 希望有空能翻翻这本书。 本书涵盖了JVM调优(tuning), 测试(benchmarking)和剖析(profiling)的方方面面. 其中开篇第一章"策略, 步骤以及方法论"非常高屋建瓴的告诉你如何在开发过程中处理性能调优的问题. 性能调优是一项艺术. 知道如何使用调优工具是一回事, 而能对拿到的相关数据进行分析是另外一回事. 这本书就是用来让你 ...
Global site tag (gtag.js) - Google Analytics