成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP那些事兒

X_AirDu / 923人閱讀

摘要:封禁策略為一個(gè)自然分鐘內(nèi)請(qǐng)求簽到接口次則封禁該分鐘,如何操作設(shè)置兩個(gè)來(lái)支撐此問(wèn)題獲取封禁獲取次數(shù)只提供內(nèi)存,現(xiàn)在要做一個(gè)活動(dòng),參與活動(dòng)的用戶為,請(qǐng)問(wèn)如何設(shè)計(jì)可考慮用的和命令來(lái)實(shí)現(xiàn)此需求,對(duì)其進(jìn)行占位,并且各的占位才占有的空間,所有空間

1、封禁策略為一個(gè)自然分鐘內(nèi)請(qǐng)求簽到接口500次則封禁該IP10分鐘,如何操作?
get($bannedKey)) {
            return true;
        }
        
        //獲取次數(shù)key
        $ipNumKey = "redis_cache_num_". $ip
        $ipNum = $redis->incr($ipNumKey); 
        if ($ipNum >= 500) {
            $redis->setex($bannedKey,600);
            return false;
        }
        
        return true;
    }
?>
2、只提供10M內(nèi)存,現(xiàn)在要做一個(gè)活動(dòng),參與活動(dòng)的用戶userId為1~10000000,請(qǐng)問(wèn)如何設(shè)計(jì)?

可考慮用redis的setbit和getbit命令來(lái)實(shí)現(xiàn)此需求,對(duì)其userId進(jìn)行占位,并且8各userId的占位才占有1B的空間,所有10M空間足足有余

3、下面代碼的輸出值為?

如果不明白,則有直達(dá)地址:PHP引用那些事兒

4、實(shí)現(xiàn)一個(gè)base62_encode()和base62_decode()方法,要求base62_encode(1)=1,base62_encode(61)=z,base62_decode("z")=61;語(yǔ)言不限
= 0; $t--) {
            $a = floor($str / pow(62, $t));
            $out = $out . substr($this->string, $a, 1);
            $str = $str - ($a * pow(62, $t));
        }
        return $out;
    }
    
    public function base62_decode($str)
    {
        $out = 0;
        $len = strlen($str) - 1;
        for ($t = 0; $t <= $len; $t++) {
            $out = $out + strpos($this->string, substr($str, $t, 1)) * pow(62, $len - $t);
        }
        return substr(sprintf("%f", $out) , 0, -7);
    }
}

$object = new Base62();
echo $object->base62_encode(1) . "
"; echo $object->base62_encode(61) . "
"; echo $object->base62_decode("z") . "
"; ?>
5、PHP實(shí)現(xiàn)KMP算法

如果只知道PHP是拍簧片技術(shù),而不懂看毛片算法,就low爆了,KMP算法講解

";
        if ($par[$j] === $src[$i]) {
            $j++;
            $i++;
        } else {
            if ($j === 0 && $par[$j] != $src[$i]) {
                $i++;
            }
            $j = $K[$j - 1 >= 0 ? $j - 1 : 0];
        }
    }
    return false;
}

//測(cè)試數(shù)據(jù)
$src = "BBC ABCDAB ABCDABCDABDE";
$par = "ABCDABD";

// 匹配值
echo "匹配值:", implode(" ", KMP($par)), "
"; // 在給定的字符串中查找特定字符(串) echo KMPMatch($src, $par, true), "
";
6、實(shí)現(xiàn)中英文字符串翻轉(zhuǎn)的操作
" . mb_strrev($str1) . "
";
7、PHP實(shí)現(xiàn)相關(guān)查找算法
 $v) {
        if ($v == $val) {
            echo "順序查找成功,KEY=>" . $k;
            exit(0);
        }
    }
    echo "順序查找失敗!";
}

echo query_search(3);
//順序查找成功,KEY=>2

/**
 * 插入查找
 * 數(shù)組數(shù)據(jù)需要有序
**/
$i = 0;
function insertsearch($arr, $num)
{
    $count = count($arr);
    $lower = 0;
    $high = $count - 1;
    global $i;
    while ($lower <= $high) {
        $i++; //計(jì)數(shù)器
        if ($arr[$lower] == $num) {
            return $lower;
        }
        if ($arr[$high] == $num) {
            return $high;
        }
        
        $middle = intval($lower + ($num - $arr[$lower]) / ($arr[$high] - $arr[$lower]) * ($high - $lower));
        if ($num < $arr[$middle]) {
            $high = $middle - 1;
        } else if ($num > $arr[$middle]) {
            $lower = $middle + 1;
        } else {
            return $middle;
        }
    }
    
    return -1;
}

$arr = [0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99];
$pos = insertsearch($arr, 62);
echo $pos;//7
echo $i;//2 如果是折半查找的話i=3;
8、PHP實(shí)現(xiàn)相關(guān)排序算法
 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 6 [7] => 8 [8] => 9 )
9、PHP實(shí)現(xiàn)數(shù)獨(dú)求解問(wèn)題
clear();
        } else {
            $this->matrix = $arr;
        }
    }
    
    public function clear()
    {
        for ($i = 0; $i < 9; $i++) {
            for ($j = 0; $j < 9; $j++) {
                $this->matrix[$i][$j] = [];
                for ($k = 1; $k <= 9; $k++) {
                    $this->matrix[$i][$j][$k] = $k;
                }
            }
        }
    }
    
    public function setCell($row, $col, $value)
    {
        $this->matrix[$row][$col] = [$value => $value];
        //row
        for ($i = 0; $i < 9; $i++) {
            if ($i != $col) {
                if (!$this->removeValue($row, $i, $value)) {
                    return false;
                }
            }
        }
        //col
        for ($i = 0; $i < 9; $i++) {
            if ($i != $row) {
                if (!$this->removeValue($i, $col, $value)) {
                    return false;
                }
            }
        }
        //square
        $rs = intval($row / 3) * 3;
        $cs = intval($col / 3) * 3;
        for ($i = $rs; $i < $rs + 3; $i++) {
            for ($j = $cs; $j < $cs + 3; $j++) {
                if ($i != $row && $j != $col) {
                    if (!$this->removeValue($i, $j, $value)) return false;
                }
            }
        }
        return true;
    }
    
    public function removeValue($row, $col, $value)
    {
        $count = count($this->matrix[$row][$col]);
        if ($count == 1) {
            $ret = !isset($this->matrix[$row][$col][$value]);
            return $ret;
        }
        if (isset($this->matrix[$row][$col][$value])) {
            unset($this->matrix[$row][$col][$value]);
            if ($count - 1 == 1) {
                return $this->setCell($row, $col, current($this->matrix[$row][$col]));
            }
        }
        return true;
    }
    
    public function set($arr)
    {
        for ($i = 0; $i < 9; $i++) {
            for ($j = 0; $j < 9; $j++) {
                if ($arr[$i][$j] > 0) {
                    $this->setCell($i, $j, $arr[$i][$j]);
                }
            }
        }
    }
    
    public function dump()
    {
        for ($i = 0; $i < 9; $i++) {
            for ($j = 0; $j < 9; $j++) {
                $c = count($this->matrix[$i][$j]);
                if ($c == 1) {
                    echo " " . current($this->matrix[$i][$j]) . " ";
                } else {
                    echo "(" . $c . ")";
                }
            }
            echo "
"; } echo "
"; } public function dumpAll() { for ($i = 0; $i < 9; $i++) { for ($j = 0; $j < 9; $j++) { echo implode("", $this->matrix[$i][$j]) , " "; } echo "
"; } echo "
"; } public function calc($data) { $this->clear(); $this->set($data); $this->_calc(); $this->dump(); } public function _calc() { for ($i = 0; $i < 9; $i++) { for ($j = 0; $j < 9; $j++) { if (count($this->matrix[$i][$j]) == 1) { continue; } foreach ($this->matrix[$i][$j] as $v) { $flag = false; $t = new Sudoku($this->matrix); if (!$t->setCell($i, $j, $v)) { continue; } if (!$t->_calc()) { continue; } $this->matrix = $t->matrix; return true; } return false; } } return true; } } $sd = new ShuDu(); $sd->calc([ [0, 5, 0, 0, 0, 6, 0, 9, 0], [0, 4, 7, 0, 8, 2, 6, 0, 0], [0, 8, 0, 0, 0, 7, 0, 5, 2], [7, 0, 1, 0, 3, 4, 0, 0, 6], [0, 3, 0, 0, 2, 0, 0, 8, 0], [2, 0, 0, 0, 0, 1, 9, 0, 4], [4, 7, 0, 1, 0, 0, 0, 6, 0], [0, 0, 9, 4, 6, 0, 3, 7, 0], [0, 1, 0, 2, 0, 0, 0, 4, 0], ]);
10、PHP中的Trait特性

PHP是單繼承的語(yǔ)言,在PHP 5.4 Traits出現(xiàn)之前,PHP的類(lèi)無(wú)法同時(shí)從兩個(gè)基類(lèi)繼承屬性或方法。php的Traits和Go語(yǔ)言的組合功能類(lèi)似,通過(guò)在類(lèi)中使用use關(guān)鍵字聲明要組合的Trait名稱(chēng),而具體某個(gè)Trait的聲明使用trait關(guān)鍵詞,Trait不能直接實(shí)例化,下面有篇文章比較詳細(xì)的介紹了此功能,PHP-Trait特性詳解

11、深刻理解PHP中的淺復(fù)制和深復(fù)制
objB = new ObjB();
    }
    //只有實(shí)現(xiàn)了下面方法聚合類(lèi) 才能實(shí)現(xiàn)深復(fù)制
    /*function __clone() {
        $this->objB = clone $this->objB; 
    }*/
}

class ObjB
{
    public $num2 = 0;
}
//原型對(duì)象
$objA = new ObjA();
//復(fù)制對(duì)象(=復(fù)制引用)
$objA2 = $objA;
$objA2->num = 2;
//隨著$objA2->num的變化 $objA->num也變化了
print_r($objA->num . "
"); //結(jié)果為2 print_r($objA2->num . "
"); //結(jié)果為2 //復(fù)制對(duì)象(‘clone’關(guān)鍵字克?。?$objA3 = clone $objA; $objA3->num = 4; //隨著$objA3->num的變化 $objA->num沒(méi)有變化 print_r($objA->num . "
"); //結(jié)果為2 print_r($objA3->num . "
"); //結(jié)果為4 //但是clone的對(duì)象(是聚合類(lèi))中包含其他對(duì)象時(shí)所包含的對(duì)象(objB)復(fù)制的是引用 $objA3->objB->num2 = 7; print_r($objA3->objB->num2 . "
"); //結(jié)果是7 print_r($objA->objB->num2 . "
"); //結(jié)果是7

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25565.html

相關(guān)文章

  • PHP 閉包那些事兒

    摘要:注理論上講閉包和匿名函數(shù)是不同的概念,不過(guò)將其視作相同的概念。匿名函數(shù)可以從父作用域繼承變量,而這個(gè)父作用域是定義該閉包的函數(shù)不一定是調(diào)用它的函數(shù)。 匿名函數(shù) 匿名函數(shù),也叫閉包函數(shù),說(shuō)白了就是沒(méi)有名字的函數(shù),和一般函數(shù)結(jié)構(gòu)一樣,只是少了函數(shù)名以及最后需要加上分號(hào);。 注:理論上講閉包和匿名函數(shù)是不同的概念,不過(guò)PHP將其視作相同的概念。 $func = function() { ...

    winterdawn 評(píng)論0 收藏0
  • 【nginx】nginx 配置那些事兒

    摘要:是一款具有高負(fù)載能力的服務(wù)器,也是架構(gòu)的主要角色之一。多站點(diǎn)設(shè)置前面我們修改配置文件的代碼位置,都是在下的里。如果想項(xiàng)目和項(xiàng)目均適用端口,則需要利用做反向代理設(shè)置。 nginx 是一款具有高負(fù)載能力的 web 服務(wù)器,也是 LNMP 架構(gòu)的主要角色之一?,F(xiàn)在越來(lái)越多的開(kāi)發(fā)者選擇 nginx 作為 php 的好搭檔,替代 apache 的位置。下面我以 Mac 系統(tǒng)為例,介紹下 ngin...

    lunaticf 評(píng)論0 收藏0
  • 【nginx】nginx 配置那些事兒

    摘要:是一款具有高負(fù)載能力的服務(wù)器,也是架構(gòu)的主要角色之一。多站點(diǎn)設(shè)置前面我們修改配置文件的代碼位置,都是在下的里。如果想項(xiàng)目和項(xiàng)目均適用端口,則需要利用做反向代理設(shè)置。 nginx 是一款具有高負(fù)載能力的 web 服務(wù)器,也是 LNMP 架構(gòu)的主要角色之一?,F(xiàn)在越來(lái)越多的開(kāi)發(fā)者選擇 nginx 作為 php 的好搭檔,替代 apache 的位置。下面我以 Mac 系統(tǒng)為例,介紹下 ngin...

    PrototypeZ 評(píng)論0 收藏0
  • [聊一聊系列]聊一聊網(wǎng)頁(yè)的分段傳輸與渲染那些事兒

    摘要:歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面不僅僅是代碼這一節(jié),請(qǐng)跟隨筆者聊一聊,網(wǎng)頁(yè)的分段傳輸與渲染,用一些非常規(guī)手段優(yōu)化我們的網(wǎng)站響應(yīng)速度??梢蕴幚硗暌粔K就返回一塊,讓瀏覽器盡早的接收到,可以先行渲染。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/...

    thursday 評(píng)論0 收藏0
  • yii2的加密解密那些事兒

    摘要:我們做程序的時(shí)候,加密解密是繞不開(kāi)的話題,使用開(kāi)發(fā)應(yīng)用的時(shí)候,都內(nèi)置了哪些有關(guān)加密解密安全方便的支持那本文將為你揭曉。函數(shù)聲明為存在著第三個(gè)參數(shù),比如我們可以傳遞會(huì)員的等,這樣此信息將和一起作為加密解密的鑰匙。 我們做程序的時(shí)候,加密解密是繞不開(kāi)的話題,使用yii2開(kāi)發(fā)應(yīng)用的時(shí)候,都內(nèi)置了哪些有關(guān)加密解密(安全)方便的支持那?本文將為你揭曉。 相關(guān)環(huán)境 操作系統(tǒng)及IDE macOS ...

    dendoink 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<