邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

php关于猴子选大王的算法题
<?php
    
    /**
     *  $m 猴子总数
     *  $n 出局数
     */
    function king($m,$n){
        $arr = range(1, $m);
        $i = 0;
        while (count($arr)>1) {
            if(($i+1)%$n == 0){
                unset($arr[$i]);
            }else{
                array_push($arr, $arr[$i]);
                unset($arr[$i]);
            }
            $i++;
        }
        return reset($arr);
    }

    function king2($m,$n){
        $arr = range(1, $m);
        $unsetNum = 0;
        for($i=2;$i<= $m*$n;$i++){
            foreach ($arr as $key => $value) {
                $unsetNum++;
                if($unsetNum == $n){
                    unset($arr[$key]);
                    $unsetNum = 0;
                }
                if(count($arr) == 1){
                    return reset($arr);
                }
            }
        }
    }

    function ysf($m,$n){
        $num=0; 
        for($i=2; $i<=$m; $i++){
            $num=($num+$n)%$i; 
        }
        return $num+1; 
    }

    $res = king(5,3);
    var_dump($res);

    $res2 = king2(5,3);
    var_dump($res2);

    $res3 = ysf(5,3);
    var_dump($res3);

redis查看当前redis-server启动使用的配置文件

redis查看当前redis-server启动使用的配置文件


redis-cli info | grep config 

mongo提示Cannot natively represent the long 1476355233494 on this platform
今天用rockmongo打开一个集合的时候提示

Cannot natively represent the long 1476355233494 on this platform

解决办法

在index.php中加入
ini_set('mongo.long_as_object', 1);
php还原java中gzip压缩方法
有个需求,要把java代码里面的jzip压缩方法还原成php
java jzip压缩代码如下


 /*** 
     * 压缩GZip 
     *  
     * @param data 
     * @return 
     */  
    public static byte[] gZip(byte[] data) {  
        byte[] b = null;  
        try {  
            ByteArrayOutputStream bos = new ByteArrayOutputStream();  
            GZIPOutputStream gzip = new GZIPOutputStream(bos);  
            gzip.write(data);  
            gzip.finish();  
            gzip.close();  
            b = bos.toByteArray();  
            bos.close();  
        } catch (Exception ex) {  
            ex.printStackTrace();  
        }  
        return b;  
    }  



    php代码

     
class {

   /*
     * 把字符串进行gzip压缩,并转换成byte数组
     * @param $str 需要进行压缩的字符串
     * @param $bytes 目标byte数组
     */

   public static function myGzencode($str){

       $res = gzencode($str);
       $res = self::getBytes($res);
       $res[9] = 0; //这步完全是为了和java压缩后的头部保持一致,也许是个坑
       return $res;
   }

   /*
    * 转换一个String字符串为byte数组
    * @param $str 需要转换的字符串
    * @param $bytes 目标byte数组
    * @author Zikie
    */

   public static function getBytes($str) {

       $len = strlen($str);
       $bytes = array();
       for($i=0;$i<$len;$i++) {
           if(ord($str[$i]) >= 128){
               $byte = ord($str[$i]) - 256;
           }else{
               $byte = ord($str[$i]);
           }
           $bytes[] =  $byte ;
       }
       return $bytes;
   }  
    }
ps:https://tools.ietf.org/html/rfc1952#section-2.2

    同学给推荐了这边文章,如下内容 
0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
         1 - Amiga
         2 - VMS (or OpenVMS)
         3 - Unix
         4 - VM/CMS
         5 - Atari TOS
         6 - HPFS filesystem (OS/2, NT)
         7 - Macintosh
         8 - Z-System
         9 - CP/M
        10 - TOPS-20
        11 - NTFS filesystem (NT)
        12 - QDOS
        13 - Acorn RISCOS
       255 - unknown

    我压缩后转换成byte数组,第九位是11,java那边是0,可能我的文件系统是NTFS filesystem (NT),java可能是FAT filesystem (MS-DOS, OS/2, NT/Win32)


windows下把redis加入服务

加入服务,开机自启动
redis-server.exe --service-install redis.windows.conf

启动
redis-server.exe --service-start
停止
redis-server.exe --service-stop
卸载
redis-server.exe --service-uninstall

安装多个实例
redis-server.exe --service-install –service-name redisService1 –port 10001
redis-server.exe --service-start –service-name redisService1
redis-server.exe --service-install –service-name redisService2 –port 10002
redis-server.exe --service-start –service-name redisService2
redis-server.exe --service-install –service-name redisService3 –port 10003
redis-server.exe --service-start –service-name redisService3

了解 Linux中Buffer和Cache

Buffer和Cache的区别 buffer与cache操作的对象就不一样。

buffer(缓冲)是为了提高内存和硬盘(或其他I/O设备)之间的数据交换的速度而设计的。
 
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。

简单来说,buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的。 buffer是由各种进程分配的,被用在如输入队列等方面。一个简单的例子如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在buffer中保存。


cache(缓存)是为了提高cpu和内存之间的数据交换速度而设计的,也就是平常见到的一级缓存、二级缓存、三级缓存。 cpu在执行程序所用的指令和读数据都是针对内存的,也就是从内存中取得的。由于内存读写速度慢,为了提高cpu和内存之间数据交换的速度,在cpu和内存之间增加了cache,它的速度比内存快,但是造价高,又由于在cpu内不能集成太多集成电路,所以一般cache比较小,以后intel等公司为了进一步提高速度,又增加了二级cache,甚至三级cache,它是根据程序的局部性原理而设计的,就是cpu执行的指令和访问的数据往往在集中的某一块,所以把这块内容放入cache后,cpu就不用在访问内存了,这就提高了访问速度。当然若cache中没有cpu所需要的内容,还是要访问内存的。

cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成cache以方便下次被访问,这样可提高系统性能。
PHP不用第三变量交换2个变量的值
<?php
	
	$a = 'a';
	$b = 'b';
	//第一种方法 字符串截取
	$a .= $b;
	$b = substr($a,0,strlen($a)-strlen($b));
	$a = substr($a,strlen($a)-strlen($b));

	echo $a;
	echo "<br>";
	echo $b;
	echo "<br>";

	//第二种方法 字符串替换
	$a .=$b;
	$b = str_replace($b,"",$a);
	$a = str_replace($b,"",$a);
	echo $a;
	echo "<br>";
	echo $b;
	echo "<br>";

	//第三种方法 数组转换
	list($b,$a) = array($a,$b);
	echo $a;
	echo "<br>";
	echo $b;
	echo "<br>";

	//第四种方法 异或运算
	$a=$a^$b;
	$b=$b^$a;
	$a=$a^$b;
	echo $a;
	echo "<br>";
	echo $b;
mysql事务隔离级别
mysql事务隔离级别

1 READ UNCOMMITTED 未提交读
在此级别,事务的修改,即使没有提交,对其他事务也是可见的。事务可以读取未提交的数据,这也被称为脏读。

2 READ COMMITTED 提交读
大多数数据库系统的默认隔离级别是这个,但是mysql不是。此级别满足 隔离性的简单定义:一个事务开始时,只能看见已经提交的事务所做的修改。换句话说,一个事务从开始知道提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候会出现不可重复读,因为两次执行同样的查询,可能会得到不一样的结果。

3 REFEATABLE READ 可重复读
解决了脏读的问题。该级别保证了在同意事务众多次读取同样记录的结果时一致的。但是理论上,可重复读隔离级别还是无法解决另外一个幻读的问题。所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。此级别是mysql的默认事务隔离级别。

4 SERIALZABLE 可串行化
此级别是最高的隔离级别。它通过强制事务串行执行,避免了前面说的幻读的问题。简单来说,此级别会在读取的每一行数据都加上锁,所有可能导致大量的超时和锁争用的问题。只有在非常需要确保数据的一致性而且可以接受没有并发的情况下,才考虑用该级别。


优惠券
最新微语