<< 三月 2014 | 首页 | 五月 2014 >>

Tomcat - User - How does one control what the path is on the JSESSIONID cookie?

The client may have more than one session, which must be distinguished 
by the path, eg i need: 

 Set-Cookie: JSESSIONID=6D839FF3B960947CC6FD41B98CD02E0D; Path=/thredds/p1 


A previous post had this filter, which im guessing i can modify : 

package com.prosc.servlet; 

import javax.servlet.*; 
import javax.servlet.http.*; 
import java.io.IOException; 

/** 
* This class will set the cookie maxAge to match the session timeout value. That way, a user who closes their browser and 
* re-enters the site will still have the same session if it has not timed out on the server. 
*/ 
public class SessionCookieExtender implements Filter { 
    private static final String JSESSIONID = "JSESSIONID"; 

    public void init( FilterConfig config ) throws ServletException {} 

    public void doFilter( ServletRequest _request, ServletResponse _response, FilterChain chain ) throws IOException, ServletException { 
        if( _response instanceof HttpServletResponse ) { 
            HttpServletRequest httpRequest = (HttpServletRequest)_request; 
            HttpServletResponse httpResponse = (HttpServletResponse)_response; 

            HttpSession session = httpRequest.getSession(); 
            if( session != null && session.getId() != null ) { 
                Cookie sessionCookie = new Cookie( JSESSIONID, session.getId() ); 
                int sessionTimeoutSeconds = session.getMaxInactiveInterval(); 
                sessionCookie.setMaxAge( sessionTimeoutSeconds ); 
                sessionCookie.setPath( httpRequest.getContextPath() ); 
                httpResponse.addCookie( sessionCookie ); //FIX! This doesn't actually get rid of the other cookie, but it seems to work OK 
            } 
        } 
        chain.doFilter( _request, _response ); 
    } 

    public void destroy() {} 

阅读全文……

标签 : ,

解决在iframe中进行跨域访问时session丢失的问题:WebLogic之Session - 咫尺天涯 - ITeye技术网站

WebLogic的Cookie相关配置:
属性名                默认值                 值
cookie-name    JSESSIONID     如未设置,默认为“JSESSIONID”
cookie-path     NULL                如未设置,默认为“/”
cookie-domain NULL                如未设置,默认为发放cookie的服务器的域

一个cookie的NAME、Domain和Path属性值均相同,则会覆盖,若未设置Domain域,则域为ip(不包括端口),因此三个应用的session cookie就会互相覆盖

解决办法:设置各个应用使用不同的cookie-name,或者将JSESSIONID的path路径设置为不同

 

 

由于没有在Weblogic.xml配置文件中对cookie的相关属性值进行配置,因此应用CA和应用CB的cookie的Name、Domain和Path属性值均为默认值,即Name为JSESSIONID,Path为“/”,Domain为服务器的IP地址,三个属性值均相同,这就造成了应用CA的cookie与应用CB的cookie会互相覆盖,从而导致相应应用的session丢失。 

参考资料 
1 关于WebLogic的Session丢失的问题 
http://blog.csdn.net/DesignLife/article/details/2552186 
2 tomcat向weblogic移植出现的问题系列 - session丢失问题 
(其中一位网友回答不知是什么意思,要加什么文件) 
http://netliving.iteye.com/blog/148485 
3 java weblogic session 丢失 
http://hi.baidu.com/leftstone/blog/item/3b34a4a19d4d0588471064f0.html 
4 weblogic两个domain中jsp相互调用session丢失解决方法 
http://www.4ucode.com/Study/Topic/1159787 
5 关于WebLogic的Session丢失的问题 
http://hi.baidu.com/goylsf/blog/item/d2446677d71e070ab051b98d.html 
6 weblogic通过代理插件weblogic.servlet.proxy.HttpProxyServlet跨域访问导致session丢失问题的解决 
http://ribbonchen.blog.163.com/blog/static/1183165052011074500877/ 
7 WebLogic如何设置session超时时间 
http://tonyaction.blog.51cto.com/227462/201900 
注意网上有很多的Webloigc不是最新的配置 
位于WEB-INF/WebLogic.xml配置如下: 

Java代码  收藏代码
  1. <?xml version='1.0' encoding='utf-8'?>   
  2. <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"   
  3.                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.                  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.                  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd    
  6.                  http://www.bea.com/ns/weblogic/90    
  7.                  http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">   
  8.     <container-descriptor>  
  9.         <prefer-web-inf-classes>true</prefer-web-inf-classes>  
  10.     </container-descriptor>  
  11.     <context-root>/</context-root>  
  12.     <session-descriptor>  
  13.         <!--WebLogic设置Session超时时间,在web.xml中去掉session超时设置  -->  
  14.         <!-- <timeout-secs>7200</timeout-secs> -->  
  15.         <cookie-name>JSESSIONID1</cookie-name>  
  16.     </session-descriptor>  
  17. </weblogic-web-app>  


一 WebLogic设置Session超时 
1 web.xml 
设置WEB应用程序描述符web.xml里的<session-timeout>元素。这个值以分钟为 
单位,并覆盖weblogic.xml中的TimeoutSecs属性 

Java代码  收藏代码
  1. <session-config>  
  2.     <session-timeout>30</session-timeout>  
  3. </session-config>  


此例表示Session将在54分钟后过期 
当<session-timeout>设置为-2,表示将使用在weblogic.xml中设置的 
TimeoutSecs这个属性值。 
当<session-timeout>设置为-1,表示Session将永不过期,而忽略在 
weblogic.xml中设置的TimeoutSecs属性值
。 
该属性值可以通过console控制台来设置 
在weblgoic的console中:xxDomain->Servers->xxServer->Protocols->HTTP 中有一个关于Post Timeout的配置,但这个参数一般使用默认值即可 
一般是通过Services-->JDBC-->Connection Pools-->MyConnection(你所建立的连接池名)-->Configration-->Connections 里的Inactive Connection Timeout这个参数来设置的,默认的为0,表示连接时间无限长。你可以设一个时间值,连接超过这个时间值,它会把连接强制放回连接池 

Java代码  收藏代码
  1. <Server AcceptBacklog="62" CompleteHTTPMessageTimeout="480"  
  2. CompleteMessageTimeout="480" IdleC  
  3. ListenAddress="" ListenPort="7001" Name="myserver"  
  4. NativeIOEnabled="true" ReliableDeliveryPolicy="RMDefaultPolicy"  
  5. ServerVersion="8.1.4.0">  


是否IdleConnectionTimeout参数 
2 weblogic.xml 
设置WebLogic特有部署描述符weblogic.xml的<session-descriptor>元素的 
TimeoutSecs属性。这个值以秒为单位 

Java代码  收藏代码
  1. <session-descriptor>  
  2.         <!--WebLogic设置Session超时时间,在web.xml中去掉session超时设置  -->  
  3.        <timeout-secs>7200</timeout-secs>          
  4. </session-descriptor>  



二 防止Webloigic下的iframe的Session失效 
请在Weblogic.xml添加如下代码 

Java代码  收藏代码
  1. <session-descriptor>      
  2.         <cookie-name>JSESSIONID1</cookie-name>  
  3. </session-descriptor>  


原来session在服务器端生成后分配的sessionID在客户端的保存方式是个cookie,它的生命周期在浏览器关闭后就会结束,而这个cookie的名字如果不特别设置,weblogic会以默认的名称“JSESSIONID”来设置这个cookie的名称,我两个应用的的session cookie名字都没有设置,客户端在第一次通过应用A请求代理转发到应用B时,应用B返回的同名session cookie覆盖了客户端原本的应用A的session cookie,所以导致了应用A session的丢失。 
解决方法是,在应用B的weblogic.xml中的session descriptor标记中添加session cookie的名称设置,使其区别于A应用的session cookie名称.其中的cookie-name可以重命名!解决在iframe中进行跨域访问时session丢失的问题 

阅读全文……

繁简中文转换,支持地区词/专用词处理

利用 MediaWiki 作中文繁簡互換,支援地區詞處理 (大陸、香港、台灣及新加坡)

例子:

(簡 > 繁)

  • 面包 > 麵包 (zh-tw)
  • 寮国 > 老撾 (zh-hk)
  • 中国人寿 > 中國人壽 (zh-hk)
  • 罗纳尔多 > 朗拿度 (zh-hk)

(繁 > 簡)

  • 記憶體 > 内存 (zh-cn)
  • 布殊 > 布什 (zh-cn)
  • 資料庫 > 数据库(zh-cn)

說明

這個程式的概念源自 php 的 mediawiki-zhconverter 和 mediawiki 的 ZhConversion.php,不過實作上沒有任何關系。

它使用了七個轉換表來實現中文繁簡轉換:

  1. 在 MediaWiki 內置的轉換表 ZhConversion.php
  2. 在 MediaWiki:Conversiontable/zh-hans 中定義的簡體中文轉換表
  3. 在 MediaWiki:Conversiontable/zh-hant 中定義的繁體中文轉換表
  4. 在 MediaWiki:Conversiontable/zh-cn 中定義的大陸簡體轉換表
  5. 在 MediaWiki:Conversiontable/zh-tw 中定義的台灣正體轉換表
  6. 在 Mediawiki:Conversiontable/zh-hk 中定義的港澳繁體轉換表
  7. 在 Mediawiki:Conversiontable/zh-sg 中定義的新馬簡體轉換表

程式預設會在 Wikipedia 上找最新的中文轉換表,你也可以關閉這個功能。

使用方法

  1. 安裝
gem install zhconv 
  1. 作出轉換
require 'rubygems' require 'zhconv' ZhConv.convert("zh-tw", "面包") // 返回 "麵包" ZhConv.convert("zh-tw", "面包", false) // 返回 "麵包",不使用最新的 wikipedia 轉換表 

阅读全文……

标签 : ,

JAVA的UTF-8 繁簡互轉的方法 | pupuliao的部落格

public class Encoding {

	public Encoding() {

	}

	public String StoT(String data) {
		return translate(data, S2T);
	}

	public String TtoS(String data) {
		return translate(data, T2S);
	}

	private static final Map

 

其中繁體字跟簡體字字字表,後面附上,因為大約有兩千五百字…..

他的方法和我以前的想法不一樣,因為我只是換字,不是換詞,所以他把字串拆開成陣列後,把文章帶進字碼表去搜尋,大概是hashmap 在這方面的高效率,所以可以快速提升執行效率

這是和上一篇同樣的樣本做的測試

總共花費 96089.0ms ;其中下載花費95658.0ms 資料處理花費  431.0ms

效率大概是使用JAVA 內建的replace()的80倍

簡繁字碼轉換表

阅读全文……

标签 :

如何让父母明白中国教育的失败? - 知乎

题主这样还能算是代码狂热者?
程序员:
一要英语好,英文文档能看会写
二要数学好,算法需求随手拈来。

题主如果连本科都没考上,那么这两样肯定一样都没有(虽然不了解题主的水平,不过高中的英语和数学的水平我还是知道的,如果这俩科目连110都没有那确实没什么好说的了,从专科线来考虑,可能性还是比较大的。高考考的都是基础学科,必然有用不过中学教得太浅,即便如此有的人还是学得不好于是叫嚣着数学没用其实是你没学会,所以就觉得没用。确实买菜不需要微积分,这样你也只能去买菜了。),确实没资格去什么IT公司。我数学、语文、英语都不好,最后高考还是能考六百多,就算这三科里面随便扔掉一科的成绩不算,我还是能上本科, @白如冰 说的倒是一点没错。

例如“已知装备强化1-5成功率为:0.8,0.6,0.4,0.2,0.1,初始强化为0,失败掉1级,最多掉到0级,求该装备强化到5的期望次数。”这样的游戏设计,你能做吗?还是你指望产品经理或者老板能来帮你算这个?别闹了!

例如,WebScaleSQL发布,文档都是英文的,你要等国内的译者出翻译版吗?而且这些译者还很多不是IT行业从业者,翻译出来的水准有时候还不到能看的水平。
像《Introduction to Algorithms》第三版出版日期是2009-07-31,而国内对应的译本《算法导论》第三版出版时间则要到了2013-01-01——这还是《Introduction to Algorithms》这样的业界巨人书才有的待遇,其他资料你想等翻译版?慢慢等吧,而且还不一定有,大多数程序员一般会去看英文原版,或者官网的Docs。

例如,团队协作,你给提交代码,变量名全是xm、nl、xb、dy、qy、dl这样的玩意,你觉得会有公司想要你吗?代码的变量名、函数名、类名等等必然是简明易懂的英语。大家都在快速地审阅着代码,你还在翻着英语词典揣摩这个变量究竟是干嘛用的呢,然后一怒——以后变量名、函数名、类名全用拼音缩写,而且与Github上一切用英文变量名的项目绝缘。

例如,地图应用,数据储存方式的设计、最近导航路径的计算……

英语不好基本与业界最新技术绝缘,这在IT行业是非常要命的。如果只会看译本的话,那只能看落后了一个时代的书了,而想看新书的话也只能去看谭浩强之类的书了,想想我的眼泪就要掉下来了。题主这样的人才,我想可以去做“纯HTML‘程序员’”,但是要记得拒绝JavaScript,这样才可以与算法绝缘,英语也用得少一些。
高中的课其实都是有用的,有人说买菜不用微积分。那是,买菜肯定是用不着微积分的,不过这样一来也只能去买菜了。觉得一种知识没用的,那只是因为没学好。因为没学好,所以“没用”。
最后,一个人高考成绩低,要么是不够聪明(委婉的说法),要么是不够努力(高中那点东西还不至于要花你多少时间,我高考前花了三个月不到把总分提上去90分),正好IT公司很看重这两点
而题主这两点至少缺失一点,所以连个你口中的傻逼公司都去不了呢。

另外,“唯文凭论”肯定是错误的。文凭不代表一切,可是文凭也是很重要的——你的父母想表达的应该是这样的观点,可是你因为个人的情感将其曲解成了“唯文凭论”,你的父母是正确的,文凭就是这么重要,本科就是比大专好。文凭重要在哪里呢?重要在它是你聪明与努力的证明,也是你接受过系统良好教育的证明,本科比大专好在哪里呢?好在资源多到一个专科院校无法想象的程度(题主举的例子就很好,C语言居然连指针都不讲这门课干脆别开了,题主上专科感觉应该和没上一样?这样和招高中生没什么区别。而像一些稍微比较好的学校,一年几百万给学生做项目玩,你想做嵌入式?行!你申报一个项目,给你报销5000,5000不够给你报10000,学校贴钱让你学,开发板想买几块买几块。而且这几百万也只是给学生做项目用的经费,加上其他一些经费,学校往每一个学生身上砸的钱绝对是海量资金。这样有项目经验的学生公司就喜欢。不能提供培优计划是专科学校的一个缺陷,你既然有这个自觉了,为什么还想要反驳“本科就是比大专好”的观点呢?211、985有大量资金支持培优计划,这也是公司喜欢看文凭的一个重要原因。),公司招人,不可能上千个应聘者都给你们面试机会,毕竟面试很花时间。筛简历需要一个准入门槛,首先程序员要数学好和英语好,那么筛简历时本科甚至211以下的都不要,最起码可以保证剩下这些人英语、数学、学习能力、努力程度达到心理预期。
垃圾桶里的简历就没人才吗?——比起筛出来的那些比例低太多了,筛选成本过高,不缺那一个,而且题主这种英语数学一点都不在乎的想法,显然不是那个不应该进垃圾桶的那一个。
顺便给一个数据统计上的数据(为什么大(you)型(qian)的互联网企业的CEO们文凭都这么高呢?
————————————————————————————
高三时我成绩非常糟糕,两门主科加起来就150分的事也是有的(两科300分),直到广一模时还是只有525分,最后花了三个月强化了一下,级名次高考时应该到30左右了吧。中学那点课程真的不难,有心学上资源更多的本科不是问题,在这里也劝诫各位还在上高中的知友不要太荒废时间,毕竟多十几分,没准学校里就多出台超算给你玩。
题主认为的中国教育的失败的地方是在于分配给题主的教育资源,题主认为太少太差?资源就那么点,你自己不去争又嫌给你的少?那你想国家怎么分配教育资源?人人平等大家都来上那种花七八周就讲到指针的C语言课?
资源是靠自己争取的,你在那里坐着就等着教学资源来给你“培优”?题主现在虽然上了专科,可是你依旧有机会得到更多资源,例如你去搞个ACM 金奖下来,这样的话估计就能获取超越所有题主的教学资源。

题主嫌专科教得慢,我们学校半个学期学的就比整个高中三年都多了。太快了题主可能能跟上,可是你那些花了三年却连中学课程都没搞懂多少的小伙伴们呢?
“这一定是体制问题。”

阅读全文……

标签 : ,

让pre自动换行 - starspace - 博客园

强制不换行

div{
white-space:nowrap;
}

自动换行

div{ 
word-wrap: break-word; 
word-break: normal; 
}

强制英文单词断行

div{
word-break:break-all;
}

让pre自动换行:

pre{
white-space:pre-wrap; /* css-3 */
white-space:-moz-pre-wrap; /* Mozilla, since 1999 */
white-space:-pre-wrap; /* Opera 4-6 */
white-space:-o-pre-wrap; /* Opera 7 */
word-wrap:break-word; /* Internet Explorer 5.5+ */
}

阅读全文……

标签 : , ,

如何看待闾丘露薇对幼女香港街头小便引发争执一事的言论? - 知乎

看了大家的讨论,我觉得,父母到底该怎么做的问题,我就不必多说了。我说说隐藏这个事件背后的问题:香港人和内地客的冲突。


1. 但从这件事来看,当然那些拍照者是有问题的。就在全世界都在讨论死刑是否人性化的时候,我们还在讨论“一个旅游的孩子,在找不到厕所的情况下,能不能在街道上尿在纸尿裤上”的问题。说实在的,我打这些字的时候都觉得很没劲。所谓文明、规矩、法律是怎么出现的?他们不是单纯的为了约束人,它们的出现是让人类能够更好的生活。就是如此简单而已。如果连这点道理都不明白,那还谈什么文明?

2. 接下来,我们谈谈香港人。长期生活在英国殖民政府的阴影下,他们受到过很多不公平的对待,有一些甚至是不可见的,潜移默化的。怎么说?很多香港人有过这样的纠结:我到底是英国人还是香港人,或者是中国人?你说我是英国人吧,英国是殖民政府,英国人也从未把香港当成本国过。你说我是香港人吧,联合国里没有这么个国家。你说我是中国人吧,我离开祖国已100年了。我觉得,97回归后,祖国应该好好的补偿香港、补偿香港人民,而内地的人,也理所应当的包容和迁就他们的缺点,大家一点点的适应,慢慢的来,会好的。这些年来,具体祖国是否照顾过香港,我们不得而知,但是我觉得,如果照顾过,那是很合理的,内地人不要抱怨。就像是你被拐走的孩子,10几年后他终于回家了,作为父母是不是应该补偿给他呢?是不是觉得自己亏欠他了呢?
话又说回来,如果这个孩子耍耍小性,大家都该包容一下。可是倘若他要作奸犯科呢?(我知道这个事件,没有到达作奸犯科的程度)作为亲人,我觉得也有义务和责任把他拉回来。
好,言归正传。我相信,大部分的香港人,对内地人是没有仇恨的。由于文化的不同,突然的交流,总会带来这样那样的误会。单从对错上来讲,彼此互有责任。
就事论事,单从这件事上来讲,这几位香港青年属于什么人呢?他们类似鲁迅笔下的“西仔”。就是那些替西方人工作过,就觉得自己高人一等了。说句难听的,以这几位的水平,估计自己被西方人上过了,都觉得是件值得炫耀的事。
香港的某些理念,以及法制,公民的素质确实是比大部分大陆人高。英国给香港带来过很多的好处,当然也包括廉洁的政府和优秀的社会体制以及先进的生活理念。可亲爱的,这并不代表你就真的高人一等了。这些青年的行为,就像是早早知道了某种知识的人,于是看不起不知道而又想要知道的人。举例子来讲,国内可能很多人过马路都不喜欢看红绿灯,这些人习惯成自然,于是到了香港也不注意。这时候,你总会看到有一个自鸣得意的人,斜眼看着这些未开化的“民族”,一副了不起的模样。亲爱的,这不是文明,这是傲慢。文明是深深地爱。当你看到不如你的人,你会为他们感到失落,你会想要帮助他们,你会希望带给他们什么。当你看到贫穷的孩子在尿尿活泥巴的时候,你不会觉得他恶心,你会蹲在他的身边,告诉他,这样不卫生哦,拍拍他的头,然后为他洗手。


3. 我再次声明,我真的觉得大部分香港人是和内地人没有仇恨的。这声明不是给香港人看的,而是给内地人看的。
可为什么,会有越来越多这种港人、内地人的冲突呢?一方面,内地的游客确实生活习惯不好,给别人带来了不方便,比如在公共场合大声喧哗、吸烟之类的。一方面,大量的内地人涌入香港,无论是交通还是旅店,相信香港人都受到了影响。一方面,经济因素的问题(不一一列举)。
我觉得,后两点,政府部门逃脱不了干系。他们为了经济的发展而不顾香港承受力的问题,是非常不负责任的行为。那么,我们难道要因为政府的无能而继续厮杀下去吗?我觉得是不值得的。第一点,我觉得,我们彼此都不够宽容。说实在的,我一个大学毕业,工作三年的人都难去香港一次,那些去过香港的,应该素质不在我之下才对。为什么还有这么多问题?答案很简单,大家谁也不必谁强,说到包容和爱,咱们还差得多。无论是港人还是内地人,都该深刻反思一下。

差不多就这样吧。
说真的,每次看到这种新闻,我都很心痛。结结实实的疼。香港和内地,就像是两个没长大的兄弟。小打小闹,是可爱的。如果刀刀见血,那就真是人间悲剧了。

阅读全文……

标签 : ,

JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) - qyqingyan的专栏 - 博客频道 - CSDN.NET

非递归调用遍历文件夹:

  1. public void traverseFolder1(String path) {  
  2.         int fileNum = 0, folderNum = 0;  
  3.         File file = new File(path);  
  4.         if (file.exists()) {  
  5.             LinkedList<File> list = new LinkedList<File>();  
  6.             File[] files = file.listFiles();  
  7.             for (File file2 : files) {  
  8.                 if (file2.isDirectory()) {  
  9.                     System.out.println("文件夹:" + file2.getAbsolutePath());  
  10.                     list.add(file2);  
  11.                     fileNum++;  
  12.                 } else {  
  13.                     System.out.println("文件:" + file2.getAbsolutePath());  
  14.                     folderNum++;  
  15.                 }  
  16.             }  
  17.             File temp_file;  
  18.             while (!list.isEmpty()) {  
  19.                 temp_file = list.removeFirst();  
  20.                 files = temp_file.listFiles();  
  21.                 for (File file2 : files) {  
  22.                     if (file2.isDirectory()) {  
  23.                         System.out.println("文件夹:" + file2.getAbsolutePath());  
  24.                         list.add(file2);  
  25.                         fileNum++;  
  26.                     } else {  
  27.                         System.out.println("文件:" + file2.getAbsolutePath());  
  28.                         folderNum++;  
  29.                     }  
  30.                 }  
  31.             }  
  32.         } else {  
  33.             System.out.println("文件不存在!");  
  34.         }  
  35.         System.out.println("文件夹共有:" + folderNum + ",文件共有:" + fileNum);  
  36.   
  37.     }  

阅读全文……

还在找“p2psearcher”?看看所谓“种子搜索神器”是个什么东西!

还在找“p2psearcher”?看看所谓“种子搜索神器”是个什么东西!

2012-10-15 11:33:39
 

阅读全文……

标签 : , , ,

java - How can I get the HTTP status code out of a ServletResponse in a ServletFilter? - Stack Overflow

First, you need to save the status code in an accessible place. The best to wrap the response with your implementation and keep it there:

public class StatusExposingServletResponse extends HttpServletResponseWrapper {       private int httpStatus;       public StatusExposingServletResponse(HttpServletResponse response) {          super(response);      }       @Override      public void sendError(int sc) throws IOException {          httpStatus = sc;          super.sendError(sc);      }       @Override      public void sendError(int sc, String msg) throws IOException {          httpStatus = sc;          super.sendError(sc, msg);      }        @Override      public void setStatus(int sc) {          httpStatus = sc;          super.setStatus(sc);      }       public int getStatus() {          return httpStatus;     }  }

In order to use this wrapper, you need to add a servlet filter, were you can do your reporting:

public class StatusReportingFilter implements Filter {       public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {          StatusExposingServletResponse response = new StatusExposingServletResponse((HttpServletResponse)res);          chain.doFilter(req, response);          int status = response.getStatus();         // report      }       public void init(FilterConfig config) throws ServletException {          //empty      }       public void destroy() {         // empty     }  }

阅读全文……

[信管征文]2012年下半年一次过高项(个人攻略总结) - 综合知识 - 信管网

        复习开始之前我分析这门考试的特点:

        1、考试涉及专业:项目管理、软件工程、系统工程、高中数学、综合布线、技术经济学。因此,我除了下载了官方、希赛的两套教材之外,下载了PMBOK2008版、软件工程、国防科大版系统工程原理(重点是“网络图”,图上作业法很独特)、综合布线教程、工业技术经济学教材(重点是经济学计算题)等等书,保证复习时候知识点不懂的,能够立刻深入学习理解,其中帮助较大的有:PMBOK、系统工程原理、希赛版教材、现代项目管理(上中下)、信息系统项目管理师案例分析教程(张友生)、高级信息系统项目管理师的5天修炼(知识点精炼、便于记忆)。

        2、此考试网上资料还是比较多,而且很多比较新,因此我利用一些时间下载了网上流传的希赛31章视频、上海交大IT项目管理等视频课程,在前期做铺垫。

        3、考试论文需要在2小时内写3000字论文,平均每分钟需要30字左右才行,基本没有时间构思,论文需要事先准备,一开始下资料的时候就注意下载一些论文资料(范例和项目技术文档)。

        4、考试内容以项目管理知识为主,软件工程知识为辅。

        这些分析和占有学习资料的工作完成后,我就开始了复习。

        第一阶段,全面撒网(两个月)。我以PMBOK2008作为我复习的重点,先后看了此书不下2遍,之后在遇到疑问的时候还将此书作为标准翻阅,可以这么说,PMBOK就是复习的重点和主线。但是PMBOK毕竟只是一个指南,其中一些细节写的不够详细,比如网络图(单、双)、可行性研究等等,需要在看的时候通过别的书进行补充。除了项目管理知识外,我还通过看31章视频、看希赛版教材进行软件工程知识点的学习,当然也参考了其他很多教材。其次,我还利用《案例分析教程》开始了案例分析的学习,感触很大,收货颇丰。总的来说,第一阶段下来,我基本上把考试需要的两部分知识和案例看了一个遍。

        第二阶段,专题复习(20天左右)。我以一些网上下载的专题学习资料进行复习(有C哥的、有江山老师的),主要是计算题、各种标准、系统工程各专题等。这些都是考试尤其是上午考试的重点,不能马虎,能拿下的分,一定要拿下。并且购买了一本郭老师的《全真试题精解及模拟》(好像是这个书名),进行基本3天一套上午题的密集做题。

        第三阶段,冲刺及论文准备(10天左右)。冲刺阶段我主要展开了知识的查缺补漏,主要是依靠《高级信息系统项目管理师的5天修炼》这本书和前期做题的错题答案进行上午一的准备,并利用网上下载的论文押题材料(C哥、江山老师、信管网)进行论文准备,列出了自己的写作提纲(进度、整体、范围、成本、合同、沟通,大项目),并写出了进度的符合字数要求的范文,毕竟不管写什么方面的论文,大概一半的文章内容都是一样的,写这篇范文的目的就是演练这一半一样的东西,然后根据提纲不变应万变。

        考试当天,上午去考场,我把九大管理的图示在车上过了一遍,中午就抓紧时间看案例分析的材料,在论文考试的时候我就把我写进度方面的范文按照自我设定的提纲进行了修改。应该来说,整个考试,一切都在可控之中。

       考后,我发现,光看希赛版的教材可能还是不行,很多题来自官方教材,所以建议还是要看看官方教材,这是我较大的失误。

        以上是我准备高项考试的一点体会,作为我通关的攻略吧,献给大家,同时感谢信管网、C哥、江山老师,张友生老师,以及在QQ群中一起做题的阿拉贡、11-10等等大侠。

阅读全文……

标签 : ,

JVM系列四:生产环境参数实例及分析【生产环境实例增加中】 - redcreen - 博客园

java application项目(非web项目)

改进前:

-Xms128m
-Xmx128m
-XX:NewSize=64m
-XX:PermSize=64m
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=78
-XX:ThreadStackSize=128
-Xloggc:logs/gc.log
-Dsun.rmi.dgc.server.gcInterval=3600000
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.server.exceptionTrace=true
问题:
  1. permsize 设置较小,很容易达到报警范围(0.8)
  2. 没有设置MaxPermSize,堆增长会带来额外压力。
  3. NewSize较大,old gen 剩余空间64m,一方面可能会带来old区容易增长到报警范围(监控数据显示oldgenused长期在50m左右,接近78%,容易出现full gc),另一方面也存在promontion fail风险
改进后:
-Xms128m
-Xmx128m
-Xmn24m
-XX:PermSize=80m
-XX:MaxPermSize=80m
-Xss256k
-XX:SurvivorRatio=1
-XX:MaxTenuringThreshold=20
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSParallelRemarkEnabled
-XX:CMSFullGCsBeforeCompaction=2
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:logs/gc.log
-Dsun.rmi.dgc.server.gcInterval=3600000
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.server.exceptionTrace=true
修改点:
  1. PermSize与MaxPermSize都设置为80,一方面避免non heap warn(报警阀值0.8 非对内存一般占用到60M以内),一方面避免堆伸缩带来的压力
  2. 通过设置Xmn=24M及SurvivorRatio=1 使得Eden区=from space=to  space=8M,降低了Eden区大小,降低YGC的时间(降低到3-4ms左右),同时通过设MaxTenuringThreshold=20,使得old gen的增长很缓慢。带来的问题是YGC的次数明显提高了很多。
  3. 其他参数优化 修改后带来的好处见JVM参数设置
再次改进后
-Xms128m
-Xmx128m
-Xmn36m
-XX:PermSize=80m
-XX:MaxPermSize=80m
-Xss256k
-XX:SurvivorRatio=1
-XX:MaxTenuringThreshold=20
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=73
-XX:+UseCMSCompactAtFullCollection
-XX:+CMSParallelRemarkEnabled
-XX:CMSFullGCsBeforeCompaction=2
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:logs/gc.log
-Dsun.rmi.dgc.server.gcInterval=3600000
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.server.exceptionTrace=true
修改点:

      在上面的基础上调整Xmn大小到36M,设置CMSInitiatingOccupancyFraction=73。

      Dden区与Survivor区大小都增加到12M,通过CMSInitiatingOccupancyFraction计算公式,计算得出value为73是,可以避免promotion faild问题,同时满足堆内存监控报警值在80%:内存大小128M*80%=102.4M 102.4M-36M=66.4M(老生代达到此值报警) 老生代达到67.15M(92M*0.73)将发生Full GC,所以在老生代大小达到66.4M时也就是WARN报警时将很有可能出现Full GC。
       增大了Eden和Survivor区的值,会减小YGC的次数,但由于空间变大理论上也会相应的增加YGC的时间,不过由于新生代本身就很小(才36M)这点儿变化可以忽略掉。实际的监控值显示YGC的时间在4-5ms之间。是可以接受范围。
      SurvivorRatio 这个值还得在仔细考虑下,有待优化中
 
网上某个牛人的配置 :每天几百万pv一点问题都没有,网站没有停顿
$JAVA_ARGS
.=
"
-Dresin.home=$SERVER_ROOT
-server
-Xms6000M
-Xmx6000M
-Xmn500M
-XX:PermSize=500M
-XX:MaxPermSize=500M
-XX:SurvivorRatio=65536
-XX:MaxTenuringThreshold=0
-Xnoclassgc
-XX:+DisableExplicitGC
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSClassUnloadingEnabled
-XX:-CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=90
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:log/gc.log
";

说明一下, -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0就是去掉了救助空间; 

-Xnoclassgc禁用类垃圾回收,性能会高一点; 

-XX:+DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能; 

-XX:+UseParNewGC,对年轻代采用多线程并行回收,这样收得快; 

带CMS参数的都是和并发回收相关的,不明白的可以上网搜索; 

CMSInitiatingOccupancyFraction,这个参数设置有很大技巧,基本上满足(Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn就不会出现promotion failed。在我的应用中Xmx是6000,Xmn是500,那么Xmx-Xmn是5500兆,也就是年老代有5500兆,CMSInitiatingOccupancyFraction=90说明年老代到90%满的时候开始执行对年老代的并发垃圾回收(CMS),这时还剩10%的空间是5500*10%=550兆,所以即使Xmn(也就是年轻代共500兆)里所有对象都搬到年老代里,550兆的空间也足够了,所以只要满足上面的公式,就不会出现垃圾回收时的promotion failed; 

SoftRefLRUPolicyMSPerMB这个参数我认为可能有点用,官方解释是softly reachable objects will remain alive for some amount of time after the last time they were referenced. The default value is one second of lifetime per free megabyte in the heap,我觉得没必要等1秒; 

-Xmx4000M
-Xms4000M
-Xmn600M
-XX:PermSize=500M
-XX:MaxPermSize=500M
-Xss256K
-XX:+DisableExplicitGC
-XX:SurvivorRatio=1
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128M
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=80
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:log/gc.log

改进方案:

上面方法不太好,因为没有用到救助空间,所以年老代容易满,CMS执行会比较频繁。我改善了一下,还是用救助空间,但是把救助空间加大,这样也不会有promotion failed。
具体操作上,32位Linux和64位Linux好像不一样,64位系统似乎只要配置MaxTenuringThreshold参数,CMS还是有暂停。为了解决暂停问题和promotion failed问题,最后我设置-XX:SurvivorRatio=1 ,并把MaxTenuringThreshold去掉,这样即没有暂停又不会有promotoin failed,而且更重要的是,年老代和永久代上升非常慢(因为好多对象到不了年老代就被回收了),所以CMS执行频率非常低,好几个小时才执行一次,这样,服务器都不用重启了。

 

某网友:
$JAVA_ARGS
.=
"
-Dresin.home=$SERVER_ROOT
-server
-Xmx3000M
-Xms3000M
-Xmn600M
-XX:PermSize=500M
-XX:MaxPermSize=500M
-Xss256K
-XX:+DisableExplicitGC
-XX:SurvivorRatio=1
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128M
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintHeapAtGC
-Xloggc:log/gc.log
";
64位jdk参考设置,年老代涨得很慢,CMS执行频率变小,CMS没有停滞,也不会有promotion failed问题,内存回收得很干净
 

阅读全文……

标签 :

Apache Tika - Apache Tika

The Apache Tika™ toolkit detects and extracts metadata and structured text content from various documents using existing parser libraries. You can find the latest release on the download page. See the Getting Started guide for instructions on how to start using Tika.

支持的文件格式有:

Supported Document Formats

This page lists all the document formats supported by Apache Tika 0.6. Follow the links to the various parser class javadocs for more detailed information about each document format and how it is parsed by Tika.

阅读全文……

标签 :

OpenSSL 的 Heartbleed 漏洞的影响到底有多少? - 知乎

既然大家都这么关注,那么我就再爆点猛料好了。
我一骇客界的朋友Lwqn跟我说他们一年前就已经在利用这个漏洞了,获取到了不少大网站的敏感数据,这个消息让我彻夜难眠。

他发了一个exploit的demo给我,原链接已经撤掉了,所以我放到了gist上:http://gist.github.com/RixTox/10222402 Pyhton3版的在这里OpenSSL heartbeat PoC with STARTTLS support

下图是对DEF CON进行的Heartbleed测试
DEF CON在我测试完一个小时后已修复此漏洞。

事实证明此漏洞的确会造成严重的memory dump,因为与所有OpenSSL数据共享同一块内存,dump出来的有可能是任何内容:用户请求、密码,甚至是服务器的私钥!只要不断进行攻击就很有可能拿到关键的数据。

这是一个很严重的漏洞,涉及开启了Heartbeat扩展的OpenSSL版本1.0.1f, 1.0.1e, 1.0.1d, 1.0.1c, 1.0.1b, 1.0.1a, 1.0.1
OpenSSL: OpenSSL vulnerabilities
刚才在我们的服务器(Gentoo)上看了一下,用的正是1.0.1c的受威胁版本,不过我们并没有开启Heartbeat,所以并不会受到实际威胁,但还是打上了补丁,以备不时之需。
Add heartbeat extension bounds check. 路 7e84016 路 openssl/openssl 路 GitHub
如果你只是想检测一下你的服务器受不受威胁,现在有一款现成的工具可以用
titanous/heartbleeder 路 GitHub
也可以直接使用下面的OpenSSL命令来判断

/usr/local/bin/openssl s_client -connect $website:443 -tlsextdebug 2>&1| grep 'TLS server extension "heartbeat" (id=15), len=1' 


这个命令只告诉你是否有启用Heartbeat,但并不能说明是否受到威胁,还需要结合OpenSSL的版本进行判断。

Hacker News上面有人给出了这段脚本,能检测Alexa Top Million网站开启Heartbeat的服务器

INPUT=websites.csv OLDIFS=$IFS IFS=, [ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; } while read rank website do   echo "checking $website for heartbeat..."   echo -e "quit\n" | /usr/local/bin/openssl s_client -connect $website:443 -tlsextdebug 2>&1| grep 'TLS server extension "heartbeat" (id=15), len=1' done < $INPUT IFS=$OLDIFS 

Download Alexa Top 1,000,000 Websites for Free
I wrote a bash script to check the top 1000 websites and huge percentage of them...
跑了一小会儿,但好像并没发现什么有价值的信息。其实Heartbeat作为CRM在OpenSSL中用到的机会本就不多,再加上大网站的反应都很迅速,不容易出现大的纰漏。至于0Day发布之前有没有被人利用就不得而知了。

阅读全文……

标签 : ,

中国最美的地方排行榜 我一个都没去过!!

一、中国最美的五大峰林 
 
 
1、桂林阳朔:山水相依的画廊 
2、武陵源:失落深山的丹青 
3、万峰林:高原上的心跳 
4、三清山:西太平洋边缘最美丽的花岗岩 
5、罗平峰林:金色的花园 
 
二、中国最美的十大名山 
 
 
1、南迦巴瓦:云中的天堂 
2、贡嘎:风停止了脚步 
3、珠穆朗玛:心灵的守望 
4、梅里:雪神的仪仗队 
5、黄山:上帝的盆景 
6、稻城三神山:香格里拉的地标 
7、乔戈里:遥远的秘境 
8、冈仁波齐:众神的居所 
9、泰山:华夏的图腾 
10、峨眉山:从盆地升向天庭 
 
三、中国最美的五大湖 
 
 
1、青海湖:陆心之海 
2、喀纳斯湖:上帝的调色板 
3、纳木错:与神耳语的地方 
4、长白山天池:盛怒之后的平静 
5、风雅西湖 
 
四、中国最美的三大雅丹 
 
 
1、乌尔禾:风受坎坷不喜平 
2、白龙堆:群龙聚首天涯 
3、三垅沙:戈壁的舰队 
 
五、中国最美的五大城区 
 
 
1、厦门鼓浪屿:听罢琴声听涛声 
2、苏州老城:现代化包围的古老 
3、澳门历史城区:西方文化由此登陆 
4、青岛八大关:殖民者留下的风情 
5、北京什刹海地区:紧临中南海的时尚 
 
六、中国最美的十大峡谷 
 
 
1、雅鲁藏布大峡谷 
2、金沙江虎跳峡 
3、长江三峡 
4、怒江大峡谷 
5、澜沧江梅里大峡谷 
6、太鲁阁大峡谷 
7、黄河晋陕大峡谷 
8、大渡河金口大峡谷 
9、太行山大峡谷 
10、天山库车大峡谷 
 
七、中国最美的六大旅游洞穴 
 
1、梦幻织金洞 
2、多彩芙蓉洞 
3、全能黄龙洞 
4、震撼腾龙洞 
5、本色雪玉洞 
6、九曲本溪水洞 
 
八、中国最美的八大海岸 
 
1、亚龙湾:跌落在地上的天空 
2、野柳:海浪留在大地上的作品 
3、成山头:腹地对大海的渴望 
4、东寨港红树林:留在陆地上的碧浪 
5、昌黎黄金海岸:沙漠与大海的吻痕 
6、维多利亚海湾:万丈红尘映碧海 
7、崇武海岸:惠安女眺望大海的地方 
8、大鹏半岛:临近闹市的一块荒野 
 
九、中国最美的六大瀑布 
 
1、藏布巴东瀑布群:大峡谷中的隐士 
2、德天瀑布:跨国的风情 
3、黄河壶口瀑布:万千气象一壶收 
4、罗平九龙瀑布:美玉分十节 
5、诺日朗瀑布:树丛中的织锦 
6、黄果树瀑布:不能复制的雄浑 
 
十、中国最美的六大冰川 
 
1、绒布冰川:向第高峰告别 
2、天山托木尔冰川:雪峰献给旱海的殷勤 
3、海螺沟冰川:拒绝融化 
4、米戴盆望天冰川:桃花源里的冰雪 
5、特拉木坎力冰川:冰雕嘉年华 
6、透明梦柯冰川:荒漠中的甘泉 
 
十一、中国最美的十大森林 
 
1、天山雪岭云杉林 
2、长白山红松阔叶混交林 
3、尖峰岭热带雨林 
4、白马雪山高山杜鹃林 
5、波密岗乡林芝云杉林 
6、轮台胡杨林 
7、西双版纳热带雨林 
8、荔波喀斯特森林 
9、大兴安岭北部兴安落叶松林 
10、蜀南竹海 
 
十二、中国最美的十大海岛 
 
1、西沙群岛:珊瑚为国土增色 
2、涠洲岛:水火雕出的作品 
3、南沙群岛:珊瑚为中国铸就的界碑 
4、澎湖列岛:人文与自然交相辉映 
5、南麂鸟:神奇的海上生物园 
6、庙岛列岛:海上有仙山 
7、普陀山岛:海天出佛国 
8、大嵛山岛:山、湖、草、海在此浓缩 
9、林进屿、南碇岛:古火山地貌珍品的遗存 
10、海陵岛:南中国海边的银滩 
 
十三、中国最美的六大沼泽湿地 
 
1、若尔盖:高原碧宝 
2、巴音布鲁克:天山雪水创造的奇迹 
3、三江平原湿地:残存的壮美 
4、黄河三角洲湿地:沧海桑田进行时 
5、优雅鹤乡扎龙湿地 
6、“红地毯”辽河三角洲湿地 
 
十四、中国最美的六大乡村古镇 
 
1、丹巴藏寨:空谷有佳人 
2、哈尼村落:万千明镜映炊烟 
3、图瓦村:所谓伊人 
在水一方 
4、黎平肇兴侗寨:白云深处有人家 
5、婺源:最爱村头油菜花 
6、丽江大研镇:琶琶弦上说相思 
 
十五、中国最美的六大草原 
 
1、呼伦贝尔东部草原 
2、伊犁草原 
3、锡林郭勒草原 
4、川西高寒草原 
5、那曲高寒草原 
6、祁连山草原 
 
十六、中国最美的七大丹霞 
 
1、丹霞山:中国的红石公园 
2、武夷山:碧水丹山甲东南 
3、大金湖:水上丹霞奇观 
4、龙虎山:炼丹之处红崖显 
5、资江一八角寨—崀山丹霞地貌:青峰赤壁丹霞魂 
6、张掖丹霞地貌:宫殿式丹霞天地造 
7、赤水丹霞地貌:银瀑飞泻映丹崖 
 
十七、中国最美的五大沙漠 
 
1、巴丹吉林沙漠腹地:上帝画下的曲线 
2、塔克拉玛干沙漠腹地:大地的天体营 
3、古尔班通古特沙漠腹地:大漠的血脉 
4、鸣沙山、月牙泉:千年的守望 
5、沙坡头:曳住流沙的脚步 

阅读全文……

标签 : ,

How to access Constant from a constant class in JSTL(JSP page) (Struts forum at JavaRanch)

Scriptlet is pedestrian. Make sure that you are using jsp 2.x and add a taglib with a function like the one below. It will get any object type, not just strings, and could be modified to include dot notation for any constants class. You can make a custom functions TLD once and reuse it for every project you ever do in the future. As a final note, if this constants class is for actual user viewable content, not keys and the like, use a localizable resource file and jstls fmt:message instead.

/**
* usage: ${yourprefix:constant('constantName')}
*/
public static Object getConstant(String constantName)
{
try
{
Field field = Constants.class.getDeclaredField(constantName);
return field.get(null);
}
catch (Exception e)
{
return null;
}
}

in your tld:
<function>
<name>constant</name>
<function-class>gov.fema.web.nimcast.tools.taglib.Functions</function-class>
<function-signature>Object getConstant(java.lang.String)</function-signature>
</function>

阅读全文……

标签 :

浅谈Linux内存管理机制 - 51CTO.COM

作为一名Linux系统管理员,监控内存的使用状态是非常重要的,通过监控有助于了解内存的使用状态,比如内存占用是否正常,内存是否紧缺等等,监控内存最常使用的命令有free、top等,下面是某个系统free的输出:

 

  1. [root@linuxeye ~]# free 
  2.              total       used       free     shared    buffers     cached 
  3. Mem:       3894036    3473544     420492          0      72972    1332348 
  4. -/+ buffers/cache:    2068224    1825812 
  5. Swap:      4095992     906036    3189956 

 

每个选项的含义:

第一行:

total:物理内存的总大小

used:已经使用的物理内存大小

free:空闲的物理内存大小

shared:多个进程共享的内存大小

buffers/cached:磁盘缓存的大小

 

第二行Mem:代表物理内存使用情况

第三行(-/+ buffers/cached):代表磁盘缓存使用状态

第四行:Swap表示交换空间内存使用状态

 

free命令输出的内存状态,可以通过两个角度来查看:一个是从内核的角度来看,一个是从应用层的角度来看的。

从内核的角度来查看内存的状态

就是内核目前可以直接分配到,不需要额外的操作,即为上面free命令输出中第二行Mem项的值,可以看出,此系统物理内存有3894036K,空闲的内存只有420492K,也就是40M多一点,我们来做一个这样的计算:

3894036 – 3473544 = 420492

其实就是总的物理内存减去已经使用的物理内存得到的就是空闲的物理内存大小,注意这里的可用内存值420492并不包含处于buffers和cached状态的内存大小。

如果你认为这个系统空闲内存太小,那你就错了,实际上,内核完全控制着内存的使用情况,Linux会在需要内存的时候,或在系统运行逐步推进时,将buffers和cached状态的内存变为free状态的内存,以供系统使用。

从应用层的角度来看系统内存的使用状态

也就是Linux上运行的应用程序可以使用的内存大小,即free命令第三行 -/+ buffers/cached 的输出,可以看到,此系统已经使用的内存才2068224K,而空闲的内存达到1825812K,继续做这样一个计算:

420492+(72972+1332348)=1825812

通过这个等式可知,应用程序可用的物理内存值是Mem项的free值加上buffers和cached值之和,也就是说,这个free值是包括buffers和cached项大小的,对于应用程序来说,buffers/cached占有的内存是可用的,因为buffers/cached是为了提高文件读取的性能,当应用程序需要用到内存的时候,buffers/cached会很快地被回收,以供应用程序使用。

阅读全文……

标签 :

js window.onload 加载多个函数和追加函数 - 唔愛吃蘋果 - 博客园

window.onload 不能同时加载多个函数,后面会把前面的覆盖,解决办法:

 

 function addLoadEvent(func) {
  
var oldonload = window.onload;//得到上一个onload事件的函数
  if (typeof window.onload != 'function') {//判断类型是否为'function',注意typeof返回的是字符串
    window.onload = func;
  } 
else {  
    window.onload 
= function() {
      oldonload();
//调用之前覆盖的onload事件的函数---->由于我对js了解不多,这里我暂时理解为通过覆盖onload事件的函数来实现加载多个函数
      func();//调用当前事件函数
    }
  }
}

//(完整示例)使用如下:

function t(){
alert(
"t")
}
function b(){
alert(
"b")
}
function c(){
alert(
"c")
}
 
function addLoadEvent(func) {
  
var oldonload = window.onload;
  
if (typeof window.onload != 'function') {
    window.onload 
= func;
  } 
else {  
    window.onload 
= function() {
      oldonload();
      func();
    }
  }
}

addLoadEvent(t);
addLoadEvent(b);
addLoadEvent(c);
//等价于  window.onload =function() { t();  b(); c() ;}

阅读全文……

Auto refreshing properties from property files | Entelligentsia Blog

一个自动重新加载配置文件修改的Properties类:
 
 
class AutoRefreshingProperties extends Properties{
    private long LAST_LOADED = System.currentTimeMillis();
    private List listeners = Collections.synchronizedList(new ArrayList());
    public AutoRefreshingProperties(String absolutePathToPriopertiesFile) throws IOException{
        this(null, absolutePathToPriopertiesFile);
    }
    public AutoRefreshingProperties(Properties defaults, String absolutePathToPriopertiesFile) throws IOException{
        super(defaults);
        load(absolutePathToPriopertiesFile);
    }
    public AutoRefreshingProperties removeListener(FileChangeListener listener){
        listeners.remove(listener);
        return this;
    }
    public AutoRefreshingProperties addListener(FileChangeListener listener){
        listeners.add(listener);
        return this;
    }
    public synchronized void load(String absoluteFilePath) throws IOException {
        InputStream is = new FileInputStream(new File(absoluteFilePath));
        this.load(is);
        LAST_LOADED = System.currentTimeMillis();
        keepUpdated(absoluteFilePath);
    }
    abstract class FileWatcher implements Runnable{}
    private void keepUpdated(final String absoluteFilePath){
        Executors.newSingleThreadExecutor().submit(
                new FileWatcher(){
                    @Override
                    public void run() {
                        try {
                            while(true){
                                if (new File(absoluteFilePath).lastModified() &gt; LAST_LOADED){
                                    InputStream is =  new FileInputStream(new File(absoluteFilePath));
                                    load(is);
                                    LAST_LOADED = System.currentTimeMillis();
                                    notifyListeners();
                                }
                                Thread.yield();
                                Thread.sleep(2000);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
        );
    }
    private void notifyListeners(){
        final Properties properties = new Properties(this);
        for (FileChangeListener aListener : listeners){
            aListener.notifyFileChanged(properties);
        }
    }
}

阅读全文……

Using Multiple "buttons" Elements in IE6

IE6下点击类型为submit的Button,其他未点击的button也会提交,导致某些程序有问题,下面是一种解决办法。

Save this as buttonfix.js

function buttonfix() {
    var buttons = document.getElementsByTagName('button');
    for (var i=0; i<buttons.length; i++) {
        if(buttons[i].onclick) continue;
        
        buttons[i].onclick = function () {
            for(j=0; j<this.form.elements.length; j++)
                if( this.form.elements[j].tagName == 'BUTTON' )
                    this.form.elements[j].disabled = true;
            this.disabled=false;
            this.value = this.attributes.getNamedItem("value").nodeValue ;
        }
    }
}
window.attachEvent("onload", buttonfix);

On each page which you need the fix, include the following:

<!--[if lt IE 7]>
    <script type="text/javascript" src="buttonfix.js"></script>
<![endif]-->

If the problem is also present in IE7, instead use:

<!--[if IE]>
    <script type="text/javascript" src="buttonfix.js"></script>
<![endif]-->

阅读全文……

标签 : ,