查看: 727|回复: 0

[PHP学习] PHP面试知识梳理(下)

发表于 2018-4-18 08:02:10

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

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

能使单引号字符尽量使用单引号,单引号的效率比双引号要高

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上,所以不能用来传递敏感信息 如何获取客户端的真实ip
$_SERVER['REMOTE_ADDR']或getenv('REMOTE_ADDR')
可以使用ip2long()转成数字 include和require的区别
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是 AJAX的优势是什么
ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验 在程序的开发中,如何提高程序的运行效率 优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段; 少用子查询可用表连接代替; 少用模糊查询; 数据表中创建索引;

对程序中经常用到的数据生成缓存;

SESSION与COOKIE的区别 存储位置:session存储在服务器,cookie存储在浏览器 安全性:session安全性高于cookie
参考链接:https://www.zhihu.com/questio... 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

数据库三范式 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;

第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

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

例子:

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

例子:

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

例子:

  1. {
  2. "autoload": {
  3. "files": ["src/MyLibrary/functions"]
  4. }
  5. }
复制代码
PHP框架 Laravel相关 前端相关 JavaScript VueJS VueJs双向数据绑定原理 Linux Cors跨域

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



回复

使用道具 举报