PHP面试题 2021年合格Phper必看的八个面试题

2021年09月15日 阅读数:3
这篇文章主要向大家介绍PHP面试题 2021年合格Phper必看的八个面试题,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
一.前言

不少PHPer在学习和进阶的时候总会遇到一些问题和瓶颈,业务代码写多了迷茫没方向,不知道该从哪儿入手去提高本身。有腾讯等一线大厂进阶知识体系 可供参考(相关学习资料以及笔面试题)覆盖各个技术栈:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货mysql

欢迎关注微信公众号  “PHP大神” 回复“面试手册”便可免费获取更多相关资料。laravel

PHP面试题  2021年合格Phper必看的八个面试题_PHP

 

二.八个经典面试题

1.PHP 如何实现不用自带的 cookie 函数为客户端下发 cookie。对于分布式系统,如何来保存 session 值。

这个题有点绕。考的仍是 COOKIE 和 SESSION 的基础知识。服务端经过 set-cookie 命令来通知客户端保存 cookie。面试

只要按照 domain path 过时时间等规则 用 header 函数就能够实现。redis

分布式系统 session,集中处理。按咱们公司的架构,为了实现高可用和高容灾,提供一个分布式的验签服务。具体的能够看下 redis 的分布式服务架构。sql

二、数据库中的存放了用户 ID, 扣费不少行,redis 中存放的是用户的钱包,如今要写一个脚本,将数据库中的扣费记录同步到 redis 中,每 5 分钟执行一次。请问要考虑哪些问题?

思路:生产者和消费者模式。这个问题也没有说其余的状态,好比数据库的数据会实时增长么?redis 中每一个钱包是否有其余服务在读取或者写入啊。什么的。数据库和 REDIS 放一块儿,要么考数据一致性,要么考出现锁,致使效率下降。shell

三、根据 access.log 文件统计最近 5 秒的 qps,并以以下格式显示,01 1000(难点在 01 序号)

tail -f access.log | awk -F '[' '{print $2}' | awk '{print $1}' | uniq -c数据库

4.redis 是如何进行同步的,同步的方式,同步回滚怎么办,数据异常怎么办,同时会问 MYSQL 的同步方式和相关异常状况

redis 集群主从同步的简单原理安全

Redis 的复制功能是基于内存快照的持久化策略基础上的,也就是说不管你的持久化策略选择的是什么,只要用到了 Redis 的复制功能,就必定会有内存快照发生。服务器

当 Slave 启动并链接到 Master 以后,它将主动发送一个 SYNC 命令 (首先 Master 会启动一个后台进程,将数据快照保存到文件中 [rdb 文件] Master 会给 Slave 发送一个微信

Ping 命令来判断 Slave 的存活状态 当存活时 Master 会将数据文件发送给 Slave 并将全部写命令发送到 Slave )。

Slave 首先会将数据文件保存到本地 以后再将 数据 加载到内存中。

当第一次连接 或者是 故障后 从新链接 都会先判断 Slave 的存活状态 在作所有数据的同步 , 以后只会同步 Master 的写操做 (将命令发送给 Slave)

问题:

当 Master 同步数据时 若数据量较大 而 Master 自己只会启用一个后台进程 来对多个 Slave 进行同步 , 这样 Master 就会压力过大 , 并且 Slave 恢复的时间也会很慢!

redis 主从复制的优势:

(1)在一个Redis集群中,master负责写请求,slave负责读请求,这么作一方面经过将读请求分散到其余机器从而大大减小了master服务器的压力,另外一方面slave专一于提供

读服务从而提升了响应和读取速度。

(2) 在一个 Redis 集群中,若是 master 宕机,slave 能够介入并取代 master 的位置,所以对于整个 Redis 服务来讲不至于提供不了服务,这样使得整个 Redis 服务足够安全。

(3) 水平增长 Slave 机器能够提升性能

5.两台 mysql 服务器,其中一台挂了,怎么让业务端无感切换,并保证正常状况下讲台服务器的数据是一致的

不是核心业务的话,先停写,把备机拉起来,查看两台机器的日志,进行数据补偿,开写。

若是是核心业务的话,如今全部的写操做都在正常的状态机器上。把好的这台机器的备机拉起来,当主机。

以上全是应急操做。实际上数据库的容灾设计要复杂的多。

面试官要是问你,备机的数据不一致怎么办,你要勇敢怼回去,大家每秒多少写入操做。按照百万级表,每秒 1000 的写入效率,正常的设计是,分布在 2 台机器上每台 500。这个级别的数据同步,出现差别的几率 能够忽略不计的。有一台出现问题,另外一台也能够抗住。

(正常的操做,仍是先停写,等数据一致,切换,开写。咱们公司搞这些切换都是在凌晨 4.00 左右,核心业务的每秒写操做,只有十几个。先后耽搁不到 20 秒)。

6.请写出自少三种截取文件名后缀的方法或函数(PHP 原生函数和本身实现函数都可)

 PHP面试题  2021年合格Phper必看的八个面试题_PHP_02

 

 7.写一个函数,获取一篇文章内容中的所有图片,并下载

 PHP面试题  2021年合格Phper必看的八个面试题_PHP_03

 

 8 .瓶水,其中一瓶有毒,小白鼠喝完有毒的水以后,会在 24 小时后死亡,问:最少用几只小白鼠能够在 24 小时后找到具体是哪一瓶水有毒。

四只

二进制问题。薛定谔的老鼠。

一只老鼠有两个状态,死活,对应 01。假设老鼠的个数为 A,则有 2^A>=10; A=4;

思路很简单,十瓶药编号:0,1,10,11....1001;

0 不喝。第一只老鼠喝全部个位是 1 的:13579,第二只喝十位是 1 的,第三只和百位是 1 的,第四只喝千位是 1 的。

24 小时后,看下死了的是 1,活着的是 0。按老鼠的顺序乖乖站好…… 假如第一只和第三只死了,那就是 0101,就是 5 有问题。