这个题有点绕。
考的还是 COOKIE 和 SESSION 的根本知识。
做事端通过 set-cookie 命令来关照客户端保存 cookie。

只要按照 domain path 过期韶光等规则 用 header 函数就可以实现。

分布式系统 session,集中处理。
按我们公司的架构,为了实现高可用和高容灾,供应一个分布式的验签做事。
详细的可以看下 redis 的分布式做事架构。

php高级面试题PHP经典高等工程师面试题 Angular

2、数据库中的存放了用户 ID, 扣费很多行,redis 中存放的是用户的钱包,现在要写一个脚本,将数据库中的扣费记录同步到 redis 中,每 5 分钟实行一次。
叨教要考虑哪些问题?

思路:生产者和消费者模式。
这个问题也没有说其他的状态,比如数据库的数据会实时增加么?redis 中每个钱包是否有其他做事在读取或者写入啊。
什么的。
数据库和 REDIS 放一起,要么考数据同等性,要么考涌现锁,导致效率降落。

3、根据 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 原生函数和自己实现函数均可)

echo substr(strrchr($file, '.'), 1);

echo substr($file, strrpos($file, '.')+1);

$arr=explode('.', $file);

echo $arr[count($arr)-1];

$arr=explode('.', $file);

echo end($arr);

echo strrev(explode('.', strrev($file))[0]);

echo pathinfo($file)['extension'];

echo pathinfo($file, PATHINFO_EXTENSION);