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开发自学
抱歉,评论功能暂时关闭!