- [spring6: Mvc-网关]-源码解析
推荐阅读:[spring6:Mvc-函数式编程]-源码解析GatewayServerMvcAutoConfiguration@AutoConfiguration(after={HttpClientAutoConfiguration.class,RestTemplateAutoConfiguration.class,RestClientAutoConfiguration.class,FilterAu
- GitLab 公共仓库:coding 用到的 git 命令
summer.335
杂七杂八-汇总栏gitlabgit
在公司的gitlab公共仓库中写代码做项目时,主要涉及以下常用git命令:一、单个命令讲解1.拉取代码(1)gitclone[仓库URL]克隆远程仓库到本地(需确保URL正确)(2)gitpull[远程仓库名][分支名]从远程仓库拉取最新代码(默认拉取origin仓库的master分支)(3)gitfetch[远程仓库名][分支名]仅下载远程分支更新,不自动合并2.分支操作(1)git
- Qt 5.15.x + VS的源码编译
黃建榮
QtAboutqtc++
环境依赖MVSC,Python,Ruby,Perl需要安装的一些工具第一次编译configure的相关命令configure.bat-prefixE:\qt\qt5\install\-opensource-confirm-license\-qt-sqlite-qt-pcre-qt-zlib\-qt-libpng-qt-libjpeg-qt-freetype-qt-harfbuzz\-skipqtw
- 模版方法模式(Template Method Pattern
快乐的划水a
设计模式设计模式c++
模板方法模式是一种行为设计模式,它定义一个操作中的算法骨架,将一些步骤延迟到子类中实现。核心思想是"封装不变部分,扩展可变部分",即父类确定流程框架,子类根据需求重写特定步骤,而不改变整体流程结构。介绍核心角色抽象类(AbstractClass):定义算法骨架(模板方法),包含多个抽象方法(子类需实现)和可选的钩子方法(HookMethod,子类可选择性重写)。具体子类(ConcreteClass
- TechGPT3部署
环境配置与TechGPT2配置相同:TechGPT2部署-CSDN博客。模型下载步骤如下。sudoaptupdatesudoaptinstallgit-lfs-ygitlfsinstall学术加速并克隆模型代码库。source/etc/network_turbogitclonehttps://github.com/neukg/TechGPT-3.0.git禁用smudge,防止clone过程中拉大
- Go-Faiss安装教程
LukJH
golangfaiss开发语言
Go-Faiss安装教程本文主要讲述如何解决以下问题autotunefaiss/c_api/AutoTune_c.h:Nosuchfileordirectory5|#include|^~~~~~~~~~~~~~~~~~~~~~~~~~1.正常安装这里是按照官网的说法来安装go-faiss。gitclonehttps://github.com/facebookresearch/faiss.gitcd
- Flink 自定义类加载器和子优先类加载策略
lifallen
Flink数据库数据结构大数据flinkjava分布式
子类优先加载Flink默认采用了子优先(Child-First)的类加载策略来加载用户代码,以解决潜在的依赖冲突问题。我们可以通过源码来证明这一点。ChildFirstClassLoader的实现Flink中负责实现“子优先”加载逻辑的核心类是ChildFirstClassLoader。其关键的loadClassWithoutExceptionHandling方法定义了类加载的顺序。//...ex
- GitHub下载教程:2025年最新详解从GitHub上传、下载文件、子目录与完整项目【图文教程】
猫头虎
github开源gitgitcodegiteegiteasvn
GitHub下载教程:2025年最新详解从GitHub上传、下载文件、子目录与完整项目【图文教程】摘要本篇针对中国大陆(北京/上海/广州/深圳)及全球开发者量身打造,涵盖:单个文件下载(Raw+浏览器/脚本/DownGit)子目录下载(DownGit+gitsparse-checkout+脚本)子模块与子树下载整库下载(gitclone+GitHubCLI+DownloadZIP)加速与镜像(Fa
- 【vivado使用】第7篇:vivado implementation执行时候报错:Unsupported PLLE2_ADV connectivity.......
黑猫学长呀
黑猫的FPGA知识合集fpga芯片fpga开发ic嵌入式硬件
执行时候出错,[DRCREQP-1712]Inputclockdriver:UnsupportedPLLE2_ADVconnectivity.Thesignalu_clk_wiz_0/inst/clk_in1ontheu_clk_wiz_0/inst/plle2_adv_inst/CLKIN1pinofu_clk_wiz_0/inst/plle2_adv_instwithCOMPENSATIONm
- kh dksl.php,php中取得URL的根域名的代码
克勒kk
khdksl.php
php中取得URL的根域名的代码发布于2014-12-1310:14:08|121次阅读|评论:0|来源:网友投递PHP开源脚本语言PHP(外文名:HypertextPreprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。本文为大家讲解的是php
- 数字人克隆中SyncTalk算法介绍与部署过程
优秘智能UMI
人工智能ubuntu
SyncTalk算法介绍SyncTalk合成同步的头部说话视频,采用三平面哈希表示来保持主体身份。它可以生成同步的嘴唇动作、面部表情和稳定的头部姿势,并恢复头发细节以创建高分辨率视频。部署在Linux中部署该项目,在Ubuntu18.04、Pytorch1.12.1和CUDA11.3上测试。gitclonehttps://github.com/ZiqiaoPeng/SyncTalk.gitcdSy
- 已经启动的docker容器中编辑文件,复制文件到容器
一颗小行星!
前端开发docker编辑文件
docker镜像并不是一个完整的Linux系统,有的容器中无法使用vi进行编辑文件。最近遇到一个问题,在自己的云服务器上使用nextcloud的docker镜像搭了个网盘服务,需要修改的nextcloud配置文件,但是又没有挂载配置文件所在目录。进入docker中发现并没有安装vi,也没有yum和apt-get安装工具,没有办法直接编辑。本来想通过增加挂载目录来解决:使用当前容器构建新的镜像,重新
- 宝塔面板启用 QUIC 与 Brotli 的完整教程
阿甘知识库
宝塔面板QUIChttp3Brotli
环境系统:Ubuntu22.04.4LTSx86_64宝塔版本:7.7.0(可使用本博客提供的一键安装优化脚本)nginx版本:1.26.1开放UDP端口注意:在你的服务器商家那里也要开放443udp端口sudoufwallow443/udp然后重新加载UFW以使新规则生效:sudoufwreload安装ngx_brotli模块cd/www/servergitclone--recurse-subm
- 本文概括了PHP 的发展历程与核心技术可关键阶段和特性
jishujiaoliu1682
php开发语言
⏳一、发展历程起源(1994-1995年)由RasmusLerdorf开发,最初用Perl编写个人网站表单工具,后改用C语言重写并加入数据库访问功能,命名为PHP1.0。此时已支持表单处理和基础数据库操作14。早期迭代(1997-2000年)PHP3.0(1997年):引入Zend引擎(精简脚本解释器),提升性能和稳定性,奠定语言基础架构1。PHP4.0(2000年):
- 雷林鹏分享:Ruby 数据库访问 - DBI 教程
weixin_30517001
数据库ruby操作系统
Ruby数据库访问-DBI教程本章节将向您讲解如何使用Ruby访问数据库。RubyDBI模块为Ruby脚本提供了类似于PerlDBI模块的独立于数据库的接口。DBI即Databaseindependentinterface,代表了Ruby独立于数据库的接口。DBI在Ruby代码与底层数据库之间提供了一个抽象层,允许您简单地实现数据库切换。它定义了一系列方法、变量和规范,提供了一个独立于数据库的一致
- 【Ruby学习笔记】18.Ruby 数据库访问 - DBI 教程
海棠赠微雨.
Ruby学习笔记数据库ruby学习后端开发语言
Ruby数据库访问-DBI教程本章节将向您讲解如何使用Ruby访问数据库。RubyDBI模块为Ruby脚本提供了类似于PerlDBI模块的独立于数据库的接口。DBI即Databaseindependentinterface,代表了Ruby独立于数据库的接口。DBI在Ruby代码与底层数据库之间提供了一个抽象层,允许您简单地实现数据库切换。它定义了一系列方法、变量和规范,提供了一个独立于数据库的一致
- JDK 8 十大新特性详解
客 人
jdk
前言:Java8已经发布很久了,很多报道表明Java8是一次重大的版本升级。在JavaCodeGeeks上已经有很多介绍Java8新特性的文章,例如PlayingwithJava8–LambdasandConcurrency、Java8DateTimeAPITutorial:LocalDateTime和AbstractClassVersusInterfaceintheJDK8Era。本文还参考了一
- LeetCode 5. Longest Palindromic Substring(最长回文子串)
想学会飞行的阿番
思路:有两种1.dpdp[i][j]=1whendp[i+1][j-1]==1&&s[i]==s[j]dp[i][j]=0whendp[i+1][j-1]=0dp[i][i]=1dp[i][i+1]=s[i]==s[j]?1:0;()注意此时要更新start和longestclassSolution{public:/*回环有两种,abba,abaabcd,abc用DP[i][j]=1||0*/st
- 读书笔记 effective c++ Item 13 用对象来管理资源
yinjing8435
正文回到顶部1.不要手动释放从函数返回的堆资源假设你正在处理一个模拟Investment的程序库,不同的Investmetn类型从Investment基类继承而来,1classInvestment{...};//rootclassofhierarchyof23//investmenttypes进一步假设这个程序库通过一个工厂函数(Item7)来给我们提供特定Investment对象:1Invest
- MyBatis Plus 中的条件构造器
中东大鹅
mybatisspringboot后端java
一、WrapperWrapper:条件构造抽象类,最顶端父类AbstractWrapper:用于查询条件封装,生成sql的where条件QueryWrapper:查询条件封装UpdateWrapper:Update条件封装AbstractLambdaWrapper:使用Lambda语法LambdaQueryWrapper:用于Lambda语法使用的查询WrapperLambdaUpdateWrap
- Spring源码-读取XML文件配置信息
一、XML基础DTD、XML阐述、XML的两种文档类型约束和DTD的使用-CSDN博客二、newFile()、getResource()、getResourceAsStream()Java中Class类和ClassLoader类的getResource()和getResourceAsStream()方法的使用_getclassloader().getresourceasstream-CSDN博客三
- ROS2入门到精通—— 2-13 ROS2实战:实现机器人多目标点导航(附ROS C++代码以及脚本实现)
Big David
ROS2实战精讲机器人多点导航ROS2Nav2C++
0前言实现机器人多目标点导航是非常常见的需求,本文将介绍ROS2和Shell脚本两个方法实现多目标点导航,读者可以根据需求对接仿真和实车。1yaml-cpp介绍YAML是专门用来写配置文件的语言,实质上是一种通用的数据串行化格式1.1yaml-cpp安装gitclonehttps://github.com/jbeder/yaml-cpp.gitcdyaml-cppmkdirbuild&&cdbui
- perl json encode_json decode_json
scan724
perlWeixinClient
Perl的decode_json()函数用于在Perl中解码JSON。这个函数返回从JSON解码到适当Perl类型的值useJSONqw/encode_jsondecode_json/;my$data=[{'name'=>'Ken','age'=>19},{'name'=>'xy','age'=>25}];my$json_out=encode_json($data);print$json_out;
- BCGControlBar使用(八)
weixin_33928137
消息提示框PopupDemoMSN样式自定义样式1.创建CMSNDlg类(含控件摆放),派生于CBCGPPopupDlg,必须是子(child)类型voidCMSNDlg::OnDraw(CDC*pDC){CBCGPPopupDlg::OnDraw(pDC);CRectrectClient;GetClientRect(rectClient);CSizesizeLogo=m_imgLogo.GetI
- JAVA类隔离机制
每天三杯咖啡
设计模式javajava开发语言后端
JAVA类隔离机制目录类隔离机制类加载概述什么是类加载类加载的好处类加载流程类加载时机加载顺序Luancher源码ExtClassLoader源码AppClassLoader源码双亲委托父加载器不是父类BootstrapClassLoader自定义ClassLoader一般步骤举个栗子破坏双亲委托案例Doom的类隔离pandora的类隔离问题&痛点pandora是什么JVM-Sandbox的隔离类
- Python使用influxDB
doubleZ0108
安装sudoapt-getinstallpython-influxdb连接数据库frominfluxdbimportInfluxDBClientclient=InfluxDBClient('localhost',8086,'your_username','yuor_password','your_dbname')查询数据root=client.query('select*fromimu_posli
- ZooKeeper学习专栏(六):集群模式部署与解析
快乐肚皮
Zookeeperzookeeper学习分布式
文章目录前言一、集群角色解析二、关键配置项三、集群部署四、Leader选举机制ZookeeperLeader选举流程图解总结前言在分布式系统中,ZooKeeper作为核心的协调服务,其集群模式的高可用性至关重要。本文将深入解析ZooKeeper集群的部署实践与核心机制,涵盖三大核心角色(Leader/Follower/Observer)的协同原理、关键配置的底层逻辑、FastLeader选举算法的
- MinIO和亚马逊云的S3 Python SDK
「已注销」
python亚马逊sdkpip
MinIOPythonSDK是简单存储服务(akaS3)客户端,用于对任何与AmazonS3兼容的对象存储服务执行存储桶和对象操作。最低要求Python3.6或更高版本。使用pip下载pip3installminio下载源gitclonehttps://github.com/minio/minio-pycdminio-pypythonsetup.pyinstall快速入门示例-文件上传器此示例程序
- MongoDB中的THP是什么-核心解决频繁断线居然是关闭THP-THP原理以及MongoDB版本号的关系-卓伊凡|糖果
卓伊凡
数据库开发相关知识专栏mongodb数据库
MongoDB中的THP是什么-核心解决频繁断线居然是关闭THP-THP原理以及MongoDB版本号的关系-卓伊凡|糖果ngineto‘wiredTiger’.2025-07-22T17:05:20.228+0800WSTORAGE[initandlisten]Recoveringdatafromthelastcleancheckpoint.2025-07-22T17:05:20.228+0800
- Redis常用数据类型和它们的底层数据结构
Redis常用数据类型有8种:String、Hash、List、Set、Zset、HyperLogLog、Bitmap和Geospatial,其中前面5种是最常用的。1、String(字符串)String是最基本的数据类型,每个键对应一个值,可以是文本、数字、二进制数据等。底层数据结构:使用SDS(SimpleDynamicString,简单动态字符串);解决了C语言字符串(以空字符\0结尾)的不
- 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独立出来,数据持