细节深究
MC-闰土
程序员到最后拼的是文化!
展开
-
细品Spring Bean的生命周期
spring bean的生命周期官方的流程图如下:接下来 我们用代码验证一下是否如图所愿:首先定义一个testBeanimport org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanFactory;import org.springframework.be...原创 2019-12-13 09:52:02 · 1035 阅读 · 0 评论 -
maven高阶使用技巧
maven生命周期Maven有三套相互独立的生命周期,分别是clean、default和site。每个生命周期包含一些阶段,阶段是有顺序的,后面的阶段依赖于前面的阶段。比如:调用clean生命周期的clean阶段实际执行pre-clean和clean;调用default生命周期的install阶段则执行install以及之前所有阶段。1、clean生命周期:清理项目,包含三个阶段。p...原创 2018-07-28 18:13:26 · 232725 阅读 · 0 评论 -
Java并发编程之CyclicBarrier
概述 CyclicBarrier是一个同步工具类,它允许一组线程互相等待,直到到达某个公共屏障点。与CountDownLatch不同的是该barrier在释放等待线程后可以重用,所以称它为循环(Cyclic)的屏障(Barrier)。 CyclicBarrier支持一个可选的Runnable命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。...转载 2018-09-02 16:29:19 · 233217 阅读 · 0 评论 -
Java并发编程之Exchanger
概述 用于线程间数据的交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。 Exchanger 可被视为 SynchronousQueue 的双向形...转载 2018-09-02 16:37:38 · 233736 阅读 · 0 评论 -
java多线程之Phaser
java多线程技术提供了Phaser工具类,Phaser表示“阶段器”,用来解决控制多个线程分阶段共同完成任务的情景问题。其作用相比CountDownLatch和CyclicBarrier更加灵活,例如有这样的一个题目:5个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束...转载 2018-09-02 16:40:06 · 233766 阅读 · 0 评论 -
SpringMVC与Springfox(Swagger2)整合详解以及涉及的问题处理
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。 作用: 1. 接口的文档在线自动生成。 2. 功能测试。 在做Spring+Spri...原创 2018-09-26 16:58:30 · 287965 阅读 · 1 评论 -
源码分析:java.util.concurrent.ExecutorService线程池中的线程管理
最近在做一些组件的封装,使用了java.util.concurrent线程池,就好奇想知道他是如何管理线程,以及重用的?于是追踪了一下源码,基本了解了他得处理机制,所以在此总要记录一下。最近也没写什么文章,感觉人也懒了,哎。。。。 正要洋洋洒洒来写一篇来着,关键词一搜网上已经有人写了,我懒病又犯了。。。发个链接记录一下:https://blog.csdn.net/MingHuang2017/a...原创 2018-07-17 18:26:25 · 233085 阅读 · 0 评论 -
Spring事务传播行为详解
前言Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文...转载 2018-09-28 21:46:24 · 233903 阅读 · 3 评论 -
浅析设计高可用数据库连接池(多线程)的核心要点与技术原理以及处理线程的安全问题
前不久有俩个盆友和我探讨这些问题,我做了个简单的总结分享给打架,明天就是国庆了祝大家玩的开心,主要分享设计数据库连接池原理以及要处理关键点,本文只挑选某一种实现方式来简单阐述,暂不涉及事务相关。关于事务传播行为和跨库事务(包括2PC和TCC),过段时间再做分享!那我们先引出问题,就从没有数据库连接池的时候说起吧(图就不画了,网上截一个)!!!缺点:首先,每一次web请求都要建立一次数据...原创 2018-09-30 18:40:43 · 236377 阅读 · 1 评论 -
常见的&必知必会的JAVA面试题清单-(长更)
面试题模块介绍内容包含了很多java方方面面,包含模块有:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示:适宜阅读人群...转载 2019-03-11 09:36:22 · 236897 阅读 · 2 评论 -
开发-备忘录
学习微服务框架,不如学习演进式架构(Evolutionary Architecture)。学习新的编程语言,不如学习代码整洁之道、设计模式、领域驱动设计(DDD)。学习 LeSS 和规模化敏捷框架(SAFe),不如学习精益生产原则(Lean manufacturing principles)。学习 Hystrix,不如学习容错模式(Fault Tolerance Patterns)。...原创 2019-10-08 15:01:17 · 1087 阅读 · 0 评论 -
java并发编程之使用 CountDownLatch 控制多个线程执行顺序
有时候会有这样的需求,多个线程同时工作,然后其中几个可以随意并发执行,但有一个线程需要等其他线程工作结束后,才能开始。举个例子,开启多个线程分块下载一个大文件,每个线程只下载固定的一截,最后由另外一个线程来拼接所有的分段,那么这时候我们可以考虑使用CountDownLatch来控制并发。 CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类...转载 2018-09-02 16:01:07 · 284054 阅读 · 0 评论 -
java并发编程之Semaphore(信号量)的用法
Semaphore类其实就是synchronized关键字的升级版,这个类主要作用就是控制线程并发的数量,而在这方面synchronized就有点力不足了,接下来我们就开始先了解一下Semaphore的一些常用方法就注意细节。在new 这个类的时候需要给这个类传递一个参数permits,这个参数是整数类型,这个参数的意思是同一时间内,最多允许多少个线程同时执行acquire方法和release...转载 2018-09-02 15:56:21 · 233479 阅读 · 0 评论 -
hibernate和mybatis中关于sessionfactory、session的线程安全问题详解
hibernate和mybatis中关于sessionfactory、session的线程安全问题详解原创 2017-07-26 22:42:37 · 236466 阅读 · 0 评论 -
Spring MVC工作流程
Spring MVC工作流程原创 2017-07-28 20:54:51 · 233126 阅读 · 0 评论 -
java实现rabbitMQ延时队列详解以及spring-rabbit整合教程
java实现rabbitMQ延时队列详解这是我在公司开发中使用的俩套方案,感兴趣的话可以看一下:点击下载在实际的业务中我们会遇见生产者产生的消息,不立即消费,而是延时一段时间在消费。RabbitMQ本身没有直接支持延迟队列功能,但是我们可以根据其特性Per-Queue Message TTL和Dead Letter Exchanges实现延时队列。也可以通过改特性设置消息的优先级。...原创 2017-12-24 15:01:54 · 290347 阅读 · 0 评论 -
HTTP/2 服务器推送(Server Push)教程
HTTP/2 协议的主要目的是提高网页性能。头信息(header)原来是直接传输文本,现在是压缩后传输。原来是同一个 TCP 连接里面,上一个回应(response)发送完了,服务器才能发送下一个,现在可以多个回应一起发送。服务器推送(server push)是 HTTP/2 协议里面,唯一一个需要开发者自己配置的功能。其他功能都是服务器和浏览器自动实现,不需要开发者关心。本文详细介绍服务器推送的...转载 2018-03-13 10:38:58 · 233264 阅读 · 0 评论 -
tomcat的原理分析
1.tomcat实际是运行在jvm中的一个进程。我们把它定义为【中间件】,顾名思义,他是一个在java项目与jvm之间的中间容器。我们的web项目没有入口方法(main方法),那么他是如何运行起来并为客户端返回数据的呢?2.web项目[就javaee而讲]的本质,是一大堆的资源文件和方法。其中没有main方法,意味着web项目中的方法不会自动运行起来。3.这样,我们想想也知道,我们把web项目部署...转载 2018-05-21 17:41:34 · 232333 阅读 · 0 评论 -
不可不知的消息队列细则
本文大概围绕如下几点进行阐述:为什么使用消息队列?使用消息队列有什么缺点?消息队列如何选型?如何保证消息队列是高可用的?如何保证消息不被重复消费?如何保证消费的可靠性传输?如何保证消息的顺序性?我们围绕以上七点进行阐述。需要说明一下,本文不是《消息队列从入门到精通》这种课程,因此只是提供一个复习思路,而不是去教你们怎么调用消息队列的API。建议对消息队列不了解的人,去找点消息队列的博客看看,再看本...转载 2018-05-28 22:28:48 · 233339 阅读 · 1 评论 -
分布式之 Redis
本文围绕以下几点进行阐述1、为什么使用redis2、使用redis有什么缺点3、单线程的redis为什么这么快4、redis的数据类型,以及每种数据类型的使用场景5、redis的过期策略以及内存淘汰机制6、redis和数据库双写一致性问题7、如何应对缓存穿透和缓存雪崩问题8、如何解决redis的并发竞争问题正文1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性...原创 2018-05-28 22:33:15 · 233115 阅读 · 3 评论 -
MySQL 优化原理
MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。 MySQL逻辑架构,来自:高性能MySQLMySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比...原创 2018-05-28 22:42:31 · 284409 阅读 · 0 评论 -
ConcurrentHashMap的那些事儿
HashMap允许插入key和value是null的数据的,而ConcurrentHashMap是不允许key和value是null的。这个是为什么呢?ConcurrentHashMap的作者是这么说的: The main reason that nulls aren’t allowed in ConcurrentMaps (ConcurrentHashMaps, Concurre...原创 2018-06-07 09:54:17 · 283744 阅读 · 0 评论 -
溯源:logback中logger对象的创建过程以及他的处理机制
首先在我们的业务中,所有用到slf4j的地方都有类似于以下有这段代码:public class ClassDemo { private static Logger logger = LoggerFactory.getLogger(ClassDemo.class); logger.debug("some log content");}我现在要研究的就是LoggerFactory....转载 2018-06-16 09:48:59 · 235386 阅读 · 0 评论 -
由分布式事务处理模型(XA 规范)引申到Mycat分布式事务的处理方案
随着并发量、数据量越来越大及业务已经细化到不能再按照业务划分,我们不得不使用分布式数据库提高系统的性能。在分布式系统中,各个节点在物理上都是相对独立的,每个节点上的数据操作都可以满足 ACID。但是,各独立节点之间无法知道其他节点事务的执行情况,如果想让多台机器中的数据保存一致,就必须保证所有节点上的数据操作要么全部执行成功,要么全部不执行,比较常规的解决方法是引入“协调者”来统一调度所有节点的执...转载 2018-08-28 10:43:13 · 233338 阅读 · 0 评论 -
很全的sql语句练习题(+sql脚本文件)
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2017-04-02 17:42:36 · 312506 阅读 · 0 评论