掘金 php,我的PHP面试之路

1. 写出10个array函数,10个string函数

array_push 往数组中添加元素

array_pop 往数组中弹出一个元素

array_merge 数组合并

array_pad 数组填充,array_pad($result, -7, 0); 以0在开数组开头进行填充

array_shift 从开头删除一个元素

array_unshift 从开头插入

array_slice 获取一定长度的数据

array_splice 截取数组

count 获取数据的长度

sort 对数据进行排序

rsort 数组进行倒叙排序

ksort 根据key值,进行排序

usort 用户自定义排序

array_serach 查询首次出现的位置

字符串函数

strstr 获取子字符串

md5 md5加密

strtolower 转为小写

strtoupper 转为大写

ucwords 单词首字母大写

ucfirst 单词首个单词第一个字母大写

lcfirst 首个单词第一个字母小写

lcwords 单词的首个字母小写

implode 将数组转化为字符串

explode 将字符串转化为数组

strlen 获取字符串的长度

str_replace 替换字符串

strpos 查询首次出现的位置

stripos 查询首次出现的位置,不区分大小写

strrpos 查询最后一次出现的位置。

复制代码

2. 写一个字符串反转函数 “hello world”

function reverse($str) {

if(empty($str)) {

return false;

}

$len = count($str);

for($i = 0; $i < $len; $i++) {

$temp = $str[$len-$i-1];

$str[$len-$i-1] = $str[$i];

$str[$i] = $temp;

}

return $str;

}

复制代码

但是这种情况下, 就有一个问题,就是如果输入的是中文就有问题,因为中文时两个字节,而英文是一个字节。 (待优化)

function reverse($str) {

$re = '';

$len = mb_strlen($str);

for ($i=0; $i < $len; $i++) {

$re = mb_substr($str, $i, 1) . $re;

}

return $re;

}

$res = reverse('eng中国lis');

echo $res;

?>

复制代码

3. 写一个单例模式

final class singleton()

{

private static $instance;

private function ___construct() {}

private function __clone() {}

public function getInstance() {

if (!self::instance) {

self::instance = new self();

}

return self::instance;

}

}

复制代码

4. 一个浏览器发起请求的过程

af821debcb1e9466ceb485c357ce42a3.png

5. php-fpm

因为php-cgi 每次都去php.ini 重新编译,效率很慢。fastcgi 就是为了解决每次都编译的问题。 php-fpm 是一个进程管理工具,支持ini更新后 平滑的重启。 www.awaimai.com/371.html

5. 超卖问题

正则表达式

7. 你熟悉的linux命令

ls

mkdir

cd

chmod

su

chgrp

chown

touch

scp

ftp

top

ps

ln

systemctl

grep

awk

cat

tail

head

where

whereis

find

df

复制代码

8. 正则表达式

10. http的状态码

200 成功

301 永久重定向

302 临时重定向

401 需要验证

403 验证未通过

404 资源不存在

500 服务器端错误

503 服务器维护

复制代码

11. PHP的内存回收机制

有个计数,当为0时,回收。

12. MySQL优化

加索引

explain 查看语句是否有问题,是否可以优化,加索引?修改语法顺序?

13. redis 的五种数据结构

string

list

hash

set

zset

14. redis的持久化

rdb 快照持久化【可以定时写,可以达到条件了之后再写,是master fork一个子进程去执行,不影响性能。但是如果异常之后,会丢掉这一批数据】

aof 根据增量写入到磁盘,性能会差一些,因为是直接写磁盘,但是异常重启之后,只会损失一小部分数据。

15.rabbitmq的问题

生产者丢数据怎么办?

没办法啊,只能让生产者,横向扩容,保证消息的正常发送。

消费者消费失败怎么办? 重复消费怎么办? 消费失败,就继续重试啊,不发送ack。

消费端,需要做好幂等。

16.二分查找

function bin_search($nums, $target) {

if (empty($nums)) {

return null;

}

$left = 0;

$right = count($nums) - 1;

while ($left <= $right) {

$mid =floor(($right + $left) / 2);

if ($nums[$mid] == $target) {

return $mid;

}elseif ( $target < $nums[$mid]) {

$right = $mid - 1;

} else {

$left = $mid + 1;

}

}

}

$nums = array(1,2,4,5,6,8,9, 17);

$target = 9;

$result = bin_search($nums, $target);

var_dump($result);

复制代码

17.快速排序

function quickSort($nums) {

if(empty($nums)) {

return null;

}

$len = count($nums);

$left= array();

$right = array();

$key = $nums[0];

for($i = 1; $i < $len; $i++) {

if ($nums[$i] < $key) {

$left[] = $nums[$i];

} else {

$right[] = $nums[$i];

}

}

$left = quickSort($nums);

$right = quickSort($nums);

return array_merge($left, [$key], $right);

}

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值