PHP 题目
- PHP 写冒泡排序
答案
$arr = [3,5,7,6,8,4,9,1,2];
$sorted_arr = bubble_sort($arr);
echo 'Sorted Array: '.implode(',', $sorted_arr);
function bubble_sort($arr) {
for ($i = count($arr) - 1; $i >= 1; $i--) {
$changed = FALSE;
for ($j = 0; $j <= $i - 1; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
list ($arr[$j], $arr[$j+1]) = array($arr[$j+1], $arr[$j]);
$changed = TRUE;
}
}
if (!$changed) {
break;
}
}
return $arr;
}
- 哪些值为 FALSE?
答案
0
0.0
""
"0"
array()
NULL
- 大数求和?
计算 9999999999999999999999999999 + 123
答案
可直接计算
- call_user_func() 和 call_user_func_array() 区别?
答案
- call_user_func 可接受多个参数, call_user_func_array 接受数组
- call_user_func 不可传引用, call_user_func_array 可传引用
- PHP 常见资源有哪些
答案
- socket
- file
- mysql
- curl
- gd
- PHP 闭包
输出?
$arr = ['a', 'B', 'c', 'd', 'e'];
$arr2 = array_map(function($w) {
return strtoupper($w);
}, $arr);
var_dump($arr2);
答案
array(5) { [0]=> string(1) "A" [1]=> string(1) "B" [2]=> string(1) "C" [3]=> string(1) "D" [4]=> string(1) "E" }
- PHP 递归
用递归计算阶乘10。
答案
echo '10!='.fact(10);
function fact($n) {
if ($n <= 1) {
return 1;
}
return $n * fact($n - 1);
}
用递归计算斐波拉契10。
答案
echo '10th Fibonacci Sequence is '.fib(10);
function fib($n) {
if ($n <= 2) {
return 1;
}
return fib($n - 1) + $fib($n - 2);
}
- PHP PSR-4标准
叙述 PSR-4 标准
答案
略
- PHP 求最小子串
答案
略
- PHP 正则
答案
略
- PHP 内部实现
答案
略
- PHP 安全
谈谈 PHP 安全
答案
- 输入校验
- XSS
- JSON
- SQL 注入
- CSRF
- SSRF
- 短信轰炸
- 接口防刷
- CGI 和 FastCGI 区别
答案
- CGI:每次请求 fork 一个新进程来运行外部程序和解释器;
- FastCGI:TCP 通信
- PHP-FPM 管理方式
答案
- static 固定进程管理
- dynamic 动态进程管理
- ondemand 按需进程管理
- 如何查访问次数最多的 IP
答案
awk -F "[ ]" '{print $1}' ./access.log | uniq -c | sort -klnr | head -5
- 如何设置文件权限
答案
chmod u+rw file
或
chmod 600 file
- Linux 事件模型
答案
- select 上限 1024
- poll
- epoll
- epoll 是 Linux 多路复用 IO 接口,在用户孔吉安维护两个表:Interest List 和 Ready List。
- epoll 能在大量并发连接,但仅有少量活跃的情况下,提高系统的 CPU 利用率。
- epoll 具有事件通知机制。
- epoll 有两种触发机制:Level-Triggered 和 Edge-Triggered,ET 效率更高
- 处理高并发
答案
- 指标
- 吞吐量
- 响应时间
- 并发用户数
- 秒杀系统架构:用户 -> 客户端 -> 网关/负载均衡 -> 服务器 -> 缓存、消息队列 -> 数据库
- 用户:引导用户分数不同时间使用系统,避免涌现,可以做一个排队系统,增加前置页面。
- 客户端:静态资源缓存,前端页面限制频率,按钮按概率触发。
- 网关/负载均衡:将用户请求均匀分配到后端、DDOS 防护、IP 屏蔽
- 服务器:防止缓存雪崩(控制请求到达网关时间,超时则丢弃)、限流(令牌桶算法)
- 缓存:memcache 和 redis
- 数据库:合理索引、主从分离、分表、减少事务
- 消息队列:无法丢弃请求时,使用消息队列
- 其它:业务分解
- 总原则:逐级消化请求