大海Online的博客

Looking for Interest

一道智力题

请回答以下问题:
    1、第一个答案是b的问题是哪一个?
    (a)2;(b) 3;(c)4;(d)5;(e)6
    2、唯一的连续两个具有相同答案的问题是:
    (a)2,3;(b)3,4;(c)4,5;(d)5,6;(e)6,7;
    3、本问题答案和哪一个问题的答案相同?
    (a)1;(b)2;(c)4;(d)7;(e)6
    4、答案是a的问题的个数是:
    (a)0;(b)1;(c)2;(d)3;(e)4
    5、本问题答案和哪一个问题的答案相同?
    (a)10;(b)9;(c)8;(d)7;(e)6
    6、答案是a的问题的个数和答案是什么的问题的个数相同?
    (a)b;(b)c;(c)d;(d)e;(e)以上都不是
    7、按照字母顺序,本问题的答案和下一个问题的答案相差几个字母?
    (a)4;(b)3;(c)2;(d)1;(e)0。(注:a和b相差一个字母)
    8、答案是元音字母的问题的个数是:
    (a)2;(b)3;(c)4;(d)5;(e)6。(注:a和e是元音字母)
    9、答案是辅音字母的问题的个数是:
    (a)一个质数;(b)一个阶乘数;(c)一个平方数;(d)一个立方数,(e)5的倍数
    10、本问题的答案是:
    (a)a;(b)b;(c)c;(d)d;(e)e

 

 

我的答案:

 

1. 第1题不能是b, 否则自相矛盾
2. 第2题不能是a, 否则123题矛盾
2.1 1为c,2不能为abc, 1为d,2不能为abcd,1为e,2不能为abde
3. 第3题不能是a, 因为第四题不可能是a
4. 第3题不能是b, 否则234题都是b则与第二题矛盾
4.1 1为e, 3不能是abe, 6为b,则3,5不能为e
5. 第4题不能是a, 否则自相矛盾
5.1 1234为 abcc abdd abee,cdeb cedb dedcbddxb dedebddxb ecdccbdcx
5.2 根据上面来判断,a的个数, 1题为d或e都不可能, 第1题只能是ac
5.3 如1234为cdeb cedb时, cdebee cedbxdd -> cdebee cedbaddxxa cedbcddcxx
6. 第7题不能是e, 否则与第2题矛盾
7. 第7,8题,可能的结果是 Xe, ca, dc 三种可能, 即第8题为ace, 即元音个数为246三种可能, 那么辅音则为864三种可能
8. 第9题的结果为 a) 235 b) 126 c) 149 d) 18 e) 5 10 即结果为bcd 即648三种可能
9. 即第789三题可能为 aec bec cad cec dcb dec
10. 即第5789 四题可能为 axxx bdcb cdcb ddcb ddec exxx
10.1 如1234为cdeb,cedb时, cdebeedcba cedbaddcba cedbaddeca cedbcddcadx cedbcddceca
10.2 上面的,成立的有 cdebeedcba
11. 当第1题是a时, 第2题是b
a) 第1234题为 abcc时, 第5题为a,与4矛盾, 5789为bdcb,cdcb ddcb时,已经7个辅音,与9矛盾, 当5为e时,与2矛盾
b) 第1234题为 abdd时, 789题为dcb dec, 5610为 aca 即abddacdcba不成立
c) 第1234题为 abee时, 第6题为e, 第8题为e, 3个a,4个e,与8题矛盾

综上所述, 只有一种情况成立 cdebeedcba


其它方析(曾经使用过的分析)
11. 第8题不能为a, 否则第5题abcde都不可能, 即789为xec,dcb, 且5789 axxx xdcb ddec exxx
12. 第8题只能是ce
13. 第9题只能是bc
14. 如果第8题为e, 有两种1个a+5个e或2个a+4个e
a) 第6个必须为e,否则只有1210可以为e,不够4个
b) 1xa+5xe 4b6e8e, 1c, 3510e 2d7a cdebeeaece与6矛盾
c) 2xa+4xe 4c6e8e, 1为a时, 510必须为e abcceeaece与2矛盾 1不a, 只能为d, 5为b,310只能e,只有7为a,与4矛盾
d) 因此第8题不能为e,只能为c
15. 第89只能为cb, 7只能为d,10不能为b
16. 第2,3不为e时, 15610必须为a或e, 1为a则

15. 当第1题不为a时, 123都不可能为ab, 只有56710四题可能为a
a) 当56710为a时, 123都不可能为ab, 与6矛盾, 即4不能为e
b) 当5610或者6710时,题为a时, 1238都不可能为b, 79不能同时为b, 矛盾, 所以6不能为a
c) 当5710为a时, 45678910为daxaeca, 第2题cde都不可选择, 矛盾
d) 所以只能有1个a或者2个a
e) 当4选择b时, 1234为cdeb,cedb, 5只能为e
e1) 1234为cdeb, 5为e, 6为e, 78910为dcba即 cdebeedcba 成立
e2) 1234为cedb, 5为e, 6为d, 6,8矛盾
f) 当4选择c时, 1只能为de, 1234都不能为ab, 3不能c 8不能为ab, 56710可能为ab,9可能为b
f1) 123为 dcd dce ded时 4c5b 只能是dedcbddcb
f2) 123为 ecd ece ede时

f1) 当5为a时,10为a, 67不能为a,
f2) 当5不为a时,
f3) 当6为a时, 1234为

f1) 当1为d, 59为b, 则dxxcbxdcbx,则只有10为a,与4矛盾
f2) 当1为e, ecxccb edxcbb


8. 如果第1题选d, 第234不能为b,则59为b,则dxxxbxdcbx,即只能有第10题可能为a,而第4题不能选ab,矛盾, 即第1题不可能为d

15. 当第1题为c时, 那么5不能为a, 否则与4矛盾, 5不能为d, 否则5与7矛盾
a) 第12题为cd时, 4为b, 5不能为a, 456789为bbdcb ccdcb eexxx,

 


1 a c d e
2 b c d e
3 c d e
4 b c
5 a b c d e
6 a b c d e
7 d
8 c
9 b
10 a c d e

9. 即第35789 五题可能为 cxxxx,

9. 如果第1题为e, 第2345不能为b,则6为b


cxxbdxxxbxdcbx dcxbbxdcb dexxbddcb deccbddcbx dedxbddcbxexxxxb
1 567 10 15610 15710 16710abcd ce bc

ae=13 22 15 24
15 4b8e6+1210 6e 4b6e8e35101a|7aaxebeexexecdebeeaece
24 4c8e6+12106b7b 4c6e8e3510 1a7a510axdxceeabxceeaecedxecbeaeca
1 2 8 10

无状态缓冲带来的可伸缩性

假设性思考~~~~

如果企业级开发中, 系统这样设计, 能否满足各类系统需求

——– 第一阶段限制

  1. 系统中所有的对象只有以下两种情况 a) 常量bean, 常量,不会改变的数据,固定配置,固定参数 a) 数据bean, 拥有getter,setter方法的纯javabean对象,均可持久化,如POJO,DTO b) 服务bean, 即bean组件, spring管理下的bean组件,如DAO,MO,AO,SO i. 对象的成员变量只能是bean组件 ii. 空参构造函数, 无需初使化 iii. 对象的方法的参数和返回类型必须为ID数据或数据bean
  2. 数据bean均需持久化管理,或者持久化到数据库服务器,或者持久化到缓冲服务器. 方法退出后,此bean中不可以保持任何引用.
  3. 数据bean的获取只能来源于 a) HTTP请求参数 b) 缓冲服务器 c) 数据库服务器 d) 其它的外部服务
  4. 数据bean不能来源于当前服务器的内存缓冲或者全局变量或者本地硬盘
  5. 数据bean在每台服务器获取后,都应该是一致的,不存在不同步的情况
  6. 数据bean是无状态的,与服务器无关,因此bean是一致的
  7. 数据bean的一致性由缓冲服务器,数据库服务器,或其它外部服务来保证
  8. 换句话说, 所有服务在等待请求状态时, 本地服务器不可以保持任何数据bean的引用.

  9. 服务bean中每个方法,只能接受数据bean做为参数,也只能返回数据bean做为结果 10.服务bean中每个方法,如果根据每个bean调用外部服务获取的数据一致,则相同的参数,必须返回相同的结果 11.服务bean中每个变量,不能是数据bean,只能是常量bean或者服务bean的引用, 12.服务bean中每个方法,不能依赖于成员变量, 没有上下文参数, 即此类对象性质等同于工具类助手类对象, 可实现单例模式

13.服务器集群=任意个应用服务器+外部服务器,应用服务器单点故障不会影响业务轮转

————- 第二阶段

  1. 由于数据bean是可序列化的,因此可以用固定的字符串ID来表示相应的数据bean
  2. 如果数据bean实现版本管理,可以通过 id.version 来确定唯一的数据
  3. 组合id.version与数据bean后产生的数据bean, 等同于常量bean
  4. 由于服务bean可实现单例,因此服务bean可以用固定的字符串name来确定唯一的服务bean
  5. 服务bean可以byName方式或byType注入, 再加上空参构造

————- 第三阶段

  1. 外部服务器上实现字符串ID获取最新版本的数据bean
  2. 本地服务器上实现字符串name获取唯一版本的服务bean
  3. 本地服务器上实现字符串name+方法名name获取服务bean指定的方法
  4. 由字符串name+方法名name确定唯一ID,来确定唯一方法
  5. 客户端传入字符串ID及方法ID,传至服务器,可返回唯一的字符串ID
  6. 字符串ID与方法ID,确定唯一的请求ID,可转换为字符串,也可逆转换
  7. 这里的唯一ID,都可以理解为常量bean

————- 第四阶段

  1. 本地服务器只处理两种逻辑 a) 传入唯一字符串ID,去外部服务器获取结果bean b) 根据字符串ID,方法ID,处理后返回结果bean
  2. 本地服务器,外地服务器都可理解为数据bean的转换器
  3. 唯一ID可用来标识 a) 常量bean,数据bean,服务bean,服务bean的每种请求
  4. 可使用缓冲服务器或代理服务器来缓冲唯一ID对应的各类数据

————- 第五阶段

  1. 使用URL规范来表示唯一请求ID,传至服务器,返回唯一的HTML代码
  2. HTTP协议中相同的URL,在服务端数据版本相同时,应该返回相同的HTML
  3. HTTP协议中与上下文参数相关的数据,应保存在HTTP.HEADER中,如处理服务器的ID,处理时间,处理版本,处理参数
  4. 由HTTP协议中的last-modified,etag来标识服务端的版本号,由max-age,Expire来标识版本的生命周期
  5. HTTP请求,对与相同的URL,相同版本,在生命周期内,返回唯一的HTML结果

————————————>

假设以下皆可实现

  1. 对数据bean操作自动保存至缓冲服务器, 根据缓冲策略刷新至数据库服务器
  2. 缓冲服务器选择性支持以下缓冲,单条缓冲,分页缓冲,TOP缓冲,分类缓冲,自增缓冲
  3. 数据bean是有版本的,服务bean,及服务bean中的每个方法也是有版本的

————————————>

高性能WEB服务

  1. 由代理服务器或者缓冲服务器缓冲HTTP结果,如果版本未更新,则返回304或者缓冲的内容
  2. 当缓冲生命周期结束后,由代理服务器去应用服务器验证每个数据bean及方法的版本,如果数据及方法的版本均未改变,则返回304或者缓冲的内容
  3. 如果数据bean或者方法bean更新,则由方法处理返回最新版本的结果bean,并通知代理服务器或者缓冲服务器更新版本

未完待续…

手机游戏 resco bubbles 个人记录 score

手机游戏resco bubbles

游戏共50关 个人记录如下

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

(2009-01-27)

1 1.5
2 2.6
3 3.3
4 5.9
5 10.2
6 3.2
7 6.0
8 0.6
9 14.3
10 15.5
11 1.6
12 14.4
13 1.3
14 3.8
15 4.4
16 3.5
17 1.2
18 24.3
19 28.1
20 24.7
21 5.9
22 15.2
23 16.9
24 11.5
25 28.9
26 21.6
27 15.2
28 12.2
29 5.4
30 7.3
31 1:38.2
32 12.8
33 50.0
34 12.1
35 8.2
36 2.3(bug??) --------此处是因软件bug而导致成绩出错
37 1:01.2
38 5.4
39 37.4
40 8.6
41 5.1
42 8.3
43 13.4
44 11.8
45 10.6
46 1.9
47 1:32.0
48 (未通关)
49 (未通关)
50 (未通关)

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

第二次更新成绩 (20090719)

11.5
22.6
33.3
44.8
58.9
62.8
74.8
80.5
914.1
1014.3
111.6
1211.1
131.3
141.9
154.2
163.5
171.1
1824.3
1927.6
2016.2
215.2
2210.0
2316.9
2411.2
2513.9
2621.6
2715.2
2812.2
295.4
307.3
311:38.2
3212.8
3350.0
3410.1
357.0
3616.9
3749.2
385.2
3937.4
408.6
415.1
428.3
4313.4
4411.8
4510.6
461.9
471:32.0
48--
49--
50--

利用bat反编译jar包生成源码jar包

(这篇文章是从blog.csdn.net/seavers导入的, 最新版本见: http://seavers.iteye.com/blog/1416013,  )

反编译所使用的工具是jad.exe,笔者的测试版本是1.5.8e,压缩与解压缩使用的是WinRAR

jad.exe 可反编译一个class文件为java文件,笔者的BAT可通过此工具将一个jar包反编译成一个完整的源码jar包,同时生成的目录也可以在eclipse中使用

jad.exe 官方网站 : http://www.kpdus.com/jad.html (英文的)

BAT脚本见后

安装方法如下:

复制粘贴后面的文本为一个BAT,然后与jad.exe放在同一个目录即可(WinRAR需正确安装)

使用方法如下: (有3种使用方法, 使用其中任意一种均可,结果是相同的)

1. 双击BAT,提示输入需反编译的jar包,请输入完整的jar路径

2. 直接将 jar 包拖放在bat上

3.右键点击jar包,选择打开方式,然后选择使用该BAT来执行

运行后的结果如下:

在jar包的同一目录下, 将会生成一个目录,一个jar,目录下有两个子目录,一个目录存放解压缩后的所有class,一个目录存放反编译后的java文件,jar包是用源码压缩生成的

几点说明:

1. 工具中使用的WinRAR是自动识别安装路径的,请正确安装WinRAR

2. 工具使用的jad.exe,须与BAT放在同一目录,或者放在PATH可搜索到的位置

3. jar包中非class文件,也会完整拷贝在源码目录下,方便生成源码工程

4. 生成的目录名与原 jar 包同名, 生成的源码 jar 包的文件名是在原名称中加入-src而生成, 如原 jar 包为 jdbc.jar, 则生成的目录名为 jdbc, 而生成的源码jar 包名则为 jdbc-src.jar

5. eclipse使用方法1, 将BAT生成的目录放在workspace中,然后创建同名工程

6. eclipse使用方法2,在 eclipse 中创建同名工程,使用src为源文件目录,bin为class文件目录,然后将BAT生成的目录拷贝在eclipse的workspace中

 

该BAT为 blog.csdn.net/seavers 原创, BAT源码仅供个人学习,使用,研究,未经本人同意,不可用于商业用途

 

 

BAT源码如下: (请直接拷贝在BAT文件中)

 

::作者:seavers
::
blog:blog.csdn.net/seavers(在此blog上首次发布该bat)
::
功能:反编译jar包,生成对应的源码jar包,详细说明方档请登陆我的blog


::打开/关闭命令行显示
@echoOFF

::::::::::::::::::::::::::::解析并设置变量::::::::::::::::::


::查找jad文件的路径,这里取的jad.exe,表示从PATH中查找,如果想手工指定,需在这里修改
setJAD_PATH=jad.exe

::设置解压出的class文件存放的位置(相对路径)
setCLASS_PATH=bin

::设置反编译后的java文件存放的位置(相对路径)
setJAVA_PATH=src

::检查JAD文件是否存在bat所在目录下,
ifexist"%~dp0jad.exe"setJAD_PATH=%~dp0jad.exe

::判断参数个数,如果没有文件参数,则报错,这里也可以使用%~f1,也可以用%1,没有关系,之后要去掉引号
if""%1""==""""(set/PJAR_PATH=请输入要反编译的JAR包的路径...)else(setJAR_PATH=%~f1)
if'%JAR_PATH:~0,1%%JAR_PATH:~0,1%'=='""'setJAR_PATH=%JAR_PATH:~1,-1%

::获取源代码存放的路径,这里取JAR包所在路径,然后去掉".jar"作为文件夹路径,这里的LOCATION不能带引号,因为下面还要追加字符)
if""%2""==""""(setLOCATION=%JAR_PATH:~0,-4%)else(setLOCATION=%~f2)

::::::::::::::::::::开始执行程序:::::::::::::::::::::::::::::::

::获取WinRAR.exe的路径,设置在临时变量rarpath中
for/f"usebackqdelims="%%iin(`ftypeWinRAR`)dosetRARPATH=%%i

::对rarpath进行解析,去掉前面7个节符,去掉后面5个字符,得到WinRAR执行路径
::
路径大致是这样的形式Winrar="C:/ProgramFiles/WinRAR/WinRAR.exe""%1"
setRAREXE=%RARPATH:~7,-5%

::调用WinRAR命令,解压文件到指定目录的bin目录下
%RAREXE%x"%JAR_PATH%""%LOCATION%/%CLASS_PATH%/"

::遍历整个bin目录,取所有class文件,调用jad.exe反编译出源码,非class的拷贝到src目录下
::
打开变量延迟功能
setlocalEnableDelayedExpansion
for/r"%LOCATION%/bin"%%iin(*.*)doif'%%~xi'=='.class'("%JAD_PATH%"-o-r-sjava-ff-b-nonlb-space-t-8-d"%LOCATION%/%JAVA_PATH%""%%~si")else(setTEMP_PATH=%%i&echof|xcopy"%%i""!TEMP_PATH:%LOCATION%/bin=%LOCATION%/src!")
endlocalEnableDelayedExpansion

::将产生的java文件压缩成源码文件
%RAREXE%a-ep1-r"%LOCATION%-src.zip""%LOCATION%/%JAVA_PATH%/*.*"


::::::::::::::::::程序结束,显示运行结果::::::::::::::::::::::
echo*********************************************
echo程序运行结束
echo解析的JAR包的路径为%JAR_PATH%
echo解压缩工具WinRAR.exe的路径为%RAREXE%
echo反编译工具JAD.exe的路径为%JAD_PATH%
echo解析后的文件的根路径为%LOCATION%
echo解析后的class文件存放在%LOCATION%/%CLASS_PATH%
echo解析后的java文件存放在%LOCATION%/%JAVA_PATH%
echo压缩后的java文件存放在%LOCATION%-src.zip
echo*********************************************
pause


 

 

 

 

 

 

 

 

c3p0.properties .vs. c3p0-config.xml

 

摘自c3p0.jar,方便查看

//c3p0.properties

#
#Thisfileisdetritusfromvarioustestingattempts
#thevaluesbelowmaychange
,andoftendonotrepresent
#reasonablevaluesfortheparameters.
#

#c3p0.testConnectionOnCheckout
=true
#c3p0.testConnectionOnCheckin
=true
#c3p0.minPoolSize
=3
#c3p0.maxPoolSize
=20
#c3p0.checkoutTimeout
=2000
#c3p0.idleConnectionTestPeriod
=5
#c3p0.maxConnectionAge
=10
#c3p0.maxIdleTime
=2
#c3p0.maxIdleTimeExcessConnections
=1
#c3p0.propertyCycle
=1
#c3p0.numHelperThreads
=10
#c3p0.unreturnedConnectionTimeout
=15
#c3p0.debugUnreturnedConnectionStackTraces
=true
#c3p0.maxStatements
=30
#c3p0.maxStatementsPerConnection
=5
#c3p0.maxAdministrativeTaskTime
=3
#c3p0.preferredTestQuery
=SELECT1
#c3p0.preferredTestQuery
=SELECTaFROMemptyyukyukWHEREa=5
#c3p0.preferredTestQuery
=SELECTaFROMtestpbdsWHEREa=5
#c3p0.usesTraditionalReflectiveProxies
=true
#c3p0.automaticTestTable
=PoopyTestTable
#c3p0.acquireIncrement
=4
#c3p0.acquireRetryDelay
=1000
#c3p0.acquireRetryAttempts
=60
#c3p0.connectionTesterClassName
=com.mchange.v2.c3p0.test.AlwaysFailConnectionTester
#c3p0.initialPoolSize
=10

c3p0.jdbcUrl
=jdbc:postgresql://localhost/c3p0-test
c3p0.driverClass
=org.postgresql.Driver
c3p0.user
=swaldman
c3p0.password
=test
#c3p0.user
=poop
#c3p0.password
=scoop

#com.mchange.v2.log.MLog
=com.mchange.v2.log.log4j.Log4jMLog
#com.mchange.v2.log.MLog
=com.mchange.v2.log.jdk14logging.Jdk14MLog
#com.mchange.v2.log.MLog
=com.mchange.v2.log.FallbackMLog
#com.mchange.v2.log.NameTransformer
=com.mchange.v2.log.PackageNames
#com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL
=ALL


#com.mchange.v2.c3p0.VMID
=poop

 

 

//c3p0-config.xml

<c3p0-config>
<default-config>
<!--<propertyname="automaticTestTable">con_test</property>-->
<!--<propertyname="checkoutTimeout">30000</property>-->
<!--<propertyname="idleConnectionTestPeriod">30</property>-->
<!--<propertyname="initialPoolSize">10</property>-->
<!--<propertyname="maxIdleTime">30</property>-->
<!--<propertyname="maxIdleTimeExcessConnections">10</property>-->
<!--<propertyname="maxConnectionAge">60</property>-->
<!--<propertyname="propertyCycle">1</property>-->
<!--<propertyname="maxPoolSize">25</property>-->
<!--<propertyname="minPoolSize">5</property>-->
<!--<propertyname="maxStatements">0</property>-->
<!--<propertyname="maxStatementsPerConnection">5</property>-->
<!--<propertyname="maxAdministrativeTaskTime">4</property>-->
<!--<propertyname="connectionCustomizerClassName">com.mchange.v2.c3p0.test.TestConnectionCustomizer</property>-->
<!--<propertyname="unreturnedConnectionTimeout">15</property>-->
<!--<propertyname="debugUnreturnedConnectionStackTraces">true</property>-->

<!--
<user-overridesuser="swaldman">
<propertyname="debugUnreturnedConnectionStackTraces">true</property>
</user-overrides>
-->

</default-config>

<!--
<named-configname="dumbTestConfig">
<propertyname="maxStatements">200</property>
<propertyname="jdbcUrl">jdbc:test</property>
<user-overridesuser="poop">
<propertyname="maxStatements">300</property>
</user-overrides>
</named-config>
-->

</c3p0-config>


 

 

//解析properties

 

/*
*Distributedaspartofc3p0v.0.9.1.2
*
*Copyright(C)2005MachineryForChange,Inc.
*
*Author:SteveWaldman<swaldman@mchange.com>
*
*Thislibraryisfreesoftware;youcanredistributeitand/ormodify
*itunderthetermsoftheGNULesserGeneralPublicLicenseversion2.1,as
*publishedbytheFreeSoftwareFoundation.
*
*Thissoftwareisdistributedinthehopethatitwillbeuseful,
*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
*GNULesserGeneralPublicLicenseformoredetails.
*
*YoushouldhavereceivedacopyoftheGNULesserGeneralPublicLicense
*alongwiththissoftware;seethefileLICENSE.Ifnot,writetothe
*FreeSoftwareFoundation,Inc.,59TemplePlace,Suite330,
*Boston,MA02111-1307,USA.
*/



packagecom.mchange.v2.c3p0.cfg;

importjava.io.*;
importjava.lang.reflect.*;
importjava.util.*;
importcom.mchange.v2.cfg.*;
importcom.mchange.v2.log.*;
importcom.mchange.v2.c3p0.impl.*;

publicfinalclassC3P0ConfigUtils
{
publicfinalstaticStringPROPS_FILE_RSRC_PATH="/c3p0.properties";
publicfinalstaticStringPROPS_FILE_PROP_PFX="c3p0.";
publicfinalstaticintPROPS_FILE_PROP_PFX_LEN=5;

privatefinalstaticString[]MISSPELL_PFXS={"/c3pO","/c3po","/C3P0","/C3PO"};

finalstaticMLoggerlogger=MLog.getLogger(C3P0ConfigUtils.class);

static
{
if(logger.isLoggable(MLevel.WARNING)&&C3P0ConfigUtils.class.getResource(PROPS_FILE_RSRC_PATH)==null)
{
//warnonamisspelling...itsanuglywaytodothis,butsinceresourcesarenotlistable...
for(inti=0;i<MISSPELL_PFXS.length;++i)
{
Stringtest
=MISSPELL_PFXS[i]+".properties";
if(C3P0ConfigUtils.class.getResource(MISSPELL_PFXS[i]+".properties")!=null)
{
logger.warning(
"POSSIBLYMISSPELLEDc3p0.propertiesCONFIGRESOURCEFOUND."+
"Pleaseensurethefilenameisc3p0.properties,alllowercase,"+
"withthedigit0(NOTtheletterO)inc3p0.Itshouldbeplaced"+
"inthetoplevelofc3p0'seffectiveclasspath.");
break;
}

}

}

}


publicstaticHashMapextractHardcodedC3P0Defaults(booleanstringify)
{
HashMapout
=newHashMap();

try
{
Method[]methods
=C3P0Defaults.class.getMethods();
for(inti=0,len=methods.length;i<len;++i)
{
Methodm
=methods[i];
intmods=m.getModifiers();
if((mods&Modifier.PUBLIC)!=0&&(mods&Modifier.STATIC)!=0&&m.getParameterTypes().length==0)
{
if(stringify)
{
Objectval
=m.invoke(null,null);
if(val!=null)
out.put(m.getName(),String.valueOf(val));
}

else
out.put(m.getName(),m.invoke(
null,null));
}

}

}

catch(Exceptione)
{
logger.log(MLevel.WARNING,
"Failedtoextracthardcodeddefaultconfig!?",e);
}


returnout;
}


publicstaticHashMapextractHardcodedC3P0Defaults()
{returnextractHardcodedC3P0Defaults(true);}

publicstaticHashMapextractC3P0PropertiesResources()
{
HashMapout
=newHashMap();

//Propertiesprops=findResourceProperties();
//props.putAll(findAllC3P0Properties());

Propertiesprops
=findAllC3P0Properties();
for(Iteratorii=props.keySet().iterator();ii.hasNext();)
{
Stringkey
=(String)ii.next();
Stringval
=(String)props.get(key);
if(key.startsWith(PROPS_FILE_PROP_PFX))
out.put(key.substring(PROPS_FILE_PROP_PFX_LEN).trim(),val.trim());
}


returnout;
}


publicstaticC3P0ConfigconfigFromFlatDefaults(HashMapflatDefaults)
{
NamedScopedefaults
=newNamedScope();
defaults.props.putAll(flatDefaults);

HashMapconfigNamesToNamedScopes
=newHashMap();

returnnewC3P0Config(defaults,configNamesToNamedScopes);
}


publicstaticStringgetPropFileConfigProperty(Stringprop)
{returnMultiPropertiesConfig.readVmConfig().getProperty(prop);}

privatestaticPropertiesfindResourceProperties()
{returnMultiPropertiesConfig.readVmConfig().getPropertiesByResourcePath(PROPS_FILE_RSRC_PATH);}

privatestaticPropertiesfindAllC3P0Properties()
{returnMultiPropertiesConfig.readVmConfig().getPropertiesByPrefix("c3p0");}

staticPropertiesfindAllC3P0SystemProperties()
{
Propertiesout
=newProperties();

SecurityExceptionsampleExc
=null;
try
{
for(Iteratorii=C3P0Defaults.getKnownProperties().iterator();ii.hasNext();)
{
Stringkey
=(String)ii.next();
StringprefixedKey
="c3p0."+key;
Stringvalue
=System.getProperty(prefixedKey);
if(value!=null&&value.trim().length()>0)
out.put(key,value);
}

}

catch(SecurityExceptione)
{sampleExc=e;}

returnout;
}


privateC3P0ConfigUtils()
{}
}


 

 

//解析xml

 

/*
*Distributedaspartofc3p0v.0.9.1.2
*
*Copyright(C)2005MachineryForChange,Inc.
*
*Author:SteveWaldman<swaldman@mchange.com>
*
*Thislibraryisfreesoftware;youcanredistributeitand/ormodify
*itunderthetermsoftheGNULesserGeneralPublicLicenseversion2.1,as
*publishedbytheFreeSoftwareFoundation.
*
*Thissoftwareisdistributedinthehopethatitwillbeuseful,
*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
*GNULesserGeneralPublicLicenseformoredetails.
*
*YoushouldhavereceivedacopyoftheGNULesserGeneralPublicLicense
*alongwiththissoftware;seethefileLICENSE.Ifnot,writetothe
*FreeSoftwareFoundation,Inc.,59TemplePlace,Suite330,
*Boston,MA02111-1307,USA.
*/



packagecom.mchange.v2.c3p0.cfg;

importjava.io.*;
importjava.util.*;
importjavax.xml.parsers.*;
importorg.w3c.dom.*;
importcom.mchange.v2.log.*;

importcom.mchange.v1.xml.DomParseUtils;

publicfinalclassC3P0ConfigXmlUtils
{
publicfinalstaticStringXML_CONFIG_RSRC_PATH="/c3p0-config.xml";

finalstaticMLoggerlogger=MLog.getLogger(C3P0ConfigXmlUtils.class);

publicfinalstaticStringLINESEP;

privatefinalstaticString[]MISSPELL_PFXS={"/c3p0","/c3pO","/c3po","/C3P0","/C3PO"};
privatefinalstaticchar[]MISSPELL_LINES={'-','_'};
privatefinalstaticString[]MISSPELL_CONFIG={"config","CONFIG"};
privatefinalstaticString[]MISSPELL_XML={"xml","XML"};

//itsanuglywaytodothis,butsinceresourcesarenotlistable...
//
//thisisonlyexecutedonce,anddoesabout40tests(fornow)
//shouldIcareaboutthecostininitializationtime?
//
//shouldonlyberunifwe'vecheckedforthecorrectfile,but
//notfoundit
privatefinalstaticvoidwarnCommonXmlConfigResourceMisspellings()
{
if(logger.isLoggable(MLevel.WARNING))
{
for(inta=0,lena=MISSPELL_PFXS.length;a<lena;++a)
{
StringBuffersb
=newStringBuffer(16);
sb.append(MISSPELL_PFXS[a]);
for(intb=0,lenb=MISSPELL_LINES.length;b<lenb;++b)
{
sb.append(MISSPELL_LINES*);
for(intc=0,lenc=MISSPELL_CONFIG.length;c<lenc;++c)
{
sb.append(MISSPELL_CONFIG[c]);
sb.append(
'.');
for(intd=0,lend=MISSPELL_XML.length;d<lend;++d)
{
sb.append(MISSPELL_XML[d]);
Stringtest
=sb.toString();
if(!test.equals(XML_CONFIG_RSRC_PATH))
{
ObjecthopefullyNull
=C3P0ConfigXmlUtils.class.getResource(test);
if(hopefullyNull!=null)
{
logger.warning(
"POSSIBLYMISSPELLEDc3p0-conf.xmlRESOURCEFOUND."+
"Pleaseensurethefilenameisc3p0-config.xml,alllowercase,"+
"withthedigit0(NOTtheletterO)inc3p0.Itshouldbeplaced"+
"inthetoplevelofc3p0'seffectiveclasspath.");
return;
}

}

}

}


}

}

}

}


static
{
Stringls;

try
{ls=System.getProperty("line.separator","");}
catch(Exceptione)
{ls="";}

LINESEP
=ls;

}


publicstaticC3P0ConfigextractXmlConfigFromDefaultResource()throwsException
{
InputStreamis
=null;

try
{
is
=C3P0ConfigUtils.class.getResourceAsStream(XML_CONFIG_RSRC_PATH);
if(is==null)
{
warnCommonXmlConfigResourceMisspellings();
returnnull;
}

else
returnextractXmlConfigFromInputStream(is);
}

finally
{
try{if(is!=null)is.close();}
catch(Exceptione)
{
if(logger.isLoggable(MLevel.FINE))
logger.log(MLevel.FINE,
"ExceptiononresourceInputStreamclose.",e);
}

}

}


publicstaticC3P0ConfigextractXmlConfigFromInputStream(InputStreamis)throwsException
{
DocumentBuilderFactoryfact
=DocumentBuilderFactory.newInstance();
DocumentBuilderdb
=fact.newDocumentBuilder();
Documentdoc
=db.parse(is);

returnextractConfigFromXmlDoc(doc);
}


publicstaticC3P0ConfigextractConfigFromXmlDoc(Documentdoc)throwsException
{
ElementdocElem
=doc.getDocumentElement();
if(docElem.getTagName().equals("c3p0-config"))
{
NamedScopedefaults;
HashMapconfigNamesToNamedScopes
=newHashMap();

ElementdefaultConfigElem
=DomParseUtils.uniqueChild(docElem,"default-config");
if(defaultConfigElem!=null)
defaults
=extractNamedScopeFromLevel(defaultConfigElem);
else
defaults
=newNamedScope();
NodeListnl
=DomParseUtils.immediateChildElementsByTagName(docElem,"named-config");
for(inti=0,len=nl.getLength();i<len;++i)
{
ElementnamedConfigElem
=(Element)nl.item(i);
StringconfigName
=namedConfigElem.getAttribute("name");
if(configName!=null&&configName.length()>0)
{
NamedScopenamedConfig
=extractNamedScopeFromLevel(namedConfigElem);
configNamesToNamedScopes.put(configName,namedConfig);
}

else
logger.warning(
"ConfigurationXMLcontainednamed-configelementwithoutnameattribute:"+namedConfigElem);
}

returnnewC3P0Config(defaults,configNamesToNamedScopes);
}

else
thrownewException("Rootelementofc3p0configxmlshouldbe'c3p0-config',not'"+docElem.getTagName()+"'.");
}


privatestaticNamedScopeextractNamedScopeFromLevel(Elementelem)
{
HashMapprops
=extractPropertiesFromLevel(elem);
HashMapuserNamesToOverrides
=newHashMap();

NodeListnl
=DomParseUtils.immediateChildElementsByTagName(elem,"user-overrides");
for(inti=0,len=nl.getLength();i<len;++i)
{
ElementperUserConfigElem
=(Element)nl.item(i);
StringuserName
=perUserConfigElem.getAttribute("user");
if(userName!=null&&userName.length()>0)
{
HashMapuserProps
=extractPropertiesFromLevel(perUserConfigElem);
userNamesToOverrides.put(userName,userProps);
}

else
logger.warning(
"ConfigurationXMLcontaineduser-overrideselementwithoutuserattribute:"+LINESEP+perUserConfigElem);
}


returnnewNamedScope(props,userNamesToOverrides);
}


privatestaticHashMapextractPropertiesFromLevel(Elementelem)
{
//System.err.println("extractPropertiesFromLevel()");

HashMapout
=newHashMap();

try
{
NodeListnl
=DomParseUtils.immediateChildElementsByTagName(elem,"property");
intlen=nl.getLength();
for(inti=0;i<len;++i)
{
ElementpropertyElem
=(Element)nl.item(i);
StringpropName
=propertyElem.getAttribute("name");
if(propName!=null&&propName.length()>0)
{
StringpropVal
=DomParseUtils.allTextFromElement(propertyElem,true);
out.put(propName,propVal);
//System.err.println(propName+"->"+propVal);
}

else
logger.warning(
"ConfigurationXMLcontainedpropertyelementwithoutnameattribute:"+LINESEP+propertyElem);
}

}

catch(Exceptione)
{
logger.log(MLevel.WARNING,
"AnexceptionoccurredwhilereadingconfigXML."+
"Someconfigurationinformationhasprobablybeenignored.",
e);
}


returnout;
}


privateC3P0ConfigXmlUtils()
{}
}


 

 

/*
*Distributedaspartofc3p0v.0.9.1.2
*
*Copyright(C)2005MachineryForChange,Inc.
*
*Author:SteveWaldman<swaldman@mchange.com>
*
*Thislibraryisfreesoftware;youcanredistributeitand/ormodify
*itunderthetermsoftheGNULesserGeneralPublicLicenseversion2.1,as
*publishedbytheFreeSoftwareFoundation.
*
*Thissoftwareisdistributedinthehopethatitwillbeuseful,
*butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof
*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe
*GNULesserGeneralPublicLicenseformoredetails.
*
*YoushouldhavereceivedacopyoftheGNULesserGeneralPublicLicense
*alongwiththissoftware;seethefileLICENSE.Ifnot,writetothe
*FreeSoftwareFoundation,Inc.,59TemplePlace,Suite330,
*Boston,MA02111-1307,USA.
*/



packagecom.mchange.v1.xml;

importjava.util.*;
importorg.xml.sax.*;
importorg.w3c.dom.*;
importcom.mchange.v1.util.DebugUtils;

publicfinalclassDomParseUtils
{
finalstaticbooleanDEBUG=true;

/**
*
@returnnullifchilddoesn'texist.
*/

publicstaticStringallTextFromUniqueChild(Elementelem,StringchildTagName)
throwsDOMException
{returnallTextFromUniqueChild(elem,childTagName,false);}

/**
*
@returnnullifchilddoesn'texist.
*/

publicstaticStringallTextFromUniqueChild(Elementelem,StringchildTagName,booleantrim)
throwsDOMException
{
ElementuniqueChild
=uniqueChildByTagName(elem,childTagName);
if(uniqueChild==null)
returnnull;
else
returnDomParseUtils.allTextFromElement(uniqueChild,trim);
}


publicstaticElementuniqueChild(Elementelem,StringchildTagName)throwsDOMException
{returnuniqueChildByTagName(elem,childTagName);}

/**
*
@deprecateduseuniqueChild(Elementelem,StringchildTagName)
*/

publicstaticElementuniqueChildByTagName(Elementelem,StringchildTagName)throwsDOMException
{
NodeListnl
=elem.getElementsByTagName(childTagName);
intlen=nl.getLength();
if(DEBUG)
DebugUtils.myAssert(len
<=1,
"Thereismorethanone("+len+")childwithtagname:"+
childTagName
+"!!!");
return(len==1?(Element)nl.item(0):null);
}


publicstaticStringallText(Elementelem)throwsDOMException
{returnallTextFromElement(elem);}

publicstaticStringallText(Elementelem,booleantrim)throwsDOMException
{returnallTextFromElement(elem,trim);}

/**@deprecateduseallText(Elementelem)*/
publicstaticStringallTextFromElement(Elementelem)throwsDOMException
{returnallTextFromElement(elem,false);}

/**@deprecateduseallText(Elementelem,booleantrim)*/
publicstaticStringallTextFromElement(Elementelem,booleantrim)throwsDOMException
{
StringBuffertextBuf
=newStringBuffer();
NodeListnl
=elem.getChildNodes();
for(intj=0,len=nl.getLength();j<len;++j)
{
Nodenode
=nl.item(j);
if(nodeinstanceofText)//includesTextandCDATA!
textBuf.append(node.getNodeValue());
}

Stringout
=textBuf.toString();
return(trim?out.trim():out);
}


publicstaticString[]allTextFromImmediateChildElements(Elementparent,StringtagName)
throwsDOMException
{returnallTextFromImmediateChildElements(parent,tagName,false);}

publicstaticString[]allTextFromImmediateChildElements(Elementparent,StringtagName,booleantrim)
throwsDOMException
{
NodeListnl
=immediateChildElementsByTagName(parent,tagName);
intlen=nl.getLength();
String[]out
=newString[len];
for(inti=0;i<len;++i)
out[i]
=allText((Element)nl.item(i),trim);
returnout;
}



publicstaticNodeListimmediateChildElementsByTagName(Elementparent,StringtagName)
throwsDOMException
{returngetImmediateChildElementsByTagName(parent,tagName);}

/**
*
@deprecateduseimmediateChildrenByTagName(Elementparent,StringtagName)
*/

publicstaticNodeListgetImmediateChildElementsByTagName(Elementparent,StringtagName)
throwsDOMException
{
finalListnodes=newArrayList();
for(Nodechild=parent.getFirstChild();child!=null;child=child.getNextSibling())
if(childinstanceofElement&&((Element)child).getTagName().equals(tagName))
nodes.add(child);
returnnewNodeList()
{
publicintgetLength()
{returnnodes.size();}

publicNodeitem(inti)
{return(Node)nodes.get(i);}
}
;
}


publicstaticStringallTextFromUniqueImmediateChild(Elementelem,StringchildTagName)
throwsDOMException
{
ElementuniqueChild
=uniqueImmediateChildByTagName(elem,childTagName);
if(uniqueChild==null)
returnnull;
returnDomParseUtils.allTextFromElement(uniqueChild);
}


publicstaticElementuniqueImmediateChild(Elementelem,StringchildTagName)
throwsDOMException
{returnuniqueImmediateChildByTagName(elem,childTagName);}

/**
*
@deprecateduseuniqueImmediateChild(Elementelem,StringchildTagName)
*/

publicstaticElementuniqueImmediateChildByTagName(Elementelem,StringchildTagName)
throwsDOMException
{
NodeListnl
=getImmediateChildElementsByTagName(elem,childTagName);
intlen=nl.getLength();
if(DEBUG)
DebugUtils.myAssert(len
<=1,
"Thereismorethanone("+len+")childwithtagname:"+
childTagName
+"!!!");
return(len==1?(Element)nl.item(0):null);
}


/**
*
@deprecateduseElement.getAttribute(Stringval)
*/

publicstaticStringattrValFromElement(Elementelement,StringattrName)
throwsDOMException
{
Attrattr
=element.getAttributeNode(attrName);
return(attr==null?null:attr.getValue());
}


privateDomParseUtils()
{}
}


 

 

 

 

 

 

缓冲区溢出漏洞

贴一小段自己写的小程序

//MS VC++ 6.0 Console lhj
#include <windows.h>

void main()
{
//保留原来的返回地址
DWORD *pBackAddress = (DWORD *)&pBackAddress + 2;
DWORD BackAddress = *pBackAddress;

//获取自己的执行代码地址
HMODULE hModule = LoadLibrary("User32.dll");
DWORD Address = (DWORD)GetProcAddress(hModule, "MessageBoxA");

//缓冲区溢出
DWORD Buffer[100];
Buffer[0] = 0x5050C033;// xoreax, eaxpush eaxpush eax
Buffer[1] = 0xE8905050;// pusheax pusheax
Buffer[2] = Address - (DWORD)&Buffer[3];// call MessageBoxA
Buffer[3] = 0xE9909090;// jmpBackAddress
Buffer[4] = BackAddress - (DWORD)&Buffer[5];

//更改返回地址
*pBackAddress = (DWORD)Buffer;

}

举例:

void MyRecv(char buffer)
{
char TempBuf[1024];
memset(TempBuf, 0, 1024);
int len = recv(TempBuf);
memcpy(buffer, TempBuf, len);
}

如果在我们的程序中调用过这样一段程序, 那么我们的程序将面临着溢出的危险!