首页 > 编程语言 >经典的八个PHP高级工程面试题(附答案)

经典的八个PHP高级工程面试题(附答案)

时间:2024-03-28 16:45:11浏览次数:40  
标签:面试题 ch Slave 八个 39 &# file curl PHP

更多:https://www.shanhubei.com/archives/55139.html

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

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

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

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

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);

 

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

function download_images($article_url = '', $image_path = 'tmp'){
 
    // 获取文章类容
    $content = file_get_contents($article_url);
 
    // 利用正则表达式得到图片链接
    $reg_tag = &#39;/<img .*?\"([^\"]*(jpg|bmp|jpeg|gif|png)).*? alt="经典的八个PHP高级工程面试题(附答案)" >/&#39;;
    $ret = preg_match_all($reg_tag, $content, $match_result);
    $pic_url_array = array_unique($match_result1[1]);
 
    // 创建路径
    $dir = getcwd() . DIRECTORY_SEPARATOR .$image_path;
    mkdir(iconv("UTF-8", "GBK", $dir), 0777, true);
 
    foreach($pic_url_array as $pic_url){
        // 获取文件信息
        $ch = curl_init($pic_url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOBODY, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $fileInfo = curl_exec($ch);
        $httpinfo = curl_getinfo($ch);
        curl_close($ch);
 
        // 获取图片文件后缀
        $ext = strrchr($pic_url, &#39;.&#39;);
        $filename = $dir . &#39;/&#39; . uniqid() . $ext;
 
        // 保存图片信息到文件
        $local_file = fopen($filename, &#39;w&#39;);
        if(false !== $local_file){
            if( false !== fwrite($local_file, $filecontent) ){
            fclose($local_file);
            }
        }
    }
 
}

 

 

8.10瓶水,其中一瓶有毒,小白鼠喝完有毒的水之后,会在 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 有问题。

标签:面试题,ch,Slave,八个,39,&#,file,curl,PHP
From: https://www.cnblogs.com/shanhubei/p/18102050

相关文章

  • 面试题——为什么vite打包速度比webpack快
    vite采用了不同的开发模式, 相较于webpack的先打包再启动服务器, vite则是直接启动, 在请求模块时再进行实时编译, 在大型项目中, 这种按需动态编译的模式极大地缩短了时间vite充分利用了现代浏览器对ESModules的支持, 将开发环境下的模块文件直接作为浏览器要执......
  • React— React面试题按照学习顺序持续更新
    1.React的特点采用组件化模式,命名式编码,提高代码复用率;在ReactNative中可以使用react语法进行移动端开发使用虚拟DOM(v-dom)和diff算法,减少DOM和浏览器的交互2.babel在React的作用ES6语法转ES5,如箭头函数、模板字符串、解构赋值等。Babel可以将这些高级语法转换为浏览器能......
  • 「PHP系列」PHP变量
    文章目录一、PHP变量1.基本变量赋值和输出2.变量类型自动转换3.使用变量存储数组4.使用变量存储对象5.可变变量(VariableVariables)6.全局变量和局部变量7.注意事项:二、PHP变量作用域1.全局变量和局部变量2.函数内的全局变量访问3.超全局变量4.静态变量5.变......
  • PHP round 和number_format 区别
    number_format和round有什么区别?number_format()和round()在PHP中的底层计算方法并不完全一样,主要体现在它们的目的和结果表现形式上的差异,同时也可能影响到精度:round()函数主要用于对浮点数进行数学意义上的四舍五入,它的重点在于数值本身的精度调整。该函数接收两个参......
  • 【Flutter 面试题】 Dart 是不是单线程模型?是如何运行的?
    【Flutter面试题】Dart是不是单线程模型?是如何运行的?文章目录写在前面口述回答补充说明示例:异步编程示例:使用Isolates处理计算密集型任务总结写在前面......
  • 【前端面试题-13】目前主流的几种图片格式以及特性和使用场景
    目前主流的图片格式及其特性和使用场景包括:JPEG(.jpg):特性:JPEG是一种有损压缩格式,能够大幅度减少文件大小,但压缩过程中会有一定的图像质量损失。它支持渐进式显示,即先呈现低质量预览再逐渐加载高清晰度版本。使用场景:JPEG适用于需要较小文件尺寸的照片、网页图片、......
  • 【Flutter 面试题】讲解一下Flutter中的动画和过渡效果
    【Flutter面试题】讲解一下Flutter中的动画和过渡效果文章目录写在前面口述回答补充说明运行结果详细说明写在前面......
  • 基于PHP+vue的社区居民互助交流系统016gm
    。开发环境开发语言:php后端框架:Thinkphp/Laravel前端框架:vue.js服务器:apache数据库:mysql运行环境:phpstudy/wamp/xammp等社区互助平台的功能分为管理员和用户两个部分,系统的主要功能包括首页,个人中心,用户管理,租房信息管理,失物招领管理,宠物代遛管理,停车位出租管理,其他管......
  • Thinkphp/Laravel校园二手书交易系统oc81w
     开发语言:php后端框架:Thinkphp/Laravel前端框架:vue.js服务器:apache数据库:mysql运行环境:phpstudy/wamp/xammp等 性能非的功能分为管理员,卖家用户和用户三个部分,系统的主要功能包括首页、个人中心、用户管理、卖家用户管理、图书分类管理、二手图书管理、求购图书管理、......
  • 2024年Java面试题汇总手册(持续更新版)
    简化图如下所示现在假设由于某种原因,employee-producer公开的服务会抛出异常。我们在这种情况下使用Hystrix定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中出现异常,则回退方法将返回一些值。6、什么是Hystrix断路器?我们需要它吗?......