摘要:封禁策略为一个自然分钟内请求签到接口次则封禁该分钟,如何操作设置两个来支撑此问题获取封禁获取次数只提供内存,现在要做一个活动,参与活动的用户为,请问如何设计可考虑用的和命令来实现此需求,对其进行占位,并且各的占位才占有的空间,所有空间
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) . "
";
echo $object->base62_encode(61) . "
";
echo $object->base62_decode("z") . "
";
?>
5、PHP实现KMP算法
如果只知道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)), "
";
// 在给定的字符串中查找特定字符(串)
echo KMPMatch($src, $par, true), "
";
6、实现中英文字符串翻转的操作
" . 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 "
";
}
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特性
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
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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 ...
阅读 2679·2021-11-23 10:09
阅读 3173·2021-10-12 10:11
阅读 2886·2021-09-29 09:35
阅读 1554·2019-08-30 15:53
阅读 2900·2019-08-30 11:15
阅读 3551·2019-08-29 13:01
阅读 2484·2019-08-28 18:15
阅读 3626·2019-08-26 12:13