自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 idea中maven依赖包识别不了的问题

项目开发过程中遇到依赖的jar包无法识别到,可以通过查看idea的help=>“Show log in finder” 解决上面问题,只要删除掉本地的maven仓库相关的jar包即可。 ...

2020-03-30 22:20:51 510 0

原创 共享变量在线程中的可见性问题分析

导致共享变量在线程间不可见的原因: 1)线程交叉执行 2)重排序结合线程交叉执行 3)共享变量更新后的值没有在工作内存与主存间及时更新 可见性-synchronized JVM中关于synchronized的两条规定: 1)线程解锁前,必须把共享变量的最新值刷到主内存 2)线程加...

2020-02-07 19:47:43 2310 0

原创 利用Swagger2 构建api文档

背景介绍: Swagger是一个用于java代码中写注解,然后可以通过访问指定的网页,自动生成接口文档,并且可以通过接口进行功能测试。 使用介绍: (1)添加Maven依赖 <dependency> <groupId>io.spri...

2018-11-12 21:26:06 693 0

原创 idea 使用说明以及常用插件介绍

一、idea使用说明 导入idea的配置(如果之前有配置好的idea的配置文件) 设置idea的缺省配置文件 (1)设置默认的jdk (2)设置默认的Maven仓库地址 (3)设置默认的Java文件的头部格式 (4)设置文件编码UTF8格式(重要) (5)设置点击...

2018-10-09 00:03:32 617 0

原创 Java 动态代理

Java动态代理的实现有两种方式: 1、jdk 自带的动态代理 2、spring 中的cglib实现的动态代理 区别: jdk自带的动态代理一定要有接口interface类,而cglib不需要。 (1)基本信息 UserInfoService.java 类: public ...

2018-10-08 22:42:47 163 0

原创 guava SimpleTimeLImiter进行方法超时调用控制

1、基于类级别的调用 (1)编写接口类UserInfoService.java public interface UserInfoService { String getUserName() throws InterruptedException; } (2)编写对应的实现类U...

2018-09-29 21:38:47 2082 0

原创 自定义log4j Appender

MySQL中可以自定义Appender,这里给出一个自定义的将日志输出到指定的文件的appender: 1、继承AbstractAppender类 FileAppender.class @Plugin(name = FileAppender.FILE_APPENDER, categor...

2018-09-27 22:10:27 606 0

原创 Spring boot 多数据源配置

这里讲下如何在一个Spring Boot项目中配置多个数据源: Mave中添加依赖: <!-- Spring Boot Mybatis 依赖 --> <dependency> <groupId>o...

2018-09-26 23:46:46 134 0

原创 Spring 不通过注解加载bean

工具类:SpringUtil @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; ...

2018-09-06 22:29:25 755 0

原创 Spring boot 具体化类和配置来缩短单元测试时间

我们在写完业务代码之后,都需要编写测试用例来验证代码逻辑是否正确,这样不仅方便自己后期检查,也方便后面接手的人快速测试我们的代码。 编写测试用例时,我们可以通过如下快捷键:ctrl+shift+T,然后会出现如下提示: 点击,Create New Test.... 通常,只是帮助我们...

2018-08-22 22:52:44 1402 1

原创 一种MySQL 分类查询方法

在开发过程中,经常会遇到需要对不同的分类情况下获取相应分类下制定排序的前N条数据。一种比较慢的办法是先查询总共有几个分类,然后根据分类id再去获取前N条数据,这样一共需要进行1+N次数据库查询。这里给出一种,可以只根据一条MySQL语句查询,然后把查询结果在JAVA代码中进行处理获取需要的结果。 ...

2018-08-16 21:54:24 386 0

原创 Spring 事务 注解@Transaction 用法

在实际开发中,对于一组数据库操作特别是增删改操作,为了保证原子性,通过需要用事务来控制,要么全部成功,要么全部失败。Spring中可以通过注解@Transaction 常用的方法如下:   @Transactional public void testTransaction(User us...

2018-08-09 00:06:12 13828 0

原创 一种Spring web 统一异常处理切面设计

这里给出一种对控制层处理错误时,会抛出异常,导致返回给客户端的数据比较奇怪,因此,给出一个统一异常处理的类,ExceptionHandle,具体结构如下: 具体代码如下: 具体代码如下: @ControllerAdvice @Slf4j public class Excepti...

2018-07-24 23:32:57 412 0

原创 谈ThreadLocal中InheritableThreadLocal的用法以及ThreadLocalUtil类

例子1: public class TestThreadLocal { public static ThreadLocal<Integer> threadLocal = new ThreadLocal<>(); ...

2018-07-24 23:31:11 1417 0

原创 一种多层级机构数据库表设计的思路

在实际开发过程中,经常存在多个层级结构的设计,而且多个层级结构还需要排序。这里通过将多级结构的数据在同一张表中(无需多张表进行关联),并通过level的巧妙设计来实现单表查询。 level的设计原则:0.*.* 其中,0是顶级结构,第一个*是顶级结构下的结构,第二个*是顶级结构下的结构下的结构。...

2018-07-23 21:39:33 17906 11

原创 java web中通过fork join来子任务拆分提高处理速度

场景分析: 在项目中,我们可能一次会请求较多数据(比如:一千条),此时,我们可以用fork/join将一次请求分解成N个子任务(每个任务请求1000/N条数据),假如一次请求一千条耗时5s,则我们分解子任务后耗时大概只需要5/N秒多一点。这里各处fork join的demo例子,如下所示举个栗子:...

2018-07-13 22:33:40 799 1

原创 Spring MyBatis generator自动生成配置

1、需要在pom.xml中添加插件配置:<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>myb...

2018-07-10 22:10:56 272 0

原创 Java 注解的原理及自定义注解

1、@Deprecated与SupressWarnings("deprecation")对于废弃的方法,我们会用注解@Deprecated来显示注解表示,但是有的时候我们用了废弃的@Deprecated注解,会出现中横线,如果用了废弃的方法,又不想显示横线,可以添加注解@Sup...

2018-07-09 22:07:39 230 0

原创 Spring 线程池定时监控

在上一篇Spring异步线程池:https://blog.csdn.net/timchen525/article/details/80672186,该文介绍了如何使用Spring的注解来配置异步线程操作。本篇博文中,补充介绍如何通过Spring定时任务来配置定时检测线程池的使用情况。ThreadP...

2018-07-09 21:59:53 2497 2

原创 Java中如何存储金额的问题

背景分析:在实际开发过程中,对于金额(一般是元为单位)前端输入一般为小数点两位,比如:1.10,小数点第二位到分。而且数据库的存储粒度可以为分或者元,如果为分,则传入的值需要乘以100。解决方法:前端传入的的为小数点2位(小数点合法的位数是2位,大于2位前端和服务端都要校验),服务端这边用Deci...

2018-07-05 21:11:48 2935 0

原创 Java查看字节码文件(基于JDK和IDEA)

Java虚拟机执行的是Java字节码文件(也就是.class文件),比如写一个Demo.java类:public class Demo { private static int num = 1; public static void main(String[] args...

2018-06-28 22:10:55 1996 0

原创 Java 中包装类型的比较注意事项

Integer不能用比较等号==进行判断1)示例1:Integer a = 127; Integer b = 127; if (a == b) { log.info("a == b"); } else { log.info("a != b")...

2018-06-20 23:15:42 603 0

原创 MySQL中乐观锁和悲观锁

乐观锁:乐观的认为操作不会导致冲突,在操作数据时,并不进行任何其他特殊处理(也就是不加锁),而是在进行更新时,再去判断是否有冲突。MySQL数据库不支持乐观锁,需要开发者自己实现。乐观者开发者通常实现方案:给表添加一个版本号或者时间戳(基于version、基于timestamp字段),每次操作后,...

2018-06-20 22:55:49 253 0

原创 Guava 常用工具类

引入guava包:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</a...

2018-06-20 22:53:40 2301 0

原创 再谈StringBuilder和StringBuffer的区别

通常字符串的拼接我们可能会用加号"+"拼接,或者用StringBuilder、StringBuffer进行拼接。已经知道加号"+"拼接的字符串可能会创建多个对象(注意:我用的是可能,因为在一两个的拼接时候,jdk编译器会帮我们优化,而没有创建多个对象,不过,...

2018-06-12 23:45:27 92 0

原创 日期工具:非线程安全SimpleDateFormat 和线程安全JodaTime(推荐)

1、SimpleDateFormat不是线程安全的对象举个栗子:@Slf4j public class DateFormatExample1 { private static SimpleDateFormat simpleDateFormat = new SimpleDateFo...

2018-06-12 23:43:20 1184 0

原创 Spring Boot异步线程池及异步编程

线程池中的两个概念:线程和任务,任务是需要线程去执行的。这里写一个支付相关的异步线程池的栗子:1、在application.properties中添加线程池的配置参数:# 支付相关的配置 pay.threadNamePrefix=pay-exec- pay.maxPoolSize=20 pay.c...

2018-06-12 22:32:38 2942 0

原创 MySQL中Select语句返回用List来接收

MySQL根据条件查询Select记住,永远用List<>几首返回。对于,确定只有单条记录,一般我的写法为:public int getPayStatusByPayno(OrderInfoRequest orderInfoRequest) { if (order...

2018-06-09 23:49:25 6601 0

原创 MySQL 插入数据后返回自增id的方法

不推荐方法:INSERT INTO tim_test(`name`)values("tim"); SELECT max(id) from tim_test;首先性能较低,且在高并发情况下,返回的值是不正确的。推荐方法:SELECT LAST_INSERT_ID();因为LAST...

2018-06-09 23:48:13 15965 1

原创 关于log该如何打以便后期排查问题

以前打印log前,没有考虑之后排查问题的方便与否,而只是觉得重要的信息才打印,但是什么是重要信息呢?这里总结了以下几点经验:1、通过打印log来跟踪一组行为在前面的博文:https://blog.csdn.net/timchen525/article/details/80358723中我写了用lo...

2018-06-09 23:44:55 178 0

原创 ThreadLocal在实际项目中的应用

首先,分析下ThreadLocal的源码:在分析ThreadLocal的具体用法前,我们来看下ThreadLocal对外提供的三个方法(set、get、delete)的源码:1)set方法 设置变量public void set(T value) { Thread t = Thread.c...

2018-06-07 00:17:52 1972 1

转载 Java 开发四张技术栈图

1、分布式专题2、高并发/高性能3、性能优化专题4、源码分析专题

2018-06-05 00:44:27 5067 0

原创 编写一个初始化之后,不可修改的集合(比如:Map、List、Set等不可变对象)

Java中提供final关键字,对基本类型进行修饰,当第一次初始化后,该变量就不可被修改,比如:private final int a = 123;然而,对于Map等类型,我们只能对于其引用不能被再次初始化,而其中的值则可以变化,比如:private static final Map&lt...

2018-05-30 23:04:38 6121 0

原创 单例模式讨论

在之前的博文中曾经介绍过单例模式:https://blog.csdn.net/timchen525/article/details/78244101这里重新讨论们下单例模式,并且引入了一个基于枚举的单例模式。分析如下代码:** * 懒汉模式 */ public class SingletonE...

2018-05-28 22:54:30 74 0

原创 并发的优势与风险

1、优势:(1)速度:同时处理多个请求,响应更快;复杂的操作可以分成多个进程(或线程)同时进行(2)设计:程序设计在某些情况下更简单,也可以有更多的选择(3)资源利用:CPU能够等待IO的时候能够做一些其他的事情2、风险:(1)安全性:多个线程共享数据时可能会产生于期望不相符的结果(2)活跃性:某...

2018-05-24 22:05:44 521 0

原创 线程安全性-有序性

有序性:Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的运行,却会影响到多线程并发执行的正确性。Java中保证有序性:volatile、synchronized、Lock有序性-happens-before原则1)程序次序原则:一个线程内,按照代码顺序,...

2018-05-24 22:02:42 138 0

原创 volatile具体使用场景

volatile特别适合于状态标记量举个栗子:volatile boolean inited = false; // 线程1 context = loadContext(); inited = true; // 线程2 while(!inited) { sleep(); } doSom...

2018-05-24 22:01:44 1729 0

原创 原子性-synchronized 修饰的四种方式

原子性-synchronized(依赖JVM)1)修饰代码块:大括号括起来的代码,作用于调用的对象比如:public void test1(int j) { synchronized (this) { // 作用的范围是大括号括起来的范围,作用的对象是调用的对象 for ...

2018-05-24 21:56:13 356 0

原创 写一个并发计数器

首先给出一个并发场景下,错误的计数器方法:public class CountExample { // 请求总数 public static int clientTotal = 5000; // 同时并发执行的线程数 public static int thread...

2018-05-22 23:10:56 797 0

原创 Java 内存模型-同步八种操作

(1)lock(锁定):作用于主内存的变量,把一个变量标记为一条线程独占状态(2)unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定(3)read(读取):作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动...

2018-05-22 22:08:04 1220 3

提示
确定要删除当前文章?
取消 删除