自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小样

Where there is a will, there is a way 。热情真诚,坚持学习,钻研一方,其他能力同样提高。

  • 博客(88)
  • 资源 (1)
  • 收藏
  • 关注

转载 Spring钩子方法和钩子接口的使用详解

Spring钩子方法和钩子接口的使用详解zhrowable12017.05.07 02文章目录前言SpringFramework其实具有很高的扩展性,只是很少人喜欢挖掘那些扩展点,而且官方的Refrence也很少提到那些Hook类或Hook接口,至于是不是Spring官方有意为之就不得而知。本文浅析一下笔者目前看到的Spring的一些对外开放的扩展点、Hook接口或者Hook类,如果有什么错误,希望多多交流指正,一切以Spring的源码为准,文章编写使用的Spring版本为4.3.8.Releas

2020-12-28 14:50:27 440

原创 数据库MVCC看这个肯定有收获

本文主要内容围绕MVCC多版本并发控制展开,通过本文你可以收获事务隔离级别的原理。知道幻读,不可重复读,可重复读等原理。以及数据库的一些底层知识。1、回顾mysql数据库的innodb引擎中存在一个名词像幻读、脏读、不可重复读、隔离级别我们现在先依次解释下这些名词。1.1 数据库常见的一些问题脏读:事务A中读到了事务B尚未提交的数据(事务B可能会回滚)不可重复读:一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值。(不可重复读在读

2020-11-30 22:05:45 223

原创 Http常用响应码

状态码在响应报文里表示了服务器对请求的处理结果;状态码后的原因短语是简单的文字描述,可以自定义;状态码是十进制的三位数,分为五类,从 100 到 599;2××类状态码表示成功,常用的有 200、204、206;3××类状态码表示重定向,常用的有 301、302、304;4××类状态码表示客户端错误,常用的有 400、403、404;5××类状态码表示服务器错误,常用的有 500、501、502、503。接下来我就挑一些实际开发中比较有价值的状态码逐个详细介绍。1××1××类状态码属于提

2020-08-21 14:58:46 498

原创 中台浅谈

中台1. 中台发展历史1、2008~2015 关键词:孕育在 2008 年,随着阿里巴巴战略的调整,天猫顺势而生。但因为其相较于于淘宝,有其自身的特点,所以当时天猫和淘宝就出现了重复建设的问题,也就是现在大家经常提到的烟囱式系统架构。烟囱式的系统架构,造成了大量的重复建设和资源浪费,怎么办呢?最自然的想法就是将重复的组织和系统进行整合。正因如此,阿里共享事业部正式诞生,负责将各个前台系统中的公共部分进行平台化改造,经历了一段痛苦的摸索之后,借聚划算爆发的契机,才真正奠定了阿里共享事业部的重要地位,埋

2020-08-17 16:52:07 1922

转载 spring cloud Hystix熔断机制--基本熔断配置和Fegin client熔断配置

所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢?当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示,而这个时候如果不想出现这样的错误信息,而希望替换为一个错误时的内容。一个服务变慢了,后续的其他调用者服务跟着不能用了,这就是雪崩效应对于熔断技术的实现需要考虑以下几种情况:· 出现错误之后可以 fallback 错误的处理信息;· 如果要结合 Feign 一起使用的时候还需要在 F...

2020-08-11 09:48:52 681

转载 redis 限流方案实现

我司用了6年的Redis分布式限流器,可以说是非常厉害了!什么是限流?为什么要限流?不知道大家有没有坐过帝都的地铁,就是进地铁站都要排队的那种,为什么要这样摆长龙转圈圈?答案就是为了限流!因为一趟地铁的运力是有限的,一下挤进去太多人会造成站台的拥挤、列车的超载,存在一定的安全隐患。同理,我们的程序也是一样,它处理请求的能力也是有限的,一旦请求多到超出它的处理极限就会崩溃。为了不出现最坏的崩溃情况,只能耽误一下大家进站的时间。限流是保证系统高可用的重要手段!由于互联网公司的流量巨大,系统上

2020-07-21 00:34:46 816

转载 Elasticsearch快速入门

摘要目录摘要简介安装Windows下的安装Linux下的安装相关概念集群状态查看索引操作类型操作文档操作数据搜索数据准备搜索入门条件搜索组合搜索过滤搜索搜索聚合参考资料记得刚接触Elasticsearch的时候,没找啥资料,直接看了遍Elasticsearch的中文官方文档,中文文档很久没更新了,一直都是2.3的版本。最近又重新看了遍6.0的官方文档,由于官方文档介绍的内容比较多,每次看都很费力,所以这次整理了其中最常用部分,写

2020-07-19 11:31:44 219

原创 ElasticSearch 初识

0、目标:将初学者快速带入es,快速掌握一些相关的概念1、什么是ES?ElasticSearch 中文直译为可扩展的搜索,接下来也是从可扩展性和搜索两个方面介绍它。1.1什么是可扩展?要分析es的可扩展我们需要分析下es的一些原理。关于es,我们可能常能听说到节点、分片这些词,什么是节点?对于节点,可以理解为一个es服务进程、我们的生产环境es往往是由一个集群构成、一个集群往往是由多个节点组成,通常我们一台服务器会部署一个节点(当然也可以部署多个),一个节点也会部署多个分片。什么是分片?

2020-07-14 21:19:08 129

转载 ElasticSearch 索引设置总结

在使用ES时,我们常见的就是需要生成一个template来定义索引的设置,分词器,Mapping.本文将基于项目经验来总结一些常用的配置。Index设置index.refresh_interval 配置一个刷新时间,将index buffer刷新到os cache的时间间隔,刷新到os cache的数据才可以被索引到,默认是1s.如果对实时性搜索要求不高的地方,可设置时间为30s,提高性能。number_of_replicas 对于集群数据节点 >=2 的场景...

2020-07-01 23:39:49 3678

转载 终于有人把Elasticsearch原理讲透了!

小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了。随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节。但是由于小史很久没有背过诗词了,飞一个字很难说出一句,很多之前很熟悉的诗句也想不起来。倒排索引吕老师:但是我让你说出带“前”字的诗句,由于没有索引,你只能遍历脑海中所有诗词,当你的脑海中诗词量大的时候,就很难在短时间内得到结果了。

2020-06-29 08:58:51 222

原创 RabbitMq从使用到原理分析

目标:从宏观上掌握RabbitMq这个消息中间件的基本原理。同时让阅读者掌握一些基本的使用方法。大致原理介绍为了实现解耦或者实现异步,将消息先发往独立于应用服务以外的一个中间服务(也就是mq)存储,其他服务在从这个中间服务获取消息,进行接下来的业务逻辑处理。整体流程如下:消息中间件的作用市场上包括各种中间件Kafka、RabbitMq、ActiveMq、RocketMq等。作用其实都是类似解耦流量削峰异步通信冗余、扩展、缓冲等中间件的安装建议参考地址RabbitMq的整体架构分

2020-06-27 11:59:48 264

原创 CAS算法原理分析(java中原子类如何实现线程安全)

1. 目标:从原码层面分析CAS算法、以及java.util.concurrent.atomic 包下的原子类是如何运用CAS算法而实现线程安全。2. 基础知识CAS算法基本原理CAS算法全称:compare and swap (比较并交换),是CPU指令级的操作,只有一步原子操作,整个操作是原子的,也就是要么不执行,要么执行完。这样的系统原子操作能做什么呢?比较内存中的参数值和方法调用处提供的参数值,如果相等,则将内存的参数值,设置为新值,否则返回内存中的参数值。volatile 关键字这个关

2020-06-07 22:15:54 507

原创 彻底搞懂 java锁相关概念(15个锁相关名词)

本文目标介绍各种锁的概念,结合实际中锁使用情况,结合部分结合源码的分析,让读者能在短时间内全面掌握锁相关知识。锁的名词(15个)公平锁 / 非公平锁可重入锁 / 不可重入锁独享锁 / 共享锁 互斥锁 / 读写锁乐观锁 / 悲观锁偏向锁 / 轻量级锁 / 重量级锁分段锁&自旋锁上面是很多锁的名词,这些分类并不是全是指锁的类型,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。拿不到锁的情况下是否立即排队?(公平锁/非公平锁)公平锁公平锁是指

2020-06-07 17:36:45 633

原创 集合对象源码分析小结(线程安全&线程非安全)

一、概念:线程安全:就是当多线程访问时,采用了加锁的机制;即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。线程不安全:就是不提供数据访问时的数据保护,多个线程能够同时操作某个数据,从而出现数据不一致或者数据污染的情况。对于线程不安全的问题,一般会使用synchronized关键字或者ReentrantLock 加锁同步控制 。线程安全 工作原理: jvm中有一个main memory对象,

2020-06-02 08:22:32 124

原创 mybatis SQL执行流程分析(原理)

目的分析在sql执行时,mybatis的底层做了哪些处理,为啥mapper接口能执行?这就是本文的目标,mapper执行过程都有哪些关键信息。如果需要了解mybaits启动流程,整体架构情况可以看另外一篇mybatis 启动流程分析(原理)...

2020-05-31 20:18:29 2927

原创 mybatis 启动流程分析(原理)

目标:从整体上了解mybaits框架,并通过debug过程分析启动过程中涉及到的一些关键节点。mybaits 相比原生jdbc 有了哪些改进如果您不是很明白为啥不直接用jdbc 而是要用mybatis,建议您阅读这篇文章 看看原始的jdbc访问数据库方式,和使用mybatis框架访问数据库方式的差异。我们会发现框架给人带来了很大的方便。主要是下面几点连接获取和释放SQL统一存取传入参数映射和动态SQL结果映射和结果缓存MyBatis框架整体设计接口层负责和应用层之间做交互,提供ap

2020-05-31 17:22:20 1081

转载 汇总一下Intellij IDEA常用的牛逼插件

这里补充一下常用的插件, 非常值得安利一波!1、日晒主题 Solarized Themes推荐指数:☆☆☆☆☆推荐理由:日晒主题本身是为vim定制的。后来移植到ide 非常酷!配色非常耐看。 最近更新不等号显示,注释不可编辑。背景图可是另外的插件设置的哈Background Image Plus +2、idea上 类调用时序图 SequenceDiagram for IntelliJ IDEA 推荐指数:☆☆☆推荐理...

2020-05-30 18:33:24 2125

转载 supervisor 学习笔记

1、Introduction(1) 基于python编写,安装方便(2) 进程管理工具,可以很方便的对用户定义的进程进行启动,关闭,重启,并且对意外关闭的进程进行重启 ,只需要简单的配置一下即可,且有web端,状态、日志查看清晰明了。(3) 组成部分supervisord [服务端,所以要通过这个来启动它]supervisorctl [客户端,可以来执行stop等命令](4) 官方文档地址:http://supervisord.org/2、安装python 第三方包的安装方法,此处不详

2020-05-25 23:09:12 320

原创 IDEA 查找某个 jar 包是如何被引入的

方法一1、定位对于jar包的groupId 和artifactId2、执行mvn命令dependency:tree -Dverbose -Dincludes=org.mybatis:mybatis3、分析结果方法二1导出整体的依赖图2搜索jar包比如(mybaits)3一层一层网上找出依赖...

2020-05-25 19:33:10 11617 1

转载 RabbitMQ基本原理

基本介绍MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订阅队列中的消息。RabbitMQ是MQ产品的典型代表,是一款基于AMQP协议可复用的企业消息系统。业务上,可以实现服务提供者和消费者之间的数据解耦,提供高可用性的消息传输机制,在实际生产中应用相当广泛。本文意在介绍Rabbitmq的基本原理,包括rabbitmq基本框架,概念,通信过程等。系统架构Ra

2020-05-24 11:15:33 119

原创 各种content-type情况下的请求报文结构以及后台取参方式

四种常见的 POST 提交数据方式我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样: 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定entity-body的数据必须使用什么编码方式,以及如何组织。实际上,开发者完全可以自己决定消息主体的格式,组织形式(是key-valu

2020-05-20 22:57:57 1431

转载 Linux curl 详解,各个参数按照重要程度依次介绍

简介curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具。不带有任何参数时,curl 就是发出 GET 请求。$ curl https://www.example.com上面命令向www.example.com发出 GET 请求,服务器返回的内容会在命令行输出。-X-X 参数指定 HTTP 请求的方法。..

2020-05-16 15:06:14 1229

转载 idea 远程调试 springboot项目

IDEA 远程调试,像运行本地代码一样调试远程主机上的程序,以排查远程程序的BUG或代码执行流程。作者:王克锋出处:https://kefeng.wang/2018/03/06/idea-remote-debug/版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。1 概述原理:本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信,传递调试指令和调试信息。被调试程序的远程虚拟机:作为 Debug 服务端,监听 Debug 调试指令。jdwp是Java Deb

2020-05-13 20:41:47 293

原创 spring 如何通过cglib 生成动态代理

目标理解spring中如何通过cglib的方式生成动态代理。 我们都知道,spring中存在两种动态代理的方式,第一个是jdk动态代理的方式,本质是通过反射实现,第二个是cglib的方式,这个是需要操作字节码实现。第一种方式虽然效率会更高,但是却存在硬伤,代理类必须是基于接口的。而方式二则没有这些限制。我们之前有一篇文章是分析jdk动态代理方式实现,这篇文章则重点是cglib方式如何实现动态代理...

2020-05-03 23:45:15 1059

原创 分布式事务的案例分析

通过一个对一个付费课程的支付过程进行分析,从而体验分布式事务的方方面面。1订单与选课需求分析1.1 订单支付流程学成在线的课程分为免费和收费两种。对于收费课程,用户需提交订单并完成支付方可在线学习。提交订单及支付流程如下:1、用户提交订单需要先登录系统2、提交订单,订单信息保存到订单数据库3、订单支付,调用微信支付接口完成支付4、完成支付,微信支付系统通知学成在线支付结果5、...

2020-05-03 15:49:39 876 2

原创 mac电脑的mysql修改密码

1、关闭mysql服务器sudo /usr/local/mysql/support-files/mysql.server stop 或者系统偏好里有个 MySQL 里关闭2、进入 /usr/local/mysql/bin 目录cd /usr/local/mysql/bin3、获取权限sudo su4、重启服务器./mysqld_safe --skip-grant-tables &am...

2020-05-02 17:55:44 296

原创 一张图让你读懂spring bean的生成过程

​​​​目的:不拘泥与具体某个方法,对spring bean的生成能有一个整体的把握。图片整体预览正文spring bean的生成主要分为两个阶段,第一个是bean Definition的生成,第二个是bean的生成。也就是本文的主要内容。对于spring实例初始一个bean,我们主要分析一下几点子类beanDefinition合并父类bean Definition的一些数据;...

2020-04-28 08:47:55 1536

原创 spring 循环依赖注入实现原理(源码分析)

结论只有单例模式下的循环依赖才可以,其他模式会报错。对循环依赖的简单介绍A依赖B、B依赖A 形成一个依赖环。spring的解决方案是,实例化A,之后将A封装到一个ObjectFactory对象中存储。对A进行属性填充的时候,发现有B需要实例化,则去实例化B,实例化B的时候也会将B封装到一个ObjectFactory对象中存储。B实例化完之后,会去填充B的属性,这是发现有A属性需要填充,这是不...

2020-04-28 08:09:01 1527

原创 tomcat如何处理请求 源码分析(二)(Container部分)

上下文tomcat源码分析共4个阶段1.从整体把握tomcat的架构2.分析springboot内嵌的tomcat是怎么启动的3.tomcat如何接受处理请求源码分析(一)(Connector部分)4.tomcat如何接受处理请求源码分析(二)(Container部分)本篇目标:本文主要分析tomcat的Container部分,已经封装好的HttpRequest。经过一层层Valve...

2020-04-23 21:33:32 351

原创 tomcat如何处理请求 源码分析(一)( Connector 部分)

tomcat源码分析共4个阶段1.从整体把握tomcat的架构2.分析springboot内嵌的tomcat是怎么启动的3.分析tomcat如何接受处理请求1(HttpServlet之前)4.分析tomcat如何接受处理请求2(HttpServlet处理)目标:本文主要分析一个来自浏览器的请求如何被tomcat接受,分析了从接收到socket至HttpServlet处理之间的各个方法调...

2020-04-22 22:50:24 517

原创 web 请求的前世今生(完善中)

优秀博客地址WEB请求处理一:浏览器请求发起处理WEB请求处理二:Nginx请求反向代理WEB请求处理三:Servlet容器请求处理

2020-04-19 20:13:23 124

转载 如何让自己像打王者荣耀一样发了疯、拼了命、石乐志的学习?

阶段性反馈机制(如何持之以恒、让自己发疯)反馈机制是王者荣耀的核心武器,击杀野怪获得金币,击杀敌人之后的画面、音效刺激大脑,不断地努力,获得奖励是我们不断的玩这个游戏的主要原因,也是人的本能,我什么都得不到凭什么这么做?对记得初二的时候,父亲说如果你能考全校第三我就给你买一台电脑,当时我从全校几十名考到了全校第二,而这只用了一个月的时间,还有,我希望给电脑换一个内存条,为什么?因为我希望电脑...

2020-04-19 19:59:11 864

原创 Spring 的 bean 注入方式小结(生成bean方式)

1、目的:阅读本文之后对于springboot中导入bean所有方式有一个整体的理解2、简单方式@Component@Controller@Service等3、复杂方式3.1@Import 方式package com.defire.other;public class ImportTest { public String primm(){ Syste...

2020-04-19 00:24:06 538

原创 Bean Definition 生成过程详解

1、目标:个人认为spring项目启动过程主要分为两步,一个是bean Definition的获取,一个通过bean Definition生成bean。但是由于过程十分复杂我们先分析第一步。2、bean Definition的种类分析第一类:框架编写过程中硬编码到容器中的,大概是6个;第二类:使用spring框架的程序员自己写的bean,比如被@component标注的对象;第三类:从classpath视实际情况而自动装载的一些bean。包括tomcat 相关的,http相关的等;

2020-04-18 23:26:00 2276 2

原创 SpringBoot的Bean Definition 生成过程(源码分析)

1、目的:从源码的角度分析整个springboot的启动流程、了解springboot项目在整个启动过程都干了一些什么。因为spring项目的启动主要是分为两步,一个是bean definition的获取,一个是根据bean definition 生成bean。本篇主要涉及2、demo项目结构的简单描述。基本的东西都是有的,包括dao,service、model、且包含myba...

2020-04-16 17:50:37 3341 2

原创 springboot 配置读取小结 @ConfigurationProperties  @Value  @PropertySource

1、阅读本文,你能知道@ConfigurationProperties @Value@PropertySource 三者的使用2、先给出结论:@ConfigurationProperties 适用于注入配置文件内容对应一个bean的全部属性,@Value正如其名称一样,适合注入配置文件的单个值到bean中,@PropertySource则是指定属性来源于哪个配置文件,前面的两个...

2020-04-11 16:53:21 453

原创 权限修饰符 default

通过下面表格回顾下几种修饰符的可见范围。default我们后面会说。权限 类内 同包 不同包子类 不同包非子类 private √ × × × 空 √ √ × × protected √ √ √ × public √ √ √ ...

2020-04-09 21:11:38 2810

原创 ^M问题的原因与解决

本文主要内容:1、为啥文件会出现^M ,2、如何解决^M带来的问题。1、为啥文件会出现^M^M是windos的dos格式特有的文件换行符,在linux上你可以通过 cat -A文件名 看到这些隐藏字符。当您的文件是dos格式时,就会出现这个^M.所以一些shell脚本执行就会出现莫名其妙的问题。2 解决方法:如果需要转换,我们只需要转换文件格式即可...

2020-04-07 14:31:15 55142 3

原创 Spring Aop JDK动态代理实现原理分析(源码)

1、spring 的aop作用spring 的aop的动态代理都是为了给实现了接口的类做增强(必须是实现了接口),比如增加日志的功能。2、本文对你的收获:我们从这个文章中应该能知道生成的代理对象是什么样的;同时就能知道代理对象对象方法执行流程,首先我们看下代理后的对象张什么样,其中ConfigInterface是我们需要代理的对象。//// Source code rec...

2020-04-06 21:10:21 1573

原创 spring中的各种processor (BeanPostProcessor)

这些后置处理器其实都是一些独立的功能,从BeanFactory抽离出来。比如有专门处理注解的,有专门负责aop的等。接下来我们会以表格的形式,描述这些后置处理器什么情况会加载进容器,什么时候调用,作用都是什么。并且从原码的角度稍作分析。所有的BeanPostProcessor的调用时机都是bean 实例化完成,尚未初始化时(注意区分实例化和初始化)关键代码:exposedObject =...

2020-04-04 22:35:01 2497

词法分析器 -(计算器版)

词法分析器 -(计算器版)

2017-03-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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