摘要:封禁策略為一個自然分鐘內請求簽到接口次則封禁該分鐘,如何操作設置兩個來支撐此問題獲取封禁獲取次數只提供內存,現在要做一個活動,參與活動的用戶為,請問如何設計可考慮用的和命令來實現此需求,對其進行占位,并且各的占位才占有的空間,所有空間
1、封禁策略為一個自然分鐘內請求簽到接口500次則封禁該IP10分鐘,如何操作?
get($bannedKey)) { return true; } //獲取次數key $ipNumKey = "redis_cache_num_". $ip $ipNum = $redis->incr($ipNumKey); if ($ipNum >= 500) { $redis->setex($bannedKey,600); return false; } return true; } ?>2、只提供10M內存,現在要做一個活動,參與活動的用戶userId為1~10000000,請問如何設計?
3、下面代碼的輸出值為?可考慮用redis的setbit和getbit命令來實現此需求,對其userId進行占位,并且8各userId的占位才占有1B的空間,所有10M空間足足有余
如果不明白,則有直達地址:PHP引用那些事兒
4、實現一個base62_encode()和base62_decode()方法,要求base62_encode(1)=1,base62_encode(61)=z,base62_decode("z")=61;語言不限= 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) . "5、PHP實現KMP算法
"; echo $object->base62_encode(61) . "
"; echo $object->base62_decode("z") . "
"; ?>
如果只知道PHP是拍簧片技術,而不懂看毛片算法,就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; } //測試數據 $src = "BBC ABCDAB ABCDABCDABDE"; $par = "ABCDABD"; // 匹配值 echo "匹配值:", implode(" ", KMP($par)), "6、實現中英文字符串翻轉的操作
"; // 在給定的字符串中查找特定字符(串) echo KMPMatch($src, $par, true), "
";
" . mb_strrev($str1) . "7、PHP實現相關查找算法
";
$v) { if ($v == $val) { echo "順序查找成功,KEY=>" . $k; exit(0); } } echo "順序查找失敗!"; } echo query_search(3); //順序查找成功,KEY=>2 /** * 插入查找 * 數組數據需要有序 **/ $i = 0; function insertsearch($arr, $num) { $count = count($arr); $lower = 0; $high = $count - 1; global $i; while ($lower <= $high) { $i++; //計數器 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實現相關排序算法
1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 6 [7] => 8 [8] => 9 )9、PHP實現數獨求解問題
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 "10、PHP中的Trait特性
"; } 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], ]);
11、深刻理解PHP中的淺復制和深復制PHP是單繼承的語言,在PHP 5.4 Traits出現之前,PHP的類無法同時從兩個基類繼承屬性或方法。php的Traits和Go語言的組合功能類似,通過在類中使用use關鍵字聲明要組合的Trait名稱,而具體某個Trait的聲明使用trait關鍵詞,Trait不能直接實例化,下面有篇文章比較詳細的介紹了此功能,PHP-Trait特性詳解
objB = new ObjB(); } //只有實現了下面方法聚合類 才能實現深復制 /*function __clone() { $this->objB = clone $this->objB; }*/ } class ObjB { public $num2 = 0; } //原型對象 $objA = new ObjA(); //復制對象(=復制引用) $objA2 = $objA; $objA2->num = 2; //隨著$objA2->num的變化 $objA->num也變化了 print_r($objA->num . "
"); //結果為2 print_r($objA2->num . "
"); //結果為2 //復制對象(‘clone’關鍵字克隆) $objA3 = clone $objA; $objA3->num = 4; //隨著$objA3->num的變化 $objA->num沒有變化 print_r($objA->num . "
"); //結果為2 print_r($objA3->num . "
"); //結果為4 //但是clone的對象(是聚合類)中包含其他對象時所包含的對象(objB)復制的是引用 $objA3->objB->num2 = 7; print_r($objA3->objB->num2 . "
"); //結果是7 print_r($objA->objB->num2 . "
"); //結果是7
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25565.html
摘要:注理論上講閉包和匿名函數是不同的概念,不過將其視作相同的概念。匿名函數可以從父作用域繼承變量,而這個父作用域是定義該閉包的函數不一定是調用它的函數。 匿名函數 匿名函數,也叫閉包函數,說白了就是沒有名字的函數,和一般函數結構一樣,只是少了函數名以及最后需要加上分號;。 注:理論上講閉包和匿名函數是不同的概念,不過PHP將其視作相同的概念。 $func = function() { ...
摘要:是一款具有高負載能力的服務器,也是架構的主要角色之一。多站點設置前面我們修改配置文件的代碼位置,都是在下的里。如果想項目和項目均適用端口,則需要利用做反向代理設置。 nginx 是一款具有高負載能力的 web 服務器,也是 LNMP 架構的主要角色之一。現在越來越多的開發者選擇 nginx 作為 php 的好搭檔,替代 apache 的位置。下面我以 Mac 系統為例,介紹下 ngin...
摘要:是一款具有高負載能力的服務器,也是架構的主要角色之一。多站點設置前面我們修改配置文件的代碼位置,都是在下的里。如果想項目和項目均適用端口,則需要利用做反向代理設置。 nginx 是一款具有高負載能力的 web 服務器,也是 LNMP 架構的主要角色之一。現在越來越多的開發者選擇 nginx 作為 php 的好搭檔,替代 apache 的位置。下面我以 Mac 系統為例,介紹下 ngin...
摘要:歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面不僅僅是代碼這一節,請跟隨筆者聊一聊,網頁的分段傳輸與渲染,用一些非常規手段優化我們的網站響應速度。可以處理完一塊就返回一塊,讓瀏覽器盡早的接收到,可以先行渲染。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/...
摘要:我們做程序的時候,加密解密是繞不開的話題,使用開發應用的時候,都內置了哪些有關加密解密安全方便的支持那本文將為你揭曉。函數聲明為存在著第三個參數,比如我們可以傳遞會員的等,這樣此信息將和一起作為加密解密的鑰匙。 我們做程序的時候,加密解密是繞不開的話題,使用yii2開發應用的時候,都內置了哪些有關加密解密(安全)方便的支持那?本文將為你揭曉。 相關環境 操作系統及IDE macOS ...
閱讀 2306·2021-11-23 10:09
閱讀 2885·2021-10-12 10:11
閱讀 2594·2021-09-29 09:35
閱讀 1337·2019-08-30 15:53
閱讀 2261·2019-08-30 11:15
閱讀 2904·2019-08-29 13:01
閱讀 2290·2019-08-28 18:15
閱讀 3363·2019-08-26 12:13