- 求两个字符串的最长公共字串(dp)
未来的JAVA高级开发工程师
算法Javajava算法数据结构
packagecom.cjh.dp;importcom.sun.swing.internal.plaf.basic.resources.basic;publicclassDp2{publicstaticvoidmain(String[]args){//求两个字符串的最长公共子串method("itheima","thema");}privatestaticvoidmethod(Stringa,St
- Golang学习笔记_28——工厂方法模式(实例)
LuckyLay
Golang学习笔记golang学习笔记工厂方法模式
Golang学习笔记_26——通道Golang学习笔记_27——单例模式Golang学习笔记_28——工厂方法模式工厂方法模式(实例)packagefactory_method_demoimport"fmt"//Order接口,定义订单的基本操作typeOrderinterface{CalculateTotal()float64Display()}//RegularOrder是普通订单结构体typ
- Java:函数式(Functional)接口
我是小水水啊
Javajava开发语言
文章目录1什么是函数式接口2如何理解函数式接口3举例Java内置函数式接口1之前的函数式接口2四大核心函数式接口3.4.3其它接口内置接口代码演示5练习1什么是函数式接口只包含一个抽象方法(SingleAbstractMethod,简称SAM)的接口,称为函数式接口。当然该接口可以包含其他非抽象方法。你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行
- el-table指定列合并
qq_43383282
javascriptvue.jsecmascript
最近有需求关于实现表格指定列相同数据合并,实现效果如下:非原创,实验出两种方法,总结记录如下:table标签使用:span-method="objectSpanMethod"方法一return{tableColumnList:[{"field":"businessDeptName","fieldName":"业务部门",},{"field":"type","fieldName":"资源类型code
- vue中el-table合并单元格
~张小八~
vue.jsjavascript前端
1.在el-table中添加:span-method=“handdelSpanMethod”2.handdelSpanMethod方法//历史单特殊计量合并企业名称相同的第一列handdelSpanMethod({row,column,rowIndex,columnIndex}){if(columnIndex===2){//企业名称相同时,合并第一列constprevRow=this.specil
- 一篇文章搞懂Spring AOP的历程
2401_89285805
springsqljava
publicMethodMatchergetMethodMatcher(){returnnewMethodMatcher(){@Overridepublicbooleanmatches(Methodmethod,ClasstargetClass){return“echo”.equals(method.getName())&&method.getParameterTypes().length==1&
- 4.opencv函数--cv2.findContours
xf8964
openCVopenCVpythonfindContours
该函数是查找图片轮廓,函数接收二值图片,函数原型cv2.findContours(image,mode,method,contours=None,hierarchy=None,offset=None)参数说明:image:原图mode:轮廓的检索模式,有四种,常用的是cv2.RETR_EXTERNAL枚举说明cv2.RETR_EXTERNAL表示只检测外轮廓cv2.RETR_LIST检测的轮廓不建
- JavaFx的PopupWindow不能输入中文的问题
weixin_34104341
python
2019独角兽企业重金招聘Python工程师标准>>>1.当主界面的文本输入框有焦点时,弹出框中的文本输入框不能输入中文。原因是:InputMethodEvent在主界面的文本输入框处理后,传入到PopupWindow中的InputMethodEvent没有中文信息。2.主界面没有节点拥有焦点时,弹出框中的文本输入框不能输入中文原因是:InputMethodEvent不能传入PopupWindow
- CTF题型 Python中pickle反序列化进阶利用&;例题&;opache绕过
PDD工程师
程序员python开发语言
题目分析:`app.config['SECRET_KEY']=os.urandom(2).hex()`secret\_key是弱密钥可以爆破进行伪造@app.route(‘/path:note\_id’,methods=[‘GET’])defview_note(note_id):notes=session.get(‘notes’)ifnotnotes:returnrender_template(‘
- python str与bytes之间的转换
upDiff
Python
#bytesobjectb=b"example"#strobjects="example"#strtobytessb=bytes(s,encoding="utf8")#bytestostrbs=str(b,encoding="utf8")#analternativemethod#strtobytessb2=str.encode(s)#bytestostrbs2=bytes.decode(b)转载地
- 【SpringBoot】用一个常见错误说一下@RequestParam属性
后端springboot
问题复现在开发过程中,我们经常会用到@RequestParam,我们常常会遇到另外一个问题。当需要特别多的请求参数时,我们往往会忽略其中一些参数是否可选。例如存在类似这样的代码:@RequestMapping(path="/hi4",method=RequestMethod.GET)publicStringhi4(@RequestParam("name")Stringname,@RequestPa
- python的抽象类
§闪灵,~星~~
python抽象类
python抽象类的实现可以借助库abc来实现先创建类A():importabcclassA(metaclass=abc.ABCMeta):#抽象类@abc.abstractmethod#声明抽象方法defread(self):
[email protected](self):passdef__str__(self):print("共有方法,__str__方法重写")接着
- Python抽象类
蓝绿色~菠菜
Python
抽象类:如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。抽象类可以借助python的abc模块实现。抽象类不可以被实例化,抽象类中抽象方法不需要实现,一般写pass。子类必须要实现被@abstractmethod装饰的抽象方法。抽象类中可以定义一般方法。普通父类完全可以实现抽象类功能为什么还要定义抽象类呢?抽象类最大的特点就是子
- (完美解决)java文件操作报错:java.io.FileNotFoundException(拒绝访问)
java全套学习资料
java
01-错误信息:Exceptioninthread"main"java.io.FileNotFoundException:e:b(拒绝访问。)atjava.io.FileOutputStream.open0(NativeMethod)atjava.io.FileOutputStream.open(UnknownSource)atjava.io.FileOutputStream.(UnknownSo
- el-date-picker 时间选择器 禁用时间段
qq_46100747
element-uijavascript前端vue.js
当月之后不含当月methods:{getTime(){return{disabledDate(time){constdate=newDate();constyear=date.getFullYear();letmonth=date.getMonth()+1;if(month>=1&&month<=9){month="0"+month
- [Golang]JWT主要函数汇总
Rezarit.
golang开发语言中间件后端mysql
前言最近在学token,了解到jwt相关的函数与方法,于是乎准备汇总一下最近学到的内容。当然,这次汇总并不全面,只是涉及到了部分重要函数。一、生成JWT1、NewWithClaims函数核心功能:它是创建JWT的关键起始点。此函数用于构建一个新的JWT结构体实例,需要传入两个主要参数,一个是签名方法(比如jwt.SigningMethodHS256),另一个是声明(Claims)。签名方法指定了用
- request.getRemoteAddr()获取ip地址时得到的值是[0:0:0:0:0:0:0:1]原因和解决方法
Liquid road
报错
项目场景:使用request.getRemoteAddr()获取ip地址问题描述:在使用request.getRemoteAddr()获取ip地址的时候得到的值是[0:0:0:0:0:0:0:1]Request:{url='/1/haha',ip='[0:0:0:0:0:0:0:1]',classMethod='com.liquid.web.IndexController.index',args=
- Vue 开发者的 React 实战指南:状态管理篇
对于Vue开发者来说,React的状态管理可能是最需要转变思维方式的部分之一。本文将从Vue开发者熟悉的角度出发,详细介绍React的状态管理方案,并通过实战示例帮助你快速掌握。本地状态管理对比Vue的响应式系统在Vue中,我们习惯使用data选项来定义组件的本地状态:{{count}}+1exportdefault{data(){return{count:0}},methods:{increme
- Java虚拟机(JVM)深入解析
I~Lucky
jvm
Java虚拟机(JVM)是Java程序运行的核心环境,它负责将Java字节码转换为机器码并执行。本文将深入解析JVM的运行时数据区、类加载机制以及执行引擎,帮助读者更好地理解JVM的工作原理。一、运行时数据区(RuntimeDataArea)运行时数据区是JVM在执行Java程序时分配的内存区域,主要包括以下几个部分:1.方法区(MethodArea)方法区用于存储类信息、常量、静态变量以及即时编
- 前端canvas对象转成file对象
小小弯_Shelby
前端vue.js
importhtml2canvasfrom'html2canvas'exportdefault{methods:{//canvas对象转成file对象canvasToFile(){html2canvas(this.$parent.$refs['mapPanel'].$el,{width:this.$parent.$refs['mapPanel'].$el.clientWidth-600//heig
- VC++计算精解【6】
sakura_sea
VC++2022计算精解c++开发语言
文章目录二分法(BisectionMethod)数学原理c++参考文献二分法(BisectionMethod)数学原理如果一个函数f(x)f(x)f(x)在闭区间[a,b][a,b][a,b]上连续,且满足f(a)⋅f(b)#includeusingnamespacestd;//函数定义doublef(doublex){return3*pow(x,3)-7*pow(x,2)+11;}//二分法函数
- 如何从一个 Shell 脚本调用另一个 Shell 脚本 ?
bash
在Unix和Linux的世界中,shell脚本是一种强大的工具,可用于任务自动化和系统管理等。通常,我们需要从一个shell脚本中调用另一个shell脚本。这不仅有助于将复杂的脚本组织成可管理的模块,而且有助于脚本的可重用性和可维护性。BasicMethod最直接的方法是在父脚本中使用它的路径。假设您有两个脚本:script1.sh和script2.shscript1.sh:#!/bin/bash
- Java 如何只测试某个类或方法:Maven与IntelliJ IDEA的不同方法及注意事项
2301_79306982
javaintellij-idea
1.使用Maven只测试某一个类或方法(1)测试一个类Maven提供了通过命令行运行特定测试类的能力:mvn-Dtest=ClassNametest示例:mvn-Dtest=fileIOTesttest这将只运行fileIOTest类的所有测试方法。(2)测试一个具体方法如果只想运行某一个类中的特定测试方法,可以指定类名和方法名:mvn-Dtest=ClassName#methodNametest
- vue中路由点击两次报错问题,加个判断
比较好记
vue前端
methods:{//点击菜单路由跳转clickMenu(item){//当页面路由与点击后要跳转的路由不一致才允许跳转,且不是重定向情况if(this.$route.path!==item.path&&!(this.$route.path==='/home'&&(item.path==='/'))){this.$router.push(item.path)}}},
- 30.Java 多线程锁(synchronized 锁的八种情况、synchronized 锁、公平锁与非公平锁、可重入锁、死锁)
我命由我12345
Java-基础入门开发语言idejava-eejavaintellij-ideaintellijideajdk
一、synchronized锁的八种情况1、情况一(1)需求一部手机,测试先是AA线程打印短信还是BB线程打印邮件(2)测试Phone资源类packagecom.my.sync;publicclassPhone{publicsynchronizedvoidsendMes(){System.out.println("method1:sendMes");}publicsynchronizedvoids
- 双周报Vol.62:更新Trait对象语法、新增local types特性、优化web ide debug...多项技术已更新!
编程语言
2024/12/16MoonBit更新Traitobject语法由原来的直接写Trait变更为&Trait(旧语法已deprecate)。这一改动是为了让traitobject类型和trait本身在语法上区分开,以避免混淆。在所有涉及traitobject的场合,包括类型标注、为traitobject定义方法(fn&Trait::method(...))和创建traitobject(...as&T
- 双周报Vol.62:更新Trait对象语法、新增local types特性、优化web ide debug...多项技术已更新!
编程语言
2024/12/16MoonBit更新Traitobject语法由原来的直接写Trait变更为&Trait(旧语法已deprecate)。这一改动是为了让traitobject类型和trait本身在语法上区分开,以避免混淆。在所有涉及traitobject的场合,包括类型标注、为traitobject定义方法(fn&Trait::method(...))和创建traitobject(...as&T
- TypeScript新增接口和更新接口传参定义差异的问题
interfaceUser{id?:string;name:string;age:number;}//新增用户时,id不是必须的,name和age必须,如何给data定义呢?exportconstaddUser=(data:User)=>fetch('/api/user/add',{method:'POST',body:JSON.stringify(data)})//更新用户时,id是必须的,na
- Python 与 Java 方法重载对比及 Python 中的模拟实现
szial
python开发语言
Python与Java方法重载对比及Python中的模拟实现在面向对象编程中,方法重载(MethodOverloading)是一个常见的概念。它允许在同一个类中定义多个同名方法,但这些方法具有不同的参数列表(如参数类型、数量或顺序)。Java原生支持方法重载,而Python则没有直接的支持。本文将详细比较Python和Java在方法重载上的不同,并介绍在Python中模拟方法重载的几种常用方法。1
- uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。
码农键盘上的梦
uni-appuni-appios
uni-popup-dialog对话框将uni-popup的type属性改为dialog,并引入对应组件即可使用对话框,该组件不支持单独使用示例打开弹窗exportdefault{methods:{open(){this.$refs.popup.open()},/***点击取消按钮触发*@param{Object}done*/close(){//TODO做一些其他的事情,before-close为
- 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 速度很慢而且效率也不