月度归档:2013年02月

富兰克林的十三项美德修养

1 、节制。食不过饱,饮酒不醉。

2、 沉默。说话必须对别人或你自己有益;要避免无益的聊天。

3 、生活秩序。将每一样东西放在它们应该放的地方;每件日常事务应当有一定的时间。
4、 决心。做应该做的事情;决心要做的事应坚持不懈。
5、 俭朴。花钱必须于人于己有益;换言之,切忌浪费。
6 、勤勉。不浪费时间,只做那些有用的事情,戒掉一切不必要的行动。
7 、诚恳。不欺骗人;思想纯洁公正;说话也要如此。
8 、公正。不做害人的事情,不要忘记履行对人有益而且又是你应尽的义务。
9、 中庸适度。避免极端;要容忍别人对你应得的处罚。
10、 清洁。身体、衣服和住所力求清洁。
11 、镇静。不要因为小事或普通的、不可避免的事故而惊慌失措。
12 、贞节。除非为了健康或生育后代,不常进行房事,永远不要房事过度、伤害身体或损害你自己或他人的安宁或名誉。
13、 谦虚。仿效耶稣和苏格拉底。
个人非常喜欢的,值得思考和行为准则

php服务端全局预设变量$_SERVER注释记录集

服务器变量 $_SERVER 详解:

1、$_SESSION['PHP_SELF'] -- 获取当前正在执行脚本的文件名

 

2、$_SERVER['SERVER_PROTOCOL'] -- 请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。

 

3、$_SERVER['REQUEST_TIME'] -- 请求开始时的时间戳。从 PHP 5.1.0 起有效。和time函数效果一样。

 

4、$_SERVER['argv'] -- 传递给该脚本的参数。我试了下,get方法可以得到$_SERVER['argv'][0];post方法无法给他赋值。

 

5、$_SERVER['SERVER_NAME'] -- 返回当前主机名。

 

6、$_SERVER['SERVER_SOFTWARE'] -- 服务器标识的字串,在响应请求时的头信息中给出。 如Microsoft-IIS/6.0

 

7、$_SERVER['REQUEST_METHOD'] -- 访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。

 

8、$_SERVER['QUERY_STRING'] -- 查询(query)的字符串(URL 中第一个问号 ? 之后的内容)。

 

9、$_SERVER['DOCUMENT_ROOT'] -- 当前运行脚本所在的文档根目录。在服务器配置文件中定义。 如E:\server

 

10、$_SERVER['HTTP_ACCEPT'] -- 当前请求的 Accept: 头信息的内容。

 

11、$_SERVER['HTTP_ACCEPT_CHARSET'] -- 当前请求的 Accept-Charset: 头信息的内容。例如:“iso-8859-1,*,utf-8”。

 

12、$_SERVER['HTTP_ACCEPT_ENCODING'] -- 当前请求的 Accept-Encoding: 头信息的内容。例如:“gzip”。

 

13、$_SERVER['HTTP_ACCEPT_LANGUAGE'] -- 当前请求的 Accept-Language: 头信息的内容。例如:“en”。

 

14、$_SERVER['HTTP_CONNECTION'] -- 当前请求的 Connection: 头信息的内容。例如:“Keep-Alive”。

 

15、$_SERVER['HTTP_HOST'] -- 当前请求的 Host: 头信息的内容。

 

16、$_SERVER['HTTP_REFERER'] -- 链接到当前页面的前一页面的 URL 地址。

 

17、$_SERVER['HTTP_USER_AGENT'] -- 返回用户使用的浏览器信息。也可以使用 get_browser() 得到此信息。

 

18、$_SERVER['HTTPS'] -- 如果通过https访问,则被设为一个非空的值,否则返回off.

 

19、$_SERVER['REMOTE_ADDR'] -- 正在浏览当前页面用户的 IP 地址。

 

20、$_SERVER['REMOTE_HOST'] -- 正在浏览当前页面用户的主机名。反向域名解析基于该用户的 REMOTE_ADDR。如本地测试返回127.0.0.1

 

21、$_SERVER['REMOTE_PORT'] -- 用户连接到服务器时所使用的端口。我在本机测试没通过,不知道什么原因。

 

22、$_SERVER['SCRIPT_FILENAME'] -- 当前执行脚本的绝对路径名。如返回E:\server\index.php

 

23、$_SERVER['SERVER_ADMIN'] -- 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值

 

24、$_SERVER['SERVER_PORT'] -- 服务器所使用的端口。默认为“80”。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。

 

25、$_SERVER['SERVER_SIGNATURE'] -- 包含服务器版本和虚拟主机名的字符串。

 

26、$_SERVER['PATH_TRANSLATED'] -- 当前脚本所在文件系统(不是文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。 Apache 2 用 户可以使用 httpd.conf 中的 AcceptPathInfo On 来定义 PATH_INFO。

 

27、$_SERVER['SCRIPT_NAME'] -- 包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 包含当前文件的绝对路径和文件名(例如包含文件)。

 

28、$_SERVER['REQUEST_URI'] -- 访问此页面所需的 URI。例如,“/index.html”。

 

29、$_SERVER['PHP_AUTH_DIGEST'] -- 当作为 Apache 模块运行时,进行 HTTP Digest 认证的过程中,此变量被设置成客户端发送的“Authorization”HTTP 头内容(以便作进一步的认证操作)。

 

30、$_SERVER['PHP_AUTH_USER']-- 当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。

 

31、$_SERVER['PHP_AUTH_PW'] -- 当 PHP 运行在 Apache 或 IIS(PHP 5 是 ISAPI)模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。

 

32、$_SERVER['AUTH_TYPE']--当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。

 

PHP(authcode)加密解密 研究之一

<?php
//************************加密解密*************************/
/*
* $string: 明文 或 密文
* $operation:DECODE表示解密,其它表示加密
* $key: 密匙
* $expiry:密文有效期
* */
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0)
{
// 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙
$ckey_length = 4;

// 密匙
$key = md5($key ? $key : 'livcmsencryption ');
// 密匙a会参与加解密
$keya = md5(substr($key, 0, 16));
// 密匙b会用来做数据完整性验证
$keyb = md5(substr($key, 16, 16));
// 密匙c用于变化生成的密文
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
// 参与运算的密匙
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
// 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性
// 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确
$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
// 产生密匙簿
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
// 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
// 核心加解密部分
for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
// 从密匙簿得出密匙进行异或,再转成字符
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if($operation == 'DECODE') {
// substr($result, 0, 10) == 0 验证数据有效性
// substr($result, 0, 10) - time() > 0 验证数据有效性
// substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性
// 验证数据有效性,请看未加密明文的格式
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
return substr($result, 26);
} else {
return '';
}
} else {
// 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因
// 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码
return $keyc.str_replace('=', '', base64_encode($result));
}
}
//************************加密解密结束***********************/
?>

SQL语句优化技术分析

一、操作符优化

1、IN 操作符

用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:

ORACLE 试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用 IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。

推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。

2、NOT IN操作符

此操作是强列不推荐使用的,因为它不能应用表的索引。

推荐方案:用NOT EXISTS 方案代替

3、IS NULL 或IS NOT NULL操作(判断字段是否为空)

判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。

推荐方案:用其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。

4、> 及 < 操作符(大于或小于操作符)

大 于或小于操作符一般情况下是不用调整的,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A,30 万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A& gt;2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。

5、LIKE操作符

LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。

一 个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。

6、UNION操作符

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys
union
select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。

推荐方案:采用UNION ALL操作符替代UNION,因为UNION ALL操作只是简单的将两个结果合并后就返回。

select * from gc_dfys
union all
select * from ls_jg_dfys

二、SQL书写的影响

1、同一功能同一性能不同写法SQL的影响。

如一个SQL在A程序员写的为  Select * from zl_yhjbqk

B程序员写的为 Select * from dlyx.zl_yhjbqk(带表所有者的前缀)

C程序员写的为 Select * from DLYX.ZLYHJBQK(大写表名)

D程序员写的为 Select *  from DLYX.ZLYHJBQK(中间多了空格)

以 上四个SQL在ORACLE分析整理之后产生的结果及执行的时间是一样的,但是从ORACLE共享内存SGA的原理,可以得出ORACLE对每个SQL 都会对其进行一次分析,并且占用共享内存,如果将SQL的字符串及格式写得完全相同,则ORACLE只会分析一次,共享内存也只会留下一次的分析结果,这 不仅可以减少分析SQL的时间,而且可以减少共享内存重复的信息,ORACLE也可以准确统计SQL的执行频率。

2、WHERE后面的条件顺序影响

WHERE子句后面的条件顺序对大数据量表的查询会产生直接的影响。如:
Select * from zl_yhjbqk where dy_dj = '1KV以下' and xh_bz=1
Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1KV以下'
以 上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的时候99%条记录都进行dy_dj及xh_bz的 比较,而在进行第二条SQL的时候0.5%条记录都进行dy_dj及xh_bz的比较,以此可以得出第二条SQL的CPU占用率明显比第一条低。

3、查询表顺序的影响

在 FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下,ORACLE会按表出现的顺序进行链接, 由此可见表的顺序不对时会产生十分耗服物器资源的数据交叉。(注:如果对表进行了统计分析,ORACLE会自动先进小表的链接,再进行大表的链接)

三、SQL语句索引的利用

1、操作符优化(同上)

2、对条件字段的一些优化

采用函数处理的字段不能利用索引,如:

substr(hbs_bh,1,4)=’5400’,优化处理:hbs_bh like ‘5400%’

trunc(sk_rq)=trunc(sysdate), 优化处理:sk_rq>=trunc(sysdate) and sk_rq<trunc(sysdate+1)

进行了显式或隐式的运算的字段不能进行索引,如:ss_df+20>50,优化处理:ss_df>30

‘X’ || hbs_bh>’X5400021452’,优化处理:hbs_bh>’5400021542’

sk_rq+5=sysdate,优化处理:sk_rq=sysdate-5

hbs_bh=5401002554,优化处理:hbs_bh=’ 5401002554’,注:此条件对hbs_bh 进行隐式的to_number转换,因为hbs_bh字段是字符型。

条件内包括了多个本表的字段运算时不能进行索引,如:ys_df>cx_df,无法进行优化
qc_bh || kh_bh=’5400250000’,优化处理:qc_bh=’5400’ and kh_bh=’250000’

四、其他

ORACLE 的提示功能是比较强的功能,也是比较复杂的应用,并且提示只是给ORACLE执行的一个建议,有时如果出于成本方面的考虑ORACLE也可能不会按提示进 行。根据实践应用,一般不建议开发人员应用ORACLE提示,因为各个数据库及服务器性能情况不一样,很可能一个地方性能提升了,但另一个地方却下降 了,ORACLE在SQL执行分析方面已经比较成熟,如果分析执行的路径不对首先应在数据库结构(主要是索引)、服务器当前性能(共享内存、磁盘文件碎 片)、数据库对象(表、索引)统计信息是否正确这几方面分析。

摩根大通2013年互联网投资指南

互联网是一个不断创新和迅速变化的行业,2013年宏观经济环境的好转将在互联网行业催生更多创新。2012年,中国的移动互联网积累 了更多用户,2013年依然是投资热点。新的移动互联网生态系统建立在电子商务、本地化和社会化的基础上,它将为创业者和早期投资者带来众多新机会。此 外,广告、网络游戏和电子商务领域也将产生更多机会。我们整理了来自摩根大通的互联网行业研究报告《Nothing But Net - Asia:2013 Internet Investment Guide》,作为2013年的互联网投资指南。

广告市场将得益于宏观经济发展
2012年中国的广告支出有所减弱,2013年,该行业的收益预计会有所上升。

2012年,由于宏观经济发展减速,广告支出也随之暗淡。加之中共领导层换届的因素,导致2012年度,无论是企业还是政府对于费用支出都格外谨 慎。不仅如此,2012年下半年,由于中日关系紧张,也导致了和日本相关公司的广告支出下滑,涉及行业包括汽车、化妆品、以及其他生活消费品。

但从2012年11月开始,中国宏观经济开始复苏,无论是工业生产,还是其他经济指标都有所改善。此外,2012年12月,日本汽车的销量也持续增长。

从以往的周期来看,广告支出周期一般会晚于宏观经济周期约6个月时间。如果按照历史的轨迹,起始于2012年11月份的宏观经济上行趋势,将会在6 个月后触发广告支出的增长。如果在接下来的几个月内没有大规模特殊事件发生,广告支出将会在2013年5到6月份出现复苏的迹象。

来自移动端的收入开始增长

由于移动设备大规模的应用于人们的日常生活,广告商也开始更加关注这一领域。我们预测到2013年底,中国的智能手机用户量将达到4亿,而在 2012年底,这一数字是2亿。这种指数性的增长也吸引了广告商在2013年加大对这一领域的投资。如果把4亿移动用户量这个数字作为一个参考,那么移动 设备将成为继电视和互联网之后,最大的传媒广告载体。我们希望2013年能够成为移动广告业务的关键一年,当然,这需要全体广告商的高度重视。

我们认为,基于移动设备的视频和搜索将在今年获得较大规模的收益。由于视频和搜索几乎能便捷地应用于所有的移动设备,这两项服务中的广告格式无需做 任何改变。广告公司还可以针对不同类型的设备,定义不同的广告目标受众群体,比如,iPhone和iPad用户通常是高端目标客户。

除了基于视频和搜索的广告,其他移动广告形式,比如app应用内置广告,社会化广告等,这些广告的效果有待进一步检验。由于手机显示屏大小的限制, 以及移动设备的有限存储容量,如果还是将传统网幅广告简单地放置在移动浏览器或者移动app应用上,无论是用户体验还是盈利效果,都不容乐观。不仅如此, 由于前几年中国的广告商,以及代理商对于移动广告领域并没有太多关注,因此当涉足这一领域时,他们需要进行更多的试验和优化工作。广告商的当务之急之一, 是创建优化的移动端网站,提供更好的用户体验。上述这些移动广告形式,有望在2014、15年见到显著发展。

我们认为,中国将在2014年出现更大规模的移动互联网机遇,而前提则是4G LTE网络。在中国拥有最多数量的移动用户的中国移动公司,由于当前的TD-SCDMA技术服务质量较差,并没有大力推广移动互联网业务。我们认为,中国 移动只有在推出4G LTE服务之后,才会大力推动移动互联网业务,从而进一步提升中国移动互联网的建设。

游戏市场仍然充满财富机遇

我们认为2013年的在线游戏市场依旧能够稳定保持约20%的增长速度。在2013年下半年,将会有一批网游推出,比如灵魂PK(Blade and Soul)、使命召唤(Call of Duty Online)、龙之剑(Dragon Sword)、以及激战2(Guild War2)。在线游戏可能在2013年下半年会出现大规模的收入增长。

2013年,由于智能手机和平板电脑使用量的增长,游戏开发能力的提高,移动游戏和移动社交网络的整合,移动游戏将是增长最迅速的领域。而大型多人在线角色扮演游戏(MMORPG)则很可能仅获得个位数的增长。
电子商务:电商巨头之间的竞争
由于经济放缓及投资环境不佳,在2012年,很多小型电商要么被收购,要么关门。我们注意到,很多团购公司纷纷合并,垂直电商则被大型电商平台收购。

我们认为,2013年,电商行业依旧竞争激烈,特别是几家B2C电商巨头之间的竞争。这很可能导致它们进一步收购小型电商。因此,小型电商将会面临更大的压力。2013年,我们期待电商领域出现更多的资本市场运作。

 

本文来源:http://www.kuailiyu.com/article/1488.html