网络协议

计算机网络的五层协议:物理层、数据链路层、网络层、运输层、应用层
计算机网络的七层协议(OSI):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP(是一个协议族,非单个协议):网络接口层、 IP层、传输层、应用层
网线与集线器属于物理层
网卡与交换机属于数据链路层
路由器属于网络层
TCP和UDP
tcp面向链接的字节流服务,对系统资源要求较多,程序结构复杂,保证数据的正确性和顺序性
udp是无链接的,面向数据报,对系统资源要求较少,程序结构简单,不能保证数据的正确性和顺序性
网站安全与防御
sql注入防治方法
:使用例如PDO的预处理,使用或者编写相似mysqli_real_escape_string的方法对sql的特殊字符进行转义
xss(cross site script)跨站脚本攻击
:将外部脚本植入到页面中
防治方法
:htmlspecialchars()转义特殊字符为字符实体,strip_tags()过滤html标签, addslashes(可转义单双引号反斜杠NULL) 在特殊字符前面加反斜杠进行转义
csrf(cross-site request forgery)跨站请求伪造
:伪造受信任的用户信息来请求网站
防治方法
:请求附加随机token进行校验,或验证码
基础算法相关
-
冒泡排序(时间复杂度:o(n方))php
for($i = 0; $i < count($arr); $i++)
for($j = 0; $j < count($arr) - 1 - $i; $j++)
if($arr[$j] < $arr[$j+1]) 二者交换
-
选择排序(时间复杂度:o(n方))html
for($i = 0; $i < count($arr) - 1, $i++)
$min = $i;
for($j = $i + 1; $j < count($arr); $j++)
if($arr[$min] > $arr[$j])
$min = $j;
将最小值与当前的第i位置内容交换
- 快速排序思想:经过一趟排序将序列分红两部分,一部分全部数据比另外一部分全部数据小,而后在这两个序列的内部再分别进行快速排序操做,直到最后造成一个有序序列
- 二分插入排序思想(以前的序列为有序):插入第i个元素时,对前面的0~i-1进行折半,当前元素与中间元素比较,若是小,前半部分再次折半,若是大,后半部分进行折半,直到最后left>right,而后把目标位置到i-1的全部元素总体后移,把当前元素放进去
- 顺序查找
- 二分法查找(折半查找):将序列分为两部分,找到序列的中间值,若是查找值大于中间值,继续对右半部分进行折半,若是查找值小于中间值,对左半部分进行折半,直到找到或front>end结束,时间复杂度O(log2n)以2为底n的对数
设计模式
-
MVC是一种设计框架,而不是设计模式,框架是比模式更高的概念
model负责数据逻辑
controller负责用户交互
view负责数据显示
流程:用户对控制器的某个方法发出请求,控制器调用相应的模型返回数据,而后将数据渲染到视图中返回给用户
-
1) 单例模式
i. 私有化构造方法和__clone方法
ii. 提供公有的静态的方法返回实例
iii. 提供私有的静态属性保存实例
-
2) 简单工厂模式(重点在建立不一样对象,做用就是用来建立对象的) - 例如一个计算器的加减乘除求余取整
i. 定义抽象基类让子类分别继承并实现相应方法
ii. 定义Factory工厂类里面提供静态方法用于根据不一样的参数实例化相应的子类对象
-
3) 策略模式(重点在于实例化不一样类的解决策略不一样,做用是根据不一样的状况调用相应的策略或算法) - 例如qq普通用户 vip svip购买皮肤的优惠策略
i. 定义抽象基类让子类分别继承并实现相应的方法
ii. 根据不一样的场景实例化相应的类,而后调用其中的方法获取结果
-
4) 观察者模式
i. 须要有一个抽象的主题接口和一个抽象的观察者接口
ii. 实现一个主题,实现多个观察者
iii. 实例化主题,而后调用主题的方法并将不一样的观察者对象实例化传入,在主题的方法中保存传入的观察者对象到一个属性,在主题中定义另外的方法经过保存观察者对象调用观察者的方法
名词解释
ORM
模型:将表映射到类,将行记录映射到实例对象,将字段映射到对象的属性
OOP
:面向对象编程
nosql
:redis、MongoDB、memcached
大流量高并发网站解决思路
防盗链(别人网站上连接着你的服务器上的的资源),验证来源:$_SERVER['HTTP_REFERER'] apache或者nginx进行相关配置
CDN加速
减小http请求,添加异步请求
启用浏览器缓存
代码压缩(去除空白符)
页面静态化:信息变动不是很频繁的页面进行静态化处理,生成html文件
数据缓存(数据库缓存redis,文件缓存)
使用Nginx,负载均衡
-
mysql数据库优化
字段数据类型优化
索引优化
SQL语句优化
存储引擎优化
表结构设计优化
分表分库分区
主从复制,读写分离
COOKIE 和 SESSION
session与cookie都是会话技术,默认状况下session在客户端依赖于cookie
cookie保存在客户端,保存的是字符串,session保存在服务端,保存的是对象
cookie安全性低,可被拦截或从本地分析获得,session安全性高
session保存在服务器上,会占用服务器的资源,理论上大小没有限制,和服务器内存有关
单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多20个cookie
登陆信息等重要信息存放为session,其余信息如需保留,能够存在cookie中
include 和 require
引入文件,include在用到时加载,require在一开始就加载
include引入文件出现错误,会给出警告,并继续执行下面代码,require引入文件出现错误,报出致命错误并终止当前程序运行
MyISAM 和 InnoDB
MyISAM不支持事务和外键操做,InnoDB支持事务处理和外键
MyISAM是表级锁,InnoDB是行级锁
执行大量的select MyISAM更好,执行大量的insert update用InnoDB更好
global 和 $GLOBALS
$GLOBALS['var'] 是外部的全局变量$var自己。
global $var 是外部$var的同名引用或者指针
empty 和 isset
-
empty如下条件会被认为空
""
(空字符串)
0
(做为整数的0)
0.0
(做为浮点数的0)
"0"
(做为字符串的0)
NULL
FALSE
array()
(一个空数组)
$var;
(一个声明了,可是没有值的变量)
-
isset如下条件会被认为存在
get 和 post
get主要用于获取数据,post主要用于提交数据
get提交参数追加在url后面,post经过http body提交
get的url会有长度上的限制,post传递数据理论上是无限
get提交信息明文显示在url上,不够安全,post相对来讲比较安全
get提交能够被浏览器缓存,post不会被浏览器缓存
static 和 self
self 能够用于访问类的静态属性、静态方法和常量,但 self 指向的是当前定义所在的类,这是 self 的限制。
static 也能够用于访问类的静态属性、静态方法和常量,static 指向的是实际调用时的类。
当进行非静态方法调用时,该类名(static指向的类名)为该对象所属的类,即实际调用时的对象所属的类。
一次完整的HTTP请求过程
1.首先域名解析(DNS解析)
:浏览器解析域名(主机名)为相应的IP地址
2.创建TCP链接
:三次握手
客户端:你能听到我说话吗?
服务器:我能听到,你能听到我说话吗?
客户端:我也能,那我开始发送数据喽。。
3.浏览器向服务器发起http请求
4.服务器响应http请求,返回html代码
5.浏览器解析html代码并请求html中的资源
6.浏览器对页面进行渲染而后展现给用户
7.关闭TCP链接
:四次挥手
- 客户端:“兄弟,我这边没数据要传了,咱关闭链接吧。”
- 服务端:“收到,我看看我这边有木有数据了。”
- 服务端:“兄弟,我这边也没数据要传你了,咱能够关闭链接了。”
- 客户端:“好嘞。”

