ĴAVA
皇甫嗷嗷叫
励志架构师
展开
-
Spring中眼见为虚的 @Configuration 配置类
一、前言在这里我不得不感慨Spring的代码的完善与优秀,从之前看源码迷迷糊糊到现在基本了解Spring的部分源码后,愈来愈发现Spring开发者的思虑之周全!之前说过学习源码的目的在哪?正如我特别喜欢的一句话,有道无术,术尚可求也!有术无道,止于术!,对于Spring的了解仅仅局限于使用远远不够,Spring作为一个国内绝大多数java开发者使用的一个项目管理框架,他是一个生态,什么是生态?比如现在的SpringBoot、SpringCloud,他们是什么?是Spring生态中的一个组成部分!他们利用原创 2020-08-13 14:33:13 · 399 阅读 · 0 评论 -
生气!面试官你过来,我给你手写一个SpringAop!
说到`Spring Aop`无论是面试还是开发都是绕不过的一个坎 ,相信不少同学工作中也是经常性的使用AOP去搞一些日志啦权限啦或者校验之类的开发,但是实际上不少同学开发过程中基本都是去网上找一篇帖子,施展CV大法,然后改改就用到生产了!原创 2020-08-09 08:49:07 · 304 阅读 · 0 评论 -
【Spring】万字长文,祝你完全掌握Spring循环依赖的源码分析!
一、概述长文警告,事实上我不愿意写太长的文章,一面是太冗余,一方面读者容易疲倦,但是只要是涉及到源码级别的,就肯定篇幅不短,因为太短肯定没意义也解释不清楚,但是相信,耐心看完这个文章一定会有所收获!最近有很多读者面试的时候都被问到了有关于Spring三级缓存的解决方案,很多读者在面试受挫之后,试着自己去读源码,试着去跟断点又发现一层套一层,一会自己就懵了,我这几天总结了一下,为了能够让读者更加的去了解Spring解决循环依赖问题,我决定从以下四个方面去讲述:什么是循环依赖如果不依赖于Sprin原创 2020-07-30 12:40:56 · 222 阅读 · 0 评论 -
听说你一读Spring源码就懵逼?我帮你把架子搭好了,你填就行!
最近断更了一段时间,因为公司比较忙,周五的时候在公司做了一个关于Netty的分享,后续会总结一下分享出来!最近一段时间发现经常看到很多人,对Spring源码比较感兴趣,日常开发中,无论你做什么什么项目,大部分都离不开Spring生态的那一套东西,所以很多人对Spring底层源码实现很感兴趣,但是有些从来没有接触过源码的开发者,在看Spring源码的过程中确实及其难受的,为什么,大部分人看源码基本都是debug一点一点去看的,最后发现,越追越离谱,越追越深,到最后都追到JDK源码了,也没有明白是什么意思!原创 2020-07-25 15:30:43 · 378 阅读 · 0 评论 -
MyBatis为了解决二级缓存脏读问题,究竟做了那些骚操作!
MyBatis为了解决二级缓存脏读问题,究竟做了那些骚操作!一、存在即合理MyBatis为了提高我们的查询性能,专门设计了一级缓存和二级缓存,众所周知,我们在开发环境中,使用的缓存的时候,也会遇到各种各样的挑战,比如缓存穿透,缓存雪崩,数据脏读等等各种各样的问题,MyBatis也同样,在设计二级缓存的时候,MyBatis也同样遇见了各种挑战;我这几天在观看MyBatis对于二级缓存的设计的时候,突然发现,我们查询出来一个数据后并没有直接放置到二级缓存中,而是放到了另外一个存储空间,只有提交了之后才会被原创 2020-07-10 15:23:51 · 1164 阅读 · 0 评论 -
你凭什么说Spring会导致MyBatis的一级缓存失效!
一、概述最近老是听说Spring和MyBtis集成后,一级缓存就不可用了!我就纳闷了,为什么一级缓存不可用呢?这难道是Spring的BUG?这引起了我极大的兴趣,因为Spring作为一个极其优秀的项目管理框架,它居然也有BUG,我要一探究竟,满足我的好奇心!二、真的没走缓存为了帮助我查看源码,我把MyBatis和Spring集成后写了如下代码:AnnotationConfigApplicationContext annotationConfigApplicationContext;@Before原创 2020-07-07 14:31:40 · 258 阅读 · 0 评论 -
MyBatis与设计模式的激情碰撞
最近一直在研究MyBatis的源码,MyBatis作为国内最为经常使用的持久层框架,其内部代码的设计也是极其优秀的!我们学习源码的目的是什么呢?一方面是对该框架有一个很深入的认识,以便在开发过程中有能力对框架进行深度的定制化开发或者在解决BUG的时候更加得心应手!一方面是学习代码里面优秀的设计,看看这些成名多年的框架,他们的开发者是如何设计出一个高扩展性、低耦合性的代码呢?然后在自己的开发场景中应用。今天我们就来讨论一下,在MyBatis内部,为了提高代码的可读性究竟做了哪些设计呢?当然,如果你对原创 2020-07-05 14:46:23 · 208 阅读 · 0 评论 -
天啦噜,项目上使用InputStream,我被坑了一把!
本文目的是为了记录,项目开发时的一个小BUG,如果你是大佬,或者对InputStream十分熟悉,那么可以忽略!今天开发项目的时候遇见了一个小BUG,该功能如下:读取指定FTP服务器里面的文件数据,并计算md5签名推送到备份FTP服务器以上功能涉及到公司项目功能实现,不能详细多说,大致功能就是这样,读取一个MD5同步到另外一个服务器,期间我遇到什么问题了呢?先看一个模拟的代码实现!package com.inputstreams;import org.apache.commons.code原创 2020-06-30 21:13:48 · 634 阅读 · 2 评论 -
RedLock究竟是不是Redis分布式锁分布式环境下的银弹?
一、概述在这个技术不断更新迭代的情况下,分布式这个概念,在企业中的权重越来越高!谈及分布式时,不可避免一定会提到分布式锁,现阶段分布式锁的实现方式主流的有三种实现方式,Zookeeper、DB、Redis,我们本篇文章以Redis为例!从我们的角度来看,这三个属性是有效使用分布式锁所需的最低保证。安全特性:互斥。在任何给定时刻,只有一个客户端可以持有锁。活力属性:无死锁。最终,即使锁定资源的客户端崩溃或分区,也始终可以获得锁。活动性:容错能力。只要大多数Redis节点都处于运行状态,客户端就可以原创 2020-06-28 22:58:46 · 541 阅读 · 0 评论 -
求求你,别再开发的时候一用redis分布式锁,就急着去复制粘贴了!lua脚本的实现思路
随着业务越来越负责,现在的业务,能够支持分布式和高并发是基本的要求,涉及到高并发和分布式就一定会涉及到分布式锁机制,分布式锁就是为了保证分布式环境下,只有一个机器能够拿到锁对象,其余的都需等待该锁释放,再进行申请锁资源!分布式锁必须遵循以下原则:同一时刻只能有一个机器(进程或线程)能够拿到锁对象!拥有过期机制,防止机器宕机没有释放锁的情况下造成死锁!加锁和解锁的必须是一个机器(线程、进程)!集群环境下,存活机器依旧何以做完整的加解锁操作!一、思路图二、思路图实现1.正确实现该实现由原创 2020-06-25 18:38:13 · 377 阅读 · 0 评论 -
当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?SpringMVC视图处理器与视图篇章【终章】
本篇文章依旧是基于上篇文章的基础做的描述,请先观看【当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?请求映射器篇】【当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?SpringMVC处理器适配器与处理器篇章】先上图:上一篇文章,我将 Handler处理器适配器,处理器做了一个很详细流程分析,那么本篇文章会围绕视图解析器和视图两个流程来分析源码!1. 视图推断源码分析不知道大家对这一段代码是否熟悉!public void invokeAndHan原创 2020-06-21 10:00:18 · 239 阅读 · 0 评论 -
当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?SpringMVC处理器适配器与处理器篇章
SpringMVC之请求处理适配器与处理器源码分析上次的SpringMVC源码分析因为篇幅原因只将请求映射器的源码流程分析完毕,不知道大家对上次的流程分析有什么意见呢?空闲的时候是不是自己追了一遍源码嘞?先上图:上一篇文章,我将 Handler处理器映射器做了一个很详细流程分析,那么本篇文章会围绕处理器适配器、处理器两个流程来分析源码!1. 处理器适配器源码解析上篇文章其实后面也大概说了一下后面的大概逻辑,但是事实上,SpringMVC作为一个优秀的框架,他所考虑的是很全面的,其实在开发一个Co原创 2020-06-19 22:31:47 · 331 阅读 · 0 评论 -
当一个http请求来临时,SpringMVC究竟偷偷帮你做了什么?
一、简介Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。1. Springmvc的优点:可以支持各种视图技术,而不仅仅局限于JSP;与Spring框架集成(如IoC容器、AOP等);清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(hand原创 2020-06-18 10:33:38 · 355 阅读 · 0 评论 -
市面上数据库种类那么多,如何选择?
技术真的是日新月异,关系型数据库在数据库存储界称霸这么多年后,市面上各种数据库如雨后春笋蓬勃发展,似乎关系型数据库也地位不保,我前段时间和同事聊天,听到他们经常说的现在市面上的noSql数据库完全可以替代现有的关系型数据库,可是事实真的如此吗,我们一起就市面上现在比较流行的各类数据库,做一个对比: 真正业务开发中,绝对不是拍脑袋定下来使用那种数据库就使用那种数据库的,选择某种或者某几种数据库配合使用,一定是对改数据库有一个比较全面的认识。 关系型数据警告过这么多年的原创 2020-06-17 11:39:14 · 740 阅读 · 0 评论 -
研发组扩充,研发组暂时拟定这么多JAVA面试题,快来看看吧!
一.List相关面试题List是一个集合接口,分为AarrayList和LinkedList两个实现方式**ArrayList:**底层实现就是数组,且ArrayList实现了RandomAccess,表示它能快速随机访问存储的元素,通过下标 index 访问,只是我们需要用 get() 方法的形式, 数组支持随机访问, 查询速度快, 增删元素慢;**LinkdeList:**底层实现是链表, LinkedList 没有实现 RandomAccess 接口,链表支持顺序访问, 查询速度慢,原创 2020-06-14 21:38:27 · 522 阅读 · 0 评论 -
设计原则之开闭原则
基本介绍:对扩展开放对修改关闭,用抽象构建框架 用实现扩展细节!所谓对扩展开放,对修改关闭,其实是设计模式里面所重点提倡的,后续所有涉及模式的介绍其实都是为了程序能够更好的扩展,提倡设计模式的本质就是为了减少增加一点功能而修改系统的主要逻辑!用抽象构建框架 用实现扩展细节! 尽量通过扩展类的操作来实现行为变化,而不是通过修改已有代码来实现修改错误的示范下面还是老规矩,我们先看一段错误的代码!需求1:我需要一个过滤特殊字符的功能package principle.opencloeds.erro.原创 2020-06-02 16:55:35 · 190 阅读 · 0 评论 -
设计原则之单一职责
1. 单一职责原则基本介绍:一个类只负责一项职责,完成一个单一的功能。错误的示范package principle.singleresponsibility.error;/** * 单一职责错误示范 * @author huangfu */public class SingleResponsibilityError { public void mobile (String vehicle){ System.out.println(vehicle + "在公路上跑原创 2020-06-01 13:15:29 · 232 阅读 · 0 评论 -
CentOS7安装单机环境的es和Kibana
1.单机环境下es配置[root@192 bin]# ./elasticsearchfuture versions of Elasticsearch will require Java 11; your Java version from [/usr/java/jdk1.8.0_251-amd64/jre] does not meet this requirement[2020-05-31T15:26:41,446][WARN ][o.e.b.ElasticsearchUncaughtExceptio原创 2020-05-31 17:10:07 · 412 阅读 · 0 评论 -
一篇文章带你彻底搞懂NIO阻塞
什么是NIOJava NIO (New IO)是 Java 的另一个 IO API (来自 java1.4) ,意味着可以替代标准的 Java IO API和 Java Networking API。 提供了一种与标准 IO API 不同的 IO 工作方式。注意:Java的NIO只是说IO API,阻塞非阻塞才是IO的模型。也有人称NIO为No-Blocking IO,非阻塞IO,但是这...原创 2020-01-14 14:12:18 · 1518 阅读 · 0 评论 -
企业是如何从头开发一个商业项目的?
对于还没有参与过项目的同学,大都与企业项目开发的流程都感到特别的好奇!项目对于程序员来说像是自己的孩子,自己看着一步一步成熟,完善!最后到独立的运行!然后大多数程序员都如含泪老母亲一样,看这自己的项目嫁出去,嫁到甲方!从此天各一方!咳咳,跑题了!就我经验而谈,上一家公司是一个传统型企业公司!主要开发的是一些国企的信息管理系统,其实包括你们在内的很多小伙伴,毕业后会有一大部分进入到类似的项目中参...原创 2020-01-08 13:50:13 · 418 阅读 · 0 评论 -
整天BIO通信机制不好,你真的了解他的性能瓶颈吗?
一、BIO通讯模型采用BIO通信模型的服务端,通常都会使用一个Acceptor线程负责监听客户端的连接!接收到客户端的连接请求之后,为每一个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端!线程销毁!典型的一请求一应答的通信模型!弊端该模型的最大问题就是缺乏弹性伸缩的能力,当客户端并发量增加后,服务端的线程数和客户端并发访问数呈1:1的正比关系!当线程数膨胀...原创 2020-01-08 09:59:27 · 446 阅读 · 0 评论 -
JAVA 初学者的编码规范一:命名风格与代码格式
其实对于初学者,最忌讳的一个事就是在学习过程中,认为自己是新手,代码可以随便写!但是事实上并不是如此!因为一个人的编码规范是从开始学的时候就必须要练习和养成习惯的!从编码过程中的每一件小事做起!从我们初学的时候的变量、方法名、类名等做起!不要看不起这一段代码!其实大牛与小白写代码,除了思维上的差距外,其编码风格也是重中之重!可能两个人写相同的一段逻辑!小白写的,别人可能要花上10分钟去读取,而大牛...原创 2020-01-04 11:10:54 · 742 阅读 · 0 评论 -
为什么建议在校准备学习java的同学也要学会一点前端知识
之前我分享过一篇文章!大概分析了一下,现在大学里面学习java的一些同学大概的一个学习的路线!使其简单的能够对日后JAVA的学习路线有一个简单的认识!同时也给部分同学坚定了信心!说实话能够帮助到同学们,我心里极其高兴!同时,不管是公众号,还是博客上,都有同学问我同样的问题:我只学习java后端知识,不学习前端可以吗?其实啊!在国内有一个现状!就是新手java也包括一些大牛,对技术极为感兴趣,但是...原创 2020-01-02 10:05:44 · 1094 阅读 · 2 评论 -
JAVA自定义注解
一.名词解释Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。但是这种解释方式,貌似不太容易理解!用名词解释名词,这就是扯淡!所以不妨用下面的一种方式,来更好的解释这个名词的意思!可以把JAVA注解理解为标签 什么是标签?就是一个标记!比如 ...原创 2020-01-03 18:34:28 · 364 阅读 · 0 评论 -
面试官问我Volatile的原理?那吹呗!谁怕谁!
在多线程并发编程中,synchronized和volatile都扮演着及其重要的角色;可以这么说,Volatile是轻量级的synchronized!volatile他在多处理器开发中保证了共享变量的可见性!也能保证在多线程并发情况中指令重排序的情况!什么是可见性?电脑处理器为了提高运行速度,所以不会直接与内存进行交互!而是先会将数据读取到内部缓存!之后在进行操作,操作完之后满足一定条件之后,...原创 2020-01-03 08:36:28 · 573 阅读 · 0 评论 -
ClasssLoader自定义类加载器
作用编译器先把java文件编译成class字节码文件ClassLoad会把字节码文件转换成jvm中的Class对象jvm再把class对象转成实例对象ClassLoad在java 中有着非常重要的作用,他主要工作是在Class装载的加载过程,他的主要作用是 从系统外部获取二进制数据流。它是java的核心组件,所有的class都是通过ClassLoad进行加载的,ClassLoad...原创 2019-12-30 11:18:47 · 546 阅读 · 0 评论 -
FastJosn转化JSON字符串有多余转移符的情况解决
FastJosn转化JSON字符串有多余转移符的情况解决首先我说明前提情况:是因为你转换了一个本来就是一个 json格式的字符串,所以他会加上转义,话不多说直接上解决方案public static void main(String[] args) { List<Map<String,Object>> list = new ArrayList<&...原创 2019-11-04 17:15:43 · 2137 阅读 · 0 评论 -
rabbitmq主题订阅
rabbitmq主题订阅一、topic 模式交换机上一篇文章讲述了关于直接连接交换机根据key找到对应队列的方式,实现特殊消息特殊队列消费的目的,但是事实上,生产环境下,对于消息的复杂性远不是这样就能够解决的!比如:你要监控有个用户的操作行为,用户的操作行为太多了 增删改查,如果一个一个的写难免会有遗漏,这个时候,我们可以用通配符 user.* 轻松解决!这就是mq的主题模式!这里的交换机...原创 2019-10-15 16:30:10 · 680 阅读 · 0 评论 -
rabbitmq发布订阅
rabbitmq发布订阅如果觉得还可以 记得关注一下公众号哦!一起交流学习!一、发布订阅模式还记得我们上一个文章是如何发布消息的吗?回顾一下以前是如何发送消息的:channel.basicPublish("", QUEUE_NAME, null, message.getBytes());对的,以前我们发送消息是直接由生产者将消息发送到队列,可是这种方式官方是不推荐的!Rabb...原创 2019-10-12 09:21:20 · 308 阅读 · 0 评论 -
Solr8.0 环境搭建笔记
今天在公司搭建了一套Solr服务器,将过程记录下来,方便日后查看学习!一、Solr全文检索引擎的安装与环境配置1. 官网下载Solr下载地址为:http://lucene.apache.org/solr/ 应用版本为8.X2.解压Solr临时搭建环境为WIN7 ,将solr压缩版解压至本地磁盘3.测试启动Solr自带的服务器3.1启动命令solr的bin目录 .\s...原创 2019-07-19 18:57:51 · 882 阅读 · 1 评论 -
SpringBoot集成Quartz并持久化
SpringBoot集成Quartz并持久化MySql sql语句项目准备代码编写重点 :创建任务的业务接口创建任务接口的实现类编写前端页面运行实例MySql sql语句/*MySQL Data TransferSource Host: 101.132.168.240Source Database: quartzTarget Host: 101.132.168.240Target D...原创 2019-07-02 17:30:10 · 2003 阅读 · 1 评论 -
Spring Cloud入门篇(适合新手入门)
1.微服务架构:Spring-Cloud1.1 什么是微服务? 微服务就是把原本臃肿的一个项目的所有模块拆分开来并做到互相没有关联,甚至可以不使用同一个数据库。 比如:项目里面有商品模块和订单模块,但是商品模块和订单模块并没有直接关系,仅仅只是一些数据需要交互,那么就可以吧这2个模块单独分开来,当商品需要调用订单的时候,订单是一个服务方,但是订单需要调用商品的时候,商品又...原创 2019-05-04 15:57:07 · 937 阅读 · 0 评论 -
MyBatis使用手册
运行环境IDEA 2018 + Maven + Mysql 5.1.44 + MyBatis 3.4.6POM文件 &amp;lt;dependencies&amp;gt; &amp;lt;!--MyBatis JAR--&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&am原创 2019-02-24 22:43:27 · 1252 阅读 · 0 评论 -
算法学习之遗传算法-JAVA简单实例
遗传算法概念: 基于达尔文的进化论,物竞天择,适者生存;认为生物总是向着更加贴合于环境的方向进化;通过各种基因的遗传、杂交、变异、复制等手段,慢慢使整个种群更加贴合于自然环境;遗传算法也是模拟生物的遗传、杂交、变异、复制手段逐渐进化为最优解!名词概念解析:基因和染色体:染色体在数学建模上可以看作是可行解,例如 3x+4y+5z&lt;100,它的可行解为[1,2,3]、[1,3,2...原创 2019-02-12 09:14:33 · 869 阅读 · 0 评论 -
深入浅出Flume分布式日志收集一
对于Flume的学习,最近我又有了一些新的认知,知识范围有限,不喜勿喷。Flume是一个高可用的、高可靠的、海量分布式日志采集、聚合和传输的系统。1.对于Flume的简单理解,不妨先看一下Flume的简单架构模型这是最简单的一个模型,也是最清楚的一个架构原;可以看出来,Flume最核心的部分其其实只分为三个部分Source、Channel、Sink三个部分,Source负责收集外部日志...原创 2019-01-01 15:55:19 · 802 阅读 · 1 评论 -
如何创建一个与Servlet-api完全解耦和的管理员后台操作日志监控
技术框架MyBatis+Spring+SpringMVC邮箱:huangfusuper@163.com欢迎交流在日常开发系统后台时,需要针对管理员操作进行监控,如果使用Spring这一套技术体系,使用AOP切面编程+自定义注解不妨是一个好办法,但是在使用这一套体系的同时也会出现一些坑。比如这一套体系是完全依赖于WEB环境,脱离WEB环境就会出现出现ServletRequestAttribute...原创 2018-12-10 15:25:35 · 247 阅读 · 0 评论 -
JVM深度优化之HotSpot虚拟机
JVM深度优化之HotSpot虚拟机 JVM(Java Virual Machine)处于jdk中最底层,屏蔽OS,提供完整的Java运行环境(虚拟计算机),操作系统装入JVM通过Java.exe完成。 首先,在谈java虚拟机之前,先了解一下jdk和jre的区别 ...原创 2018-11-16 22:35:28 · 293 阅读 · 0 评论 -
Netty学习笔记一
最近公司可能会使用Netty 作为RPC的底层,提前做一下知识储备!后续会跟进我的学习进度,学到哪,写到哪!一、准备环境1.安装gradle官网地址:https://gradle.org/releases/2.配置环境变量GRADLE_HOME : GRADLE安装的根目录path : %GRADLE_HOME %\bin\检验:gradle -v二、IDEA使用...原创 2019-08-08 14:06:52 · 311 阅读 · 0 评论 -
Netty学习笔记二(聊天室功能的初步认识)
今天只是聊天室实现的初步讲解,并不会真正的实现聊天室功能,具体的聊天室功能将会在下一个文章出现3.Netty 客户端与服务端之间消息的传递 Hello World3.1 服务端具体的代码实现我一般来说会将代码的意思放在注释里面,可以将代码克隆下来 然后看注释即可package com.demo.netty.secondexample;import io.netty.channel.C...原创 2019-08-09 14:31:31 · 182 阅读 · 0 评论 -
Netty学习笔记三(聊天室功能的实现)
4.(进阶)客户端与服务端实现聊天室功能4.1 服务端代码实现服务的自定义处理器的实现 对于效果图 我从来没不喜欢展示 因为你真的想练就一定会照着敲一遍,看一万遍效果图,不如自己手写完,看效果来的简单明了!我只能说我发的每一个代码都是我亲测可用的!package com.demo.netty.thirdexample;import io.netty.channel.Channel;...原创 2019-08-09 14:33:50 · 249 阅读 · 0 评论