- 第五章 SQLite数据库:5、SQLite 进阶用法:JOIN、UNION、TRIGGER、INDEX、ALIAS、INDEXED BY 等模块
Sunlight_777
Linux系统应用开发数据库sqliteoracle
一、JOIN:跨表查询的核心机制1.JOIN类型总览JOIN是连接多个表获取综合信息的关键手段。常见JOIN类型如下:INNERJOIN(内连接):仅返回两个表中满足连接条件的行。LEFTOUTERJOIN(左连接):返回左表所有行,右表无匹配时以NULL填充。CROSSJOIN(交叉连接):返回两个表的笛卡尔积,即所有组合。2.示例:图书与分类表--图书表:包含图书基本信息CREATETABLE
- uniapp自身bug | uniapp+vue3打包后 index.html无法直接运行
赫卡夹
移动端uni-appbugjavascript
前提:已经修改了基础路径打开打包文件,双击运行index.html报错,无法访问页面uniapp+vue2项目是可以正常运行的vue3修改publicPath:'./'后,也是可以正常访问打包文件中的index.html点进控制台提供的链接:https://ask.dcloud.net.cn/article/37432不止我一个人遇到了这个问题,应该是uniapp自身的buguniapp+vue3
- Veaury 项目使用教程
翟珊兰
Veaury项目使用教程veauryUseReactinVue3andVue3inReact,Andasperfectaspossible!项目地址:https://gitcode.com/gh_mirrors/ve/veaury1.项目的目录结构及介绍Veaury项目的目录结构如下:veaury/├──src/│├──components/│├──utils/│├──index.js│└──..
- 3、整合前端基础交互页面
小薛博客
前端交互aijava
3、整合前端基础交互页面小薛博客AI大模型资料1、整合LayUI官网:https://layui.dev/下载:https://gitee.com/layui/layui/attach_files/2054722/download1、成功引入LayUI后新建index.html框架布局:https://layui.dev/docs/2/layout/layout22222222layoutdemo
- 学习React第十五篇:构建一个JSX Live编译器作为React组件
最孤单的人
#Reactjs入门教程React编译器JSXBabel
继编写使用高阶组件组合React组件行为作为工具,希望能够编写JSX并在浏览器中实时查看输出。在本篇中,我们将创建一个浏览器内JSX转译器。#在这里,在我们的CreateReactApp应用程序的index.html中,需要引入了Babel的独立版本。(发生了小插曲:刚开始编写的时候漏了,结果运行的时候不通过,然后网上各种查资料,导入Babel的依赖,但是也一直没成功;然后有从头观看了视频,发现了
- 简易的仿桌面文件夹上传(vue2)
贰叁!
前端vue.js
Information/index.vue-->返回-->-->上传文件新建文件夹主目录-->{{scope.row.name}}取消确定import{getToken}from"@/utils/auth";importFileUploadfrom"@/components/FileUpload/index.vue";import{getFolderFile,addFolder,getFildsL
- vue2实现vue3的teleport
贰叁!
vue.js
Teleport/index.vueexportdefault{name:'teleport',props:{/*移动至哪个标签内,最好使用id*/to:{type:String,required:true}},mounted(){//把内容移动到指定的标签内this.to渲染document.querySelector(this.to).appendChild(this.$el)},before
- 关于数据清洗和数据处理实践学习笔记
洋芋遇遇
学习笔记
一些可能想要知道的:pandas是一个模板,它读取的数据都是dataframe的格式,即dfMatplotlib是一个用于数据可视化的Python库,能够生成各种静态、动态和交互式图表pyplot:Matplotlib的核心接口模块,提供类似MATLAB的绘图命令风格。index_col=0#将第一列作为文件索引round()#返回一个数值,可以指定保留几位小数df.head()#用于查看前几行的
- JS弹出框,打开文件,保存文件,另存为。。。。
Hannah
jsjs方法
方法:varfileSave=newActiveXObject("MSComDlg.CommonDialog");fileSave.MaxFileSize=128;fileSave.Filter="*.bmp";fileSave.FilterIndex=2;fileSave.fileName=mydate.toLocaleString().replace("","").replace("年",""
- vue常见错误
Hannah
vue.js前端javascript
1、Can'tresolve'vant/lib/index.less'1.未正确安装Vant首先,确保你已经正确安装了Vant。可以通过以下命令来安装:npminstallvant--save或者使用yarn:yarnaddvant2.LESS加载器未配置如果你在项目中使用了Vant的LESS样式文件(例如vant/lib/index.less),你需要确保项目中已经安装了less和less-lo
- 解决splice改变原数组的BUG(拷贝数据)
介si啥呀~
bug
项目场景:项目中难免遇到需要删除改变数组的方法,去重,删除不要的数据等问题描述:但是splice方法会删除掉数据改变原数组,返回的是改变之后的数组,即使你是赋值的还是会影响到原数组的数据GoodsInfos[index].list.splice(index,1)解决方案:使用拷贝方法,这样原数组就不会发生改变,删除的新数组是新数据,原数组还是原来的数据letGoodsInfos=JSON.pars
- elementUI使用render函数封装公共分页组件
新茶十九
#vue2学习路程elementui前端javascript
使用Render函数添加「首页」和「尾页」按钮的完整实现:import'./index.scss';exportdefault{name:'co-pagination',props:{total:{type:Number,required:true},page:{type:Number,default:1},limit:{type:Number,default:10},pagerCount:{ty
- YashanDB|数据量变化导致统计信息“失效”?执行计划不准的原因找到了!
数据库
【问题分类】性能优化【关键词】统计信息失效、STALE_STATS、执行计划偏差问题现象在使用YashanDB时,当表中数据量发生一定变化后,虽然没有显式更新统计信息,但查询的执行计划却突然变“笨”了,查询效率明显下降。例如如下案例操作:--创建测试表createtablet1(idint,namevarchar2(200));createindext1_id_indont1(id);create
- Python机器学习——聚类的有效性指标
2401_84009065
程序员机器学习python聚类
使用上述定义式,可以有下面这些外部指****标外部指标:Jaccard系数(JaccardCofficient,JC):JC=aa+b+cJC=aa+b+c它刻画了所有属于同一类的样本对(要么在CC中属于同一类,要么在C∗C∗中属于同一类),同时在C,C∗C,C∗中属于同一类的样本量的比值。FM指数(FowlkesandMallowsIndex,FMI):FMI=aa+b⋅aa+c−−−−−−−−
- 网络安全之-信息收集
飞猪~
web安全安全
域名收集域名注册信息站长之家https://whois.chinaz.com/whois查询的相关网站有:中国万网域名WHOIS信息查询地址:https://whois.aliyun.com/西部数码域名WHOIS信息查询地址:https://whois.west.cn/新网域名WHOIS信息查询地址:http://whois.xinnet.com/domain/whois/index.jsp纳网
- QML DelegateChooser与DelegateChoice:根据属性指定界面委托
Quz
Qt6QML学习之路qt交互ui
目录引言最终效果基础概念介绍DelegateChooserDelegateChoiceDelegateChooser与DelegateChoice的差异工程结构示例代码解析示例1:基于角色的基本用法(BasicDelegateChoice.qml)示例2:基于索引的用法(IndexBasedDelegateChoice.qml)示例3:多个条件组合(ComplexDelegateChoice.qm
- 3.28学习总结
2402_88131930
学习算法数据结构
完成分割回文串的算法题,难点主要在如何去分割,靠什么去分割字符串inta(chararr[]){inti,j;intlen=strlen(arr);for(i=0,j=len-1;i=size){copy();return;}for(inti=startindex;i
- torch.quantile or np.quantile的计算
gnudebian
深度学习pytorchpython
torch的文档详细说明了quantile的计算方法。主要是将q的范围[0,1]转成输入index的范围[0,n]。也就是说,将q乘n。然后插值计算。quantile位置不是整数a=torch.tensor([0.0,1.1,2.1,3.1])q_result=torch.quantile(a,torch.tensor([0.1,0.9]))#tensor([0.3300,2.8000])a的in
- 前端根据后端返回的excel二进制文件流进行导出下载
小行星125
Vue.jsaxios请求API请求前端excel
需求在vue2中,后端接口返回一个文件流,前端实现excel文件流导出下载功能。解决方案利用axios请求后端接口,把后端返回的blob文件流转为一个临时在线url,然后利用a标签实现导出下载功能。具体实现步骤1、封装axios请求拦截器关键代码importaxiosfrom'axios'importVuefrom'vue'importstorefrom'@/store/index'import{
- uniapp自定义底部导航栏,解决下拉时候顶部空白的问题
确实菜,真的爱
uni-app
一、背景最近使用uniapp开发微信小程序,因为使用了自定义的顶部导航栏,所以在ios平台上(Android未测试)测试的时候,下拉的时候会出现整个页面下拉并且顶部留下大片空白的问题二、任务:解决这个问题经查阅资料,在这个使用自定义导航栏的页面,首先需要设置{"path":"pages/test/index","style":{"navigationBarTitleText":"原生导航栏","n
- 721.力扣每日一题7/15 Java(并查集)
天天困啊
算法练习算法java数据结构leetcode
博客主页:音符犹如代码系列专栏:算法练习关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞收藏⭐评论✍目录解题思路解题过程时间复杂度空间复杂度Code解题思路本题的解题思想主要是利用并查集(UnionFind)数据结构来合并具有相同账户名称的邮箱地址。首先,我们遍历所有账户信息,建立邮箱地址到唯一索引的映射(emailToIndex)和邮箱地址到账户名称的映射(ema
- win10上自建和推送多个rtsp视频流
NotName_9758
视频ffmpegpython
最近需要多个视频流来测试,网上公开的可用的视频流就两个,不够用,于是我就查找了自己推送视频流的一些资料,现在给大家分享一下:首先是公开的视频流:韩国GOODTVrtmp://mobliestream.c3tv.com:554/live/goodtv.sdp伊拉克AlSharqiya电视台rtmp://ns8.indexforce.com/home/mystream然后是python的推流代码,需要
- js 使用 substring() 或 substr() 方法截取指定字符后面/前面的所有字符串
介si啥呀~
jsjavascript前端vue.js
项目场景在JavaScript中,你可以使用**substring()**或substr()方法来截取字符串中指定字符前面或后面的所有字符。再配合indexOf()方法来判断字符所在的位置从而实现截取指定字符的前后字符串解决方案: letstr='你还好吗?嗯?我很好!' //截取第一个?前面的字符串 varindex=str.indexOf(
- 2024第十六届蓝桥杯模拟赛(第三期)-Python
汇太浪
蓝桥杯python职场和发展
#2024第十六届蓝桥杯模拟赛(第三期)-Python题解#自己改注释#-----------------------1------------------------#defisprime(x):#ifxcnt:#cnt=now_len*s.count(now)#res=now#elifnow_len*s.count(now)==cntandnow4andcurrent[index-5]=="1
- Flask-SQLAlchemy(五)—— 视图函数中操作数据库
DG丶
大杂烩flaskSQLAlchemy视图函数操作数据库
实现一个用户数据的名字记录到数据库中:@app.route('/',methods=['GET','POST'])defindex():form=NameForm()ifform.validate_on_submit():user=User.query.filter(username=form.name.data).first()ifuserisNone:user=User(username=fo
- 代码随想录算法训练营Day1
JustCouvrir
代码随想录算法训练营算法leetcode
目录704.二分查找27.移除元素977.有序数组的平方704.二分查找分类:左闭右闭、左闭右开Tips:1.循环条件:左闭右闭:左索引目标值:左闭右闭:右索引=折半索引-1左闭右开:右索引=折半索引classSolution{publicintsearch(int[]nums,inttarget){intn=nums.length;intleftindex=0;intrightindex=n-1
- 理解最左前缀原则:联合索引命中规则全解析(含流程图)
pwzs
数据库sqlMySQLmysql
一句话解释:联合索引只会从最左边的列开始连续匹配,一旦中断,后面的列就不能再用上索引。举个例子说明(表结构):CREATETABLEuser(idINT,nameVARCHAR(50),ageINT,cityVARCHAR(50),PRIMARYKEY(id),INDEXidx_name_age_city(name,age,city)--联合索引);我们定义了一个三列的联合索引:(name,age
- Vue3+Vite中使用SCSS
会飞的鱼先生
前端vue.jsjavascript
一、安装SCSS在创建好Vue项目后,在项目路径中打开命令行输入以下命令:npmisasssass-loader--save-dev二、使用SCSS安装完成后便可以在项目中使用SCSS,需要在style标签中设置lang属性为scss如:@use'../../assets/style/index.scss'asbase;//引入单独的scss文件.login-wrap{width:100%;hei
- vant4+vue3+ts执行打包编译后 index.html打开显示空白
冰墩墩1
html前端
一般是跨域问题解决方法:1.npminstall@vitejs/plugin-legacy//安装插件2.配置vite.config.jsimport{defineConfig}from'vite';importvuefrom'@vitejs/plugin-vue';importlegacyfrom'@vitejs/plugin-legacy';exportdefaultdefineConfig(
- Git完全指南:从入门到精通版本控制 ------- Git 工作区、暂存区和版本库(4)
-曾牛
Git指南gitjava学习个人开发
深入解析Git三大核心区域:工作区、暂存区与版本库一、三位一体的Git架构体系1.1区域功能定位区域名称物理存储位置核心职能数据持久性工作区项目可见目录开发者直接操作的代码编辑区临时存储暂存区.git/index文件变更集筛选与提交缓冲会话级存储版本库.git/objects目录版本历史永久存储永久存储1.2数据流转全景图gitaddgitcommitgitpushgitpullgitchecko
- 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