list的应用要了解c++的list实现细节可以参考C++链表的C实现(链表反转、合并)#include#include#includeusingnamespacestd;intmain(){listmylist{1,2,3,4,5};mylist.push_back(10);for(autoi:mylist){cout<
【C/C++】面试基础题目收集
CodeWithMe
C/C++c语言c++面试
C++软件开发面试中常见的刷题题目通常可分为以下几大类:数据结构与算法、系统编程、面向对象设计、C++语言特性、并发编程等。一、数据结构与算法(力扣/牛客经典题)掌握STL和底层结构实现能力:数组&字符串两数之和(LeetCode1)三数之和(LeetCode15)盛水最多的容器(LeetCode11)最长不重复子串长度(LeetCode3)字符串转整数(LeetCode8)链表反转链表(Leet
【代码训练营Day03】链表part1
十八岁讨厌编程
算法训练营链表数据结构
文章目录链表基础理论移除链表元素设计链表反转链表链表基础理论几个需要关注的知识点:链表与数组的不同之处就在于:链表在内存中不一定是连续的,可以是离散存储的,他们之间通过指针进行连接。这也就决定了链表是不能随机查询的,只能通过指针顺藤摸瓜进行顺序查询。在数组中删除和添加操作会影响到后续的所有元素,而链表是通过指针链接,我们在删除和添加的时候,是对指针所指元素进行修改。数组的长度在初始化的时候就已经定
代码随想录算法训练营25期打卡第三天
依无锁有
算法
今天补前一天的,今天主要做了链表的基础题:203.移除链表元素707.设计链表206.反转链表反转链表部分学会了双指针,递归还没做前一天好多事,笔试,面试,写专利~给耽误了
Leetcode刷题记录2 子串+数组+矩阵
半局
数据结构与算法leetcodejava算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言hot1004.子串#560.和为K的子数组#239.滑动窗口最大值#76.最小覆盖子串5.数组#53.最大子数组和#56.合并区间#189.轮转数组#238.除自身以外数组的乘积#41.缺失的第一个正数6.矩阵#73.矩阵置零#54.螺旋矩阵#48.旋转图像#240.搜索二维矩阵II总结前言记录一些leetcode刷题中
Leetcode刷题记录31——旋转图像
张书名
Leetcode刷题记录leetcode算法职场和发展
题源:https://leetcode.cn/problems/rotate-image/description/?envType=study-plan-v2&envId=top-100-liked题目描述:思路一:解题思路:分两步完成旋转虽然“直接旋转”看起来有点抽象,但我们可以通过两个简单的步骤来实现顺时针旋转90度:✅步骤一:转置矩阵(Transpose)把矩阵的行和列交换,即matrix[
链表反转_leedcodeP206
我学上瘾了
LeedCode100热题链表网络redis
P206反转链表原题反转思路将链表反转的过程分为两个区域:未反转区(待处理)原链表中还没有处理(还没有反转指针方向)的部分,从current开始一直到链表尾部。已反转区(处理完成)已经反转过来的部分,从previous开始,指针方向已经翻转。我们以一个例子来解释:假设初始链表是:1->2->3->4->5->null初始状态:已反转区:null未反转区:1->2->3->4->5->null↑cu
Leetcode刷题记录28——缺失的第一个正数
张书名
Leetcode刷题记录leetcode算法职场和发展
题源:https://leetcode.cn/problems/first-missing-positive/description/?envType=study-plan-v2&envId=top-100-liked题目描述:思路一:核心思想:我们可以使用一个哈希集合(set)来记录nums中所有存在的整数,然后从1开始依次检查这些数字是否存在于集合中,一旦发现某个数字不存在,就返回它。这种方法
【软件设计师:复习】上午题核心知识点总结(一)
无心水
软考软件设计师计算机软件水平考试软件设计师上午题数据结构与算法操作系统数据库设计
一、数据结构与算法(高频)1.线性数据结构数组与链表数组:随机访问(O(1))、插入/删除(O(n))、内存连续。链表:单向链表、双向链表、循环链表;插入/删除(O(1))、随机访问(O(n))。典型问题:合并两个有序链表(LeetCode21)。链表反转(迭代/递归实现)。栈与队列栈:LIFO(后进先出),应用场景:函数调用栈、括号匹配。队列:FIFO(先进先出),应用场景:BFS遍历、任务调度
数据结构-链表刷题集(长期更新)
浅念同学
数据结构链表
文章目录1.leetcode2两数之和1.1解法一2.链表反转3.指定区间的链表翻转1.leetcode2两数之和1.1解法一题目及其相关实例如下要做这个题,首先我们要学会模拟竖式的加法,我们知道即使是java基本数据中最大的long类型范围也是有限的,那如果超出范围了我们该怎么办呢,我们就需要用字符串来模拟这个加法的过程思路分析:1.将字符串转化为字符数组进行存储(toCharArray方法)2
Leetcode刷题记录19——无重复字符的最长子串
张书名
Leetcode刷题记录leetcode算法职场和发展
题源:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-100-liked题目描述:思路一:通过两个指针,第一个指针指向字串的开头,第二个指针向后找,直到找到重复的字符或者到达字符的末尾,第二个指针每向后移动
【专题刷题】滑动窗口(四):
愚润泽
C++刷题专栏#统刷c++笔记Leetcode刷题
前言说明:本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法+本人屎山代码;(2)优质解法+优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话)文章中的理解仅为个人理解。如有错误,感谢纠错个人简介:努力学习ing本专栏:C++刷题专栏其他专栏:C语言入门基础,python入门基础,C++学习笔记,LinuxCSDN主页愚润泽视频30.串联
数据结构JAVA单链表
奔达的小鹿~
数据结构java
实现单链表的基本结构:创建空链表与C语言不同在节点是通过对象创建的而不是结构体添加数据至链尾根据序号排序插入通过循环比较节点序号大小将其插入相应位置删除节点修改节点内容查找倒数第n个节点链表显示输出链表所有节点内容信息查找链表中有效节点个数链表反转(1)通过创建新链表通过循环原链表,将每一次循环到的第一个节点将其插入新链表头节点后面(2)通过栈方式实现通过栈的先进后出特点反向输出节点话不多说上代码
【专题刷题】双指针(四):最接近的三数之和,接雨水
愚润泽
#统刷C++刷题专栏开发语言c++刷题Leetcode
前言说明:本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法+本人屎山代码;(2)优质解法+优质代码;(3)精益求精,更好的解法和独特的思想(如果有的话)文章中的理解仅为个人理解。如有错误,感谢纠错个人简介:努力学习ing本专栏:C++刷题专栏其他专栏:C语言入门基础,python入门基础,C++学习笔记,LinuxCSDN主页愚润泽视频16.最接
LeetCode刷题记录---贪心算法
#苦行僧
算法与数据结构贪心算法leetcode数据结构算法
每次刷到贪心算法题将在此博文更新~~~ 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。通过局部最优解慢慢地逼近全局最优解。难度题目简单实现strstr()简单买卖股票的最佳时机II简单分发饼干简单种花问题简单判断子序列中等跳跃游戏I中等跳跃游戏II<
LeetCode刷题记录---二分算法
#苦行僧
算法与数据结构二分法leetcode算法python
每次刷到二分算法题将在此博文更新~~~文章目录理论基础:二分查找:搜索插入位置:在排序数组中查找元素的第一个和最后一个位置:162.寻找峰值:2594.修车的最少时间875.爱吃香蕉的珂珂以下具体理论知识,请参考Carl哥整理的:点击进入【注:以下刷题顺序均按Carl哥的进行,Carl哥的微信公众号:代码随想录。欢迎大家关注!】理论基础:毕竟二分算法是比较基础的一个算法,还是得仔细弄清里面的边界处
leetcode刷题记录43-994. 腐烂的橘子
xianduan_
力扣刷题日记leetcode算法模拟
问题描述在给定的mxn网格grid中,每个单元格可以有以下三个值之一:值0代表空单元格;值1代表新鲜橘子;值2代表腐烂的橘子。每分钟,腐烂的橘子周围4个方向上相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。如果不可能,返回-1。示例示例1:输入:grid=[[2,1,1],[1,1,0],[0,1,1]]输出:4示例2:输入:grid=[[2,1,1],[0,1,1
leetcode刷题记录41-990. 等式方程的可满足性
xianduan_
力扣刷题日记leetcode算法
问题描述给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程equations[i]的长度为4,并采用两种不同的形式之一:"a==b"或"a!=b"。在这里,a和b是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回true,否则返回false。示例示例1:输入:["a==b","b!=a"]输出:false解释:如果我们指定,a=1
leetcode刷题记录33-969. 煎饼排序
xianduan_
力扣刷题日记leetcode算法
问题描述给你一个整数数组arr,请使用煎饼翻转完成对数组的排序。一次煎饼翻转的执行过程如下:选择一个整数k,1<=k<=arr.length反转子数组arr[0...k-1](下标从0开始)例如,arr=[3,2,1,4],选择k=3进行一次煎饼翻转,反转子数组[3,2,1],得到arr=[1,2,3,4]。以数组形式返回能使arr有序的煎饼翻转操作所对应的k值序列。任何将数组排序且翻转次数在10
leetcode刷题记录15-2225. 找出输掉零场或一场比赛的玩家
xianduan_
力扣刷题日记leetcodec++
问题描述给你一个整数数组matches其中matches[i]=[winneri,loseri]表示在一场比赛中winneri击败了loseri。返回一个长度为2的列表answer:answer[0]是所有没有输掉任何比赛的玩家列表。answer[1]是所有恰好输掉一场比赛的玩家列表。两个列表中的值都应该按递增顺序返回。注意:只考虑那些参与至少一场比赛的玩家。生成的测试用例保证不存在两场比赛结果相
leetcode刷题记录44-208. 实现 Trie (前缀树)
xianduan_
力扣刷题日记leetcode算法翻译
问题描述Trie(发音类似"try")或者说前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。请你实现Trie类:Trie()初始化前缀树对象。voidinsert(Stringword)向前缀树中插入字符串word。booleansearch(Stringword)如果字符串word在前缀树中,返回true(即,在检索之前已
最长回文子串(暴力枚举、动态规划、中心扩展,leetcode刷题记录)
g-zh
LeetCode刷题记录动态规划leetcode算法
5.最长回文子串给你一个字符串s,找到s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1maxLen&&isPalindrome(s,i,j)){//更新最长回文子串的起始位置和长度maxLen=currLen;start=i;}}}//返回最长回文子串returns.substr(star
数据结构与算法——数据结构4
写代码写到手抽筋
数据结构与算法数据结构
程序员没有稳定一说,目前学习数据结构,其实不难,最近在学习,系统性的总结下,便于后续复习和使用。主要是把线性表,全名为线性存储结构。使用线性表存储数据的方式可以这样理解,即“把所有数据用一根线儿串起来,再存储到物理空间中”。分为顺序表和单链表。顺序表单链表同时还要知道顺序表和链表的优缺点【待补充】还要知道链表反转,知道迭代法和递归法就可以【】还需要知道单链表相交的思路【】后边了解静态链表的原理静态
Python实现链表反转:迭代与递归双解法详解
达不溜先生 ୧⍢⃝୨
python数据结构链表算法leetcode
目录一、问题描述二、核心代码实现2.1迭代法实现迭代法中的prev初始值是None的原因:关键步骤图解2.2递归法实现递归法中要设置head.next=None的原因递归过程拆解三、方法对比与选择建议一、问题描述链表反转是数据结构中的基础算法问题,常见于面试和算法题库(如LeetCode#206)。要求将单向链表的节点顺序完全倒置二、核心代码实现2.1迭代法实现时间复杂度:O(n)空间复杂度:O(
LeetCode刷题记录No.1:两数之和
Cherish0719
leetcodeleetcodepython
#写在前面:代码和算法能力差,决定开始刷题为了找到好工作,坚持每天刷题打卡记录!1.两数之和给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[
jQuery 键盘事件keydown ,keypress ,keyup介绍
107x
jsjquerykeydownkeypresskeyup
本文章总结了下些关于jQuery 键盘事件keydown ,keypress ,keyup介绍,有需要了解的朋友可参考。
一、首先需要知道的是: 1、keydown() keydown事件会在键盘按下时触发. 2、keyup() 代码如下 复制代码
$('input').keyup(funciton(){  
AngularJS中的Promise
bijian1013
JavaScriptAngularJSPromise
一.Promise
Promise是一个接口,它用来处理的对象具有这样的特点:在未来某一时刻(主要是异步调用)会从服务端返回或者被填充属性。其核心是,promise是一个带有then()函数的对象。
为了展示它的优点,下面来看一个例子,其中需要获取用户当前的配置文件:
var cu
c++ 用数组实现栈类
CrazyMizzz
数据结构C++
#include<iostream>
#include<cassert>
using namespace std;
template<class T, int SIZE = 50>
class Stack{
private:
T list[SIZE];//数组存放栈的元素
int top;//栈顶位置
public:
Stack(
java和c语言的雷同
麦田的设计者
java递归scaner
软件启动时的初始化代码,加载用户信息2015年5月27号
从头学java二
1、语言的三种基本结构:顺序、选择、循环。废话不多说,需要指出一下几点:
a、return语句的功能除了作为函数返回值以外,还起到结束本函数的功能,return后的语句
不会再继续执行。
b、for循环相比于whi
LINUX环境并发服务器的三种实现模型
被触发
linux
服务器设计技术有很多,按使用的协议来分有TCP服务器和UDP服务器。按处理方式来分有循环服务器和并发服务器。
1 循环服务器与并发服务器模型
在网络程序里面,一般来说都是许多客户对应一个服务器,为了处理客户的请求,对服务端的程序就提出了特殊的要求。
目前最常用的服务器模型有:
·循环服务器:服务器在同一时刻只能响应一个客户端的请求
·并发服务器:服
Oracle数据库查询指令
肆无忌惮_
oracle数据库
20140920
单表查询
-- 查询************************************************************************************************************
-- 使用scott用户登录
-- 查看emp表
desc emp
ext右下角浮动窗口
知了ing
JavaScriptext
第一种
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/
浅谈REDIS数据库的键值设计
矮蛋蛋
redis
http://www.cnblogs.com/aidandan/
原文地址:http://www.hoterran.info/redis_kv_design
丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。
maven编译可执行jar包
alleni123
maven
http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven
<build>
<plugins>
<plugin>
<artifactId>maven-asse
人力资源在现代企业中的作用
百合不是茶
HR 企业管理
//人力资源在在企业中的作用人力资源为什么会存在,人力资源究竟是干什么的 人力资源管理是对管理模式一次大的创新,人力资源兴起的原因有以下点: 工业时代的国际化竞争,现代市场的风险管控等等。所以人力资源 在现代经济竞争中的优势明显的存在,人力资源在集团类公司中存在着 明显的优势(鸿海集团),有一次笔者亲自去体验过红海集团的招聘,只 知道人力资源是管理企业招聘的 当时我被招聘上了,当时给我们培训 的人
Linux自启动设置详解
bijian1013
linux
linux有自己一套完整的启动体系,抓住了linux启动的脉络,linux的启动过程将不再神秘。
阅读之前建议先看一下附图。
本文中假设inittab中设置的init tree为:
/etc/rc.d/rc0.d
/etc/rc.d/rc1.d
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc
Spring Aop Schema实现
bijian1013
javaspringAOP
本例使用的是Spring2.5
1.Aop配置文件spring-aop.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmln
【Gson七】Gson预定义类型适配器
bit1129
gson
Gson提供了丰富的预定义类型适配器,在对象和JSON串之间进行序列化和反序列化时,指定对象和字符串之间的转换方式,
DateTypeAdapter
public final class DateTypeAdapter extends TypeAdapter<Date> {
public static final TypeAdapterFacto
【Spark八十八】Spark Streaming累加器操作(updateStateByKey)
bit1129
update
在实时计算的实际应用中,有时除了需要关心一个时间间隔内的数据,有时还可能会对整个实时计算的所有时间间隔内产生的相关数据进行统计。
比如: 对Nginx的access.log实时监控请求404时,有时除了需要统计某个时间间隔内出现的次数,有时还需要统计一整天出现了多少次404,也就是说404监控横跨多个时间间隔。
Spark Streaming的解决方案是累加器,工作原理是,定义
linux系统下通过shell脚本快速找到哪个进程在写文件
ronin47
一个文件正在被进程写 我想查看这个进程 文件一直在增大 找不到谁在写 使用lsof也没找到
这个问题挺有普遍性的,解决方法应该很多,这里我给大家提个比较直观的方法。
linux下每个文件都会在某个块设备上存放,当然也都有相应的inode, 那么透过vfs.write我们就可以知道谁在不停的写入特定的设备上的inode。
幸运的是systemtap的安装包里带了inodewatch.stp,位
java-两种方法求第一个最长的可重复子串
bylijinnan
java算法
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class MaxPrefix {
public static void main(String[] args) {
String str="abbdabcdabcx";
Netty源码学习-ServerBootstrap启动及事件处理过程
bylijinnan
javanetty
Netty是采用了Reactor模式的多线程版本,建议先看下面这篇文章了解一下Reactor模式:
http://bylijinnan.iteye.com/blog/1992325
Netty的启动及事件处理的流程,基本上是按照上面这篇文章来走的
文章里面提到的操作,每一步都能在Netty里面找到对应的代码
其中Reactor里面的Acceptor就对应Netty的ServerBo
servelt filter listener 的生命周期
cngolon
filterlistenerservelt生命周期
1. servlet 当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后调用它的service方法处理请求。当第二次请求这个servlet资源时,servlet容器就不在创建实例,而是直接调用它的service方法处理请求,也就是说
jmpopups获取input元素值
ctrain
JavaScript
jmpopups 获取弹出层form表单
首先,我有一个div,里面包含了一个表单,默认是隐藏的,使用jmpopups时,会弹出这个隐藏的div,其实jmpopups是将我们的代码生成一份拷贝。
当我直接获取这个form表单中的文本框时,使用方法:$('#form input[name=test1]').val();这样是获取不到的。
我们必须到jmpopups生成的代码中去查找这个值,$(
vi查找替换命令详解
daizj
linux正则表达式替换查找vim
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
字符串匹配
pattern是需要匹配的字符串,例如:
1: /abc<En
对网站中的js,css文件进行打包
dcj3sjt126com
PHP打包
一,为什么要用smarty进行打包
apache中也有给js,css这样的静态文件进行打包压缩的模块,但是本文所说的不是以这种方式进行的打包,而是和smarty结合的方式来把网站中的js,css文件进行打包。
为什么要进行打包呢,主要目的是为了合理的管理自己的代码 。现在有好多网站,你查看一下网站的源码的话,你会发现网站的头部有大量的JS文件和CSS文件,网站的尾部也有可能有大量的J
php Yii: 出现undefined offset 或者 undefined index解决方案
dcj3sjt126com
undefined
在开发Yii 时,在程序中定义了如下方式:
if($this->menuoption[2] === 'test'),那么在运行程序时会报:undefined offset:2,这样的错误主要是由于php.ini 里的错误等级太高了,在windows下错误等级
linux 文件格式(1) sed工具
eksliang
linuxlinux sed工具sed工具linux sed详解
转载请出自出处:
http://eksliang.iteye.com/blog/2106082
简介
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾
Android应用程序获取系统权限
gqdy365
android
引用
如何使Android应用程序获取系统权限
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1. 在应用程序的AndroidManifest.xml中的manifest节点
HoverTree开发日志之验证码
hvt
.netC#asp.nethovertreewebform
HoverTree是一个ASP.NET的开源CMS,目前包含文章系统,图库和留言板功能。代码完全开放,文章内容页生成了静态的HTM页面,留言板提供留言审核功能,文章可以发布HTML源代码,图片上传同时生成高品质缩略图。推出之后得到许多网友的支持,再此表示感谢!留言板不断收到许多有益留言,但同时也有不少广告,因此决定在提交留言页面增加验证码功能。ASP.NET验证码在网上找,如果不是很多,就是特别多
JSON API:用 JSON 构建 API 的标准指南中文版
justjavac
json
译文地址:https://github.com/justjavac/json-api-zh_CN
如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 就是你的 anti-bikeshedding 武器。
通过遵循共同的约定,可以提高开发效率,利用更普遍的工具,可以是你更加专注于开发重点:你的程序。
基于 JSON API 的客户端还能够充分利用缓存,
数据结构随记_2
lx.asymmetric
数据结构笔记
第三章 栈与队列
一.简答题
1. 在一个循环队列中,队首指针指向队首元素的 前一个 位置。
2.在具有n个单元的循环队列中,队满时共有 n-1 个元素。
3. 向栈中压入元素的操作是先 移动栈顶指针&n
Linux下的监控工具dstat
网络接口
linux
1) 工具说明dstat是一个用来替换 vmstat,iostat netstat,nfsstat和ifstat这些命令的工具, 是一个全能系统信息统计工具. 与sysstat相比, dstat拥有一个彩色的界面, 在手动观察性能状况时, 数据比较显眼容易观察; 而且dstat支持即时刷新, 譬如输入dstat 3, 即每三秒收集一次, 但最新的数据都会每秒刷新显示. 和sysstat相同的是,
C 语言初级入门--二维数组和指针
1140566087
二维数组c/c++指针
/*
二维数组的定义和二维数组元素的引用
二维数组的定义:
当数组中的每个元素带有两个下标时,称这样的数组为二维数组;
(逻辑上把数组看成一个具有行和列的表格或一个矩阵);
语法:
类型名 数组名[常量表达式1][常量表达式2]
二维数组的引用:
引用二维数组元素时必须带有两个下标,引用形式如下:
例如:
int a[3][4]; 引用:
10点睛Spring4.1-Application Event
wiselyman
application
10.1 Application Event
Spring使用Application Event给bean之间的消息通讯提供了手段
应按照如下部分实现bean之间的消息通讯
继承ApplicationEvent类实现自己的事件
实现继承ApplicationListener接口实现监听事件
使用ApplicationContext发布消息