为什么要写一个专栏来总结《从一个浏览器的请求到响应的过程,来总结这一二年我遇到的“鬼”知识点》这么庞大的知识点呢?
写这些东西绝不是为了吹嘘自己懂了什么或者是自己发现了什么,这,只是一个记录,比如后面RESTful介绍,我就可以直接引用阮一峰大佬总结好的最佳实践,别人的轮子已经造的挺好了,我为什么还要重复
起因还是因为某次面试的时候,面试官让我尽可能详细地描述一下“一个请求到结束的全过程”,当时掌握的知识点水平有限,我就简短地回答了一下面试官,但是今天又想起这道面试题,才忽然发现自己的回答太过于笼统,可能当时面试官想针对每个知识点考察一下,所以才有这个系列的由来,日后会慢慢补充,希望各位都能有所收获
一下是我当年的回答,现在看看还真是避重就轻23333:
当时回答的概要1.01、用户从客户端发起请求(流程1),客户端首先判断本地缓存(流程2),如果命中缓存则直接响应给用户(流程3),请求结束
本地缓存2、未命中缓存,通过http访问服务器(流程4),一般都会做负载均衡轮训到某一台业务服务器(流程5)
3、nginx会判断该请求是否缓存,如果命中缓存,或者前端请求的静态资源图片/css/js等文件, 则返回客户端(流程7)
服务器缓存4、动态资源nginx通过fastcgi发送给php-fpm进行解析(流程8、9)
5、根据不同的业务需求,php直接或通过redis/memcached获取数据进行业务处理(流程10-15),然后返回给nginx(流程16)组装响应报文,发送给客户端
现在回想起来,这个回答真的只能0分滚粗,很明显的入门级水准,我想当年考官也不是想听这些,正因为如此,我才想填补一下以前的遗憾,把这套知识体系慢慢补全
按照我现在的理解,当年的面试官有可能想从这一个问题中获取如下的知识点:
(流程4)http协议的三次握手与四次挥手,tcp/ip模型是什么,RESTful编程风格
(流程5)select、poll和epoll的实现机制与区别
(流程8)fastcgi接口是什么
(流程10)缓存设计方案相关:缓存穿透、缓存雪崩、缓存重建等
(流程12-15)mysql设计、索引等
以我现在的水平我就只能暂时理解成想考我这些知识点喽,其他的日后再继续补充
那么我之后的文章将从三部分开始写起
1、客户端处理
2、网络传输
3、服务端处理
网友评论