从浏览器输入域名到展示页面都发生了什么
- DNS域名解析
先找本地hosts文件,检查对应域名ip的关系,有则想ip地址发送请求,没有再去找DNS服务器 - 建立TCP连接
拿到服务器IP后,向服务器发送求求,三次握手,建立TCP连接
简单理解三次握手:
客户端:您好,在家不,有你快递
服务端:在的,送来吧
客户端:好滴,来了 - 发送HTTP请求
与服务器建立连接后,就可以向服务器发起请求了。具体请求内容可以在浏览器中查看 - 服务器处理请求
服务器收到请求后由web服务器(Apache,Nginx)处理请求,web服务器解析用户请求,知道了需要调用那些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库等,然后将结果通过web服务器返回给浏览器 - 返回响应结果
在响应结果中都会有一个HTTP状态码,诸如我们熟知的200、404、500等
状态码都是由三位数字和原因短语组成,大致为五类:
1XX 信息性状态码 接收的请求正在处理
2XX 成功状态码 请求正常处理完毕
3XX 重定向状态码 需要附加操作以完成请求
4XX 客户端错误状态码 服务器也无法处理的请求
5XX 服务器错误状态码 服务器请求处理出错 - 关闭TCP连接
为了避免服务器与客户端双方资源占用和消耗,当双方没有请求或者响应传递时,任意一方都可以发起关闭请求,与创建TCP连接的三次握手类似,关闭TCP连接需要4次挥手
简单比喻为:
客户端:哥们,我这边没有数据要传了,咱们关闭连接吧
服务端:好的,我看看我这边还有数据不
服务端:兄弟,我这边也没数据要传给你了,咱们可以关闭连接了
客户端:好嘞 - 浏览器解析HTML
- 浏览器布局渲染
设计模式:用过什么设计模式,使用设计模式有什么好处,每个设计模式解决的是什么问题
- 单一模式
- 工厂模式
缓存相关
Redis和Memcached的区别
- Redis和Memcache都是将数据存放在内存中,都是内存数据库。但是Memcache还可以缓存其他东西,比如图片、视频
- Redis不只支持简单的k/v类型的数据,同时还提供list、set、hash等数据结构的存储
- 虚拟内存,当物理内存用完时Redis可以将一些很久没有用到的value交换到磁盘
- 过期策略,memcache在set时就指定,例如
set key1 0 0 8
即永不过期,redis可以通过expire设定,例如:expire name 10
- 分布式,设定memcache集群,利用magent做一主多从;redis也可以做一主多从。
- 存储安全,memcache挂掉后,数据没了;redis可以定期保存在磁盘(持久化)
- 灾难恢复,memcache挂掉后数据不可恢复;redis数据丢失后可以通过aof恢复
- redis支持数据的备份,即master-slave模式的数据备份
- 应用场景不同:redis除了可以做nosql数据库之外,还能做消息队列、数据堆栈和数据缓存等。memcache适合于缓存sql语句、数据集、用户临时性数据、延迟查询数据和session等
php基础
GET和POST提交方式的区别
- GET产生一个TCP数据包;POST产生两个TCP数据包;
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)
对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。 - GET在浏览器回退时是无害的,而POST会再次提交请求
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
- GET请求只能进行url编码,而POST支持多种编码方式
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
include和require的区别
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
AJAX的优势是什么
ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验
在程序的开发中,如何提高程序的运行效率
- 优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;
- 少用子查询可用表连接代替;
- 少用模糊查询;
- 数据表中创建索引;
- 对程序中经常用到的数据生成缓存;
想要开发自己的php框架需要什么知识储备: www.zhihu.com/question/26…
PDO:PHP数据对象(PHP Data Object) 是一个扩展,是为PHP访问 数据库定义了一个轻量级的一致接口。PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。