如下一个文件a.txt,需要把括号中的第三列数字算术上加1,并且实现文件的原地替换,类似sed -i的选项。

setbusinesstartpos(0, 0, 1)
setbusinesstartpos(1, 1, 2)

利用perl的正则表达式-e选项实现算术运算,-i来进行原地替换,如下命令

perl -pi -e ’s/startpos\((\d), (\d), (\d)\)/”startpos\(” .$1. “, ” .$2. “, ” .($3+1). “\)”/ge’ a.txt

一个数组中的元素被分为low, medium, high三类,实现一个排序算法,将该数组按照不同的类别进行排序。规则为low < medium < high.

Example:

Input:

The input array is ['g', 'n', 'e', 'c', 't', 'z', 'o', 'f'], and the elment sorted into 3 categories as below:

low: a-h
med: i-p
high: q-z

Output:

['c', 'e', 'g', 'f', 'n', 'o', 'z', 't']

function provided listed below, and its algorithm complexityis O(n).

bool islow(char c);
bool ismed(char c);
bool ishigh(char c);

Resolution:

You can sort any array with famous sorting algorithm, like bubblesort, insertsort, quicksort and etc. However, any sorting algorithm,  based on comparation of element, can’t do better than O(nlogn) without extra memory.

The element in the array has partitioned into 3 categories, which means this array only have three different element. Therefore, You do not need to care about the ranking of element in same categories.  So, Sorting the array could use 2 partition algorithm in quicksort. First, select an element in medium category as pivot, after partition, the left side of element in low category, and the right side is mixer of medium & high. Then, select a high one, partition the latter part of array. You will get the result.  and the complexity of algorithm is O(n).

Code:

阅读全文…

修改FLEA.php的510行开始的getCache,writeCache,purgeCache一共3个函数,使用memcache库。

不过好像这样对于我的wb的优化感觉不大,还是仔细考虑,自己在程序逻辑上查询量大、更新少的需要的地方添加memcache比较重要。话说查询最多的可能就是Tweets了,可是实时变化。。唉。。。

memcached的使用很方便,但是原理很牛逼,推荐看mixi.jp人写的东西

http://tech.idv2.com/2008/07/10/memcached-001/

 function getCache($cacheId, $time = 900, $timeIsLifetime = true, $cacheIdIsFilename = false)
 {
 $memcache_obj = new Memcache;
 $memcache_obj->connect('localhost', 11211);
 $data = $memcache_obj->get($cacheId);
 if(!$data) return false;

 return $data !== false ? unserialize($data) : false;
 }

 function writeCache($cacheId, $data, $cacheIdIsFilename = false)
 {
 $data = serialize($data);

 $memcache_obj = new Memcache;
 $memcache_obj->connect('localhost', 11211);
 return $memcache_obj->set($data, $cacheId, MEMCACHE_COMPRESSED, 900);

 }

 function purgeCache($cacheId, $cacheIdIsFilename = false)
 {
 $memcache_obj = new Memcache;
 $memcache_obj->connect('localhost', 11211);
 return $memcache_obj->delete($cacheId);
 }

UNP第三十章。

a) 迭代型服务器(-)

已经不具备广泛实用性,仅在各个范式的比较中起基准作用

b) 并发性服务器(子进程)

主程序进行accept等待,为每一个客户fork一个子线程进行处理。

客户数目的限制是操作系统对运行服务器程序的用户ID能同时拥有子进程数的限制。面对当前的web站点每天上百万的请求,采用多主机平摊负载。(TCPv3讨论采用DNS轮询策略)。

性能方面,由于现场fork的开销导致性能较为低下。

c) 预先派生子进程(进程池)

必须预估会有多少并发客户访问,多余的会被忽略,因此当剩余空闲进程较多时要收回,较少时要额外分配,代价过高。

i. 子进程分别accept并不进行上锁保护:

预先派生进程池,当来客户连接时由子进程进行竞争,会引起”accept惊群现象,即所有阻塞在accept的子进程都会被唤醒来竞争,但只有一个进程会返回并取得连接,其他子进程则继续阻塞等待,这种太多的子进程被唤醒会导致性能受损。

Btw:让子进程在accept(实体)上竞争的效果要远好于select上,在select上会引发select冲突。

ii. 子进程分别accept进行上锁保护

此种方式让所有进程阻塞在锁的获取而不是accept套接口上,这样就会避免当连接到来时的accept的惊群作用。

上锁方式有两种,使用文件上锁,利用fcntl函数(SETLKGETLK),另外一种采用线程上锁,需要将pthread_mutex_tmmap映射到共享的内存区,然后设置pthread_mutexattr_tPTHREAD_PROCESS_SHARED即可。后者比较方便并且不涉及文件操作,性能上会提升不少。

iii. 主线程等待并进行描述字分配。

这种技术导致父进程必须跟踪子进程的状态并采用unix域或者pipe进行描述符传送,UNP上采用socketpair()函数。如果为了使得各个子进程处理平衡,还得涉及算法平衡各个子进程的负载均衡,但是通常这样做没有必要,对于多个空闲子进程而言,谁处理连接并没有效率影响。

并且描述符的传递的效率要远低于采用锁的机制,除了父进程传递描述字,子进程处理完后还得传递状态。

d) 并发性服务器(线程)

一般线程操作会比进程更快一点,因此在支持线程的系统上采用线程是较好的方式。简单的现场生成新线程的范式也要快于进程池的版本(SolarisDigital Unix上,根据UNP的描述)

e) 并发性服务器(线程池)

i. 每个线程各自accept

同样预先分配线程也会快于现场生成新线程,并且使用互斥锁将线程阻塞在锁上,此种方式的各个线程的负载均衡性是由线程调度算法导致,会在互斥锁上轮询所有线程。

此种方式的速度是所有范式中最快的。

ii. 主线程accept并分配描述符字给子线程

实际上采用的是一个描述符字数组,主线程accept一个就往队列中添加一个,子线程取出一个就从队列中删除一个。对队列的添加和删除操作进行加锁保护。

速度慢于上面各线程分别accept的版本。

就是短信的时间是接受的时间而不是发送的时间,本来问题不大,主要是关机,断点或者网络延迟时候收到短信却不知道对方是什么时候发的,苦恼啊….

貌似是所有的symbian s60v3rd都有的问题,但好像不确定,论坛上同一机型有些人有问题有些人没有,即使是同一版本的系统。

n78 欧水, 12.046版,谁有解决方案给来一个。

同时开着两个网络电视半夜一个人摸黑安静的看C组最后的戏剧,意大利还是没让我失望,顺利的2-0拿下了法国,赢得了等待宣判的资格。而范巴斯滕也维护了足球比赛的公平性,虽然换上大部分替补是正常的战术安排,但是队员们依然态度端正,给了意大利一个好的宣判,也算对得起自己的老队友多纳多尼。呵呵,自己大学半夜爬起来看的几场意大利的比赛都没让我失望啊,06年对德国半决赛是自己看的最紧张的,118分钟的格罗索和120分钟的皮埃罗,决赛对法国都没那么紧张,今天意大利又被从死亡边缘拉了回来,天助自助者,恩,没白赢……

下周答辩,完事……

感冒还在祸害中,教研室这么热的天肯定开着空调,所以只能窝在宿舍慢慢静养。早上起来无事,卡巴key提示快到期了,就在百度上搜索有没有新的key可以使用到09或者10年这样的,结果被某位兄弟的blog骗进去,下载下来,解压,于是………………中毒,哎,世风日下啊~~~

这下一早上可有事了,具体过程不表,无非又是一些手动杀毒的无趣过程,高中很多同学和朋友总是经常说自己中毒了咋办,这里简述下我手动杀毒的基本步骤吧(先把显示隐藏文件设置了)。

1.首先检查任务管理器是否有异常进程,这个是最容易发现病毒的(当然这个也要求大家的系统比较干净,你对任务管理器的常用进程比较熟悉,不然你也不知道哪个是病毒,然后用那个进程名去baidu吧)

2.常见的病毒的存放位置就是C:\Windows 和 C:\Windows\system32,在这里对文件按照修改时间排序,寻找自己大概中病毒时间创建的文件。

3.查看msconfig和services的项目,看是否有异常,当然这个也需要你的自启动项比较干净,像我的台式机在msconfig中就没有一个启动项,而services里面就只最基本的Microsoft的服务和一个kav服务,而本本就稍微多一些笔记本自带的程序。

以上基本都是查找、发现病毒的步骤,找到了这些文件,就需要删除他们,删除的步骤也是多试试,先直接删,一般exe都能删掉,比较可恶的是dll,这里推荐一个工具”unlocker”,删不了去安全模式下删除,当然能利用杀毒软件删的先用杀毒软件删也行,不过我一中毒就是卡巴用不成,汗。。。

反正找到了东西,删么,总是有办法,我一般就两个工具,一个unlocker,一个木马克星,exe和dll文件删除完了就再删除regedit里面的项目就好了。最后完成了再用杀毒软件和木马查杀工具确认下windows/和windows/system32目录下是否干净即可。

我一般就这么干了,剩下的就是多配合采用上面搜索出来的信息,以及症状描述进行百度了,然后加上别人的经验和自己的经验搞定它。

这里说点题外话(不限于杀毒),要搜索的话要注意自己搜索的关键字,不要搜“XX软件打不开了”,“为什么会怎么怎么样”之类的,这类搜索大多数都没什么意义,症状的原因有千万,你不提供一点有效信息谁知道你具体是什么原因,所以比如说“我装(删)了XX之后,怎么会这样”,当然能提供错误日志是最好的。这个跟提问别人和网上发帖求助一样,要尽可能给一些你具体的信息,大家才可能帮你,如果有时间建议去看看<提问的智慧>这篇文章,很好很强大,要不然现在有好多文章也介绍如何“善用搜索引擎”。如果你不能做到这样的话,那最好把机器报到你求助的人的面前吧。

如果有性别的话,递归一定是个男人。
把所有的困难、麻烦都一人顶着。无怨无悔,表面上却显得轻轻松松的。

它用栈把复杂的过程都给掩盖起来,
展现给大家确是简单的描述。

太赞递归啦!

后续:这个男人背后的女人是。。。

是栈,因为她默默的打点背后的一切,英雄背后的英雄