java
文章平均质量分 60
java
代码狩猎者
学习至上
展开
-
URL中的转义字符
2.encodeURIComponent()把字符串作为 URI 组件的一部分(如path/query/fragment等)进行编码,所以用于分隔 URI 各个部分的特殊分隔符号(;1.encodeURI()把字符串作为 URI整体进行编码,所以URI组件中的特殊分隔符号(;,%,#,&,=等特殊字符串符号时,因为上述字符有特殊含义,导致服务器端无法正确解析参数,如何处理?编码的格式为:%加字符的ASCII码(16进制),例如空格的编码值是"%20"。输出你好javascript。HTML中的转义字符。转载 2023-03-07 16:12:10 · 6505 阅读 · 0 评论 -
获取被校验注解的异常
获取被校验注解的异常原创 2023-02-21 16:42:58 · 139 阅读 · 0 评论 -
【无标题】
@RestControllerAdvice 用法原创 2023-02-21 14:45:28 · 446 阅读 · 0 评论 -
自定义注解--校验dto的枚举值
自定义注解--校验dto的枚举值原创 2023-02-21 11:33:25 · 263 阅读 · 0 评论 -
Validation动态地选择要校验的字段
Validation动态地选择要校验的字段转载 2023-02-21 11:19:15 · 198 阅读 · 0 评论 -
JMeter压测
JMeter压测转载 2023-02-06 15:35:52 · 112 阅读 · 0 评论 -
如何设置线程池线程数
在java中,几乎所有需要异步或者并发执行任务的程序都可以使用线程池。在开发过程中,合理的使用线程池能够带来3个好处:首先是降低资源消耗。通过重复利用已创建的线程降低创建线程和销毁线程所带来的开销。 提高响应速度。当任务到达时,任务可以不需要等待线程创建就立即执行。 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅消耗系统资源,同时降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。如何合理的使用线程池,如何合理的给出线程池的大小,是非常重要的。对于线程池的大小不能过大,也不能.原创 2022-04-22 18:02:56 · 1650 阅读 · 0 评论 -
如何分库分表
当数据库的数据量过大,大到一定的程度,我们就可以进行分库分表。那么基于什么原则,什么方法进行拆分,这就是本篇所要讲的。数据库瓶颈不管是 IO 瓶颈还是 CPU 瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务 Service 来看, 就是可用数据库连接少甚至无连接可用,接下来就可以想象了(并发量、吞吐量、崩溃)。IO 瓶颈:第一种:磁盘读 IO 瓶颈,热点数据太多,数据库缓存放不下,每次查询会产生大量的 IO,降低查询速度→分库和垂直分表。原创 2022-03-15 10:20:21 · 1675 阅读 · 0 评论 -
分库分表方法
单行sql要不要事务_不要什么都还没搞清楚,上来就分库分表!_weixin_39963174的博客-CSDN博客转载 2021-12-29 16:43:06 · 77 阅读 · 0 评论 -
mybatis 插入修改返回
insert对应的方法返回值为插入数据库的条数(如上,每次插入一条数据,所以每次addUser()都是返回1)update对应的方法返回值为匹配数据库的条数(不论最终是否对数据进行了修改,只要某条记录符合匹配条件,返回值就加1)delete对应的方法返回删除条数...原创 2021-12-23 10:40:33 · 1177 阅读 · 0 评论 -
springBoot的sentinel实现限流降级
SpringBoot进阶教程(六十八)Sentinel实现限流降级 - 请叫我头头哥 - 博客园转载 2021-12-02 19:31:44 · 217 阅读 · 0 评论 -
关于PROPAGATION_NESTED的理解
查了一些资料,感觉并不能很清晰地表达出两者的差异。所以打算自己总结一下。先来看一下Spring中对于事务传播性的几种定义PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW -- 新建事务,如果转载 2021-11-05 16:52:50 · 837 阅读 · 0 评论 -
Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有转载 2021-11-04 17:19:37 · 223 阅读 · 0 评论 -
@Transactional 详解
@Transactional 是声明式事务管理 编程中使用的注解1 .添加位置1)接口实现类或接口实现方法上,而不是接口类中。2)访问权限:public 的方法才起作用。@Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。系统设计:将标签放置在需要进行事务管理的方法上,而不是放在所有接口实现类上:只读的接口就不需要事务管理,由于配置了@Transactional就需要AOP拦截及事务的处理,可能影响系统性能。3)错误使用:转载 2021-11-04 16:32:09 · 1562 阅读 · 0 评论 -
spring实现可跨域访问的rest服务
基于Spring实现可跨域访问的REST服务_Black Monkey-CSDN博客转载 2021-10-19 18:06:21 · 102 阅读 · 0 评论 -
分布式场景ID生成算法--Twitter的SnowFlake雪花算法
一、Twitter的雪花算法—SnowFlake1. SnowFlake算法背景Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。2. Twitter Snowflake算法的应用Twitter Snowflake算法是用来在分布式场景下生成唯一ID的。举个栗子:我们有10台分布式MySql服务器,我们的系统每秒能生转载 2021-09-03 10:59:09 · 728 阅读 · 0 评论 -
应用mybatis-plus插件写代码
引入包:<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version></dependency>在entity类上加注解@TableName("tableName") ...原创 2021-09-02 17:58:13 · 98 阅读 · 0 评论 -
微服务网关Zuul和Gateway的区别
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/xc1158840657/article/details/90712084微服务系列(一)聊聊服务网关前几年随着分布式架构的演变,微服务开始兴起,自然也产生了一系列支持微服务的框架,例如本文要聊到的Spring Cloud。Spring 相信做Java的小伙伴们已经耳熟能详了,也正是应该这个Spring生态获得广大的关注,在Spring转载 2021-07-28 17:39:46 · 4445 阅读 · 0 评论 -
Spring AOP @After,@Around,@Before执行的顺序以及可能遇到的问题
AOP中有@Before,@After,@Around,@AfterRunning注解等等。首先上下自己的代码,定义了切点的定义@Aspect@Componentpublic class LogApsect { private static final Logger logger = LoggerFactory.getLogger(LogApsect.class); ThreadLocal<Long> startTime = new ThreadLocal&l...转载 2021-07-12 14:49:04 · 796 阅读 · 0 评论 -
spring boot 实现快速构建项目
一、通过插件构建1、官网下载插件百度搜索“idea插件”->官网内搜索“Spring Assistant”->下载社区版的快速构建插件2、安装插件到idea重启idea,并新建一个项目,按步骤执行,并完成。二、通过spring initializr利用SpringBoot工程生成工具搭建一个项目https://start.spring.io/选择Java版本:jdk8选择springBoot版本:2.4.0导入idea后,编译,使其没有错误。运行。原创 2021-06-30 13:59:48 · 111 阅读 · 0 评论 -
jdk8新特性,使用CompletableFuture优化你的代码执行效率
这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例. 在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下:public static void main(String[] args) throws Exception { ExecutorService execut转载 2021-06-28 17:03:05 · 621 阅读 · 0 评论 -
可重入锁不会死锁原因
本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。在JAVA环境下 ReentrantLock 和synchronized都是 可重入锁。不会造成死锁。之所以可重入锁,不断获取已拥有的锁,而不会死锁,是因为锁有一个持有计数来跟踪对lock方法的嵌套调用。被一个锁保护的代码可以调用另一个使用相同锁的方法。下面是可重入锁使用实例:package re.转载 2021-06-25 16:36:29 · 1124 阅读 · 0 评论 -
【Java】滴答滴答—计时器工具
在多线程编程时,我们需要考虑到资源的有效利用和线程占有资源问题。例如在C-S框架中,客户机连接服务器的操作。当客户机连接到服务器时,如果长时间没有进行信息交互而一直保持与服务器的连接,这不仅会增加服务器的负担,还会造成CPU资源的浪费。因此,我们完成一个计时器工具,检测当客户机在指定时间内有没有进行操作,如果没有则可以通过调用抽象方法doSomething()来对客户机或相关线程进行关闭或放在缓冲区中等操作,及时归还CPU资源;而当客户机需要进行信息交互时,重新向服务器发送连接请求。在代码实现上必须转载 2021-06-24 11:40:10 · 123 阅读 · 0 评论 -
Java 和微服务系列第 3 部分 微服务通信
Java 和微服务系列第 3 部分 微服务通信微服务的设计目的是方便扩展。这种扩展通过横向扩展各个服务来完成。面对众多微服务实例,您需要一种查找服务的方法,并在您调用的服务的不同实例之间进行负载平衡。本章将介绍可用于查找系统中的微服务并向其发出请求的选项,并将介绍在确定所需服务的位置后,如何实现微服务架构中的不同服务之间的通信。服务注册表服务注册表是一个持久存储区,包含随时可用的所有微服务的列表,以及访问它们的路径。微服务可能因为 4 种原因而需要与服务注册表进行通信:注册 成功部署某项服.转载 2021-06-16 17:29:39 · 425 阅读 · 0 评论 -
Uuid、数据库自增、雪花算法、基于redis自研等数据库唯一ID生成策略对比
一、Twitter的雪花算法—SnowFlake1. SnowFlake算法背景Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。2. Twitter Snowflake算法的应用Twitter Snowflake算法是用来在分布式场景下生成唯一ID的。举个栗子:我们有10台分布式MySql服务器,我们的系统每秒能生转载 2021-05-31 15:43:11 · 1189 阅读 · 0 评论 -
Java位运算在程序设计中的使用:位掩码
Java位运算在程序设计中的使用:位掩码(BitMask)转自:http://xxgblog.com/2013/09/15/java-bitmask/在Java中,位运算符有很多,例如与(&)、非(~)、或(|)、异或(^)、移位(<<和>>)等。这些运算符在日常编码中很少会用到。在下面的一个例子中,会用到位掩码(BitMask),其中包含大量的位运算。不只是在Java中,其他编写语言中也是可以使用的。例如,在一个系统中,用户一般有查询(Select)、新增(转载 2021-05-27 17:09:47 · 155 阅读 · 0 评论 -
idea打jar发布和打war包发布
然后声明一点,下面打包的过程中,scope一直都是使用默认的范围<!--用于编译jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>run转载 2021-05-10 10:27:19 · 408 阅读 · 0 评论 -
重温java基础
Java标识符Java所有的组成部分都需要名字。类名、变量名以及方法名都被称为标识符。关于Java标识符,有以下几点需要注意:所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始首字符之后可以是任何字符的组合关键字不能用作标识符标识符是大小写敏感的合法标识符举例:age、$salary、_value、__1_val转载 2015-08-29 08:38:09 · 489 阅读 · 0 评论 -
java类初始化顺序
1. 静态方法:1) 成员变量分为实例变量和静态变量。其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量。而静态变量被该类所有的对象公有(相当于全局变量),不需要实例化就已经存在。方法也可分为实例方法和静态方法。其中,实例方法必须在类实例化之后通过对象来调用,而静态方法可以在类实例化之前就使用。与成员变量不同的是:无论哪种方法,在内存中只有一转载 2015-08-26 14:32:38 · 392 阅读 · 0 评论 -
condition对象,这个对象的await()和singal()方法
使用stop()不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何原创 2015-08-25 23:49:46 · 1096 阅读 · 0 评论 -
[JAVA]定时任务之-Quartz使用篇
定时任务之-Quartz使用篇 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。官方网站:http://www.opensym转载 2015-08-16 22:50:16 · 394 阅读 · 0 评论 -
AES加密解密
/** * 密钥算法 */ public static final String KEY_ALGORITHM = "AES";/** * 加密数据 具体实现: Base64(AES256(明文数据,Base64编码后的密钥)) * * @param data 待加密数据 * @param key 密原创 2015-12-10 16:52:48 · 816 阅读 · 0 评论 -
ThreadLocal维护线程局部 变量或线程局部对象
import java.util.Random;//线程范围内的共享和作用(ThreadLocal维护线程局部 变量或线程局部对象时,每一个使用他们的线程都是独立的一个副本,不会影响其他 的线程)public class ThreadLocalTest {//private static ThreadLocal x = new ThreadLocal();public st原创 2015-08-25 23:31:35 · 302 阅读 · 0 评论 -
关于InputStream类的available()方法
要一次读取多个字节时,经常用到InputStream.available()方法,这个方法可以在读写操作前先得知数据流里有多少个字节可以读取。需要注意的是,如果这个方法用在从本地文件读取数据时,一般不会遇到问题,但如果是用于网络操作,就经常会遇到一些麻烦。比如,Socket通讯时,对方明明发来了1000个字节,但是自己的程序调用available()方法却只得到900,或者100,甚至是0,感觉有转载 2014-12-04 15:39:55 · 503 阅读 · 0 评论 -
创建线程池
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class ThreadPoolTest {/*** @param args*///创建线程池pub原创 2015-08-25 23:20:46 · 307 阅读 · 0 评论 -
互斥的实例和使用场景
互斥体实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex))。互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section)。每个进程中访问临界资源的那段代码称为临界区(Critical Section)(临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还原创 2015-08-25 22:58:15 · 1049 阅读 · 0 评论 -
C3P0配置实战
C3P0: 一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。 默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。但这个连接池性能不佳,因此官方也只是建议仅在开发环境下使用。Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxo转载 2015-08-25 23:55:06 · 361 阅读 · 0 评论 -
创建线程方式
创建线程的2中方式:重写Thread的Run方法、将Runnable作为参数传递给Thread原创 2015-08-25 22:38:39 · 293 阅读 · 0 评论 -
线程范围内的共享和作用
import java.util.HashMap;import java.util.Random;//线程范围内的共享和作用public class ThreadScopShareData {private static Integer data = 0;private static HashMap map = new HashMap();public static原创 2015-08-25 23:19:07 · 290 阅读 · 0 评论 -
Java中的Atomic包使用指南
引言Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。Atomic包介绍在Atomic包里一共有12个类,四种原子更新方式,分别是原转载 2015-08-25 23:18:38 · 257 阅读 · 0 评论