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

资源魔 28 0

1.PHP 若何完成不必自带的 cookie 函数为客户端下发 cookie。关于散布式零碎,若何来保留 session 值。

这个题有点绕。考的仍是 COOKIE 以及 SESSION 的根底常识。效劳端经过 set-cookie 饬令来告诉客户端保留 cookie。

只需依照 domain path 过时工夫等规定 用 header 函数就能够完成。

散布式零碎 session,集中解决。按咱们公司的架构,为了完成高可用以及高容灾,提供一个散布式的验签效劳。详细的能够看下 redis 的散布式效劳架构。

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

思绪:消费者以及生产者模式。这个成绩也不说其余的状态,比方数据库的数据会及时添加么?redis 中每一个钱包能否有其余效劳正在读取或许写入啊。甚么的。数据库以及 REDIS 放一同,要末考数据分歧性,要末考呈现锁,招致效率升高。

三、依据 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 = '/<img.*?\"([^\"]*(jpg|bmp|jpeg|gif|png)).*?>/';
    $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, '.');
        $filename = $dir . '/' . uniqid() . $ext;
 
        // 保留图片信息到文件
        $local_file = fopen($filename, 'w');
        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 有成绩。

以上就是经典的八个PHP初级工程面试题(附谜底)的具体内容,更多请存眷资源魔其它相干文章!

标签: PHP面试题 php7开发教程 php7开发资料 php7开发自学

抱歉,评论功能暂时关闭!