突发奇想的想起了javascript的oo,扩展到设计模式中,貌似没有接口,非常多的设计模式无法实现,比如组合,代理等…于是就写了一份javascript接口实现的demo.代码如下.


/*
* @param {String} name 继承接口的类名.
* @param {Array} methods 类要实现的方法数组.
* 功能说明:构造类方法.
* 中间的所有参数,需要用反射来验证所有参数的正确性.否则就失去意义了.
*/
var Interface = function(className,methodsArray){
if(arguments.length!=2){
throw new Error("实现接口必须要满足2个以上的参数");
}
this.obj = className;
this.methods = [];//实现方法集合,这里定义成一个共有的方便访问.
for(var i=0;i
--------------------------------------------------------------------

window.onload = function(){
var ss = new Object();
ss.sayHellow = function(){

}
ss.run = function(){

}

var ints = new Interface(ss,['sayHellow','run']);
}

虽然实现了,可是还有一些不太理想的地方.
1.比如ss.sayHellow 就只能用 object() new 出来么?如果有人写
Js代码
var ss = function(){};
ss.prototype.sayHellow = function(){
...
}
怎么办???
2.中间的反射检查是否过多过细?会不会有性能方面的问题???
留下这些问题,继续考虑,同时也希望各位大牛给我点意见来优化这个代码.

今天在路上看见了一个老奶奶,突然之间我也想起了我的奶奶.她老人家也是一辈子没过啥好日子
,好不容易,等我出来了,能赚钱了.还不到1年,她老人家就走了.我对她的关心真的不够.老是说这个
世界真的很不公平,可是有的时候真的是不是该重新审视一下自己,是不是对家人的关心太少了,老
人不是要钱,要的是子女的关心和爱护.中国,是一个很不会表达爱的国家,我想这么大了,我还从来没
对奶奶说过一句我爱你.现在她走了,我还能拿什么来爱她呢……我很后悔…….
现在每天晚上只要一闭上眼仿佛就一直听见奶奶在隔壁说,灿伢子诶,上班不要太累了,要留住人,留
住人才是真的……..这些话,如果下辈子还能听见多好,说实在话,我真的很想这个世界要是人可以不
死多好,但世界毕竟是世界,不是我们想象中的乌托邦.也不是爱丽舍.写这日记希望看到的人能过多
反省自己,是不是真的孝顺了.是不是真的不后悔,希望不要重蹈我的覆辙.

今天在路上看见了一个老奶奶,突然之间我也想起了我的奶奶.她老人家也是一辈子没过啥好日子
,好不容易,等我出来了,能赚钱了.还不到1年,她老人家就走了.我对她的关心真的不够.老是说这个
世界真的很不公平,可是有的时候真的是不是该重新审视一下自己,是不是对家人的关心太少了,老
人不是要钱,要的是子女的关心和爱护.中国,是一个很不会表达爱的国家,我想这么大了,我还从来没
对奶奶说过一句我爱你.现在她走了,我还能拿什么来爱她呢……我很后悔…….
现在每天晚上只要一闭上眼仿佛就一直听见奶奶在隔壁说,灿伢子诶,上班不要太累了,要留住人,留
住人才是真的……..这些话,如果下辈子还能听见多好,说实在话,我真的很想这个世界要是人可以不
死多好,但世界毕竟是世界,不是我们想象中的乌托邦.也不是爱丽舍.写这日记希望看到的人能过多
反省自己,是不是真的孝顺了.是不是真的不后悔,希望不要重蹈我的覆辙.

网页可见区域宽:document.body.clientWidth
网页可见区域高:document.body.clientHeight
网页可见区域宽:document.body.offsetWidth (包括边线的宽)
网页可见区域高:document.body.offsetHeight (包括边线的宽)
网页正文全文宽:document.body.scrollWidth
网页正文全文高:document.body.scrollHeight
网页被卷去的高:document.body.scrollTop
网页被卷去的左:document.body.scrollLeft
网页正文部分上:window.screenTop
网页正文部分左:window.screenLeft
屏幕分辨率的高:window.screen.height
屏幕分辨率的宽:window.screen.width
屏幕可用工作区高度:window.screen.availHeight
屏幕可用工作区宽度:window.screen.availWidth

HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth
scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标
event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

IE,FireFox 差异如下:

IE6.0、FF1.06+:

clientWidth = width + padding

clientHeight = height + padding

offsetWidth = width + padding + border

offsetHeight = height + padding + border

IE5.0/5.5:
clientWidth = width – border

clientHeight = height – border

offsetWidth = width

offsetHeight = height

(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

网页可见区域宽: document.body.clientWidth
网页可见区域高: document.body.clientHeight
网页可见区域宽: document.body.offsetWidth (包括边线的宽)
网页可见区域高: document.body.offsetHeight (包括边线的高)
网页正文全文宽: document.body.scrollWidth
网页正文全文高: document.body.scrollHeight
网页被卷去的高: document.body.scrollTop
网页被卷去的左: document.body.scrollLeft
网页正文部分上: window.screenTop
网页正文部分左: window.screenLeft
屏幕分辨率的高: window.screen.height
屏幕分辨率的宽: window.screen.width
屏幕可用工作区高度: window.screen.availHeight
屏幕可用工作区宽度: window.screen.availWidth

-------------------

技术要点
本节代码主要使用了Document对象关于窗口的一些属性,这些属性的主要功能和用法如下。

要得到窗口的尺寸,对于不同的浏览器,需要使用不同的属性和方法:若要检测窗口的真实尺寸,在Netscape下需要使用Window的属性;在 IE下需要深入Document内部对body进行检测;在DOM环境下,若要得到窗口的尺寸,需要注意根元素的尺寸,而不是元素。

Window对象的innerWidth属性包含当前窗口的内部宽度。Window对象的innerHeight属性包含当前窗口的内部高度。

Document对象的body属性对应HTML文档的标签。Document对象的documentElement属性则表示HTML文档的根节点。

document.body.clientHeight表示HTML文档所在窗口的当前高度。document.body. clientWidth表示HTML文档所在窗口的当前宽度。

实现代码

Html代码
  1. < !DOCTYPE html PUBLIC 「-//W3C//DTD XHTML 1.0 Transitional//EN」
  2. 「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」>
  3. <html xmlns=「http://www.w3.org/1999/xhtml」>
  4. <head>
  5. <title>请调整浏览器窗口</title>
  6. <meta http-equiv=「content-type」 content=「text/html; charset=gb2312」>
  7. </meta></head>
  8. <body>
  9. <h2 align=「center」>请调整浏览器窗口大小</h2><hr />
  10. <form action=「#」 method=「get」 name=「form1」 id=「form1」>
  11. <!–显示浏览器窗口的实际尺寸–>
  12. 浏览器窗口 的 实际高度: <input type=「text」 name=「availHeight」 size=「4」/><br />
  13. 浏览器窗口 的 实际宽度: <input type=「text」 name=「availWidth」 size=「4」/><br />
  14. </form>
  15. <script type=「text/javascript」>
  16. <!–
  17. var winWidth = 0;
  18. var winHeight = 0;
  19. function findDimensions() //函数:获取尺寸
  20. {
  21. //获取窗口宽度
  22. if (window.innerWidth)
  23. winWidth = window.innerWidth;
  24. else if ((document.body) && (document.body.clientWidth))
  25. winWidth = document.body.clientWidth;
  26. //获取窗口高度
  27. if (window.innerHeight)
  28. winHeight = window.innerHeight;
  29. else if ((document.body) && (document.body.clientHeight))
  30. winHeight = document.body.clientHeight;
  31. //通过深入Document内部对body进行检测,获取窗口大小
  32. if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
  33. {
  34. winHeight = document.documentElement.clientHeight;
  35. winWidth = document.documentElement.clientWidth;
  36. }
  37. //结果输出至两个文本框
  38. document.form1.availHeight.value= winHeight;
  39. document.form1.availWidth.value= winWidth;
  40. }
  41. findDimensions();
  42. //调用函数,获取数值
  43. window.onresize=findDimensions;
  44. //–>
  45. </script>
  46. </body>
  47. </html>

打开终端
cd /java/tomcat
#执行
bin/startup.sh #启动tomcat
bin/shutdown.sh #停止tomcat
tail -f logs/catalina.out #看tomcat的控制台输出;

#看是否已经有tomcat在运行了
ps -ef |grep tomcat
#如果有,用kill;
kill -9 pid #pid 为相应的进程号

例如 pe -ef |grep tomcat 输出如下

sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/java/tomcat/common/endorsed -classpath :/java/tomcat/bin/bootstrap.jar:/java/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/java/tomcat -Dcatalina.home=/java/tomcat -Djava.io.tmpdir=/java/tomcat/temp org.apache.catalina.startup.Bootstrap start

则 5144 就为进程号 pid = 5144
kill -9 5144 就可以彻底杀死tomcat

YYD,整合了2天发现的一个系统的 BUG 居然是因为一个包没有导入引入的。还好在公司的时候学了怎么使用 Log4j。要不然查几年都查不出来。

症状如下,如果碰到没有报错,访问 Action 位置的时候出现 404 错误,请检查 commons-pool.jar 是否导入成功。asm的版本包是否正确。

闭包:基本概念

闭包是可以包含自由(未绑定)变量的代码块;这些变量不是在这个代码块或者任何全局上下文中定义的,而是在定义代码块的环境中定义。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量的存在,相关变量引用没有释放)和为自由变量提供绑定的计算环境(作用域)。在 Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby 和 Python 等语言中都能找到对闭包不同程度的支持。
闭包的价值在于可以作为函数对象 或者匿名函数,对于类型系统而言这就意味着不仅要表示数据还要表示代码。支持闭包的多数语言都将函数作为第一级对象,就是说这些函数可以存储到变量中、作为参数传递给其他函数,最重要的是能够被函数动态地创建和返回。

闭包的本质

集合 <math>S<math> 是闭集当且仅当 <math>Cl(S)=S<math>。特别的,空集的闭包是空集,<math>X<math> 的闭包是 <math>X<math>。集合的交集的闭包总是集合的闭包的交集的子集(不一定是真子集)。有限多个集合的并集的闭包和这些集合的闭包的并集相等;零个集合的并集为空集,所以这个命题包含了前面的空集的闭包的特殊情况。无限多个集合的并集的闭包不一定等于这些集合的闭包的并集,但前者一定是后者的父集
若 <math>A<math> 为包含 <math>S<math> 的 <math>X<math> 的子空间,则 <math>S<math> 在 <math>A<math> 中计算得到的闭包等于 <math>A<math> 和 <math>S<math> 在 <math>X<math> 中计算得到的闭包(<math>Cl_A(S) = A\cap Cl_X(S)<math>)的交集。特别的,<math>S<math> 在 <math>A<math> 中是稠密的,当且仅当 <math>A<math> 是 <math>Cl_X(S)<math> 的子集。
闭包点
对欧几里德空间的子集 S,x 是 S 的闭包点,若所有以 x 为中心的开球都包含 S 的点(这个点也可以是 x)。
这个定义可以推广到度量空间 X 的任意子集 S。具体地说,对具有度量 d 的度量空间 X,x 是 S 的闭包点,若对所有 r > 0,存在 y 属于 S,使得距离 d(x, y) < r(同样的,可以是 x = y)。另一种说法可以是,x 是 S 的闭包点,若距离 d(x, S) := inf{d(x, s) : s 属于 S} = 0(这里 inf 表示下确界)。
这个定义也可以推广到拓扑空间,只需要用邻域替代“开球”。设 S 是拓扑空间 X 的子集,则 x 是 S 的闭包点,若所有 x 邻域都包含 S 的点。注意,这个定义并不要求邻域是开的。
极限点
闭包点的定义非常接近极限点的定义。这两个定义之间的差别非常微小但很重要——在极限点的定义中,点 x 的邻域必须包含和 x 不同的集合的点。
因此,所有极限点都是闭包点,但不是所有的闭包点都是极限点。不是极限点的闭包点就是孤点。也就是说,点 x 是孤点,若它是 S 的元素,且存在 x 的邻域,该邻域中除了 x 没有其他的点属于 S。
对给定的集合 S 和点 x,x 是 S 的闭包点,当且仅当 x 属于 S,或 x 是 S 的极限点。
集合的闭包
集合 S 的闭包是所有 S 的闭包点组成的集合。S 的闭包写作 cl(S),Cl(S) 或 S?。集合的闭包具有如下性质:
cl(S) 是 S 的闭父集。
cl(S) 是所有包含 S 的闭集的交集。
cl(S) 是包含 S 的最小的闭集。
集合 S 是闭集,当且仅当 S = cl(S)。
若 S 是 T 的子集,则 cl(S) 是 cl(T) 的子集。
若 A 是闭集,则 A 包含 S 当且仅当 A 包含 cl(S)。
有时候,上述第二或第三条性质会被作为拓扑闭包的定义。
在第一可数空间(如度量空间)中,cl(S) 是所有点的收敛数列的所有极限。

闭包的本质

集合 <math>S<math> 是闭集当且仅当 <math>Cl(S)=S<math>。特别的,空集的闭包是空集,<math>X<math> 的闭包是 <math>X<math>。集合的交集的闭包总是集合的闭包的交集的子集(不一定是真子集)。有限多个集合的并集的闭包和这些集合的闭包的并集相等;零个集合的并集为空集,所以这个命题包含了前面的空集的闭包的特殊情况。无限多个集合的并集的闭包不一定等于这些集合的闭包的并集,但前者一定是后者的父集

若 <math>A<math> 为包含 <math>S<math> 的 <math>X<math> 的子空间,则 <math>S<math> 在 <math>A<math> 中计算得到的闭包等于 <math>A<math> 和 <math>S<math> 在 <math>X<math> 中计算得到的闭包(<math>Cl_A(S) = A\cap Cl_X(S)<math>)的交集。特别的,<math>S<math> 在 <math>A<math> 中是稠密的,当且仅当 <math>A<math> 是 <math>Cl_X(S)<math> 的子集。

闭包点

对欧几里德空间的子集 S,x 是 S 的闭包点,若所有以 x 为中心的开球都包含 S 的点(这个点也可以是 x)。

这个定义可以推广到度量空间 X 的任意子集 S。具体地说,对具有度量 d 的度量空间 X,x 是 S 的闭包点,若对所有 r > 0,存在 y 属于 S,使得距离 d(x, y) < r(同样的,可以是 x = y)。另一种说法可以是,x 是 S 的闭包点,若距离 d(x, S) := inf{d(x, s) : s 属于 S} = 0(这里 inf 表示下确界)。

这个定义也可以推广到拓扑空间,只需要用邻域替代“开球”。设 S 是拓扑空间 X 的子集,则 x 是 S 的闭包点,若所有 x 邻域都包含 S 的点。注意,这个定义并不要求邻域是开的。

极限点

闭包点的定义非常接近极限点的定义。这两个定义之间的差别非常微小但很重要——在极限点的定义中,点 x 的邻域必须包含和 x 不同的集合的点。

因此,所有极限点都是闭包点,但不是所有的闭包点都是极限点。不是极限点的闭包点就是孤点。也就是说,点 x 是孤点,若它是 S 的元素,且存在 x 的邻域,该邻域中除了 x 没有其他的点属于 S。

对给定的集合 S 和点 x,x 是 S 的闭包点,当且仅当 x 属于 S,或 x 是 S 的极限点。

集合的闭包

集合 S 的闭包是所有 S 的闭包点组成的集合。S 的闭包写作 cl(S),Cl(S) 或 S?。集合的闭包具有如下性质:

cl(S) 是 S 的闭父集。

cl(S) 是所有包含 S 的闭集的交集。

cl(S) 是包含 S 的最小的闭集。

集合 S 是闭集,当且仅当 S = cl(S)。

若 S 是 T 的子集,则 cl(S) 是 cl(T) 的子集。

若 A 是闭集,则 A 包含 S 当且仅当 A 包含 cl(S)。

有时候,上述第二或第三条性质会被作为拓扑闭包的定义。

在第一可数空间(如度量空间)中,cl(S) 是所有点的收敛数列的所有极限。

在Javascript中闭包(Closure)

闭包的两个特点:
1、作为一个函数变量的一个引用 – 当函数返回时,其处于激活状态。
2、一个闭包就是当一个函数返回时,一个没有释放资源的栈区。
例1。
<script type=」text/javascript」>
function sayHello2(name) {
var text = 『Hello 『 + name; // local variable
var sayAlert = function() { alert(text); }
return sayAlert;
}
var sy = sayHello2(『never-online』);
sy();
</script>

这两天做了一个换肤的小 DEMO 发现在 base.css 中使用 @import url(『index.css』) 在IE下的加载好象是异步的,其实并不是这样,事实上在 IE 下他的加载是有顺序的 import 之后的 css 相当于在页面的最底部加载了一个 <link /> 标签,以后使用需要注意了,按照前端的优化习惯,css 必须是放在 head 中的,才能保证页面在加载进来的时候有一个正确的渲染。否则就会出现部分 CSS 样式异常的情况。参考资料如下

Choose <link> over @import
One of the previous best practices states that CSS should be at the top in order to allow for progressive rendering.
In IE @import behaves the same as using <link> at the bottom of the page, so it’s best not to use it.

Choose <link> over @import One of the previous best practices states that CSS should be at the top in order to allow for progressive rendering.In IE @import behaves the same as using <link> at the bottom of the page, so it’s best not to use it.

首先打开系统属性,选择高级,打开环境设置;
在上面用户变量区中新建3个变量:
1、JAVA_HOME
2、PATH
3、CLASSPATH
这3个变量的值分别如下:
JAVA_HOME = E:\fairypark\CSDP\java
PATH = .;%JAVA_HOME%\bin;
CLASSPATH = .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
需要强调一点,你的java安装路径E:\fairypark\CSDP\java这个目录下有bin目录吗,如果有这个
目录就是你的Java主目录,如果没有在其下面找到含有bin的目录,将此目录设置给JAVA_HOME变量。