缓存服务器

html/css面试题(3)

点点圈 提交于 2020-01-19 21:06:20
一、一次完整的HTTP事务是怎么一个过程 域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户 二、HTTPS是如何实现加密 HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是 客户端浏览器 或其他程序与Web服务器之间的 应用层 通信协议 。 https 是一种http与SSL证书共同协作构建的 网络协议 ,https优势就在于能够保证 网络传输高效 的同时,可以很好的维护网络传输过程的 安全 。 如何进行https加密? 这涉及到了对 SSL证书的申请 ,不同类型的网站所需的 SSL证书类型不同 ,申请这一数字证书需要想 数字证书颁发机构验证域名的所有权 以及公司相关的信息,这也是为什么网站部署了SSL证书之后就拥有了一个安全可信的形象。完成申请之后,根据申请证书的教程,完成下载以及安装。这就实现了对http到https的转变,即完成了 https加密 。 三、浏览器是如何渲染页面的 先简要概述浏览器渲染的步骤: 1. 处理HTML标记 并 构建DOM树 2. 处理CSS标记 并构建 CSSOM树 3

千万级用户网站门户前端设计

我们两清 提交于 2020-01-19 19:25:12
千万级用户网站门户前端设计 对于千万级的注册用户的门户项目是前端这块是怎么去实现的,自己在平常的工作中总结了一些经验,也是在不断的挫折中,不断演练的,希望总结出来给大家参考下,和大家一起探讨,一起进步。 一、门户设计一般会遇到哪些难点 (一)、首页打开时间太慢了 在开发一个门户到生产上线后,首页响应时间是检验门户整个系统架构以及开发的重要的一项指标,有时候我们发现在公司测试发现速度都挺快的,怎么到生产首页打开就慢了呢? (二)、页面加载不流畅,总感觉看着不舒服 因为门户一般都是偏向于内容和图片类资源比较多,但是我们打开自己的网页,有时候总感觉加载并不是按照我们期望的那样加载得到,顺其自然,总感觉看起来怪怪的。 (三)、希望用户缓存的地方未进行缓存 很多静态的前端资源,其实在系统未进行更新时候,第一次加载之后,希望缓存到用户的本地,但是因为缓存策略没搞好,经常未进行有效的缓存。 (四)、页面的头部尾部经常需要被第三方嵌入 因为作为一个比较大的门户站点,可能会让很多小的服务接入进来,但是头部和尾部因为是需要保持风格统一,所以经常需要被第三方进行嵌入。 (五)、代码没有进行有效的压缩,导致被窃取 因为作为门户站点,前端如果不进行加密的话,代码很容易被别人进行抄袭伪造,而且还很容易清楚里面的业务逻辑,从而很容易仿造和进行攻击。 (六)、增量静态资源发布 经常门户线上环境需要增加一点小功能

非关系型数据库Redis

僤鯓⒐⒋嵵緔 提交于 2020-01-19 17:59:09
文章目录 非关系型数据库Redis 一、Redis简介 1.Redis简介 2.Redis是内存高速缓存数据库 3.Redis的特性 4.Redis持久化 5.Redis架构模式: 二、Redis安装与配置 1.Redis的安装与部署(Linux) 2.windows下Redis的安装 3.Redis的内置数据类型 4.Redis的应用场景 5.Redis内置指令: http://doc.redisfans.com/ 三、Redis编程 1.python实现redis数据库的连接操作 2.Redis字符串常用操作 案例:生成给用户发送的验证码,验证码限制3s内生成一次,3s内第二次则无法获取 3.Redis列表常用操作 案例:Redis做消息队列的应用 案例:限制IP一分钟访问次数不能超过60次 非关系型数据库Redis 一、Redis简介 Redis参考资料: Github 源码:https://github.com/antirez/redis Redis 官网:https://redis.io/ 1.Redis简介 NoSQL(NoSQL = Not Only SQL ) ,意为“不仅仅是SQL”,泛指非关系型的数据库。 NoSQL数据库的产生就是为了 解决大规模数据集合多重数据种类 带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。 Redis(Remote

ARP协议/ARP攻击与防御

戏子无情 提交于 2020-01-19 00:19:30
ARP协议 目录 ARP协议 1、ARP协议概述 2、ARP协议作用: 3、ARP协议原理: 1)发送ARP广播请求 2)接受ARP单播应答 4、ARP的工作过程 5、ARP代理 ​ 6、ARP攻击或欺骗的原理是: 1)、ARP协议没有验证机制,所以容易被arp偷渡攻击 2)、ARP攻击者通过发送虚假伪造的arp报文对受害者进行ARP缓存投毒 7、ARP攻击防御: 1、静态ARP绑定 2、ARP防火墙 3、硬件级ARP防御: 1、ARP协议概述 “Address Resolution Protocol”(地址解析协议) 当网络设备要发送数据给另一台设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址而获取目的MAC地址的过程是由ARP协议来实现的。 ARP协议是TCP/IP协议簇中的重要组成部分,ARP能够通过目的IP地址发现目标设备的MAC地址,从而实现数据链路层的可达性 2、ARP协议作用: 将IP解析为MAC地址 3、ARP协议原理: 1)发送ARP广播请求 ARP报文内容:我是10.1.1.1 我的MAC:AA-AA-AA-AA 谁是10.1.1.3 你的MAC:? 2)接受ARP单播应答 4

Redis 总结

こ雲淡風輕ζ 提交于 2020-01-18 17:19:47
redis 简介 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。 为什么要用 redis/为什么要用缓存 主要从“高性能”和“高并发”这两点来看待这个问题。 高性能: 假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可! 高并发: 直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。 为什么要用 redis 而不用 map/guava 做缓存? 下面的内容来自 segmentfault 一位网友的提问,地址: https://segmentfault.com/q/1010000009106416 缓存分为本地缓存和分布式缓存。以 Java 为例,使用自带的 map 或者

资深阿里程序员一一为你解刨Web前端知识体系结构

≡放荡痞女 提交于 2020-01-18 15:37:01
只要接触过前端,都会指导web前端的知识主要由三部分组成:分别为静态html,样式css,动态javascript(简称js)这三大部分组成。其三部分组成的一个体系的复杂程度不亚于其他一门技术的复杂程度。当然对于跟我一样厉害的那些web前端来说那就是小菜一碟,但是很多人都只学了表面,基础部分,很多重要的知识,深入部分都是被忽视了!其实这也就导致了部分前端开发工作者学了前端,但是却找不到工作,有工作但是工资少的现象! 现在为大家一一解刨Web前端知识体系结构,在阿里从事了6年的全栈,也是从前端慢慢成长过来的,也想跟很多小伙伴说一句:付出与收获是成正比的! TextOne:首先最最最基础的部分html部分 1、常见的BOM对象 BOM(Browser Object Mode)浏览器对象模型,是Javascript的重要组成部分。它提供了一系列对象用于与浏览器窗口进行交互,这些对象通常统称为BOM。 window窗口对象。它表示整个浏览器窗口,主要用来操作浏览器窗口。同时, window对象还是 ECMAScript 中的 Global 对象,因而所有全局变量和函数都是它的属性,且所有原生的构造函数及其他函数也都存在于它的命名空间下。 document 即文档对象,也是window对象的一个属性。整个HTML代码解析完以后,会生成一个由不同节点组成的树形结构,俗称DOM树

nginx缓存

时光毁灭记忆、已成空白 提交于 2020-01-18 08:13:35
nginx缓存 cache of nginx 缓存即数据交换的缓冲区,当A与B进行数据交互时,先去找缓存中是否有数据,若在缓存中找不到想要的数据,那么再去B中找;找到了就直接返回不用和B再打交道了。 1.缓存概述 生活中有很多场景,都和缓存相似。这不过年了,秃头男突然想吃猪肉炖粉条了,就去冰箱里去拿猪肉,发现冰箱里空空如也,于是乎就去集市买了两斤。单身汉一人一顿也吃不完啊,于是切了半斤把剩余的又放冰箱里了,美美的吃了一顿。下次再吃就不用去集市了,直接从冰箱里拿即可,等吃完再去集市买呗。 哲学上说存在即合理,那么缓存的存在肯定有他的优势,相反的,有好处就必然会有坏处,事物总是有两面性的。 我们购买电脑的时候常常会看到CPU的描述会有6m或者8m、二级或者三级缓存,对于普通消费者来说肯定是一脸懵逼不知所云,光听销售员吹的天花乱坠去了。对于开发者来说,缓存已经不是一个陌生的东西了,在这个21世纪快速消费的时代,满足消费者的极致体验和与消费者的快速交互,是互联网产品都要解决的一大难题。从而应运而生的各种技术,百家齐放,相互竞争,以让自家产品稳定运行、响应速度快人一等。 缓存追求的是快。在没有缓存时,一个get请求要从服务器获取数据,一般都会经过服务器方的统一网关入口,然后再到具体的服务器,服务器中存储数据的地方一般都是数据库,所以在服务器这里还要再调用应用程序比如MySQL

面向对象编程、模块内高内聚、模块间低耦合、数据库操作工具类

若如初见. 提交于 2020-01-18 07:23:08
一、web.config帮助类(ConfigHelper.cs) 1 using System; 2 using System.Configuration; 3 using System.Reflection; 4 5 namespace Sam.OA.Common 6 { 7 /// <summary> 8 /// web.config操作类 9 /// author:陈彦斌 10 /// 更新时间:2019年9月1日15:50:11 11 /// 使用前需引用程序集:System.configuration 12 /// </summary> 13 public sealed class ConfigHelper 14 { 15 /// <summary> 16 /// 获取系统配置信息 17 /// </summary> 18 /// <typeparam name="SystemConfig"></typeparam> 19 /// <returns></returns> 20 public static SystemConfig GetAppSettingsAllInfo() 21 { 22 try 23 { 24 SystemConfig t = new SystemConfig(); 25 string[] arrSysCfg =

浏览器缓存机制的深入解析

落花浮王杯 提交于 2020-01-18 06:47:24
一、简介浏览器缓存 浏览器缓存就是把一个已经请求过的Web资源(如html页面,图片,js,数据等)拷贝一份副本储存在浏览器中。缓存会根据进来的请求保存输出内容的副本。当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向服务器再次发送请求,从而返回新的数据。 缓存的优点: 优秀的缓存策略可以缩短网页请求资源的距离,减少延迟。 缓存文件可以重复利用。 减少带宽资源浪费,降低网络负荷。 加快页面渲染速度。 常规数据请求主要分为三步:HTTP请求、后端处理、浏览器响应三个步骤,浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。 理解了缓存和缓存策略的优点,接下来我们带着以下几个问题来深入讲解缓存机制。 缓存的流程 缓存的储存位置 缓存的分类以及它们之间的异同、优劣。 二、浏览器缓存的流程 HTTP请求就是客户端和服务端之间应答的模式,当浏览器发起请求到服务端处理,服务端响应,再到浏览器接受数据,渲染页面,这其中数据是如何被浏览器缓存以及之后如何被浏览器再次使用的,请先看下图。 缓存流程.png 通过上图容易理解 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识

深入解析Jedis底层源码

与世无争的帅哥 提交于 2020-01-18 06:40:05
第1章 访问缓存服务器过程(hget) 架构在jedis外层封装了一个客户端ClusterNativeClient,在这个类中,提供了很多访问redis的方法,包括:hget、hset、hdel等,即成为前台业务代码和jedis进行交互的桥梁。 我们以查询操作为例,详细描述一下jedis的实现过程。 1.1 源码分析 1.1.1 ClusterNativeClient中hget方法: public String hget(String key, String field) { return pool.hget(key, field); } 说明: Pool是缓存初始化时建立的,我们后面详细讲。 public static void init(Properties props) { String[] servers = props.getProperty(“host”).split(","); HashSet nodes = new HashSet(); for (String s : servers) { String[] ipAndPort = s.split("😊; String ip = ipAndPort[0]; int port = Integer.valueOf(ipAndPort[1]).intValue(); nodes.add(new HostAndPort(ip