php面试题
大约 2 分钟
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万的话,就不用单独去租服务器了
寻找怎样的团队成员
- 人品,态度要端正。
- 创造力,最好有自己的作品。
- 自学能力,对新事务的了解,其他语言的掌握情况。
- 代码规范,优雅的代码。
- 文档习惯,解决问题,问题总结。