为了账号安全,请及时绑定邮箱和手机立即绑定

PHP面试知识梳理(下)

标签:
PHP

整理者:安小下,原文地址

PHP基础
  1. 双引号单引号区别
  • 双引号解释变量,单引号不解释变量
  • 双引号里插入单引号,其中单引号里如果有变量的话,变量解释
  • 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
  • 能使单引号字符尽量使用单引号,单引号的效率比双引号要高

    1. GET和POST提交方式的区别
  • GET产生一个TCP数据包;POST产生两个TCP数据包;
  • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
  • 对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  • GET在浏览器回退时是无害的,而POST会再次提交请求
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
  • GET请求只能进行url编码,而POST支持多种编码方式
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
    1. 如何获取客户端的真实ip
      $_SERVER['REMOTE_ADDR']或getenv('REMOTE_ADDR')
      可以使用ip2long()转成数字
    2. include和require的区别
      require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
      include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
      注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
  1. AJAX的优势是什么
    ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验
  2. 在程序的开发中,如何提高程序的运行效率
  • 优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;
  • 少用子查询可用表连接代替;
  • 少用模糊查询;
  • 数据表中创建索引;
  • 对程序中经常用到的数据生成缓存;

    1. SESSION与COOKIE的区别
  • 存储位置:session存储在服务器,cookie存储在浏览器
  • 安全性:session安全性高于cookie
    参考链接:https://www.zhihu.com/questio...
    1. isset和empty的区别
  • isset()函数 一般用来检测变量是否设置
    若变量不存在则返回 FALSE
    若变量存在且其值为NULL,也返回 FALSE
    若变量存在且值不为NULL,则返回 TURE
  • empty()函数是检查变量是否为空
    若变量不存在则返回 TRUE
    若变量存在且其值为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE
    若变量存在且值不为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 FALSE

    1. 数据库三范式
  • 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
  • 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
  • 第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

    1. 主键、外键和索引的区别
  • 定义
    主键--唯一标识一条记录,不能有重复的,不允许为空
    外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
    索引--该字段没有重复值,但可以有一个空值
  • 作用
    主键--用来保证数据完整性
    外键--用来和其他表建立联系用的
    索引--是提高查询排序的速度
  • 个数
    主键--主键只能有一个
    外键--一个表可以有多个外键
    索引--一个表可以有多个唯一索引
    1. 堆和栈的区别
      栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;
      堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
      PHP包管理器Composer与自动加载规范

      composer学习地址:http://docs.phpcomposer.com/0...

composer.json中的自动加载映射

目前PSR-0自动加载、PSR-4自动加载、classmap生成和files引入都是被支持的,PSR-4是首推的方法,因为它提供了更大的易用性。

  • PSR-4
    PSR-4规范了如何指定文件路径从而自动加载类,同时规范了自动加载文件的位置。乍一看这是和PSR-0重复了,实际上,在功能上确实有一部分重复。区别在于,PSR-4的规范比较干净,去除了兼容PHP5.3以前版本的内容。
    PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符

在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如Foo\Bar\Baz时,命名空间Foo指向一个名为src/的目录意味着自动加载器将查找名为src/Bar/Baz.php文件并引用它。

命名空间的前缀必须以\结尾,以避免类似前缀之间的冲突。在安装和更新期间,PSR-4引用全部组合到一个key=>value数组中,该数组可以在生成的文件vendor/composer/autoload_psr4.php中找到。

例子:

{
  "autoload": {
    "psr-4": {
      "App\\": "App/" // 命名空间App映射到目录App
    }
  }
}
  • classmap
    classmap引用的所有组合,都会在安装、更新的过程中生成并存储到vendor/composer/autoload_classmap.php文件中。
    你可以使用classmap生成支持自定义加载的不遵循PSR-4规范的类库,要配置它指向的目录,以便能够准确的搜索到类文件

例子:

{
  "autoload": {
    "classmap": ["src/", "lib/", "Something.php"]
  }
}
  • Files
    如果你想要明确指定,在每次请求时都要载入某些文件,那么你可以使用files字段加载。通常作为函数库的载入方式。

例子:

{
  "autoload": {
    "files": ["src/MyLibrary/functions"]
  }
}
PHP框架
Laravel相关
前端相关
JavaScript
VueJS
  • VueJs双向数据绑定原理
    Linux
    Cors跨域

    CORS的基本原理是通过设置HTTP请求和返回中header,告知浏览器该请求是合法的。这涉及到服务器端和浏览器端双方的设置:请求的发起(Http Request Header)和服务器对请求正确的响应(Http response header)。
    PHP面试知识梳理(下)
    PHP面试知识梳理(下)
    PHP面试知识梳理(下)
    参考文章:https://zhuanlan.zhihu.com/p/...

点击查看更多内容
9人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消