1、框架底层原理
1.1、类库的自动加载
```
Php的标准类库 spl_autoload_register
composer的加载(PSR-4)
自定义任何目录的加载: psr-4规则里定义目录以后(composer dumpautoload)
```
1.2、基本功能的加载(facade)
```
门面模式
```
1.3、服务的加载(ioc容器)
```
请大家阅读laravel的源代码,服务的注册、监听、通信是基于什么设计模式实现。
```
2、PHP相关知识
2.1、网络协议
```
OSI七层模型
第一层:物理层
第二层:数据链路层
第三层:网络层
第四层:传输层
定义传输数据的协议端口号以及流控和差错校验
协议:TCP/UDP,数据包一旦离开网卡即将进入网络传输层
第五层:会话层层
第六层:表示层
第七层:应用层:网络服务与最终用户的一个接口
```
协议:
```
HTTP:80
HTTPS:443
FTP(21)-文件传输
SMTP(25) 邮件发送
SNMP
DNS (53)域名解析
TELNET(23) 远程登录
POPS(110) 邮件接收
DHCP
```
HTTP协议的特点:
```
无状态
基于B/S模式
通信开销小、简单快速、传输成本低
使用灵活、可使用超文本传输协议
节约传输时间
```
HTTP协议状态码:
```
标记返回请求结果,知道服务器是否可用正常处理请求
1XX
信息类
2XX
200正常返回数据 204已成功处理,不含实体 206部分内容
3XX
301永久重定向 302临时重定向 303定向获取 304附加条件的请求 307临时重定向
4XX 客户端错误
400存在语法错误 401 需要通过HTTP认证403 服务器拒绝404 服务器无法请求
5XX 服务器错误
500 执行请求发送错误 503 超负载运行,无法响应
```
GET/POST的请求区别
```
GET 安全差 POST
GET 2048 url地址的最大长度 POST 没有限制
GET ascII POST 二进制数据等
GET 请求内容-application-x-www-form-urlencoded POST multipart-formdata
GET 不会重新提交 POST 刷新浏览器数据被重新提交
GET 浏览器缓存 POST 不能缓存
GET 参数会自动 POST 不会保存(写隐藏表单)
GET 收藏书签 POST 不能收藏
```
常见请求/响应头/请求方法
```
content-type:请求实体的mime类型信息
Accept:客户端接收内容的类型
Cookie:发送给服务端的cookie值
Cache-control:指定请求和响应的缓存机制
User-agent:用户信息
Referrer:上级请求的路径
X-Forward-For:请求端的真实IP
Access-Control-Allow-origin 允许特定的域名使用(跨域请求)
Last-modified:请求资源的最后响应时间
```
HTTP的工作原理:
```
客户端发送请求给服务器,创建一个TCP连接,指定端口号,连接到服务器,服务器监听到浏览器请求,分析请求类型后,服务器根据客户端的请求类型返回状态信息和数据内容。
```
HTTP协议的工作原理:
```
GET、-读取数据
POST、提交数据请求服务器进行处理
HEAD、指定资源的请求(只返回头信息)
OPTIONS、查看服务器性能(功能是否正常)
PUT、上传最新内容(修改)
DELETE、删除指定的资源
TRACE、测试用,请求服务器回显收到的信息
```
HTTPS协议的工作原理:
```
HTTPS是一种基于SSL/TLS的HTTP协议,所有的HTTP数据都是在SSL/TLS协议封装之上传输的
在HTTP协议的基础上添加了SSL/TLS的握手以及数据的加密传输
```
2.2 PHP基础知识
```
2.2.1、PHP引用变量
概念:用不同的名字访问同一个内容
定义方式:使用&符号
Unset() 断开变量的引用,不会销售内存空间
Object 引用类型的变量对象
堆栈中的内存分析:
```
测试:memory_get_usage() 已经使用的内存
2.2.2、数据类型
```
字符串:单引号、双引号、heredoc和newdoc(处理长文本)
双引号:可以解析变量,可以使用特殊符号{}包含,可以解析转义字符
单引号效率更高
Heredoc 中间的变量可以解析
$str = <<<Eot
Eot
Newdoc 中间的变量不能解析
$str = <<<’Eot’
‘Eot’
```
布尔类型flase的七种情况
```
0 0.0 ‘’ ‘0’ false array() null
浮点类型:不能用于算术运算(转二进制会有损耗)
数组类型:
超全局数组
$GLOBALS $_GET $_POST $_REQUEST $_COOKIE $_SERVER $_FILES $_ENV
$_SERVER[‘QUERY_STRING’] ?后面的参数
$_SERVER[‘PATH_INFO’] 路径部分
$_SERVER[‘SERVER_ADDR] 服务器地址
$_SERVER[‘REMOT_ADDR] 客户端IP
$_SERVER[‘REFFERER] 上一次请求
$_SERVER[‘SERVER_NAME’]
$_SERVER[‘REQUEST_TIME’]
$_SERVER[‘HTTP_USER_AGENT’]
```
2.2.3预定义常量
```
__FILE__ __LINE__ __DIR__ __FUNCTION__ __CLASS__
__TRAIT__ __METHOD__ __NAMESPACE__
Const 语言结构、定义类常量、速度快 define 函数、不能定义类常量
```
出现NULL的三种情况
```
直接申明、未定义的变量、UNSET销毁的变量
```
2.2.4运算符优先级
```
递增、递减 > ! > 数学运算符 > 比较运算符(大小比较) > 相等比较 > 逻辑运算符 > 三目运算 > 赋值运算
短路原则:如果该表达式的结果在第一个子表达式就已经能够决定结果,后面的子表达式不会再执行
==和===的区别
前置递增和后置递增的区别?
先运算后返回,先返回后运算
Null的递增和递减
Null 递减 没有效果
Null 递增 结果为1
```
2.2.5 流程控制
```
遍历数组的三种方式:
数组遍历一:for while 只能遍历索引数组
数组遍历二:foreach 遍历索引数组和关联数组 每次都会执行reset(数组指针的重置)
数组遍历三: while list each 组合循环 遍历索引数组和关联数组 不会执行reset()操作
If语句和switch...case语句的区别
If...elseif 只会有一个语句块被执行,最多条件情况出现的条件放在前面
Switch...case switch后面的控制表达式只能是整型、浮点型、字符串
生成索引表,直接跳转到相对应的case
For() {
Switch( $condition ) {
Case ...;
Continue; //continue 1 continue 2跳出for循环
Break; //跳出switch语句
}
}
```
- 简介
- 前端
- html
- css
- css选择器
- fiex布局
- 盒装模型
- javascript
- 原型链
- 作用域
- 事件绑定
- dom
- bom
- jquery
- 选择器
- jquery事件绑定
- layui
- bootstrap
- vue
- 路由(Vue Router)
- Vue CLI
- axios
- vant
- 打包部署
- 自定义组件
- 一些前端效果
- 点击复制功能
- 后端
- php框架
- thinkphp
- 隐藏index.php
- thinkphp实现多表查询
- thinkphp使用ajax单图上传
- thinkphp使用ajax图集上传
- thinkphp使用ajax查询是否重名
- thinkphp使用ajax表单上传
- where多个条件
- 邮件发送功能
- thinkphp短信宝发送短信
- tp5事务
- validate验证二维数组
- yii2
- yii配置邮件
- yii的CRUD操作
- layui中两种展示表单的方式
- laravel
- laravel实例
- laravel登录
- laravel前端注册
- laravel列表
- laravel删除
- laravel编辑
- laravel新增
- Laravel 目录结构
- Laravel 路由
- Laravel 控制器
- Laravel 模型读操作
- Laravel 模型增、删、改操作
- Laravel 中间件
- Laravel 视图
- Laravel ,YII,thinkphp 框架的区别
- 会话控制
- session
- session存入redis
- session创建
- session删除
- cookie
- 面向对象
- 三大特性
- 魔术方法
- 修饰符
- obj变量
- php
- php版本差异
- php7与php5的区别
- PHP 内存溢出问题
- 数据类型
- PHP 垃圾回收机制(GC)
- 文件目录操作
- php函数
- 字符串相关函数
- 数组相关函数
- 超全局数组与超全局变量
- php魔术方法
- 引用变量
- php类库
- 1.根据随机数生成6位密钥
- 2.获取客户端IP地址
- 3.多维数组变成一维数组
- 4.判断是否是微信浏览器
- 5.判断是否是移动端
- 6.隐藏手机号码156***8956
- 7.隐藏邮箱 9533*****@qq.com
- 8.数组排序
- 9.添加操作日志
- 10.无线分类按子分类排序
- 11.从数组中删除空白的元素
- 12.字符串相关类库
- curl模拟post/get请求
- 替换中间四位数
- PHP地理位置计算
- 生成唯一订单号
- 阿拉伯数字转化为大写
- 时间戳转为中文时间
- php获取本年、本月、本周时间戳和日期格式的实例代码(分析)
- 去除数据库的数据空格
- 压缩Zip文件和文件打包下载
- PHP常用六大设计模式
- 单例模式
- 工厂模式
- 注册树模式
- 策略模式
- 适配器模式
- 观察者模式
- 数据库
- 留言板功能
- 所了解的数据库
- sql server
- Memecached
- MongoDB
- mysql
- 存储引擎(MyISAM与InnoDB)
- 库表CRUD操作
- 索引
- 事务
- mysql常用命令
- 悲观锁和乐观锁
- 数据库优化
- 大流量大并发优化
- Redis
- redis相关考点
- 开启redis
- redis缓存cache
- redis存储session
- redis限制提交次数
- 缓存雪崩,击穿,穿透(copy)
- redis数据结构及使用场景
- 消息队列
- Redis、Memecached 区别?
- phpstudy升级mysql版本
- 分表
- 读写分离
- linux
- 开发环境搭建
- mysql配置
- centos7(lnmp)环境搭建
- ubuntu(lnmp)环境搭建
- Nginx
- nginx四个基本功能
- nginx重启出错
- Nginx 的反向代理
- 用户用户组
- 虚拟机安装
- linux常用命令
- chmod命令
- ubuntu下apt-get 命令
- 释放内存
- 云锁安装及使用
- 大部队搭建
- Centos开启端口命令
- Centos禁止root登录
- Centos7修改22端口
- Rsync备份
- 开启端口
- 微信开发
- 辅助开发
- 网站SEO
- TCP/IP协议
- HTTP 请求全过程
- http状态码
- http和https的区别
- http请求三部分
- tcp三次握手
- 三次握手的作用
- tcp四次挥手
- CMS
- 织梦CMS
- 帝国cms
- wordpress
- 禅知cms
- 八大接口
- 微信支付
- 支付宝支付
- 邮件
- 微博登录
- QQ登录
- 快递
- 天气
- 常见算法
- 快速排序
- 冒泡排序
- 选择排序
- 插入排序
- 二分查找
- 希尔排序
- V2Ray搭建
- AJAX
- GIT
- RBAC用户权限管理数据库设计
- 开发中遇到的一些问题
- 资料购买
- 建立ssr服务器
- 简单建
- 申请并使用ssl证书
- 正则表达式手册
- phpstorm
- 注册码
- 备用注册码
- 网站设计概要
- 网站相关功能代码
- 权限(RBAC/AUTH)
- 无限级分类
- 记住登录状态
- email找回密码
- 企业网站开发概要
- 网站后台
- 文章管理
- 栏目管理 CRUD 上级栏目
- 栏目管理
- 友情链接
- 操作日志
- 登录注册
- 权限管理
- 网站配置
- 网站前台
- 首页
- 新闻动态
- 联系
- 案例
- 关于
- 单店铺商城开发概要
- 面试准备
- 有意思的面试题
- 拉钩面试要求
- 慕课面试视频知识总结
- 面试题汇总
- 题目1
- 一些工作的要求
- 前端炒的
- 面试项目介绍
- MySQL面试100 问
- 术语库
- redis相关
- php操作redis
- redis消息队列(异步)
- redis消息队列(同步)