php面试考点整理

1、引用变量的概念和定义方式

不同的名字访问同一个变量内容
用&符号定义

实际使用案例

	$a =[1,2,3,4,5];
	echo "<pre>";
	var_dump($a );
	foreach($a as $key =>&$val){
	$val=2;
	}
	var_dump($a );die;

2.简述cookie和session的区别及工作机制,存储位置等、简述cookie的优缺点

(1)session基于cookie,存储session_id,存储与服务端,没有cookie,也可以另一种形式使用
cookie存于客户端,可修改和禁止
(2)session可以存于服务器文件、mysql、memcache、redis等

3、版本控制器软件?运行的环境?
svn,git
4、常见服务器配置?

注册全局变量(register_globals)、
允许远程打开(all_url_fopen)、
允许远程包含(allow_url_include)、
设置时区(date.timezone)、
显示错误(display_errors)、
错误级别(error_reportimg)、
是否开启安全模式(safe_mode)
上传文件大小(wenupload_max_filesize)
上传文件数量(max_file_uploads)
post大小(post_max_size)

5、php-fpm(cgi、fastCgi)的概念

PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHPFastCGI管理器,对于PHP 5.3.3之前的php来说,是一个补丁包   ,旨在将FastCGI进程管理整合进PHP包中。如果你使用的是PHP5.3.3之前的PHP的话,就必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。

6、正则的作用?正则的函数

(1)分割、查找、匹配、替换
(2)preg_match()、preg_match_all()、preg_replace()、preg_split()

7、变量作用域和静态变量、自建函数的返回值、外部文件的引用、内置函数

8、文件读取和写入?访问远程文件(ftp和http的区别)?其他函数?
9、设计模式、魔术函数等
10、常见的端口、http协议的工作原理和特点、请求和响应的方法、osl七层模型
11、运算符、运算符优先级

运算符优先级
递增/递减>!>算术运算符>大小比较>(不)相等比较>引用位运算符(^)>
位运算符()>逻辑与>逻辑或>三目>赋值>and>xor>or

12、类型转换和截取等?不同类型的特点、预定义函数
13、mysql数据类型特点和应用?

时间戳使用bigint
14、表引擎的特点innoDb和myisam
15、表锁(写锁和读锁)、行锁
16、事务处理
17、存储过程使用场景
18、mysql触发器
19、索引描述,普通索引,主键、唯一、联合索引的区别,对性能的影响?创建原则和注意事项

索引的使用场景
对于非常小的表,大部分情况下全表扫描效率更高
中到大型表,索引非常有效
特大型的表,建立和使用索引的代价将随之增长,可以使用分区技术来解决

原则
1最适合索引的列是出现在 WHERE子句中的列,或连接子句中的列而不是出现在 SELECT关键字后的列
2.索引列的基数越大,索引的效果越好3对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间
3.对字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间
4根据情况创建复合索引,复合索引可以提高查询效率
5避免创建过多索引,索引会额外占用磁盘空间,降低写操作效率
6.主键尽可能选择较短的数据类型,可以有效减少索引的磁盘占用提高查询效率

注意事项:
1、复合索引遵循前缀原则

索引对性能的影响
大大减少服务器需要扫描的数据量
帮助服务器避免排序和临时表
将随机I/O变顺序I/O
大大提高查询速度,降低写的速度、占用磁盘

(1)查看慢查询日志,show profile、show status、show processlist、explain
(2)mysql慢的原因

访问数据太多导致查询性能下降
确定应用程序是否在检索大量超过需要的数据,可能是太多行或列
确认 MYSQL服务器是否在分析大量不必要的数据行

避免使用如下SQL语句

查询不需要的记录,使用lmit解决
多表关联返回全部列,指定Aid, A name,B.age
总是取出全部列, SELECT*会让优化器无法完成索引覆盖扫描的优化
重复查询相同的数据,可以缓存数据,下次直接读取缓存
是否在扫描额外的记录
改变数据库和表的结构,修改数据表范式
重写SQL语句,让优化器可以以更优的方式执行查询

一个复杂查询还是多个简单查询

MysL内部每秒能扫描内存中上百万行数据,相比之下,响应数据给客户端就要慢得多
使用尽可能少的查询是好的,但是有时将一个大的查询分解为多个小的查询是很有必要的

切分查询、分解关联查询、优化count查询、优化关联查询、优化子查询()、优化group和distinct、优化limit分页、优化union查询

21、分区表的原理和分开分表的原理、延申负载均衡和复制原理
适用场景

1表非常大,无法全部存在内存,或者只在表的最后有热点数据,其他都是历史数据
2分区表的数据更易维护,可以对独立的分区进行独立的操作
3分区表的数据可以分布在不同的机器上,从而高效使用资源
4可以使用分区表来避免某些特殊的瓶颈
5可以备份和恢复独立的分区 

限制

1、一个表最多只能有1024个分区
2、5.1版本中,分区表表达式必须是整数,55可以使用列分区
3、分区字段中如果有主键和唯一索引列,那么主键列和唯一列都必须包含进来
4、分区表中无法使用外键约束
5、需要对现有表的结构进行修改
6、所有分区都必须使用相同的存储引擎
7、分区函数中可以使用的函数和表达式会有一些限制
8、某些存储引擎不支持分区
9、对于 MYISAM的分区表,不能使用 load index into cache
10、对于 MYISAM表,使用分区表时需要打开更多的文件描述符

工作原理

通过一些HASH算法或者工具实现将一张数据表垂直或者水平进行物理切分

分库分表的原理

分表方式

水平分割:表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度

适用场景

1、单表记录条数达到百万到干万级别时
2、解决表锁的问题 

水平分表缺点:

1.给应用增加复杂度,通常查询时需要多个表名,查询所有数据都需 UNION操作
2.在许多数据库应用中,这种复杂性会超过它带来的优点,查询时会增加读一个索引层的磁盘次数

垂直分表:把主键和一些列放在一个表,然后把主键和另外的列放在另一个表中
垂直分表使用场景:

1如果一个表中某些列常用,而另外一些列不常用
2.可以使数据行变小,一个数据页能存储更多数据,查询时减少I/O次数

垂直分表缺点:管理冗余列,查询所有数据需要JOIN操作
分表缺点

1、有些分表的策略基于应用层的逻辑算法,一旦逻辑算法改变,整个分表逻辑都会改变,扩展性较差
2、对于应用层来说,逻辑算法无疑增加开发成本

延伸: MYSQL的复制原理及负载均衡

Mysql主从复制工作原理

在主库上把数据更改记录到二进制日志
从库将主库的日志复制到自己的中继日志
从库读取中继日志中的事件,将其重放到从库数据中

MYSQL主从复制解决的问题

数据分布:随意停止或开始复制,并在不同地理位置分布数据备份
负载均衡:降低单个服务器的压力
高可用和故障切换:帮助应用程序避免单点失败
升级测试:可以使用更高版本的 MYSQL作为从库

22、程序功能设计的考察
PDO:可扩展性更好、支持预处理、面向对象
MYSQLI:只支持 MYSQL操作、支持预处理、面向对象和过程,效率较高
MYSQL:只支持 MYSQL数据库、没有预处理的支持、面向过程

根据考题所出功能,先分析应该存储哪些信息,设计好数据表,这一步很关键,如果编码时才发现设计有问题,会浪费大量的时间,基本没有时间改,所以要先设计好,然后根据设计好的数据表创建数据表,通常建议大家使用PDo来连接 MYSQL,最终完成编码所以一定要熟悉PDo的基本操作。

23、mvc工作原理、认识mvc框架、模板引擎、单一路口优点和缺点
延伸考点:单一入口的工作原理
优势

可以进行统一的安全性检查
集中处理程序

劣势

URL不美观(URL重写)
处理效率会稍低 

延伸考点:模板引擎的理解
工作原理:

模板引擎就是庞大的完蓍的正则表达式替换库

24、用框架如何实现自动验证?
25、常见算法、算法的基本概念?

一个问题可以有多种算法,每种算法都不同的效率
一个算法具有五个特征:有穷性、确切性、输入项、输出项、可行性

算法分析的目的在于选择合适算法和改进算法。
一个算法的评价主要从时间复杂度和空间复杂度来考虑
26、介绍常见数据结构?
27、逻辑算法
28、模拟内置函数的功能:逻辑思维能力;对PHP内置函数的熟悉程度;字符串和数组的处理能力
29、高并发的概念、案例;pv,uv\qps、吞吐量、带宽
30、高并发的问题,我们具体该关心什么?

日网站带宽=PV/统计时间(换算到秒)平均页面大小(单位KB
(总PV数
80%)/(6小时秒数*20%)=峰值毎秒请求数(QPS)
压力测试:测试能承受的最大并发;测试最大承受的QPS值

QPS=100;数据缓存+数据库的负载均衡
QPS=800;cdn加速+负载均衡
QPS=1000;页面静态化;
QPS=2000;业务分离、分布式存储;

案例

1、防盗链处理
2、减少http请求(合并文件)
3、添加异步请求
4、启动浏览器缓存和文件压缩
5、cdn加速
6、独立的图片服务器
7、页面静态化
8、并发处理
9、队列处理
10、数据库缓存
11、分库分表
12、分区操作
13、读写分离
14、负载均衡(数据库和服务器)

26、穿着、言行、公司情况、业务情况、时间重要性

27、存储过程和函数

已标记关键词 清除标记