- 关于双塔模型的简单介绍
eso1983
python算法推荐算法
双塔模型是一种常用于推荐系统和信息检索等领域的深度学习架构,其核心思想是将用户和物品分别映射到不同的向量空间,通过计算两个向量的相似度来预测用户对物品的偏好或相关性。1.python示例使用python语言来简单示例一下实现过程如下:importtensorflowastffromtensorflow.keras.layersimportInput,Dense,Embedding,Concaten
- DeepSeek在协同过滤和深度学习技术中的应用场景
python算法(魔法师版)
深度学习人工智能
DeepSeek作为一个集成多种先进技术的平台,利用协同过滤和深度学习技术在多个领域实现了创新应用。以下是一些具体的场景和示例,展示了这些技术如何被应用于实际问题中。一、推荐系统电子商务协同过滤:在电商平台中,协同过滤用于根据用户的历史行为(如购买记录、浏览历史等)推荐相关商品。基于用户的相似性或项目的相似性来生成个性化推荐。Python深色版本fromsurpriseimportDataset,
- 浅谈知识蒸馏技术
eso1983
机器学习人工智能深度学习
最近爆火的DeepSeek技术,将知识蒸馏技术运用推到我们面前。今天就简单介绍一下知识蒸馏技术并附上python示例代码。知识蒸馏(KnowledgeDistillation)是一种模型压缩技术,它的核心思想是将一个大型的、复杂的教师模型(teachermodel)的知识迁移到一个小型的、简单的学生模型(studentmodel)中,从而在保持模型性能的前提下,减少模型的参数数量和计算复杂度。以下
- android room
freshfox
android
注意点:1.gradle中加入'kotlin-kapt'插件,依赖加入implementation"androidx.work:work-runtime:2.2.0"kapt"androidx.room:room-compiler:2.1.0"2.主activity中用thread执行。packagecom.example.testroomimportandroid.content.Context
- Python画笔案例-086 turtle 多线程绘画
小英子架构
python绘图案例pythonandroidjavascript
1、turtle多线程绘画通过python的turtle库多线程绘画,如下图:2、实现代码 turtle库多线程绘画,以下为实现代码:"""多线程绘画.py"""fromrandomimportrandom,randintfromturtleimportTurtle,Screenfromthreading
- 悬浮按钮和可交互提示的使用
字节全栈_BjO
交互
xmlns:app=“http://schemas.android.com/apk/res-auto”xmlns:tools=“http://schemas.android.com/tools”android:id=“@+id/drawerLayout”android:layout_width=“match_parent”android:layout_height=“match_parent”to
- 【项目实战】Android应用程序架构,MVC、MVP、MVVM三种模式介绍
本本本添哥
011-物联网车联网与车载系统开发android架构mvc
一、Android应用程序架构汇总简单的Android应用程序架构,包括MVC、MVP和MVVM模式。二、MVC模式介绍MVC(Model-View-Controller)模式2.1MVC模式组成部分MVC模式将应用程序分为三个主要组成部分:Model、View和Controller。Model:负责处理应用程序的数据和业务逻辑。它与数据库进行交互,获取数据并处理数据。View:负责呈现用户界面。
- 机器学习中,准确率(Accuracy)、精确度(Precision)、召回率(Recall)、F1分数(F1Score) 分别是什么?有啥用?有啥意义?有啥缺陷?
shimly123456
NLP相关杂谈机器学习人工智能算法
首先明白四个名词:真正例TruePositive假正例FalsePositive真负例TrueNegative假负例FalseNegativeTP:被预测为真,实际为真的样本FP:被预测为真,实际为假的样本TN:被预测为假,实际为假的样本FN:被预测为假,实际为真的样本准确率(Accuracy)计算公式:(TP+TN)/(TP+FP+TN+FN)意义:被正确预测的样本占总样本的比例缺陷:尽管准确率
- ASUS/华硕天选1 FA506I 原厂Win10系统 工厂文件 带ASUS Recovery恢复 教程
无限的奇迹
电脑
华硕工厂文件恢复系统,安装结束后带隐藏分区,带一键恢复,以及机器所有的驱动和软件。支持型号:FA506IVFA506IIFA506IUFA506IH系统版本:Windows10文件下载地址:asusoem.cn/382.html文件格式:工厂文件安装教程地址:asusoem.cn/176.html需准备一个20G以上u盘进行恢复若不会使用可联系作者有偿远程安装若无U盘,还想要恢复功能,请联系技术远
- Anaconda使用教程 如何conda配置多版本Python环境
广药门徒
pythonconda开发语言
配置anaconda参考anaconda的安装和使用(管理python环境看这一篇就够了)-CSDN博客Anaconda使用教程主要用的两个为AnacondaPrompt和AnacondaNavigator打开cmd第一次安装配置好conda的得先执行condainit才能用以后的创建环境和环境切换,和pip安装各种包全在这里,介绍几个常用的快捷键:1.condainfo查看当前环境的信息2.co
- Python之上下文管理器
zhuxy604
PythonPython
以下文章总结自《headfirstpython》读书笔记引子从python处理一个文件说起,在Python中打开一个文件时,一般的代码逻辑如下:file=open('test.txt')forlineinfile:print(line)file.close()以上代码主要做了3件事:1)打开一个文件;2)处理文件,读取每一行并打印出来;3)关闭文件但是对大多数程序员而言,处理文件常推荐使用的是一个
- Android 音视频 --- EGL介绍和使用
消失的旧时光-1943
音视频音视频android视频编解码
EGL的功能EGLAPI作为一套与OpenGLES各个版本相互独立的API,其作用主要是管理绘图表面。EGL提供以下机制:与设备的原生窗口系统通信查询绘图表面的可用类型和配置创建绘图表面在OpenGLES3.0或其他渲染API之间同步渲染管理纹理贴图等渲染资源
- Android 进程间通信
消失的旧时光-1943
android
Android进程间通信(IPC,Inter-ProcessCommunication)是Android操作系统中不同进程间交换数据和资源的一种机制。由于Android是多任务操作系统,每个应用通常运行在自己的进程中,以提高安全性和资源管理的效率。因此,当两个或多个应用需要共享数据时,就需要通过IPC机制来实现。常见的AndroidIPC机制包括:Intent通过发送Intent对象在不同组件间传
- ORACLE数据库的OGG日志
苦苦挣扎的小码农
数据库oracle
若要使用OGG,ORACLE必须开启归档模式,可以理解为设置ORACLE的REDOLOG落地,这样才能让OGG拿到所需的日志信息.1.查询数据库是否处于归档模式,如果处于归档模式,则返回结果ARCHIVELOGSQL>selectlog_modefromv$database;2.如果不处于归档模式,则要开启归档$>sqlplus/nologSQL>conn/assysdbaSQL>shutdown
- python - 上下文管理器
你是猴子请来的救兵吗!!
python杂记python
一、什么是上下文管理器你是不是这样读过文件withopen("file","r")asf_reader:content=f_reader.readlines()为什么你要用"with"呢,因为在这段读取文件代码结束后,会自动执行close()with是一个神奇的关键字,它可以在代码中开辟一段由它管理的上下文,并控制程序在进入和退出这段上下文时的行为,即进入时打开文件,并返回文件对像,退出时关闭文件
- Python进阶之-上下文管理器
小佟
python上下文管理器python数据库服务器
本文介绍了Python中的上下文管理器,包括其基本概念、组成、标准库中的应用、自定义上下文管理器的实现以及contextlib模块的使用。重点强调了上下文管理器在资源管理、异常处理和代码整洁性方面的优势。✨前言:什么是上下文管理器?在Python中,上下文管理器是支持with语句的对象,用于为代码块提供设置及清理代码。上下文管理器广泛应用于资源管理场景,例如文件操作、网络连接、数据库会话等,其目的
- 【极简代码】Unity控制3D物体的自由旋转 缩放和移动
qq_39889893
Unity笔记unity3d游戏引擎
Unity中以最少代码,控制3D物体的自由旋转、缩放和移动。usingUnityEngine;publicclassTestMatrix:MonoBehaviour{floatscaleparam=0f;Vector3oldScale;privatevoidStart(){oldScale=transform.localScale;}privatevoidUpdate(){voidTrans_Ro
- Python结合pyhdfs模块操作HDFS分布式文件系统
唐僧不爱八戒
pythonhdfs开发语言
使用python操作hdfs本身并不难,只不过是把对应的shell功能“翻译”成高级语言,我这里选用的是hdfs,下边的实例都是基于hdfs包进行的。1:安装由于我的是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的pipinstallhdfs2:Client——创建集群连接fromhdfsimport*client=Client("ht
- MySQL常见优化手段
唐僧不爱八戒
mysql数据库
1.配置优化1.1缓存设置查询缓存:查询缓存可以显著减少对同一查询的重复执行次数。SETGLOBALquery_cache_size=268435456;--设置查询缓存大小为256MBSETGLOBALquery_cache_type=ON;--启用查询缓存例如,执行SELECT*FROMusersWHEREid=1;后,再次执行相同查询将直接从缓存中读取结果。表缓存:表缓存大小决定了可以同时打
- DorisSQL与MySQL函数与语法对照差异篇
小晨说数据
字符串mysqljava数据库sql
1.日期函数时区.mysql -> convert_tz(dt,from_tz,to_tz)doris -> CONVERT_TZ(DATETIME dt, VARCHAR from_tz, VARCHAR to_tz)获取当前的日期,以DATE类型返回.mysql -> CURDATE()doris -> CURDATE()获得当前的时间,返回datatime类型.mysql -> NOW()d
- Unity打包报错 SDK Tools version 0.0.0 < 26.1.1
iDaDi
AndroidUnityunityAndorid
从官网下载Unity2018.4版本,打包时报错。Unity的SDK环境配置也是对的。但是就是不行。发现使用AndroidSDKManager下载SDK。Unity不支持。只能去AndroidStudio编辑器中的SDKManager下载的SDK。Unity打包才支持。下图是使用AndroidSDKManager下载的SDK。下图时AndroidStudio的SDKManager。重新配置Unit
- 短视频推荐系统架构设计:从召回、排序到冷启动的全链路解析
热爱分享的博士僧
系统架构
短视频推荐系统的设计是一个复杂的过程,涉及到从内容召回、排序到解决冷启动问题的多个环节。下面将对这一过程进行全链路解析。1.召回阶段召回是推荐系统的第一个步骤,目的是从海量的内容库中快速筛选出可能感兴趣的候选集供用户查看。常见的召回策略包括:基于流行度的召回:根据视频的观看次数、点赞数、分享数等指标来选择热门内容。协同过滤召回:利用用户行为数据(如浏览历史、点赞、评论等),找到与当前用户兴趣相似的
- 基于RFM聚类与随机森林算法的智能手机用户监测数据案例分析
kaka_R-Py
大数据可视化多元统计分析R语言数据分析与可视化算法聚类随机森林
基于RFM聚类与随机森林算法的智能手机用户监测数据案例分析摘要近年来,随着数字化和信息化的快速发展,越来越多的人开始使用智能手机。文章基于某公司某年连续30天4万多位智能手机用户的监测数据,通过随机森林与RFM聚类分析模型对智能手机用户的监测数据进行挖掘和分析,有效地统计和归纳了用户对于A类APP的使用情况,模型准确度达到了80%,同时对于智能手机APP的开发和使用提出了相应的建议。该研究的数据驱
- 矩阵方程组求解——Markov过程
kaka_R-Py
随机过程numpypython机器学习
"""pi*p=pipi>=0pi1+pi2=1求解pi"""importnumpyasnpfromfractionsimportFraction#定义转移矩阵PP=np.array([[1/2,1/2],[7/9,2/9]])#求解平稳分布π#π*P=π等价于(P.T-I)*π.T=0#其中I是与P尺寸相同的单位矩阵#π.T是π的转置#定义单位矩阵II=np.eye(P.shape[0])#从P
- 第14篇:从入门到精通:掌握python上下文管理器
猿享天开
python从入门到精通python开发语言
第14篇:上下文管理器内容简介本篇文章将深入探讨Python中的上下文管理器(ContextManager)。您将了解上下文管理器的概念与用途,学习如何实现自定义的上下文管理器,以及如何使用contextlib模块来简化上下文管理器的创建与使用。通过丰富的代码示例,您将能够灵活地使用上下文管理器来管理资源,提升代码的安全性和可维护性。目录上下文管理器概述什么是上下文管理器上下文管理器的用途使用wi
- PyTorch数据建模
kaka_R-Py
大数据可视化pytorch人工智能python
回归分析importtorchimportnumpyasnpimportpandasaspdfromtorch.utils.dataimportDataLoader,TensorDatasetimporttimestrat=time.perf_counter()
- 路由跳转登录权限判断/vue3
前端小云儿
vue3知识点前端javascriptvue.js
1main.ts引入路由和权限校验importrouterfrom"./router";//路由守卫权限拦截2-2import"@/router/permisstion";2router文件夹,三个文件1.1indexe.tsimport{createRouter,createWebHistory}from"vue-router";import{constRouter}from"./routers
- OpenCV图像旋转90度的最简单方法
时光荏苒-
opencv计算机视觉人工智能OpenCV
OpenCV是一个功能强大的计算机视觉库,提供了许多图像处理和计算机视觉算法。在OpenCV中,图像旋转是一项常见的操作。本文将介绍如何使用OpenCV将图像旋转90度的最简单方法。步骤1:导入OpenCV库在Python中使用OpenCV库需要先导入库。可以使用以下代码导入OpenCV库:importcv2步骤2:读取图像使用OpenCV读取图像需要使用cv2.imread()函数。该函数接受一
- Vue - ref( ) 和 reactive( ) 响应式数据的使用
来一碗刘肉面
Vuevue.js前端javascript
一、ref()在Vue3中,ref()是一个用于创建响应式引用的函数。它是Vue3CompositionAPI(组合式API)的一部分,允许在组件中创建响应式数据。使用对象:基本数据类型(String、Number、Boolean、Null等)、对象类型****需要使用.value1.引入ref()函数//引入import{ref}from'vue';2.创建响应式引用//定义响应式数据在标签中/
- An impassioned circulation of affection ( Codeforces Round 418 (Div. 2) )
BoBoo文睡不醒
acm训练集合暴力枚举dp双指针
Animpassionedcirculationofaffection(CodeforcesRound418(Div.2))Nadeko’sbirthdayisapproaching!Asshedecoratedtheroomfortheparty,alonggarlandofDianthus-shapedpaperpieceswasplacedonaprominentpartofthewall.
- 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独立出来,数据持