- android新架构,Android项目新架构(2)——Clean Architecture
太球
android新架构
前言由于CSDN在移动端的UI界面不太友好,现在把博客迁到简书。原来CSDN博客地址:http://blog.csdn.net/iigeoxiaoyangCleanArchitecture架构模式很早之前就提出了,FernandoCejas在Github上实现了Android下的CleanArchitecture项目。本文主要根据这个项目源码以及我们项目中的实践说说对这个架构的理解。一CleanA
- HarmonyOS开发实战:UI组件使用规范总结
代码中的爱马仕
鸿蒙HarmonyOSOpenHarmony前端数据库harmonyos华为uiandroid鸿蒙
UI类组件模块介绍ToastUtil提供对文本提示的一系列方法DialogUtil提供对弹出框的一系列方法ActionUtil提供对操作菜单的一系列方法LoadingUtil提供全局加载工具类TipsUtil提供提示弹出工具类SelectUtil提供选择弹出工具类ConfirmUtil提供信息确认弹出工具类AlertUtil提供操作确认弹出工具类ExceptionUtil提供省市区级联选择组件Ca
- muduo网络库源码复现笔记(十二):base库的LogStream.h
liangximin2046
muduoc++后端muduo网络库linuxmuduo网络库网络编程
Muduo网络库简介muduo是一个基于Reactor模式的现代C++网络库,作者陈硕。它采用非阻塞IO模型,基于事件驱动和回调,原生支持多核多线程,适合编写Linux服务端多线程网络应用程序。muduo网络库的核心代码只有数千行,在网络编程技术学习的进阶阶段,muduo是一个非常值得学习的开源库。目前我也是刚刚开始学习这个网络库的源码,希望将这个学习过程记录下来。这个网络库的源码已经发布在Git
- 【ESP32】【LLM API】Accessing the Xunfei Spark LLM API with ESP32
hmywillstronger
spark大数据分布式
AccessingtheXunfeiSparkLLMAPIwithESP32Real-timeconversationwithXunfeiSparklargelanguagemodelviaESP32microcontrollerIntroductionWiththerapiddevelopmentofartificialintelligencetechnology,largelanguagemo
- Java面试黄金宝典15
ylfhpy
Java面试黄金宝典java面试算法开发语言职场和发展数据结构哈希算法
1.请找出增序排列中一个数字第一次和最后一次出现的数组下标定义由于数组是增序排列的,我们可以利用二分查找的特性来高效地定位目标数字。对于查找第一次出现的位置,当中间元素等于目标数字时,我们需要继续向左搜索,以确保找到最左边的目标数字;对于查找最后一次出现的位置,当中间元素等于目标数字时,我们需要继续向右搜索,以确保找到最右边的目标数字。要点采用二分查找算法,其时间复杂度为O(logn),可以大大提
- AIGC驱动的自动化学习资料生成:技术框架与代码实现(附保姆级代码)
一键难忘
AIGC自动化运维
本文收录于专栏:精通AI实战千例专栏合集https://blog.csdn.net/weixin_52908342/category_11863492.html从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~文章目录AIGC驱动的自动化学习资料生成:技术框架与代码实现
- 如何配置Tomcat以支持SSL
寒雪谷
java基础tomcat服务器ssljava加密浏览器
如何配置Tomcat以支持SSL木子(blog.csdn.net/luckybeggar)MSN:luckybeggar@21cn.com-------------------------------------既然选择了远方,便只顾风雨兼程!名词解释:1ssl(ServerSocketLayer):在网络上信息在源-宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但
- 前端常用6种数据加密方式的使用详解
小码快撩
前端
在前端开发中,数据加密是一个重要的安全措施,可以保护用户数据不被轻易窃取或篡改。以下是六种常用的前端数据加密方式及其示例代码和详细讲解:1.Base64编码Base64是一种基于64个可打印字符来表示二进制数据的表示方法。它不是一种加密方法,而是一种编码方式。示例代码://使用Base64编码constencodedData=btoa('Hello,World!');console.log('En
- Python的global语句
sunmenggmail
python
http://www.cnblogs.com/cython/articles/2202287.html如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽
- TV源 58个频道
专注代码十年
tv
TV源58个频道1.新建一个文件命名zby.m3u把以下内容复制进去#EXTINF:-1group-title="IPV6"tvg-logo="https://epg.112114.xyz/logo/CCTV1.png",CCTV-1综合http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226016/index.m3u8#EXTINF:-
- 使用AI一步一步实现若依(20)
有诺千金
若依java
功能20:使用分页插件功能19:集成MyBatis-Plus功能18:创建后端工程功能17:菜单管理功能16:角色管理功能15:用户管理功能14:使用本地SVG图标库功能13:侧边栏加入Logo功能12:折叠/展开侧边栏功能11:实现面包屑功能功能10:添加首页菜单项功能9:退出登录功能功能8:页面权限控制功能7:路由全局前置守卫功能6:动态添加路由记录功能5:侧边栏菜单动态显示功能4:首页使用L
- HarmonyOS NEXT 中级开发笔记:基于HarmonyOS Design的证件申请应用数据库实践
harmonyos-next
最近在适配HarmonyOSNEXT的证件申请类应用,梳理了一些数据库相关的开发心得。HarmonyOSDesign强调简洁高效的数据管理,这里记录几个关键实现点,供参考交流。一、数据库设计遵循HarmonyOSDesign规范按照HarmonyOSDesign的"结构化数据"原则,将证件信息拆解为:用户基础表(User)证件主表(Certificate)审核记录表(AuditLog)使用@
- 0-1背包问题,使用动态规划的三种方法(二维数组,两个一维数组,一个一维数组)python实现
路漫漫`
leetcodePython算法动态规划python
0-1背包问题感谢这些朋友们的文章,给了我很大启发:https://blog.csdn.net/songyunli1111/article/details/94778914https://blog.csdn.net/na_beginning/article/details/62884939https://blog.csdn.net/qq_39445165/article/details/84334
- Python 中%d,%s等特殊符号的含义
哇哈哈&
python
常见的格式化符号如下表=====================================================================================https://www.cnblogs.com/wj12312/p/10490753.html================================================
- 备考六级:词汇量积累(day3)
无敌大饺子 dot
职场和发展
grab抓住interview面试采访interviewer面试者,采访者interviewee被采访者,被面试者intervene介入,出面interfere干扰,干预highlight高光delegate代表investgate调查threshould门槛,起点justice公平justify证明....正确log原木,航海日志petition祈求,请求Sheispetitioningfora
- 查找表实现三角函数
0基础学习者
BLE前端verilogfpgafpga开发笔记数字ic
首先,我们需要创建一个正弦函数的查找表。假设我们只考虑0到90度的范围,因为正弦函数具有对称性,其他角度的值可以通过简单的数学变换获得。我们将以1度为步长生成这个表。在Verilog中,我们通常不直接使用浮点数,因此可以将正弦值乘以一个大的常数(这里使用10000)并将结果存储为整数。这样可以在不失太多精度的情况下,使用整数运算。sine_table是一个数组,存储了从0度到90度的正弦值,每个值
- 用户故事Invest原则、敏捷与完整的需求
luckljtchinaren
参考:http://duweizhong.blogbus.com/logs/112151436.html、http://www.zentao.net/book/zentaopmshelp/103.htmlhttp://www.iamniu.com/2013/06/30/user-story-and-use-case/完整的需求与精短独立小故事,完整小故事的不断秩代用户故事Invest原则Inv
- 微信小程序实现蓝牙连接通讯
喵小花儿和喵小胖儿
微信小程序小程序
由于最近的项目在做小程序蓝牙通讯这块的内容,所以将实现的过程在这简单的记录下。1、首先要初始化蓝牙-检查蓝牙适配器是否打开asyncinitBluetooth():Promise{returnnewPromise((resolve:any,reject:any)=>{const_this=thisif(BluetoothController.adapterOpend){console.log("蓝
- Spring AOP面向切面编程实现日志功能
PXM的算法星球
Java后端spring单元测试java
首先我们引入日志slf4j相关依赖org.slf4jslf4j-api2.0.9org.apache.logging.log4jlog4j-slf4j2-impl2.20.0org.apache.logging.log4jlog4j-core2.20.0再引入spring-aop依赖org.springframeworkspring-aop5.3.23为了方便编码,lombok也是必不可少的org
- 理解本真的REST架构风格
熊猫小牛牛
系统架构技术架构rest
转自:http://blog.csdn.net/j080624/article/details/56025356引子在移动互联网、云计算迅猛发展的今天,作为一名Web开发者,如果您还没听说过“REST”这个buzzword,显然已经落伍了。夸张点说,甚至“出了门都不好意思跟别人打招呼”。尽管如此,对于REST这个泊来品的理解,大多数人(包括一些资深的架构师)仍然停留在“盲人摸象”的阶段。常常听到各
- springboot 微信小程序 实现获取手机号登录
如夜了我衣衫太薄便归家靠路灯°
springboot微信小程序后端
要在SpringBoot应用中实现与微信小程序的手机号登录功能,首先需要了解微信小程序的登录机制以及如何将其与SpringBoot后端整合。1.微信小程序的手机号登录机制微信小程序的手机号登录通常涉及以下几个步骤:用户在小程序中点击“手机号登录”按钮,获取用户手机号。小程序向微信服务器请求手机号,通过wx.login获取用户的登录凭证(code)。通过code请求微信服务器,获得用户的sessio
- 微信小程序pdf预览
h_6543210
微信小程序pdf小程序
1.示例图2.代码fileId:要预览的pdf文件的idviewsFiles(fileId){wx.showLoading({title:'加载中...'});varparams={url:"/common/getFile/"+fileId,//后端提供的接口method:"GET",responseType:"arraybuffer",callBack:(res)=>{console.log(r
- java实现hbase表创建、数据插入、删除表
zhuiwenwen
hadoop
近日查看了相关资料后,梳理了一下用java实现hbase的表创建、数据插入、删除表,代码如下:1、需要的jar包:commons-codec-1.4.jarcommons-logging-1.0.4.jarhadoop-0.20.2-core.jarhbase-0.20.6.jarlog4j-1.2.15.jarzookeeper-3.2.2.jar2、代码:packageorg.myhbase;
- vue2 生成动态二维码
vue2组件化
因为项目使用的是vue2,下面那个组件,大佬没有写canvas的生成二维码+logo的形式。所以跟着大佬的vue3的代码,写了一遍vue2的。vue3直接安装使用npminstallqrcode@1@chenfengyuan/vue-qrcode@2vue2参考下面npminstallqrcode@1组件:QrcodeComponent.vueimport{toCanvas,toDataURL,t
- 区间信息操作之树状数组(Fenwick Tree)原理
xiaoyu❅
数据结构和算法#高级数据结构算法数据结构java
树状数组(FenwickTree)是一种高效处理前缀和与单点更新的数据结构,时间复杂度为O(logn),适用于动态维护数组的区间统计信息。本文将详细讲解树状数组的核心原理,并通过Java代码实现其核心功能。目录一、树状数组的核心思想1.什么是树状数组?2.核心原理:二进制索引与Lowbit操作二、树状数组的Java实现1.树状数组结构2.单点更新3.前缀和查询4.区间和查询三、应用示例1.动态维护
- ORA-28001: the password has expired解决办法
飞奔的yah
数据库
登录数据库一、window登录oracle1)打开cmd,输入:sqlplus/nolog输入:connusername/passworld@数据库名称2)当然还有其他的方式:sql>conn/assyddba;即可登录oracle超级管理员用户(不需要用户和密码)。sql>connusername/password;通过输入用户名和密码的形式可以登录到普通用户。sql>connusername/
- 31天Python入门——第15天:日志记录
安然无虞
Python手把手教程python职场和发展后端爬虫
你好,我是安然无虞。文章目录日志记录python的日志记录模块创建日志处理程序并配置输出格式将日志内容输出到控制台将日志写入到文件logging更简单的一种使用方式日志记录日志记录是一种重要的应用程序开发和维护技术,它用于记录应用程序运行时的关键信息和事件.通过适当的日志记录,我们可以追踪应用程序的行为、排查问题和监控系统状态.Python提供了内置的logging模块,使得日志记录变得简单而强大
- 【pytorch】图像数据预处理
子根
笔记pytorchpython深度学习
本文是记录一些在深度学习中的预处理的一些语法和函数torchvision.transforms的图像变换[PyTorch学习笔记]2.3二十二种transforms图片数据预处理方法-知乎TORCHVISION.TRANSFORMS的图像预处理_阿巫兮兮的博客-CSDN博客PyTorch09:transforms图像变换、方法操作及自定义方法-YEY的博客|YEYBlog2D、3D中心裁剪:imp
- 个人博客Blog建设系统详细设计与具体代码实现
AI天才研究院
DeepSeekR1&大数据AI人工智能大模型AI大模型企业级应用开发实战计算计算科学神经计算深度学习神经网络大数据人工智能大型语言模型AIAGILLMJavaPython架构设计AgentRPA
个人博客Blog建设系统详细设计与具体代码实现1.背景介绍在当今互联网时代,个人博客已经成为一种流行的表达自我、分享知识和经验的方式。越来越多的人希望拥有自己的个人博客网站,但是对于非技术背景的人来说,从零开始搭建一个博客系统可能是一个不小的挑战。本文将详细介绍如何从零开始设计并实现一个完整的个人博客系统,包括前端界面设计、后端服务开发以及数据库设计等方面。通过本文的学习,读者可以掌握博客系统的核
- 利用GLUT实现在OpenGL中绘制文本的简单方法
Timidkid
OpenGL学习opengl绘制本文
原文出处:http://blog.csdn.net/happen23/article/details/4642517PS:下文内容对原文内容做了适当的修改和扩充。OpenGL本身不支持字符显示,然后觉得对于简单的一些应用,使用GLUT的库就够了。比如这里我们想要实现的文本绘制:示例代码://要显示的字符char*str="currentfps=";intn=strlen(str);//设置要在屏幕
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" {
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持