PHP面试总结

常见问题总结:

1、http错误码

    做web开发到,http到错误码,一定要懂,至少要了解。

    2xx:成功

    200:正常;请求已完成。

    201:正常;紧接 POST 命令。

    202:正常;已接受用于处理,但处理尚未完成。

    203:正常;部分信息 — 返回的信息只是一部分。

    204:正常;无响应 — 已接收请求,但不存在要回送的信息。

    3xx:重定向

    301:已移动 — 请求的数据具有新的位置且更改是永久的。

    302:已找到 — 请求的数据临时具有不同 URI。

    304:未修改 — 未按预期修改文档。

    4xx:客户机中出现的错误 

    400:错误请求 — 请求中有语法问题,或不能满足请求。

    401:未授权 — 未授权客户机访问数据。 

    402:需要付款 — 表示计费系统已有效。

    403:禁止 — 即使有授权也不需要访问。

    404:找不到 — 服务器找不到给定的资源;文档不存在。

    5xx:服务器中出现的错误

    500:内部错误 — 因为意外情况,服务器不能完成请求。

    501:未执行 — 服务器不支持请求的工具。

    502:错误网关 — 服务器接收到来自上游服务器的无效响应。

    503:无法获得服务 — 由于临时过载或维护,服务器无法处理请求。

2、php中以array开头的函数

    http://www.w3school.com.cn/php/php_ref_array.asp

3、mysql中MyIasm和Innodb的对比

  •     MyIasm是mysql的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。

    每张  MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。

  •     InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行

    锁不是绝对的,如果在执行一个 SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作

    时的SQL语句),以及提供与Oracle类型一致的不加锁读 取方式。InnoDB存储它的表和索引在一个表空间中,表

    空间可以包含数个文件。

    主要区别:

  • MyISAM是非事务安全型的,而InnoDB是事务安全型的。

  • MyISAM锁的粒度是表级,而InnoDB支持行级锁定。

  • MyISAM支持全文类型索引,而InnoDB不支持全文索引。

  • MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

  • MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。

  • InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

    应用场景:

  • MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

  • InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

4、nginx和apache对比

  • 最核心的区别在于apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。

  • nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

  • apache 默认是以组件形式把php纳入的  nginx是 fpm模式

5、redis和memcached对比

6、设计模式

7、数据库优化

  • 查询优化

    • 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

    • 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

    • 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

    • 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描

    • in 和 not in 也要慎用,否则会导致全表扫描

    • 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描

    • 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

  • 减少表之间的关联,特别对于批量数据处理,尽量单表查询数据,统一在内存中进行逻辑处理,减少数据库压力

  • 对访问频繁的数据,充分利用数据库cache和应用的缓存

  • 数据量比较大的,在设计过程中,为了减少其他表的关联,增加一些冗余字段,提高查询性能

  • 数据库水平分割

  • 数据库垂直分割


8、服务器配置优化 

9、安全方面的问题

  • XXS

  • CRSF

  • SQL注入


(未完待续……)



你可能感兴趣的:(PHP面试总结)