- 大数据(4.5)Hive聚合函数深度解析:从基础统计到多维聚合的12个生产级技巧
一个天蝎座 白勺 程序猿
大数据开发从入门到实战合集大数据hivehadoop
目录背景一、Hive聚合函数分类与语法1.基础聚合函数2.高级聚合函数二、6大核心场景与案例场景1:基础统计(SUM/COUNT)场景2:多维聚合(GROUPINGSETS)场景3:层次化聚合(ROLLUP)场景4:高效去重统计(HyperLogLog)场景5:分组排序(ROW_NUMBER)场景6:累计计算(窗口函数)三、避坑指南与性能优化1.常见错误2.数据倾斜解决方案3.参数调优模板四、总结
- 判断一个数是否是质数 python
一只小辣鸡
算法
质数primenumber#!/usr/bin/python3#-*-coding:UTF-8-*-while(1):num=int(input("Inputanumber:"))#输入ifnum>1:foriinrange(2,num):#从2开始依此遍历if(num%i==0):print(str(num)+"不是质数")breakelse:#如果for循环遍历到最后一个数字num结束prin
- 【TS学习】(5)装箱和拆箱
yanxy512
TS学习学习typescript前端javascript
在JavaScript和TypeScript中,装箱(Boxing)和拆箱(Unboxing)是与原始类型(PrimitiveTypes)和包装对象(WrapperObjects)相关的概念。它们描述了原始值如何被转换为对象形式,以及对象形式的值如何被还原为原始值。1.装箱(Boxing)(1)定义装箱是指将原始值(如string、number、boolean等)临时转换为其对应的包装对象(如St
- GaussDB嵌入式命令GET DESCRIPTOR
如清风一般
gaussdb数据库
GaussDB嵌入式命令GETDESCRIPTOR功能描述检索查询结果集的信息,并且将它存储到宿主变量中。在使用该命令将信息传递给宿主语言变量之前通常使用FETCH或者SELECT填充标识符区域。该命令有两种形式:检索描述符的“头部”项,适用于全面查看结果集。列号作为附加参数,检索特定列的信息。语法格式GETDESCRIPTORdescriptor_nameVALUEcolumn_number:c
- 力扣刷题-热题100题-第28题(c++、python)
weixin_44505472
leetcodec++算法python
2.两数相加-力扣(LeetCode)https://leetcode.cn/problems/add-two-numbers/description/?envType=study-plan-v2&envId=top-100-liked常规法根据加法的规则,设置一个记位数,初始为0,遍历两个链表,相同位数相加并加上记位数得到最终的值,以个位数作为当前位数的和,十位数更新记位数。//c++/***D
- NSSCTF_crypto_[GKCTF 2021]RRRRsa
岁岁的O泡奶
python密码学crypto算法rsa费马小定理二项式定理
NSSCTF_crypto_[GKCTF2021]RRRRsa提示:费马小定理二项式定理题目:fromCrypto.Util.numberimport*fromgmpy2importgcdflag=b'xxxxxxxxxxxxx'p=getPrime(512)q=getPrime(512)m=bytes_to_long(flag)n=p*qe=65537c=pow(m,e,n)print('c={
- Three.js 数学工具:构建精确3D世界的基石
布兰妮甜
Three.js进阶之旅three.jsjavascript3d数学工具
文章目录前言一、向量(Vectors)二、矩阵(Matrices)三、四元数(Quaternions)四、欧拉角(EulerAngles)五、颜色(Colors)六、几何体生成器(GeometryGenerators)七、随机数生成(RandomNumberGeneration)八、时间和动画(TimeandAnimation)九、光线追踪与碰撞检测(RayTracingandCollisionD
- 问题:JavaScript实现一个add方法,完成两个大数相加?
太阳与星辰
前端面试javascript前端大数问题bigint
问题:JavaScript实现一个add方法,完成两个大数相加?1.前言2.使用BigInt3.字符串相加法3.1思路3.2代码实现4.使用第三方库(如big.js或bignumber.js)1.前言在JavaScript中,直接使用基本的数据类型(如Number)进行大数相加时,由于JavaScript的Number类型是基于IEEE754标准的双精度64位浮点格式,其最大安全整数是2^53-1
- Redis 限流
百里自来卷
redisjunit数据库
Redis可以用来做限流,常见的限流实现方式包括以下几种:1.固定窗口计数限流适用于简单的请求限流,比如每秒最多允许100次请求。实现方式:设定一个键(Key),比如rate_limit:user_123在固定时间窗口(如1秒)内累加请求计数若计数超过阈值,则拒绝请求示例代码(使用Lua脚本实现原子操作):localkey=KEYS[1]--限流的Redis键locallimit=tonumber
- 冒泡排序:经典算法的深度解析与TypeScript实现
念九_ysl
算法算法typescript排序算法
/***基础冒泡排序实现(升序)*@paramarr待排序数组*@returns已排序数组*/functionbubbleSortBasic(arr:number[]):number[]{constn=arr.length;for(leti=0;iarr[j+1]){//交换相邻元素[arr[j],arr[j+1]]=[arr[j+1],arr[j]];}}}returnarr;}/***优化版冒
- vue组件通信---子传父(ref方式)
zyy_wx
vue.jsjavascript前端
描述:1.在子组件标签上使用“ref”获取子组件的dom信息;2.在子组件中调用其他函数,使用this.$emit(‘事件名’,参数)的方法触发事件;3.子组件的参数被传递出去,父组件接收到参数;子组件son.vue代码如下:sendnumberexportdefault{name:'son',data(){return{num:10}},methods:{sendnumber(){//this.
- 【C++】打印输出,换行的3种方式
四维碎片
C++c++开发语言
1.使用std::endl2.使用\n进行换行3.使用<<运算符分开两个输出操作//使用std::endl:intnumber=42;std::cout<<"Thevalueofnumberis:"<
- Django中drf动态过滤查询
东木月
Djangodjangopython后端
Django中drf动态过滤查询1、page.py代码:fromrest_framework.paginationimportPageNumberPaginationclassUserPagination(PageNumberPagination):"""用户分页器"""page_size=10#默认的页面数据数量pag
- HarmonyOS NEXT 中级开发笔记:ArkTS在数据资讯类应用的开发实践
harmonyos-next
最近使用ArkTS应用开发语言开发了一款金融资讯分析类APP,针对HarmonyOSNEXT平台特性做了深度适配。相较于传统开发方式,ArkTS在数据处理和展示方面展现出独特优势。数据模型构建ArkTS的静态类型系统为金融数据结构提供了严谨的类型保障:typescriptinterfaceFinancialData{stockCode:string;currentPrice:number;chan
- HarmonyOS NEXT 中级开发笔记:出差日程应用ArkTS实践
harmonyos-next
最近在适配HarmonyOSNEXT系统的出差日程应用,尝试用ArkTS应用开发语言重构原有功能。作为刚接触鸿蒙生态的开发者,记录一些实际开发中的小心得。ArkTS的静态类型检查确实比原生TS更严格,刚开始需要适应。比如定义日程实体时,必须显式声明类型:typescript//日程项数据模型classScheduleItem{id:number=0;title:string='';location
- 一些练习 C 语言的小游戏
鹿屿二向箔
c语言开发语言
一些练习C语言的小游戏—1.猜数字游戏描述:程序随机生成一个数字,玩家需要猜测这个数字,并根据提示(太高或太低)调整猜测,直到猜中为止。功能点:随机数生成(rand()函数)。循环和条件判断。用户输入处理。示例代码框架:#include#include#includeintmain(){intnumber,guess,attempts=0;srand(time(0));//初始化随机数种子numb
- el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
前端小趴菜05
vue.jselementuicss
光标上移设置el-input的type='number'后,只能输入数字,输入中文后会自动清空,但是会出现一个问题:【光标会上移,如下图】解决方法:修改样式注意:需要使用样式穿透:deep()/*解决el-input设置类型为number时,中文输入法光标上移问题*/:deep(.el-input__inner){line-height:1px!important;}输入框后面会出现上下箭头设置e
- 前端解决get请求传递数组
前端小趴菜05
前端
直接使用get请求传递数组,会报错解决方案1.传递字符串,将数组转为字符串进行传递,后端也以字符串接受//使用join方法将数组转为字符串letdata=[1,2,3,4,5]letparams=data.join(',')//1,2,3,4,52.将数组转换为查询字符串格式,并附加到URL上constarrayToQueryString=(data:number[],key:string)=>{
- 蓝桥杯单片机刷题——E2PROM记录开机次数
lzb759
一个月备赛蓝桥杯单片机蓝桥杯单片机
设计要求使用E2PROM完成数据记录功能,单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1,按下按键S4,串口发送复位次数。串口发送格式如下:Number:1备注:单片机IRC振荡器频率设置为12MHz。按键模式:BTN;扩展方式:IO模式。串口通信波特率设置为9600。代码:sys.h#ifndef__SYS_H__#define__SYS_H__#include#include"
- Python容器详解:从字符串到字典的完整指南
程序员
Python容器详解:从字符串到字典的完整指南大家好!今天我们来详细了解Python中的各种容器类型,包括字符串、列表、元组和字典。让我们一起探索这些重要的数据结构!1.字符串操作下标和切片字符串支持通过下标访问单个字符,也支持切片操作获取子串:email="888666@qq.com"#获取QQ号qq_number=email[:6]#888666#获取域名domain=email[7:]#qq
- 【深度学习】yolov8使用的一个小warning
weixin_40293999
深度学习yolov深度学习YOLO人工智能
PSD:\code\JerseyNumberTrackerStrategy>&D:/Users/51442/anaconda3/python.exed:/code/JerseyNumberTrackerStrategy/classes/Yolov8Detector.pyWARNING⚠️imgsz=[760,2306]mustbemultipleofmaxstride32,updatingto[7
- 编码二进制表示
森焱森
c语言网络架构算法
在单片机编程中,使用C语言表示二进制数通常有以下几种方式:1.使用二进制常量(部分编译器支持)一些现代的C语言编译器(如GCC)支持二进制常量的直接表示。例如:unsignedintbinary_number=0b10101010;//二进制表示•0b或0B是二进制前缀,表示后面的数字是二进制格式。•这种方式非常直观,但在某些编译器中可能不支持。2.使用十六进制或八进制表示如果编译器不支持二进制常
- 封装了一个支持多个分区的iOS自适应动态宽度layout
刘小哈哈哈
ioscocoamacos
支持多分区的动态自适应宽度layout,完善了之前只支持一个分区的布局,这里直接上代码,可以用来在商品sku,搜索记录,编辑tab等场景的使用,灵活性强,支持代理配置////LBNumberCenterEditTabLayout.m////Createdbyliuboon26.3.25.//#importNS_ASSUME_NONNULL_BEGIN@protocolLBNumberCenterE
- [LeetCode] 72. Edit Distance 编辑距离 @python
冷的太明显
LeetCodepythonleetcodeeditdistan编辑距离
DescriptionGiventwowordsword1andword2,findtheminimumnumberofoperationsrequiredtoconvertword1toword2.Youhavethefollowing3operationspermittedonaword:InsertacharacterDeleteacharacterReplaceacharacter给定两个
- 蓝桥杯python编程每日刷题day one
姜威鱼
蓝桥杯
小知识点:round(number,7)可以来实现对数的包留7位小数也可以number=3.14159265358new_number=“{:.7f}".format(number)题目1:判断闰年(是4的倍数而不是100的倍数,或者是400的倍数)(1)代码:a=int(input())if(a%4==0anda%100!=0)or(a%400==0):print("yes")else:prin
- python水果超市管理系统_java实现水果超市管理系统
铁帅
python水果超市管理系统
本文为大家分享了java实现水果超市管理系统的具体代码,供大家参考,具体内容如下首先建立水果类的界面publicclassFruit{//定义IDprivateStringid;//定义名称privateStringname;//定义价格privateintprice;//定义单位privateStringunit;//定义数量privateintnumber;publicFruit(String
- 用Android studio 做出QQ登录界面
puerhuo
androidstudioandroidstudio
1.布局界面代码如下:
- 分页查询原理与优化方案完全指南
遥不可及~~斌
数据库数据库sql
分页查询原理与优化方案完全指南一、分页查询基础原理1.1传统分页实现方式分页查询的核心目的是将大数据集分割成多个小块进行展示,最常见的实现方式是使用LIMIT-OFFSET语法:--基础分页查询SELECT*FROMtable_nameORDERBYidLIMITpage_sizeOFFSET(page_number-1)*page_size;工作原理:数据库执行全表扫描或索引扫描跳过前OFFSE
- Windows 图形显示驱动开发-WDDM 2.7功能-MCDM KM 驱动程序实现指南(五)
程序员王马
windows图形显示驱动开发驱动开发
驱动程序功能要求必须将以下DXGK_DRIVERCAPS结构成员设置为适当的值:HighestAcceptableAddress如果此地址小于驱动程序加载期间存在的系统内存的最高物理地址,则加载将失败。InterruptMessageNumber根据需要设置。SchedulingCaps请参阅SchedulingCaps要求。MemoryManagementCaps请参阅MemoryManagem
- Oracle数据库数据编程SQL<2.1 DDL、DCL表、列及约束>
Tyler先森
Oracle数据库oraclesql
目录一、对表的操作(一)复制表1、语法2、练习3、仅复制表格式--在where后加一个不成立的条件(二)自建表1、数据类型(1)字符类型:char2、varchar/varchar2char(数)固定长度类型varchar/varchar2(数)可变长度类型(2)数值类型:number、intnumber(数1,数2)int(数)(3)日期类型:date、timestampdate不用加长度tim
- Enum 枚举
120153216
enum枚举
原文地址:http://www.cnblogs.com/Kavlez/p/4268601.html Enumeration
于Java 1.5增加的enum type...enum type是由一组固定的常量组成的类型,比如四个季节、扑克花色。在出现enum type之前,通常用一组int常量表示枚举类型。比如这样:
public static final int APPLE_FUJI = 0
- Java8简明教程
bijian1013
javajdk1.8
Java 8已于2014年3月18日正式发布了,新版本带来了诸多改进,包括Lambda表达式、Streams、日期时间API等等。本文就带你领略Java 8的全新特性。
一.允许在接口中有默认方法实现
Java 8 允许我们使用default关键字,为接口声明添
- Oracle表维护 快速备份删除数据
cuisuqiang
oracle索引快速备份删除
我知道oracle表分区,不过那是数据库设计阶段的事情,目前是远水解不了近渴。
当前的数据库表,要求保留一个月数据,且表存在大量录入更新,不存在程序删除。
为了解决频繁查询和更新的瓶颈,我在oracle内根据需要创建了索引。但是随着数据量的增加,一个半月数据就要超千万,此时就算有索引,对高并发的查询和更新来说,让然有所拖累。
为了解决这个问题,我一般一个月会进行一次数据库维护,主要工作就是备
- java多态内存分析
麦田的设计者
java内存分析多态原理接口和抽象类
“ 时针如果可以回头,熟悉那张脸,重温嬉戏这乐园,墙壁的松脱涂鸦已经褪色才明白存在的价值归于记忆。街角小店尚存在吗?这大时代会不会牵挂,过去现在花开怎么会等待。
但有种意外不管痛不痛都有伤害,光阴远远离开,那笑声徘徊与脑海。但这一秒可笑不再可爱,当天心
- Xshell实现Windows上传文件到Linux主机
被触发
windows
经常有这样的需求,我们在Windows下载的软件包,如何上传到远程Linux主机上?还有如何从Linux主机下载软件包到Windows下;之前我的做法现在看来好笨好繁琐,不过也达到了目的,笨人有本方法嘛;
我是怎么操作的:
1、打开一台本地Linux虚拟机,使用mount 挂载Windows的共享文件夹到Linux上,然后拷贝数据到Linux虚拟机里面;(经常第一步都不顺利,无法挂载Windo
- 类的加载ClassLoader
肆无忌惮_
ClassLoader
类加载器ClassLoader是用来将java的类加载到虚拟机中,类加载器负责读取class字节文件到内存中,并将它转为Class的对象(类对象),通过此实例的 newInstance()方法就可以创建出该类的一个对象。
其中重要的方法为findClass(String name)。
如何写一个自己的类加载器呢?
首先写一个便于测试的类Student
- html5写的玫瑰花
知了ing
html5
<html>
<head>
<title>I Love You!</title>
<meta charset="utf-8" />
</head>
<body>
<canvas id="c"></canvas>
- google的ConcurrentLinkedHashmap源代码解析
矮蛋蛋
LRU
原文地址:
http://janeky.iteye.com/blog/1534352
简述
ConcurrentLinkedHashMap 是google团队提供的一个容器。它有什么用呢?其实它本身是对
ConcurrentHashMap的封装,可以用来实现一个基于LRU策略的缓存。详细介绍可以参见
http://code.google.com/p/concurrentlinke
- webservice获取访问服务的ip地址
alleni123
webservice
1. 首先注入javax.xml.ws.WebServiceContext,
@Resource
private WebServiceContext context;
2. 在方法中获取交换请求的对象。
javax.xml.ws.handler.MessageContext mc=context.getMessageContext();
com.sun.net.http
- 菜鸟的java基础提升之道——————>是否值得拥有
百合不是茶
1,c++,java是面向对象编程的语言,将万事万物都看成是对象;java做一件事情关注的是人物,java是c++继承过来的,java没有直接更改地址的权限但是可以通过引用来传值操作地址,java也没有c++中繁琐的操作,java以其优越的可移植型,平台的安全型,高效性赢得了广泛的认同,全世界越来越多的人去学习java,我也是其中的一员
java组成:
- 通过修改Linux服务自动启动指定应用程序
bijian1013
linux
Linux中修改系统服务的命令是chkconfig (check config),命令的详细解释如下: chkconfig
功能说明:检查,设置系统的各种服务。
语 法:chkconfig [ -- add][ -- del][ -- list][系统服务] 或 chkconfig [ -- level <</SPAN>
- spring拦截器的一个简单实例
bijian1013
javaspring拦截器Interceptor
Purview接口
package aop;
public interface Purview {
void checkLogin();
}
Purview接口的实现类PurviesImpl.java
package aop;
public class PurviewImpl implements Purview {
public void check
- [Velocity二]自定义Velocity指令
bit1129
velocity
什么是Velocity指令
在Velocity中,#set,#if, #foreach, #elseif, #parse等,以#开头的称之为指令,Velocity内置的这些指令可以用来做赋值,条件判断,循环控制等脚本语言必备的逻辑控制等语句,Velocity的指令是可扩展的,即用户可以根据实际的需要自定义Velocity指令
自定义指令(Directive)的一般步骤
&nbs
- 【Hive十】Programming Hive学习笔记
bit1129
programming
第二章 Getting Started
1.Hive最大的局限性是什么?一是不支持行级别的增删改(insert, delete, update)二是查询性能非常差(基于Hadoop MapReduce),不适合延迟小的交互式任务三是不支持事务2. Hive MetaStore是干什么的?Hive persists table schemas and other system metadata.
- nginx有选择性进行限制
ronin47
nginx 动静 限制
http {
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;...
server {...
location ~.*\.(gif|png|css|js|icon)$ {
- java-4.-在二元树中找出和为某一值的所有路径 .
bylijinnan
java
/*
* 0.use a TwoWayLinkedList to store the path.when the node can't be path,you should/can delete it.
* 1.curSum==exceptedSum:if the lastNode is TreeNode,printPath();delete the node otherwise
- Netty学习笔记
bylijinnan
javanetty
本文是阅读以下两篇文章时:
http://seeallhearall.blogspot.com/2012/05/netty-tutorial-part-1-introduction-to.html
http://seeallhearall.blogspot.com/2012/06/netty-tutorial-part-15-on-channel.html
我的一些笔记
===
- js获取项目路径
cngolon
js
//js获取项目根路径,如: http://localhost:8083/uimcardprj
function getRootPath(){
//获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp
var curWwwPath=window.document.locati
- oracle 的性能优化
cuishikuan
oracleSQL Server
在网上搜索了一些Oracle性能优化的文章,为了更加深层次的巩固[边写边记],也为了可以随时查看,所以发表这篇文章。
1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。(这点本人曾经做过实例验证过,的确如此哦!
- Shell变量和数组使用详解
daizj
linuxshell变量数组
Shell 变量
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="w3cschool.cc"
注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用ba
- 编程中的一些概念,KISS、DRY、MVC、OOP、REST
dcj3sjt126com
REST
KISS、DRY、MVC、OOP、REST (1)KISS是指Keep It Simple,Stupid(摘自wikipedia),指设计时要坚持简约原则,避免不必要的复杂化。 (2)DRY是指Don't Repeat Yourself(摘自wikipedia),特指在程序设计以及计算中避免重复代码,因为这样会降低灵活性、简洁性,并且可能导致代码之间的矛盾。 (3)OOP 即Object-Orie
- [Android]设置Activity为全屏显示的两种方法
dcj3sjt126com
Activity
1. 方法1:AndroidManifest.xml 里,Activity的 android:theme 指定为" @android:style/Theme.NoTitleBar.Fullscreen" 示例: <application
- solrcloud 部署方式比较
eksliang
solrCloud
solrcloud 的部署其实有两种方式可选,那么我们在实践开发中应该怎样选择呢? 第一种:当启动solr服务器时,内嵌的启动一个Zookeeper服务器,然后将这些内嵌的Zookeeper服务器组成一个集群。 第二种:将Zookeeper服务器独立的配置一个集群,然后将solr交给Zookeeper进行管理
谈谈第一种:每启动一个solr服务器就内嵌的启动一个Zoo
- Java synchronized关键字详解
gqdy365
synchronized
转载自:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913806.html
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题。
同步机制可以使用synchronized关键字实现。
当synchronized关键字修饰一个方法的时候,该方法叫做同步方法。
当s
- js实现登录时记住用户名
hw1287789687
记住我记住密码cookie记住用户名记住账号
在页面中如何获取cookie值呢?
如果是JSP的话,可以通过servlet的对象request 获取cookie,可以
参考:http://hw1287789687.iteye.com/blog/2050040
如果要求登录页面是html呢?html页面中如何获取cookie呢?
直接上代码了
页面:loginInput.html
代码:
<!DOCTYPE html PUB
- 开发者必备的 Chrome 扩展
justjavac
chrome
Firebug:不用多介绍了吧https://chrome.google.com/webstore/detail/bmagokdooijbeehmkpknfglimnifench
ChromeSnifferPlus:Chrome 探测器,可以探测正在使用的开源软件或者 js 类库https://chrome.google.com/webstore/detail/chrome-sniffer-pl
- 算法机试题
李亚飞
java算法机试题
在面试机试时,遇到一个算法题,当时没能写出来,最后是同学帮忙解决的。
这道题大致意思是:输入一个数,比如4,。这时会输出:
&n
- 正确配置Linux系统ulimit值
字符串
ulimit
在Linux下面部 署应用的时候,有时候会遇上Socket/File: Can’t open so many files的问题;这个值也会影响服务器的最大并发数,其实Linux是有文件句柄限制的,而且Linux默认不是很高,一般都是1024,生产服务器用 其实很容易就达到这个数量。下面说的是,如何通过正解配置来改正这个系统默认值。因为这个问题是我配置Nginx+php5时遇到了,所以我将这篇归纳进
- hibernate调用返回游标的存储过程
Supanccy2013
javaDAOoracleHibernatejdbc
注:原创作品,转载请注明出处。
上篇博文介绍的是hibernate调用返回单值的存储过程,本片博文说的是hibernate调用返回游标的存储过程。
此此扁博文的存储过程的功能相当于是jdbc调用select 的作用。
1,创建oracle中的包,并在该包中创建的游标类型。
---创建oracle的程
- Spring 4.2新特性-更简单的Application Event
wiselyman
application
1.1 Application Event
Spring 4.1的写法请参考10点睛Spring4.1-Application Event
请对比10点睛Spring4.1-Application Event
使用一个@EventListener取代了实现ApplicationListener接口,使耦合度降低;
1.2 示例
包依赖
<p