静下心慢慢看,我想一定会对你有一点点的帮助
什么是面向对象:我们将繁琐的步骤,通过行为、功能,模块化,这就是面向对象(面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象)
单引号和双引号的区别:单引号变量不会被执行
json_decode带true和不带的区别:
- json_decode($data)=>返回对象
- json_decode($data,true) =>返回数组
解耦:最好的解耦使用容器(降低代码维护,变量声明等)
RESTful
- 简介:是一种常见的REST应用,是遵循REST风格的web服务,REST式的web服务是一种ROA(面向资源的架构)。
- 举例:
2.1正常路由:user/getUserInfo?uid=1
2.2REST后路由:user/m?uid
网络协议http/tcp机制及请求情况
- 四层模型:应用层、传输层、网络层、数据链路层 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 应用层:向用户提供应用服务的活动,预存了各种通用的协议(ftp、文本传输协议、DNS、http协议也处于这一层)
- 传输层:提供两台机器之间的数据传输,tcp:传输控制协议,udp:用户数据协议
- 网络层:处理网上流动的数据包,传输就是通过怎样的路径达到对方计算机,并把数据包发送给对方,对多态计算机传输时选择一条传输
- 链路层:处理连接网络的硬件部分,包括驱动、网卡、
- tcp如何通信:应用层发送http请求,网络层解析,发送到服务器,服务器返回信息到链路接收端在返回一直到应用层,请求结束发送端每经过一层都会把请求层的首部打包上,接受层则每次请求都会去掉首部IP协议是把数据包发送给对方,确保对方在哪里,其中包括Ip和MAC物理地址ARP协议通过MAC地址进行通信,ARP协议是可以理解为地址解析协议,通过通讯方的IP地址反查出对应的MAC地址确保TCP协议的可靠:1.按层次分:大数据分割,TCP检查数据是否最终传输过去了确保数据能到达:TCP采用三次捂手,第一次发送SYN的数据包给对方,第二次接收端接收到后返回一个SYN/ACK标志的数据包表示确认数据送达,最后结束段在发送方一个ACK标注的数据包捂手结束
- DNS协议:提供通过域名查找IP地址,或者从IP地址反查域名的服务
mysql优化
四大方面:1设计:存储引擎、字段类型、范式及逆范式 2功能:索引、缓存、分区分表 3.架构:主从复制、读写分离、负载均衡 4.合理sql:测试、经验
- MySQL主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致
- 存储引擎:支持事务锁、行级锁定、外键约束,更加注重数据完整性和安全性,数据集中存储,行记录:一种检索机制,相当于字典
- innodb:独立表空间、共享表空间:优点:每个表和索引都会存储在各自表空间,可以方便表数据的迁移,可以通过alter实现表空间的回收,缺点:单表超过100G,数据处理会变慢,用分区分表来处理
- 共享表:优点:可以把数据和文件放在一个磁盘上,方便管理 缺点:处理一个大文件时,虽然可以把大文件分成若干个小文件,对表做操作会有大量的缝隙,对统计和日值方便不合适
- innodb:擅长处理并发,通过行级锁定和表锁定来实现,擅长插入和更新
- myisam:擅长查询,innodb:擅长数据完整性、并发处理、查询及删除
- mysql安全防注入:运用execute代替sql语句连接
- mysql原理:1.客户端连接层:连接处理、证书验证 2.架构层:sql接口和优化 3.存储层:mysql数据存储和提取,服务器通过API存储引擎进行通信 4.数据层:运行在设备上,完成数据引擎的交互
- mysql设计:
9.1根据业务场景:根据需求及业务场景选择数据库类型,查询多久选择Myisam(不支持事务,非聚集型索引),插入更新多久选择Innodb(支持事务,聚集型索引),根据数据量进行分库分表操作,字段类型设计(定长字段查询比较快例如:char比varchar快,主键类型用bigint),索引设计,多条件查询用组合索引,单条件的用唯一索引,模糊搜索用全文索引(目前全文索引支持:char、varchar、text)。
9.2索引种类:1.全文索引2.hash索引:针对单条件查询比较快("=“和"in”),对于范围查找并不是特别高效3.btree索引:索引值按照一定的算法植入数据结构中的二叉树,4.rbtree索引:用的较少:一般使用与范围查找
9.3mysql优化:主从复制读写分离,索引(主键索引、组合索引(用于多个条件查询)、唯一索引(可以为null,但不能重复)、全文索引(like %name%)),慢查询日志(long_query_time设置语句阈值,超过则代表语句执行慢,需要优化),sql语句优化
9.4mysql优化工具:1.慢查询日志:记录查询时间慢的语句 2.explan:查看mysql执行计划,寻找其中可优化点 3.profiling:查询资源消耗情况
php5与php7之间的区别
- 性能提升:PHP7比PHP5.0性能提升了两倍。
- 以前的许多致命错误,现在改成抛出异常。
- PHP7.0比PHP5.0移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展。
- PHP7.0比PHP5.0新增了空接合操作符。
- PHP 7.0比PHP5.0新增加了结合比较运算符。
- PHP 7.0比PHP5.0新增加了函数的返回类型声明。
- PHP 7.0比PHP5.0新增加了标量类型声明。
- PHP 7.0比PHP5.0新增加匿名类。
- 错误处理和64位支持
php运行原理
-
php运行原理:
1.1简单说明:词语解析->语法解析->opcodes指令执行->通过sapi将结果返回
1.2详细说明:浏览器发送给服务器,如果是静态资源,直接把资源返回给客户端2.如果请求的是php文件,服务器把php文件交给php解析器进行处理,处理完成,服务器会以静态资源的形式返回给客户端(web server启动时载入fastcgi进程管理器(php的fastcgi管理器是php-fpm),fastcgi自身初始化,启动多个cgi进程,等待web server连接,当web server连接到cgi的一个解析器时,web server将变量和标准输入发送到fastcgi的子进程php-cgi,php-cgi处理完成后,将返回结果和信息从同一连接返回web server,请求处理完成,php-cgi在此时退出,通常请求cgi时,每次请求都需要重新解析php.ini,如果运用fastcgi则只在进程启动时连接一次,能够持续数据库连接) -
CGI运行原理:1.初始化相关变量2.调用并初始化虚拟机3.加载并解析php.ini4.激活zend(zend加载a.php文件进行解析,编译a.php脚本为opcode并执行,输出结果,关闭虚拟机,)5.返回结果给web server模块模式:以mod_php5的形式集成,此时mod_php5是接收apache传递过来的php请求,并处理这些请求,将结果返回给apache,可以在启动的时候配置好php模块,通过ap_hook_post_config挂钩,在apache启动的时候启动此模块来接收php文件的请求
-
nginx介绍:是一种高性能的http和反向代理服务器,也是IMAP/POS3/SMTP服务器
-
nginx+php流程:浏览器请求到nginx–>路由到index.php–>加载nginx的php-cgi模块–>fastcgi监听127.0.0.1:9000地址–>浏览器请求道当前127.0.0.1:9000地址–>php-fpm监听127.0.0.1:9000地址–>php-fpm接收到请求交给worker进程处理请求–>php-fpm处理完成后返回给nginx–>nginx通过http返回给浏览器
-
php垃圾回收机制GCC:php变量都会有变量类型、变量value、引用计数次数、是否是引用变量四部分组成(5.3)当删除父元素的时候,容器不会被删除,因为子元素还在指向该容器,只有当文件执行完后才会被删除,这就造成了内存泄漏,最新的gc是php启动时默认设置的zval数量根缓存区(默认10000),当php发现有缓存循环引用zval时,就会把他存入打根缓存区,当根缓存区达到配置文件中的指定数量(10000)后,就会进行垃圾回收机制,以此解决内存泄漏问题
-
引用计数:当引用计数ref_count清0的时候就会被销毁实现内存回收
-
写时拷贝:当变量a赋值给变量b的时候,变量b指向变量a的容器,只有当变量b发生改变的时候才会真正的发生变量容器复制
-
简单说明:词语解析->语法解析->opcodes指令执行->通过sapi将结果返回
详细说明:浏览器发送给服务器,如果是静态资源,直接把资源返回给客户端2.如果请求的是php文件,服务器把php文件交给php解析器进行处理,处理完成,服务器会以静态资源的形式返回给客户端(web server启动时载入fastcgi进程管理器(php的fastcgi管理器是php-fpm),fastcgi自身初始化,启动多个cgi进程,等待web server连接,当web server连接到cgi的一个解析器时,web server将变量和标准输入发送到fastcgi的子进程php-cgi,php-cgi处理完成后,将返回结果和信息从同一连接返回web server,请求处理完成,php-cgi在此时退出,通常请求cgi时,每次请求都需要重新解析php.ini,如果运用fastcgi则只在进程启动时连接一次,能够持续数据库连接) -
php包含四个部分:zend引擎:php核心,extensions:通过组件提供基础服务,sapi:服务端应用编程接口,上层应用:
-
zend介绍:是php的内核,hashtable是zend的核心数据结构,实现典型的hsah三列结构,附加双向链表,提供了正反两个方向的数组遍历
-
双向链表:快速删除,避免遍历 zval结构主要有三部分组成:type:指定变量所属的类型,refcount:用来实现计数,value:存储变量的实际数据
-
聚集索引和非聚集索引的区别:在于表记录的排序顺序和索引的排序顺序是否一致
-
悲观锁:先获取锁,在进行业务操作
-
乐观锁:用户并发事务处理,每个事务在执行执行之前都先检查有没有其他事务又修改了数据,如果有则事务回滚。一般在锁的数据上添加版本号或者时间戳
-
普通索引
-
聚合索引(组合索引):如果有A、B、C三列,按左排序规则,B、C检索不能用
-
hash索引:不常用
swoole介绍
-
TCP和UDP的区别:TCP是面向连接、可靠的数据流传输,UDP提供的是非面向连接的不可靠的数据传输流,TCP注重数据安全,UDP传输数据快
-
TCP三次握手: 第一次握手:建立连接,客户端发送连接请求报文段,将SYN位置为1,sequence Number 为x;客户端进入SYN SEND状态,等待服务器确认,第二次握手:服务器收到客户端SYN报文段,需要对报文段进行确认,设置Acknwledgmentnumber为x+1,同时自己还要发送SYN请求, 将SYN的设置为1,sequenceNumber为y,服务器将所有信息放到报文(SYN+ACK)中,并发送给客户端,此时服务器进入SYN RECV状态。第三次捂手:客户端接收到SYN ACK报文,然后将Acknowledgmentnumber设置为y+1,向服务器发送ACK报文,报文发送完毕,客户端 和服务器端都进入ESTABLISHED状态,完成三次握手
-
四次挥手原理:
第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAI