![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java后端
OdadaPlus
这个作者很懒,什么都没留下…
展开
-
java线程池大小_线程池大小设置多少合适?
所负责的服务开了多少个线程?这些线程都是如何管理?开的线程数合理吗?如果合理,为什么合理?如果不合理,为什么不合理?原创 2022-11-18 21:45:04 · 4173 阅读 · 1 评论 -
线程池ThreadPoolExecutor的使用demo
1.示例代码: Runnable + ThreadPoolExecutor首先创建一个 Runnable 接口的实现类(当然也可以是 Callable 接口,我们上面也说了两者的区 别。) MyRunnable.javaimport java.util.Date;public class MyRunnable implements Runnable { private String command; public MyRunnable (String s){原创 2021-11-27 16:17:22 · 778 阅读 · 0 评论 -
java+vue下载xls文件到本地
1.后端java springboot背景:文件是以xls类型的文件。第一步:添加依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14/version></dependency><dependency> <groupId&原创 2021-11-15 18:09:03 · 529 阅读 · 0 评论 -
自旋锁spinlock初始概念并写一个自旋锁案例
是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少上下文切换的消耗,缺点是循环会消耗CPU.手写自旋锁demo:/** * @author: dada * @date: 2020/12/19 * @description: 手写自旋锁 */public class SpinLockDemo { AtomicReference<Thread> atomicReference = new AtomicReference<>();原创 2020-12-19 16:57:53 · 211 阅读 · 2 评论 -
在多线程环境下操作集合如何确保其安全性
我们知道ArrayList是线程不安全的,当高并发环境下如何兼顾性能和线程安全呢?直接上代码:/** * @author: dada * @date: 2020/12/18 * @description: 不安全的案例ArrayList */public class NoSafeArrayListDemo { public static void main(String[] args) { //List<String> list = new Array原创 2020-12-18 16:54:53 · 220 阅读 · 3 评论 -
多线程使用CAS引发的ABA问题的案例
(之前被面试官问起多线程CAS相关问题时,亿脸懵逼,赶紧恶补一下。)概念: CAS是compare and swap的缩写,即比较与交换。就是你修改主内存中的值时先要比对之前的值,如果相同那么就修改。或者这么理解: 它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS底层原理 CAS如何实现?unsafe.getAndAddInt原理总结CAS: CAS(CompareAndSwap) 比较当前工作内存种的值和主内存种的值,如果相同.原创 2020-12-18 12:28:19 · 348 阅读 · 0 评论 -
设计模式之单例模式(懒汉式)
使用volatile的特性(保证可见性),实现单例模式package com.dada.thread.threaddemo.chapter03;/** * @author: dada * @date: 2020/12/17 * @description: 单例模式 */public class SingleDemo { private static volatile SingleDemo instance = null; private SingleDemo(){原创 2020-12-17 21:08:26 · 98 阅读 · 0 评论 -
分布式事务解决方案之四:最大努力通知
(自学笔记)--------------------6.1.什么是最大努力通知 最大努力通知也是一种解决分布式事务的方案,下边是一个是充值的例子: 交互流程: 1、账户系统调用充值系统接口 2、充值系统完成支付处理向账户系统发起充值结果通知若通知失败,则充值系统按策略进行重复通知 3、账户系统接收到充值结果通知修改充值状态。 4、账户系统未接收到通知会主动调用充值系统的接口查询充值结果。 通过上边的例子我们总结最大努力通知方案的目标: 目标:..原创 2020-12-15 21:22:33 · 356 阅读 · 0 评论 -
分布式事务解决方案之三:可靠消息最终一致性
(自学笔记)----------------------5.1.什么是可靠消息最终一致性事务 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能 够接收消息并处理事务成功,此方案强调的是只要消息发给事务参与方最终事务要达到一致。 此方案是利用消息中间件完成,如下图: 事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务发起方和消息中间件 之间,事务参与方(消息消费方)和消息中间件之间都是通过网络通信原创 2020-12-15 21:16:48 · 118 阅读 · 0 评论 -
分布式事务解决方案之二:TCC
(自学笔记)------------------4.1.什么是TCC事务 TCC是Try、Confifirm、Cancel三个词语的缩写,TCC要求每个分支事务实现三个操作:预处理Try、确认 Confifirm、撤销Cancel。Try操作做业务检查及资源预留,Confifirm做业务确认操作,Cancel实现一个与Try相反的 操作即回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所 有分支事务的Cancel操作,若try操作全原创 2020-12-15 21:02:19 · 217 阅读 · 1 评论 -
分布式事务解决方案之一:2PC(两阶段提交)
(自学笔记)-----------------3.1.什么是2PC?2PC即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2是指两个阶段,P是指准备阶段,C是指提交阶段。在计算机中部分关系数据库如Oracle、MySQL支持两阶段提交协议,如下图: 1. 准备阶段(Prepare phase):事务管理器给每个参与者发送Prepare消息,每个数据库参与者在本地执行事 务,并写本地的Undo/.原创 2020-12-15 20:24:38 · 414 阅读 · 0 评论 -
切面打印日志
import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;/** * @ClassName Communicati.原创 2021-11-27 16:06:40 · 144 阅读 · 0 评论 -
多线程几种实现方式
第一种方式:继承Thread类package com.kingh.thread.create;/** * 继承Thread类的方式创建线程 * * @author <a href="https://blog.csdn.net/king_kgh>Kingh</a> * @version 1.0 * @date 2019/3/13 19:19 */public class CreateThreadDemo1 extends Thread { public原创 2020-11-18 18:12:44 · 238 阅读 · 0 评论 -
把登陆人信息放入ThreadLocal
1.定义工具类UserThreadLocalpublic class UserThreadLocal { private static ThreadLocal<User> userThread = new ThreadLocal<>(); public static void set(User user){ userThread.set(user); } public static原创 2020-11-18 16:13:08 · 382 阅读 · 0 评论 -
Instant获取30天以前的时间
30天前,现在是2020.5.14传入天单位:Instant requestTimeUtc = Instant.now().minusMillis(TimeUnit.DAYS.toMillis(30));传入秒单位Instant requestTimeUtc = Instant.now().minusSeconds(2592000);demo:public static void main(String[] args) { Instant day = Ins...原创 2020-05-14 18:50:16 · 1798 阅读 · 0 评论 -
Springboot项目从配置文件中获取值的两种方式
方式一:使用配置类如灵活配置一个数字4:在application.properties中:app.calculate_period=${APP_CALCULATE_PERIOD:4}代码:Configuration配置类@Configuration@ConfigurationProperties("app")@Validatedpublic class A...原创 2020-05-06 17:29:44 · 1096 阅读 · 0 评论 -
pom文件更新失败后解决方法
案例:比如无法更新此依赖: <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk</artifactId> <version>1.11.764</version> &...原创 2020-05-05 17:10:23 · 504 阅读 · 0 评论 -
前后端访问发送跨域问题解决
原因略解决:提供一个配置类,写个过滤器,设置白名单、响应头访问方式等等信息。import org.apache.commons.lang3.ObjectUtils;import org.apache.commons.lang3.StringUtils;import org.springframework.context.annotation.Bean;import org.spr...原创 2019-11-06 14:55:03 · 182 阅读 · 0 评论 -
@NotEmpty、@NotNull、@NotBlank 的区别,Boolean类型入参用什么注解
@NotEmpty 用在集合上面(不能注释枚举)@NotBlank用在String上面@NotNull用在所有类型上面1. @NotEmpty Asserts that the annotated string, collection, map or array is not {@code null} or empty. 加了@NotEmpty的String类,Collection、M...原创 2019-11-05 16:59:48 · 3138 阅读 · 0 评论 -
OAuth2实现单点登录SSO
1. 前言技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,“一看就会,一做就错”。网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事儿,简直让人抓狂,尤其是对于我这样的菜鸟。几经曲折,终于搞定了,决定记录下来,以便后续查看。先来看一下效果2. 准备2.1. 单点登录最常见的例子是,我们打开淘宝APP,首页就会...转载 2019-11-01 17:58:47 · 447 阅读 · 0 评论 -
添加自定义注解
案例1:1.demand,排除某个接口的日志输出,用自定义注解@NoHealth,只要有该注解的方法,切面日志忽略该方法。2.codeNoHealth interface:import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotati...原创 2019-10-21 11:02:14 · 177 阅读 · 0 评论 -
IntelliJ IDEA 超实用使用技巧分享
前言工欲善其事必先利其器最近受部门的邀请,给入职新人统一培训IDEA,发现有很多新人虽然日常开发使用的是IDEA,但是还是很多好用的技巧没有用到,只是用到一些基本的功能,蛮浪费IDEA这个优秀的IDE。同时,在这次分享之后,本人自己也学习到了一些新的使用技巧,所以借着这次机会,一起分享出来。希望可以帮到一些人。基于的 IDEA 版本信息:IntelliJ IDEA 2018....转载 2019-10-18 17:54:32 · 317 阅读 · 1 评论 -
如何给java项目写日志切面工具类
话不多说,直接上代码!package com.dada.kit.vivo.aop;import com.dada.kit.utils.InfoLogUtil;import com.dada.kit.logger.CxLogFieldName;import com.dada.kit.logger.CxLogManager;import com.dada.kit.logger.CxLo...原创 2019-10-16 14:35:29 · 463 阅读 · 1 评论 -
Java 8 stream 分组 ,list转Map
public class ServiceImpl{public Map<String,List<Dto>> getInfoByCode(Param param) { List<Dto> allDtos = this.mapper.getInfoByCode(param); return allDtos.stream().collect(Coll...原创 2018-11-26 20:05:09 · 1511 阅读 · 0 评论 -
开发中使用LoggerFactory日志打印
代码public class ServiceImpl { import org.slf4j.Logger; import org.slf4j.LoggerFactory; private Logger logger = LoggerFactory.getLogger(ServiceImpl.class);/** * 查询 */ @Override pub...原创 2018-11-26 18:11:28 · 3602 阅读 · 2 评论 -
String类型的日期与BigDecimal类型相互转化
实际开发中的案例,需要将日期格式为String类型的"2018-11-13",然后转为BigDecimal(8,2)类型的20181113存入数据库。查询时再将数据转为String类型格式展示。1、先定义工具类:(如果没有传入生失效时间,这自动设置一个默认值;如果有则,不需要。)/** * @Description 工具类 * Create at: 2018年11月21日 下午4...原创 2018-11-24 18:07:54 · 1574 阅读 · 0 评论 -
使用BufferedWriter记得flush()
案例:文件复制1)没有使用flush方法public void test06() { try { BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/hello.txt")); BufferedWriter bufferedWriter ...原创 2018-11-16 10:43:48 · 2544 阅读 · 2 评论 -
Mybatis 映射文件标签详解(二)
mybatis的trim标签一般用于去除sql语句中多余的and关键字,逗号,或者给sql语句前拼接 “where“、“set“以及“values(“ 等前缀,或者添加“)“等后缀,可用于选择性插入、更新、删除或者条件查询等操作。 以下是trim标签中涉及到的属性: 属性 描述 prefix 给sql语句拼接的前缀 suffix 给sql语句拼接的后缀...转载 2018-08-17 18:14:20 · 840 阅读 · 1 评论 -
Mybatis 映射文件标签详解(一)
1.1 Mybatis映射文件(核心)1.1.1 输入映射1.1.1.1 ParameterType指定输入参数的java类型,可以使用别名或者类的全限定名。它可以接收简单类型、POJO、HashMap。1.1.1.1.1 传递简单类型参考需求:根据用户ID查询用户信息。 1.1.1.1.2 传递POJO对象1.1.1.1.2.1 ...转载 2018-08-17 17:06:22 · 318 阅读 · 0 评论 -
testNG之测试报告
执行完测试用例之后,会在项目的test-output(默认目录)下生成测试报告 打开index.html文件,测试结果摘要,包括:套件名、测试用例成功数、测试用例失败数、测试用例忽略数和testng.xml文件 测试用例都成功的话,测试结果以绿底标志: 测试用例有失败的话,测试结果以红底标志: 点击"Link"链接,可以查看testng.xml文件的内容:<?xml version="1.0...转载 2018-03-29 10:26:00 · 1403 阅读 · 0 评论 -
Tomcat 安装与配置
Tomcat 安装与配置Tomcat是Apache 软件基金会(Apache Software Foundation)核心项目之一,支持最新的Servlet 和JSP 规范。因为Tomcat 技术先进、性能稳定,而且免费,成为目前比较流行的Web 应用服务器。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器是开发和调试JSP 程序的首选Tomcat安装1. 下载...原创 2018-03-29 10:00:21 · 201 阅读 · 0 评论 -
TestNG安装使用-初级
TestNG的官方网站:http://www.testng.org按照官方文档的定义,TestNG是一个测试框架,在 JUnit 和 NUnit 的基础上引入了新的功能,使它的功能更强大,使用更方便。TestNG是一个开源的自动化测试工具,覆盖各种类型的测试:单元测试,功能测试,集成测试等等。在 Eclipse 中安装 TestNG 插件 官网(http://testng.org/doc/down...转载 2018-03-29 09:54:44 · 315 阅读 · 0 评论 -
为什么这条sql排序不起作用
两张表联查,table1 的id 是table2 的外键select * FROM table1 rcfs, table2 rcf WHERE rcfs.deleted = 0 AND rcf.deleted = 0 AND rcfs.plat_company_code =#{platCompan...原创 2018-11-27 18:07:11 · 897 阅读 · 0 评论 -
向mysql插入30000条数据
MySQL的存储过程一、概述1:是一种用来处理数据的方式,存储过程是一种没有返回值的函数2:存储过程和函数是事先经过编译并存储在数据库的一段SQL语句的集合,调用存储过程和函数可以简化开发人员的许多工作,减少时间在数据库和应用服务器直接的传输,能够提高数据处理的效率3:存储过程和函数的区别在于存储函数必须有返回值,而存储过程没有返回值,但是存储过程的参数可以使用IN,OUT,INOUT类型...原创 2018-12-06 13:53:34 · 967 阅读 · 0 评论 -
安装redis报jemalloc错误
Redis-4.0.10手动编译安装——采坑记(重点解决缺失jemalloc.h)一、前期准备mkdir /appyum install -y gcc wgetwget http://download.redis.io/releases/redis4.0.10.tar.gztar zxvf redis-4.0.10.tar.gz -C /app/cd redis-4.0.10...转载 2018-12-07 09:41:29 · 901 阅读 · 0 评论 -
前后端交互字段自动驼峰映射
1.后端传给前端:import com.fasterxml.jackson.databind.PropertyNamingStrategy;import com.fasterxml.jackson.databind.annotation.JsonNaming;import lombok.*;import lombok.experimental.Accessors;import ja...原创 2019-07-08 18:51:40 · 1290 阅读 · 1 评论 -
springboot 单元测试案例
1.实际业务:controller层@GetMapping(value = "/abc/{username}/acc", produces = MediaType.APPLICATION_JSON_VALUE) public Map<String,Set<String>> findUserAccess(@PathVariable(name = "usern...原创 2019-07-02 14:46:51 · 509 阅读 · 0 评论 -
自定义正则校验注解
案例:校验电话号码定义:import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.Retent...原创 2019-06-26 15:37:01 · 809 阅读 · 0 评论 -
Java序列化的几种方式以及序列化的作用
本文着重讲解一下Java序列化的相关内容。如果对Java序列化感兴趣的同学可以研究一下。一.Java序列化的作用 有的时候我们想要把一个Java对象变成字节流的形式传出去,有的时候我们想要从一个字节流中恢复一个Java对象。例如,有的时候我们想要把一个Java对象写入到硬盘或者传输到网路上面的其它计算机,这时我们就需要自己去通过java把相应的对象写成转换成字节流。对于这种通用...转载 2019-03-09 10:59:55 · 131 阅读 · 0 评论 -
STS、eclispe导入正确工程后出现assembly.xml等xml文件报错
错误:解决方法:第一步:Project Explorer (如果没有这个窗口可以在eclipse工具栏->Window->show View ->Project Explorer)->选中一个倒三角标志->Customize view(如图1) ->Content选项卡->把一些J2EE和最后一个选项的勾去掉就好(如 图2 -Available...原创 2019-02-18 16:08:49 · 1189 阅读 · 0 评论