SpringBoot启动

前言 之前已经介绍了SpringBoot jar启动过程。 现在我们来看SpringBoot入口类main方法的执行。 @SpringBootApplication public class MyApplication { public static void main(S...

2019-01-11 16:13:33

阅读数 61

评论数 0

SpringBoot Jar启动

SpringBoot项目的启动 当我们在IDE中新建(或导入)了一个SpringBoot项目之后,我们如果想要启动这个SpringBoot项目,我们可以找到相应的带有@SpringBootApplication注解的启动类,该启动类是一个带有main方法的类,这个类就是SpringBoot项目的入...

2019-01-11 16:13:00

阅读数 69

评论数 0

Spring Task

前言 在一开始学习定时任务的时候是使用的quartz来实现的。后来习惯于全注解的开发模式。在SpringBoot环境中,只需要在启动类上加上EnableScheduling注解,然后在需要使用定时任务的方法上加上Scheduled注解,当然方法所属的类需要在Spring环境中。在启动类中加上Ena...

2018-12-25 17:03:32

阅读数 38

评论数 0

线程池

为什么要使用线程池 为了尽可能的去压榨CPU,我们会在程序中使用多线程技术,这样在一些情景下会显著的减少CPU的闲置时间,增加CPU的吞吐能力。 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以...

2018-12-25 16:15:27

阅读数 43

评论数 0

两条实用的sql语句

在开发的过程中,我们有时候会遇到一些处理数据库数据的需求。 INSERT INTO …SELECT语句 有时候我们需要批量的把某张表中一些符合条件的数据插入到另一张表中。Mysql提供了一个很方便的语句。 Insert into Table2(field1,field2,...) select v...

2018-12-24 19:38:12

阅读数 38

评论数 0

对sql语句也要有敬畏之心

前言 在上个月,在帮同事解决bug的时候,我人生中第一次看到了对datetime类型的字段做like查询的sql语句… 案发现场分析 这是一条很简单的语句,查询某个月某个用户的签到记录 SELECT * FROM xxxx where ...

2018-12-24 18:21:11

阅读数 23

评论数 0

SimpleDateFormat线程安全问题

前言 最近在查资料的时候,偶然看到了SimpleDateFormat不是线程安全的类的相关资料,说实话,一开始看的时候还是惊讶了一把的,从来没想过这个类居然不是线程安全的。今天就来看看这个类的线程安全问题。 SimpleDateFormat线程安全分析 先看一个很简单的日期处理工具类 public...

2018-12-24 15:46:35

阅读数 32

评论数 0

@ResponseBody作用在返回类型为String的方法时的坑

在默认的Spring配置中,当在返回类型为String的Controller方法时,在其上加上@ResponseBody时会出现问题,那就是返回的不再是我们期待的Json格式的字符串了,而是会变成在正常的Json串前后加上双引号。这是为什么呢?这是因为在HTTPMessageConverter中对...

2018-12-21 15:58:44

阅读数 241

评论数 0

消息转换器

前言 在使用SpringMVC的过程中,我们如果想要返回json格式的数据(Response的Content-Type: application/json;charset=UTF-8),通常使用@ResponseBody注解,引入相应的json解析包就可以了,如果想要解析前端传来的json格式的数...

2018-12-21 15:58:15

阅读数 56

评论数 0

SpringMVC处理方法的具体逻辑

在讲解SpringMVC整体设计的时候,我们只分析了最顶层的核心接口,但是SpringMVC还有很多可以去探究的细节,还有很多我们可以扩展的接口,我们继续来深入学习SpringMVC。 在整体设计分析中,我们知道一个Web请求进来时依靠HandlerMapping来找到正确的Controller以...

2018-12-21 15:57:39

阅读数 37

评论数 0

git remote prune origin

最近在开发的时候偶然发现,同事在本地使用git branch -a会看到我已经删除的远程分支,git fetch之后依然能看到,然后同事就来询问我为什么不清理掉那些久远的分支,然而我确实是执行了git push origin --delete branchName删除每个版本后不用的分支。当时感觉...

2018-12-20 17:51:29

阅读数 85

评论数 0

@Async原理

前言 在开发过程中,我们会遇到很多使用线程池的业务场景,例如定时任务使用的就是ScheduledThreadPoolExecutor。而有些时候使用线程池的场景就是会将一些可以进行异步操作的业务放在线程池中去完成,例如在生成订单的时候给用户发送短信,生成订单的结果不应该被发送短信的成功与否所左右,...

2018-12-20 17:37:14

阅读数 297

评论数 0

@Autowired

前言 最近在使用@Async注解进行异步操作的时候时,想过一下@Async注解的原理,这种需要@Enable*注解开启作用的注解,原理应该是大同小异。之前已经分析过了@Scheluded注解了,本以为这次看@Async注解会很轻松,但是还遇到了很多问题。 我们知道在调用带有@Async的方法的时候...

2018-12-20 17:09:00

阅读数 33

评论数 0

请求从客户端到服务器的过程简单分析

当我们在客户端(以浏览器为例)使用域名发送一个HTTP请求的时候,DNS协议会尝试将域名解析为对应的IP。(我们知道每一个台服务器都可以通过ip和端口直接被访问。但是,用户对于由数字组成的ip是很难有记忆点的,所以就出现了域名,域名可以映射到ip。那么域名是如何与ip进行映射的,就需要DNS协议的...

2018-12-20 16:02:01

阅读数 313

评论数 0

Java中的四种引用

前言 最近又重新看了下ThreadLocal,ThreadLocal源码中ThreadLocalMap内部类的Entry中的key是ThreadLocal类型,并且是弱引用。 static class Entry extends WeakReference<T...

2018-12-19 18:24:29

阅读数 44

评论数 0

finalize

前言 在总结Java中的4种引用的时候,在查找资料的时候,看到了有关于Object#finalize()方法的一些介绍,提到我们不应该在程序中使用finalize()方法,该方法不安全,低效,不要去使用finalize()去完成资源释放工作,而是使用虚引用完成对象回收前的资源释放工作。但是并没有给...

2018-12-19 15:58:10

阅读数 17

评论数 0

ThreadLocal引发的Bug

前言 最近同事在开发的时候,在调用RPC获取用户的积分的时候,发生了返回的用户以及积分信息不是我们请求的uid对应的用户信息的情况,uid变成了另一个人的uid,积分信息也变成了另一个人的,是不是很神奇。同事叫我帮忙查找原因,RPC和调用方的代码都是该同事写的,我在本地用他给的请求参数去请求那个R...

2018-12-19 10:39:44

阅读数 35

评论数 0

并发与并行的区别

如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于**“存在”**这个词。 在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核...

2018-12-18 17:47:13

阅读数 28

评论数 0

ReentrantReadWriteLock

前言 之前分析了使用AQS实现的共享锁和独占锁,今天来分析一下ReentrantReadWriteLock,这个即使用了共享锁(读锁)又使用了独享锁(写锁)的类。 与Mysql中的S锁(共享锁,读锁)一样,ReentrantReadWriteLock中的读锁只允许继续加读锁,而不允许加写锁。 而写...

2018-12-18 17:29:51

阅读数 53

评论数 0

LimitLatch

前言 之前分析的ReentrantLock和CountDownLatch都是JDK中对AQS的利用,分别实现了独占锁和共享锁。 接着我们再来看一个LimitLatch,来学习下我们可以怎么将AQS应用到我们自己的程序中。 LimitLatch这个类是我在看Tomcat源码的时候看到的,当时并没有太...

2018-12-18 16:11:36

阅读数 45

评论数 0

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