- java 面试题记录
万变不离其宗_8
笔记javaspringboot开发语言
1.Redis的持久化机制RDB和AOF的优缺点分别是什么?对比项RDB(快照持久化)AOF(日志追加持久化)持久化机制定时生成内存数据的二进制压缩快照(全量数据)。记录所有写操作命令(文本格式),重启时重放命令恢复数据。文件格式紧凑的二进制文件(dump.rdb)。文本文件(appendonly.aof),可读性强。优点✅恢复速度快(直接加载二进制文件)。✅文件体积小,适合备份。✅对性能影响较小
- 列表,元组,集合,字符串的复习——python
晨曦543210
python开发语言
前面我们已经学习了数列,元组,集合,字符串。怕大家忘记,我们来复习一下吧。一、以下是关于列表、元组、集合、字符串的复习总结:1、列表特性:可变:可动态增删改元素。有序:元素按插入顺序排列,允许重复。语法:用[]表示,如[1,2,"a"]。常用操作:#增删改list.append(3)#末尾添加元素list.insert(0,"x")#插入元素list.pop(1)#删除索引1的元素list[0]=
- e和e.control
ddfa1234
microsoftwindows
importfletasftdefmain(page:ft.Page):defitems(count):items=[]foriinrange(1,count+1):items.append(ft.Container(content=ft.Text(value=str(i)),alignment=ft.alignment.center,width=50,height=50,bgcolor=ft.c
- Python基础题
当归1024
pythonpythonwindows开发语言
问题1编写一个程序,找到2000年至3200年(包括在内)中所有可被7整除但不能被5整除的所有数字,得到的数字按逗号分隔,打印在一行上。#编写一个程序,找到2000年至3200年(包括在内)中所有可被7整除但不能被5整除的所有数字,得到的数字按逗号分隔,打印在一行上。result=[]foriinrange(2000,3201):ifi%7==0andi%5!=0:result.append(st
- C文件输入输出函数实例
etp_
c语言服务器前端
下面使用一个函数示例说明这些函数的用法。该程序把一系列文件中的内容附加在另一个文件的末尾。#include#include#include#defineBUFSIZE4096#defineSLEN81voidappend(FILE*source,FILE*dest);char*s_get(char*st,intn);intmain(void){FILE*fa,*fs;//fa指向目标文件,fs指向
- Python列表常用函数(详解)
宇文月
python列表数据分析
列表Python中列表是可以修改的,而列表元组和字典是不可以修改的,这是列表跟元组和字典相比最主要的区别。以下是Python中列表的使用方法用法描述list.append(x)把x元素添加到列表末尾list.extend(L)将L列表添加到列表末尾,类似于合并list.remove(x)删除列表中第一个值为x的元素,如果没有,则返回一个错误list.insert(i,x)在索引为i的元素之前插入x
- Ubuntu 下创建具有 root 权限用户
编程就是如此
Linux从0到1ubuntulinux
一、前言在Ubuntu系统中,创建新的用户,并且为该用户赋予root权限。二、操作步骤(一)创建新用户sudoadduseruser1(二)为新用户添加sudo权限sudousermod-aGsudouser1usermod:这是一个用于修改用户账户信息的命令。-aG:这是usermod命令的选项,-a表示追加(append),-G表示将用户添加到指定的用户组。sudo:这是一个用户组的名称,在U
- Logback 实现不同包的日志记录到不同文件
jaymou
Springlogbackjava开发语言
核心通过合理配置多个appender来定义不同的日志输出目的地通过logger元素将不同的包与对应的appender关联起来同时利用additivity属性控制日志的传递,从而实现精准的日志输出管理。additivity属性控制日志传递:additivity属性决定了该logger的日志是否会传递给父logger。将其设置为false时,该logger的日志只会输出到与之关联的appender,不
- uniapp选择文件使用formData格式提交数据
会说法语的猪
前端uniapp后端uni-app前端javascript
1.Vue实现在vue项目中,我们有个文件,和一些其他字段数据需要提交的时候,我们都是使用axios设置请求头中的Content-Type:multipart/form-data,然后newFormData的方式来进行提交。方式如下:constsendRequest=()=>{constformData=newFormData()formData.append('name',data.value.
- string模拟实现-C++
·前路漫漫亦灿灿
c++开发语言
一、目标string函数是C++中常用的库函数,在string中有许多操作函数,对于一些常用的操作函数,我们可以自己模拟实现一下。实现的操作有:迭代器构造函数拷贝构造函数析构函数赋值运算符重载c_str()size()[]运算符重载reserve(size_tn)resize(size_tn)push_back(charch)append(constchar*str)+=运算符重载insert(s
- 杨辉三角--python五种实现方式
孙忠昊
python习题杨辉三角
杨辉三角-----基本实现num=10#标记打印多少行YHtriangle=[]#创建一个空列表foriinrange(num):#打印的行数YHtriangle.append([1]*(i+1))#根据杨辉三角性质,先开括出行内的个数,填充1.forjinrange(1,i):#分别计算每个元素的数值,头尾不包括YHtriangle[i][j]=YHtriangle[i-1][j-1]+YHtr
- jQuery - 添加元素
宇哥资料
jQueryjquery前端javascript
通过jQuery,可以很容易地添加新元素/内容。添加新的HTML内容我们将学习用于添加新内容的四个jQuery方法:append()-在被选元素的结尾插入内容prepend()-在被选元素的开头插入内容after()-在被选元素之后插入内容before()-在被选元素之前插入内容jQueryappend()方法jQueryappend()方法在被选元素的结尾插入内容(仍然在该元素的内部)。实例$(
- C++模拟实现string类
安河桥畔
C++c++开发语言
模拟实现string类一、构造相关构造函数拷贝构造函数析构函数赋值运算符重载二、迭代器定义正向迭代器三、容量相关size、lenthcapacityemptyclearresizereserve四、元素访问"[]"符合重载五、元素修改+=⭐appendpush_backinserteraseswap六、string类操作c_stringfindrfindsubstr七、比较大小compare'>'
- Sqoop-试题
minaMoonGirl
sqoophadoophive
一、试题部分使用Sqoop导入工具,要求只追加导入检查列中时间晚于或等于last-value的记录,则incremental模式应该设置为____?A.mergeB.lastmodifiedC.last-valueD.appendsqoop导出采用调用模式时,以下说法正确的是?A.使用--call参数调用存储过程B.存储过程需要提前在hive中创建C.存储过程需要提前在hdfs中创建D.使用--c
- Chapter 24: Typelists_《C++ Templates》notes
郭涤生
c/c++c++笔记开发语言
Typelists1.AnatomyofaTypelist2.AccessingElements3.AppendingTypes4.ReversingaTypelist5.LengthofTypelist6.Compile-TimeTestingwith`main`Multiple-ChoiceQuestionsDetailedDesignQuestionsAnswers&Explanations
- Leetcode刷题笔记1 图论part03
平乐君
leetcode笔记图论
卡码网101孤岛总面积fromcollectionsimportdequedirections=[[0,1],[1,0],[0,-1],[-1,0]]count=0defmain():globalcountn,m=map(int,input().split())grid=[]for_inrange(n):grid.append(list(map(int,input().split())))fori
- leetcode 20.有效括号
ranzhiyimu
leetcodepython算法
20.有效的括号-力扣(LeetCode)classSolution:defisValid(self,s:str)->bool:stack=[]foriins:ifiin('(','{','['):stack.append(i)elifiin(')'):#这种情况是栈弹出元素为空时候,右半部分的括号多出来一些比如:[()]}ifnotstack:returnFalsetemp=stack.pop(
- python bytes转float
越甲八千
【Python】python
defBytes2Float32Slice(self,feature):x=[]withopen("liwei.txt","w")asf:foriinrange((len(feature)//4)):data=feature[i*4:(i*4)+4]a=struct.unpack('f',data)f.write(str(a))x.append(float(a[0]))#print(a,"----
- 图论 | 98. 所有可达路径
Lchiyu
图论
98.所有可达路径题目链接:98.所有可达路径思路先创建邻接矩阵,再深搜写代码是需要注意的是acm格式,输入的格式要转化为int,输出要转化为str,用map()实现。dfsdefdfs(grid,node,n,path,res):ifnode==n:res.append(path[:])returnforjinrange(len(grid[0])):ifgrid[node-1][j]==1:pa
- 算法-双指针、BFS与图论-1101. 献给阿尔吉侬的花束
哆啦A梦阳
算法设计与分析宽度优先图论算法
题目思路BFS可以搜环,有环也没有关系,如果有解:一定可以找到一条最小步数的合法的路径Python中collections模块的详细用法介绍_pythoncollections-CSDN博客引用自上述文章:append(x):添加x到右端。appendleft(x):添加x到左端。clear():移除所有元素,使其长度为0.copy():创建一份浅拷贝。3.5新版功能.count(x):计算deq
- python实用技巧总结
在街角开家咖啡店
python笔记经验分享
学习Python时,掌握一些小技巧可以显著提高效率和代码质量。以下是一些实用的建议:---**1.高效利用基础语法**-**列表推导式**:简化循环和条件判断的代码。```python#普通循环squares=[]forxinrange(10):squares.append(x**2)#列表推导式squares=[x**2forxinrange(10)]```-**使用`enumerate`**:
- 【C++】string类讲解:含常用接口使用及原理模拟实现
White の algo
C++初阶c++开发语言
目录string介绍为什么要学习string类?学习方法:auto和范围forauto概念及使用注意:范围forstring类常见接口说明构造函数析构函数size()和capacity()reserve()和resize()empty()和clear()operator[]和at()begin()、end()和rbegin()、rend()push_back()append()insert()op
- python实现成语接龙
Camellia 泡泡
笔记python
first_idiom='万事如意'end_str=first_idiom[-1]new_li=[first_idiom]li=['发愤图强','笑容满面','意气风发','强颜欢笑']forindexinrange(len(li)):foriinli:ifend_str==i[0]:new_li.append(i)li.remove(i)end_str=i[-1]breakprint(new_l
- 代码随想录算法训练营DAY59|110.字符串接龙、105.有向图的完全可达性、106. 岛屿的周长
阿緑
代码随想录打卡算法
110.字符串接龙fromcollectionsimportdequedeffindshortestpath(strlist,beginstr,endstr):que=deque()visited={}que.append(beginstr)visited[beginstr]=1result=0whileque:cur=que.popleft()result=visited[cur]foriinr
- 6.5840 Lab 2: Key/Value Server
idMiFeng
githubgo
在这个实验中,你将构建一个单机版的键值服务器,该服务器能够确保每个操作在网络故障的情况下依然能被精确地执行一次,并且这些操作是线性化的。在后续实验中,你将实现类似的服务器以支持服务器崩溃的情况下进行复制。客户端可以向键值服务器发送三种不同的RPC调用:Put(key,value)、Append(key,arg)和Get(key)。服务器维护一个内存中的键值映射,键和值均为字符串:Put(key,v
- CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些
清水迎朝阳
CEF应用CEF交互注入函数注册CPP
一、前序知识1、设置单进程模式,方便调试voidClientApp::OnBeforeCommandLineProcessing(constCefString&process_type,CefRefPtrcommand_line){if(process_type.empty()){//cef在debug模式下有问题#ifdef_DEBUGcommand_line->AppendSwitchWith
- Python列表2
cfjybgkmf
Pythonpython开发语言
print("——————————列表的相关操作————————————")'''lst.append('x')在列表lst最后增加一个元素lst.insert(index,'x')在列表中第index位置增加一个元素lst.clear()清除列表lst中所有元素lst.pop(index)将列表lst中第index位置的元素取出,并从列表中将其删除lst.remove('x')将列表lst中出现
- QT中Xml及查看调试中容器的内部数据
苜柠
QTqt
voidChuankouUI::writeFile(){QFilefile(filePath);if(!file.open(QIODevice::WriteOnly)){emiterrData("打开配置文件失败");return;}QDomDocumentdoc;//添加根节点QDomElementroot=doc.createElement("config");doc.appendChild(
- 优化Redis AOF重写配置:解决AOF文件过大的终极指南
冯·诺依曼的
redis数据库缓存云计算
核心配置参数解析与优化以下配置参数位于Redis配置文件/etc/redis.conf中,用于控制AOF持久化与重写行为。通过合理调整这些参数,可显著减少AOF文件体积并提升性能。1.appendfsync:AOF文件同步策略默认值:everysec修改建议:appendfsyncno作用:控制AOF日志同步到磁盘的频率。everysec(默认):每秒同步一次,平衡性能与数据安全。no:由操作系统
- Python中 rstrip()、 lstrip()、 strip() 的用法和区别
一只小小的土拨鼠
深度学习面试前端javapython深度学习
目录:题目一:Python中rstrip()、lstrip()、strip()的用法和区别题目二:python中append()、expend()函数的用法和区别题目三:Python中zip()、zip(*zipped)、*zip()函数的用法和区别题目一:Python中rstrip()、lstrip()、strip()的用法和区别考点这三个函数都是去除头尾字符、空白符的函数strip:用来去除头
- 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发布消息