<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Hack_Bug</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hack_Bug]]></copyright><item><title><![CDATA[2021-01-12]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/112505695</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/112505695</guid><author>Hack_Bug</author><pubDate>Tue, 12 Jan 2021 08:54:04 +0800</pubDate><description><![CDATA[Spring-Security源码解读：

	1.使用ctrl+shift+n组合键查找UsernamePasswordAuthenticationFilter过滤器，该过滤器是用来处理用户认证逻辑的，进入后如图：
	
	
	

	
	
	
	(1)可以看到它默认的登录请求url是"/login"，并且只允许POST方式的请求

	(2)obtainUsername()方法点进去发现它默认是根据参数名为"username"和"password"来获取用户名和密码的

	(3)通过构造方法实例化一个Us...]]></description><category></category></item><item><title><![CDATA[Spring Boot启动原理解析（注解篇）]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/112459354</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/112459354</guid><author>Hack_Bug</author><pubDate>Mon, 11 Jan 2021 01:42:20 +0800</pubDate><description><![CDATA[SpringBoot内置的自动配置使开发变得很方便，所以这次就来看看它的启动源码和它的自动化配置的实现原理。

    启动类：

@SpringBootApplication
public class DemoApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
    可以看到这个启动类中有两部分：@.]]></description><category></category></item><item><title><![CDATA[SpringSecurity启动流程源码解析]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/112456532</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/112456532</guid><author>Hack_Bug</author><pubDate>Mon, 11 Jan 2021 00:48:29 +0800</pubDate><description><![CDATA[前面两期我讲了SpringSecurity认证流程和SpringSecurity鉴权流程，今天是第三期，是SpringSecurity的收尾工作，讲SpringSecurity的启动流程。

就像很多电影拍火了之后其续作往往是前作的前期故事一样，我这个第三期要讲的SpringSecurity启动流程也是不择不扣的"前期故事"，它能帮助你真正认清SpringSecurity的整体全貌。

在之前的文章里，在说到SpringSecurity中的过滤器链的时候，往往是把它作为一个概念了解的，就是我们只是知道有这么]]></description><category></category></item><item><title><![CDATA[spring security启动流程解析]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/112449087</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/112449087</guid><author>Hack_Bug</author><pubDate>Sun, 10 Jan 2021 22:41:58 +0800</pubDate><description><![CDATA[spring security启动流程解析（一）SecurityAutoConfiguration

在springboot体系下我们一般是找 xxxAutoConfiguration，那么这里我们可以通过查找securityAutoConfiguration可以找到如下类：

SecurityAutoConfiguration
	SecurityFilterAutoConfiguration
	SecurityRequestMatcherProviderAutoConfiguration
	Managem]]></description><category></category></item><item><title><![CDATA[spring security配置构建分析]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/112448978</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/112448978</guid><author>Hack_Bug</author><pubDate>Sun, 10 Jan 2021 22:38:30 +0800</pubDate><description><![CDATA[先看一张大图
从官网给的图中我们可以知道启动是通过封装一个FilterChainProxy 到servlet的filter体系中，来完成安全配置的全套操作。记住这个点，先放着，接着我们来了解spring security 配置模块中几个顶层接口

org.springframework.security.config.annotation.SecurityBuilder
	org.springframework.security.config.annotation.SecurityConfigurer
	o]]></description><category></category></item><item><title><![CDATA[Spring Security 原理讲解]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/112448735</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/112448735</guid><author>Hack_Bug</author><pubDate>Sun, 10 Jan 2021 22:36:32 +0800</pubDate><description><![CDATA[一、整理了解下Spring Security 的工作原理 





如上图所示，spring security 的主要工作就是在原有的网络请求的过滤器链（ApplicationFilterChain）中额外添加一条过滤器链(FilterChainProxy),主要用于用户认证与授权。

   请求进入web容器经一些容器自身的基础加工后，进入到servlet的滤器链中，spring security 使用DelegatingFilterProxy这个filter，将targetBea...]]></description><category></category></item><item><title><![CDATA[【Spring源码分析】非懒加载的单例Bean初始化过程（下篇）]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111057586</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111057586</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 10:28:40 +0800</pubDate><description><![CDATA[doCreateBean方法

上文【Spring源码分析】非懒加载的单例Bean初始化过程（上篇），分析了单例的Bean初始化流程，并跟踪代码进入了主流程，看到了Bean是如何被实例化出来的。先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码：




 1 protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object]]></description><category></category></item><item><title><![CDATA[【Spring源码分析】非懒加载的单例Bean初始化过程（上篇）]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111057557</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111057557</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 10:27:03 +0800</pubDate><description><![CDATA[代码入口

上文【Spring源码分析】Bean加载流程概览，比较详细地分析了Spring上下文加载的代码入口，并且在AbstractApplicationContext的refresh方法中，点出了finishBeanFactoryInitialization方法完成了对于所有非懒加载的Bean的初始化。

finishBeanFactoryInitialization方法中调用了DefaultListableBeanFactory的preInstantiateSingletons方法，本文针对preIn]]></description><category></category></item><item><title><![CDATA[【Spring源码分析】Bean加载流程概览]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111057536</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111057536</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 10:24:43 +0800</pubDate><description><![CDATA[代码入口

之前写文章都会啰啰嗦嗦一大堆再开始，进入【Spring源码分析】这个板块就直接切入正题了。

很多朋友可能想看Spring源码，但是不知道应当如何入手去看，这个可以理解：Java开发者通常从事的都是Java Web的工作，对于程序员来说，一个Web项目用到Spring，只是配置一下配置文件而已，Spring的加载过程相对是不太透明的，不太好去找加载的代码入口。

下面有很简单的一段代码可以作为Spring代码加载的入口：


 1 ApplicationContext ac = new Clas]]></description><category></category></item><item><title><![CDATA[浅谈JAVA中的final修饰符]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056427</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056427</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 06:15:39 +0800</pubDate><description><![CDATA[final修饰符是JAVA中比较简单的一个修饰符，很多人通过书本就可以熟练掌握，但我学的时候，虽然感觉会用了，但是并不是十分理解这个修饰符，所以我找了相关资料，把我的个人理解分享给大家~~



final书本定义：

1.final可以修饰变量，被final修饰的变量被赋初值后，不能对它重新赋值

2.final可以修饰变量，被final修饰的方法被重写

3.final可以修饰类，被final修饰的类不能派生子类

总的来说，就是值不能改，方法不能重写，类不能继承，就相当于是终结版。。。。



一..]]></description><category></category></item><item><title><![CDATA[Java基础之—反射（非常重要）]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056421</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056421</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 05:53:14 +0800</pubDate><description><![CDATA[反射是框架设计的灵魂

（使用的前提条件：必须先得到代表的字节码的Class，Class类用于表示.class文件（字节码））



一、反射的概述

JAVA反射机制是在运行状态中，对于任意一个类，都能够知道这个类的所有属性和方法；对于任意一个对象，都能够调用它的任意一个方法和属性；这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.]]></description><category></category></item><item><title><![CDATA[spring框架学习 依赖注入]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056305</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056305</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 02:28:59 +0800</pubDate><description><![CDATA[spring框架为我们提供了三种注入方式，分别是set注入，构造方法注入，接口注入。接口注入不作要求，下面介绍前两种方式。



1，set注入

 采用属性的set方法进行初始化，就成为set注入。

  1）给普通字符类型赋值。








	public class User{
	
	
	privateString username;
	
	
	
	publicString getUsername() {
	
	
	returnusername;
	
	
	}
	
	
	public...]]></description><category></category></item><item><title><![CDATA[Spring注入：配置注入(set注入和构造器注入)与注解注入]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056301</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056301</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 02:25:53 +0800</pubDate><description><![CDATA[注入简介

Spring注入可以理解为是对一个对象进行初始化，也就是省去new的这个步骤，类似于工厂模式一样，通过一个工厂制造出这个对象，如果遇到修改，只需要改一处就行了。实现spring注入一般有两种方法，配置文件，或者用注解。各有不同的作用。

注意：本文中涉及到所以例子均默认加入了spring的包，如果没有加入spring包可以自己百度一下用maven或者手动下载spring的依赖包（这里就不给博客了，还是应该自己动动手吧）



配置注入：

不重复造轮子，这里已经说明得很清楚了，介绍了两种方式，.]]></description><category></category></item><item><title><![CDATA[构造方法注入]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056300</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056300</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 02:24:18 +0800</pubDate><description><![CDATA[Spring中只有两大核心技术:IOC&amp;DI(控制反转&amp;依赖注入),AOP(面向切面编程)

什么是依赖注入?

利用配置文件的关系来决定类之间的引用关系以及数据的设置操作.

1.构造方法注入

默认情况下如果在applicationContext.xml文件之中配置的程序都可以自动的找到Spring容器加载时进行对象的实例化操作.但是自动进行初始化的时候调用1是类中的无惨构造方法,而且通过反射机制应该知道.如果类中提供有无惨构造方法一定要比有参构造方法的实例化更加容易.
...]]></description><category></category></item><item><title><![CDATA[Spring set注入和构造注入的区别]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056272</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/111056272</guid><author>Hack_Bug</author><pubDate>Sat, 12 Dec 2020 02:03:37 +0800</pubDate><description><![CDATA[Spring种提供了2种常用的注入方式，set方法注入和构造函数注入。由于这2种注入方式很相似，都可以满足我们的需求，所以在大多数情况下我们忽视了这2种注入方式的区别。下面让我们看看这2种注入方式的特点。
我们先看看Spring在使用set方法注入时，是怎样实例化一个Bean和Bean的合作者的：
在A中有一个setB方法用来接收B对象的实例。那么Spring实例化A对象的过程如下：
在不考虑Bean的初始化方法和一些Spring回调的情况下，Spring首先去调用A对象的构造函数实例化A，然后查找A依赖的]]></description><category></category></item><item><title><![CDATA[一个字符占几个字节]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/110944703</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/110944703</guid><author>Hack_Bug</author><pubDate>Thu, 10 Dec 2020 00:56:32 +0800</pubDate><description><![CDATA[ASCII码：
　　一个英文字母（不分大小写）占一个字节的空间，一个中文汉字占两个字节的空间。一个二进制数字序列，在计算机中作为一个数字单元，一般为8位二进制数，换算为十进制。最小值0，最大值255。如一个ASCII码就是一个字节。

UTF-8编码：
　　一个英文字符等于一个字节，一个中文（含繁体）等于三个字节。

Unicode编码：
　　一个英文等于两个字节，一个中文（含繁体）等于两个字节。
　　符号：
　　英文标点占一个字节，中文标点占两个字节。举例：英文句号“.”占1个字节的大小，中文句号“。”占]]></description><category></category></item><item><title><![CDATA[golang 之 Println call has possible formatting directive]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/110944701</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/110944701</guid><author>Hack_Bug</author><pubDate>Thu, 10 Dec 2020 00:55:38 +0800</pubDate><description><![CDATA[比如这么写：


fmt.Println("Hello, playground %d",i)

那么会出现warning:Println call has possible formatting directive %d Go vet exited.



fmt.Printlndoesn't do formatting things like%d. Instead, it uses the default format of its arguments, and adds spaces betwee...]]></description><category></category></item><item><title><![CDATA[Go 语言中 = 和 := 有什么区别]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/110944422</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/110944422</guid><author>Hack_Bug</author><pubDate>Thu, 10 Dec 2020 00:30:13 +0800</pubDate><description><![CDATA[= 是赋值， := 是声明变量并赋值。


// = 使用必须使用先var声明例如：
var a
a=100
//或
var b = 100
//或
var c int = 100

// := 是声明并赋值，并且系统自动推断类型，不需要var关键字
d := 100
]]></description><category></category></item><item><title><![CDATA[使用LVS实现负载均衡原理及安装配置详解]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/110914732</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/110914732</guid><author>Hack_Bug</author><pubDate>Wed, 09 Dec 2020 06:35:38 +0800</pubDate><description><![CDATA[负载均衡集群是 load balance 集群的简写，翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy，商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。

此文章已经过期！请移步新文章，更详细、更全面、更准确

负载均衡 LVS 入门教程详解 - 基本介绍
	负载均衡 LVS 入门教程详解 - 基础原理
	负载均衡 LVS 入门教程详解 - 操作实践




一、负载均衡LVS基本介绍

  LB集群的架构和...]]></description><category></category></item><item><title><![CDATA[为什么大公司一定要使用DevOps?]]></title><link>https://blog.youkuaiyun.com/Hack_Bug/article/details/110914705</link><guid>https://blog.youkuaiyun.com/Hack_Bug/article/details/110914705</guid><author>Hack_Bug</author><pubDate>Wed, 09 Dec 2020 05:38:24 +0800</pubDate><description><![CDATA[0 DevOps的意图



究竟什么是DevOps? 要想回答这个问题，首先要明确DevOps这个过程参与的人员是谁？即开发团队和IT运维团队！那么，DevOps的意图是什么呢？即在两个团队之间，建立良好的沟通和协作，更快更可靠的创建高质量软件！



事实上，并不是这两个团队之间的协作帮助交付了更好的软件，而是“开发”和“运维”团队之间的统一导致了软件的改进，并以更快的速度交付。我们不要忘记DevOps工具在实现自动化方面所扮演的角色。



开发和运维“一体”的感觉是由开发人员和操作工程师之间的...]]></description><category></category></item></channel></rss>