<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Carey丶zsh 的博客]]></title><description><![CDATA[愿深入程序起源]]></description><link>https://blog.youkuaiyun.com/LNView</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LNView]]></copyright><item><title><![CDATA[SpringBoot 是如何通过 @SpringBootApplication 扫描项目中的 Bean]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/93338432</link><guid>https://blog.youkuaiyun.com/LNView/article/details/93338432</guid><author>LNView</author><pubDate>Sat, 22 Jun 2019 16:56:16 +0800</pubDate><description><![CDATA[原因
首先因为 XXXXXXXApplication 附带 @SpringBootApplication 注解,而 @SpringBootApplication 注解的层次如下:
SpringBootApplication
----@Inherited
----@SpringBootConfiguration
--------@Configuration
----@EnableAutoConfig...]]></description><category></category></item><item><title><![CDATA[Linux 中的特殊权限 SUID, SGID , SBIT]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/90271460</link><guid>https://blog.youkuaiyun.com/LNView/article/details/90271460</guid><author>LNView</author><pubDate>Thu, 16 May 2019 20:31:52 +0800</pubDate><description><![CDATA[Linux 中的特殊权限 SUID, SGID , SBIT
文件的特殊权限: SUID, SGID , SBIT
查看一下文件和目录的权限:
# ls -ld /tmp ; ls -l /usr/bin/passwd                                                                                           ...]]></description><category></category></item><item><title><![CDATA[20个 DEMO 了解如何使用 AWK]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/88014594</link><guid>https://blog.youkuaiyun.com/LNView/article/details/88014594</guid><author>LNView</author><pubDate>Thu, 28 Feb 2019 09:51:42 +0800</pubDate><description><![CDATA[20 个 DEMO 了解 awk 如何使用
一.程序结构
语法结构awk [options] 'Pattern {Action}' file1 file2
示例代码 awk '$3 == 0 { print $1 }' test.txt
上述命令中,引号之间的部分是 awk 编程语言的程序.每个 awk 程序都是一个或多个模式-动作语句的程序: pattern { action }

awk 的基...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(九) ApplicationContext refresh()]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/87903284</link><guid>https://blog.youkuaiyun.com/LNView/article/details/87903284</guid><author>LNView</author><pubDate>Sun, 24 Feb 2019 14:57:00 +0800</pubDate><description><![CDATA[一. 前言
在高级容器中.到头来,启动的入口都是一样的,不论是 Spring 还是 Spring Boot 都会调用 AbstractApplicationContext 的 refresh() 方法来启动容器 , 在该方法中包含了整个高级容器的主要过程.
二.源码加注解
@Override
	public void refresh() throws BeansException, Illegal...]]></description><category></category></item><item><title><![CDATA[StringBuffer 和 StringBuilder 源码研究]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/87893365</link><guid>https://blog.youkuaiyun.com/LNView/article/details/87893365</guid><author>LNView</author><pubDate>Sat, 23 Feb 2019 15:58:40 +0800</pubDate><description><![CDATA[文章目录一. 前言二. 区别二. 构造器四. append 方法五. StringBuffer 和 StringBuilder 的扩充
一. 前言
StringBuffer 和 StringBuilder的底层都是使用数组存储
结构图:

二. 区别


他们两个的区别主要就在于 StringBuffer 的方法上基本都加了  synchronized 关键字,保证了线程安全,当然也降低了性能.
...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(八) Bean 的创建]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/87291202</link><guid>https://blog.youkuaiyun.com/LNView/article/details/87291202</guid><author>LNView</author><pubDate>Thu, 14 Feb 2019 19:01:56 +0800</pubDate><description><![CDATA[文章目录一.前言二.源码流程2.1 doGetBean()2.1.1 重点一 (11~25 行):2.1.2 重点二 (37~49 行):2.1.3 重点三 (53行 和 58行):2.1.4 重点四 (64~83 行):2.1.5 重点五 (86~104 行):2.2 createBean();2.2.1 重点一 (12~16 行):2.2.2 重点二 (32~35 行):2.2.3 重点三 (...]]></description><category></category></item><item><title><![CDATA[JDK8 之 Lambda 总结]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86533139</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86533139</guid><author>LNView</author><pubDate>Thu, 17 Jan 2019 23:51:25 +0800</pubDate><description><![CDATA[文章目录一. 简介二. 使用效果2.1 未使用 lambda 和 使用 lambda 的区别三. 基本语法四. 函数式接口五.内置四大核心函数式接口5.1 Consumer5.2 Supplier5.3 Function一. 简介

Lambda 是一个匿名函数，我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码 像数据一样进行传递)。可以写出更简洁、更 灵活的代码。作为一种更紧凑...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(七) BeanDefinition 的注册]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500700</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500700</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 23:05:14 +0800</pubDate><description><![CDATA[一.项目准备
1.1 创建项目
首先创建一个简单的 maven 项目,并导入 spring 最基础的依赖包.
这里用到的 spring 版本是 5.1.3.RELEASE

因为我们只用到最简单 BeanFactory ,并没有用 ApplicationContext (高级封装的 BeanFactory),所以只要一个 spring-beans 的依赖即可
    &amp;amp;amp;lt;dependencie...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(六) XmlBeanFactory]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500513</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500513</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 22:46:49 +0800</pubDate><description><![CDATA[一.前言
现在我们把主要的类讲了一部分,下面我们来看看 Spring 是如何启动的.
DefaultListableBeanFactory 作为一个默认的功能完整的 IOC 容器来使用.那我们就从它来入手.
二. XmlBeanFactory
2.1 描述
XmlBeanFactory 是 DefaultListableBeanFactory  唯一的子类(已有 @Deprecated 注解), ...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(五) ResourceLoader]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500498</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500498</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 22:45:00 +0800</pubDate><description><![CDATA[一.前言

用于加载资源的策略接口（例如，类路径或文件系统资源）。需要 ApplicationContext 来提供此功能，以及扩展的ResourcePatternResolver 支持。
DefaultResourceLoader 是一个独立的实现，可以在 ApplicationContext 外部使用，也可以被 ResourceEditor 使用。
使用特定上下文的资源加载策略，在Applic...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(四) BeanDefinition]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500454</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500454</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 22:41:54 +0800</pubDate><description><![CDATA[一.前言

BeanDefinition是配置文件&amp;amp;lt;bean&amp;amp;gt;元素标签在容器中地内部表示。&amp;amp;lt;bean&amp;amp;gt;元素标签拥有class、scope、lazy-init等配置属性，BeanDefinition 则提供了相应地beanClass、scope、lazyInit类属性，BeanDefinition 就像&amp;amp;lt;bean&amp;amp;gt;中镜中人，二者是一一对应地

来看一下整体的类结构...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(三) DefaultListableBeanFactory]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500437</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500437</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 22:40:42 +0800</pubDate><description><![CDATA[一.前言
在第一篇的时候我们就讲过, spring ioc 的实现,主要的有两条实现分支,而 DefaultListableBeanFactory 的实现就是我们的第一个 BeanFactory 主要实现分支.
来看一下 DefaultListableBeanFactory 的类结构:

结合我第一篇做的流程图和 idea 生成的流程图,我们下面会重点讲一下左半部分的接口功能,右边类继承会做个简单...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(二) BeanFactory]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500420</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500420</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 22:39:23 +0800</pubDate><description><![CDATA[一.前言
Spring IOC 容器顶级接口 BeanFactory 描述:

定义了最基本的 ioc 容器规范,定义了 ioc 容器具有最基础的方法

二.方法:
BeanFactory 的所有方法:
boolean	containsBean(java.lang.String name)
    此bean工厂是否包含具有给定名称的bean定义或外部注册的单例实例？
java.lang.Stri...]]></description><category></category></item><item><title><![CDATA[Spring IOC 源码解析(一) 概述篇]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/86500411</link><guid>https://blog.youkuaiyun.com/LNView/article/details/86500411</guid><author>LNView</author><pubDate>Tue, 15 Jan 2019 22:38:18 +0800</pubDate><description><![CDATA[一. IOC是什么:

IOC —Inversion of Control，即“控制反转”，不是什么技术，而是一种设计思想。在 Java 开发中，Ioc 意味着将你设计好的对象交给容器控制，而不是传统的在你的对象内部直接控制。如何理解好 Ioc 呢？理解好Ioc的关键是要明确“谁控制谁，控制什么，为何是反转（有反转就应该有正转了），哪些方面反转了”

●谁控制谁，控制什么：传统Java SE程序设...]]></description><category></category></item><item><title><![CDATA[MYSQL 存储经纬度使用什么数据类型]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/85682411</link><guid>https://blog.youkuaiyun.com/LNView/article/details/85682411</guid><author>LNView</author><pubDate>Thu, 03 Jan 2019 11:01:32 +0800</pubDate><description><![CDATA[一.问题描述
创建 MySQL 表时，您应当特别注意 lat 和 lng 属性。
我们都知道经纬度范围是-180~180。但是经纬度有可能是这样的值40.69847032728747。
肯定是存储数据精度越高，最终位置定位越准确。但是考虑到数据库资源以及可定位到精准性.
二.解决方案
根据谷歌官方的建议,鉴于 Google Maps 目前的缩放能力，您只需要精确到小数点后六位数。为了让表占用的存储...]]></description><category></category></item><item><title><![CDATA[IDEA 为 sql 文件配置方言]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/85681171</link><guid>https://blog.youkuaiyun.com/LNView/article/details/85681171</guid><author>LNView</author><pubDate>Thu, 03 Jan 2019 10:43:27 +0800</pubDate><description><![CDATA[IDEA 为 sql 文件配置方言
一.问题描述

在 IDEA 创建后缀为 .sql 的文件时,默认情况下是没有设置 sql 语言的.所以一些关键字没有提示并且还没有背景色.

例如下图:

本人使用的 mysql ,想创建一个表,但是 id 类型我要设置 bigint 类型,提示语句并没有显示 bigint.但是 id 类型我要设置 bigint 类型,提示语句并没有显示 bigint.

而...]]></description><category></category></item><item><title><![CDATA[Map (五) HashMap get()]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/82865023</link><guid>https://blog.youkuaiyun.com/LNView/article/details/82865023</guid><author>LNView</author><pubDate>Thu, 27 Sep 2018 11:43:13 +0800</pubDate><description><![CDATA[首先打开源码:
    public V get(Object key) {
        Node&amp;amp;lt;K,V&amp;amp;gt; e;
        return (e = getNode(hash(key), key)) == null ? null : e.value;
    }

可以看到，get() 主要方法还是调用 getNode() 所以我们重点看一下这个方法：
    final N...]]></description><category></category></item><item><title><![CDATA[Map (四) HashMap 已故事的角度理解 resize()]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/82765140</link><guid>https://blog.youkuaiyun.com/LNView/article/details/82765140</guid><author>LNView</author><pubDate>Tue, 18 Sep 2018 22:11:48 +0800</pubDate><description><![CDATA[
我们先来看一篇故事，有益我们有更好的理解。

很久以前有一个学校，有7500名学生（size）和100间教室（oldCap）。学生的学号为0000～7499（hash），教室的编号为0～99 (数组下标)。为了使学生均匀的进入每间教室，校长规定，按学生学号的末尾2位选择对应编号的教室(hash &amp;amp;amp;amp;amp;amp;amp; （数组长度 - 1）)，如：

学号 0001 进入 01 教室
学号 0012 进入 1...]]></description><category></category></item><item><title><![CDATA[Map (三) HashMap 如何利用 hash 计算存储位置]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/82764905</link><guid>https://blog.youkuaiyun.com/LNView/article/details/82764905</guid><author>LNView</author><pubDate>Tue, 18 Sep 2018 21:55:24 +0800</pubDate><description><![CDATA[我们在看 HashMap 的源码的时候经常能看到 tab[i = (n - 1) &amp;amp;amp;amp;amp;amp; hash]) 这么一串代码。他是专门用来计算当前 key 存储的位置，并获取当前存储位置的元素，进行后续的判断。
让我们用图的形式更直观的看一下它是如何怎么计算的吧。

i = 5 即 tab[5]
这就是 HashMap 的精华所在，不论是 get() 还是 put() 都是通过上述的方法计算当前位置是...]]></description><category></category></item><item><title><![CDATA[Map (二) HashMap put()方法详细解刨]]></title><link>https://blog.youkuaiyun.com/LNView/article/details/82623732</link><guid>https://blog.youkuaiyun.com/LNView/article/details/82623732</guid><author>LNView</author><pubDate>Tue, 11 Sep 2018 11:57:35 +0800</pubDate><description><![CDATA[创建 HashMap 我们的即可开始往里面存键值对啦。我们来一步一步的看看 HashMap 是如何存储！

我们要模拟一下存储时的多种场景，后场景是在前场景不匹配的情况下的场景(如有遗漏请评论提醒)：


  我们先理解3个主要参数： 
  * hash （通过 key 计算出的 int 值） 
  * key  （传入的 key） 
  * value （传入的 value）


我们模拟 ha...]]></description><category></category></item></channel></rss>