0

    2017招聘季:PHP面试题超强总结!

    2023.05.22 | admin | 134次围观

    8、什么是魔术引号

    魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义

    9、如何获取客户端的ip(要求取得一个int)和服务器ip的代码

    客户端:$_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR')

    ip2long进行转换

    服务器端:gethostbyname('#39;)

    10、使用那些工具进行版本控制

    cvs、svn、vss、git

    11、优化数据库的方法12、是否使用过模板引擎?使用的模板引擎的名字是?

    Smarty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。

    13、对于大流量网站,采用什么方法来解决访问量的问题14、语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们

    注意:包含文件不存在或者语法错误的时候require是致命的,而include不是

    15、谈谈mvc的认识

    由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图

    16、 说明php中传值与传引用的区别,并说明传值什么时候传引用?

    变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量

    php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,成为了其别名或者指向)了原始变量。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值易语 修改ip工具下载,简单地将一个&符号加到将要赋值的变量前(源变量)

    对象默认是传引用

    对于较大是的数据,传引用比较好,这样可以节省内存的开销

    17、isset、empty、is_null的区别

    isset 判断变量是否定义或者是否为空

      变量存在返回ture,否则返回false
      变量定义不赋值返回false  unset一个变量,返回false
      变量赋值为null,返回false

    empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。

        "",0,"0",NULL,FALSE都认为为空,返回true
        没有任何属性的对象都认为是空

    is_null:检测传入的值(值、变量、表达式)是否为null

        定义了,但是赋值为Null
        定义了,但是没有赋值    unset一个变量

    18、前端调试的工具19. 简单描述mysql中,索引,主键易语 修改ip工具下载,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)(新浪网技术部)

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

    普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。

    普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。

    主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。

    索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。

    索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。

    20.数据库中的事务是什么?

    事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。

    21.了解XSS攻击吗?如何防止?

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

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

    22.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,关闭全局变量注册

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

    23.PHP网站的主要攻击方式有哪些?

    命令注入(Command Injection)

    eval 注入(Eval Injection)

    客户端脚本攻击(Script Insertion)

    跨网站脚本攻击(Cross Site Scripting, XSS)

    SQL 注入攻击(SQL injection)

    跨网站请求伪造攻击(Cross Site Request

    Forgeries, CSRF)

    Session 会话劫持(Session Hijacking)

    Session 固定攻击(Session Fixation)

    HTTP 响应拆分攻击(HTTP Response Splitting)

    文件上传漏洞(File Upload Attack)

    目录穿越漏洞(Directory Traversal)

    远程文件包含攻击(Remote Inclusion)

    动态函数注入攻击(Dynamic Variable

    Evaluation)

    URL 攻击(URL attack)

    表单提交欺骗攻击(Spoofed Form

    Submissions)

    HTTP 请求欺骗攻击(Spoofed HTTP Requests)

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

    多口就是通过访问不同的文件来完成用户请求。单一入口只 web 程序所有的请求都指向一个脚本文件的。

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

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

    25、 对于关系型数据库而言,索引是相当重要的概念,请回答有关索引的几个问题:a)、索引的目的是什么?

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

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

    加速表和表之间的连接

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

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

    负面影响:

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

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

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

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

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

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

    对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。

    26、 简述在MySQL数据库中MyISAM和InnoDB的区别

    区别于其他数据库的最重要的特点就是其插件式的表存储引擎。切记:存储引擎是基于表的,而不是数据库。

    InnoDB与MyISAM的区别:

    InnoDB存储引擎: 主要面向OLTP(Online Transaction Processing,在线事务处理)方面的应用,是第一个完整支持ACID事务的存储引擎(BDB第一个支持事务的存储引擎,已经停止开发)。

    特点:

    MyISAM存储引擎: 是MySQL官方提供的存储引擎,主要面向OLAP(Online Analytical Processing,在线分析处理)方面的应用。特点:

    27、 解释MySQL外连接、内连接与自连接的区别

    先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。

    内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中

    的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。

    左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL目前还不支持全外连接。

    28、 写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)

    MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、

    Archive、CSV、Blackhole、MaxDB 等等十几个引擎

    29、 什么是面向对象?主要特征是什么?几大原则是什么?

    面向对象是程序的一种设计模式,它利于提高程序的重用性,使程序机构更加清晰。主要特征是:封装、继承、多态。

    五大基本原则: 单一职责原则;开放封闭原则;替换原则; 依赖原则; 接口分离原则。

    30、什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?

    参考答案:

    静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场 合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当 网络状况变化后必须由网络管理员修改路由表。

    动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信 息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其 缺点是路由广播更新信息将占据大量的网络带宽。

    31、使用过 Memcache 缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?

    Memcahce 是把所有的数据保存在内存当中,采用 hash 表的方式,每条数据由 key 和 value 组成,每个 key 是独一无二的,当要访问某个值的时候先按照找到值,然后返回结果。

    Memcahce 采用 LRU 算法来逐渐把过期数据清除掉。

    32. 列举流行的 Ajax 框架?说明 Ajax 实现原理是什么及 json 在 Ajax 中起什么作用?

    流行的 Ajax 框架有 jQuery,Prototype,Dojo,MooTools。

    Ajax 的工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以 Ajax 技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。

    在使用 Ajax 时,涉及到数据传输,即将数据从服务器返回到客户端,服务器端和客户端分别使用不同的脚步语言来处理数据,这就需要一种通用的数据格式,XML 和 json 就是最常用的两种,而 json 比 XML 更简单。

    33、Myql中的事务回滚机制概述

    事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销。

    要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和第二个表都要回到未修改的状态,这就是所谓的事务回滚。

    上面的33个问题,从易到难分别列出了面试中的一些问题,对于想换工作的同学来说,将这些题目刷一遍在面试能提高不少成功率,那在这里要祝愿一下找工作的各位都能找到自己满意的一份工作!

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论