![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
Johnson木木
这个作者很懒,什么都没留下…
展开
-
SpringBoot使用策略模式+工厂模式
为了防止大量的if...else...或switch case代码的出现,可以使用策略模式+工厂模式进行优化。在我的项目当中,报表繁多,所以尝试了这种方式进行优化报表的架构。代码很简单,如下:Factory工厂类@Servicepublic class ReportFactory { /** * 初始化的时候将所有的ReportService自动加载到Map中 */ @Autowired private final Map<String, Repo原创 2020-11-24 08:19:36 · 1455 阅读 · 0 评论 -
使用阿里云OSS的服务端签名后直传功能
网站一般都会有上传功能,而对象存储服务oss是一个很好的选择。可以快速的搭建起自己的上传文件功能。该文章以使用阿里云的OSS功能为例,记录如何在客户端使用阿里云的对象存储服务。服务端签名后直传背景采用JavaScript客户端直接签名(参见JavaScript客户端签名直传)时,AccessKey ID和AcessKey Secret会暴露在前端页面,因此存在严重的安全隐患。因此,OSS提供了服务端签名后直传的方案。流程介绍流程如下图所示:本示例中,Web端向服务端请求签名,然后直接上传,不原创 2020-09-16 08:15:26 · 2966 阅读 · 6 评论 -
nginx如何限制并发连接请求数?
简介限制并发连接数的模块为:http_limit_conn_module,地址:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html限制并发请求数的模块为:http_limit_req_module,地址:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html这两个模块都是默认编译进Nginx中的。限制并发连接数示例配置:http { limit_conn_z原创 2020-09-10 10:22:30 · 612 阅读 · 0 评论 -
执行ArrayList的remove(object)方法抛异常?
简介或许有很多小伙伴尝试过如下的代码ArrayList<Object> list = ...;for (Object object : list) { if (条件成立) { list.remove(object); }}然后会发现抛出java.util.ConcurrentModificationException异常。那么这个到底是什么情况?for(元素 : 集合)...原创 2020-07-09 15:01:16 · 332 阅读 · 2 评论 -
Java并发编程实战总结 (一)
前提首先该场景是一个酒店开房的业务。暂时只包含开房账单和房间排期两个功能,开房时会添加一条账单,而房间排期主要是为了房间使用的时间不冲突。如:账单A,使用房间1,使用时间段为2020-06-01 12:00 - 2020-06-02 12:00 ,那么还需要使用房间1开房的时间段则不能与账单A的时间段冲突。业务类为了简单起见,我把两个类都简化了。账单类public class Bill { // 账单号 private String serial; // 房间排期id原创 2020-06-03 11:07:02 · 272 阅读 · 1 评论 -
SpringBoot整合Flyway(数据库版本迁移工具)
简介在团队开发当中,有可能每个人都是使用自己本地的数据库。当数据库的表或者字段更新时,往往需要告知团队的其他同事。Flyway数据库版本迁移工具,目的就是解决该问题而诞生的。每当我们更新数据库的时候,只需要添加一个SQL文件到指定目录中。Flyway会在数据库创建一个表,专门记录已更新的SQL文件。当我们下次执行时则不会执行已记录的SQL文件。整合maven现在的Flyway的最新版本已经到了6.4.2。我用的是6.3.3。<!-- https://mvnrepository.com/ar原创 2020-05-25 16:59:07 · 518 阅读 · 0 评论 -
Java并发编程实战 05等待-通知机制和活跃性问题
Java并发编程系列Java并发编程实战 01并发编程的Bug源头Java并发编程实战 02Java如何解决可见性和有序性问题Java并发编程实战 03互斥锁 解决原子性问题Java并发编程实战 04死锁了怎么办前提在Java并发编程实战 04死锁了怎么办中,我们讲到了使用一次性申请所有资源来避免死锁的发生,代码如下:/** 锁分配器(单例类) */public class LockAllocator { private final List<Object> lock =原创 2020-05-20 09:21:59 · 359 阅读 · 0 评论 -
Java并发编程实战 04死锁了怎么办?
摘要在第三篇文章最后的例子当中,需要锁定两个账户才能进行转账操作,这种情况很有可能会发生死锁,我把上一章的代码片段放到下面:public class Account { // 余额 private Long money; public synchronized void transfer(Account target, Long money) { synchronized(this) { (1) synchronized原创 2020-05-12 08:07:54 · 364 阅读 · 0 评论 -
Java并发编程实战 03互斥锁 解决原子性问题
文章系列Java并发编程实战 01并发编程的Bug源头Java并发编程实战 02Java如何解决可见性和有序性问题摘要在上一篇文章02Java如何解决可见性和有序性问题当中,我们解决了可见性和有序性的问题,那么还有一个原子性问题咱们还没解决。在第一篇文章01并发编程的Bug源头当中,讲到了把一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性,那么原子性的问题该如何解决。同一...原创 2020-05-07 08:18:30 · 1012 阅读 · 1 评论 -
Java并发编程实战 02Java如何解决可见性和有序性问题
摘要在上一篇文章当中,讲到了CPU缓存导致可见性、线程切换导致了原子性、编译优化导致了有序性问题。那么这篇文章就先解决其中的可见性和有序性问题,引出了今天的主角:Java内存模型(面试并发的时候会经常考核到)什么是Java内存模型?现在知道了CPU缓存导致可见性、编译优化导致了有序性问题,那么最简单的方式就是直接禁用CPU缓存和编译优化。但是这样做我们的性能可就要爆炸了~。我们应该按需禁用。...原创 2020-04-20 10:09:27 · 1702 阅读 · 4 评论 -
Java并发编程实战 01并发编程的Bug源头
摘要本文为学习极客时间:Java并发编程实战 01的总结,文章取图也是来自于该文章并发Bug源头并发编程的Bug源头主要为可见性、有序性、原子性源头之一:CPU缓存导致的可见性问题一个线程对共享变量的修改,另外一个线程能够立即看到,那么就称为可见性。现在多核CPU时代中,每颗CPU都有自己的缓存,CPU之间并不会共享缓存;如线程A从内存读取变量V到CPU-1的缓存中,线程B也从内存...原创 2020-04-14 13:58:14 · 409 阅读 · 0 评论 -
优雅的使用BeanUtils对List集合的操作
摘要在业务员流程的时候,我们在Entity、Bo、Vo层数据间可能经常转换数据,Entity对应的是持久层数据结构(一般是数据库表的映射模型)、Bo对应的是业务层操作的数据结构、Vo就是Controller和客户端交互的数据结构。在这些数据结构之间很大一部分属性都可能会相同,我们在使用的时候会不断的重新赋值。如:客户端传输管理员信息的到Web层,我们会使用AdminVo接收,但是到了Servic...原创 2019-12-31 10:13:08 · 3380 阅读 · 5 评论 -
SpringBoot上传文件到七牛云
准备工作mavenpom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>...原创 2019-12-18 11:43:07 · 2672 阅读 · 7 评论 -
Spring之跨重定向请求传递数据
摘要在开发场景中,大部分数据都是使用请求转发(forward)进行传递,而使用重定向(redirect)传递数据可能比较少。那么问题来了:请求中的数据生命周期存活时间只在一个请求转发(request)中,当这个请求结束后,那么请求中所带的数据也会随着这个请求一起拜拜了。而重定向会向服务器发起两个请求,所以第一个请求的数据不就到不了第二个请求了吗?如图:如果我们想传递的数据在第二个请求中有效...原创 2019-12-14 10:29:52 · 1064 阅读 · 0 评论 -
Java核心技术第八章-泛型
摘要本文根据《Java核心技术 卷一》一书的第八章总结而成,部分文章摘抄书内,作为个人笔记。文章不会过于深入,望读者参考便好。为什么要使用泛型程序设计泛型程序设计(Generic programming) 意味着编写的代码可以被很多不同类型的对象所重用。类型参数的好处在没有泛型类之前,ArrayList类只维护一个Object引用的数组:public class ArrayList {...原创 2019-12-04 11:49:31 · 1044 阅读 · 0 评论 -
一看就懂的快速排序
概念快速排序属于交换排序,主要步骤是使用基准元素进行比较,把小于基准元素的移动到一边,大于基准元素的移动到另一边。从而把数组分成两部分,然后再从这两部分中选取出基准元素,重复上面的步骤。过程如下:紫色:基准元素绿色:大于基准元素黄色:小于基准元素这种思路叫做分治法。基准元素基准元素的选取可随机选取。下面使用中我会使用第一位的元素作为基准元素。排序过程排序拆分过程如下图:...原创 2019-11-23 11:52:08 · 581 阅读 · 0 评论 -
SpringBoot 整合NoSql
通用配置maven依赖添加Spring-Web和Spring-Security依赖,使用Spring-Security是因为使用SpringBoot的Redis依赖时,必须添加Spring-Security。在新版本SpringBoot才会这样。<dependency> <groupId>org.springframework.boot</groupId...原创 2019-11-19 20:23:53 · 1038 阅读 · 0 评论 -
SpringBoot 整合jdbc和mybatis
文章目录摘要通用配置数据库表实体类maven配置数据库配置整合JDBCmaven依赖使用测试整合MyBatismaven依赖扫描MapperMapper映射UserMapper接口UserMapper.xml摘要该文章主要为记录如何在SpringBoot项目中整合JDBC和MyBatis,在整合中我会使用简单的用法和测试用例,毕竟该文章目的是为了整合,而不是教大家如何去使用。希望大家多多包涵。...原创 2019-11-18 10:42:48 · 1583 阅读 · 0 评论 -
SpringBoot Web篇(二)
文章目录摘要文件上传路径映射类型转换器AOP浏览器的标签图标除去自动化配置方式一 Application方式二 properties或yml摘要继上一篇 SpringBoot Web篇(一)文件上传当我们服务器需要接收用户上传的文件时,就需要使用MultipartFile作为参数接收文件。如下: @PostMapping("/upload") public String ...原创 2019-11-16 18:55:03 · 161 阅读 · 0 评论 -
SpringBoot Web篇(一)
文章目录摘要全局异常处理自定义错误页面源码阅读阅读源码总结实现CORS跨域注册拦截器整合Servlet摘要文章是根据江南一点雨(松哥)的视频进行总结江南一点雨博客全局异常处理通常情况下,我们都需要对自己定义的异常进行相应的处理。捕获指定的异常方式如下:@ControllerAdvicepublic class ExceptionHandlers { // 捕获自定义异...原创 2019-11-13 10:59:13 · 165 阅读 · 0 评论 -
Java移位运算符
文章目录简述左移运算符 <<右移运算符 >>无符号右移 >>>总结简述Java有三种移位运算符,分别为:左移运算符 <<右移运算符 >>无符号右移运算符 >>>首先,移位运算符根据名字可知是使用二进制进行运算的。在Integer.java中,我们可以看到有两个静态常量,MIN_VALUE 和 MAX...原创 2019-10-24 10:28:04 · 191 阅读 · 0 评论