Java 学习
文章平均质量分 73
YelloJesse
希望多多评论,多多交流~
展开
-
报错 Invalid character found in the request target
(1)执行导出 EXCEL 文件的时候,报错:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986(2)通过 F12 得知,错误码为 400,即:你访问的页面域名不存在或者请求错误。主要分为两种。1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户.原创 2021-08-31 09:02:25 · 17807 阅读 · 0 评论 -
RSA分段加密
1 RSAUtil工具类import java.io.ByteArrayOutputStream;import java.security.Key;import java.security.KeyFactory;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import javax.crypto.Cipher;import org.apache.commo原创 2021-08-09 15:50:06 · 9252 阅读 · 0 评论 -
@Autowired/@Qualifier/@Resource/@Value区别详解
1 @Autowired@Autowired根据属性类型进行自动装配。(1)创建 service 和 dao 类,并在类上添加在bean中创建实例的注解。UserDao 接口:public interface UserDao { void addUser();}UserDaoImpl 实现类:@Repositorypublic class UserDaoImpl implements UserDao { @Override public void addUser()原创 2021-02-07 21:56:35 · 1199 阅读 · 1 评论 -
Java代理模式之静态代理、JDK动态代理、CGLib动态代理
1 代理模式概念代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。2 静态代理2.1 概念这种代理方式需要代理对象和目标对象实现一样的接口。优点:可以在不修改目标对象的前提下扩展目标对象的功能。缺点:冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。不易维护。一旦接口增加方原创 2021-02-06 20:04:01 · 358 阅读 · 3 评论 -
Eureka使用浅析
1 Eureka 介绍Eureka 是 Netflix 开发的服务发现框架,SpringCloud 将它集成在自己的子项目 spring-cloud-netflix 中,实现 SpringCloud 的服务发现功能。Eureka 包含两个组件:Eureka Server 和 Eureka Client。Eureka Server 提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可原创 2021-01-07 14:04:02 · 261 阅读 · 0 评论 -
JWT鉴权的实现
1234原创 2020-12-28 18:46:12 · 416 阅读 · 0 评论 -
Java的JJWT实现JWT
1 什么是 JJWTJJWT 是一个提供端到端的 JWT 创建和验证的 Java 库。永远免费和开源 (Apache License,版本2.0),JJWT 很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。2 token 的创建2.1 引入依赖<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <原创 2020-12-25 17:04:53 · 709 阅读 · 1 评论 -
什么是JWT?
1 介绍JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用 JWT 在用户和服务器之间传递安全可靠的信息。2 JWT 的组成2.1 头部(Header)头部用于描述关于该 JWT 的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个 JSON 对象。{"typ":"JWT","alg":"HS256"}在头部指明了签名算法是 HS256 算法,编码后的字符串如下:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9Tip原创 2020-12-25 16:36:54 · 287 阅读 · 0 评论 -
BCrypt 密码加密
1 介绍任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。有很多标准的算法比 SHA 或者 MD5,结合 salt (盐)是一个不错的选择。 Spring Security 提供了 BCryptPasswordEncoder 类,实现 Spring 的 PasswordEncoder 接口使用 BCrypt 强哈希方法来加密密码。BCrypt 强哈希方法每次加密的结果都不一样。2 准备工作2.1 引入依赖<dependency> <groupId原创 2020-12-25 14:54:17 · 1078 阅读 · 0 评论 -
public static void main (String[] args) 详解
1 public static void main (String[] args)public static void main (String[] args) 是Java程序的入口方法,JVM在运行程序时,会先查找 main() 方法。public是权限修饰符,表明任何类或对象都可以访问这个方法。 static表明mian()方法是一个静态方法,即方法中的代码是存储在静态存储区的,...原创 2019-08-18 13:45:56 · 8312 阅读 · 0 评论 -
Java程序的初始化顺序
在Java语言中,当实例化对象的时候,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化之后,才会调用对象所在类的构造函数创建对象。Java程序的初始化一般遵循三个原则:静态对象(变量) 优先于 非静态对象(变量) 初始化。 静态对象(变量)只初始化一次,而非静态对象(变量) 可能会初始化多次。 父类优先于子类初始化。 按照成员变量的定义顺序进行初始化。...原创 2019-08-18 14:06:49 · 375 阅读 · 3 评论 -
Java的构造函数详解
什么是构造函数构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。在Java语言中,构造函数具有以下特点:构造函数必须与类的名字相同,并且不能有返回值(连void也不能写)。 每个类可以有多个构造函数。当开发人员没有提供构造函数时,编译器在把源码编译成字节码的过程中会提供一个没有参数默认的构造函数,但该构造函数不会执行任何代码。如果开发人员提供了构造函数,那么编译器就不会再...原创 2019-08-18 14:50:30 · 735 阅读 · 0 评论 -
UDP协议收发数据 JAVA代码实现
客户端代码:/*UDP协议发送数据: 1.创建发送端Socket对象。 2.创建数据,并把数据打包。 3.调用Socket对象的发送方法发送数据包。 4.释放资源。 */public class sendDemo { public static void main(String[] args) throws IOException { ...原创 2019-06-10 22:01:05 · 1692 阅读 · 0 评论 -
堆排序Java代码实现
堆排序堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法描述将初始待排序关键字序列 (R1,R2….Rn) 构建成大顶堆,此堆为初始的无序区; 将堆顶元素R[1] 与最后一个元素R[n] 交换,此时得到新的无序区 (R1,R2,……Rn-1) 和新的有...原创 2019-06-01 17:24:16 · 4300 阅读 · 5 评论 -
快速排序Java实现
快速排序快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为“基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有...原创 2019-06-01 16:25:38 · 5562 阅读 · 0 评论 -
希尔排序Java代码实现
希尔排序希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序是把元素按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每...原创 2019-05-31 22:44:56 · 4343 阅读 · 2 评论 -
插入排序Java代码实现
插入排序插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描...原创 2019-05-31 21:38:59 · 3970 阅读 · 0 评论 -
选择排序Java代码实现
选择排序表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小元素,存放到已排序序列的末尾,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排...原创 2019-05-31 20:58:15 · 3222 阅读 · 1 评论 -
冒泡排序Java代码实现
冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最...原创 2019-05-31 20:36:29 · 16615 阅读 · 1 评论 -
归并排序Java代码实现
归并排序和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有...原创 2019-06-01 15:41:00 · 2667 阅读 · 1 评论