<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ly10228的博客]]></title><description><![CDATA[java]]></description><link>https://blog.youkuaiyun.com/ly10228</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ly10228]]></copyright><item><title><![CDATA[稀疏数组]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/113487934</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/113487934</guid><author>ly10228</author><pubDate>Mon, 01 Feb 2021 00:29:12 +0800</pubDate><description><![CDATA[稀疏数组实际的需求问题分析基本介绍处理方法举例说明思路二维数组转换成稀疏数组稀疏数组转换成二维数组
实际的需求
编写一个五子棋程序 使用二维数组 1代表黑子 2代表蓝子 0代表空白处

问题分析
如上图所示，该二维数组的很多值默认都是0，因此记录了很多没有意义的数据。可以用稀疏数组解决上面的问题\color{blue}{如上图所示，该二维数组的很多值默认都是0，因此记录了很多没有意义的数据。可以用稀疏数组解决上面的问题}如上图所示，该二维数组的很多值默认都是0，因此记录了很多没有意义的数据。可以用稀疏数组解]]></description><category></category></item><item><title><![CDATA[AOP原理]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112389892</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112389892</guid><author>ly10228</author><pubDate>Sat, 09 Jan 2021 12:53:02 +0800</pubDate><description><![CDATA[AOP原理1.@EnableAspectJAutoProxy2.AnnotationAwareAspectJAutoProxyCreatorAbstractAutoProxyCreator
看给容器当中注入了什么组件？这个组件的功能是什么，什么时候开始工作？
1.@EnableAspectJAutoProxy
@EnableAspectJAutoProxy开启基于注解的AOP
  @Import(AspectJAutoProxyRegistrar.class) 为容器中注册bean
    AspectJA]]></description><category></category></item><item><title><![CDATA[AOP]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112254886</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112254886</guid><author>ly10228</author><pubDate>Tue, 05 Jan 2021 23:17:27 +0800</pubDate><description><![CDATA[AOP案例代码实现
动态代理：指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式\color{blue}{ 动态代理：指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式}动态代理：指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式
案例
MathCalculator.div()方法执行时打印执行之前、结束之后等等环节的日志
实现步骤:\color{red}{ 实现步骤:}实现步骤:
1.导入aop模块 可以直接在pom当中引入spring-a]]></description><category></category></item><item><title><![CDATA[@Profile]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112254525</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112254525</guid><author>ly10228</author><pubDate>Tue, 05 Jan 2021 22:50:53 +0800</pubDate><description><![CDATA[@Profile案例：根据不同的环境注册不同的数据源信息源码实现
Spring为我们提供的可以根据当前环境，动态的激活和切换一系列组件的功能。
指定组件在哪个环境的情况下才能被注册到容器中，不指定，任何环境下都能注册这个组件
案例：根据不同的环境注册不同的数据源信息
源码实现
配置类
@PropertySource("classpath:/dbconfig.properties")
@Configuration
public class MainConfigOfProfile implements Embe]]></description><category></category></item><item><title><![CDATA[自动装配]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112151670</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112151670</guid><author>ly10228</author><pubDate>Sun, 03 Jan 2021 20:28:06 +0800</pubDate><description><![CDATA[自动装配自动装配1.@Autowired 自动注入代码实现

Spring利用依赖注入（DI）,完成对IOC容器中各个组件的依赖关系赋值\color{blue}{ Spring利用依赖注入（DI）,完成对IOC容器中各个组件的依赖关系赋值}Spring利用依赖注入（DI）,完成对IOC容器中各个组件的依赖关系赋值

自动装配
1.@Autowired 自动注入
代码实现
1）、默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);找到就赋值]]></description><category></category></item><item><title><![CDATA[属性赋值]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112094993</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112094993</guid><author>ly10228</author><pubDate>Sat, 02 Jan 2021 12:43:48 +0800</pubDate><description><![CDATA[属性赋值使用@Value注解代码实现
使用@Value注解

1.基本数值
2.可以写SpEL #{}
3.可以写${} 取出配置文件当中的值

代码实现
@Data
public class Person {
    @Value("ly")
    private String name;
    @Value("#{20-2}")
    private Integer age;
    @Value("${person.nickName}")
    private String nickName;]]></description><category></category></item><item><title><![CDATA[bean生命周期]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112062172</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112062172</guid><author>ly10228</author><pubDate>Fri, 01 Jan 2021 17:43:35 +0800</pubDate><description><![CDATA[bean生命周期1.指定初始化和销毁方法代码实现
1.指定初始化和销毁方法
代码实现
@ComponentScan("com.ly.springannotation.bean")
@Configuration
public class MainConfigOfLifeCycle {

    @Bean(initMethod = "init", destroyMethod = "destroy")
    public Car car() {
        return new Car();
    }
]]></description><category></category></item><item><title><![CDATA[组件注册]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/112058894</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/112058894</guid><author>ly10228</author><pubDate>Fri, 01 Jan 2021 11:21:26 +0800</pubDate><description><![CDATA[组件注册1.@Configuration+@Bean给容器当中注册组件代码实现2.@ComponentScan自动扫描组件代码实现
1.@Configuration+@Bean给容器当中注册组件
代码实现
@Configuration：告诉Spring这是一个配置类\color{blue}{@Configuration：告诉Spring这是一个配置类}@Configuration：告诉Spring这是一个配置类
@Configuration
public class MainConfig {
    /**]]></description><category></category></item><item><title><![CDATA[代理模式]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/111766406</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/111766406</guid><author>ly10228</author><pubDate>Sat, 26 Dec 2020 18:30:29 +0800</pubDate><description><![CDATA[代理模式代理模式基本介绍1.静态代理基本介绍图解实现静态代理优缺点2.动态代理3.cglib代理
代理模式基本介绍

代理模式:为一个对象提供一个替身，以控制对这个对象的访问。即通过代理 对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的 功能操作,即扩展目标对象的功能。
被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象
代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代 理)和 Cglib代理 (可以在内存动态的创建对象，而不需要实现接口， ]]></description><category></category></item><item><title><![CDATA[工厂模式]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/111601258</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/111601258</guid><author>ly10228</author><pubDate>Wed, 23 Dec 2020 23:17:40 +0800</pubDate><description><![CDATA[工厂模式传统案例传统的方式的优缺点
传统案例

@Data
public class OrderPizza {
    public OrderPizza() {
        Pizza pizza = null;
        /**
         *  订购披萨的类型
         */
        String orderType;
        do {
            //获取订购披萨的类型
            orderType = getType();
    ]]></description><category></category></item><item><title><![CDATA[类与类之间的关系]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/111600590</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/111600590</guid><author>ly10228</author><pubDate>Wed, 23 Dec 2020 22:21:42 +0800</pubDate><description><![CDATA[类与类之间的关系1.依赖基本介绍

类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合

1.依赖
基本介绍
只要是在类中用到了对方，那么他们之间就存在依赖关系。如果没有对方，连编
绎都通过不了。

...]]></description><category></category></item><item><title><![CDATA[设计模式7大原则]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/111493595</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/111493595</guid><author>ly10228</author><pubDate>Mon, 21 Dec 2020 19:59:41 +0800</pubDate><description><![CDATA[设计模式7大原则1.单一职责原则2.接口隔离原则3.依赖倒转（倒置原则）4.里氏替换原则5.开闭原则6.迪米特法则7.合成复用原则
1.单一职责原则
2.接口隔离原则
3.依赖倒转（倒置原则）
4.里氏替换原则
5.开闭原则
6.迪米特法则
7.合成复用原则

...]]></description><category></category></item><item><title><![CDATA[jvm-运行时数据区]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110697565</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110697565</guid><author>ly10228</author><pubDate>Mon, 21 Dec 2020 19:42:53 +0800</pubDate><description><![CDATA[jvm-运行时数据区本地方法区结构图
本地方法区结构图

链接地址:\color{red}{链接地址: }链接地址: https://www.processon.com/diagraming/5f0c8194f346fb2bfb21dbc2

]]></description><category></category></item><item><title><![CDATA[jvm--类加载子系统]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110789484</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110789484</guid><author>ly10228</author><pubDate>Mon, 21 Dec 2020 19:42:28 +0800</pubDate><description><![CDATA[jvm-类加载系统类加载子系统流程图类加载子系统作用
类加载子系统流程图

类加载子系统作用

1:负责从文件系统或者网络中加载Class文件，Class文件开头有特定标识。\color{red}{ 1:负责从文件系统或者网络中加载Class文件，Class文件开头有特定标识。}1:负责从文件系统或者网络中加载Class文件，Class文件开头有特定标识。
2:Classloader只负责class文件的加载，至于是否可运行，则由执行引擎决定。\color{red}{ 2: Classloader只负责cl]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/111429900</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/111429900</guid><author>ly10228</author><pubDate>Sun, 20 Dec 2020 15:34:50 +0800</pubDate><description><![CDATA[运算符单例模式创建方式饿汉式（静态常量）创建步骤优点缺点结论
单例模式创建方式

饿汉式（静态常量）
饿汉式（静态代码块）
懒汉式（线程不安全）
懒汉式（线程安全 同步方法）
懒汉式（线程安全 同步代码块）
双重检查
静态内部类
枚举

饿汉式（静态常量）
创建步骤


构造器私有化（防止new）
类的内部创建对象
向外暴露一个静态的公共方法
代码实现


class StaticVariableSingleton {

    /**
     * 1.构造器私有化, 外部不能new
     */
  ]]></description><category></category></item><item><title><![CDATA[java基本语法--运算符]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110944346</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110944346</guid><author>ly10228</author><pubDate>Thu, 10 Dec 2020 00:52:03 +0800</pubDate><description><![CDATA[运算符算术运算符赋值运算符符号：=扩展运算符：+=, -=, *=, /=, %=比较运算符（关系运算符）逻辑运算符“&amp;”和“&amp;&amp;”的区别:“|”和“||”的区别同理，||表示:当左边为真，右边不参与运算。异或( ^ )与或( | )的不同之处是:当左右都为true时，结果为false。位运算符左移右移其他三元运算符运算符优先级

运算符是一种特殊的符号，用以表示数据的运算、赋值和比较等

算术运算符

赋值运算符
符号：=

当“=”两侧数据类型不一致时，可以使用自动类型转换或使用]]></description><category></category></item><item><title><![CDATA[集合-Map]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110912817</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110912817</guid><author>ly10228</author><pubDate>Tue, 08 Dec 2020 23:27:04 +0800</pubDate><description><![CDATA[集合--Map集合框架MapMap的理解HashMap底层源码分析HashMap JDK1.7源码分析HashMap JDK1.8源码当中的变化LinkedHashMap 源码分析
集合框架

Map
双列数据、存储key-value  --&gt;类似于高中的函数：y=f(x)

1.HashMap：Map的主要实现类。线程不安全的，执行效率高。可以存储null的key和value\color{red}{1.HashMap：Map的主要实现类。线程不安全的，执行效率高。可以存储null的key和value]]></description><category></category></item><item><title><![CDATA[集合-List]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110846599</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110846599</guid><author>ly10228</author><pubDate>Mon, 07 Dec 2020 22:34:21 +0800</pubDate><description><![CDATA[集合--ListList接口框架
List接口框架
Collection接口：单列集合，用来存储一个一个的对象
List接口：存储有序的、可重复的数据。−−&gt;“动态”数组,替换原有的数组\color{red}{List接口：存储有序的、可重复的数据。  --&gt;“动态”数组,替换原有的数组}List接口：存储有序的、可重复的数据。−−&gt;“动态”数组,替换原有的数组
1.ArrayList作为List接口的主要实现类，线程不安全的，执行效率高。底层使用Object[]elementData存储]]></description><category></category></item><item><title><![CDATA[多线程-创建与使用]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110507495</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110507495</guid><author>ly10228</author><pubDate>Thu, 03 Dec 2020 08:38:06 +0800</pubDate><description><![CDATA[多线程-创建与使用创建方式1 继承Thread类的方式2 实现Runnable接口的方式3 实现Callable接口 jdk5.0新增4 线程池
创建方式
1 继承Thread类的方式
2 实现Runnable接口的方式
3 实现Callable接口 jdk5.0新增
4 线程池

...]]></description><category></category></item><item><title><![CDATA[多线程-程序 进程 线程]]></title><link>https://blog.youkuaiyun.com/ly10228/article/details/110506828</link><guid>https://blog.youkuaiyun.com/ly10228/article/details/110506828</guid><author>ly10228</author><pubDate>Wed, 02 Dec 2020 23:45:17 +0800</pubDate><description><![CDATA[多线程-基本概念程序 进程 线程一 程序（program）二 进程（process）三 线程（thread）并行与并发
程序 进程 线程
一 程序（program）

程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码，静态对象。

二 进程（process）

是程序的一次执行过程，或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期
如:运行中的QQ，运行中的MP3播放器
程序是静态的，进程是动态的
进程作为资源分配的单位，系统]]></description><category></category></item></channel></rss>