分类 语言 下的文章

java NaN很有料哦

为了了解NaN,发现了一个好的代码库:http://www.programcreek.com/
下边是ibm上的文章,但是看完之后还是有点模糊
https://www.ibm.com/developerworks/cn/java/j-jtp0114/
但是结论和明确,以后做数据统计不要用float或者是double了,尽量采用整数计数,这也是为什么人民币要换算成毫厘吧!
Java 语言支持两种基本的浮点类型: float 和 double ,以及与它们对应的包装类 Float 和 Double 。它们都依据 IEEE 754 标准,该标准为 32 位浮点和 64 位双精度浮点二进制小数定义了二进制标准。
特殊数字
除了编码所允许的值的标准范围(对于 float ,从 1.4e-45 到 3.4028235e+38),还有一些表示无穷大、负无穷大、 -0 和 NaN(它代表“不是一个数字”)的特殊值。这些值的存在是为了在出现错误条件(譬如算术溢出,给负数开平方根,除以 0 等)下,可以用浮点值集合中的数字来表示所产生的结果。
这些特殊的数字有一些不寻常的特征。例如, 0 和 -0 是不同值,但在比较它们是否相等时,被认为是相等的。用一个非零数去除以无穷大的数,结果等于 0 。特殊数字 NaN 是无序的;使用 == 、 < 和 > 运算符将 NaN 与其它浮点值比较时,结果为 false 。如果 f 为 NaN,则即使 (f == f) 也会得到 false 。如果想将浮点值与 NaN 进行比较,则使用 Float.isNaN() 方法。表 1 显示了无穷大和 NaN 的一些属性。
在 Java 程序中使用浮点数和小数充满着陷阱。浮点数和小数不象整数一样“循规蹈矩”,不能假定浮点计算一定产生整型或精确的结果,虽然它们的确“应该”那样做。最好将浮点运算保留用作计算本来就不精确的数值,譬如测量。如果需要表示定点数(譬如,几美元和几美分),则使用 BigDecimal 。
http://blog.csdn.net/naruto_ahu/article/details/8805808

情人节html5玫瑰花源码

情人节html5玫瑰花源码

玫瑰花

玫瑰花

<html>
<head></head>
<body>
<iframe width="1200px" scrolling="no" height="820px" frameborder="0" noresize="noresize" src="javascript:'
<!doctype html>n<html>nt<head>ntt<title>JS1k, 1k demo submission [1022]</title>ntt<meta charset=&quot;utf-8&quot;
/>nt</head>nt<body>ntt<canvas id=&quot;c&quot;></canvas>ntt<script>ntttvar b =
document.body;ntttvar c = document.getElementsByTagName('canvas')[0];ntttvar a = c.getContext
('2d');ntttdocument.body.clientWidth; // fix bug in webkit: http://qfox.nl/weblog/218
ntt</script>ntt<script>n// start of submission //nwith(m=Math)
C=cos,S=sin,P=pow,R=random;c.width=c.height=f=500;h=-250;function p(a,b,c){if(c>60)return[S(a*7)*(13+5/(.2+P
(b*4,4)))-S(b)*50,b*f+50,625+C(a*7)*(13+5/(.2+P(b*4,4)))+b*400,a*1-b/2,a];A=a*2-1;B=b*2-1;if(A*A+B*B<1){if(c>37){n=
(j=c&1)%3F6:4;o=.5/(a+.01)+C(b*125)*3-a*300;w=b*h;return[o*C(n)+w*S(n)+j*610-390,o*S(n)-w*C(n)+550-j*350,1180+C
(B+A)*99-j*300,.4-a*.1+P(1-B*B,-h*6)*.15-a*b*.4+C(a+b)/5+P(C((o*(a+1)+(B>0%3Fw:-w))/25),30)*.1*(1-B*B),o/1e3+.7-
o*w*3e-6]}if(c>32){c=c*1.16-.15;o=a*45-20;w=b*b*h;z=o*S(c)+w*C(c)+620;return[o*C(c)-w*S(c),28+C(B*.5)*99-b*b*b*60-
z/2-h,z,(b*b*.3+P((1-(A*A)),7)*.15+.3)*b,b*.7]}o=A*(2-b)*(80-c*2);w=99-C(A)*120-C(b)*(-h-c*4.9)+C(P(1-b,7))
*50+c*2;z=o*S(c)+w*C(c)+700;return[o*C(c)-w*S(c),B*99-C(P(b, 7))*50-c/3-z/1.35+450,z,(1-b/1.2)*.9+a*.1, P((1-
b),20)/4+.05]}}setInterval('for(i=0;i<1e4;i++)if(s=p(R(),R(),i%2546/.74)){z=s[2];x=~~(s[0]*f/z-h);y=~~(s[1]*f/z-
h);if(!m[q=y*f+x]|m[q]>z)m[q]=z,a.fillStyle=&quot;rgb(&quot;+~(s[3]*h)+&quot;,&quot;+~(s[4]*h)+&quot;,&quot;+~(s[3]
*s[3]*-80)+&quot;)&quot;,a.fillRect(x,y,1,1)}',0)n// end of submission //
ntt</script>nt</body>n</html>'"></iframe>
</body>
</html>

Java程序员进化为架构师掌握的知识

一:Java知识
1、进制转换
2、Java基本数据类型
面向对象相关知识
3、类、接口、抽象类
this关键字、static关键字、final关键字
方法的参数传递机制
Java垃圾回收机制
四种内部类的实现方式
方法重写(override)与重载(overload)的联系与区别通过多态实现程序代码的松耦合
Java 异常体系详解(checked exception 与 unchecked exception)
JDK 5.0 新特性(泛型、枚举、可变参数、增强的 for 循环、静态导入等)
Java Annotation(使用系统内置 Annotation、自定义Annotation、Annotation的继承等)
Java多线程机制详解(锁、synchronized关键字、sleep()方法、wait()方法、notify()
、notifyAll()方法的意义与联系)
Java线程池的内部实现
Java定时任务内部实现
Java I/O编程(装饰模式详解)
Java网络编程基础知识(Socket、URL、URLConnection、ServerSocket等)
TCP与 UDP的联系与区别
Java Collection API(Collection、List、Set、Map、ArrayList、LinkedList、 Vector、 HashSet、
TreeSet、 HashMap与TreeMap等)区别,适用场景
常用设计模式(工厂方法模式、观察者模式、策略模式、装饰模式、模板方法模式、命令模式等的原理与
应用)
Java NIO详解
java.util.concurrent 并发包的应用(ConcurrentHashMap核心源代码分析、ThreadPoolExecutor、Future
Task、Semaphore、Condition、ReentrantReadWriteLock等接口与类的深度分析)
基于 JDK 1.4 锁的并发机制与基于 JDK 5.0并发包的同步与并发机制的比较与分析
序列化与反序列化
正则表达式的应用
Java动态代理与反射机制
Java代码的执行机制
源代码编译机制
类加载与执行机制
JVM内存管理(内存空间、内存分配、内存回收)
使用 JConsole、JVisualVM及 JMap等查看内存的使用状况
分析程序执行的过程
JVM线程资源同步及交互机制
线程交互机制与状态分析
Java文件操作相关,递归删除,递归读取
JDBC相关知识,步骤,连接操作,数据库连接池(详解 Apache DBCP数据库连接池)
移位操作 (左移n位==乘以2的n次幂) (右移n位==除以2的n次幂)
二、算法
各种排序算法:快速排序、归并排序、插入排序等等
斐波切纳函数
二分查找
全排列
二叉树的遍历
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时
间复杂度都是O(1)
字符串反转
前缀树
最大堆,最小堆
Hash算法及HashMap算法
ConcurrentLinkedHashMap(LRU)
BloomFilter
LIRS算法 LIRS的基本思想是对访问的数据块进行分类,一部分为hot数据块,一部分为cold数据块。对于
hot数据块我们可以分配90%以上的cache给它们。而对于cold数据块给它们分配10%。
从LIRS算法的描述来看,可以理解为两个LRU队列的组合,利用cold缓冲区来保护Hot缓冲区,提高了进
入hot缓冲区的门槛,阻止hot缓冲区频繁地变化。
三、数据库
mysql存储引擎
mysql优化
mysql HA解决方案
sql语句优化
NoSQL相关
四、文件系统
Linux主流文件系统
EXT3与EXT4文件系统
主流分布式文件系统分析与对比
分布式文件系统
五、系统相关
共享内存实现机制
mmap的实现原理与机制
copy on write技术
zero copy技术
六、网络相关
OSI七层网络模型
TCP/IP交互流程
HTTP访问流程
七、大型网站架构
负载均衡技术及其原理
智能DNS解析,原理,实现方案
squid web加速及缓存技术
网页静态化
 

如何修改java class文件

工具:
Java Class File Editor 下载地址:https://sourceforge.net/projects/classeditor/
jd-gui.exe 下载地址:http://jd.benow.ca/
其中Java Class File Editor是用来修改class内容的,而jd-gui.exe是在修改前和修改后查看代码的。
下载工具ce2.23 .tar.gz,解压,打开window的cmd
进入文件夹 运行java -jar ce.jar就可以看到界面,

class editor

class editor


jd-gui.exe查看源代码,在editor里查找要修改的地方,修改,保存,然后用jd-gui.exe查看修改后是否生效。
查看class文件

查看class文件

AngularJS开发的理念

Angular信奉的是,当组建视图(UI)同时又要写软件逻辑时,声明式的代码会比命令式的代码好得多,尽管命令式的代码非常适合用来表述业务逻辑
将DOM操作和应用逻辑解耦是一种非常好的思路,它能大大改善代码的可调性;
将测试和开发同等看待是一种非常非常好的思路,测试的难度在很大程度上取决于代码的结构;
将客户端和服务器端解耦是一种特别好的做法,它能使两边并行开发,并且使两边代码都能实现重用;
如果框架能够在整个开发流程里都引导着开发者:从设计UI,到编写业务逻辑,再到测试,那对开发者将是极大的帮助;
“化繁为简,化简为零”总是好的。
AngularJS能将你从以下的噩梦中解脱出来:
使用回调:回调的使用会打乱你的代码的可读性,让你的代码变得支离破碎,很难看清本来的业务逻辑。移除一些常见的代码,例如回调,是件好事。大幅度地减少你因为JavaScript这门语言的设计而不得不写的代码,能让你把自己应用的逻辑看得更清楚。
手动编写操作DOM元素的代码:操作DOM是AJAX应用很基础的一部分,但它也总是很“笨重”并且容易出错。用声明的方式描述的UI界面可随着应用状态的改变而变化,能让你从编写低级的DOM操作代码中解脱出来。绝大部分用AngularJS写的应用里,开发者都不用再自己去写操作DOM的代码,不过如果你想的话还是可以去写。
对UI界面读写数据:AJAX应用的很大一部是CRUD操作。一个经典的流程是把服务端的数据组建成内部对象,再把对象编成HTML表单,用户修改表单后再验证表单,如果有错再显示错误,然后将数据重新组建成内部对象,再返回给服务器。这个流程里有太多太多要重复写的代码,使得代码看起来总是在描述应用的全部执行流程,而不是具体的业务逻辑和业务细节。
前得写大量的基础性的代码:通常你需要写很多的基础性的代码才能实现一个“Hello World”的应用。用AngularJS的话,它会提供一些服务让你很容易地正式开始写你的应用,而这些服务都是以一种Guice-like dependency-injection式的依赖注入自动加入到你的应用中去的,这让你能很快的进入你应用的具体开发。特别的是,你还能全盘掌握自动化测试的初始化过程。

Java异常处理步骤

Java异常处理步骤:
第一句一般是总的,告诉你哪里错了,错误就在caused by后面的语句提示里面,或者是自己写的类里面。异常信息是从上往下抛(大概的说法)的,因为下面是调用上面的方法,也就是说第一行是最终抛出异常的方法,而最后一行最上层调用的方法
异常链是一种机制,异常转译时,保存原来的异常,这样当这个异常再被转译时,还会被保存,于是就成了一条链了,包含了所有的异常,所以你可以看到这样的异常打印:

org.apache.phoenix.exception.PhoenixIOException: org.apache.phoenix.exception.PhoenixIOException: 系统找不到指定的路径。
	at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:107)
	at org.apache.phoenix.iterate.ParallelIterators.getIterators(ParallelIterators.java:527)
	at org.apache.phoenix.iterate.MergeSortResultIterator.getIterators(MergeSortResultIterator.java:48)
	at org.apache.phoenix.iterate.MergeSortResultIterator.minIterator(MergeSortResultIterator.java:63)
	at org.apache.phoenix.iterate.MergeSortResultIterator.next(MergeSortResultIterator.java:90)
	at org.apache.phoenix.jdbc.PhoenixResultSet.next(PhoenixResultSet.java:734)
	at com.youku.service.VideoFingerprintServiceNew.getSimlarVideoMD5(VideoFingerprintServiceNew.java:111)
	at com.youku.service.VideoFingerprintServiceNew.excute(VideoFingerprintServiceNew.java:50)
	at com.youku.service.AbstractHttpImpl.getResponseModel(AbstractHttpImpl.java:22)
	at com.youku.web.servlet.CommonHttpServlet.doPost(CommonHttpServlet.java:79)
	at com.youku.web.servlet.CommonHttpServlet.doGet(CommonHttpServlet.java:41)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:612)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: org.apache.phoenix.exception.PhoenixIOException: 系统找不到指定的路径。
	at java.util.concurrent.FutureTask.report(FutureTask.java:122)
	at java.util.concurrent.FutureTask.get(FutureTask.java:202)
	at org.apache.phoenix.iterate.ParallelIterators.getIterators(ParallelIterators.java:523)
	... 23 more
Caused by: org.apache.phoenix.exception.PhoenixIOException: 系统找不到指定的路径。
	at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:107)
	at org.apache.phoenix.iterate.SpoolingResultIterator.(SpoolingResultIterator.java:129)
	at org.apache.phoenix.iterate.SpoolingResultIterator.(SpoolingResultIterator.java:74)
	at org.apache.phoenix.iterate.SpoolingResultIterator$SpoolingResultIteratorFactory.newIterator(SpoolingResultIterator.java:68)
	at org.apache.phoenix.iterate.ChunkedResultIterator.(ChunkedResultIterator.java:90)
	at org.apache.phoenix.iterate.ChunkedResultIterator$ChunkedResultIteratorFactory.newIterator(ChunkedResultIterator.java:70)
	at org.apache.phoenix.iterate.ParallelIterators$2.call(ParallelIterators.java:631)
	at org.apache.phoenix.iterate.ParallelIterators$2.call(ParallelIterators.java:622)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	... 1 more

这个异常链中就是包含了两个异常,最前面是顶级异常,后面再打印一个Cause by,然后再打印低一层异常,直到打印完所有的异常。
异常链,在JDK1.4以后版本中,Throwable类支持异常链机制。Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。
通俗的说,异常链就是把原始的异常包装为新的异常类,并在新的异常类中封装了原始异常类,这样做的目的在于找到异常的根本原因。
这篇文章很好:http://my.oschina.net/yanquan345/blog/204498
在我查过的资料中,以《Effective Java》书中对异常处理设计的研究得最系统,本文很多思想来自于它,下面我把其中的几条原则翻译(非直译)并贴上:
第57条:只对异常情况使用异常。(说明:即不要用异常处理控制正常程序流)。
第58条:对可恢复异常使用编译时异常,对编程错误使用运行时异常。
第59条:应避免不必要的编译时异常:如果调用者即使合理的使用API也不能避免异常的发生,并且调用者可以对捕获的异常做出有意义的处理,才使用编译时异常。
第60条:应偏好使用自带异常
第61条:抛出的异常应适合本层抽象(就是上面说的转译)
第62条:把方法可能抛的所有异常写入文档,包括运行时异常
第63条:用异常类记录的信息要包含失败时的数据
第64条:力求失败是原子化的(解释:就是如果调用一个方法发生了异常,就应该使对象返回调用前的状态)
第65条:不要忽略异常

angular开发相关资料

angular开发相关资料
bootstrap::UI组件      弹出层
http://angular-ui.github.io/bootstrap/
jquery easyUI:UI组件     表格
http://www.zi-han.net/case/easyui/
angular api文档:
http://docs.angularjs.org/api/
angular的依赖注入需要注意,必须参数名称一致,否则依赖注入失败,会提示找不到“提供者”,

Error: $injector:unpr
Unknown Provider

意思是:找不到被注入的内容,确认是否定义或者拼写是否正确。(make sure the dependency is defined and spelled correctl)
参看:http://docs.angularjs.org/error/$injector/unpr
而且bootstrap这个组件里的Modal的open方法也是支持angular的依赖注入的,必须查看资料才能找到各种参数是干什么用的:
声明controller:

controller - a controller for a modal instance - it can initialize scope used by modal. A controller can be injected with $modalInstance

声明参数:

resolve - members that will be resolved and passed to the controller as locals; it is equivalent of the resolve property for AngularJS routes

参看:http://angular-ui.github.io/bootstrap/
最后追查到确实是controller中参数定义名称和resolve中的参数名称不符合,导致依赖注入失败。

javascript基本语法

改变 HTML 属性
如需改变 HTML 元素的属性,请使用这个语法:

document.getElementById(id).attribute=new value

本例改变了 元素的 src 属性:

<img id="image" src="smiley.gif" alt="" />
<script type="text/javascript">
document.getElementById("image").src="landscape.jpg";
</script>

改变 HTML 样式
如需改变 HTML 元素的样式,请使用这个语法:

document.getElementById(id).style.property=new style

下面的例子会改变
元素的样式:

Hello World!
<script type="text/javascript">
document.getElementById("p2").style.color="blue";
</script>

JavaScript变量

局部 JavaScript 变量
在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。
您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。
只要函数运行完毕,本地变量就会被删除。
全局 JavaScript 变量
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
JavaScript 变量的生存期
JavaScript 变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
向未声明的 JavaScript 变量来分配值
如果您把值赋给尚未声明的变量,该变量将被自动作为全局变量声明。
这条语句:

carname="Volvo";

将声明一个全局变量 carname,即使它在函数内执行。

跨域问题

Uncaught SecurityError: Blocked a frame with origin “http://click.youku.com” from accessing a frame with origin “http://index.youku.com”. The frame requesting access set “document.domain” to “youku.com”, but the frame being accessed did not. Both must set “document.domain” to the same value to allow access.
还是跨域问题,父页面和子页面没有明确指出在同一个域下
在子页面中加入如下代码,显示声明:

<script>
        document.domain='youku.com';
</script>