美文网首页PHP
2020最新PHP面试100题(三)

2020最新PHP面试100题(三)

作者: it阿布 | 来源:发表于2020-10-08 21:17 被阅读0次

    77、写几个魔术方法并说明作用?

    • __call()当调用不存在的方法时会自动调用的方法

    • __autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件

    • __set()当给未定义的变量赋值时会自动调用的方法

    • __get()当获取未定义变量的值时会自动调用的方法

    • __construct()构造方法,实例化类时自动调用的方法

    • __destroy()销毁对象时自动调用的方法

    • __unset()当对一个未定义变量调用unset()时自动调用的方法

    • __isset()当对一个未定义变量调用isset()方法时自动调用的方法

    • __clone()克隆一个对象

    • __tostring()当输出一个对象时自动调用的方法

    点击加入我的企鹅群

    78、_REQUEST、 _POST、_GET、 _COOKIE、_SESSION、_FILES的意思是什么?

    它们都是PHP预定义变量

    • $_REQUEST用来获取post或get方式提交的值

    • $_POST用来获取post方式提交的值

    • $_GET用来获取get方式提交的值

    • $_COOKIE用来获取cookie存储的值

    • $_SESSION用来获取session存储的值

    • $_FILES用来获取上传文件表单的值

    79、数组中下标最好是什么类型的,为什么?

    数组的下标最好是数字类型的,数字类型的处理速度快。

    80、++i和i++哪一个效率高,为什么?

    ++i效率比i++的效率更高,因为++i少了一个返回i的过程。

    81、magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?

    Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\

    Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。

    82、框架中什么是单一入口和多入口,单一入口的优缺点?

    (1)多入口就是通过访问不同的文件来完成用户请求。

    单一入口指web程序所有的请求都指向一个脚本文件的。

    (2)单一入口更容易控制权限,方便对http请求可以进行安全性检查。

    缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。

    83、你对Memcach的理解,优点有哪些?

    Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。

    Memcache的优点:稳定、配置简单、多机分布式存储、速度快。

    84、对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

    a) 索引的目的是什么?

    • 快速访问数据表中的特定信息,提高检索速度

    • 创建唯一性索引,保证数据库表中每一行数据的唯一性

    • 加速表和表之间的连接

    • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

    b) 索引对数据库系统的负面影响是什么?

    负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

    c) 为数据表建立索引的原则有哪些?

    • 在最频繁使用的、用以缩小查询范围的字段上建立索引

    • 在平频繁使用的、需要排序的字段上建立索引

    d) 什么情况下不宜建立索引?

    • 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引

    • 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。

    84、web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景?

    使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。

    如果网站的访问量很大,可以把数据库读写服务器分开,使用多台服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。

    85、include与require的区别?

    • include()在执行文件时每次都要进行读取和评估

    • require()文件只处理一次(实际上文件内容替换了require()语句)

    • require()通常放在PHP脚本程序的最前面

    • include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化

    • require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样

    • include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.

    • require()包含文件失败,停止执行,给出错误(致命的)

    • include()常用于动态包含.

    • 通常是自动加载的文件,即使加载出错,整个程序还是继续执行

    • 一个页面声明,另一个页面调用

    • 包函文件失败,继续向下执行,返回一条警告

    86、PHP字符串中单引号与双引号的区别?

    单引号不能解释变量,而双引号可以解释变量。

    单引号不能转义字符,在双引号中可以转义字符。

    87、php中,模板引擎的目的是什么? 你用过哪些模板引擎?

    使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。

    使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate

    88、指出以下代码片段中的SQL注入漏洞以及解决方法(magic_quotes_gpc = off)

    mysql_query(“select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%’”, $link);
    

    注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是_GET[catid]和_GET[keyword]

    解决注入漏洞:

    $_GET[catid]=intval($_GET[catid]);
    $sql=”select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%”;
    $sql=addslashes($sql);
    Mysql_query($sql);
    

    89、分别指出php.ini中 magic_quotes_gpc, magic_quotes_runtime两项参数的作用.

    Magic_quotes_gpc的作用是在POST、GET、COOKIE数据上使用addslashes()自动转义。

    Magic_quotes_runtime参数的作用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引号、双引号、反斜线这些字符加上反斜杠转义。

    90、写出以下php代码的运行结果:

    function foo($i) {
    $i++;
    echo $i ;
    }
    function bar(&$i) {
    }
    $i = 10 ;
    echo $i++ , ++$i; 输出:10,12
    foo($i); 输出:13
    bar($i); 输出:无输出
    

    91、如何快速下载一个远程http服务器上的图片文件到本地?

    $file=”";
    $fp=fopen($file,’rb’);
    $img=fread($fp,10000);
    $dir=”./”;
    $local=fopen($dir.’/’.basename($file),’w');
    Fwrite($local,$img);
    

    92、什么是时间戳? 如何取得当前时间戳?

    时间戳是从1970年1月1日 00:00:00到指定日期的秒数。

    获取当前时间戳:time()

    93、了解XSS攻击吗? 如何防止 ?

    XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。

    使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

    94、SQL注入漏洞产生的原因 ? 如何防止?

    SQL注入产生的原因:程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。

    防止SQL注入:

    • 开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置

    • 执行sql语句时使用addslashes进行sql语句转换

    • Sql语句书写尽量不要省略小引号和单引号

    • 过滤掉sql语句中的一些关键字:update、insert、delete、select、*

    • 提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

    • Php配置文件中设置register_globals为off,关闭全局变量注册

    • 控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。

    95、一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?

    一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。

    96、M ADSL宽带连接, 理想情况下, 最大下载速度是多少KB/s ?

    256KB/s

    97、请写出一个正则表达式,用于匹配一个HTML文件中标记中的图片地址

    $url=””;
    //
    

    98、Fatal error: Call to undefined method ge_user() in /website/index.php on line 39

    调用了未定义的方法ge_user(),检查程序中有没有定义此方法

    99、Fatal error: Class ’client’ not found in /website/index.php on line 173

    类client没有找到,检查文件中有没有client类,或者有没有包含client类文件

    Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3
    

    提示文件前面有输出,检查是否有输出,或者编码

    100、Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10

    没有找到文件或目录,检查文件是否存在

    点关注,不迷路

    好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是人才。之前说过,PHP方面的技术点很多,也是因为太多了,实在是写不过来,写过来了大家也不会看的太多,所以我这里把它整理成了PDF和文档,如果有需要的可以

    点击进入暗号: PHP+「平台」

    在这里插入图片描述 在这里插入图片描述

    更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

    以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的 PHP技术交流群

    相关文章

      网友评论

        本文标题:2020最新PHP面试100题(三)

        本文链接:https://www.haomeiwen.com/subject/ihahpktx.html