PHP面试题
Php 魔术函数
__construct 实例化对象是自动调用
__destruct 销毁或结束调用对象时自动调用
__call 在对象中调用一个不可访问的方法时调用
__get 获得一个类的成员变量时调用
__set 设置一个类的成员亦是时调用
__isset() 当对不可访问属性调用isset()或empty()
__unset() 当对不可访问属性调用unset()
__sleep() 当调用方法serialize()时
__toString() 当类被当成字符串时返回值
__clone() 当对象克隆时自动加载
array_unshift() 头追加
array_push() 尾追加
array_shift() 头出队
array_pop() 尾出队
获取客户端IP地址
$_SERVER[‘REMOTE_ADDR’]
正则表达式
mysql 引擎
MyISAM 不支持事务 外连,优势访问速度快,对事务的完整性没有要求或不以select,inster为主的基本上可以用这个引擎来创建,InnoDB相对于MyISAM写的效率会差些,并会占用更用的空间
InnoDB 提供具有提交、回滚和崩溃恢复能力的事务安全
MEMORY 使用存在于内存中的内容来创建表,访问速度快,因为使用内存一旦服务关闭,数据就会丢失。
Merge 是一组MyISAM组合,这些 MyISAM必须结束相同。
MyISAM与InnoDB区别
1 InnoDB支持事务,MyISAM不支持,事务是一种高级的处理方式,可还原回滚。
2 MyISAM 适合查询和插入相关的应用,而InnoDB适合修改频繁的应用。
3 InnoDB支持外链,MyISAM不支持
4 InnoDB不支持fulltext类型的索引
5 InnoDB不保存表中数据行数,如执行select count(*),会执行整张有来计算,MyISAM只需要读出来保存好的行数就可以了。
6 自增长字段,InnoDB必须包好只有该字段的索引,但在MyISAM可以和其他字段一起建立联合索引
7 清空表时,InnoDB是一行一行删除,效率非常慢,MyISAM则会重建表
8 InnoDB支持行索
PHP设计模式
Singleton(单例模式)
单例模式是最常见的模式之一,在Web应用中允许在运行是为某个特定的类并有一个可访问的实例
应用场景:只实例化一次,内部实例化,如数据库连接
Factory工厂模式
最常用的模式,实力化一个类,可多次复用。
适配器模式(接口模式)
一种统一接口口径,多种情况或多咱实现方式
观察者模式
算法:
冒泡算法
卓一两两比较,顺序不对就交换次序。
快速算法
二分查找
常见的web攻击
XSS:客户信息不可信,需转义 htmlentitles
SQL注入:pdo 库
nosql
mongodb:基于文件的数据库存储
redis:基于内存的数据库,先存储到内存,再到数据库,可持久化存储,有比较丰富的数据结构
memcached:单一健值基于内存储
命名空间:
redis 备份与还原机制
REDIS是内存型数据库,但为了数据安全,需要数据持久化,在备份方面提供了两种工具:RDB和AOF
RDB备份利用快照来实现数据持久化,当符合条件时,redis会自动将数据存储到硬盘上,当redis启动时,会自动的将数据恢复到内存。
AOF备份与恢复
通过redis执行命令进行持久化存储
开启;redis.config appendonly yes
php7新特性
1 null合并运算 $a = $_GET['type'] ?? 1;
2标量类型声明
3返回值类型声明
4太空船比较符(组合比较符)<=>
5 define定义常量数组 define('PARAM',['param1','param2','param3']); PARAM[1]
6 匿名类
7 unicode、codepoint转译语法。
8 为unserialize() 提共过滤
9新增intlchar类
10 整数除法函数intdiv();
11 会话选项 session_stat会增加一个array做为选择,用以替代php.ini中的配置。
12 新增跨平台函数random_bytes()、randow_int(),用来产生随机字符串和随机整数。
session 工作原理
浏览器和服务器是能过http协议通信,在session工作机制中,每个访问都都会生成一个且唯一一个sessionId保存在浏览器中,就是cookie,当访问浏览器时,浏览器会将向服务器发送请求,服务器会根据sessionID活到客户端信息。
session是以文件形式保存在服务器中的,保存位置可在php.ini中查找 session.save_handler=files。
session 工作流程
1 访问客户端,客户端将本地cookie中的保存的sessionId做为参数发送请求到服务端
2 服务端判断sessionId是否存在且有效。
3 不存在则创建新的sessionid, 存在则直接使用当前session
4 已失效,则清除后生成新的session.
因为session标识是保存在cookie中,cookie禁用的话,session也会失效,但也可通过其他方式交互,比如url。
eAccelerator
压力测试工具:webbench,ApacheBench等
常用的性能测试工具【ab,wrk,httpload,Web Bench,Siege,Apache JMeter】
漏洞测试工具:Acunetix Web Vulnerability Scanner
高并发WEB
qps 每秒查询率
pv 访问量
uv
吞吐量 单位时间内处理的请求数量
响应时间:从请求到响应请求所花费的时间
宽带
优化
QPS < 50时不用考虑优化
QPS>100时,数据库缓存层,负载均衡
QPS>800时,遇到带宽瓶颈,CDN加速,负载均衡
QPS时2000,业务分离,分布式存储
1 流量优化
防盗链处理(去除恶意请求)
2前端web
前少http请求(css、js合并)
添加异步请求
启动浏览器缓存和文件压缩
CDN加速
独立的文件或图片服务器
3 服务端优化
页面静态化
并发处理
队列处理
添加缓存技术redis ,memcache等
4 数据库优化
数据库缓存
分库分表分区
读写分离
负载均衡
5 web服务器优化
echo,print,print_r区别
echo 是说法,没有返回值,只能打印简单的数据。
print 是函数,有返回值,能打印简单的数据
print_r 是函数,能打复杂的数据
字符串反转
strrev
require 与 include有什么区别
require 一般使用在页面顶部,执行时先包含文件进来,把他做为文件一部分,include一般放在流程中引用,一般是读到时才会引用。
include 引用文件不存在时,会出现一个warning,可以继续执行,require 引用文件不存在时会报错,不能继续执行。
ruquire_once,include_once.
http与https区别
http 是互联网应用最为广泛的网络协议,中客户端和服务器端请求和应达的标准。
https 是以安全为目标的 HTTP通道,在HTTP下加入ssl.
http 传输的数据都是未加密的,也就是明文的, https 是http+ssl可进行加密传输身份验证。比http协议安全。
两者端口不同,http80端口,https是443.