Java
文章平均质量分 92
横云断岭
在国内大型互联网公司负责6K+应用,80K+机器的Spring Boot微服务技术落地,关注开发体验,微服务,APM,应用诊断,dubbo开源。
Github: https://github.com/hengyunabc
展开
-
dr.com导致Eclipse调试错误
停止dr.com即可。。万恶的dr.com,搞到chrome不能用代理,手机不能和电脑同步。fuck Cannot connect to VMcom.sun.jdi.connect.spi.ClosedConnectionException原创 2011-06-17 01:05:00 · 2067 阅读 · 0 评论 -
java中static的特殊用法
开始觉得很神奇,static变量怎么初始化。后来看代码发现了。public class testStatic { static int x = 0; static { x += 1; } public static void main(String[] args){ System.out.println(x); }}原创 2011-06-29 14:47:00 · 1132 阅读 · 0 评论 -
Java中String的hash函数分析
JDK6的源码: /** * Returns a hash code for this string. The hash code for a * String object is computed as * * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] * * using原创 2012-01-13 14:06:52 · 27804 阅读 · 1 评论 -
使用Hibernate注意事项一则
如果使用annonation,要注意如果字段是数据库中的关键字,则要为字段加上“`”号。如: @Column(name = "`describe`", nullable = false) public String getDescribe() { return this.describe; }否则会出现错误,如:org.springframework.dao原创 2012-02-22 15:31:28 · 1054 阅读 · 0 评论 -
RPC框架几行代码就够了
虽然以前也大概知道rpc的实现原理,也看过部分msgpack的实现,但是对于反射不是很了解。现在看到一个简单完整的实现,也解决我的以前的另一个疑惑:http://topic.csdn.net/u/20111028/14/092f98d0-ecdc-48b2-bf8b-317d5071ab6f.html?seed=361547001&r=77648361#r_77648361不过,还转载 2012-02-23 14:33:06 · 1806 阅读 · 1 评论 -
eclipse 设置备忘
每次都找半天,还不如自己记下来。1.设置新项目的默认编码Window->Preferences->General->Workspace->Text file encoding2.删除插件http://wiki.eclipse.org/FAQ_How_do_I_remove_a_plug-in%3FHelp > About Eclipse SDK > In原创 2012-03-19 10:51:47 · 1252 阅读 · 0 评论 -
Java的内存布局
from:https://www.ibm.com/developerworks/cn/java/j-codetoheap/从 Java 代码到 Java 堆理解和优化您的应用程序的内存使用Chris Bailey, Java 支持架构师, IBM简介: 本文将为您提供 Java™ 代码内存使用情况的深入见解,包括将 int 值置入一个In转载 2012-04-14 23:57:50 · 4698 阅读 · 2 评论 -
Java中的异常对程序效率有无影响
当异常没有发生时,没有影响。其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。所以如果没有抛出异常,那和普通的代码完全一样。至于在抛出异常时要处理的开销和不使用异常,用返回码等来判断不同的错误,不仅代码复杂,而且也一样要有处理的开销。测试代码:import java.util.Date;pub原创 2012-05-14 01:52:48 · 4467 阅读 · 0 评论 -
关于ISO-8859-1编码
在Java的一些程序中经常可以看到有这样的代码: String.getBytes("ISO-8859-1") 。虽然我是大概知道这个是以单字节来解码的,我也不写这样的代码。但是见得多了,总要多了解下。以下from http://baike.baidu.com/view/2613676.htmISO-8859-1 ISO-8859-1编码是单字节编码,向下兼容ASCII原创 2012-05-31 15:15:49 · 2395 阅读 · 0 评论 -
Java中long类型容易出现的bug
static long defaultSendSpeed = 1024 * 1024 * 1024 * 1024;这段代码,实际上 defaultSendSpeed是0!在Eclipse里也没有提示信息。应该在后面加上“L"。static long defaultSendSpeed = 1024 * 1024 * 1024 * 1024L;遇到好几次了,记之。在看了《J原创 2011-07-21 14:21:17 · 2292 阅读 · 1 评论 -
从Java中String的subString函数说起
今天在用VisualVM查看进程的堆dump时,发现一些有意思的地方,见下图:在“OQL控制台”页面中可以看到“过度分配的字符串”,“布尔值太多”。从这里,可以看到一些有意思的地方。有垃圾回收机制的语言通常有很多优化1..String是不能改变的,所以subString通常是和原来的String使用的是同一份内存,不会有内存拷贝。所以有可能会出现有一个小字符串占原创 2012-06-03 14:51:49 · 2956 阅读 · 0 评论 -
Java中的sun.misc.Unsafe包
chronicle项目:https://github.com/peter-lawrey/Java-Chronicle这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高原创 2012-06-13 00:53:57 · 24525 阅读 · 2 评论 -
Java中的数据结构一览
Java的类库实在是很多,以至于很多人都不太了解,结果总是自己造轮子。下面汇总了Java中的一些数据结构,加上一些实现的分析,同时备忘。至于时间复杂度,个人觉得写出来的用处不大。如果明白它是怎么实现的,那自然就知道它的时间复杂度。如果不理解它的实现,把时间复杂度背得再熟也没用。接口:Collection子接口:BlockingDe原创 2012-06-13 02:14:13 · 18150 阅读 · 0 评论 -
测试Java的synchronize和ReentrantLock在单线程下的效率
ReentrantLock 在多线程情况下要远胜synchronize,这点没有疑问。最近要写个程序,有个变量是有多数情况下是一个线程读写,有少数情况下是多个线程并发读写。所以要测试下ReentrantLock 在单线程下和synchronize的效率对比。在测试的过程中发现一个有意思的现象。测试代码见后面。测试代码1结果:noLockTime: 0:00:00.004no原创 2012-06-14 02:40:21 · 3270 阅读 · 0 评论 -
Mysql Java驱动代码阅读笔记及JDBC规范笔记
一前言:以前刚开始用java连接mysql时,都是连猜带蒙的。比如:一个Statement,Connection何时关闭?Connection能不能先于Statement关闭?ResultSet是怎样存放数据的?怎样才能高效操纵ResultSet?PrepareStatement到底是怎样回事?连接池是怎样工作的?二、从JDBC driver代码分析:在原创 2012-07-06 15:32:11 · 4593 阅读 · 2 评论 -
为什么Java中的HashMap<K, V>的get函数是get(Object key),而不是get(K key)?
帮别人的代码改bug,发现有一大堆bug是由get或者remove传递进去的参数类型不匹配而造成的。比如: Map m = new HashMap(); m.put(new Short((short) 2), "2222"); System.out.println(m.get(2));上面的代码输出是null。一般人很难发现传递进去的int和Short类型不匹配,而原创 2012-06-27 16:16:58 · 8870 阅读 · 6 评论 -
ActiveMQ-WebConsole修复增强版
ActiveMQ-WebConsole修复增强版项目地址:https://github.com/hengyunabc/activemq-webconsole-enhanced这个修复增强版基于ActiveMQ5.8.0:http://activemq.apache.org/activemq-580-release.html 。修复了一些显示的bug,并增强了web cons原创 2013-06-29 17:35:36 · 2509 阅读 · 0 评论 -
Spring Mobile是如何判断访问设备的类型的
Spring最近换域名了,去转转,发现了一个有意思的项目:spring mobile。http://projects.spring.io/spring-mobile/这个项目有很多实用的功能,如识别访问我们网站的设备是什么类型的(手机,平板,PC),据域名或者url来切换不同访问内容,据不同的访问设备转到不同的view中。识别访问设备类型的核心代码在org.springfr原创 2013-11-17 08:04:23 · 8633 阅读 · 0 评论 -
Java泛型原理笔记
T 到底是什么东东Java泛型的语法相当的别扭,看到一个这样的写法,感觉到很神奇,正好研究下Java泛型是怎么实现的。public class A{ public static void main(String[] args) { A a = new A(); a.test(); String r = a.test(); } public T test() {原创 2013-11-16 18:36:35 · 5440 阅读 · 0 评论 -
JSP 笔记
很久以前的笔记了,翻出来整理下。有用的资源在Tomcat的webapps/examples/ 目录下有很多实用详细的jsp代码例子。JSP的本质首先,JSP本质上是一个Servlet,jsp编绎器会把jsp文件编绎成一个对应的java类,而这个java类是实际上是一个servlet,从继承层次就可以看出来。比如home.jsp,在tomcat下会生成一个home_jsp的类:原创 2013-11-16 03:50:28 · 1632 阅读 · 0 评论 -
Java中异常Exception的实现的一些分析
文章地址:http://blog.csdn.net/hengyunabc/article/details/14108617前言:最近发现一个很有用的Eclipse插件:http://andrei.gmxhome.de/bytecode/,可以在Eclipse直接查看,调试Java的字节码。顺带研究了下Java里异常的实现机制,还有JDK7里的mutil catch的实现原理。原创 2013-11-03 22:05:31 · 6924 阅读 · 0 评论 -
编绎OpenJDK
因为对于Java里的vtable,itable,有个地方还没搞明白,不得已去下个OpenJDK来研究下。本来很不愿意去编绎OpenJDK,因为很有可能做的只是无用功,还有可能要去解决各种找不到链接库的问题。不过,没想到虽然有些麻烦,但是出人意料的顺利。环境:ubuntu 13.10,已经安装了oracle jdk7。首先下载:wget http://down原创 2013-11-20 01:56:10 · 2990 阅读 · 0 评论 -
不用重新配置,用jconsole连接远程机器进程及获得本地进程的JMX Url的终极办法
估计有很多人都在想用jconsole连接远程机器上的进程时,发现没有配置jmx端口,或者其它的东东。下面介始一种很简单的办法,可以不用重启远程机器的进程:ssh -X 192.168.66.66 -l username连接上去之后,可以直接运行jconsole进程,然后在本机就会弹出一个jconsole的窗口了。实际上这个不是用jconsole连接远程机器的进程,而是把原创 2013-11-30 21:39:42 · 5462 阅读 · 0 评论 -
编绎调试HotSpot JVM及在Eclipse里调试
编绎整个OpenJDK要很久,而且有很多东西是不需要的。研究HotSpot的话,其实只要下HotSpot部分的代码就可以了。下面简单记录下编绎调试HotSpot一些步骤。一、编绎进入hotsopt的make目录下:cd code/cpp/openjdk/hotspot/make/用make help可以看到有很多有用的信息。当然查看Makefile文件,里面也有很多有用的注释。...原创 2013-12-08 16:20:29 · 9696 阅读 · 2 评论 -
http request乱码的真相
当然,终极原因http协议里没有规定request一定要指定编码,导致浏览器,web服务器都各搞一套……下面一一理清。首先,从浏览器端看下有多少种情况:1.在浏览器的地址栏,或者搜索框里输入地址:http://www.test.com/衣服/search?keyword=T恤 2.在一个指定了编码的网页中,提交一个form,如: 你好 搜索当然还有原创 2013-12-01 15:58:13 · 30789 阅读 · 1 评论 -
http response乱码的真相
这个是很久以前的笔记,最近遇到一个编码问题,重新把它翻出来了。这个只和java servlet有关,现在通常都用各种框架,很少会直接用到Servlet了。查看servlet源代码的方法查看servlet源代码的方法。因为servlet只是一些接口,并不是真正的实现,所以,如果想看真正的代码。要去下对应的服务器的实现的源代码。比如Tomcat的代码在这里:http://a原创 2013-12-01 16:09:44 · 19589 阅读 · 0 评论 -
适应各种开发,测试,线上,线下环境的Spring配置方式
背景假设开发了一个中间件,比如是一个缓存系统,这个中间件要配置一个IP地址,还要配置一个Factory,从这个Factory里得到一个client,如: <bean name="cacheFactory" class="com.test.cache.Factory"> <property name="address" value="192.168...原创 2014-01-25 22:36:43 · 9565 阅读 · 0 评论 -
Java7里try-with-resources分析
这个所谓的try-with-resources,是个语法糖。实际上就是自动调用资源的close()函数。和Python里的with语句差不多。例如: static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(...原创 2014-01-18 22:18:34 · 40358 阅读 · 9 评论 -
hazelcast的坑爹事
简介开源中国的简介:Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:提供java.util.{Queue, Set, List, Map}分布式实现。提供java.util.concurrency.locks.Lock分布式实现。提供java.util.concurrent.ExecutorService分布式实现。提供用于一对多关系的分布式MultiMa原创 2014-01-19 22:11:44 · 35714 阅读 · 4 评论 -
Web API 版本控制的几种方式
http://www.troyhunt.com/2014/02/your-api-versioning-is-wrong-which-is.html这篇文章写得很好,介绍了三种实现web api版本化的三种方式。我从评论里又收集到两种方式,所以一共是5种:方式一:利用URL HTTP GET:https://haveibeenpwned.com/api/v2/breacheda...原创 2014-03-05 20:28:32 · 39673 阅读 · 13 评论 -
为什么在Spring的配置里,最好不要配置xsd文件的版本号
为什么dubbo启动没有问题?这篇blog源于一个疑问:我们公司使了阿里的dubbo,但是阿里的开源网站http://code.alibabatech.com,挂掉有好几个月了,为什么我们的应用启动没有问题?我们的应用的Spring配置文件里有类似的配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns...原创 2014-03-30 14:24:31 · 64244 阅读 · 8 评论 -
spring如何在xml里配置Calendar,Date
文章地址:http://blog.csdn.net/hengyunabc/article/details/14107963在Spring MVC里可以通过message converter机制来对数据进行格式化,但是在普通的Spring xml配置里就无能为力了。在网上找了一通,发现也有很多人苦恼这个问题,不妨记录下。Spring 自带一个PropertyEditor的机制,但原创 2013-11-03 20:26:55 · 4333 阅读 · 0 评论 -
JVM GC调优一则--增大Eden Space提高性能
缘起线上有Tomcat升级到7.0.52版,然后有应用的JVM FullGC变频繁,在高峰期socket连接数,Cpu使用率都暴增。思路思路是Tomcat本身的代码应该是没有问题的,有问题的可能是应用代码升级,或者环境改变了,总之Tomcat的优先级排在最后。先把应用的heap dump下来分析下:jmap -dump:format=b,file=path pid用IBM的...原创 2014-05-03 18:29:54 · 71771 阅读 · 7 评论 -
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom
Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom原创 2013-11-30 15:19:06 · 27768 阅读 · 1 评论 -
写程序很难之logstash之file input插件实现分析
前言写程序有时候真的有点难,要考虑各种情况。应用在运行中,会不断生成日志文件。假如要实现一个日志收集的工具,不考虑其它的分析功能,只考虑收集,有哪些方面要考虑的?首先看下一般的log框架是如何输出日志的:可能是这样的:a.log.1, a.log.2, a.log.3, a.log.4, a.log.5 循环输出;可能是这样的: a.2014-5-5.log, a.2014-原创 2014-05-14 20:24:09 · 28721 阅读 · 4 评论 -
ZPush--基于netty4实现的苹果通知推送服务(APNs)Java客户端
简单说下实现苹果通知推送服务(APNs)客户端的一些要注意的地方:使用长连接;sanbox服务器是没用的,调试时直接用“gateway.push.apple.com”域名;对于错误的Notification,苹果会回应一个Error response,里面有个identifier,在这个identifier之后的Notification全都失败;因此发送者要缓存已经发送的Not原创 2014-05-10 00:46:11 · 8472 阅读 · 12 评论 -
Apache HttpClient 没有设置time out导致应用长时间阻塞的问题
现在的对外接口一般都是Http + json的,因为简单,语言无关。Apache HttpClient应该是最常用的Java http组件了。这货有个坑爹的地方,Apache HttpClient如果对方不回应,或者网络原因不返回了,那么HttpClient会一直阻塞。这种情况在公网可能比较容易碰到。在内网时,也有一次因为一台中转的nginx挂掉而导致hessian请求长时间阻塞。因为Ht原创 2014-04-21 19:46:12 · 25388 阅读 · 2 评论 -
利用hsdis和JITWatch查看分析HotSpot JIT compiler生成的汇编代码
安装hsdis要查看JIT生成的汇编代码,要先装一个反汇编器:hsdis。从名字来看,即HotSpot disassembler。实际就是一个动态链接库。网络上有已经编绎好的文件,直接下载即可。国内的:http://hllvm.group.iteye.com/也可以自己编绎,只是编绎hsdis,还是比较快的。参考这里:http://www.chrisnewland.com...原创 2014-05-25 15:04:26 · 13897 阅读 · 5 评论 -
从一篇Blog看两个并发编程错误
发现公司支付宝接入的代码有点神奇,在网上搜索了下,找到原始版本。估计有不少人都是抄那份代码的。原文在:http://blog.csdn.net/simdanfeg/article/details/9011603 Android支付接入(一):支付宝但是代码里有两个明显的并发问题,尽管在Android下可能不会有问题。下面摘抄一段: public class Mobi原创 2014-07-03 20:03:00 · 2138 阅读 · 1 评论 -
写程序很难之去除字符串的空白字符
在做性能调优时,用JProfiler测试Web应用的性能,发现有个replaceBlank函数占用了10%的CPU时间,进去看了下,是个简单的用正则去除XML文档里空白字符串的功能。但是这个简单功能却消耗了10%的性能。在Web应用里,去掉空白字符串,似乎是个简单的功能,但是真正写起来,却也有些麻烦事。总结下。方式一:正则表达式http://stackoverflow.com/ques原创 2014-06-16 02:51:44 · 6540 阅读 · 0 评论