2010年07月27日 下午 04:11 | 作者:hemon
- $array = array(1,2,3);
- foreach($array as $key => $value){
- $array[] = 1;
- }
- // JavaScript
- var array = [1,2,3];
- for(key in array){
- array.push(1);
- }
答案是3!PS: IE那个变态除外,IE会陷入无限循环!
无论在php,还是js中,使用foreach/forin在遍历一个(对象/数组)时,都是即时创建一个(对象/数组)的拷贝
所以:循环中对原遍历(对象/数组)的改变,不会影响循环次数
分类:未分类 | 没有评论
2010年07月26日 下午 27:14 | 作者:hemon
100%
if( true )
1/2
if( rand(0,1) === 0 )
1/3
if( rand(0,2) === 0 )
1/4
if( rand(0,3) === 0 )
1/x
if( rand(0,x) === 0 )
x%
if( rand(0,99) < x )
x‰
if( rand(0,999) < x )
x‱
if( rand(0,9999) < x )
- /**
- * 以$x/$y的概率返回true
- *
- * @param int $x
- * @param int $y
- * @return bool
- *
- * prob(1,2) = 1/2
- * prob(1,100) = 1/100
- *
- */
- function prob($x, $y){
- return ( mt_rand(0, $y-1) < $x );
- }
分类:未分类 | 没有评论
2010年07月22日 下午 32:24 | 作者:hemon
好书一本,作者提供免费电子版:
http://www.lixiaolai.com/index.php/archives/9456.html
分类:未分类 | 没有评论
2010年07月21日 下午 08:44 | 作者:hemon
1.能够启动的进程数,完全取决于内存大小
2.但是启动的进程到底有多少被执行,取决于cpu
如果php程序非常耗cpu,可能50个cgi进程就导致cpu占用100%,即使你打开再多的fastcgi进程,只是白费内存,而不会提高性能。
方法:
1.设置一个绝对大的进程数(内存要吃的消,一般一个php-cgi进程占4Mb),比如1024
2.运行压力测试,达到load>10,cpu占用100%,观察有多少进程正在运行(空闲的占用 0%,运行的就是>0%)。ps aux | grep ‘php-fpm’
3.ok,在那个正在运行的数量上,再加一定的空闲进程(比如30%)
分类:未分类 | 没有评论
2010年07月21日 下午 21:39 | 作者:hemon
- 一个页面处理慢,怎么解决?
基准测试1:测试一个空脚本 <?php phpinfo(); 得到一个基准qps,看是不是服务器本身有问题
XDEBUG,看看到底是哪里响应慢。
ps:基准测试2,新建一个php脚本,require基本的系统文件,ab一下,得到一个基准qps。
- 接上一个问题,请从系统的角度,全方位的考虑这个问题?
客户端:1.firebug,httpwatch得到一个准确的各个处理环节需要的时间(DNS,建立TCP,接收总耗时,渲染页面耗时),2.在客户端使用js发起向服务器的一个空页面,发起连接,看客户端真实延时多少
ps:服务端:网络延时/磁盘读写/内部DNS/缓存失效
- 一般会用php的什么扩展?
opcode的缓存扩展(ea,apc,xcahe),调试(xdebug)
ps:curl,mysql,pdo,ssh,……
- 缓存扩展遇到过什么问题没有?
ea会导致core dump
- 有没有跟踪一下core dump原因?
没,我知道ea有这个问题,我直接用xcache,避免这个问题。
- 有没有用过缓存扩展提供的共享缓存?
用过xcache,apc
- 之间有什么区别?
apc支持批量获取键get($array),xcache只支持一次请求单个键get($key)
- 共享缓存的优点,缺点?//ps:我拿这个与memcache比较
优点:无需建立tcp连接,无需启动服务
缺点:单机缓存,无法共享
- 假设一个memcache集群,其中一台挂了,缓存会不会失效?
物理上将,数据还是存在其他几台机器上的,但是由于memcache去中心化的取模算法,会导致客户端无法得到缓存所在的服务器,相当于失效;有一个改进的环形算法,可以让这个挂了机器,不影响其他正常机器的缓存。
http://blog.csdn.net/sparkliang/archive/2010/02/02/5279393.aspx
- 用什么web服务器,遇到什么问题没有?
nginx,没有。
- nginx一般配合fast-cgi运行,有什么问题,经验?
我使用php-fpm管理fast-cgi进程,fastcgi进程数的大小设置多少合适呢?
1.能够启动的进程数,完全取决于内存大小
2.但是启动的进程到底有多少被执行,取决于cpu
如果php程序非常耗cpu,可能50个cgi进程就导致cpu占用100%,即使你打开再多的fastcgi进程,只是白费内存,而不会提高性能。
- mysql喜欢用什么版本?
我喜欢用最新版本,因为最新版本的innodb引擎性能更高。
ps:如果用MyISAM,更低版本的性能更高,因为功能少,系统负担低……
- 在一张表的a,b字段上建一个复合索引,现在条件查询where b=1,会不会使用到索引?
不会。建立a+b的复合索引,可以理解为把a+b合并成一个字段再建立索引,索引都是从头建立的,现在用字段中的b查询,相当于like “%b”
分类:未分类 | 没有评论
2010年07月5日 下午 21:17 | 作者:hemon
江西电信资费陷阱,本人挨过刀的:
- 17909(漫游拨打当地电话是0.60元/分钟)
谎言:加拨“17909”,省内漫游拨打(不含港澳台)所有费用0.29元/分钟;
他妈:在漫游时则只能拨打漫游地以外的国内长途,否则提示空号!比如我南昌号,漫游到宜春,加拨17909打宜春的号码,提示空号,只能直接拨打漫游地号码,按标准资费(0.60元/分钟)收取。
- 3G标准资费(按时长计费0.10元/分钟)
谎言:有两个标准资费:时长(0.10元/分钟),流量(0.0005元/kb)计费;
他妈:如果你未办理任何套餐,或者已办理套餐但尚未生效(套餐都他妈下月一日生效,业务是24小时后生效),都按时长计费(0.10元/分钟),只要手机连上网就开始计费,不管你有没有流量。老子挂QQ,113分钟,产生657kb流量,花了11.3元。
- 变更套餐(只能在同品牌内向上升级)
比如我这个月办了46的商旅套餐,用的不爽,想换是吧?你只能选择在“商旅套餐”内的66,96,……向上,火箭升级。
- 11808(IP话费+市话费)
IP话费:6分钟内按照IP标准资费收取(0.30元/分钟),通话时长在45 分钟以内(1.99元),超出45分钟部分按照IP标准资费加收(0.30元/分钟);
市话费:0.10元/分钟。
6分钟以内,就是0.40元/分钟;就算你打满45分钟,折合人民币6.49元(4.5+1.99),享受最低资费:0.144元/分钟,真的狠便宜!
- CDMA信号(差)
经常他妈的断,家住25楼都要找信号,10分钟内必断;移动GSM信号很强,从来不断。
- 宽带绑定固话,外地身份证(交500元押金)
请妥善留存押金收据,一旦遗失,押金就没了!相当于你存了500元钱,非但没有利息,存折丢了,不挂失不补办!
- 协议期有多长(固话+手机e6-b套餐,捆绑18个月)
买东西还能7天无条件退换货,你上了电信的贼船,还能逃掉吗?宽带还能过户,手机就不知道行不行了……
可怜买了台CDMA的手机,CDMA网独此一家,网都没处转……
能不办电话就不办吧,他妈老老实实做个原始人,远离辐射困扰,珍爱生命,拒绝电信。
电信运营商都他妈黑心肝,啥时候开放民营,让国企见鬼去吧!
分类:未分类 | 评论(2)
2010年07月3日 下午 59:42 | 作者:hemon
在同一磁盘分区,剪切只是修改文件系统 目录结构 中存储的文件路径;复制是真正的read&write读取并写入数据。
文件系统实现:http://www.zjtcm.net/wljx/Computer/OS/2009/12.ppt
分类:未分类 | 没有评论
2010年06月30日 上午 39:27 | 作者:hemon
一般步骤:http://blog.csdn.net/yefanqiu/archive/2008/05/04/2382876.aspx
注意事项:http://www.diypda.com/viewthread.php?tid=21863
要点:
- 删除手机和电脑的配对关系;
- 由手机发起ActiveSync请求:附件-同步
- 手机和电脑必须使用USB同步过,否则手机同步软件只有帮助提示
- 菜单-通过蓝牙进行连接(提示没有合作关系,进入蓝牙设备)
- 添加新设备(找到你的电脑)
- 配对
- 选择服务(串口服务/activesync)
- 不要在蓝牙设备界面使用“连接”,会报错:“连接失败或密码不正确”
- 返回同步程序,执行:菜单-通过蓝牙进行连接
分类:未分类 | 没有评论
2010年06月7日 下午 53:00 | 作者:hemon
设计任务:
1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个QQ号码(假设此QQ号码在UNIT32 内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。
——————————————————————————————————
核心问题:如何统计10分钟之内投了5票?
首先:以分钟为键切分数据集,
然后:每个数据集内,以qq号码为键,vote次数为值
OK,已经成功转换为key-value方式存储,2000万的日投票,除以86400秒,并发231.48rps,使用memcache能够轻松胜任。
数据集ID:201006072134
【QQ号码:Vote次数】
201006072134 | 201006072135 | 201006072136
【12345:3】 | 【12345:3】 | 【12345:3】
【88888:2】 | 【88888:3】 | 【88888:3】
数据模型:
$data[ 201006072134时间分钟 ][ qq号码 ] = vote次数;
A.统计10分钟内投了多少票
$votes = 0;
for($i = 0; $i < 10; $i++ ){
$votes += $data[ $minute-$i ][ $qq ];
}
B.桶内投票数+1
$data[ $minute ][ $qq ]++;
C.过期统计数据,垃圾清理
unset($data[ $minute ]);
分类:未分类 | 评论(11)
2010年06月7日 下午 08:56 | 作者:hemon
编程任务:
1、 我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在 第几行第几个单词位置。听说你是个优秀的程序员,那么髟助我们完成这个不可能的任务吧。
要求如下:
1)/myworks /example/bbe.txt,98版本英文圣经一本
2)输入部分要求如下:php ./example.php [单词]
3)输出部分如下:[单词] 1,2 2,4 5,6 表示:此单词在1行2列(第二个单词),2行4列…
说明:
1)此文本 4MB之巨…
2)单词的含义:由英文字母(大小写),数字(0-9)组成的串
3)提供给你的机器OS为ubuntu 9.10,内存只有1G,而且,很不幸的,其中700M用来做了别的
4)上机考试不允许上网,但我装了man文档以及读取CHM以及PDF的 阅读器,在电脑的桌面的CHM文件夹中,有相应的PHP参考手册
5)算法复杂度要求不能大于O(N^2)(就是N的平方)
6)什 么?PHP低效且用起来不顺手,好的,你可以用别的语言来实现。但注意:提供给你的机器上只有python 2.4/perl 5.8/gcc[g++]
题目链接:http://www.xhttp.cn/2010/05/2
——————————————————————————————————————————————
1、使用ascii码,判断字符所在范围
2、只要扫描一遍字符即可,复杂度为O(N)
3、利用了php string{$i} 的特性,取字符串内任一字符
4、todo:改为fgetc版本,可以完全不需要使用以上php特性
5、字符串匹配算法:http://wendell07.blog.hexun.com/14112681_d.html,目前看来最快的方法:Sunday,由于本题是单词匹配,问题更简单,只要找到头尾……
- <?php
-
- $word = $argv[1];
- $lines = 0;
-
- $handle = @fopen("bbe.txt", "r");
- if ($handle) {
- while (!feof($handle)) {
- $line = fgets($handle, 4096);
- $local = local_word($line, $word);
- $lines++;
- if( !empty($local) ){
- echo "$lines,".implode(' ',$local)."\n";
- }
- }
- fclose($handle);
- }
-
- function local_word($line, $word){
- $local = array();
- $local_length = 1;
- $word_length = strlen($word);
-
- for($i = 0; ( $char = $line{$i} ) !== ''; $i++ ){
- // 单词最后一个字符必定不是符号,且必有一个符号结尾,此计为一个新词
- if( !is_symbel( $line{ $i-1 } ) && is_symbel($char) ){
- $local_length++;
- }
-
- if( $char === $word[0] && // 如果第一个字符相同
- is_symbel( $line{ $i-1 } ) && // 且为单词开始
- is_symbel( $line{ $i+$word_length }) // 单词结尾应该为符号
- ){
- // 进入验证单词模式,一个一个字符比对
- for($j = 1; ($w_char = $word{$j}) !== ''; $j++ ){
- // 遇到单词字符不匹配
- if( $w_char != $line{ $i+$j } ){
- $i += $j;
- break;
- }
- // 如果单词比对完全正确
- if( $j == ($word_length-1) ){
- //echo "$line_length, $word_length\n";
- $local[] = $local_length;
- }
- }
- }
- }
- return $local;
- }
-
- function is_symbel($char){
- $asc = ord($char);
- return !( (48 <= $asc && $asc <= 57) ||
- (65 <= $asc && $asc <= 90) ||
- (97 <= $asc && $asc <= 122) );
- }
附件:bbe.txt《圣经》
http://www.hemono.com/wp-content/uploads/2010/06/bbe.rar
分类:未分类 | 评论(8)