首页
友情链接
精美壁纸
给我留言
更多
关于我
Search
1
uniapp Click点击事件冲突解决
4,558 阅读
2
【插件】UNI APP 实现商米打印机功能支持T1,T2,V2机型
3,875 阅读
3
【测试可用】个人码免签支付系统源码/免签支付系统/微信支付平台
1,978 阅读
4
Java Validation参数校验注解使用
1,230 阅读
5
windows10下docker:给已存在的容器添加端口映射的方法
1,220 阅读
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
登录
/
注册
Search
标签搜索
python
mysql
人人商城
php
java
docker
typecho
插件
微擎
seo
spring boot
discuz
队列
uni-app
phpcms
教程视频
开源系统
源码
工具
css
哈根达斯
累计撰写
100
篇文章
累计收到
154
条评论
首页
栏目
Java
Spring Boot
Spring Mvc
Java基础
进阶知识
前端
uniapp
小程序/公众号
JavaScript
HTML/CSS
Vue
PHP
开源软件
商城
营销工具
开发工具
视频/教程
Discuz主题/插件
typecho主题/插件
SEO杂谈
数据库
MongoDB
MySQL
Redis
单片机
概念说明
电路相关
Python
devops
docker
k8s
linux
职场杂谈
页面
友情链接
精美壁纸
给我留言
关于我
搜索到
15
篇与
Java
的结果
2023-01-31
开发中常见的加密方式,对称加密,非对称加密,摘要签名算法的区别
目录加密一般分为两种,对称加密和非对称加密。对称与非对称区别对称加密对称加密就是加密解密都用同一个秘钥,比如DES、3DES(TripleDES)和AES等。非对称加密非对称加密就是加密和解密不是用的同一种秘钥,比如RSA算法、DSA算法、ECC算法、DH算法等。在非对称加密中,用来加密的秘钥叫公钥,用来解密的秘钥叫私钥。公钥和私钥都是成对生成的,公钥分发给其他人用来加密,私钥用来解密,典型的应用场景为支付宝开放平台的签名和数据加解密两种方式的优缺点对称加密:解密速度快,但保密性差。非对称加密:加密算法保密性好,它消除了最终用户交换密钥的需要。但是加解密速度要远远低于对称加密。摘要签名加密算法摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是不可逆的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证。常见的摘要算法有:MD5,SHA,国密SM3等,一般用于登录后的token生成等,数据加密后交易等,典型场景如微信支付签名验证国密介绍国密为国家密码局认定的国产密码算法,即商用密码。国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1,SM2,SM3,SM4等,密钥长度和分组长度均为 128 位。SM1 为对称加密SM2 为非对称加密SM3 摘要签名SM4 对称加密,分组密码算法。
2023年01月31日
74 阅读
0 评论
0 点赞
2023-01-16
Java中基本数据类型与对应的包装类型介绍
目录一. Java基本类型与包装类型介绍Java中有8种基本数据类型,分别为:数字类型(6种) :byte、short、int、long、float、double字符类型(1种) :char布尔型(1种) :boolean。这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、DoubleCharacterBoolean基本类型位数字节默认值int3240short1620long6480Lbyte810char162'u0000'float3240fdouble6480dboolean1官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1位,但是实际中会考虑计算机高效存储因素。false二 类型的自动装箱与拆箱装箱与拆箱的含义:装箱:将基本类型用它们对应的引用类型包装起来;拆箱:将包装类型转换为基本数据类型;Java基本类型的包装类的大部分实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean;前面4种包装类默认创建了数值[-128,127]的相应类型的缓存数据,Character创建了数值在[0,127]范围的缓存数据,Boolean 直接返回True Or False。如果超出对应范围仍然会去创建新的对象。其中仅浮点数类型的包装类Float与Double 没有实现常量池技术。Boolean常量池public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE); // 其中TRUE与FALSE为定义的静态常量 }CharacterCache 缓存常量池private static class CharacterCache { private CharacterCache(){} static final Character cache[] = new Character[127 + 1]; static { for (int i = 0; i < cache.length; i++) cache[i] = new Character((char)i); } }/** *此方法将始终缓存-128 到 127(包括端点)范围内的值,并可以缓存此范围之外的其他值。 */ public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) //如果在缓存范围值内 return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); // 不如不在范围内者使用new运算符创建一个堆内存返回新的对象 }举例说明例子1 Integer i1 = 33; Integer i2 = 33; System.out.println(i1 == i2);// 输出 true, 因为33在-128-127范围内使用的是缓存常量,即两个数值的内存地址一致 Integer i11 = 333; Integer i22 = 333; System.out.println(i11 == i22);// 输出 false // 超出范围,返回的都是new的新对象 Double i3 = 1.2; Double i4 = 1.2; System.out.println(i3 == i4);// 输出 false // Double未实现缓存常量池 例子2需要注意一旦使用new运算符创建对象,则将创建新的数据,不会使用缓存常量值,如以下Integer i1 = 40; Integer i2 = new Integer(40); System.out.println(i1==i2);//输出 falseInteger i1=40;Java 在编译的时候会直接将代码封装成 Integer i1=Integer.valueOf(40);,从而使用常量池中的对象。Integer i1 = new Integer(40);这种情况下会创建新的对象。例子3Integer i1 = 40; Integer i2 = 40; Integer i3 = 0; Integer i4 = new Integer(40); Integer i5 = new Integer(40); Integer i6 = new Integer(0); System.out.println("i1=i2 : " + (i1 == i2)); // true,两个变量使用的是同一个常量值 System.out.println("i1=i2+i3 : " + (i1 == i2 + i3)); // true, 因为"+"加号运算符不能使用在Integer上,所以会自动拆箱为基础类型int:40+0=40, 同时"="等号也无法使用在Integer上,则最终比较为40=40 System.out.println("i1=i4 : " + (i1 == i4));// false System.out.println("i4=i5 : " + (i4 == i5)); // false System.out.println("i4=i5+i6 : " + (i4 == i5 + i6)); //true,加法运算发自动拆箱后进行加法运行并进行比较 System.out.println("40=i5+i6 : " + (40 == i5 + i6));// true,加法运算发自动拆箱后进行加法运行并进行比较
2023年01月16日
81 阅读
0 评论
0 点赞
2023-01-16
Java中双等号比较运算"=="和"equals"方法的区别
目录两个等于号 ==它的作用是判断两个对象的内存地址是不是相等,即判断两个对象是不是同一个对象。基本数据类型比较的是值,引用数据类型==比较的是内存地址equals()比较它的作用也是判断两个对象是否相等,它不能用于比较基本数据类型的变量。 equals()方法存在于 Object 类中,而 Object 类是所有类的直接或间接父类。Object 类 equals() 方法:public boolean equals(Object obj) { return (this == obj); }equals() 方法存在两种使用情况:情况 1:类没有覆盖 equals() 方法, 则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。使用的默认是 Object 类 equals() 方法。情况 2:类覆盖 equals() 方法。一般覆盖 equals() 方法用来比对两个对象的 内容 相等;若它们的内容相等,则返回 true(即认为这两个对象相等),比如字符串的String类比较则是覆盖重写equals方法。实例代码:public class test1 { public static void main(String[] args) { String str1 = new String("test"); // a 为一个引用 String str2 = new String("test"); // b为另一个引用,对象的内容一样 String str3 = "test"; // 放在常量池中 String str4 = "test"; // 从常量池中查找 if (str3 == str3) // true System.out.println("aa==bb"); if (str1 == str2) // false,非同一对象 System.out.println("a==b"); if (str1.equals(str2)) // true System.out.println("equals比较内容相等"); if (42 == 42.0) { // true System.out.println("true"); } } }特别说明String 中的 equals 方法是被重写过的,因为 Object 的 equals 方法是比较的对象的内存地址,而 String 的 equals 方法比较的是对象的值。当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。如果没有就在常量池中重新创建一个 String 对象。String 类 equals()的重写方法:public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
2023年01月16日
97 阅读
0 评论
0 点赞
2022-11-25
Maven中设置依赖引用第三方jar,并打包部署
目录有很多jar包我们在maven远程仓库中无法下载时,需要在项目中添加依赖怎么处理呢?第一步:将jar包放到放到项目resource下lib文件夹中,如无此文件夹,请先创建,再将jar放进去<!--以下内存根据实际情况自定义填写--> <dependency> <groupId>org.demo</groupId> <artifactId>demo-core</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/libs/demo.jar</systemPath> </dependency> 第二步:添加完成后我们此时ide已经可以正常的进行获取包内的文件,并进行开发,但是我们打包后发现找不到类,此时我们需要在插件配置项添加如下代码. <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--解决本地jar包打不进jar的问题--> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> </plugins> 我们在重新打包使用 mvn clean package -Dmaven.test.skip=true,重新运行后发现已经可以正常了
2022年11月25日
95 阅读
0 评论
0 点赞
2022-04-16
JRebel是一套JavaEE开发工具
简介JRebel是一套JavaEE开发工具。Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化,你可以一个个地上传而不是一次性全部部署。当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署好的应用程序上,从而跳过了构建和部署的过程,可以省去大量的部署用的时间。JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效。IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费时间浪费生命。目前对于idea热部署最好的解决方案就是安装JRebel插件。安装第一步:安装插件第二步:在线GUID地址https://www.guidgen.com/如果失效刷新GUID替换就可以!服务器地址:https://jrebel.qekang.com/{GUID}第三步:打开jrebel 如下所示面板,选择Connect to online licensing service安装成功之后就可以通过JRebel启动项目。这样修改完Java代码后,就可以通过快捷键 Ctrl+shift+F9 而不再需要重启站点这样繁琐浪费时间的操作了。相关设置破解完成后的样子设置成离线工作模式设置自动编译要想实现热部署,首先需要对Intellij按如下进行设置:由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效。打开运行时编译设置compiler.automake.allow.when.app.running快捷键ctrl+shift+A,搜索:registry或者按快捷键 Ctrl+Shift+Alt+/ ,选择 Registry使用运行项目时要点击图中红框中的按钮,即可运行:第一个按钮是Run,第二个按钮是Debug。修改代码(只测试了Java代码的修改)后,按快捷键 Ctrl + Shift + F9,运行后会提示有变化是否重新加载,选yes。完成加载以后,就已经实现了热更新效果。作者:想长高的美男子链接:https://www.jianshu.com/p/fa1e867f55d8来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2022年04月16日
117 阅读
0 评论
0 点赞
1
2
3