
java
文章平均质量分 87
idest
要什么自行车
展开
-
我们写过的无效单元测试
单元测试转载 2023-01-30 14:24:17 · 254 阅读 · 0 评论 -
Java虚拟机:对象创建过程与类加载机制、双亲委派模型
一、对象的创建过程:1、对象的创建过程:对象的创建过程一般是从 new 指令(JVM层面)开始的,整个创建过程如下:(1)首先检查 new 指令的参数是否能在常量池中定位到一个类的符号引用;(2)如果没有,说明类还没有被加载,则须先执行相应的类加载、解析和初始化等类加载过程,该过程的具体步骤详见下文(3)如果有,虚拟机将在堆中为新生对象分配内存。分配内存方式有:指针碰撞和空闲列表,具体选择哪种分配方式由 Java 堆是否规整决定,而 Java 堆是否规整又由所采用的垃圾收集器是否带有压缩整理功能决原创 2021-12-07 17:00:11 · 228 阅读 · 0 评论 -
Scheduled和quartz
Scheduled 只适合处理简单的计划任务,不能处理分布式计划任务。优势:是spring框架提供的计划任务,开发简单,执行效率比较高。且在计划任务数量太多的时候,可能出现阻塞,崩溃,延迟启动等问题。 Scheduled定时任务是spring3.0版本之后自带的一个定时任务。其所属Spring的资源包为:spring-context-support。所以需要使用Scheduled定时任务机制时,需要在工程中依赖对应资源,具体如下: org.springframework spring-c原创 2021-04-20 10:52:51 · 772 阅读 · 0 评论 -
如何优雅处理重复请求/并发请求?
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。重复的场景有可能是:黑客拦截了请求,重放前端/客户端因为某些原因请求重复发送了,或者用户在很短的时间内重复点击了。网关重发….利用唯一请求编号去重你可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去重——只要这个唯一请求编号在redis存在,证明处理过,那么就认为是重复的代码大概如下:S原创 2021-02-20 18:01:17 · 356 阅读 · 0 评论 -
ThreadLocal
ThreadLocal与线程同步机制不同,线程同步机制是多个线程共享同一个变量,而ThreadLocal是为每一个线程创建一个单独的变量副本,故而每个线程都可以独立地改变自己所拥有的变量副本,而不会影响其他线程所对应的副本。可以说ThreadLocal为多线程环境下变量问题提供了另外一种解决思路。ThreadLocal定义了四个方法:get():返回此线程局部变量的当前线程副本中的值。initialValue():返回此线程局部变量的当前线程的“初始值”。remove():移除此线程局部变量当前线程原创 2021-01-12 11:03:40 · 149 阅读 · 0 评论 -
spring 动态切换数据源 多数据库
1.背景对于数据量在1千万,单个mysql数据库就可以支持,但是如果数据量大于这个数的时候,例如1亿,那么查询的性能就会很低。此时需要对数据库做水平切分,常见的做法是按照用户的账号进行hash,然后选择对应的数据库。水平切分图,数据落入不同的库中2.实现2.1示意图先来看下大致示意图:图1是比较常见的情况,单个数据库图2展示了web应用和数据库之间的一个中间层,这个中间层去选择使用哪个数据库。2.2数据库配置首先我们需要配置多个数据源,我是用xml进行配置的其他方法大同小异,就是多建立了几原创 2021-01-12 11:02:30 · 897 阅读 · 0 评论 -
如何选择分布式事务解决方案
概述事务是一组不可分组的操作集合,这些操作要么都成功执行,要么都取消执行。最典型的需要事务的场景是银行账户间的转账:假如 A 账户要给 B 账户转账 100 元,那么 A 账户要扣减 100 元,B 账户要增加 100 元,这两个账户的数据变更都成功才可算作转账成功。更严格来说,可以用 ACID 四个特性表述事务:Atomicity:原子性,事务中的所有操作要么都成功执行,要么都取消执行,不能存在部分执行,部分不执行的状态。Consistency:一致性,举个例子简单的理解就是,A、B 两个账户各有原创 2021-01-12 11:01:30 · 167 阅读 · 0 评论 -
Java中的队列Queue
我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列。Java中的Queue与List、Set属于同一个级别接口,它们都是继承于Collection接口。Java中还定义了一种双端队列java.util.Deque,我们常用的LinkedList就是实现了Deque接口。二、队列的实现Java中对于队列的实现分为非阻塞和阻塞两种。非阻塞队列分为如下LinkedListLinkedList是双相链表结构,在添加和删除元素原创 2021-01-12 11:00:31 · 755 阅读 · 0 评论 -
Spring管理数据库事务
一、事务的一些基本概念事务的属性(ACID):原子性一致性隔离性持久性白话“事务”事务有三个状态(或者说是过程):开始、提交、回滚。事务的隔离级别隔离级别描述举例DEFAULT底层数据库存储的默认隔离级别READ_UNCOMMITTED最低的隔离级别,可以说它并不是事务,因为它允许其他事务来读取未来提交的数据上边的例子中,就算李四没有收这10元,其他人也能读取到李四多了10元。READ_COMMITTED大多数数据库的默认级别,它确保其他事务可以读取其他事务已经提交的原创 2020-11-30 17:47:28 · 183 阅读 · 0 评论