2 今天又学java了

尚未进行身份认证

我要认证

好难

等级
TA的排名 3w+

状态模式

1. 概念对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为看不懂没关系,看个例子就明白了2. 一个例子进程有就绪,运行,停止三个状态(简单起见只说这三个),其状态可以不断从一种转换到另一种,模拟这种情况2.1 不用设计模式对于上面的问题,最容易想到的就是在进程类中维护一个状态变量,通过改变这个变量改变状态,并通过对状态变量的判断,执行相对应状态下的操作class Process{ public static final int RE

2020-06-07 11:30:52

Spring - 钩子方法

1. 概述Spring有很强的扩展性,主要体现在它为外界提供了许多钩子方法, 比如Aware、BeanPostProcessor、InitializingBean、init-method 等都是 Spring 提供的扩展点2. Aware 接口spring源码:Aware接口若 Spring 检测到 bean 实现了 Aware 接口,则会为其注入相应的依赖。所以通过让bean 实现 Aware 接口,则能在 bean 中获得相应的 Spring 容器资源。Spring 中提供的 Aware 接口

2020-05-21 17:01:51

Class.getResource 和 ClassLoader.getResource获取资源文件

关于获取资源文件,Class.getResource 和 ClassLoader.getResource 的区别彻底搞懂Class.getResource和ClassLoader.getResource的区别和底层原理1. ClassLoader.getResource有两种方法获取当前的ClassLoaderClassLoader classLoader = this.getClass().getClassLoader();ClassLoader contextClassLoader = Thr

2020-05-20 10:06:20

JVM - 执行引擎

1. 概述虚拟机是一个相对物理机的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是建立在处理器,缓存,指令集和操作系统层面上的,而虚拟机执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集和执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式JVM的主要任务是负责装载字节码到期内部,但是字节码并不能直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅是一些能够被JVM所识别的字节码指令,符号表,以及其他辅助信息为了让一个Java程序跑起来,执

2020-05-18 13:10:46

JVM - 类文件结构

1. 平台无关性将编写的程序直接编译成二进制的本地机器码(native code)已经不再是唯一的选择了,越来越多的程序语言选择了与操作系统和机器指令集无关的,平台中立的格式作为程序编译后的存储格式与平台无关的理想最终实现在操作系统的应用层上,Sun公司和其他虚拟机提供商发布了可以运行在各个不同平台上的虚拟机,这些虚拟机可以载入和执行同一种平台无关的字节码,从而实现一次编写,处处运行2. Class类文件的结构Class文件对应着唯一一个类或者接口的定义信息,Class文件是一组以8位字节位基础单位

2020-05-14 20:38:11

JVM - 垃圾收集器与内存分配策略

1. 概述在JVM的运行时数据区中,程序计数器,本地方法栈,虚拟机栈都是线程私有的,随线程生而生,随线程灭而灭,他们的内存分配和回收都具有确定性,但是堆和方法区则不同,一个接口的多个实现类需要的内存可能不一样,一个方法中多个分支所需要的内存可能也不一样,这部分的内存的分配和回收都是动态的,垃圾收集器所关注的就是这部分内存2. 判断垃圾垃圾指的是不可能再被使用的对象,主要有两种方法判断哪个对象成为了垃圾(死亡),一个是引用计数法,另一个是可达分析2.1 引用计数法引用计数法是为每个对象分配一个引用计

2020-05-14 12:15:01

命令模式

命令模式1. 背景在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命令模式能很好地解决这个问题。在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者),还有计算机键盘上的“功能键”等2. 定义与特点命令(Command)模式的定义如下:将一个请求封装为一个对象,使

2020-05-13 18:10:22

MyBatis 使用的设计模式

MyBatis 使用了哪些设计模式?在源码中是如何体现的?1. Mybatis的使用流程// 1. 读取配置文件InputStream is = Resources.getResourceAsStream("mybatis-config.xml");// 2. 创建 SqlSessionFactory 工厂SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = bu

2020-05-11 11:35:43

JDK Proxy 和 CGLib实现动态代理

1. 概述无论是日志框架或 Spring 框架,它们都包含了动态代理的实现代码。动态代理是程序在运行期间动态构建代理对象和动态调用代理方法的一种机制动态代理的常用实现方式是反射。反射机制是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象,以及类对象中包含的属性及方法。动态代理不止有反射一种实现方式,例如,动态代理可以通过 CGLib 来实现,而 CGLib 是基于 ASM(一个 Java 字节码操作框架)而非反射实现的。动态代理是一种行为方式,而反射或

2020-05-11 10:57:58

搞定String

String类详解通过反编译理解java String和internString的不可变性1. 概述String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例(对象)实现字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。字符串缓冲区支持可变的字符串2. String的实现以及不可变设计String是不可变类,所谓的不可变类是指这个类的实例一旦创建完成后,就不能改变其成员变量值;James Gosling 说迫使

2020-05-11 10:23:01

LinkedHashMap

Map 综述(二):彻头彻尾理解 LinkedHashMap图解LinkedHashMap原理1. 概述在刷leetcode的时候碰到了一个LRU题目,最开始自己是拿LinkdedList+HashMap做的,做完看题解发现Java为我们提供了LinkedHashMap,可以很好的支持LRU算法;HashMap是无序的,内部使用Hash数组+链表+红黑树实现,因为元素存储在链表的位置通过Hash计算得到,在迭代遍历的顺序自然和存入时的顺序不同,HashMap的这一缺点往往会造成诸多不便,因为在有些场

2020-05-09 19:37:30

Spring AOP的实现

1. AOP,AspectJ,Spring AOPAOPAOP 要实现的是在我们原来写的代码的基础上,进行一定的包装,如在方法执行前、方法返回后、方法抛出异常后等地方进行一定的拦截处理或者叫增强处理AOP 的实现并不是因为 Java 提供了什么神奇的钩子,可以把方法的几个生命周期告诉我们,而是我们要实现一个代理,实际运行的实例其实是生成的代理类的实例Spring AOP它基于动态代理来实...

2020-05-08 11:54:48

SpringFramework核心 - Bean的生命周期

面试官:请你描述下 Spring Bean 的生命周期?1. 概述Bean 的生命周期概括起来就是 4 个阶段实例化(Instantiation):第 1 步,实例化一个 bean 对象属性赋值(Populate):第 2 步,为 bean 设置相关属性和依赖;初始化(Initialization):第 3~7 步,步骤较多,其中第 5、6 步为初始化操作,第 3、4 步为在初始化前执...

2020-05-07 12:54:17

SpringFramework核心 - IOC容器的实现 - 总结

1. 概述把Spring技术内幕第一章和第二章过了一遍,也做了一些笔记, 对IOC容器的实现有了一定皮毛理解,现在跟着源码再过一遍总结一下IOC容器的初始化,Bean的初始化的过程,做一下总结① IOC容器和简单工厂模式在开始之前,先想想我们平时是怎么使用IOC容器为我们管理Bean的,假设我们要把下面的User类交给IOC容器管理public class User { priva...

2020-05-06 10:00:32

SpringFramework核心 - IOC容器的实现 - 循环依赖

spring依赖注入——循环依赖Spring 如何解决循环依赖?概述循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错;Spring针对循环依赖问题提供了解决方案,但是对于循环依赖的解决不是无条件的,有些情况...

2020-05-04 13:13:13

Spring Framework的核心 - IOC容器的实现 - BeanDefinition

1. 概述在之前的文章中有提到过,SpringIOC容器管理了我们定义的各种Bean对象及其相互的关系,Bean对象在Spring实现中是以BeanDefinition来描述的;BeanDefinition也叫spring bean的建模对象,也就是把可以表示bean的模型对象;在学习JVM虚拟机的时候,了解到普通类的实例化过程是先将java文件编译成class文件,继而java虚拟机启动会...

2020-05-04 09:46:23

Spring Framework的核心 - IOC容器的实现 - bean的初始化和依赖注入

依赖注入的实现在之前的文章总结了IOC容器的初始化,初始化的过程就是在IOC容器中建立了BeanDefinition数据映射,但是没有对Bean的依赖关系进行注入依赖注入发生在以下两种情况:第一次向IOC容器索要Bean时触发当然也可能是发生在初始化的时候,取决于lazy-init属性是否懒加载索要Baan即调用容器的getBean方法,这就是依赖注入的入口;程序=数据+算法,在容器...

2020-05-03 10:51:49

Spring Framework的核心 - 统一资源加载策略

转载自IOC之Spring统一加载策略1. 概述资源是一个抽象的概念,什么是资源?我们已知Spring中有很多xml配置文件,同时还可能自建各种properties资源文件,还有可能进行网络交互,收发各种文件、二进制流等。资源粗略的可以分为(这里以Spring的分类为例):URL资源File资源ClassPath相关资源服务器相关资源(JBoss AS 5.x上的VFS资源)通过...

2020-05-02 12:15:28

Spring Framework的核心 - IOC容器的实现 - IOC容器的初始化

1. 概述IOC容器的初始化是通过refresh()方法来启动的,这个过程包括BeanDefination的Resource定位,载入和注册三个过程,Spring把这三个过程分来,分别使用不同的模块完成;① Resource定位对资源进行定位,也就是找到我们通常所说“applicationContetx.xml”等配置文件,他由ResourceLoader提供的统一的接口Resource完成...

2020-05-01 12:00:00

Spring Framework的核心 - IOC容器的实现 -BeanFactoreny和ApplicationContext

1. 概述在Spring IOC容器设计中,有两个主要的容器系列,一个是实现BeanFactoreny接口的简单容器,他定义了IOC容器的基本功能规范;一个是ApplicationContext应用上下文,他作为容器的高级形态而存在,增加了许多面向框架的特性;除此之外还有其他许多IOC容器;既然有了容器,自然也要有容器中的核心数据,在Spring提供的基本IOC容器接口的定义和实现的基础上,S...

2020-04-30 20:03:21

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。