程序猿洞晓
死锁的两种体现形式分析和解决方案 死锁的两种体现形式分析和解决方案
死锁在多线程开发过程中比较经常遇到,并且这个问题很隐性,很难排查到问题的所在,即使是查看项目的日志都找不到,很让人头疼。死锁的体现形式主要有两种,分别是简单的死锁,在写代码的时候很容易避免,动态死锁就很麻烦。因为出现死锁的主要原因是两个锁的加锁顺序不同,动态死锁看似是加载顺序都相同,但是实际不同,所以一旦发生,就很难排查。
2018-07-08
Redis实现分布式锁 Redis实现分布式锁
高可用,高并发,安全性……随着互联网不断的发展,这些要求越来越高,不论是在面试还是在日常的工作中。作为程序员必须要做到与时俱进,学习和了解这些知识。平时在通勤路上都会去看看一些大神的博客和公众号,学习他们的经验,也会在项目中借鉴。刚好这次项目上用到同步锁,对比数据库的乐观锁、悲观锁、显示锁Lock以及synchronized等,最终……
2018-07-06
Java虚拟机那些事儿(一):浅析JVM与JMM模型结构与关系 Java虚拟机那些事儿(一):浅析JVM与JMM模型结构与关系
最近翻看了java线程相关的东西,书中有一边专门讲到java内存模型,读完之后边回想起java虚拟机模型,那时心中便在思考java内存模型(以下简称JMM)和java虚拟机模型(以下简称JVM)之间的关系,下面将详细讲述。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有变量都储存在主存中,对于……
2018-07-04
Spring cloud Eureka实现思路和源码解析 Spring cloud Eureka实现思路和源码解析
现在很多公司都在使用Spring Boot和Spring Cloud构建微服务,目前来说这些技术在国内虽然应用很多,但是相关的中文版资料不是很多,关于内部原理分析的文章也是少之又少。现在团队开始准备使用Spring Cloud,最近也在研究相关的知识点,参考了很多博客,写了这篇文章,让我们一起来探讨Spring Cloud的组件Eureka的实现原理。
2018-07-02
Fork-Join内部实现原理分析 Fork-Join内部实现原理分析
在做一个长的任务的时候,需要消耗的时间很长,但是这个时候主流程又要等待这个长任务执行结束后才能执行。如这里这个长任务可能是从数据库中查出报表数据,计算封装出可以写入到报表的数据,主流程在等待往报表中写数据,但是长任务中迟迟计算不出报表数据,因此这里就需要考虑多线程,如果直接创建一个子线程,主线程还是需要等待这个子线程执行结束,这个方案……
2018-06-30
Spring中Lazy、Scope注解对IOC容器Bean初始化的影响分析 Spring中Lazy、Scope注解对IOC容器Bean初始化的影响分析
面试的时候总是会遇到各种Spring主要功能点的问题,因为Spring对于java来说太重要。如Spring的IOC容器、动态代理、事务、切面编程等等。后期再更新文章的时候我们会慢慢讨论这些东西,这里现在我们先看其中一个功能点IOC容器,其实也不算是说IOC容器,主要的重点是放在Spring注解对IOC容器初始化的影响,也是在面试中最常说漏的。
2018-06-27
死磕Java并发:深入分析ThreadLocal原理 死磕Java并发:深入分析ThreadLocal原理
ThreadLocal是啥?以前面试别人时就喜欢问这个,有些伙伴喜欢把它和线程同步机制混为一谈,事实上ThreadLocal与线程同步无关。ThreadLocal虽然提供了一种解决多线程环境下成员变量的问题,但是它并不是解决多线程共享变量的问题。那么ThreadLocal到底是什么呢?API是这样介绍它的:This class ……
2018-06-24
Spring AOP+反射实现自定义动态配置校验规则,让校验规则飞起来 Spring AOP+反射实现自定义动态配置校验规则,让校验规则飞起来
之前项目都是使用hibernate-validator来校验参数,但是实际上会出现一些小问题,就是校验规则都是通过注解的方式来完成,这样如果项目上线了,这个参数校验规则就没办法修改,如果出现校验规则问题,就必须修改后重新紧急上线(之前因为手机号码格式校验就出现过这个问题,因为新的号段不支持)。为了适应动态配置校验规则,在新起的项目我们就不再使用……
2018-06-22
JDK7、8对ConcurrentHashMap的实现和总结 JDK7、8对ConcurrentHashMap的实现和总结
ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的……
2018-06-20
Spring注解@Async和@Transactional失效问题究竟是什么原因,强势解释一波 Spring注解@Async和@Transactional失效问题究竟是什么原因,强势解释一波
Spring的异步执行注解@Async,在调用这个方法的时候发现,不对劲,耗时的逻辑我已经加入到异步取做了,怎么接口请求的响应这么慢,赶紧看日志,懵X,加了异步注解,却没有异步执行。在项目中用到@Transactional注解实现事务是必须滴,但是有时候我们会发现在方法上加了@Transactional注解却出现灵异事件,在方法内出现异常,数据……
2018-06-17
Spring AOP 动态代理 CGLIB、JDK 的基本原理 Spring AOP 动态代理 CGLIB、JDK 的基本原理
AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP 实现的关键在于 AOP 框架自动创建的 AOP 代理,AOP 代理主要分为静态代理和动态代理,静态代理的代表为 AspectJ;而动态代理则以 Spring AOP 为代表。本文会分别对 AspectJ 和……
2018-06-15
Linux环境vim命令(编辑器)的使用 Linux环境vim命令(编辑器)的使用
vim编辑器是linux环境下修改文件必备神器,你真的会用吗,进入输入i命令,进入编辑模式,然后上下飞快移动光标,鼠标选中目标复制粘贴,这样操作不方便也很慢,而且有点低(low)。如果现在需要定位到文档的某一行,你是否要去挨行去数,如果让你把文档中所有a修改为b,估计你会当场吐血身亡,所以下面的命令也许就是你想要的。
2018-06-13
14 / 15