- 博客(307)
- 收藏
- 关注
转载 请别再问Spring Bean的生命周期了!
Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。只有四个!是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。...
2020-03-05 19:16:52
360
转载 阿里dubbo服务注册原理解析
1、spring如何加载生成dubbo对象下面是一段provider的xml配置<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns="http://www.spr...
2020-03-05 14:38:39
895
1
转载 Spring Boot————自动配置原理
Spring Boot的出现,得益于“习惯优于配置”的理念,没有繁琐的配置、没有难以集成的内容(大多数流行第三方技术都被集成),这是基于Spring 4.x提供的按条件配置Bean的能力。Spring Boot的配置文件 初识Spring Boot时我们就知道,Spring Boot有一个全局配置文件:application.properties或application....
2020-02-27 13:57:28
447
原创 redis实战
分布式锁的实现 关于锁,其实我们或多或少都有接触过一些,比如synchronized、 Lock这些,这类锁的目的很简单,在多线程环 境下,对共享资源的访问造成的线程安全问题,通过锁的机制来实现资源访问互斥。那么什么是分布式锁呢?或者 为什么我们需要通过Redis来构建分布式锁,其实最根本原因就是Score(范围),因为在分布式架构中,所有的应 用都是进程隔离的,在多进程访问共享资源的...
2020-02-26 14:16:48
334
原创 Redis原理分析与应用
过期删除的原理Redis 中的主键失效是如何实现的,即失效的主键是如何删除的?实际上,Redis 删除失效主键的方法主要有两 种: 消极方法:在主键被访问时如果发现它已经失效,那么就删除它 积极方法:周期性地从设置了失效时间的主键中选择一部分失效的主键删除对于那些从未被查询的key,即便它们已经过期,被动方式也无法清除。因此Redis会周期性地随机测试一些key, ...
2020-02-26 11:41:44
392
原创 Redis的基础数据结构
1、分布式缓存技术的应用缓存 : 就是低速的IO与高速的应用之间的问题缓冲组件放到数据库和应用之间,使用缓存的方式:1、把数据写入数据库之后,然后把相应的数据写入缓存2、先去查询数据库里的数据 然后把相应的数据写入缓存3、定时刷新,定时任务的调度可以周期性的把相应数据做一个同步2、redis的存储结构 大家一定对字典类型的数据结构非常熟悉,比如map...
2020-02-25 17:25:06
316
原创 分布式消息通信kafka
Kafka 的简介什么是 Kafka Kafka 是一款分布式消息发布和订阅系统,具有高性能、高吞吐量的特点而被 广泛应用与大数据传输场景。它是由 LinkedIn 公司开发,使用 Scala 语言编 写,之后成为 Apache 基金会的一个顶级项目。kafka 提供了类似 JMS 的特 性,但是在设计和实现上是完全不同的,而且他也不是 JMS 规范的实现。kafka 产生的...
2020-02-24 22:31:14
310
原创 ActiveMQ原理分析
持久化消息和非持久化消息的发送策略消息同步发送和异步发送 ActiveMQ支持同步、异步两种发送模式将消息发送到broker上。同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经被broker处理。这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客户端消息发送的性能。 异步发送的过程中,发送者不需要等待bro...
2020-02-19 21:45:29
780
原创 java日期时间使用规范
日期时间Locale在计算机中,通常使用Locale表示一个国家或地区的日期、时间、数字、货币等格式。Locale由语言_国家的字母缩写构成,例如,zh_CN表示中文+中国, en_US表示英文+美国。语言使用小写,国家使用大写。对于日期来说,不同的Locale,例如,中国和美国的表示方式如下:zh_CN:2016-11-30 en_US:11/30/2016计算机用...
2020-02-17 16:27:54
414
原创 分布式消息通信ActiveMQ
消息中间件的初步认识 什么是消息中间件? 消息中间件是利用高效可靠的消息传递机制进行平台无 关的数据交流,并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型,可以在分布式架构下 扩展进程之间的通信。 消息中间件能做什么? 消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序...
2020-02-12 11:42:01
357
原创 SPI机制
javaSPI机制一、什么是SPI SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下:Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 系统设计的各个抽象,往往有很多不同的实现方案,在面向的对象的设...
2020-02-07 17:16:08
243
原创 dubbo 常用配置
1、多版本支持 多版本支持 veresion1.0 , version1.0.1可以做版本隔离,Server端配置Client 端配置zk注册中心的服务节点:2、主机绑定[dubbo://192.168.2.105:20880%2Fcom.gupao.edu.dubbo.IGpHello%3Fanyhost%3Dtrue%26applicatio...
2020-02-06 09:54:53
240
原创 初识dubbo
1. 为什么需要 Dubbo地址维护 (对调用方透明) 负载均衡 (拿到相关地址,调用负载均衡算法完成一些负载的调度) 限流/容错/降级 (当服务链比较庞大的时候梳理各个节点的调用关系和先后关系,监控接口能够提供的访问量) 监控2. Dubbo 的架构3. Dubbo 的使用4. Dubbo 注册中心原理5. 如何快速启动 Dubbo 服务6. 多协议支持7. 多注册...
2020-02-04 22:22:10
152
原创 MyBatis
1、认识MyBatis Mybatis is a first class persistence framework with support for custom SQL,stored Procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting...
2020-02-03 22:39:25
282
原创 zookeeper 实践
一、数据存储 事务日志,快照日志,运行时日志 bin/zookeeper.out二、基于 Java API 初探 zookeeper 的使用1、建立连接的过程 public static void main(String[] args) { try { final CountDownLatch countDownLatch = new...
2020-02-02 18:14:11
156
转载 Java自定义注解实现过程
步骤1、创建自定义注解类,并添加校验规则2、解析自定义注解类并实现校验方法3、创建测试类并声明自定义注解4、编写Junit测试类测试结果自定义注解类package com.swk.common.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;i...
2020-01-20 17:37:30
195
原创 微服务架构之技术选型及架构设计
微服务架构之技术选型及架构设计学习目标:能够进行微服务的技术选型 能够搭建开发具备服务注册发现、客户负载均衡、服务间通信的微服务架构 熟练使用SpringCloud Eurek、SpringCloud Ribbon、restTemplate 等组件开发完成 掌握SpringCloud Eureka、SpringCloud Ribbon、restTemplate的基本原理 进行微服务...
2020-01-16 17:09:49
922
原创 Spring中编程思想总结
AOP:面向切面编程 动态代理只是AOP的一种技术实现手段,AOP 是一种编程思想,Aspect切面:由某几个本来不相干的东西,组到一块去形成已给到新的产品,切面最关键的就是解耦。 切面不仅仅有增强功能,还有解耦功能,指定规则的功能。例如:expretion:切面表达式com.csdn.*.service.** 就是指定一个规则,与其说是面向切面编程,还不如说是面向规...
2020-01-15 11:36:07
354
原创 观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象 都得到通知并被自动更新。 Spring 中 Observer 模式常用的地方是 Listener 的实现。如 ApplicationListener。归类 特点 穷举 行为模式 一般由两个对象组成:发布者和订阅者(观察者)。 观察者通常有一个回调...
2020-01-14 16:23:27
149
原创 装饰器模式
Decorator 装饰者模式,又叫包装器模式。为了某个实现类在不修改原始类的基础上,进行动态的覆盖或者增加方法该实现保持跟原有类的层级关系,装饰模式,实际是一种非常特殊的适配器模式。应用场景:如java 中IO流的包装 //虽然DataInputStream 功能更加强大 //DataInputStream同样实现InputStream...
2020-01-13 16:51:12
135
原创 适配器模式
适配器模式的主要目的就是为了兼容,即不改变原来的代码,也能兼容新的需求。 老系统运行了很久比较稳定,为了保持其稳定性,不便再去修改原来的代码,但是又要为了兼容新的需求 或标准,我们不得不去系统再做些文章。(向下兼容)使用场景:登录 用户名、密码 验证用户名密码的有效性---》把登录结果保存到session中,--->写入到浏览器cookie 随...
2020-01-13 11:36:00
176
原创 委派模式
委派模式不属于23种设计模式之一,是面向对象设计模式中常用的一种模式,这种模式的原理为类B 和 类A是两个相互没有任何关系的类,B具有和A 一模一样的方法和属性,B好像就是一个受A 授权委托的一个中介。第三方代码不需要知道A 的存在,也不需要和A 发生直接的联系,通过B 就可以直接使用A 的功能,这样既能够使用到A 的各种功能,又能很好的将A 保护起来了,一举两得。归类 特...
2020-01-10 10:56:28
143
原创 模板模式
模板模式通常又叫模板方法模式(Template Method) 举例:饮料的制作步骤1、加原料 2、烧水 3、加工 4、混合 策略模式的特点:主流程不能打断,具体实现可修改 策略模式的典型应用:JDBCTemplatepublic class JdbcTemplate { private DataSource dataSource; publi...
2020-01-09 11:30:18
196
原创 API 设计哲学——封装
引言 面向对象的编程语言有四大特性:抽象、封装、继承、多态,这些都是我们学习 Java 语言的基石,你我早已将这些理论知识熟记于心,熟悉得甚至不需要经过大脑思考和反射:新建一个类,private 修饰属性,用 IDE 或者 lombok 自动生成属性的 public getter/setter,这些都是在几秒内一气呵成,完美! 如果你认为,private + ge...
2020-01-08 15:30:45
197
原创 策略模式
策略模式简介: 策略模式定义算法,分别封装起来,让他们可以相互替换,此模式的目的是让算法的变化独立于使用方法的用户。(比如:支付接口的选择(支付宝,京东白条,微信支付,银联卡....)),策略模式关心的是我们如何去选择,最终的结果都是一样的 策略模式的应用:1、比较器比较算法的定义 2、支付接口的调用 3、爬虫爬不同网站时使用不同策略但最后都返回相同格式的json...
2020-01-06 21:53:04
136
原创 代理模式
代理模式介绍 代理模式中有代理角色和被代理角色(目标对象)。由被代理角色,来做关键事情。代理角色通常来说会持有被代理角色的对象引用(以便于代理角色完成工作之前,或者之后能找到被代理对象 ) 应用场景:为其他对象提供一种代理以控制对这个对象的访问。从结构上来看和 Decorator 模式类似, 但 Proxy 是控制,更像是一种对功能的限制,而 Decorator...
2020-01-05 21:53:43
158
原创 原型模式
原型类:DTO、VO、POJO、Entity 数据库表中查询出来的对象会赋值给DTO,把DTO中的值赋值给VO再把VO 中的值传到view中去,会经过一个复制(要把DTO 中的么一个属性的值都赋值给VO中的每一个属性的值属性名称相同,属性类型相同)的过程。 Apache的BeanUtils会提供一个复制功能,是使用反射去实现的(就是原型模式的实现) Java推荐cl...
2020-01-04 18:08:51
111
原创 单例模式
概念 单例模式是一个类模板,在整个系统运行过程中,有且只有一个实例,且只能New一个。保证单例的技术方案1、饿汉式 在使用单列之前就产生了,不管你用不用都先new 出来,避免线程安全。(用的少,不存在线程安全问题)public class Hungry { //私有构造方法 private Hungry(){} //代码执行顺序 ...
2019-12-26 22:19:16
150
原创 工厂模式
工厂模式的意义:让对象的创建变得简单,用户只需要把需求给到工厂,工厂就能创建一个对象。简化对象的创建过程。 修改对象很方便,只要修改工厂中的创建方式即可,而调用者完全不用修改。工厂demopackage factoryPattern;public interface Milk { /** * 获取一个标准产...
2019-12-18 22:26:36
115
转载 java能不能自己写一个类叫java.lang.System/String正确答案
最近学习了下java类加载相关的知识。然后看到网上有一道面试题是能不能自己写个类叫java.lang.System? 网上提供的答案:通常不可以,但可以采取另类方法达到这个需求。所谓的另类方法指自己写个类加载器来加载java.lang.System达到目的。 首先表明下我的观点。上述答案完全是误导读者,是不正确的答案。我就纳闷了网上怎么把这种完全不正确的搜索结果排在...
2019-12-11 21:11:07
144
转载 两道面试题,带你解析Java类加载机制
在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} class Father extends Grandpa{ static { System.out.prin...
2019-12-11 20:40:21
133
原创 JVM 垃圾回收
JVM 常见参数:新生代常用参数:-Xms 20M starting 表示堆的起始大小 -Xmx max 表示堆的最大大小-Xmn new 表示堆的新生代大小-XX:SurvivorRatio = 8 新生带大小 8 : 1 :1jmap -heap pid 查看当前jvm 进程占用大小对象空间分...
2019-12-02 11:38:39
158
原创 jvm 介绍
part1:什么是JVM ?write once : 表示 写一次就生成一个Jar 包 ,run everywhere :将该jar包通过不同平台的jvm 都可以运行。Jvm : 1、软件层面的机器码翻译2、内存管理(能够让你专注于你只要写你的业务代码,使用对象时,你只需要new 一个不用关心他是怎么生成的,如何去回收的)为什么要学习jvm 若不了解...
2019-11-29 10:43:17
198
原创 事务、锁、MVCC
事务什么是事务?事务的ACID 特性事务并发带来的问题:脏读: 事务A 读到了事务B 未提交的数据不可重复读:在一个事务中两次读取的结果内容不同幻读:一个事务中两次读取的数据行数不同事务的四种隔离级别innoDB 引擎对隔离级别的支持程度锁理解表锁与行锁另类的行锁是指:当所有行都加上锁了,就变成了表锁MysqlInno...
2019-11-28 14:43:10
248
原创 存储引擎、mysql体系结构、mysql查询机制
Mysql插拔式的存储引擎 存储引擎的介绍:1、插拔式的插件方式 2、存储引擎是指定在表之上的,即一个库存中的每一个表都可以指定专用的存储引擎。 3、不管采用什么样的存储引擎,都会在数据区 ,产生对应的frm文件(表结构定义描述文件) cvs...
2019-11-25 16:51:27
338
原创 索引
Mysql的索引是由存储引擎实现的,整个数据库查询优化的基石就是索引机制。正确创建合适的索引是提升数据库查询性能的基础。索引定义与概念 索引是什么? 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。基于硬盘的数据结构。磁盘的地址代表数据存储的位置。为什么要用索引?索引能够极大的减少 存储引擎需要扫描的数据量。 索引能够把随机IO变成顺...
2019-11-19 16:17:14
357
转载 HashMap与ConcurrentHashMap
前言Map 这样的Key Value在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于数组 + 链表组成的,不过在 jdk1.7 和 1.8 中具...
2019-11-17 17:35:25
206
原创 死锁
死锁的定义 两个或两个以上的进程因竞争资源,而处于互相等待的状态,如果没有外力作用,他们都将无法推进下去。典型例子就是哲学家进餐问题。 举个例子 上面的内容可能有些抽象,因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。如下图所示:我们用一段代码来模拟上述过程...
2019-11-14 15:12:43
313
转载 Java 多线程事务回滚 ——多线程插入数据库时事务控制(转载)
背景 日常项目中,经常会出现一个场景,同时批量插入数据库数据,由于逻辑复杂或者其它原因,我们无法使用sql进行批量插入。串行效率低,耗时长,为了提高效率,这个时候我们首先想到多线程并发插入,但是如何控制事务呢 … 直接上干货实现效果 开启多条子线程,并发插入数据库 当其中一条线程出现异常,或者处理结果为非预期结果,则全部线程均回滚 代码实现@Se...
2019-11-07 16:05:40
6057
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人