- 如何处理前端调用后端接口时的超时问题?
m0_74824044
前端
处理前端调用后端接口时的超时问题,可以从以下几个方面进行:全局或单独设置超时时间:可以通过全局设置或单独为某个请求设置超时时间来避免超时问题。例如,在Vue项目中,可以在配置文件如config/index.js中调整axios的超时时间。此外,也可以使用axios全局设置网络超时,或者针对特定请求单独设置超时时间。使用递归和Promise.race():当数据量较大时,使用递归加then方式处理请
- RabbitMQ高级特性详解
ngioig
RabbitMQruby开发语言后端bootstraprabbitmq
前言RabbitMQ是一款广泛使用的开源消息队列软件,它基于AMQP(AdvancedMessageQueuingProtocol)标准实现。本文将带你深入了解RabbitMQ的一些高级特性,包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等,并通过示例代码展示如何在实际项目中应用这些特性。目录1.消息确认机制1.1什么是消息确认?自动确认vs手动确认1.2使用场景2.死信队列2.1死信
- mac 安装 python2
梦魇梦狸º
macospython
官网下载2.7:PythonReleasePython2.7.18|Python.org查找地址:whichpython2#/usr/local/bin/python2设置npm使用Python2(新建窗口):npmconfigsetpython/usr/local/bin/python2验证Python版本npmconfiggetpython#应返回你设置的Python2路径python2--v
- [Foc学习记录00]导览
GivemeAK
学习
电机理论基础电磁基础【电机学复习笔记】第一章磁路_电机学csdn-CSDN博客电路基础磁滞现象:一讲就懂,很nb【经典】深刻阐述磁性材料的磁滞现象_哔哩哔哩_bilibili《现代永磁同步电机控制原理及Matlab仿真》学习第一章、三相永磁同步电机的数学建模006永磁电机永磁体的类型:何为凸极性、隐极性,表贴式、内置式,傻瓜式讲解,专为零基础编写。_表贴式和内置式的区别-CSDN博客根据学习进度,
- 1.21学习总结
2401_89561082
学习
今天不知道点到什么把codeblock给玩死了,试图抢救,但是抢救无效,只好删了重下,终于让他变成了记忆中的模样。在博客上看了背包问题详解,不是很理解,题目也没能做出来。P1387:最大正方形b[i][j]表示以节点i,j为右下角,可构成的最大正方形的边长。只有a[i][j]==1时,节点i,j才能作为正方形的右下角;对于一个已经确定的b[i][j]=x,它表明包括节点i,j在内向上x个节点,向左
- elasticSearch数据的导入和导出
ZNineSun
大数据elasticsearchelasticdumpnode
es数据的导入和导出需要借助于elasticdump工具,这是一个nodejs的插件,安装方式直接使用npm即可,安装指令如下:npminstallelasticdump-g如果您的电脑还未安装Node环境,请移步此处:《npm安装教程》1.导出指定索引的数据到本地elasticdump--input=http://localhost:9200/demo--output=D:/ES/date/de
- java sqlite json_是否可以在SQLite中存储和查询JSON?
西琴小竹
javasqlitejson
我需要将JSON对象存储在SQLite数据库中,然后对它进行复杂的查询.我做了这样一张桌子:+--------------------------------------+|document|property|string|number|+--------------------------------------+|foo|"title"|"test"||+-------------------
- Python文件封装成EXE(可执行文件)
苏学能
python开发语言后端
Section1-创建纯python环境创建一个python环境,最好32位的,这样执行生成的exe可以在32位系统和64位系统上运行,此外,打包编译的exe也不至于过于庞大,以及出现总是打包不成功的问题。Section2-执行pipinstallpyinstaller在纯python环境中pip命令下执行。Section3-修改配置文件:#-*-mode:python-*-block_ciphe
- 大模型的部署方法三:使用Xinference部署
大模型微调部署
人工智能AI大模型大模型AI深度学习大模型部署
Xinference是一个分布式推理框架,它支持一键部署各种模型,包括大型语言模型(LLMs)。使用Xinference部署AI大模型的步骤:一、安装Xinference1)环境准备:确保您的系统上安装了Python3.9或以上版本。安装Docker(如果选择使用Docker部署)。2)安装Xinference:通过Python的包管理工具pip安装Xinference:pipinstall"xi
- Zerox:AI驱动的万能OCR工具,精准识别复杂布局并输出Markdown格式,支持PDF、DOCX、图片等多种文件格式
蚝油菜花
每日AI项目与应用实例人工智能ocrpdf人工智能开源
❤️如果你也关注AI的发展现状,且对AI应用开发非常感兴趣,我会每日分享大模型与AI领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!微信公众号|搜一搜:蚝油菜花快速阅读功能:支持零样本OCR识别,兼容PDF、DOCX、图片等多种格式文件。技术:基于GPT-4o-mini模型,能够处理复杂布局文档,输出Markdown格式结果。应用:提供API接口,便于集成到
- 模型部署工具01:Docker || 用Docker打包模型 Build Once Run Anywhere
Tiandaren
模型部署dockerjava容器服务器深度学习人工智能linux
Docker是一个开源的容器化平台,可以让开发者和运维人员轻松构建、发布和运行应用程序。Docker的核心概念是通过容器技术隔离应用及其依赖项,使得软件在不同的环境中运行时具有一致性。无论是开发环境、测试环境,还是生产环境,Docker都能够提供高效、可靠的解决方案。在本教程中,我们将详细介绍Docker的核心概念、安装方法,以及如何使用Docker进行容器化操作。Docker是什么?为什么值得学
- Docker部署nnunetv2简洁教程
Tiandaren
模型部署docker容器运维pytorch人工智能深度学习python
前言:感觉一些教程没必要说那么多,直接贴出重点的配置文件。如果有不懂的,可以把此文档丢给gpt,配合自己的环境一同服用。首先,在nnunet路径下创建一个Dockerfile。由于我已经完成了nnUNet的训练,所以不需要将相关数据全部上传到容器中,而是只保留源码。#使用适当的基础镜像(如pytorch官方镜像)FROMpytorch/pytorch:latest#更新apt-get并安装必要的工
- Docker 安装MySQL 5.7(超详细文图说明及MySQL配置)
m0_74823317
面试学习路线阿里巴巴资料职业发展dockermysqladb后端
1)下载MySQL5.7镜像#默认下载MySQL5.7最新版本(其他版本可以指定比如dockerpullmysql:5.7.34)dockerpullmysql:5.72)查看已下载的docker镜像dockerimages3)创建MySQL容器并运行方式一(快捷方式,仅配置root密码)dockerrun--namemysql5.7-p3306:3306-eMYSQL_ROOT_PASSWORD
- mongodb清理删除历史数据
程序员
批量清理mongodb历史数据清理程序的原来目前项目组上很多平台上线历史数据积压,导致入库查询数据缓慢,历史数据有些已经归档,进行历史数据清理删除。之前临时写shell脚本,太简陋,重新使用Python进行改造,新增备份功能,和配置文件删除指定字段和时间范围内数据。代码篇#!/usr/local/python3/bin/python3importconfigparser,logging.confi
- Swift语言的函数实现
2501_90183952
包罗万象golang开发语言后端
Swift语言函数实现详解引言Swift是一种强类型、泛型编程的现代编程语言,广泛应用于iOS和macOS开发。函数是Swift编程中的基本构建块之一,通过函数可以将代码进行模块化,实现重用性和可读性。本篇文章将系统地介绍Swift中的函数,包括其定义、参数、返回值、闭包和高阶函数等,实现一些实用的示例,帮助读者更好地理解和掌握Swift的函数特性。一、函数的基本概念函数是执行特定任务的一段代码,
- nginx优化
后端
nginx配置文件nginx配置文件#主配置文件[root@nginx_1conf]#morenginx.confuserroot;worker_processes4;error_loglogs/error.log;pidsbin/nginx.pid;events{useepoll;worker_connections65535;multi_accepton;}stream{upstreamcmp
- Nginx进阶篇之端口转发
程序员
nginx透传udp、tcp端口需要nginx编译时,支持加载stream模块。./configure--prefix=/usr/local/nginx--with-stream配置stream需要在nginx的http和events区域块之间配置即可。userroot;worker_processesauto;error_loglogs/error.log;pidsbin/nginx.pid;e
- web前端常见的面试题总结
2401_84436095
程序员前端
script.src=url+‘?’+data+‘callback=’+funcNamedocument.body.appendChild(script);//这里得到请求的数据,在回调函数中执行处理window[funcName]=function(data){callback(data)}}//使用jsonp(‘http:127.0.0.1:3000/api’,{},function(res)
- 用JavaScript实现找不同小游戏
算是难了
javascript开发语言前端websocket
目录倒计时的实现找不同实现对canvas的初始化实现画布的分割,父盒子>子盒子>canvas找不同逻辑的判断实现图片的导入DOM节点的监听声明两个需要监听的节点禁用页面点击事件的函数DOM监听实现勋章分数增加和生命的减少减命逻辑死亡响应websocket交互定义给后端发送的数据包断线重连最后,调用封装好的websocket创建初始之物,其行必丑代码写的非常繁琐,有很多细节在复盘的时候也会想不起来为
- 2025年使用 npx + expo + react native 创建一个项目
expoyarnreact
为什么要用expo?因为reactnative官方推荐的为什么要用npx?因为expo官方推荐的怎么用呢?看expo的官方文档:https://docs.expo.dev/npxcreate-expo-app@latest这里需要注意,如果你问chatgpt,会得到npminstall-gexpo-cli来安装,但是这样方式已经过期了,不要再用了─➤expoversionWARNING:Thele
- uniapp 开发 h5 授权微信登录(静默和非静默)
陈龙龙的陈龙龙
uni-appuni-app微信前端htmljavascript
具体流程:进入h5➡️静默登录➡️请求登录接口➡️必要时候调起登录组件➡️点击按钮进行非静默登录➡️再次请求登录接口➡️获取到所有用户数据一、封装登录functionauthLogin:(callback)=>{constthat=this;//判断是否是在微信环境下运行if(utils.isWechat()){consttoken=window.localStorage.getItem('__t
- 使用VUE的axios解决调用百度地图api的跨域访问问题
知忆_IS
vuehtmlnpmjavascriptchrome
在构建一个vue前后端分离的项目时候,需要用到百度地图提供的web服务,但是在使用axios方式发送get请求的时候,web页面不显示相应结果,在Google中按F12进入开发者模式之后,发现提示如下:XMLHttpRequestcannotloadOriginhttp://localhost:8080isnotallowedbyAccess-Control-Allow-Origin.根据网上的搜
- transformer模型代码
地瓜不是呱
学习笔记transformer深度学习pytorch
importnumpyasnpimporttorchimporttorch.nnasnnimporttorch.optimasoptimimportmatplotlib.pyplotaspltimportmathdefmake_batch(sentences):input_batch=[[src_vocab[n]forninsentences[0].split()]]output_batch=[[
- 基于 Colyseus 的实时消息处理与广播机制
maply
Colyseus前端colyseus消息队列node.js
基于Colyseus的实时消息处理与广播机制Colyseus是一个用于构建实时多人游戏和协作应用的开源框架,基于Node.js运行,并使用WebSocket进行高效的消息传输。它提供了一套结构化的API来管理房间(Rooms)、客户端(Clients)和游戏状态(State),从而支持高效的实时消息处理与广播机制。1.Colyseus消息处理与广播的基本概念Colyseus主要通过以下组件来管理实
- 【Elasticsearch 】 聚合分析:聚合概述
程风破~
Elasticsearchelasticsearch大数据搜索引擎
博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分
- go语言安装与卸载
kankan231
golanggolanglinux
Linux下go语言的安装1在https://studygolang.com/dl上下载相应的系统版本下载Linux版本压缩包:wgethttps://studygolang.com/dl/golang/go1.17.linux-amd64.tar.gz2解压到/usr/local/gotar-C/usr/local-xzfgo1.17.linux-amd64.tar.gz3添加/usr/loca
- 从SSL到TLS——互联网传输的护卫军
创意锦囊
ssl网络安全
在这个信息化高度发展的时代,我们每天都在不知不觉中接触到大量的网络传输协议,但大多数人对于这些协议背后的技术并不清楚。TLS(TransportLayerSecurity)就是这样一种守护网络传输安全的技术,悄然为我们保驾护航。TLS的前身是SSL(SecureSocketsLayer),如今已发展成互联网传输协议的基石。今天,我们就来聊聊TLS的发展历程,从SSL到TLS,它是如何一步步成为互联
- 变量,数组,私有仓库的构建
小菜刀刀
linux运维服务器
1.理解函数调用,总结函数普通变量,环境变量和本地变量。关于函数的理解,可以将其比作是模块化编程中的独立组件(或者说是模块)。函数能够自治地完成特定的任务或功能。为了构建一个实现多种功能的程序,开发者可以将不同的功能分别封装成独立的函数模块。这样,在主程序流程中,通过调用这些函数模块,可以实现多个功能的集成与协同工作。本地变量:作用在函数内部,函数结束后被自动销毁(使用local来设置本地变量)普
- 解决vscode连接docker容器没有权限的问题
Ivy_Hu677
vscodedockeride
问题描述为了用VSCode打开容器内的代码,方便调试,安装VSCode中的Docker扩展。但是发现显示如下报错:ERROR:GotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Gethttp://%2Fvar%2Frun%2Fdocker.sock/v1.24/in
- Linux环境下删除Golang
HoUnix
golang
在Linux操作系统中,如果你决定删除Golang编程语言及其相关组件,需要执行一系列步骤。本文将为你提供详细的指导,并附上相应的源代码。卸载Golang首先,需要卸载已安装的Golang。在终端中执行以下命令:sudorm-rf/usr/local/go这将删除Golang的安装目录。移除环境变量下一步是从系统环境变量中移除与Golang相关的路径。打开终端,编辑~/.profile文件(或者是
- 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独立出来,数据持