- day58 第十一章:图论part08
mvufi
图论算法数据结构
拓扑排序精讲关键:先找到入度为0的节点,把这些节点加入队列/结果,然后依次循环再找。#include#include#include#includeusingnamespacestd;intmain(){intm,n,s,t;cin>>n>>m;vectorinDegree(n,0);//记录每个文件的入度unordered_map>umap;//记录文件依赖关系vectorresult;//记录
- 常用的HTML标签及属性
微剑
python前端开发htmlcss
前端开发常用的HTML标签和属性较为丰富,以下是一些常用的HTML标签和属性:1.标题标签:h1、h2、h3、h4、h5、h6;属性:id、class、style2.段落标签:p;属性:id、class、style3.图像标签:img;属性:src、alt、title、width、height、border、align4.超链接标签:a;属性:href、target、title、id、class、
- CSS从入门到精通
cgblpx
前端开发全家桶-7天集训csshtmlcss3
文章目录CSS技术什么是CSSCSS的用法选择器标签名选择器class选择器id选择器分组选择器属性选择器盒子模型margin(外边距)border(边框)padding(内边距)元素类型的补充块级元素行内元素行内块元素永和门店系统用户注册练习CSS技术dy同名:cgblpx弹性布局:水平垂直都居中display:flex;justify-content:center;align-items:ce
- sql注入总结(时间盲注,布尔盲注,无列名注入,regexp盲注,order by注入,二次注入,update注入,报错注入)
尘佑不尘
sql数据库web安全网络安全笔记学习
一、update注入query="updatemembersetsex=′query="updatemembersetsex='query="updatemembersetsex=′sex’,phonenum=‘phonenum′,address=′phonenum',address='phonenum′,address=′add,email=‘emailwhereusername=’$ueser
- 自用python基础2
ffuanc
python基础python
二、数组的存储和处理——NumPy模块2.1创建数组多维数组array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)importnumpyasnpa=np.array([1,2,3,4])b=np.array([[1,2,3],[4,5,6],[7,8,9]])print(a)print(b)运行结果:[1234][[123
- 微信小程序 - 导航栏(TabBar)实现(原生实现、Vant Weapp 实现)
我命由我12345
微信小程序微信小程序小程序前端框架前端html5jsjavascript
一、导航栏{"pages":["pages/home/home","pages/goods/goods","pages/cart/cart","pages/mine/mine"],..."tabBar":{"color":"#999999","selectedColor":"#3D98FF","backgroundColor":"#ffffff","borderStyle":"black","li
- 绕过【information_schema】,【order by】过滤
小帅一把手
数据库web安全
1.大小写混合利用数据库不区分大小写inFOrmation_schemainFoRMAtion_ScheMAOrderbyORDerBy2./*!information_schema*/数据库的特性/**/注释可以代替空格/*!*/在这里会被mysql所识别/*!50000information_schema*//*!orderby*/order/*666*/byorder%0abyorder()
- HTML当前标签鼠标停留下划线和变色效果
smx6666668
前端HTMLhtmlcssjavascript
CSS#testlia:hover{border-bottom:1pxsolid#6bc30d;/*background-color:#6bc30d;背景变色*/color:#6bc30d;}HTML其他:
- CSS3过渡效果小练习-进度条
nuomi_w
css3css前端
Document.bar{width:150px;height:15px;border:1pxsolidred;border-radius:7px;}.bar_in{width:50%;height:100%;background-color:red;transition:all0.8s;}.bar:hover.bar_in{width:100%;border-radius:7px;}
- MySQL分组排序去重多表联查_MySQL基础(二):多表查询 -- 分组排序
love彤彤
MySQL分组排序去重多表联查
多表查询:连接查询-子查询MySQL基础操作链接;工具:SQLyogMySQL语法顺序:select[distinct]fromjoin(leftjoin/rightjoin)onwheregroupbyhavingunionorderbylimit1.表结构用户,角色,权限三张表(主表)及三者之间的关系通过两张“第三张外键表”维护。“外键表”中的两个字段分别使用外键指向主表的主键。(一个用户可以
- Elasticsearch性能优化实战指南_index
2401_87378872
elasticsearch性能优化jenkins
curl-XPUT"localhost:9200/twitter"-H'Content-Type:application/json'-d'{"settings":{"index":{"sort.field":"date","sort.order":"desc"}},"mappings":{"properties":{"date":{"type":"date"}}}}目的:indexsorting是
- css 实现图片3D旋转效果(那些年写过的转圈圈)
Venus865
css前端
css实现图片旋转效果还是很容易的,不说废话直接上,先看下效果实现起来也不复杂,主要用到的css样式有:transform-style,transform,animation,-webkit-box-reflect,会在代码里一一介绍,如下.container{width:800px;height:600px;border:1pxsolidrgba(0,0,0,0.1);display:flex;
- 深度分页实践
YMY-up
项目实践数据分页
深度分页:查询偏移量过大的场景,这会导致查询性能较低#MySQL在无法利用索引的情况下跳过1000000条记录后,再获取10条记录SELECT*FROMt_orderORDERBYidLIMIT1000000,10优化方案:范围查询当可以保证ID的连续性时,用户根据ID范围进行分页是比较好的解决方案:SELECT*FROMt_orderWHEREid>100000ANDid100000LIMIT1
- 数字人批量生成视频
李lrh9166
音视频
(形象克隆✔声音克隆✔智能剪辑✔智能文案✔音频驱动✔矩阵发布多平台)只需要录制一个1234567的视频,就可以批量生成你的专属数字人视频。集星智影-数字人.layui-anim-downbit{border-radius:0.35rem;
- 面试基础----ReentrantLock vs Synchronized
WeiLai1112
后端面试职场和发展java后端架构分布式
ReentrantLockvsSynchronized:源码级解析与高并发场景下的锁博弈引言:多线程编程中的锁为何重要?业务背景:北京互联网大厂的高并发场景(如电商秒杀、支付交易、实时推荐系统)对线程安全和性能的极致要求。锁的核心作用:解决竞态条件(RaceCondition)、保证可见性(Visibility)和有序性(Ordering)。痛点直击:错误选锁可能引发性能瓶颈(如线程阻塞、上下文切
- Oracle 数据泵迁移步骤规范
deadknight9
运维Oracleoracle数据库
1、调研模块1.1、确认迁移用户以全库迁移为标准,也可直接通过需求方获取需要迁移的用户1)确认数据库中所有用户及其创建时间altersessionsetnls_date_format='yyyy-mm-dd-hh24:mi:ss';selectusername,createdfromdba_usersorderby2;2)以系统用户创建时间为限确认需要的用户selectusername,creat
- 二维数组在内存中的行存储和列存储
SheldonTT
数据结构数据库数据结构
目录例题:0.BaseAddress1.行存储方式(Row-majororder)2.列存储方式(Column-majororder)3.解方程找到i和j行存储和列存储方式的区别行存储方式(Row-majororder):列存储方式(Column-majororder):优缺点行存储方式的优点:行存储方式的缺点:列存储方式的优点:列存储方式的缺点:行存储方式的应用场景列存储方式的应用场景混合存储方
- std::set、std::map 和 std::unordered_map
-Mr_X-
哈希算法散列表算法
在C++标准库中,std::set、std::map和std::unordered_map是常用的关联容器,但它们在实现方式、性能和应用场景上有显著差异。以下是它们的核心区别:1.数据结构与有序性std::set/std::map基于红黑树(Red-BlackTree)实现,元素(或键值对)严格有序(按升序排列)。std::set:存储唯一键值,仅键可被访问。std::map:存储键值对,键唯一,
- CSS实现一张简易的贺卡
StarPlatinum2
简单的CSS程序css前端
效果当你把鼠标移至贺卡上时,贺卡会缓慢打开。代码如下Document*{margin:0;padding:0;box-sizing:border-box;}body{display:flex;justify-content:center;align-items:center;width:100vw;height:100vh;background:#2e3c50;}.card{width:300px
- SQL中如何使用GROUP BY语句
用完记得换回去
sql数据库
GROUPBY语句在SQL中用于:将行数据根据列进行分组。当你想要对数据进行分组并对每个分组进行聚合计算(如计数、求和、平均等)时,GROUPBY非常有用。以下是基本步骤和示例:基本语法SELECTcolumn_name(s),AGGREGATE_FUNCTION(column_name)FROMtable_nameWHEREconditionGROUPBYcolumn_name(s)ORDERB
- Avalonia-wpf介绍
晓纪同学
C#技巧总结wpf
文章目录工程简述窗体样式暗色模式亚克力模糊效果ExperimentalAcrylicBorder”和“ExperimentalAcrylicMaterial”的介绍ExperimentalAcrylicBorderExperimentalAcrylicMaterial按钮排版按钮图标按钮命令响应式命令添加一个新对话框对话框窗口样式对话框的输入与输出显示对话框对话框的位置和大小添加对话框内容模拟搜索
- unordered_set和unordered_map的使用
轩源源
开发语言c++数据结构哈希算法unordered_setunordered_map算法
Hello,今天我来为大家介绍一下前几年才刚刚新出的两个容器——unordered_map和unordered_set,这两个容器属于是map系列和set系列中的一种,和map/set不同的是它们的底层,map/set的底层是红黑树,而unordered_map/unordered_set这两个容器的底层则是哈希表,就查找效率而言,unordered_map/unordered_set要更胜一筹。
- Python tkinter -- 第14章 列表框(Listbox)属性
风华明远
PythontkinterPythontkinter
第14章列表框(Listbox)列表框控件显示多行文本,用户可以选中一行或者多行。所有的文本只能使用一种字体,不能混合使用多种字体。14.1属性常用的参数列表如下:属性描述activestyle被选中的文本的样式:underline:下划线dotbox:点划线框none:没有任何的样式backgroundbg背景颜色。默认是系统指定颜色borderwidthbd边框宽度。一般是1~2个像素值。cu
- web前端--html 5---qq注册
粉0321
web前端前端html
qq注册.theme{width:300px;height:600px;margin:0pxauto;}.theme1select{padding:5px10px;border:none;border-color:#B8B8B8;box-sizing:border-box;font-size:14px;color:#B8B8B8;}.a1{color:#4b7cde;}.form-group1in
- vue3 ts admin动态tab
Tirzano
vue.jsjavascript前端
Footer.admin{margin:0;padding:0;}.auto-height{height:calc(100vh-15px);}.el-menu--horizontal>.el-menu-item:nth-child(1){margin-right:auto;}.el-menu--horizontal.el-menu{border-bottom:none;}.el-main{marg
- mysql为啥使用B+树
讨吃的讨吃了
mysqlb树数据库
MySQL的InnoDB存储引擎采用B+树作为索引结构(而不是B树或其他数据结构),主要是基于B+树在数据库场景下的独特优势。以下是MySQL采用B+树的具体原因:1.B+树的核心优势(1)更适合范围查询B+树的叶子节点通过指针连接成一个有序链表,这非常适合范围查询(如BETWEEN、ORDERBY或GROUPBY)。在数据库中,范围查询是非常常见的操作,而B+树能够高效地支持这种查询模式。(2)
- SAP最全重订货点知识分享:MRP类型-重订货点VB/V1
ERP小白学习笔记
SAP-PP笔记经验分享学习制造
写在前面本篇文章可能会专业术语和大白话穿插,大白话是让各位小伙伴能够一目了然的清楚到底是什么,而专业术语是作为顾问或者专业人士必须知道的,或者装B的东西,所以就放一起来~1.理论知识再订货点(ReorderPoint,ROP),有时候查资料也叫做重订货点。在存货水平降到一定程度时就触发订货,避免库存耗尽。订货量(ReorderQuaility,ROQ):在触发订货机制时,每次订货的数量。计算公式:
- 英语场景(一)
山猪打不过家猪
En面试职场和发展
文章目录项目地址一、点餐二、美发三、健身项目地址教程作者:教程地址:代码仓库地址:一、点餐点东西i'dliketoordertwopizzas其他小料extraingredients回答anythingelseNo,that'sall.Thankyou!That'sit,thanks!我喜欢这里的装修llovethedecor我要…I'llhave...给你一些时间看菜单I'llgiveyouac
- 第一章:认识Tailwind CSS - 第四节 - Tailwind CSS 与其他 CSS 方案的对比
主流CSS方案概览1.传统CSS/*传统CSS*/.button{background-color:#3490dc;padding:0.5rem1rem;border-radius:0.25rem;color:white;}2.CSSModules/*Button.module.css*/.button{background-color:#3490dc;padding:0.5rem1rem;bor
- HTML——列表、表格、表单
什么时候可以睡觉
html前端服务器
目录一、列表1、无序列表(ul)2、有序列表(ol)二、表格三、表单1、表单2、表单的提交一、列表1、无序列表(ul)列表标题一列表标题二列表标题三2、有序列表(ol)列表标题一列表标题二列表标题三二、表格标签:表示一个表。表示一行列border-collapse设置表格的边线合并,如:border-collapse:collapse;姓名年龄张三18三、表单1、表单表单用于搜集不同类型的用户输入
- LeetCode[Math] - #66 Plus One
Cwind
javaLeetCode题解AlgorithmMath
原题链接:#66 Plus One
要求:
给定一个用数字数组表示的非负整数,如num1 = {1, 2, 3, 9}, num2 = {9, 9}等,给这个数加上1。
注意:
1. 数字的较高位存在数组的头上,即num1表示数字1239
2. 每一位(数组中的每个元素)的取值范围为0~9
难度:简单
分析:
题目比较简单,只须从数组
- JQuery中$.ajax()方法参数详解
AILIKES
JavaScriptjsonpjqueryAjaxjson
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。
type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持。
timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局
- JConsole & JVisualVM远程监视Webphere服务器JVM
Kai_Ge
JVisualVMJConsoleWebphere
JConsole是JDK里自带的一个工具,可以监测Java程序运行时所有对象的申请、释放等动作,将内存管理的所有信息进行统计、分析、可视化。我们可以根据这些信息判断程序是否有内存泄漏问题。
使用JConsole工具来分析WAS的JVM问题,需要进行相关的配置。
首先我们看WAS服务器端的配置.
1、登录was控制台https://10.4.119.18
- 自定义annotation
120153216
annotation
Java annotation 自定义注释@interface的用法 一、什么是注释
说起注释,得先提一提什么是元数据(metadata)。所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。而J2SE5.0中提供的注释就是java源代码的元数据,也就是说注释是描述java源
- CentOS 5/6.X 使用 EPEL YUM源
2002wmj
centos
CentOS 6.X 安装使用EPEL YUM源1. 查看操作系统版本[root@node1 ~]# uname -a Linux node1.test.com 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux [root@node1 ~]#
- 在SQLSERVER中查找缺失和无用的索引SQL
357029540
SQL Server
--缺失的索引
SELECT avg_total_user_cost * avg_user_impact * ( user_scans + user_seeks ) AS PossibleImprovement ,
last_user_seek ,
 
- Spring3 MVC 笔记(二) —json+rest优化
7454103
Spring3 MVC
接上次的 spring mvc 注解的一些详细信息!
其实也是一些个人的学习笔记 呵呵!
- 替换“\”的时候报错Unexpected internal error near index 1 \ ^
adminjun
java“\替换”
发现还是有些东西没有刻子脑子里,,过段时间就没什么概念了,所以贴出来...以免再忘...
在拆分字符串时遇到通过 \ 来拆分,可是用所以想通过转义 \\ 来拆分的时候会报异常
public class Main {
/*
- POJ 1035 Spell checker(哈希表)
aijuans
暴力求解--哈希表
/*
题意:输入字典,然后输入单词,判断字典中是否出现过该单词,或者是否进行删除、添加、替换操作,如果是,则输出对应的字典中的单词
要求按照输入时候的排名输出
题解:建立两个哈希表。一个存储字典和输入字典中单词的排名,一个进行最后输出的判重
*/
#include <iostream>
//#define
using namespace std;
const int HASH =
- 通过原型实现javascript Array的去重、最大值和最小值
ayaoxinchao
JavaScriptarrayprototype
用原型函数(prototype)可以定义一些很方便的自定义函数,实现各种自定义功能。本次主要是实现了Array的去重、获取最大值和最小值。
实现代码如下:
<script type="text/javascript">
Array.prototype.unique = function() {
var a = {};
var le
- UIWebView实现https双向认证请求
bewithme
UIWebViewhttpsObjective-C
什么是HTTPS双向认证我已在先前的博文 ASIHTTPRequest实现https双向认证请求
中有讲述,不理解的读者可以先复习一下。本文是用UIWebView来实现对需要客户端证书验证的服务请求,网上有些文章中有涉及到此内容,但都只言片语,没有讲完全,更没有完整的代码,让人困扰不已。但是此知
- NoSQL数据库之Redis数据库管理(Redis高级应用之事务处理、持久化操作、pub_sub、虚拟内存)
bijian1013
redis数据库NoSQL
3.事务处理
Redis对事务的支持目前不比较简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中
- 各数据库分页sql备忘
bingyingao
oraclesql分页
ORACLE
下面这个效率很低
SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM IPAY_RCD_FS_RETURN order by id desc) A ) WHERE RN <20;
下面这个效率很高
SELECT A.*, ROWNUM RN FROM (SELECT * FROM IPAY_RCD_
- 【Scala七】Scala核心一:函数
bit1129
scala
1. 如果函数体只有一行代码,则可以不用写{},比如
def print(x: Int) = println(x)
一行上的多条语句用分号隔开,则只有第一句属于方法体,例如
def printWithValue(x: Int) : String= println(x); "ABC"
上面的代码报错,因为,printWithValue的方法
- 了解GHC的factorial编译过程
bookjovi
haskell
GHC相对其他主流语言的编译器或解释器还是比较复杂的,一部分原因是haskell本身的设计就不易于实现compiler,如lazy特性,static typed,类型推导等。
关于GHC的内部实现有篇文章说的挺好,这里,文中在RTS一节中详细说了haskell的concurrent实现,里面提到了green thread,如果熟悉Go语言的话就会发现,ghc的concurrent实现和Go有点类
- Java-Collections Framework学习与总结-LinkedHashMap
BrokenDreams
LinkedHashMap
前面总结了java.util.HashMap,了解了其内部由散列表实现,每个桶内是一个单向链表。那有没有双向链表的实现呢?双向链表的实现会具备什么特性呢?来看一下HashMap的一个子类——java.util.LinkedHashMap。
- 读《研磨设计模式》-代码笔记-抽象工厂模式-Abstract Factory
bylijinnan
abstract
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* Abstract Factory Pattern
* 抽象工厂模式的目的是:
* 通过在抽象工厂里面定义一组产品接口,方便地切换“产品簇”
* 这些接口是相关或者相依赖的
- 压暗面部高光
cherishLC
PS
方法一、压暗高光&重新着色
当皮肤很油又使用闪光灯时,很容易在面部形成高光区域。
下面讲一下我今天处理高光区域的心得:
皮肤可以分为纹理和色彩两个属性。其中纹理主要由亮度通道(Lab模式的L通道)决定,色彩则由a、b通道确定。
处理思路为在保持高光区域纹理的情况下,对高光区域着色。具体步骤为:降低高光区域的整体的亮度,再进行着色。
如果想简化步骤,可以只进行着色(参看下面的步骤1
- Java VisualVM监控远程JVM
crabdave
visualvm
Java VisualVM监控远程JVM
JDK1.6开始自带的VisualVM就是不错的监控工具.
这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到界面
通过JMX连接远程机器, 需要经过下面的配置:
1. 修改远程机器JDK配置文件 (我这里远程机器是linux).
 
- Saiku去掉登录模块
daizj
saiku登录olapBI
1、修改applicationContext-saiku-webapp.xml
<security:intercept-url pattern="/rest/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern=&qu
- 浅析 Flex中的Focus
dsjt
htmlFlexFlash
关键字:focus、 setFocus、 IFocusManager、KeyboardEvent
焦点、设置焦点、获得焦点、键盘事件
一、无焦点的困扰——组件监听不到键盘事件
原因:只有获得焦点的组件(确切说是InteractiveObject)才能监听到键盘事件的目标阶段;键盘事件(flash.events.KeyboardEvent)参与冒泡阶段,所以焦点组件的父项(以及它爸
- Yii全局函数使用
dcj3sjt126com
yii
由于YII致力于完美的整合第三方库,它并没有定义任何全局函数。yii中的每一个应用都需要全类别和对象范围。例如,Yii::app()->user;Yii::app()->params['name'];等等。我们可以自行设定全局函数,使得代码看起来更加简洁易用。(原文地址)
我们可以保存在globals.php在protected目录下。然后,在入口脚本index.php的,我们包括在
- 设计模式之单例模式二(解决无序写入的问题)
come_for_dream
单例模式volatile乱序执行双重检验锁
在上篇文章中我们使用了双重检验锁的方式避免懒汉式单例模式下由于多线程造成的实例被多次创建的问题,但是因为由于JVM为了使得处理器内部的运算单元能充分利用,处理器可能会对输入代码进行乱序执行(Out Of Order Execute)优化,处理器会在计算之后将乱序执行的结果进行重组,保证该
- 程序员从初级到高级的蜕变
gcq511120594
框架工作PHPandroidhtml5
软件开发是一个奇怪的行业,市场远远供不应求。这是一个已经存在多年的问题,而且随着时间的流逝,愈演愈烈。
我们严重缺乏能够满足需求的人才。这个行业相当年轻。大多数软件项目是失败的。几乎所有的项目都会超出预算。我们解决问题的最佳指导方针可以归结为——“用一些通用方法去解决问题,当然这些方法常常不管用,于是,唯一能做的就是不断地尝试,逐个看看是否奏效”。
现在我们把淫浸代码时间超过3年的开发人员称为
- Reverse Linked List
hcx2013
list
Reverse a singly linked list.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
p
- Spring4.1新特性——数据库集成测试
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
- C# Ajax上传图片同时生成微缩图(附Demo)
liyonghui160com
1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)
2.C#位图处理 System.Drawing。
3.最新demo支持IE7,IE8,Fir
- Java list三种遍历方法性能比较
pda158
java
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码例如以下:
package com.hisense.tiger.list;
import java.util.ArrayList;
import java.util.Iterator;
- 300个涵盖IT各方面的免费资源(上)——商业与市场篇
shoothao
seo商业与市场IT资源免费资源
A.网站模板+logo+服务器主机+发票生成
HTML5 UP:响应式的HTML5和CSS3网站模板。
Bootswatch:免费的Bootstrap主题。
Templated:收集了845个免费的CSS和HTML5网站模板。
Wordpress.org|Wordpress.com:可免费创建你的新网站。
Strikingly:关注领域中免费无限的移动优
- localStorage、sessionStorage
uule
localStorage
W3School 例子
HTML5 提供了两种在客户端存储数据的新方法:
localStorage - 没有时间限制的数据存储
sessionStorage - 针对一个 session 的数据存储
之前,这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储,因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不