本文目录导航:
2020年PHP 面试问题(二)
CGI(通用网关接口)用于WEB服务器和应用程序间的交互,定义输入输出规范,用户请求通过WEB服务器转发给FastCGI进程,FastCGI进程调用应用程序进行处理,如php解析器,处理结果如html返回给FastCGI,FastCGI再返回给Nginx进行输出。
假设WEB服务器是Nginx,应用程序是PHP,而php-fpm是管理FastCGI的,这就是它们之间的关系。
FastCGI用于提高CGI程序性能,启动一个master,再启动多个worker,不需要每次解析。
而php-fpm实现了FastCGI协议,是FastCGI进程管理器,支持平滑重启,可以启动时预先生成多个进程。
memcache和Redis的区别在数据结构方面,memcache仅支持简单的key-value形式,而Redis支持更复杂的数据类型如字符串、集合、列表、散列和有序集合。
多线程方面,memcache支持多线程,而Redis支持单线程。
持久化方面,Redis支持持久化,memcache不支持。
分布式方面,Redis使用主从结构,memcache需要通过哈希一致性来支撑主从结构。
实际运用中,Redis和memcache可以结合使用,memcache可用作session的存储方式,session是键值对的形式。
Redis和Memcache的区别在于,Redis中并非所有数据都存储在内存中,这是它们最大的区别。
Redis具有数据库特征,而Memcache只是简单的键值对缓存。
它们都需要集群扩展,实现方式为master-slave或哈希。
在100k以上的数据中,Memcache性能高于Redis。
如果内存使用效率是关键,Memcache在简单键值存储时效率更高,而Redis使用哈希结构时,组合式压缩使内存利用率高于Memcache,这取决于应用场景和数据特性。
Redis持久化特性包括RDB和AOF,AOF文件记录所有写操作命令,适用于数据完整性和同步需求。
Redis消息队列的实现通常使用列表,先进先出,但如果需要优先处理某些任务,可以通过将任务放入队列头部实现,获取任务时从队列尾部弹出,先处理高优先级任务。
使用两个队列,一个为高优先级任务队列,一个为普通任务队列,使用BRPOP命令按顺序从多个队列中取值,可以优先处理高优先级任务。
Redis防止高并发的方法主要在客户端,使用连接池并采用内部锁synchronized,服务器层面利用setnx实现锁机制。
单线程机制导致高并发对同一个键的操作排队处理,可能造成请求超时,远程访问时出现延迟返回问题。
SQL语句优化包括:Where子句中优先处理可以过滤掉最大数量记录的条件,避免使用计算在索引列上,避免使用NULL值判断,避免在Where子句中进行表达式操作,尽量避免全表扫描,优先考虑索引列,避免NULL值判断导致的引擎放弃使用索引。
PHP中高级面试题 – 第一天
一、写一个函数,获取一篇文章内容中的全部图片,并下载
XSS:跨站脚本攻击,可以通过对内容转义和过滤来防范,还有 CSP
三、应用中我们经常会遇到在 user 表随机调取 10 条数据来展示的情况,简述你如何实现该功能。
四、MYSQL 中主键与唯一索引的区别
主键:绝对不能有空值。唯一索引:可以有空值
五、http 与 https 的主要区别
关键是 S 上。
简而言之,https 建立连接后要先把 SSL 的证书发下去,有了公钥和私钥,就可以解密了。
六、两台 mysql 服务器,其中一台挂了,怎么让业务端无感切换,并保证正常情况下讲台服务器的数据是一致的
不是核心业务的话,先停写,把备机拉起来,查看两台机器的日志,进行数据补偿,开写。
如果是核心业务的话,现在所有的操作都在正常的状态机器上。
把好的这台机器的备机拉起来,当主机。
以上全是应急操作。
实际上数据库的容灾设计要复杂得多。
面试官要是问你,备机的数据不一致怎么办,你要勇敢怼回去,你们每秒多少写入操作。
按照百万级表,每秒 1000 的写入效率,正常的设计是,分布在 2 台机器上每台 500。
这个级别的数据同步,出现差异的概率 可以忽略不计的。
有一台出现问题,另一台也可以抗住。
(正常的操作,还是先停写,等数据一致,切换,开写。
我们公司搞这些切换都是在凌晨 4.00 左右,核心业务的每秒写操作,只有十几个。
前后耽搁不到 20 秒)。
七、10 瓶水,其中一瓶有毒,小白鼠喝完有毒的水之后,会在 24 小时后死亡,问:最少用几只小白鼠可以在 24 小时后找到具体是哪一瓶水有毒。
答案:四只二进制问题。
薛定谔的老鼠。
一只老鼠有两个状态,死活,对应 01。假设老鼠的个数为 A,则有 2^A>=10; A=4;
思路很简单,十瓶药编号:0,1,10,11….1001;
0 不喝。
第一只老鼠喝所有个位是 1 的,第二只喝十位是 1 的,第三只和百位是 1 的,第四只喝千位是 1 的。
24 小时后,看下死了的是 1,活着的是 0。
按老鼠的顺序乖乖站好…… 假如第一只和第三只死了,那就是 0101,就是 5 有问题。
2020最新PHP面试100题(三)
77、写几个魔术方法并说明作用?魔术方法是PHP类中用于特殊场合的特殊方法,例如构造函数、析构函数、空方法等。
例如,`__construct()`在对象创建时自动调用,用于初始化对象;`__destruct()`在对象销毁前自动调用,用于清理资源。
78、$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILES的意思是什么?它们都是PHP预定义变量,分别用于获取POST、GET、COOKIE、SESSION和上传文件的数据。
79、数组中下标最好是什么类型的,为什么?数组的下标最好是数字类型的,因为数字类型的处理速度快。
80、++i和i++哪一个效率高,为什么?++i效率比i++的效率更高,因为++i少了一个返回i的过程。
81、magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?magic_quotes_gpc()用于在POST、GET、COOKIE数据上使用addslashes()自动转义;magic_quotes_runtime()在参数为true时,自动转义数据库中取出来的单引号、双引号、反斜线。
82、框架中什么是单一入口和多入口,单一入口的优缺点?单一入口指web程序所有请求都指向一个脚本文件,优点是容易控制权限,方便进行安全性检查;缺点是URL可能不美观,对搜索引擎不友好。
83、你对Memcach的理解,优点有哪些?Memcache是一种缓存技术,可以提高网站访问速度,减轻高并发时服务器压力。
优点包括稳定、配置简单、多机分布式存储、速度快。
84、对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:a) 索引的目的是什么?答案:提高查询效率。
b) 索引对数据库系统的负面影响是什么?答案:创建和维护索引需要时间,占用物理空间,且影响数据维护速度。
c) 为数据表建立索引的原则有哪些?答案:根据查询需求、表大小和数据分布选择合适的索引类型。
d) 什么情况下不宜建立索引?答案:当查询中很少用到该字段或者字段更新频繁时。
84、web应用中,数据库的读取频率远高于写入频率,如何优化MySQL而应对此种情景?使用Memcache缓存技术,减少数据库查询次数;数据库读写服务器分离,使用多台服务器处理查询。
85、include与require的区别?include当文件不存在时不会导致程序崩溃;require如果文件不存在会引发致命错误。
86、PHP字符串中单引号与双引号的区别?单引号不解析变量和转义字符,双引号解析变量,可转义字符。
87、php中,模板引擎的目的是什么?你用过哪些模板引擎?目的使程序逻辑和HTML分离,清晰结构。
使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate。
88、指出以下代码片段中的SQL注入漏洞以及解决方法(magic_quotes_gpc = off)。
89、分别指出中 magic_quotes_gpc, magic_quotes_runtime两项参数的作用。
90、写出以下php代码的运行结果。
91、如何快速下载一个远程http服务器上的图片文件到本地?使用curl或fopen等函数实现。
92、什么是时间戳?如何取得当前时间戳?答案:时间戳是从1970年1月1日到指定日期的秒数,使用time()函数获取。
93、了解XSS攻击吗?如何防止?答案:XSS攻击通过注入恶意脚本,使用htmlspecialchars()过滤特殊字符。
94、SQL注入漏洞产生的原因?如何防止?答案:原因在于未正确过滤用户输入,防止方法包括使用预编译语句、输入验证。
95、一个字节占多少bit?一个IPv4地址占几个字节?一个IPv6地址呢?答案:一个字节占8bit,IPv4占用4字节,IPv6占用16字节。
96、M ADSL宽带连接的理想情况下,最大下载速度是多少KB/s?答案:256KB/s。
97、请写出一个正则表达式,用于匹配一个HTML文件中标记中的图片地址。
98、Fatal error: Call to undefined method ge_user() in /website/ on line 3999、Fatal error: Class client not found in /website/ on line 、Warning: session_start(): open(/website/tmp/sess_47efacff9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/ on line 10更多学习内容可以访问。
评论(0)