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.

posted @ 2018-11-02 16:01  徐姐  阅读(146)  评论(0编辑  收藏  举报