自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 一周Java架构课程回顾,距高级架构师又近一步

CSDN学院的Java架构直播课是业内技术大牛,行业及实战经验丰富的讲师进行当前互联网java架构,java高级热门技术分享的课程。其中涵盖redis,mongodb,dubbo,zookeeper,kafka 高并发、高可用、分布式、微服务技术。需要学习Java架构技术的同学们每晚20:00打开上课地址:https://edu.csdn.net/huiyiCourse/detail/1261就可以上课了~错过直播的同学不用难过,我们这就来总结回顾一下上周的课程内容↓↓↓2021-01-05

2021-01-13 16:42:47 29

原创 Java架构师成长路线总结2021版(持续更新)

嗨,又是新的一年,每一年都会有人在成为架构师的路上或者已经成为自己心中理想的架构师,但更多的人是在程序员的这条路上缓慢成长甚至迷茫。然后会有一部分人中途放弃而后转行,有一部分人最后停滞在了那个“舒服”的状态,最终成为架构师的人少之又少。在高薪行业这个背景的庇护下,程序员不用成为架构师就可以拥有比较舒适的生活条件,所以在“成为架构师”的这个愿景下,程序员群体并没有展现出很高的热情。经常会有很多人说:“不是谁都可以成为架构师的”“我们公司用的就是那点东西,不需要会太多”“技术够用就行了”…其实他们

2020-12-30 16:49:07 3791 11

原创 spring源码分析11

refresh包括applicationContext的所有功能刷新上下文环境初始化beanFactory,对xml文件进行读取对beanFactory进行各种功能填充子类覆盖方法做额外处理激活各种bean的处理器注册拦截bean的处理器为上下文初始化message源初始化应用消息广播器留给子类初始化其他的bean注册bean中找到listener bean,注册到消息广播器中初始化剩下单实例完成刷新过程,通知生命周期处理器lifecycleProcesso.

2021-01-21 13:39:15 34 2

原创 spring源码分析10

初始化bean应用后处理器激活用户自定义的init方法激活aware方法处理器的应用注册disposableBean原文链接:https://gper.club/articles/7e7e7f7ff3g5agcd

2021-01-20 17:54:05 15

原创 spring源码分析9

属性注入根据名称自动注入根据类型注入寻找类型匹配的逻辑获取属性原文链接:https://gper.club/articles/7e7e7f7ff3g5agc2

2021-01-19 17:47:53 19

原创 spring源码分析8

创建bean制定bean使用对应的策略创建新的实例bean的注入调用实例化的方法根据scope注册bean使用工厂初始化策略构造函数自动注入使用默认构造函数根据参数解析构造函数构造函数自动注入使用默认构造函数构造实例化策略原文链接:https://gper.club/articles/7e7e7f7ff3g5agc7...

2021-01-19 17:23:31 13

原创 spring源码分析7

获取单例bean原文链接:https://gper.club/articles/7e7e7f7ff3g5agc4

2021-01-19 16:03:27 11

原创 spring源码分析6

提取自定义标签处理器标签解析自定义标签,自定义处理bean的加载下会分解bean的解析原文链接:https://gper.club/articles/7e7e7f7ff3g5bgc1

2021-01-19 15:21:34 13

原创 spring源码分析5

对alias的标签解析import标签的解析自定义标签的解析原文链接:https://gper.club/articles/7e7e7f7ff3g5bgc0

2021-01-13 17:36:37 19

原创 spring源码4

注册解析beanDefition通过beanName注册beanDefition通过别名注册beanDefinitionalias标签的稍后对alias的解析原文链接:https://gper.club/articles/7e7e7f7ff3g5bgc5

2021-01-13 16:48:24 17

原创 spring源码分析3

解析bean标签对import,alias,bean,beans的标签处理对bean标签的解析和注册解析bean的子元素默认对于其他标签的解析创建一个属性承载beanDefintion创建了各种bean实例,便可以对bean信息进行解析解析子元素meta解析子元素lookup-method解析子元素replaced-method解析子元素constructor-arg解析ele元素对子元素的处理解析子元素qua’lifier解析默认

2021-01-12 16:41:39 22

原创 Spring源码分析2

XmlValidationModeDetector类中开启验证方法:获取document经过了验证模式,就可以用读取文档是用EntityReslover的用法解析和注册BeanDefitionbean的注册搞完了原文链接:https://gper.club/articles/7e7e7f7ff3g58gc1...

2021-01-12 16:03:33 12

原创 spring源码分析1

1,学习spring源码笔记下面是各个类的作用容器的基础是xmlBeanFactoryXmlBeanFactory bf = new XmlBeanFactory (new ClassPathResource(“beanFactoryTest.xml”))classPathResource是一个资源统一解析器@Override public InputStream getInputStream() throws IOException { InputStream is; if

2021-01-12 14:57:45 65

原创 Spring注解驱动

1.1. Spring基础注解1.1.1. @ConfigurationSpring配置Bean有多种形式,一种是XML方式,一种是@Configuration注解的方式,表示是一个配置类(同XML功能相同),作为Bean的载体。package org.springframework.context.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import ja

2021-01-06 16:46:23 44

原创 设计模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大

2021-01-06 15:06:34 53

原创 Executor并发框架

介绍随着当今处理器中可用的核心数量的增加, 随着对实现更高吞吐量的需求的不断增长,多线程 API 变得非常流行。 Java 提供了自己的多线程框架,称为 Executor 框架.1. Executor 框架是什么?Executor 框架包含一组用于有效管理工作线程的组件。Executor API 通过 Executors 将任务的执行与要执行的实际任务解耦。 这是 生产者-消费者 模式的一种实现。java.util.concurrent.Executors 提供了用于创建工作线程的线程池的工厂方法。

2021-01-06 14:23:21 42

原创 Spring 注解编程IOC

Bean 注册注册Bean的常用注解有@Component、@Service、@Controller、@Repository,通过扫描包的方式对这些注解进行解析注册Bean。注解ApplicationContext:AnnotationConfigApplicationContext常用注解@Configuration声明Bean Difinition的配置文件,相当于一个xml文件@Bean声明Bean的组件@Configurationpublic class CustomConfig

2021-01-05 17:51:28 75

原创 并发挑战(三)

资源限制挑战资源限制资源限制是说,在进行并发编程时,理论上可以达到理想的状态,但是犹豫硬件和软件的一些配置问题,达不到理想状态。比如说:服务器带宽2Mb/s,某个资源下载速度为1Mb/s,系统同时启动10个并行任务,下载速度不会达到10Mb/s,所以在进行并发编程时,需要考虑这些资源限制问题。如:硬件带宽的上传和下载速度、硬盘读写速度以及CPU的处理速度,软件方面比如说数据库的连接数和socket的连接数等。资源限制引发的问题在并发编程中,将代码执行速度加快的原则是:把原本串行的任务变为并行执行,但

2021-01-05 17:41:03 30

原创 并发挑战(二)

死锁锁是一个很有用的工具,运用的场景也多,使用也简单,但是,锁使用不当也会出现一系列维妮塔,比如说:死锁,一旦产生死锁,会造成系统功能无法使用。例如:public class DeadLockDemo { private static String A = "A"; private static String B = "B"; private void deadLock(){ Thread t1 = new Thread(()->{

2021-01-05 17:00:30 52 3

原创 并发挑战(一)

并发的目的并发编程的目的是为了让程序运行的更快一点,但是,并不是启动更多的线程就可以让程序执行的效率更高,运行更快。进行并发编程时,如果希望通过多线程执行让程序变得更快,会面临非常大的挑战,如:上下文切换、死锁以及受限制于阴间和软件的资源限制等问题。上下文切换单核处理器也支持多线程去执行代码,CPU是通过给每个程序分配时间片来实现并行机制。时间片是CPU分配给各个线程的时间。时间片非常短,CPU通过不断切换线程执行,让我们感觉上是并发执行。CPU通过时间片分配算法来循环执行任务,当前时间片执行完成之

2021-01-05 16:00:55 55

原创 高并发服务发现原理

在一个超大型的系统中,有100K个Client,也就是10万个服务,这么多个服务定时向Eureka注册中心请求发现服务时,应该怎样处理?首先,我们可以让多个Eureka相互注册构成集群,多个服务向集群内的不同Eureka定时请求发现服务,不同的Eureka之间会相互同步服务地址数据。Eureka的部署方式如下图所示:一、 Eureka单点二、 两台Eureka相互注册三、 三台Eureka相互注册通过上面的图示我们可以发现,随着集群内Eureka数量的增多,E

2021-01-05 15:05:24 44

原创 并发编程之多线程

进程和线程的区别进程是线程的集合,每一个线程是进程中的一条执行路径什么是多线程?为什么要使用多线程?多线程:同一个进程中同一时间执行多于一个线程多线程能够提高程序效率例如:迅雷多线程下载,数据库连接池多线程的创建方式1. 继承Thread类重新run方法 class CreateThread extends Thread { // run方法中编写 多线程需要执行的代码 public void run() { for (inti = 0; i< 10; i+

2021-01-04 17:32:57 38

原创 如何优雅的结束一个线程!

停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。在java中有以下3种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。使用interrupt方法中断线程。1、停止不了

2020-12-31 16:20:45 52

原创 线程的基础回顾

1.死锁/活锁(线程没有出现阻塞,一直处于等待的状态)死锁:一组互相竞争的资源的线程之间互相等待,导致永久阻塞现象。活锁:线程没有出现阻塞,一直处于等待的状态.2.死锁满足的条件这四个条件同时满足,就会产生死锁。互斥,共享资源X和Y只能被一个线程占用。占有且等待,线程T1已经取得共享资源X,在等待共享资源Y的时候,不释放共享资源X不可抢占,其他线程不能强行抢占线程T1占有的资源。循环等待,线程T1等待线程T2占有的资源,线程T2等待线程T1占有的资源,就是循环等待。、死

2020-12-31 14:42:55 38

原创 线程池自引发死锁

线程池自引发死锁死锁是由许多线程锁定相同资源引起的如果在该池中运行的任务内使用线程池,也会发生死锁像RxJava / Reactor这样的现代图书馆也很容易受到影响死锁是两个或多个线程正在等待彼此获取的资源的情况。例如,线程A等待lock1线程B锁定,而线程B等待lock2,由线程A锁定。在最坏的情况下,应用程序冻结无限期的时间。让我向您展示一个具体的例子。想象一下,有一个Lumberjack类可以保存对两个附件锁的引用:import com.google.common.colle

2020-12-30 17:39:22 75

原创 Java并发编程基础篇(一)之线程

前言并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最 大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会 面临非常多的挑战,比如上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题。这一块内容也是面试核心考点之一,所以博主将以线程为起点,从0到1一起与小伙伴们走去Java并发编程之路上走一遭!正文进程?线程?傻傻分不清?何谓进程进程通常是程序、应用的同义词。进程的本质是一个正在执行的程序,程序运行时系统会创建一个进程,并且给每

2020-12-29 16:56:26 125

原创 Spring IoC 源码分析 (基于注解) (二) 之 包扫描

在上篇文章Spring IoC 源码分析 (基于注解) 一我们分析到,我们通过AnnotationConfigApplicationContext类传入一个包路径启动Spring之后,会首先初始化包扫描的过滤规则。那我们今天就来看下包扫描的具体过程。还是先看下面的代码:AnnotationConfigApplicationContext类//该构造函数会自动扫描以给定的包及其子包下的所有类,并自动识别所有的Spring Bean,将其注册到容器中 public AnnotationConfigApp

2020-12-29 11:27:33 6

原创 Spring IoC 源码分析 (基于注解) 一

一、 IoC 理论IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。二、IoC方式Spring为IoC提供了2种方式,一种是基于xml,另一种是基于注解。标签来定义bean,进行管理。@Bean注解来定义bean,进行管理。本次文章我们就来分析下基于注解的IoC原理,在看文章之前我们可以带一些疑问,这样有助于我们更好的理解。@Bean是干什么用的?@Controller、@Se

2020-12-29 10:53:26 22

原创 设计模式(十四):模板模式

模式动机​ 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模式定义​ 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。模式结构模板模式包含如下角色:抽象模板(Abstract Template),具体模板(Concrete Template)。代码示例创建一个抽象类,

2020-12-28 17:25:45 27

原创 设计模式(十三):策略模式

模式动机完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务。在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。在软件系统中,有许多算法可以实现某一功能,如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法

2020-12-28 16:41:20 21

原创 设计模式(十二):命令模式

模式动机​ 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。​ 命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机。模式定义​ 命令模式(Command Pattern):将一个请求

2020-12-28 16:09:09 16

原创 设计模式(十一):代理模式

模式动机​ 在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。​ 通过引入一个新的对象(如小图片和远程代理 对象)来实现对真实对象的操作或者将新的对 象作为真实对象的一个替身,这种实现机制即 为代理模式,通过引入代理对象来间接访问一 个对象,这就是代理模式的模式动机。模式定义​ 代理模式(Proxy Patter

2020-12-28 15:36:25 20

原创 设计模式(十):享元模式

模式动机​ 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。享元模式正是为解决这一类问题而诞生的。享元模式通过共享技术实现相同或相似对象的重用。在享元模式中可以共享的相同内容称为内部状态(IntrinsicState),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同的对象可以具有一些不

2020-12-28 14:50:01 19

原创 设计模式(九):外观模式

模式动机​ 设想一下在学校,你进宿舍的时候要用门禁卡,进入图书馆的时候要使用图书馆的卡,吃饭的时候要使用饭卡;一天你就要背着各种卡到处跑,尽管这些都不是很重,但是每次还有进行筛选之后才适用于不同的场景,会不会很累?考虑到这样一点,很多学校就将3卡合一,这样就非常方便了。在软件系统设计中,也存在这样的问题是否可以通过一个门面,进行统一的访问呢?今天我们来讲解外观模式,其目的就是解决多套子系统之间的统一访问问题。、模式定义外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外

2020-12-27 17:38:53 40

原创 设计模式(八):装饰模式

模式动机一般有两种方式可以实现给一个类或对象增加行为:继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不

2020-12-27 15:48:59 27

原创 设计模式(七):桥接模式

模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。第二种设计方案是根据实际需要对形状和颜色进行组合对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。模式定义桥接模式:

2020-12-27 14:58:34 19

原创 设计模式(六):适配器模式

模式动机在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。在适配器模式中可以定义一个包装类,包装不兼容接口的对

2020-12-27 14:14:11 31

原创 设计模式(五):单例模式

模式动机Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例。 单例模式有以下特点:​ 1、单例类只能有一个实例。​ 2、单例类必须自己创建自己的唯一实例。​ 3、单例类必须给所有其他对象提供这一实例。​ 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。懒汉式单例//懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {

2020-12-25 16:59:51 36

原创 设计模式(四):建造者模式

模式动机在现实生活中,有很多复杂的对象,拥有很多的组件,例如手机,有显示屏、CPU等;我们使用的时候是一起使用的,但是我们基本上不知道这些部件的实现细节,这时我们可以通过建造者模式对其进行设计和描述,建造者哦是将部件和其组装过程分开,一步一步创建一个复杂的对象,用户只需要指定复杂的类型就可以得到该对象,而无须知道其内部的具体构造细节。​ 在软件开发中,也存在大量类似汽车一样的复杂对象,它们拥有一系列成员属性,这些成员属性中有些是引用类型的成员对象。而且在这些复杂对象中,还可能存在一些限制条件,如某些属性

2020-12-25 15:24:39 35

原创 设计模式(三):抽象工厂模式

模式动机​ 在工厂方法模式中,每一个产品对应于每一个具体的工厂方法。但是一般的情况下,我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。产品等级结构:产品等级结构业绩回升产品的继承结构,例如一个抽象类是数据库,数据库有MySQL、Oracle等。产品族:在抽象工厂模式中,产品族着的是同一个工厂生产的,位于不同产品等级结构的一组产品,例如Oracle公司有Oracle数据库、Java语言等。​ 如果系统所提供的工厂所需生产的具体产品ing不是一个简单的对象,而是多个位于不同产品等级结构中属于

2020-12-24 16:22:20 39

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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