1.COW机制
Copy On Write 写时复制。变量在写入时才真正复制一份内存进行修改。
2. PHP字符串的4种表达方式
3. 不要用等号去比较浮点数
因为计算机在计算浮点数时,会将浮点数转换为二进制数,难免会造成精度丢失。
4. FALSE的七种情况
0,0.0,false,'','0',[],null
整型0,浮点0.0,布尔false,空字符串,0字符串,空数组,NULL
5. NULL的三种情况
直接赋值为NULL、未定义的变量、unset销毁的变量
6. 运算符
PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
运算符优先级:递增/递减 > ! > 算术运算符 > 大小比较 > (不)相等比较 > 引用 > 位运算符( ^ ) > 位运算符( | ) > 逻辑与 > 逻辑或 > 三目 > 赋值 > and > xor > or
括号可以增加代码可读性
递增/递减运算符不影响布尔值
递增NULL值为1,递减NULL值没有效果
逻辑运算符短路效应:&& 或 || ,当左边部分符合条件是,右边部分将不会执行
7. PHP遍历数组的三种方式
使用for循环:只能遍历索引数组
使用foreach循环:可以遍历索引和关联数组,会reset()
使用while、list()、each()组合循环:可以遍历索引和关联数组,不会reset()
8. include和require区别
无论require位置如何,指定文件都将包含到出现require的脚本中。例如,即时require放在计算为假的if语句中,依然会包含指定文件
加载过程中,如果未找到文件则include会发出一条警告,而require会发出一个致命错误
require(include)/require_once(include_once)唯一区别是后者PHP会检查该文件是否已被包含过,如果是则不会再次包含
9. 字符串函数
10. 数组函数
11. 可变函数
如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。
function foo() {
echo "In foo()<br />\n";
}
$a = 'foo';
$a(); // 等于foo()
12. 正则表达式
作用:分割、查找、匹配、替换字符串
preg_match($pattern, $subject, $match):执行匹配正则表达式,匹配一次,返回pattern的匹配次数
preg_match_all($pattern, $subject, $match):执行一个全局正则表达式匹配,全局匹配,返回全局匹配的次数
preg_replace($pattern, $replacement, $subject):执行一个正则表达式的搜索和替换,返回全部结果
preg_filter($pattern, $replacement, $subject):执行一个正则表达式的搜索和替换,仅仅返回(可能经过转化)与目标匹配的结果
preg_grep($pattern, $subject):返回给定数组$subject中与$pattern相匹配的元素组成的数组
preg_split($pattern, $subject):类似explode()函数,通过一个正则表达式分隔字符串
preg_quote($str):转义正则表达式字符
13.会话控制
为什么要使用会话控制技术?因为HTTP协议是无状态的,为了保存用户信息,所以使用会话控制技术。
Cookie:存储在客户端,不占用服务器资源,但是不安全
Session:存储在服务端,占用服务器资源,比较安全
Session是基于Cookie的,用户禁用Cookie也可以使用Session,可以用session_name()、session_id()函数或SID常量传递SessionID (SID在用户开启Cookie时为空,关闭时有值)
<a href="1.php?<?php echo session_name() .'=' .session_id(); ?>">...</a>
<a href="1.php?<?php echo SID; ?>">...</a>
14.文件函数
15.HTTP协议
特点
HTTP协议是无状态、无连接的;基于B/S模式;通信开销小、简单快速、传输成本低;使用灵活、可使用超文本传输协议;节省传输时间。
工作原理
客户端发送请求给服务器,创建一个TCP连接,指定端口号,默认为80,连接到服务器,服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容。
HTTP请求方法
HTTP状态码
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
常见HTTP状态码
200 请求成功
301 资源(网页等)被永久转移到其它URL
404 请求的资源(网页等)不存在
500 内部服务器错误
16.OSI七层模型
16.OSI七层模型
17.Mysql整数类型
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT
属性:UNSIGNED
长度:可以为整数类型指定宽度,对大多数应用是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数。例如:INT(3):指定该字段为3位,如果不足,则可以为0填充。e.g:001
18.Mysql索引
索引的影响
索引的使用场景
索引的类型
注意
19.关联查询
六种关联查询
1.交叉连接(CROSS JOIN)
SELECT * FROM A,B(,C)
SELECT * FROM A CROSS JOIN B (CROSS JOIN C)
2.内连接(INNER JOIN)
SELECT * FROM A,B WHERE A.id=B.id
SELECT * FROM A INNER JOIN B ON A.id=B.id
3.外连接(LEFT JOIN/RIGHT JOIN)
4.联合查询(UNION与UNINO ALL)
5.全连接(FULL JOIN):Mysql不支持全连接,可以使用LEFT JOIN 和 RIGHT JOIN 联合使用
SELECT * FROM A LEFT JOIN B ON A.id=B.id UNION SELECT * FROM A RIGHT JOIN B ON A。id=B.id
20.Mysql查询优化
查找分析查询速度慢的原因
21.Mysql分表和分区
分区
适用场景
缺点
分表:垂直分表/水平分表
22.高并发和大流量解决方案
相关概念
高并发:通常一个系统的日PV在千万以上,有可能是一个高并发的系统
PV:Page View 综合浏览量,即页面浏览量或点击量。同一个人浏览网站同一个页面,只记作一次PV
UV:独立访客(Unique Visitor),即一定时间范围呢相同的访客多次访问网站,只计算一个独立访客
QPS:每秒钟请求的查询数量,在互联网领域,指每秒响应请求数(HTTP请求)
吞吐量:单位时间内处理的请求数量(通常由QPS与并发数决定)
响应时间:从请求发出到收到相应花费的时间。例如系统处理一个HTTP请求需要100ms,100ms就是响应时间
日网站带宽=PV / 统计时间(s)*平均页面大小(KB)*8
峰值每秒请求数(QPS)=(总PV数*80%)/(6小时秒数*20%) 80%的访问量集中在20%的时间
压力测试:测试能承受的最大并发,QPS值 使用ab等压力工具
解决方案
流量优化:防盗链处理
前端优化:减少HTTP请求、添加异步请求、启用浏览器缓存和文件压缩、CDN加速、建立独立图片服务器
服务端优化:页面静态化、并发处理
数据库优化:数据库缓存、分库分表、分区、读写分离、负载均衡
web服务器优化:负载均衡
23.流量优化——web资源防盗链
相关概念
盗链:在自己的页面上展示一些不在自己服务器的内容。获得他人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。
防盗链:防止别人通过一些技术手段绕过本站的资源展示页面,盗用本站的资源,让绕开本站资源展示页面的资源链接失效。
防盗链工作原理:通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。一旦检测来源不是本站即进行阻止或者返回指定的页面。
解决方案
Rererer
Nginx模块ngx_http_referer_module用于阻挡来源非法的签名请求。
Nginx指令valid_referers,全局变量$invalid_referer
valid_referers none | blocked | server_names | string ... ;
none:"Rerferer"来源头部为空的情况
blocked:"Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值不已http://或https://开头
server_names:"Referer"来源头部包含当前的server_names,允许列表
加密签名
使用第三方模块HttpAccessKeyModule实现
accesskey on | off 模块开关
accesskey_hashmethod md5 | sha-1 签名加密方式
asccesskey_arg GET参数名称
accesskey_signature 加密规则
24.前端优化——减少HTTP请求
相关概念
性能黄金法则:只有10%-20%的最终用户响应时间花在接收请求的HTML文档上,剩下的80%-90%的时间花在HTML文档所引用的所有组件(图片、script、css、flash等等)进行的HTTP请求上
HTTP连接产生的开销:域名解析——TCP连接——发送请求——等待——下载资源——解析时间
解决方案
改善响应时间的最简单途径就是减少组件的数量,并由此减少HTTP请求的数量
图片地图:允许在一个图片上关联多个URL,目标URL的选择取决于用户单击了图片上的哪个位置。使用<map><area>标签
CSS精灵:CSS Sprites,通过使用合并图片,通过指定css的backgroud-image和backgroud-position来显示元素
合并脚本和样式表
图片使用Base64编码减少页面请求数:采用Base64的编码方式将图片直接嵌入到网页中,而不是从外部载入
25.前端优化——启用浏览器缓存和数据压缩
相关概念
缓存分类
200 from cache:本地缓存,直接从本地缓存中获取相应,最快速,最省流量,没有向服务器发送请求
304 Not Modified:协商缓存,浏览器在本地没有命中的情况下,请求头中发送一定的校验数据到服务端,如果服务端没有改变,浏览器从本地缓存相应,返回304。快速,发送数据少,只返回一些基本的响应头信息,数据量很小,不发送实际相应体
本地缓存相关Header
Cache-Control:HTTP1.1,告知浏览器缓存过期的时间间隔,而不是时刻。
no-store:禁止浏览器缓存相应
no-cache:不允许直接使用本地缓存,先发起请求和服务器协商
max-age = delta-seconds:告知浏览器该相应本地缓存有效的最长期限,以秒为单位
协商缓存相关Header
Last-Modified:通知浏览器资源的最后修改时间
If-Modified-Since:得到资源的修改时间后,会将这个信息通过If-Modified-Since提交到服务器做检查,如果没有修改,返回304
ETag:HTTP1.1,文件指纹标识符,如果文件内容修改,指纹会改变
If-None-Match:本地缓存失效,会携带此值去请求服务端,服务端判断该资源是否改变,如果没有改变,直接使用本地缓存,返回304
适合本地缓存的内容(长期不变)
不变的图像,如LOGO,图标
js、css静态文件
可下载的内容,媒体文件
适合协商缓存的内容(经常改变)
HTML文件
经常替换的图片
经常修改的js、css文件。可以加入文件签名来拒绝缓存(index.css?签名、index.签名.js)
不建议缓存的内容
用户隐私等敏感数据
经常改变的API数据接口
解决方案
Nginx
本地缓存配置
expires指令:通知浏览器过期时长
expires time; time为负值时表示Cache-Control:no-cache; 为正值或0时,表示Cache-Control:max-age=指定时间
协商缓存配置
Etag:指定签名 etag on | off; 默认是on
资源压缩
gzip
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!