- hapijs/lab 项目使用教程
汤怡唯Matilda
hapijs/lab项目使用教程labNodetestutility项目地址:https://gitcode.com/gh_mirrors/lab2/lab1.项目的目录结构及介绍hapijs/lab/├──bin/│└──lab├──lib/│├──coverage.js│├──index.js│├──reporters/│└──runner.js├──test/│├──coverage.js│
- 推荐开源项目:Hapi.js
张姿桃Erwin
推荐开源项目:Hapi.jshapiTheSimple,SecureFrameworkDevelopersTrust项目地址:https://gitcode.com/gh_mirrors/ha/hapiHapi.js是一个用于构建web应用和服务的Node.js框架。它提供了一种简单、直观的方式来组织和管理你的应用代码,并且提供了许多内置的功能特性,如路由、中间件、插件等。功能特性简单易用的API
- hapi.js入门系列(一)——一个简单的Hello World程序
BuBu高打火机
Node.jshapi.jsnodejshapi.jsnode框架
目录简介一、安装hapi1.1创建项目1.2初始化package.json1.3安装Hapi依赖二、一个简单的helloworld程序2.1创建一个最基础的服务2.2添加一个路由简介文章所使用各技术、框架版本一览名称版本Node.js12.15.0hapi.js20.1.0一、安装hapi1.1创建项目创建文件夹hapi-project,并进入该目录#创建文件夹mkdirhapi-project#
- 构建高效可扩展Web应用:Hapi.js项目架构实践
芦苇毛
本文还有配套的精品资源,点击获取简介:Hapi.js是一个专为Web应用和服务设计的服务器端框架,由WalmartLabs开发,以模块化和插件驱动的架构闻名。Node.js作为其运行环境,提供了事件驱动和非阻塞I/O模型。本项目展示了Hapi.js的核心概念,包括其插件系统、路由和处理程序、请求和响应对象以及验证和序列化功能。同时介绍了典型的Hapi.js项目结构,包括服务器初始化、路由定义、插件
- Electron技术架构
沿着路走到底
Electron桌面应用electron架构前端
1Chromium:支持最新特性的浏览器Node.js:javascript运行时,可实现文件读写等NativeAPIs:提供统一的原生界面能力1
- electron-vue实现与硬件进行串口通信
闲人孙大壮
electronnpmnode.jsvue.jselectron
背景:项目需求,在electron桌面应用中,实现与硬件进行串口通信,一番调研,选择了契合度高的serialport插件地址:NodeSerialport插件选择好了,接下来就是集成实现功能,它这个集成是有坑的因为版本的问题,导致在集成完后报错在网上查了各种错误,最终总结为以下步骤:前置条件1.确保你的电脑中装有python环境,并且环境为2.7(很重要)2.安装npminstall--globa
- 基于Hexo的主题Fluid搭建Github博客
qq742234984
计算机githubgitnpmnode.jshexo
公众号:数学建模与人工智能基于Hexo的主题Fluid搭建Github博客一、Github配置1.安装Git2.部署本地Git与Github连接(SSH)二、node.js安装和环境配置1.安装node.js2.查看安装是否成功(版本号)3.配置环境变量三、下载Hexo并配置fluid主题1.下载Hexo2.配置fluid主题1.安装fluid2.配置fluid3.更新部署博客页面4.部署到git
- neo4j初识笔记(一)(python操作篇)
夏么
pythonneo4jpythonneo4j
1、安装驱动pipinstallpy2neo2、插入数据#-*-coding:UTF-8-*-frompy2neoimportGraph,Node,Relationship#连接neo4j数据库,输入地址、用户名、密码graph=Graph('http://192.168.25.223:7474',username='neo4j',password='123456')defcreate_date(
- 电控三周速成计划参考
kyle~
嵌入式单片机嵌入式硬件
第1周:基础搭建与GPIO控制学习目标:建立开发环境,掌握最基础的硬件控制能力每日学习(2-3小时):环境搭建(2天)安装KeilMDK-ARM+STM32CubeMX使用CubeMX创建第一个工程(选择STM32F103C8T6)生成代码并烧录到开发板(LED点亮验证)GPIO编程(3天)推挽输出/开漏输出模式区别使用HAL_GPIO_WritePin()控制LED按键输入检测(轮询方式)时钟系
- 每日一题——106. 从中序与后序遍历序列构造二叉树
m0_62867827
算法leetcode职场和发展
题目链接:106.从中序与后序遍历序列构造二叉树-力扣(LeetCode)代码:/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),
- nodeJS封装工具类实现返回状态统一管理
至尊丨楷君
node.js前端javascriptvue.js
简介:封装工具类实现返回状态码统一管理为什么要封装状态码公共文件维护状态码方便快速定位问题和迭代开发防止状态码重复,命名冲突封装返回状态工具类/***返回值统一管理工具*/classBackCode{constructor({code,data,msg}){this.code=codethis.data=datathis.msg=msg}//请求成功,只返回code内容staticbuildSuc
- Socket.IO负载均衡
一张假钞
负载均衡服务器前端nginx
个人博客地址:Socket.IO负载均衡|一张假钞的真实世界架构Nginx配置为了负载均衡时连接保证始终连到一个节点上,使用Nginx的ip_hash实现sessionsticky,让客户端始终连接到集群内一台节点上。在Nginx的conf.d目录下创建配置文件socket_io.conf,内容如下:upstreamnodejs_websocket{ip_hash;server192.168.1.
- java.util.concurrent.CompletionException: java.lang.IllegalMonitorStateException: attempt to unlock
啥时能挣6000块
工作中错误发现java多线程
今天工作的时候出现了一个错误java.util.concurrent.CompletionException:java.lang.IllegalMonitorStateException:attempttounlocklock,notlockedbycurrentthreadbynodeid这个报错的原因,找了一下,发现是线程A的锁,但是线程B去尝试释放锁,导致出现了这个报错。正常的释放锁的时候我
- nodejs 安装node-sass
kino的编程笔记
vuenodejsnpmnode-sassvue
installnode-sass作用检验node-sass是否安装以及是否安装成功安装node-sass配置淘宝镜像安装node-sass的命令作用Sass是一种预处理器脚本语言,可以解释或编译成层叠样式表(CSS)检验node-sass是否安装以及是否安装成功node-sass-v表示已经安装或安装成功表示没有安装或者安装失败安装node-sass配置淘宝镜像设置淘宝镜像的二进制站点setSAS
- go语言与node.js的点滴思考
棕生
go语言node.js
node.js基于V8引擎和JavaScript语言通过非阻塞I/O和事件驱动实现了一个非常纯正的异步平台,在处理I/O密集型任务时表现出了优秀的性能。但node.js具有两个非常明显的缺陷:一是单线程运行,不能很好的利用多核;二是异步编程,对业务逻辑的表现非常不自然。go语言通过封装的协程的概念很好的解决了node.js的上述两个问题:首先go语言中的协程通过系统线程的方式并行运行在多个核上;每
- nodejs:js-mdict 的下载、安装、测试、build
belldeep
nodejsnodejsnvmyarnJest
js-mdict项目的目录结构:js-mdict项目教程js-mdict下载地址:js-mdict-master.zip先解压到D:\Source\js-mdict6.0.2用了ts(TypeScript)和Jest,增加了应用开发的难度,因为先要了解ts和Jest。参阅:测试与开发:Jest测试框架介绍Jest是最流行的JavaScript测试框架之一。测试人员广泛使用Jest对JavaScri
- 深入理解 ES 模块与 CommonJS 模块
阿贾克斯的黎明
游戏开发elasticsearch大数据搜索引擎
目录《深入理解ES模块与CommonJS模块》引言一、CommonJS模块1.起源与背景2.基本语法导出模块导入模块3.特点二、ES模块1.起源与背景2.基本语法导出模块导入模块3.特点三、ES模块与CommonJS模块的区别1.语法差异2.加载方式3.静态vs动态4.适用场景四、实际开发中的应用1.在Node.js中使用ES模块2.在浏览器中使用ES模块五、总结引言在JavaScript的发展历
- linux下编译安装python3.10亲测可行!
致命扼腕
环境安装服务器使用linuxpython运维
方法简单两部步就可以啦apt-getupdate&&apt-getupgrade-yapt-getinstall-y--no-install-recommendsgccg++makepython3python3-devpython3-pippython3-venvpython3-wheelespeak-nglibsndfile1-dev测试命令行输入python3即可看到安装成功安装python包
- Linux下安装python3.10.12环境
爱思考的李MAX
linux运维服务器python
安装python3编程环境检查是否安装python3python3-V安装python3依赖sudoyum-yinstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devellibffi-devel下载pyt
- 第28节课:前端项目实战—从需求分析到开发流程的全方位指南
学问小小谢
HTML学习笔记前端需求分析安全web安全网络性能优化html5
目录项目需求分析与设计项目背景与目标项目背景项目目标需求收集与分析用户需求业务需求项目设计技术栈选择系统架构设计数据库设计项目开发流程环境搭建安装Node.js和npm初始化项目编码实践组件化开发状态管理测试与调试单元测试集成测试部署与维护部署维护结语在前端开发领域,将理论知识应用于实际项目是提升技能的关键。本节课将通过一个完整的前端项目实战案例,详细介绍项目需求分析与设计,以及项目开发流程,帮助
- React常见面试题(2024最新版)
前端小小王
react.js前端前端框架面试
创建项目npxcreate-react-appmy-app启动项目npmstart目录结构目录/文件名描述README.md项目的自述文件node_modules/项目依赖包存放目录package.json包管理配置文件,记录项目信息和依赖package-lock.json锁定依赖版本,确保跨环境一致性public/公共资源目录public/index.html主HTML文件,React应用将被引
- Python+Selenium环境搭建
程序媛_
SeleniumPythonpythonseleniumpycharm
文章目录1安装Python1.1下载1.2安装注意事项1.3验证环境2安装PyCharm2.1下载PyCharm社区版2.2安装注意事项3安装浏览器及驱动3.1下载Chrome浏览器3.2下载Chromedriver3.3关闭浏览器自动更新关闭3.4配置Chromdriver4安装Selenium5调试6异常解决7自动化Edge浏览器1安装Python1.1下载下载网址:https://www.p
- ubuntu22.04安装k3s, kuboard
LogicLancer
docker持续集成
直接安装方式更新系统包列表sudoaptupdate安装所需的依赖sudoaptinstall-ycurl下载k3s安装脚本curl-sfLhttps://get.k3s.io|sh-验证k3s安装sudosystemctlstatusk3s获取k3s的tokensudocat/var/lib/rancher/k3s/server/node-token设置kubectl配置mkdir-p$HOME
- k8s网络架构图_kubernetes搭建高可用集群架构图
沈千越
k8s网络架构图
LoadBalancer一般使用HaProxy。如果你在其他云平台上搭建,可以利用云平台上的负载均衡器:例如aws采用elb;aliyun...参考:Kubernetes采用主从分布式架构,包括MasterNode(主节点)、WorkerNode(从节点或工作节点),以及客户端命令行工具kubectl和其它附加项。MasterNode:主控节点,对集群进行调度管理。由APIServer、Sched
- 在Ubuntu 20.04上安装Node.js 16和npm
电子木头
node.jsubuntunpm
1.更新系统包列表首先,确保你的系统包列表是最新的。sudoaptupdatesudoaptupgrade2.安装Node.js16和npm使用NodeSource提供的安装脚本来安装Node.js16及其附带的npm。添加NodeSource仓库:curl-fsSLhttps://deb.nodesource.com/setup_16.x|sudo-Ebash-安装Node.js16:运行以下命
- 在 Ubuntu 上安装 Node.js 23.x
engchina
LINUXubuntunode.jslinux
在Ubuntu上安装Node.js23.x前提条件安装步骤1.下载设置脚本2.运行设置脚本3.安装Node.js4.验证安装参考链接总结在现代web开发中,Node.js是一个不可或缺的工具。它提供了一个强大的JavaScript运行时环境,使得开发人员可以在服务器端使用JavaScript。本文将详细介绍如何在Ubuntu上安装Node.js23.x。前提条件在开始安装之前,请确保你的系统上已经
- 什么是HTTP/2?它与HTTP/1.1相比有什么改进?
DTcode7
HTML网站开发#前端基础入门三大核心之htmlHTML前端webJavaScriptH5
什么是HTTP/2?它与HTTP/1.1相比有什么改进?HTTP/2的基本概念和作用HTTP/2的关键改进1.多路复用2.二进制分帧3.头部压缩4.服务器推送5.优先级和流控制HTTP/2与HTTP/1.1的对比实现HTTP/2的代码示例和技巧示例一:配置Nginx以启用HTTP/2示例二:使用Node.js和Express启用HTTP/2示例三:优化HTTP/2中的资源加载示例四:使用Chrom
- Vue:前端体系、前后端分离
天宇阿
Vue前端vue.js
文章目录一、前端核心分析1、概述2、前端知识体系2.1、前端三要素2.2、结构层(HTML)2.3、表现层(CSS)2.4、行为层(JavaScript)2.5、三端统一2.6、后端技术2.7、主流前端框架3、了解前后分离的演变史3.1、后端为主的MVC时代3.2、基于AJAX带来的SPA时代3.3、前端为主的MV*时代3.4、NodeJS带来的全栈时代3.5、总结学习视频来自于:秦疆(遇见狂神说
- vue按钮权限的控制解决方案
九霄123
vuevue.js
目标:vue按钮权限的控制解决方案准备知识点:(一)Vue.directive指令(自定义指令)webpack中案例main.js中写入如下代码:1.怎么配置自定义指令的生命周期Vue.directive('hello',{//当被绑定的元素插入到DOM中时……被调用inserted:function(el,binding,vnode){el.style["color"]=binding.valu
- Linux下离线编译安装fictx-qt
Kurt_00
LinuxQtqtlinux开发语言
Linux下离线编译安装fictx-qt备注:解决Linux下Qt无法使用fcitx输入法问题1.下载fictx-qt源码https://github.com/fcitx/fcitx-qt5/tree/1.2.7我这里选择1.2.7版本2.解压fictx-qt源码#解压命令就不写了3.编译安装#创建构建目录mkdirbuild&&cdbuild#cmake命令,注意qt目录换为自己环境中的目录cm
- 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独立出来,数据持