php面试题


优先级处理

echo 'Testing ' . 1 + 2 . '45'; // 245

// 在PHP中`+``-``.`优先级相同,则从左向右执行。
// 'Testing 1' + 2 . '45'
// 2 . '45'
// '245'

echo 'Testing ' . 1 * 2 . '45'; // Testing 245

// 在PHP中`*`优先级高于`.`,则先执行`*`操作,然后再从左向右执行。
// 'Testing 1' . 2 . '45'
// 'Testing 12' . '45'
// 'Testing 245'

变量作用域

$a = 20;
function myfunction($b)
{
    $a = 30; // 局部变量
    global $a, $c; // 全局变量(以引入点为准,所以$a=20,但不会执行$a=30)
    return $c = ($b + $a);
}
print myfunction(40) + $c;
// 结果: 120

$a = 20;
function myfunction2($b)
{
    global $a, $c; // 全局变量(以引入点为准,所以$a=20)
    $a = 30; // 此处对$a进行重新赋值,从而影响到全局变量
    return $c = ($b + $a);
}
print myfunction2(40) + $c;
// 结果: 140

冒泡排序算法

$temp = [1,3,2,4,7,5,6,9,8,0];

// 冒泡排序算法
function bubbleSort($temp)
{
    $total  = count($temp);

    for ($i=0; $i<$total-1; $i++)
    {
        for ($j=0; $j<$total - $i - 1; $j++)
        {
            if ($temp[$j] > $temp[$j+1])
            {
                $tmp = $temp[$j];
                $temp[$j] = $temp[$j+1];
                $temp[$j+1] = $tmp;
            }
        }
    }

    return $temp;
}

var_dump(bubbleSort($temp));

我们做的秒杀并发量就是十几万、下边的版本是十几万的:

1、专门对秒杀服务器  [ps:量大的话这么说,如果小的话就不用了 ]
2、生成静态页面。 [ ps:如果还很大的可以把这个文件放在 cdn上 ]
3、倒计时以及库存从服务端获取 [ 一段时间内只获取一次,倒计时结束之后会请求下服务端,是否已经开始 ]
4、把要秒杀的数据库存放到redis中   [ key value ] stock=10
5、设置一个redis队列   [ 使用list做队列 ] lpop rpush
6、用户在请求的时候,判断用户是否参与过秒杀,没有参加过把用户数据写入队列中,同时库存减1 ,参加过就提示已经参加过
     ps:这块用到了redid的原子性操作、以及事务 multi 和 watch
    redis乐观锁  cas  ====  就是设置之前判断下这个值有没有改变 
7、库存减0就不能进行秒杀
8、异步脚本处理队列数据 [ crontab + php文件 ]

如果你说是1-3万的话,就不用单独去租服务器了

寻找怎样的团队成员

  • 人品,态度要端正。
  • 创造力,最好有自己的作品。
  • 自学能力,对新事务的了解,其他语言的掌握情况。
  • 代码规范,优雅的代码。
  • 文档习惯,解决问题,问题总结。