1.什么是引用变量?在php中用什么符号定义引用变量
答题技巧:
1.php的引用变量的概念及定义方式
2.延伸:php引用变量的原理
概念:在php中应用意味着用不同的名字访问同一个变量
实例:
$a=1;
$b=&$a;
unset($b);
echo $a;//输出1
其他:[其他](https://blog.csdn.net/xmwh19996/article/details/89642431)
二,会话控制技术
1.简述cookie和session的区别以及各自的工作机制,存储位置等,简述cookie的优缺点
考点:会话控制技术
其他:[其他](https://blog.csdn.net/studyphp123/article/details/83586775)
设置:setcookie(键名,值,过期时间,路径,域名,是否安全性传递https)
读取:$_COOKIE
删除:
三,开发环境及配置相关考点
1.你是否使用过版本控制软件?如果有,您用的版本控制软件的名字是什么?
考点:对于版本控制软件的了解
延伸:php的运行原理
延伸:php的常见的配置项
大致的版本控制软件Fenwick两类:集中式和分布式
其他:[其他](https://blog.csdn.net/studyphp123/article/details/83624094)
四,正则表达式考察点
正则表达式的作用:分割,查找,匹配,替换字符串
分隔符:正斜线,hash符号(#)以及取反符号(~)
通用原子:\d,\D,\w,\W,\s,\S
元字符:. * ? $ + {n} {n,} {n,m} [] () [^] | [-]
后向应用
贪婪模式
其他:[其他](https://blog.csdn.net/studyphp123/article/details/83515629?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161775198116780262545270%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161775198116780262545270&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-83515629.pc_v2_rank_blog_default&utm_term=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F)
五,自定义函数及内部函数考点
考点:
1.变量的作用域和静态变量
1)变量的作用域也称为变量的范围,变量的范围就是它生效的范围。大部分php变量只有一个单独的范围。
$outer='str';
function fun(){
echo $outer; //这个无法访问到外部的变量(局部无法访问内部的变量)
}
如果想要局部访问全局变量可以使用global变量
$outer='str';
function fun(){
global $outer;
echo $outer; //现在可以访问到全局变量了
}
2)静态变量:
仅在局部的函数域中存在,但当程序执行离开此作用域的时候,其值并不会消失
静态变量的属性:
a.关键词static
b.仅初始化一次
c.初始化时需要赋值
d.每次执行函数该值会保留
e.static修饰的变量时局部的,仅在函数内部有效
f.可以记录函数的调用次数,从而可以在某些条件下终止递归
function fun(){
statis $a=1;
echo $a++;
}
fun(); //1
fun(); //2
fun(); //3
2.延伸:函数的参数及参数的引用传递
3.延伸:函数的返回值及引用返回
4.延伸:外部文件的导入
5.系统内置函数
1)数组处理函数
array_keys()
array_values()
array_diff()
array_intersect()
array_merge()
array_shift()
array_unshift()
array_pop()
array_push()
sort
重点:字符串函数和数组函数
其他:[其他](https://blog.csdn.net/rebekah_/article/details/104430757)
六,面向对象考点
1.考点:
php的类权限控制修饰符
public,protected,private
延伸:面向对象的封装,继承和多态
封装指的是成员访问权限,继承:单一继承(php的继承是单一继承),只能继承一个类
方法重写
class A{
public function text(){}
}
class B extends A{
public function text(){//这里会覆盖掉A类中的方法
}
}
//如果不想让父类的方法覆盖可以使用parent::方法名()
class B extends A{
public function text(){//这里会覆盖掉A类中的方法
parent::text();
.......
}
}
延伸:魔术方法
延伸:设计模式
其他:[其他](https://blog.csdn.net/rebekah_/article/details/104618081)
七,网路协议考察点
1.考点
1)http协议状态码
五类响应状态码
1XX //信息类状态码,主要接受请求,表示接受请求正在处理
2XX //成功状态码,请求正常处理完毕
3XX //重定向
4XX //客户端错误,服务器服务处理请求
5XX 服务器错误状态码
2)延伸:OSI七层模型
物理层: 建立/维护/断开物理连接
数据链路层: 建立逻辑连接/进行硬件地址寻址/差错校验等功能
网络层: 进行逻辑地址寻址,实现不同网络间的路径选择
传输层: 定义传输数据的协议端口号,以及流控和差错校验
协议有TCP和UDP,数据包一单离开网卡即进入网络传输层
会话层: 建立/管理/结束会话
表示层: 数据的表示/安全/压缩
应用层: 网络服务与最终用户的一个接口
协议有: FTP/HTTP/TFTP/SMTP/SNMP/DNS/TELNET/HTTPS/POP3/DHCP
3)延伸:http协议的工作特点和工作原理
工作特点: 基于B/S模式,
通信开销小/简单快速/传输成本低
使用灵活/可使用超文本传输协议
节省传输时间
无状态
工作原理: 客户端发送请求给服务器,创建一个TCP连接,指定端口号,默 认80,连接到服务器,服务器监听到浏览器请求,一旦监听到客户 端请求,分析请求类型后,服务器会向客户端返回状态信息和数据 内容
4)延伸:http协议常见请求/响应头和请求方法
a.http协议常见请求/响应头
Cookie等
b.http协议的请求方法
get,post,head,options,put,delete,trace
延伸考点
http协议的get和post请求方法的区别
aa.post刷新的时候会被重新提交
bb.get可以被收藏为书签,post不能被收藏为书签
cc.get可以被浏览器缓存,post不能被浏览器缓存
dd.get和post的编码不同
ee.get的数据可以保存到历史当中,post则不能被保存
ff.数据类型
gg.数据安全性
5)延伸:https协议的工作原理
https是一种基于ssl/tls的http协议,所有的http数据都是在ssl/tls协议封装之上传输的
https协议在http协议的基础上。添加了ssl/tls握手以及数据加密传输,也属于应用层协议。
6)延伸:常见的网络协议含义以及端口
ftp 端口21
teinet 远程登录 端口23
smtp 发送邮件 端口25
pop3 接受邮件 端口110
http 超文本传输协议 端口80
DNS 域名解析服务 端口53
其他:[其他](https://blog.csdn.net/weixin_39534845/article/details/95099934)
八,文件以及目录处理相关考点
实例1:
//打开文件
//将文件的内容读取出来,在开头加入hello
//将拼接好的字符串协会到文件当中
$file='./hello.txt';
$handel=fopen($file,'r');
$content=fread($handel,filesize($file));
$content="HELLO".$content;
fclose($handel);
$handel=fopen($file,'w');
fwrite($handel,$content);
fclose($handel);
其他:[其他](https://blog.csdn.net/rebekah_/article/details/104554260)
九,运算符考察点
1.考点
php的运算符的错误控制符
延伸:php所有的运算符考点
延伸:运算符的优先级
延伸:比较运算符
延伸:递增/递减运算符
延伸:逻辑运算符
其他:[其他](https://blog.csdn.net/rebekah_/article/details/104377247)
十,流程控制考察点
1.考点
php的遍历数组的丧钟方式以及各自的区别
延伸:分支结构
其他:[其他](https://blog.csdn.net/heima201907/article/details/106275308)
十一,常量以及数据类型考察点
1.考点
1)php的字符串的定义方式以及各自区别
单引号
双引号
heredoc()和newdoc()
2)延伸:数据类型及常量
常量:
定义方式:const和define
const更快,是语言结构,define是函数
const可以定义类常量,define不能用域类常量的定义
预定义常量:
FILE 默认常量,是指PHP程序文件名及路径;
LINE 默认常量,是指PHP程序的行数;
DIR 目录
__FUNCTION__所在函数体里里面的函数名称
CLASS 类名
TRAIT
METHOD 类名+方法名
NAMESPACE
其他:[其他](https://blog.csdn.net/rebekah_/article/details/104294558)
十二,JavaScript和jQuery基础考点
其他:[其他](https://blog.csdn.net/weixin_34270865/article/details/93571710)
十三,AJAX基础内容考察点
ajax技术利用了什么协议?简述ajax的工作机制
考点:
ajax的工作原理
jq的工作原理
十四,MySQL数据库基础考察点
1.考点:
mysql数据类型
整数类型
UNSIGNED 非负数
延伸:mysql基础操作
延伸:mysql搜索引擎
延伸:mysql锁机制
延伸:mysql十五处理,存储过程,触发器
其他:[其他](https://blog.csdn.net/weixin_33950035/article/details/93232545)
十五,MySQL创建高性能的索引考察点
1.考点
1)mysql索引的基础和类型
索引基础:类似与书的页码
索引对性能的影响
大大减少服务器需要扫描的数据量。
帮助服务器避免排序和临时表。
将随机I/O变顺序I/O。
大大提高查询速度。
降低写的速度(不良影响)。
磁盘占用(不良影响)。
索引的使用场景:
对于非常小的表,大部分情况下全表扫描效率更高。
中到大型表,索引非常有效。
特大型的表,建立和使用索引的代价会随之增大,可以使用分区技术来解决。
索引的类型
2)延伸:mysql索引的创建原则
3)延伸:mysql索引的注意事项
其他:[其他](https://blog.csdn.net/weixin_38399962/article/details/80081913)
十六,MySQL的SQL语句编写考察点
1.考点:
mysql的关联update语句
关联更新:update a,b set a.c1=b.c1,a.a2=b.a2 where a.id=b.id
update a inner join b on a.id=b.id set a.c1=b.c1,a.c2=b.c2 where …
实例1:
update a,b set a.c1=b.c1,a.c2=b.c2 where a.id=b.id and b.age>50
update a inner join b on a.id=b.id set a.c1=b.c1,a.c2=b.c2 where b.age>50
延伸:mysql的关联查询语句
交叉连接(CROSS JOIN)
select * fron a,b(,c)
select * fron a cross join b (cross join c)
内连接(INNER JOIN)
select * from a,b where a.id=b.id
select * from a inner join b on a.id=b.id
内连接的分类:
等值连接: on a.id =b.id
不等值连接: on a.id=b.id
自连接
外连接(LEFT JOIN/RIGHT JOIN)
联合查询(UNION与UNION ALL)
select * from a union select * from b union
就是把多个结果集集中在一起,union前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录行会合并
如果使用union all ,不会合并重复的记录行
十五,MySQL的查询优化考察点
其他:[其他](https://blog.csdn.net/weixin_38399962/article/details/80107633?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161792413716780262593134%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161792413716780262593134&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-8-80107633.pc_v2_rank_blog_default&utm_term=%E9%9D%A2%E8%AF%95)
十六,MySQL的高可扩展和高可用考察点
1.考点
分区表的原理
分库分表的原理
延伸:mysql的复制原理及负载均衡
其他:其他
十七,PHP框架基础-MVC框架基本工作原理
1.考点
MVC工作原理
常见MVC框架
延伸:单一入口的工作原理
延伸:模板引擎的理解
其他:其他
其他
十八,常见框架特性考察点
其他:[其他](https://blog.csdn.net/weixin_30788619/article/details/97011801)
十九,常见算法考察点
考点:
冒泡排序原理和实现
延伸:算法的概念
一个问题可以由多种算法,每种算法都由不同的效率
算法的五个特征:有穷行,确切性,输入项,输出项可行性
延伸:时间复杂度和空间复杂度的概念
时间复杂度:算法执行的时间
空间复杂度:算法需要运行的内存空间
时间复杂度举例:
常数阶:O(1)
线性阶:O(n)
平(立)方阶:O(n2)/O(n3)
延伸:常见排序算法
冒泡排序,直接插入排序,希尔排序,选择排序,快速排序,堆排序,归并排序
冒泡排序的原理:
两两相邻的数进行比较,如果反序就交换,否则不见换
直接插入排序:
每次从无序列表中取出第一个元素,把他插入到有序表的合适位置,使有序表仍然有序
延伸:常见查找算法
其他:其他
二十,常见数据结构考察点
写出下面数据结构的特征:
stack
栈,和队列相似,一个带有数据存储特性的数据结构
特性:存储数据是先进后出的,栈只有一个出口,只能从栈的顶部郑家和移除元素
heap
堆,一般情况下,堆叫二叉堆,近似完全二叉树的数据结构
特性:子节点的键值或者索引总是小于它的父节点,每个节点的左右子树又是一个二叉堆,根节点最大的堆叫最大堆或者大根堆,最小的叫最小堆或者是小根堆
list
线性表,由零个或者是多个数据元素组成的有限序列
特性:线性表是一个序列,0个元素构成的线性表是空表,第一个元素无先驱,最后一个元素无继承,其他元素都只有一个先驱和后继,有长度,长度是元素的个数,长度有限
doubly-linked-list
双向链表
特性:每个元素都有一个对象,每个对象有一个关键字key和两个指针(next和prev)
queue
队列
特性:先进先出。并发中使用,可以安全将对象从一个任务传给另一个任务
array
数组,最简单而且应用最广泛的数据结构之一
特性:使用连续的内存来存储,数组中的所有元素是必须是相同的类型或者是类型的衍生(同质数据结构),元素可以通过下表直接访问
linkedList
链表,线性表的一种,最基本,最简单,也是最常用的数据结构
特性,元素之间的关系是一对一的关系(除了第一个和最后一个元素,其他元素都是首尾相连),顺序存储结构和链式存储结构两种存储方式
二十一,其他逻辑算法考察点
实例:1,1,2,3,5,8,13,21,34…求第三十的数是多少,请用伪代码描述实现方法。
a r r = [ 1 , 1 ] ; f o r ( arr=[1,1]; for(arr=[1,1];for(i=2;i < 30 ; i<30;i<30;i++){
a r r [ arr[arr[i]=a r r [ arr[arr[i-1]+a r r [ arr[arr[i-2];
}
var_dump($arr);
实例:
其他:[其他](https://blog.csdn.net/a8240357/article/details/86589148)
二十二,模拟内置函数实现考察点
1.考点
逻辑思维能力
对php内置函数的熟悉程度
字符串和数组的处理能力
二十三,高并发和大流量解决方案考察点
真题:php如何解决网站大流量与高并发的问题?
1.考点
高并发架构的相关概念
高并发概念:并发,高并发,通常是指并发访问。也就是在某个时间点,有多少个访问同事到来。
高并发的问题,我们集体该关心什么?
qps:每秒钟请求或查询的数量,在互联网领域,指每秒响应请求数(http请求)
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
响应时间,从请求发出到收到响应应花费的时间,列如系统处理一个http请求需要100ms,这个100ms激素hi系统的响应时间
pv:综合浏览量,即页面浏览量或者是点击量,一个访客在24小时之内访问的页面的数量
同一个人浏览你的网站的同一页面,只记作一次pv
uv:独立访客,即一定的时间范围内相同访客多次浏览网站,只计算为1个独立访客
带宽:计算带宽大小需要关注两个指标,峰值流量和页面的平均大小
日网站的带宽=pv/统计时间(换算为秒)平均页面大小(单位kb)8
qps不等于并发连接数
qps是每秒http请求数量,并发连接数是系统同时处理的请求数量
峰值每秒请求数(qps)=(总pv数80%)/(6小时秒数20%)
压力测试:测试能承受的最大的并发数,测试最大承受的qps值
测试工具:ab,wrk,http_load
ab:可以创建多个并发线程,模拟多个访问者同时对某一url地址进行访问。它的测试目标是基于url的,因此,它即可以用来测试apache的负载压力,耶可以测试nginxlighthttp,tomcat,iis等其他web服务器的压力
模拟并发请求100次,总共请求5000次
ab -c 100 -n 5000 网址
-c表示并发请求数,-n表示请求总数
ab工具使用的时候的注意事项
测试机器与被测试的机器要分开
不要对线上的服务做压力测试
观察测试工具ab所在的机器以及被测试的前端机的cpu,内存,网络等都不超过最高限度的75%
不同qps下的解决方案
优化实例:
qps达到100
假设关系型数据库的每次请求在0.01秒内完成
假设单页面只有一个sql查询,那么1000ps意味着1s内完成100次请求,但是此时我们并不能保证数据库查询能完成100次
方案:数据库缓存层,数据库的负载均衡
qps达到800
假设我们使用百兆带宽,意味着网站出口的实际带宽是8M左右
假设每个页面只有10k,在这个并发条件下,百兆带宽已经吃完
方案:cdn加速,负载均衡
qps达到1000
静态html缓存
qps达到2000
这个级别下。文件系统访问锁都成了灾难,
方案:做业务分离,分布式存储
高并发解决方案案列
流量优化:防盗链处理
前端优化:减少http请求,添加异步请求,启用浏览器缓存,文件压缩,cdn加速,建立独立的图片服务器
服务端优化:页面静态化,并发处理,队列处理
数据库优化:数据库缓存,分库分表,分区操作(可以使用工具完成),读写分离,负载均衡
web服务器优化:负载均衡(利用反向代理,lvs实现负载均衡)
二十四,web资源防盗链
1.概念
什么是防盗链
盗链:在自己的页面上展示一些并不在自己服务器上的内容
防盗链的工作原理
防盗链的实现方法
referer
使用加密签名解决
使用第三方模块httpAccessKeyModule实现nginx防盗链
模块的开启与关闭
accesskey on|off 模块开关
加密的方式
accesskey_hashmethod md5 | sha-1 签名加密方式
参数名称
accesskey_arg GET参数名称
加密规则
accesskey_signature
配置
服务端
#注意首先要安装模块
location ~.*.(gif|jpg|png|flv|swf|rar|zip)$
{
accesskey on;
accesskey_hashmethod md5;
accesskey_arg sign;
accesskey_signature “jason$remote”;
}
客户端
s i g n = m d 5 ( ′ j a s o n ′ . sign=md5('jason'.sign=md5(′jason′._SERVER[‘REMOTE_ADDR’]);
<img src="www.yhj.com/img/a.png?sign='.$sign.'">
2.
防盗链也可以对目录防盗链
二十五,减少http请求
性能黄金法则
只有10%-20%的最终用户响应时间花在接受请求的http文档上,剩下的80%-90%的时间花在html文档所引用的所有组件(图片,js,css)进行的http请求上
http连接产生的开销
域名解析–tcp连接–发送请求–等待–下载资源–解析时间(响应时间)
1.图片使用图片地图
2.图片使用css sprites
属性:backgroud-position:x轴 y轴;
3.合并css
4.合并js
5.图片以base64的编码方式将图片直接嵌入到网页中,而不是从外部载入
二十六,浏览器缓存和压缩优化技术
1.缓存的分类
http缓存模型中,如果请求成功会有三种情况
200 from cache:直接从本地缓存中获取响应,最快速,最剩流量,因为根本没有向服务器发送请求
304 not modified:协商缓存,浏览器在本地没有命中的情况下,请求头中发送一定的校验数据到服务端,如果服务端数据没有改变浏览器从本地缓存响应,返回304。快速,发送的数据很少,只返回一些基本的响应头信息,数据量很小,不发送实际的响应体
200 ok :以上两种缓存全部失败,服务器返回完整的响应,没有用到缓存,相对较慢。
2.本地缓存相关设置
2.1相关Header:
Pragma:HTTP10时代的遗留产物,该字段被设置为 no-cache 时,会告知浏览器禁用本地缓存,即每次都向服务器发送请求。
Expires:HTTP1.0时代用来启用本地缓存的字段,expires 值对应一个形如 Thu,31 Dec 2037 23:55:55 GMT 的格式威治时间,告诉浏览器缓存实现的时刻,如果还没到该时刻,标明缓存有效,无需发送请求。
Cache-Control:HTTP1.1针对 Expires 时间不一致的解决方案,运用 Cache-Control 告知浏览器缓存过期的时间间隔而不是时刻,即使具体时间不一致,也不影响缓存的管理。
Cache-Control 给的是一个秒数,即该文件多少秒后过期,不说时间点,这样就没有时间对比的问题。
Cache-Control 相关设置:
no-store:禁止浏览器缓存响应
no-cache:不允许直接使用本地缓存,先发起请求和服务器协商
max-age=delta-seconds:告知浏览器该响应本地缓存有效的最长气象,以秒为单位【如:max-age=3600,表示可以缓存3600s(1小时)】
如果三个被同时设定,则优先级如下:
优先级:Pragma > Cache-Control > Expires
其他:[其他](https://blog.csdn.net/studyphp123/article/details/84255490)
二十七, CDN加速
什么是cdn
内容分发网络
在网络各处的节点放置节点服务器
使用cdn的优势
cdn的工作原理
传统访问:
用户在浏览器输入域名发起请求–>解析域名获取服务器的ip地址–>根据ip地址找到对应的服务器–>服务器响应并返回数据
使用cdn
用户发起请求–>只能dns的解析(根据IP判断地址位置,接入网类型,选择路由最短和负载最轻的服务器)–>取得缓存服务器IP–>把内容返回给用户(如果缓存中有)–>向源站发起请求–>将结果返回给客户–>将结果存入缓存服务器
cdn的适用场景
cdn的实现
使用squid反向代理,或者nginx等的反向代理
二十八, 建立独立的图片服务器
1.概念
独立的必要性
分担web服务器的i/o负载-将耗费资源的图片服务分离出来,提高服务器的性能和稳定性
能够对专门的图片服务器进行优化-为图片服务器设置有针对性的缓存方案,减少带宽成本,提高访问速度
提高网站的可拓展性-通过增加图片服务器,提高图片的吞吐能力
采用独立的域名
统一域名下浏览器的并发连接数有限,突破浏览器连接数的限制
由于cookie的原因,对缓存不利,大部分web cache都只缓存不带cookie的请求,导致每次的图片请求都不能命中cache
独立后的问题
如何进行图片的上传和图片的共享
NFS共享方式
利用ftp同步
二十九, 动态语言静态化
其他:其他
三十, 动态语言层的并发处理
其他:其他
,9-10 Mysql数据层的优化
1.数据类型的优化
2.索引优化
其他:
1.range(0,1000);生成一个0到1000的数组
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_44432032/article/details/120930534
内容来源于网络,如有侵权,请联系作者删除!