
go deep into final
文章平均质量分 66
axman
有寂寞陪着,我就不会寂寞。
展开
-
在java中利用动态编译实现eval
我们知道,在很多脚本语言中都有eval涵数,它可以把字符串转换为表态式并执行.如在javaScript中var str = aid.value + ".style.top = 10;"把一个id为"aid"的控制的值取出来加合并成一个字符串,如果aid的值是"axman",则str = "axman.style.top = 10"现在我们要让控制axman移动到顶部为10的位置:eval(str)原创 2004-11-04 15:09:00 · 6322 阅读 · 3 评论 -
short类型的+操作和++操作的区别,竟然没有一个正确答案.
今天再次在卫琴的论坛上看到有人问这样的问题:short tmp = 0;为什么tmp = tmp +1;错误但 tmp ++;却正确.用google和yahoo竟然搜索不到一个正确的答案.都说java程序员不需要关心底层,真的吗? s+1中,+操作有两个操作数,JVM指令中+操作最小类型是int,其它的byte、short、char都以iload,iadd来操作,然后用i2b,i2s,i2c原创 2007-03-23 09:53:00 · 4079 阅读 · 8 评论 -
apache如何才能修改头域名称
如果我们要把一个用户请求头的值修改为固定值,置空或者追加固定值。都可以有RequestHeader指令的set|unset|add|append来修改,值甚至可以获取环境变量。但是如果我们要把一个头域的值赋给另一个头域,或者说就是修改头域的名称,如何做到?比如:用户请求发送的"User-Agent: IE15",我想把这个IE15赋给一个我自己命名的头域,如myHeader,我在后端getHead原创 2012-03-08 09:28:41 · 4545 阅读 · 0 评论 -
JAVA中多接口应用技巧
JAVA在设计接口和类的规则时,有一个明确的规定。JAVA不支持类(实现)的多重继承,但支持接口(定义)的多重继承。我已经无从了解这个设计的初衷,但这样的规定隐含了以下的意义。接口是设计的产物,即在需求设计时定义的对软件功能的定义。而类是实现的产物,它是在实现过程中根据实现的具体情况而完成的。如果用代码来说明就是:在设计时我需要我设计的“模块”提供两个功能:1.提供两个整数相加的功能。2.提供两个原创 2009-02-26 12:18:00 · 6476 阅读 · 8 评论 -
hash collision攻击的延续
前段时间的hash collision导致拒绝服务的攻击,各种WEB容器都进行了修补。GET方法因为客房端和服务端本身的实现基本可以限制URL的长度而不至于产生大量key-value。 大多数http服务器和WEB容器都是判断POST数据中参数个数,如x-www-form-urlencoded时判断&的个数,multipart时判断boundary的个数,超过一定个数即认为是攻击。但是只要应用端使原创 2012-04-10 16:06:55 · 2458 阅读 · 0 评论 -
一个java crash的故障分析过程
一个应用在周五出现java进程消失,没有任何日志。先查看/var/log/message中无oom_killer信息,所以只能拿core。该应用是一个集群,通知他们将出现crash的服务器上打开ulimit,等待生成core文件 。今天周一,下午应用负责人紧急找我,说同时出几台crash了。开了ulimit参数的那台服务器coredump已经生成。登录到该服务器上,先是gdb $JAVA_HOME原创 2012-07-09 22:35:50 · 11057 阅读 · 4 评论 -
看完scala,发现java中finally允许返回结果真的是一种极其错误的设计。
try{ return x;}catch(Excpeiont e){ return y;}finally{ return z;}这样的代码无论如何都返回z,那么上面的任何return都显得没有意义。所以我们在绝大多数情况下都不会在finally中使用return语句,因为这使得这个方法几乎返回一个恒定的结果。但这并不能保证一个水平很差的程序员在finally中返回结果。我说原创 2012-08-21 09:36:04 · 3922 阅读 · 0 评论 -
NIO中几个非常重要的技术点
这些都是在实践中踩过雷的,今天某应用再次踩雷,把遇到的几个雷都收集一下,给后来者参考。1.即使是accept事件,没有真正的read和write,Channel也要关闭,否则unix domain socket会被泄漏(WINDOWS更可怕),因为NIO的每个Channel上都有两个FD用来监听事件(接收和发送走不同的FD)。2.cancel事件导致CPU占用100%,http://bugs.su原创 2011-11-23 12:11:46 · 6015 阅读 · 0 评论 -
ResultSet.TYPE_SCROLL_SENSITIVE到底发生了什么?
这个问题我在几年前说过,但今天再次从CSDN上看到有人问这个问题,可以看出,真正懂这个问题的人1%都不到。我再次把这个问题写在这里,希望光临我的BLOG的人能真正了解它。我们先来做一个例子,在例子中我用的是mysql-essential-5.1.30-win32版。来跟我做以下几个命令:mysql> create database axman;mysql> use axman;mysql> cre原创 2009-03-12 14:39:00 · 14170 阅读 · 17 评论 -
SIFT图形比对的斜率优化方法
对于原图和目标图差别不是很大,一般而言躁点干扰性不是很大,但是如果原图本身很小而又没有强特征,而目标图很大的情景下,误匹配的情况非常容易发生。比如原图是一张很小的logo,目标图是一个页面截屏,因为目标图相对原图而言太大,总能找到原图上一些特征点,就象拿五柆沙子去沙难上总能找到匹配的五柆沙子。我们看下面的图。左上角的原图在右下边的页面中并没有实际的存在,却发现几十个匹配的特征点,当然这些是百分之百原创 2013-04-11 16:50:33 · 8446 阅读 · 18 评论 -
也来说说java Memory Leak
Java有内存泄漏吗?有。虽然有人说这个说法不准确,但是在C/C++程序中,我们把由当前进程开辟但当前进程在逻辑上却无法再管理的那些内存称为被进程泄漏的内存。事实上java同样会有这样的情况。 当我们最先接触java时就因为它自动管理内存不需要程序员手工干预而带来的方便性的原因喜欢上了它,但这个自动并不是全能的。对于一些隐性引用所引起的内存泄漏,有时很长时间甚至几个月,几年我们也很难原创 2009-09-22 11:29:00 · 5661 阅读 · 4 评论 -
sift的java实现解述
代码已经开源到github上,https://github.com/alibaba/simpleimage项目,其中的 analyze模块中。原始图片为:主要调用方法: BufferedImage img = ImageIO.read(logoFile); RenderImage ri = new RenderImage(img); ...原创 2013-07-04 17:05:07 · 12627 阅读 · 36 评论 -
一些周期性GC的原因
1.对于tomcat:预防内存泄露监听器 JreMemoryLeakPreventionListener在工作,默认每隔一小时触发一次System.gcClass clazz = Class.forName("sun.misc.GC");Method method = clazz.getDeclaredMethod( "requestLatency",原创 2014-08-01 10:43:40 · 3862 阅读 · 0 评论 -
再说final变量
从jdk1.0到今天,JAVA技术经过十余年的发展,技术上已经发生了巨大的变化.但final变量的定义从它诞生那天起,就没有发生任何变化,也就是这十多年它就一直表示它原来的意思.但遗憾的是,经过十多年仍然有90%的人没有理解它的真实含义,也没有一篇文章,包括我所见到的所有介绍JAVA的书籍(包括TKJ)都没有说清楚,我相信肯定有些作者是理解的,但没有一个作者向读者说清楚.而中国网友大多数人被一篇胡原创 2006-12-25 17:41:00 · 15142 阅读 · 31 评论 -
关于substring的char[]共享
我们知道,对于一个较大的String对象如果从中获取一个子串,jdk默认子串的char是共享原串的char,即子串的char[]是原串的char[]中的一部分,这样对于一个原串多个子串的情况可以节省很大空间。但是也正是因为共享,如果一个很大的原串在获取一个很小的子串后,原串不再需要,却因为子串共享了char[]一直不能释放,在很多时候造成相反的结果,甚至出现性能上的问题:参见:https://co原创 2014-11-03 09:09:27 · 2437 阅读 · 0 评论 -
优化之误!
如果在jvm启动时load飙高,然后逐渐正常的情况 ,我们经常会怀疑到 JIT 编译的问题。增加启动时编译的核心数肯定是一个有效的解决办法,但是这个参数在启动时设置后,如果正常运行时不需要这么多核来工作,你又不能在jvm已经启动的情况下动态降低这个参数。所以使用-XX:+TieredCompilation进行分层编译,可以缓解这个问题,事实上也有很多case使用这个参数解决了jvm启动时load飙原创 2015-07-20 14:38:49 · 3466 阅读 · 0 评论 -
JDK1.8优化场景收集
一.hashmap,原来不够随机,不均匀时,有的桶退化成链表,get的性能低。jdk8优化hashmap,平衡树,get性能不会有极端差的情况。同学们请留言啊,让我统一收集起来共享给大家。原创 2016-03-03 15:12:18 · 2841 阅读 · 0 评论 -
make a apache core file
ulimit -c unlimitedulimit -c output: unlimitedvi the httpd.conf,add "CoreDumpDirectory current _user_home",defaultly the corefile will dump to "/",this directory owner is root.restart the httpd.acce原创 2012-01-16 17:36:39 · 1970 阅读 · 0 评论 -
Java中连结MySQL启用预编译的先决条件是useServerPstmts=true.
在Java编程中,应用代码绝大多数使用了PreparedStatement,无论你是直接使用JDBC还是使用框架。 在Java编程中,绝大多数使用了使用了PreparedStatement连接MySQL的应用代码没有启用预编译,无论你是直接使用JDBC还是使用框架。 在我所能见到的项目中,几乎没有见过启用MySQL预编译功能的。网上更有文章说MySQL不支持预编译,实在是害人不浅。原创 2011-10-28 10:47:31 · 15728 阅读 · 9 评论 -
JAVA6,请使用字符串加操作。
从JAVA诞生那天起,稍微“有些水平”的程序员都被告知,如果有大量的字符串连结,请不要使用字符串相加,而应该使用StringBuffer的append操作然后toString().到了JAVA5,我们又被告诉知,StringBuilder是StringBuffer的非同步版,所以绝对大多数时候我们“更”可以用StringBuilder来代替加操作。因为一个可能被多线程访问的实例字段的StringB原创 2009-09-03 19:04:00 · 7555 阅读 · 33 评论 -
深入equals方法
深入equals方法equals方法的重要性毋须多言,只要你想比较的两个对象不愿是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较.下面的内容只是API的规范,没有什么太高深的意义,但我之所以最先把它列在这儿,是因为这些规范在事实中并不是真正能保证得到实现.1.对于任何引用类型, o.equals(o) == true成立.2.如果 o.equals(o1) == tru原创 2004-11-09 14:48:00 · 3437 阅读 · 4 评论 -
自动归还的对象池--一个并不美丽的传说
自动归还的对象池--一个并不美丽的传说有一个美丽的传说,精美的石头它会唱歌........多么令人神往的事啊(不用买MP3了),既然连石头都会唱歌,于是太多的传说诞生了.程序员杂志第十一期上,发表了一篇题为>,作者为我们描述了一个美妙的可以自动归还的对象池,让每一个痛苦于垃圾回收的程序员带来了心动的向往.但传说真的会成为现实吗?通读全篇,没有发现一行示意性的实现代码,所有代码片断只是示意了获取可回原创 2004-12-11 10:35:00 · 2162 阅读 · 1 评论 -
集合类参数的传递
对于传参,从计算机的本质而言是传值.因为从数据模型而言计算机只认识数学值.但是不同的数学值代表的意义不同,有的数学值表示的是另一个数据的地址.所以根据这个数学值能访问到它表示的数据,我们就把这样的操作称为传址.其实就是某个数据所在的地址的数学表示.其本质还是传值. 从应用层而言我们所说的地址当然是指虚拟地址.而对于中间语言(java的byteCode/.NET的IL)而言是托管地址.我们不必关心实原创 2007-09-17 11:02:00 · 2829 阅读 · 2 评论 -
asm中导出方法本地变量
在方法出现异常时需要把传入参数值和本地变量值异导出来供分析。之前因为测试的对象都是普通的值,写的loadLocalVarArray能正常工作。这几天要在方法进入时inject一个long startTime供在方法退出时计算方法方法执行时间,发现如果本地变量是long和doubl原创 2011-05-12 11:37:00 · 3282 阅读 · 11 评论 -
利用ASM进行方法拦截中获取相关数据的实现
方法拦截中获取相关数据的实现 如果你看不懂我的上一篇文章,请你退回去一步一步根据例子运行起来,在你运行的过程中你会加深对程序的理解。本篇文章主要是利用ASM来在拦截方法时获取方法调用时的相关数据,如参数列表,本地变量列表,方法调用栈以及操作状态码等重要数据,以及方法执行时间。结合当前系统的内存状态,CPU占用率等系统信息可以为业务逻辑出现异常时提供最可靠的分析依据。本篇要求对ByteCode有一定原创 2009-06-20 22:37:00 · 6629 阅读 · 10 评论 -
深入 Java 初始化
关于Java 初始化,有多文章都用了很大篇幅的介绍。经典的>更是用了专门的一章来介绍Java初始化。但在大量有代码实例后面,感觉上仍然没有真正深入到初始化的本质。本文以作者对JVM的理解和自己的经验,对Java的初始化做一个比深入的说明,由于作者有水平限制,以及JDK各实现版本的变化,可能仍然有不少错误和缺点。欢迎行家高手赐教。要深入了解Java初始化,我们无法知道从程序流程上知道JVM是按什么顺原创 2004-11-05 02:11:00 · 4014 阅读 · 7 评论 -
几个c++语句的汇编实现(H1指令)
;*p = 5 ldc 5 ; push ld p ;load ps value sti ;save 5 to mem[ps value] ldi ;get the value dout ldc /n aout;*** q = 10 ldc 10 push ld q ;ac = 17 *qs addr ldi ;ac = 18 **qs addr原创 2007-01-29 15:47:00 · 2500 阅读 · 0 评论 -
从OLE到SOA,SOA其实很简单!
阿三看到一个非常有兴趣的网页,想把它保存下来,于是,阿三点击"文件->另存为",选择"网页,全部(*.htm,*.html)".OK,阿三的硬盘上多了一个a.html文件和一个a文件夹,里面保存了这个网页上的所有资源,图片,css,js一大堆.阿三看着这一大堆文件,想整理又不太方便,于是阿三打电话给Axman,"大哥,我能不能把当前网页保存为一个文件又能显示原来的效果啊?"Axman晕了半天,没敢原创 2007-12-17 16:54:00 · 2104 阅读 · 1 评论 -
C#与.NET 3.0高级程序设计(特别版)问题与错误列表
这是一本称为“圣经”的书,入手初看了一下,称“圣经”确实勉强了。其中一些深入的问题作者根本没有理解。当然首先肯定书不失为一本好书,但问题还是不少,现择录于此。希望再版时能有所修正。我边读边往这里加。-------------------------------------------------如何看"圣经"?人类历史上那些曾经在某一时期辉煌的经典如璀璨的明星指引着历史中的人们不断前进.但是任何经原创 2008-03-05 12:01:00 · 3046 阅读 · 6 评论 -
Consistent Hashing
ImplementationFor completeness here is a simple implementation in Java. In order for consistent hashing to be effective it is important to h原创 2011-03-30 10:49:00 · 1673 阅读 · 1 评论 -
深入 HashCode 方法
Go deep into HashCode为什么HashCode对于对象是如此的重要?一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那些真正的复杂的Hash算法相比还不能叫真正的算法,它如何实现它,不仅仅是程序员的编程水平问题,而是关系到你的对象在存取是性能的非常重要的关系.有可能,不同的HashCode可能会使你的对象存取产生,成百上千倍的性能差别.我们先来看一下,在JAV原创 2004-11-26 21:44:00 · 10139 阅读 · 7 评论 -
为什么对象被new 以后在执行dup操作?
为什么对象被new 以后在执行dup操作?今天有个朋友问我,为什么一个new一个对象的指令在new后面紧跟的是dup操作?他说搜了可能找到的搜索引擎都找不到答案,包括翻了>这本书也没有任何说明.我们先来看看为dup指令的作用,dup指令可以复制栈顶的一个字再压入栈,也就是把栈顶的内容做个备份.大家知道,JAVA/CLR是完全基于栈的实现,任何操作都是入栈出栈,没有任何寄存器,所以如果要对某一操作数原创 2008-05-05 14:59:00 · 4628 阅读 · 6 评论 -
可以修改类结构的java HostSwap实现思想
前段时间做动态无侵入拦截的工作,对于“即时加载”新类有了一些较深入的理解,已经写出两篇文章在这里。我们已经解决了“如何修改”的问题,但是另一个问题是“能修改成什么样子”。利用Instrumentation来动态redefine的类,只能修改方法,即在原有的方法代码插入代码来实现我们需要的逻辑。却无法增加,删除方法和字段,即修改类定义的结构。 目前真正能做到“即时”加载结构已经被修改的新的class原创 2009-08-28 16:58:00 · 2297 阅读 · 6 评论 -
深入研究线程池
深入研究线程池一.什么是线程池?线程池就是以一个或多个线程[循环执行]多个应用逻辑的线程集合.注意这里用了线程集合的概念是我生造的,目的是为了区分执行一批应用逻辑的多个线程和线程组的区别.关于线程组的概念请参阅基础部分.一般而言,线程池有以下几个部分:1.完成主要任务的一个或多个线程.2.用于调度管理的管理线程.3.要求执行的任务队列.那么如果一个线程循环执行一段代码是否是线程池?如果极端而言,应原创 2007-01-12 14:52:00 · 77382 阅读 · 23 评论 -
do{}while(false);在java中的妙用.
在以前写C程序中经常会有这样的情景. 打开一个资源的句柄. 在打开的这个资源上操作进行多次操作,每一步失败都要关闭这个资源句柄并摧毁它:if(x1) { close(hd);destory(hd);}if(x2) { close(hd);destory(hd);}if(x3) { close(hd);destory(hd);}等等,如果操作超过3条语句,比如有七八条头十头语句,第个条件分支中都写相原创 2008-10-13 14:49:00 · 4469 阅读 · 3 评论 -
是否需要设置obj = null?
这个问题原贴发表在这儿:http://topic.csdn.net/u/20090408/13/89c22659-e194-488d-add1-23256b22465e.html?seed=2029607558 虽然是C#技术栏目,但对JAVA完全适用。但所以答案没有一个是正确且完整的。下面是我的答案,我有足够的自信说这是真正正确的答案,除非JVM和CLR规范重新修改了。 正常情况下生成一个对象后原创 2009-04-09 09:06:00 · 3100 阅读 · 6 评论 -
动态非侵入拦截
动态非侵入拦截什么叫无侵入拦截? 在JAVA中要拦截一个方法调用,有多种方式,最容易也是最流行的就是动态代理。动态代理方式实现起来简单,你只要提供一个接口和拦截处理的handler并在invoke中提供要拉截的方法调用时的附件操作,然后所有对需要拦截的方法所在的对象都由代理来生成就可以在运行时动态地实现对方法调进行拦截。 事实上动态代理模式从描述上也看出了它的无奈。1. 所有需要拦截的方法所在的类原创 2009-06-14 12:46:00 · 4267 阅读 · 7 评论 -
YGC越来越慢的原因分析
http://www.atatech.org/articles/51137#不知道从外部能否访问到,非常经典的分析,思路,工具用得确到好处。转在这里,记录一下。转载 2016-03-14 10:45:34 · 1573 阅读 · 1 评论