云顶集团娱4118-4118ccm云顶集团
做最好的网站

Java正则表明式,实现信息摘要与数字签名

日期:2019-10-09编辑作者:云顶集团

算法简述

数字签字算法可以看作是一种含有密钥的音信摘要算法,并且这种密钥饱含了公钥和私钥。也正是说,数字署名算法是非对称加密算法和音讯摘要算法的结合体。

数字签字算法须求能够证明数据完整性、认证数据出自,并起到抗否认的效果与利益。

数字具名算法包涵签字和认证两项操作,坚守私钥签名,公钥验证的秘诀。

签名时要选拔私钥和待具名数据,验证时则须要公钥、签字值和待签字数据,其基本算法首如果音信摘要算法。

图片 1Java完结音信摘要与数字签名图

RSA、DSA、ECDSA

java.util.regex包支持

在大部景观下使用正则的时候都会利用String类完毕,不过正则最原始的开荒包是java.util.regex,那几个包里也提供有八个类。

范例:Pattem类

public class TestDemo { public static void main(String args[]) { String str = "a1b22c333d4444e55555"; String regex = "\d+"; Pattern pattren = Pattern.compile; // 编译正则 String result [] = pattern.split; // 拆分字符串 System.out.println(Arrays.toString; }}

输出结果

[a,b,c,d,e]

public class TestDemo { public static void main(String args[]) { String str = "24123"; String regex = "\d+"; Pattern pattren = Pattern.compile; // 编译正则 Matcher mat = pattern.matcher; // 进行正则匹配 System.out.println(mat.matches; // 匹配结果 }}

出口结果

true

因为String类本人就早就支撑那样的操作了,所以对于String类来讲由于具备接受的多寡也都是字符串,所以非常少会去选取Pattem与Matcher八个类进行操作了。

  • 采用正则落成认证代码能够起码化。
  • 鲜明要明了String类对正则支持的多少个方法。

越来越多内容戳这里

Java学习路径图此正是java程序猿的读书路径图,由简到繁,由易到难,一步步的上学,最终成为Java技术员。希望对我们的就学抱有助于。

Blocker 有妨碍的
  • 在if/else/for/while/do语句中必得运用大括号,就算唯有一行代码,防止选拔上面包车型大巴样式:if (condition) statements;

  • 在利用正则表明式时,利用好其预编写翻译成效,能够有效加快正则相配速度。表明:不要在章程体钦赐义:Pattern pattern = Pattern.compile;public class XxxClass {// Use precompileprivate static Pattern NUMBEPAJERO_PATTERN = Pattern.compile;public Pattern getNumberPattern() {// Avoid use Pattern.compile in method body.Pattern localPattern = Pattern.compile;return localPattern;}}

  • 多线程并行管理定期义务时,提姆er运转七个TimeTask时,只要当中之一没有捕获抛出的特别,其余职务便会自行终止运转,使用ScheduledExecutorService则未有那些主题素材。 //org.apache.commons.lang3.concurrent.BasicThreadFactoryScheduledExecutorServiceexecutorService = new ScheduledThreadPoolExecutor(1,new BasicThreadFactory.Builder().naming帕特tern("example-schedule-pool-%d").daemon.build;executorService.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {//do something}},initialDelay,period, TimeUnit.HOURubiconS);

  • 享有的覆写方法,必需加@Override证明。 反例:getObject()与get0bject()的难题。多个是字母的O,三个是数字的0,加@Override能够准确判别是或不是覆盖成功。其他,假使在抽象类中对艺术签字举办更改,其完结类会马上编写翻译报错。

  • 线程池不允许使用Executors去成立,而是经过ThreadPoolExecutor的方法,那样的处理情势让写的同班更是确定线程池的运行准绳,规避财富耗尽的高风险。 表明:Executors各种艺术的流弊:1)newFixedThreadPool和newSingleThreadExecutor: 首要难点是堆叠的乞请管理队列只怕会损耗非常大的内部存款和储蓄器,以致OOM。2)newCachedThreadPool和newScheduledThreadPool: 主要难题是线程数最大数是Integer.MAX_VALUE,大概会创立数量比比较多的线程,以至OOM。

Positive example 1://org.apache.commons.lang3.concurrent.BasicThreadFactoryScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1,new BasicThreadFactory.Builder().namingPattern("example-schedule-pool-%d").daemon.build;

Positive example 2:ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build();

//Common Thread PoolExecutorService pool = new ThreadPoolExecutor(5, 200, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>, namedThreadFactory, new ThreadPoolExecutor.AbortPolicy;pool.execute-> System.out.println(Thread.currentThread().getName;pool.shutdown();//gracefully shutdown

Positive example 3:<bean ><property name="corePoolSize" value="10" /><property name="maxPoolSize" value="100" /><property name="queueCapacity" value="2000" />

<property name="threadFactory" value= threadFactory /> <property name="rejectedExecutionHandler"> <ref local="rejectedExecutionHandler" /> </property></bean>//in codeuserThreadPool.execute;
  • 防止通过七个类的指标援引访问此类的静态变量或静态方法,无谓扩展编译器分析开支,直接用类名来访谈就能够。

  • ###### Critical 紧要的

Object的equals方法轻巧抛空指针万分,应采取常量或分明有值的目的来调用equals。

public void f(String str){ String inner = "hi"; if(inner.equals{ System.out.println("hello world"); }}
  • SimpleDateFormat 是线程不安全的类,平时不要定义为static变量,假如定义为static,必须加锁,也许选取DateUtils工具类。 表达:假设是JDK8的采用,能够选取instant替代Date,LocalDateTime替代Calendar,DateTimeFormatter代替SimpleDateFormat,官方给出的解说:simple beautiful strong immutable thread-safe。

Positive example 1:private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";public String getFormat(Date date){SimpleDateFormat dateFormat = new SimpleDateFormat;return sdf.format;}

Positive example 2:private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public void getFormat(){synchronized {sdf.format(new Date;….;}

Java正则表明式,实现信息摘要与数字签名。Positive example 3:private static final ThreadLocal<DateFormat> DATE_FORMATTER = new ThreadLocal<DateFormat>() {@Overrideprotected DateFormat initialValue() {return new SimpleDateFormat("yyyy-MM-dd");}};

  • 不可能利用老式的类或艺术。 表明:java.net.UENCORELDecoder 中的方法decode(String encodeStr) 那一个方式已经过时,应该使用双参数decode(String source, String encode)。接口提供方既然鲜明是不达时宜接口,那么有职务同一时候提供新的接口;作为调用方来讲,有分文不取去考证过时方法的新达成是怎样。

  • 在八个switch块内,种种case要么通过break/return等来终止,要么注释表明程序将继续施行到哪一个case停止;在三个switch块内,都不能够不带有叁个default语句而且位居最终,尽管它怎么样代码也未有。

    switch{case 1 :break ;case 2 :break ;default :}

  • 常量命名应该全套大写,单词间用下划线隔开分离,力求语义表明完整清楚,不要嫌名字长

    public class ConstantNameDemo {

    /**

    • max stock count*/public static final Long MAX_STOCK_COUNT = 50000L;
  • 有着的枚举类型字段供给求有注释,表达每一个数据项的用处。public enum TestEnum {/*** agree/agree,/** reject*/reject;

     private String action; TestEnum(String action) { this.action = action; } public String getAction() { return action; }
    

    }

  • 不无编制程序相关的命名均不能够以下划线或新币符号起初

  • 抽象类命名使用Abstract或Base初阶

    abstract class BaseControllerDemo{}

    abstract class AbstractActionDemo{}

  • 主意名、参数名、成员变量、局地变量都统一使用lowerCamelCase,必须遵循驼峰情势

  • ###### Major 严重的

  • 不容许任何法力值直接出现在代码中。Negative example://Magic values, except for predefined, are forbidden in coding.if(key.equals("Id#taobao_1")){//...}Positive example:String KEY_PRE = "Id#taobao_1";if(key.equals{//...}

  • 中括号是数组类型的一局地,数组定义如下:String[] args

    String[] a = new String[3];

  • 即刻清理不再选取的代码段或安插消息。 表明:对于垃圾代码或过时配置,坚决清理干净,制止程序过度臃肿,代码冗余。Positive example: For codes which are temporarily removed and likely to be reused, use /// to add a reasonable note.public static void hello() {/// Business is stopped temporarily by the owner.// Business business = new Business();// business.active();System.out.println("it's finished");}

  • 循环体内,字符串的交接情势,使用StringBuilder的append方法开展扩大。 表达:反编写翻译出的字节码文件展现每一遍循环都会new出三个StringBuilder对象,然后开展append操作,末了通过toString方法重回String对象,形成内部存款和储蓄器财富浪费。反例:String result;for (String string : tagNameList) {result = result + string;}正例:StringBuilder stringBuilder = new StringBuilder();for (String string : tagNameList) {stringBuilder.append;}String result = stringBuilder.toString();

  • 负有的肤浅方法必供给用javadoc注释、除了再次来到值、参数、分外表达外,还非得提议该格局做什么样业务,完毕怎么样遵守。 表明:如有实现和调用注意事项,请一并表达。/**

    • fetch data by rule id
      • @param ruleId rule id
    • @param page page number
    • @param jsonContext json format context
    • @return Result<XxxxDO>*/Result<XxxxDO> fetchDataByRuleId(Long ruleId, Integer page, String jsonContext);
  • 具有的类都必须抬高成立者音信。 表达:在设置模板时,注意IDEA的@author为${USER},而eclipse的@author为${user},大小写有分裂,而日期的装置统一为yyyy/MM/dd的格式。/**

    • Demo class
      • @author keriezhang
    • @date 2016/10/31*/public class CodeNoteDemo {}
  • 措施内部单行注释,在被解说语句上方另起一行,使用//注释。方法内部多行注释使用/* */注释。注意与代码对齐。public void method() {// Put single line comment above code. (Note: align '//' comment with code)int a = 3;

     /** * Some description about follow code. (Note: align '/**' comment with code) */ int b = 4;
    

    }

  • 类、类性情、类措施的评释必需运用javadoc规范,使用/*内容/格式,不得利用//xxx格局和/xxx/情势。 表达:在IDE编辑窗口中,javadoc格局会唤起相关切释,生成javadoc能够正确输出相应注释;在IDE中,工程调用方法时,不步入格局就能够上浮提醒方法、参数、重返值的意思,提升阅读功效。/

    - - XXX class function description.

    /public class XxClass implements Serializable {private static final long serialVersionUID = 113323427779853001L;/** id/private Long id;/** title*/private String title;

     /** * find by id * * @param ruleId rule id * @param page start from 1 * @return Result<Xxxx> */ public Result<Xxxx> funcA(Long ruleId, Integer page) { return null; }
    

    }

  • 类名使用UpperCamelCase风格,必得信守驼峰形式,但以下意况差异:(领域模型的连锁命名)DO / BO / DTO / VO / DAO

  • 除常用艺术(如getXxx/isXxx)等外,不要在基准剖断中试行复杂的讲话,将复杂逻辑剖断的结果赋值给二个有含义的布尔变量,以拉长可读性。 表明:相当多if语句内的逻辑非凡复杂,阅读者要求分析条件表达式的末梢结出,技能掌握怎样的原则施行怎么样的言辞,那么,若是阅读者深入分析逻辑表明式错误吗?

Negative example:if ((file.open(fileName, "w") != null) && || {...}

Positive example:boolean existed = (file.open(fileName, "w") != null) && || ;if {...}

  • 集结开头化时,内定集结开端值大小。 表明:HashMap使用如下构造方法举行最初化,如果一时无法分明集结大小,那么钦命暗中认可值就可以。

Negative example:Map<String, String> map = new HashMap<String, String>();

Positive example:Map<String, String> map = new HashMap<String, String>;

三、验证ant

算法完成

数字具名有多个流程:签字和评释。

它们的前提都是要有三个公钥、密钥对。

签名

用私钥为音讯总括签字

范例

用公钥验证摘要

importjava.security.KeyFactory;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.PrivateKey;import java.security.PublicKey;import java.security.Signature;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Base64;public class DsaCoder{ public static final String KEY_ALGORITHM = "DSA"; public enum DsaTypeEn { MD5withDSA, SHA1withDSA } /** * DSA密钥长度默认1024位。 密钥长度必须是64的整数倍,范围在512~1024之间 */ private static final int KEY_SIZE = 1024; private KeyPair keyPair; public DsaCoder() throws Exception { keyPair = initKey(); } public byte[] signature(byte[] data, byte[] privateKey) throws Exception { PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); PrivateKey key =keyFactory.generatePrivate; Signature signature = Signature.getInstance(DsaTypeEn.SHA1withDSA.name; signature.initSign; signature.update; return signature.sign(); } public boolean verify(byte[] data, byte[] publicKey, byte[] sign) throws Exception { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); PublicKey key =keyFactory.generatePublic; Signature signature = Signature.getInstance(DsaTypeEn.SHA1withDSA.name; signature.initVerify; signature.update; return signature.verify; } private KeyPair initKey() throws Exception { // 初始化密钥对生成器 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); // 实例化密钥对生成器 keyPairGen.initialize; // 实例化密钥对 return keyPairGen.genKeyPair(); } public byte[] getPublicKey() { return keyPair.getPublic().getEncoded(); } public byte[] getPrivateKey() { return keyPair.getPrivate().getEncoded(); } public static void main(String[] args) throws Exception { String msg = "Hello World"; DsaCoder dsa = new DsaCoder(); byte[] sign = dsa.signature(msg.getBytes(), dsa.getPrivateKey; boolean flag = dsa.verify(msg.getBytes(), dsa.getPublicKey; String result = flag ? "数字签名匹配" : "数字签名不匹配"; System.out.println("数字签名:" + Base64.encodeBase64URLSafeString; System.out.println("验证结果:" + result); }}

《Core Java Volume2》

《Java加密与解密本领》

正则标识

具有的正则能够行使的标识都在java.util.regex.帕特tem类里面定义。

  • 单个字符。
    • 字符:表示由壹个人字符所组成:"x"
    • :表示转义字符“”。
    • t:表示贰个“t”符号。
    • n:相称换行“n”符号。
  • 字符集.
    • [abc]:表示恐怕是字符a可能是字符b大概是字符c中的大肆一人。
    • [^abc]:表示不是a、b、c中的任性一位。
    • [a-z]:全数的小写字母。
    • [a-zA-Z]:全体的假名。
    • [0-9]:跋扈壹个人数字。
  • 简化的字符集表明式。
    • .:表示放肆的一人字符。
    • d:等价与“[0-9]”,属于简化写法。
    • D:等价与“[^0-9]”,也属于简化写法。
    • s:表示大肆的空白字符,比方:“t”、“n”。
    • S:表示大肆的非空白字符。
    • w:等价于“[a-zA-Z_0-9]”,表示由任性的字母、数字、_所组成。
    • W:等价于“[^a-zA-Z_0-9]”,表示不是由放肆的假名、数字、_所组成。
  • 边界相称(不要在java中使用,在JavaScript里选择)。
    • ^:正则的最初。
    • $:正则的完毕。
  • 数据表明式
    • 正则?:表示此正则能够出现0次或1次。
    • 正则+:表示此正则能够出现1次或1次以上。
    • 正则*:表示此正则可以现身0次、1次或频仍。
    • 正则{n}:表示此正则正好出现n次。
    • 正则{n,}:表示此正则出现n次及以上。
    • 正则{n,m}:表示此正则出现n次~m次。
  • 逻辑运算。
    • 正则1 正则2:正则1判别完成未来继续剖断正则2。
    • 正则1 | 正则2:正则1也许是正则2有一组满足就能够。
    • :将八个正则作为一组,可感到这一组单独设置出现的次数。

范例:行使正则表明式

public class TestDemo { public static void main(String args[]) { String str = "a"; System.out.println(str.matches; // true System.out.println(str.matches; // false System.out.println(str.matches; // true System.out.println(str.matches; // false System.out.println(str.matches); // false System.out.println(str.matches); // true System.out.println(str.matches; // true System.out.println(str.matches; // false str = "123"; System.out.println(str.matches; // false System.out.println(str.matches; // true }}

出口结果

truefalsetruefalsefalsetruetruefalsefalsetrue

图片 2图形发自简书App图片 3图表发自简书App

小结

如上所述,阿里Baba(Alibaba)Java规约插件照旧对品种很有赞助的,大家用起来呢。

【表达ant安装成功!因为ant暗中同意运营build.xml文件,这些文件须要大家成立。】

算法实现

JDK中动用MD5和SHA那三种消息摘要的不二等秘书技基本一致,步骤如下:

  1. 初始化MessageDigest对象
  2. 履新要总括的内容
  3. 浮动摘要

范例

importjava.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import org.apache.commons.codec.binary.Base64;public class MsgDigestDemo{ public static void main(String args[]) throws NoSuchAlgorithmException, UnsupportedEncodingException { String msg = "Hello World!"; MessageDigest md5Digest = MessageDigest.getInstance; // 更新要计算的内容 md5Digest.update(msg.getBytes; // 完成哈希计算,得到摘要 byte[] md5Encoded = md5Digest.digest(); MessageDigest shaDigest = MessageDigest.getInstance; // 更新要计算的内容 shaDigest.update(msg.getBytes; // 完成哈希计算,得到摘要 byte[] shaEncoded = shaDigest.digest(); System.out.println("原文: " + msg); System.out.println("MD5摘要: " + Base64.encodeBase64URLSafeString(md5Encoded)); System.out.println("SHA摘要: " + Base64.encodeBase64URLSafeString(shaEncoded)); }}

输出

原文:Hello World!MD5摘要: 7Qdih1MuhjZehB6Sv8UNjASHA摘要:Lve95gjOVATpfV8EL5X4nxwjKHE

importjavax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;public class HmacCoder{ /** * JDK支持HmacMD5, HmacSHA1,HmacSHA256, HmacSHA384, HmacSHA512 */ public enum HmacTypeEn { HmacMD5, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA512; } public static byte[] encode(byte[] plaintext, byte[] secretKey, HmacTypeEn type) throwsException { SecretKeySpec keySpec = new SecretKeySpec(secretKey, type.name; Mac mac = Mac.getInstance(keySpec.getAlgorithm; mac.init; return mac.doFinal(plaintext); } public static void main(String[] args) throws Exception { String msg = "Hello World!"; byte[] secretKey = "Secret_Key".getBytes; byte[] digest = HmacCoder.encode(msg.getBytes(), secretKey, HmacTypeEn.HmacSHA256); System.out.println("原文: " + msg); System.out.println("摘要: " + Base64.encodeBase64URLSafeString; }}

输出

原文:Hello World!摘要: b8-eUifaOJ5OUFweOoq08HbGAMsIpC3Nt-Yv-S91Yr4
  • 笔录常用的正则标志
  • 左右String类对正则的支撑

读书路径图,特此注脚;仅希望对热爱JAVA学习抱有利于。本文原来的书文链接

入题

环顾出多个分类结果(类jira的bug优先级分为:blocker,critical,major,minor,trivial)

  • ###### Blocker 有妨碍的

  • ###### Critical 紧要的

  • ###### Major 严重的

现实的语法难题,值得学习下:

一、安装ant

算法简述

它是二个独一对应二个音信或文本的一定长度的值,它由二个单向Hash加密函数对新闻实行职能而发出。如果新闻在旅途改造了,则接收者通过对摄取音讯的新发生的摘要与原摘要比较,就可见道音信是还是不是被退换了。由此信息摘要保障了信息的完整性。音信摘要选用单向Hash 函数将需加密的公开"摘要"成一串密文,这一串密文亦称作数字指纹(Finger Print)。它有固定的长度,且差别的精晓摘要成密文,其结果总是不相同的,而同样的公开其摘要必定一致。那样那串摘要便可成为验注明文是还是不是是"真身"的"指纹"了。

音讯摘要具备以下特点:

  1. 独一性:数据假若有好几变动,那么再经过音信摘要算法获得的摘要也会产生变化。纵然理论上有希望会时有发生冲击,但是概率极度低。
  2. 不可逆:音讯摘要算法的密文不可能被解密。
  3. 无需密钥,可应用于遍布式网络。
  4. 不管道输送入的明白有多少长度,计算出来的音信摘要的长度总是恒久的。

音信摘要,其实正是将索要摘要的数额作为参数,经过哈希函数的乘除,获得的散列值。

音信摘要算法包括MD(Message Digest,音讯摘要算法)SHA(Secure Hash Algorithm,安全散列算法)MAC(Message AuthenticationCode,新闻认证码算法)共3大类别,常用来注脚数据的完整性,是数字具名算法的大旨算法。

MD5SHA1分别是MDSHA算法类别中最有代表性的算法。

今昔,MD5已被察觉有不少纰漏,进而不再安全。SHA算法比MD算法的摘要长度越来越长,也愈发安全。

标题引出

为了更加好的辨证正则的运用,上边供给编写制定四个前后相继:判别贰个字符串是不是由数字所组成。实现原理:

  • 将字符串变为字符数组。
  • 之后推断每三个字符是或不是在“‘0’~‘9’”范围以内。

范例:完毕字符串的判定

public class TestDemo { public static void main(String args[]) { String str1 = "123"; System.out.println(isNumber; String str2 = "1a23"; System.out.println(isNumber; } public static boolean isNumber(String temp) { char data [] = temp.toCharArray(); // 将字符串变为字符数组,目的是循环取出 for(int i = 0; i < data.length; i++) { if(data[i] > '9' || data[i] < '0') { return false; } } return true; }}

出口结果

truefalse

这儿推断字符串是否由数字所组成,是贰个很轻易达成的法力,不过就那样多少个简易的操作,却写出了八行代码,那么假设说以往是进一步目迷五色的操作呢?

范例:更简便易行的做法

public class TestDemo { public static void main(String args[]) { String str1 = "123"; System.out.println(str1.matches; String str2 = "1a23"; System.out.println(str2.matches; }}

输出结果

truefalse

二个写了众多行的代码,最终只是写了一行简单的操作就实现了,而里面出现的"d+"就是正则表明式。

正则是从JDK1.4的时候正规引进到java中的工具类,全部正则帮忙的类都定义在java.util.regex包里面。在JDK1.4从前,假诺想要使用正则,则须要独自下载三个正则表明式的开垦包后才足以选拔。

在java.util.regex包里面首要定义了七个关键的类:

  • 帕特tem类:此类对象若是要想获取必需使用compile()方法,方法的功用是编写翻译正则。
  • Matcher类:通过Pattem类取得。
前言

小编用本身的体系做白老鼠,试试那一个阿里Baba(Alibaba)荣誉出品的《Java规约插件》

图片 4结果照旧有4800+条难点!!几乎吓得作者狐疑人生有木有!?小编依然怀着认真的不错精神踏向试验田。如想打听什么设置插件和插件的行使本事请猛戳:

图片 5证实安装

本文由云顶集团娱4118发布于云顶集团,转载请注明出处:Java正则表明式,实现信息摘要与数字签名

关键词:

Java接口的多承继及运用,springboot完毕读写分离

正文参谋了Spring Data JPA官方文书档案,援用了有的文书档案的代码。 server:本demo开采工具选拔springSTS前提读写分离库...

详细>>

Leetcode - Count Univalue Subtrees

云顶集团注册送28 ,My code: My code: 云顶集团4008网址 ,My code: My code: 思路还是比较清楚的,三种艺术 /** * Definition fo...

详细>>

ThreadPoolExecute源码剖判云顶集团:,ConcurrentLink

@Transactional参数表明 参数 说明 readOnly 是否是只读事务,true表示只读,false表示读写 timeout 事务超时秒数,默认值-1表...

详细>>

数据类型转换云顶集团:,写多少个好像jQuery的

前言 :近年来因为部分投机的政艺术学习停滞了一段时间,再捡起来时就可怜的别扭,十分大的打击了自己的学习热...

详细>>