缓存

HTTP解析

…衆ロ難τιáo~ 提交于 2020-03-09 06:10:03
前言 B/S网络架构的核心是HTTP,掌握HTTP对一个从事互联网工作的程序员来说非常重要。要理解HTTP,最重要的是要熟悉HTTP的HTTP Header,HTTP Header控制着互联网上成千上万用户的数据传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。例如,当服务器没有用户请求的数据的时候就会返回一个404状态码,告诉浏览器没有要请求的数据,通常浏览器就会展示一个非常不愿意看到的该页面不存在的错误信息。OK,接下来开始对于HTTP的学习。 HTTP是什么 HTTP,英文全称为HyperText Transfer Protocol,即超文本传输协议,是互联网上应用最为广泛的一种网络协议。HTTP是一种属于 应用层 的面向对象的协议,一次HTTP操作称为一个实物,其简单工作过程如图: 其工作过程可以分为四步: 1、首先客户端与服务器需要建立连接,只需要单击某个超级链接,HTTP的工作开始 2、建立连接后,客户端发送一个请求给服务器(默认请求服务器的80端口),请求方式的格式为:统一资源标识符(URL)+协议版本号+MIME信息包括请求修饰符、客户端信息和可能的内容 3、服务器接收到请求后,给予响应的相应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后面是MIME信息包括服务器信息、实体信息和可能的内容 4

原子操作

元气小坏坏 提交于 2020-03-09 04:21:18
CPU术语 缓存行(Cache line):缓存的最小单位 比较并交换(Compare and Swap):CAS操作需要输入两个数值,一个旧值,一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换 CPU流水线(CPU pipeline):在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5~6步后再由这些电路单元分别执行,这样就能实现在一个CUP时钟周期完成一条指令,从而提高CPU的运算速度 内存顺序冲突(Memory order violation):内存顺序冲突一般是由假共享引起的,假共享是指多个CPU同时修改同一个缓存行的不同部分而引起其中一个CPU的操作无效,当出现内存顺序冲突时,CPU必须清空流水线 处理器实现原子操作 1.使用总线锁保证原子性:    如果多个处理器同时对共享变量进行读写操作(i++),那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致。 总线锁其实就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。 2.使用缓存锁保证原子性:    在同一时刻,只需保证对某个内存地址的操作是原子性即可,但总线锁把CPU和内存之间的通信锁住了

HTTP所有概念

老子叫甜甜 提交于 2020-03-08 22:08:00
HTTP所有概念 上一篇文章我们大致讲解了一下 HTTP 的基本特征和使用,大家反响很不错,那么本篇文章我们就来深究一下 HTTP 的特性。我们接着上篇文章没有说完的 HTTP 标头继续来介绍(此篇文章会介绍所有标头的概念,但没有深入底层) HTTP 标头 先来回顾一下 HTTP1.1 标头都有哪几种 HTTP 1.1 的标头主要分为四种, 通用标头 、 实体标头 、 请求标头 、 响应标头 ,现在我们来对这几种标头进行介绍 通用标头 HTTP 通用标头之所以这样命名,是因为与其他三个类别不同,它们不是限定于特定种类的消息或者消息组件(请求,响应或消息实体)的。HTTP 通用标头主要用于传达有关消息本身的信息,而不是它所携带的内容。它们提供一般信息并控制如何处理和处理消息。 尽管通用标头不会限定于是请求还是响应报文,但是某些通用标头大部分或全部用于一种特定类型的请求中。也就是说,如果某个通用标头出现在请求报文中,那么大部分通用标头都会显示在该请求报文中。响应报文也是一样的。 先列出来一个清单,讲明我们都需要介绍哪些通用标头 Cache-Control Connection Date Pragma Trailer Transfer-Encoding Upgrade Via Warning Cache-Control 缓存(Cache) 是计算机领域里的一个重要概念

链表

元气小坏坏 提交于 2020-03-08 21:38:39
一.常见的缓存淘汰策略: 1.先进先出策略FIFO 2.最少使用策略LFU 3.最近最少使用策略LRU 二.链表 (一)链表的定义:链表是物理存储单元上 非连续 的、 非顺序 的存储结构,它由一个个结点,通过指针联系起来的,每个结点包括数据和指针。 (二)链表结构: 1.单链表 通过“指针”将一组零散的内存块串联起来使用。内存块称为结点;记录下个结点地址的指针称为后继指针next;第一个结点为头结点,用来记录链表的基地址;最后一个结点为尾结点,指针指向NULL。 链表的插入、删除操作,只需考虑相邻结点的指针变化,不需要数据搬移,时间复杂度为 O(1) 。 随机访问的时间复杂度为O(n) 。 2.循环链表 是一种特殊的单链表。尾结点的指针指向链表的头结点。 从链尾到链头比较方便。当要处理的数据具有环形结构特点时,适合采用循环链表。例如约瑟夫问题。 3.双向链表 每个结点有两个指针,分别为后继指针next和前驱指针prev。找到前驱结点的时间复杂度为O(1)。 4.双向循环链表 三. 1.删除操作 (1)删除结点中“值等于某个给定值”的结点 从头结点开始一个一个遍历,直到找到值等于给定值的结点,再删除。删除操作时间复杂度为O(1),查找操作时间复杂度为O(n);总时间复杂度为O(n)。 (2)删除给定指针指向的结点 对于单链表来说,要从头结点开始遍历找到给定结点的前驱结点,再删除

redis知识点

时光毁灭记忆、已成空白 提交于 2020-03-08 21:38:20
1 redis特点   内存数据库,读写速度快,被应用于缓存。   数据类型丰富,支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。   丰富的特性:缓存,消息,过期,自动删除 2 数据类型:   hash: k-v集合,适用于存储对象。 由于组合式的压缩,内存利用率更高。   字符串:一个键最大能存 512MB   列表:按照插入顺序排序。      异步队列: rpush为生产消息, lpop为消费消息。但是消费者下线时,生产消息会丢失。   set集合: string类型的无序集合,通过哈希表实现,增删查的复杂度是 O( 1)。   zset:有序集合,且不重复。 3 存储结构:   redis通讯协议 RESP格式的命令文本存储。是 redis客户端和服务端之前使用的一种通讯协议。特点:实现简单、快速解析、可读性好。 4 redis做缓存的原因   高性能:   a 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。b 将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。c 如果数据库中的对应数据改变的之后, 同步改变缓存中相应的数据即可 !   高并发:   直接操作缓存能够承受的请求是远远大于直接访问数据库的

前端面试笔试复习(4)

淺唱寂寞╮ 提交于 2020-03-08 21:00:30
DOM 总结 25、DOM 事件模型是什么? 冒泡和捕获 如果这个元素是被点击的元素,那么捕获不一定在冒泡之前,顺序是由监听顺序决定的。 26、事件委托是什么,有什么好处? 事件委托就是利用 冒泡原理 ,将事件绑定到节点的 父级节点 上,从而触发事件中代码的效果。 事件委托的好处: 1)提高js性能; 2)后续添加的元素同样能触发事件; 代码: var ul = document . querySelector ( 'ul' ) ul . addEventListener ( 'click' , function ( e ) { var el = e . target while ( el . tagName !== 'LI' ) { if ( el === ul ) { el = null break } el = el . parentNode } if ( el ) { console . log ( '你点击了 li 元素' ) } else { console . log ( '你点击的不是 li 元素' ) } } ) 27、移动端的触摸事件了解吗? touchstart、 touchmove、 touchend、 touchcancel 模拟 swipe 事件:记录两次 touchmove 的位置差,如果后一次在前一次的右边,说明向右滑了。 HTTP 复习: 28

当你输入一个网址的时候,实际会发生什么?

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-08 20:07:29
原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。 本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~ 1. 首先嘛,你得在浏览器里输入要网址: 2. 浏览器查找域名的IP地址 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下: 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。 ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。 递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到Facebook的域名服务器

在浏览器中输入URL并回车后都发生了什么?

℡╲_俬逩灬. 提交于 2020-03-08 19:59:18
1、浏览器对拿到的URL进行识别,抽取出域名字段 2、DNS解析,查询浏览器缓存(2-30分钟)---> 检查系统缓存(hosts文件) ---> 检查路由器缓存 ---> ISP DNS缓存 ---> 递归查询 根域名服务器到顶级域名服务器再到极限域名服务器 3、浏览器与网站建立TCP连接 第一次握手:客户端发送请求(SYN=1),等待确认 第二次握手:服务器收到请求并确认,回复指令(SYN=1, ACK=1) 第三次握手:客户算收到回复并返回确认(ACK=1) 4、传输数据 5、浏览器渲染页面 a、浏览器解析html源码 创建dom树 b、解析css代码,计算最终样式数据,形成css对象模型cssom c、利用dom与cssom构建渲染树 d、根据渲染树绘制页面 浏览器解析文档,当遇到 <script> 标签的时候,会立即解析脚本,停止解析文档(因为JS可能会改动DOM和CSS,所以继续解析会造成浪费)。 如果脚本是外部的,会等待脚本下载完毕,再继续解析文档。现在可以在script标签上增加属性 defer 或者 async 。 脚本解析会将脚本中改变DOM和CSS的地方分别解析出来,追加到DOM Tree和Style Rules上。 来源: https://www.cnblogs.com/shaozhen/p/11120999.html

浏览器输入URL按回车后都经历了什么?

孤街浪徒 提交于 2020-03-08 19:58:55
在浏览器上输入一个URL,按回车后,这个过程发生了什么? 1、首先,浏览器地址栏输入了URL,先解析URL,检测URL地址是否合法 2、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。 浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求; 操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使用系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存) 路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存。 ISP缓存:若上述均失败,继续向ISP搜索。 3、如果没有上述缓存,则在发送HTTP请求前,需要域名解析(DNS解析),解析获取相关的IP地址。 4、浏览器向服务器发起tcp连接,与浏览器简历tcp三次握手 5、握手成功后,浏览器向服务器发送HTTP请求,请求数据包 6、服务器处理收到的请求,将数据返回至浏览器 7、浏览器收到HTTP响应 8、浏览器解码响应,如果响应可以缓存,则存入缓存 9、浏览器发送请求获取嵌入在HTML中的资源(HTML、css、javasc、图片、音乐。。。。). 10、浏览器发送异步请求 11、页面全部渲染结束 来源: https://www.cnblogs.com/lanyy/p/10793382.html

当在浏览器输入一个网址后,实际会发生什么?

坚强是说给别人听的谎言 提交于 2020-03-08 19:58:19
这个问题的回答主要是翻译自这篇英文文章 http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ 。 那么,输入网址后,实际发生了什么呢?过程如下: 1、输入网址。 2、浏览器查找域名的IP地址。 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下: 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。 ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。 3. 浏览器给web服务器发送一个HTTP请求 4. 网站服务的永久重定向响应 服务器给浏览器响应一个301永久重定向响应,为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?其中一个原因跟搜索引擎排名有关。如果一个页面有两个地址,就像 http://www.igoro.com/ 和 http://igoro.com/