Category Archives: 工作

配置Tomcat打印http request内容的详细信息

最近有客户说升级了我们的产品他们SSO环境突然不工作了,他们不确定是第三方的authentication center出了问题还是我们产品的问题,事实上绝大多数的SSO实现都依赖于http header,我们的产品依赖于REMOTE_USER这个header来告诉我们已经通过授权的用户名,这里要多说一句,http header REMOTE_USER和HttpServletRequest.getRemoteUser可不一样,这个方法拿的是一个类似cgi运行环境的环境变量,例如如果IIS+Tomcat来实现windows authentication的时候,ajp3协议里会会告诉这个环境变量的值,这个时候跟http request就没什么关系了。

客户要求我们是否能够帮助dump出到达tomcat容器的http requests,来证明确实要求的http request不包含相应的内容,想了一下,这应该是容器提供的debug功能,所以查了查文档,果然tomcat的valve架构就是完成类似事情的,而且有一个专门的valve来做这件事

<Valve className="org.apache.catalina.valves.RequestDumperValve"/>

只要在server.xml里uncomment这一行就好了。

不过这个valve不适用tomcat 7,tomcat团队在tomcat 7里面决定把类似的功能放入标准的Java Servlet Filter体系,并且内置了filter类,org.apache.catalina.filters.RequestDumperFilter,使用也很简单,只要在web.xml里按照下面的样子配置就好

<filter>
    <filter-name>requestdumper</filter-name>
    <filter-class>
        org.apache.catalina.filters.RequestDumperFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>requestdumper</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

不过可惜的是两者的功能有那么一点点的不等价,甚至tomcat 6的valve更胜一筹,有些debug scenarios里filter表现出有点奇怪的方式,具体可以看这里

坑爹的JD

最近,收到一份猎头的JD,职位只是一个scrum master或者PM,JD异常的简洁,这年头混口饭吃怎么就这么不容易啊!

Programming Languages
•        Java
•        Groovy
•        Ruby
•        SQL
•        Application Frameworks
•        Spring 2.5 or 3 (MVC, Dependency Injection, Aspects, Security)
•        Grails
•        Rails
•        Secure Programming
•        Performance Profiling/Tuning – Cloud Computing
•        Web
•        JavaScript
•        CSS
•        AJAX
•        Mobile
•        Smartphone ( iPhone, Android, Blackberry, Windows)
•        WML
•        Testing
•        Junit 
•        Mockito 
•        JBehave Selenium

•        Integration

•        Mule ESB
•        JMS
•        Hibernate
•        Web Services (REST, WSDL)
•        XML/XSD
•        Infrastructure
•        Tomcat App Server
•        Apache Web Server
•        Linux
•        Oracle Database
•        Build/Continuous Integration
•        Maven
•        Git or Subversion

非常有趣的一篇文章

转载自 阮一峰的网络日志 

1.

e是一个重要的常数,但是我一直不知道,它的真正含义是什么。

它不像π。大家都知道,π代表了圆的周长与直径之比3.14159,可是如果我问你,e代表了什么。你能回答吗?

维基百科说:

\”e是自然对数的底数。\”

但是,你去看\”自然对数\”,得到的解释却是:

\”自然对数是以e为底的对数函数,e是一个无理数,约等于2.718281828。\”

这就构成了循环定义,完全没有说e是什么。数学家选择这样一个无理数作为底数,还号称这种对数很\”自然\”,这难道不是很奇怪的事情吗?

\"\"

2.

昨天我读到一篇好文章,它把这个问题解释得非常清楚,而且一看就懂。

它说,什么是e?简单说,e就是增长的极限。

下面就是它的解释。

3.

假定有一种单细胞生物,它每过24小时分裂一次。

那么很显然,这种生物的数量,每天都会翻一倍。今天是1个,明天就是2个,后天就是4个。我们可以写出一个增长数量的公式:

\"\"

上式中的x就表示天数。这种生物在x天的总数,就是2的x次方。这个式子可以被改成下面这样:

\"\"

其中,1表示原有数量,100%表示单位时间内的增长率。

4.

我们继续假定:每过12个小时,也就是分裂进行到一半的时候,新产生的那半个细胞已经可以再次分裂了。

因此,一天24个小时可以分成两个阶段,每一个阶段都在前一个阶段的基础上增长50%。

\"\"

当这一天结束的时候,我们一共得到了2.25个细胞。其中,1个是原有的,1个是新生的,另外的0.25个是新生细胞分裂到一半的。

如果我们继续修改假设,这种细胞每过8小时就具备独立分裂的能力,也就是将1天分成3个阶段。

\"\"

那么,最后我们就可以得到大约2.37个细胞。

很自然地,如果我们进一步设想,这种分裂是连续不断进行的,新生细胞每分每秒都具备继续分裂的能力,那么一天最多可以得到多少个细胞呢?

\"\"

当n趋向无限时,这个式子的极值等于2.718281828…。

\"\"

因此,当增长率为100%保持不变时,我们在单位时间内最多只能得到2.71828个细胞。数学家把这个数就称为e,它的含义是单位时间内,持续的翻倍增长所能达到的极限值。

这个值是自然增长的极限,因此以e为底的对数,就叫做自然对数。

5.

有了这个值以后,计算银行的复利就非常容易。

假定有一家银行,每年的复利是100%,请问存入100元,一年后可以拿多少钱?

\"\"

回答就是271.828元,等于100个e。

但是,实际生活中,银行的利息没有这么高,如果利息率只有5%,那么100元存一年可以拿到多少钱呢?

\"\"

为了便于思考,我们取n等于50:

\"\"

我们知道,在100%利息率的情况下,n=1000所得到的值非常接近e:

\"\"

因此,5%利息率就相当于e的20分之一次方:

\"\"

20分之一正好等于5%的利率率,所以我们可以把公式改写成:

\"\"

上式的rate就代表增长率。这说明e可以用于任何增长率的计算,前提是它必须是持续不断的复合式增长。

6.

再考虑时间因素,如果把钱在银行里存2年,可以得到多少钱?

\"\"

在时间t的情况下,通用公式就是:

\"\"

上式就是计算增长量的万能公式,可以适用于任何时间、任何增长率。

7.

回到上面的例子,如果银行的利息率是5%的复利,请问100元存款翻倍需要多少时间?

\"\"

计算结果是13.86年:

\"\"

上式最后一个等号,表明用72除以增长率,可以得到翻倍的大致时间,这就是72法则的来源。

(完)

“新鲜人” 与 “老油条”

关于一道有趣的题目,

说是有这么5个数,1 ,2,2,3,4,5,让求出所有的排列,排列要满足4在第三位,3和5不能相连?

新鲜人1:“求全排列,回溯,递归,满足过滤条件,这咱懂啊,专门练过,ACM得过奖的”,“啊?两个2,真二,还得来个set保存以前的结果”

新鲜人2:“求1,2,3,4,5,6的全排列,满足过滤条件并且只输出那些6在2后面的排列,并且输出的时候把6换成2”,很赞!

老油条:for i in [122345,543221] if i 满足条件 输出,收工!

无论褒贬,只是,“技巧 思想

胡言乱语

第1344期《南方周末》

空白处:不是每一期都有独家专访,但是每一周都可以在这里读懂中国

空白处:不是每个人都可以成为大人物,但是每个人都可以在这里读懂中国

后续事件:主编降职

写在BTChina,VeryCD……都要关闭时,特后悔,当初干嘛引进互联网这个玩意儿,不然我们也跟朝鲜兄弟一样,等着去解救水深火热的美帝人民,幸福指数刚刚的。

处女贴

这一周,忙,忙的有点晕,今天共计喝了5杯可乐,四杯咖啡,这周解决了SelectText功能的正则表达式字符串支持,瞄了下Selenium的实现,用OllyDbg跟了下谷歌金山词霸下hook的过程,回家跟媳妇儿去吃了小砂锅,在夜市上花了15块买了个暖手宝,看了看我爱记歌词,流水一样。