- 用Docker搭建Redis主从复制的集群
2401_84046635
程序员dockerrediseureka
同样再到redis-slave1容器的命令窗口里,通过dockerexec-itredis-slave1/bin/bash命令进入容器的命令行窗口,也通过redis-cli命令进入客户端命令行,也再通过inforeplication命令查看该Redis服务器的主从模式的状态,部分结果如下所示。1c:\work>dockerexec-itredis-slave1/bin/bash2root@2e32
- Nginx面试宝典【刷题系列】
Microi风闲
【面试宝典】ASP.NETCorenginx面试
文章目录1、nginx是如何实现高并发的?2、Nginx如何处理HTTP请求?3、使用“反向代理服务器”的优点是什么?4、列举Nginx服务器的最佳用途。5、Nginx服务器上的Master和Worker进程分别是什么?6、什么是C10K问题?7、请陈述stub_status和sub_filter指令的作用是什么?8、为什么不使用多线程?9、为什么要做动、静分离?10、ngx_http_upstr
- Go Web 项目实战:构建 RESTful API、命令行工具及应用部署
一小路一
掌握Go语言:编程世界的进阶钥匙golang面试后端开发语言
GoWeb项目实战:构建RESTfulAPI、命令行工具及应用部署Go语言因其简洁高效、并发支持强大等特点,已经成为了后端开发的热门选择之一。本篇文章将通过实战案例带领你学习如何使用Go构建一个简单的RESTfulAPI,开发命令行工具,并展示如何使用Docker部署Go应用。通过这些实战内容,你可以更好地理解Go在实际开发中的应用。1.构建一个简单的RESTfulAPIRESTfulAPI是基于
- 在 CentOS 上安装 Docker 和 Docker Compose(可指定版本或安装最新版本)
用数据说话用数据决策
centosdockerlinux
文章目录一、安装Docker1.1安装最新版本的Docker1.2安装指定版本的Docker二、配置Docker镜像加速器(国内镜像源)三、安装DockerCompose3.1安装最新版本的DockerCompose3.2安装指定版本的DockerCompose四、卸载Docker和DockerCompose4.1卸载Docker4.2卸载DockerCompose五、常见问题与解决方案六、总结一
- 作为一名测试工程师如何学习Kubernetes(k8s)技能
网络安全小宇哥
学习kubernetes容器计算机网络web安全安全dubbo
前言Kubernetes(K8s)作为云原生时代的关键技术之一,对于运维工程师、开发工程师以及测试工程师来说,都是一门需要掌握的重要技术。作为一名软件测试工程师,学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程。以下是一个系统性的学习路径和建议:一、了解基础概念1)容器技术:学习Docker等容器技术的基础知识,了解容器的基本概念、镜像、容器运行与管理
- k8s拉取harbor镜像部署
舌尖上的五香
kubernetes容器云原生
在k8s中创建凭证首先在节点docker登录harbor,登录成功之后会在$HOME/.docker/生成一个config.json文件,这个就是登录凭证,后面dockerpull就不需要再登录了。但是如果在k8s发布pod或者deploment时,这个凭证要在k8s中创建一个对应secret,然后挂载到pod或deployment中的yaml中,这样k8s才能下载镜像,否则提示权限验证错误。生成
- nginx 配置代理本地文件并支持跨域
nginx
nginx配置报错invalidnumberofargumentsin"default_type"directiveinI:\nginx-1.22.0/conf/nginx.conf:19Nginx配置中default_type指令的参数格式有误。该错误通常由以下两种原因引起:错误原因分析参数缺失:default_type指令必须指定一个合法的MIME类型(如text/html),但你的配置中可能
- linux常用命令
nginx
在Linux系统中,管理Nginx服务(启动、停止、重启)的常用方法有两种:通过systemd服务管理和直接使用Nginx可执行文件命令。以下是具体操作:一、使用systemd服务管理(推荐)如果Nginx是通过包管理器(如apt或yum)安装的,通常已集成systemd服务。1.启动Nginxsudosystemctlstartnginx2.停止Nginxsudosystemctlstopngi
- Docker必掌握命令及参数Top10
二进制空间安全
基础知识学习docker
1.DockerRundockerrun命令是从Docker镜像启动容器的门户。它允许您指定镜像名称、选项和运行时配置。dockerrun-d-p8080:80nginx-d:在后台运行容器-p:将主机端口映射到容器端口2.DockerPull在运行容器之前,需要从仓库(如DockerHub)下载Docker镜像。dockerpull命令可以完成此操作。dockerpull命令会连接到Docker
- 容器基础_搭建Docker-Ce版本(入门篇)
琼歌
云服docker
一、介绍基于docker-ce的一些常见命令二、步骤1、确定服务器版本uname-r说明:保证系统内核版本>=3.102、移除旧版本sudoyumremovedockerdocker-commondocker-selinuxdocker-engine3、安装docker的依赖包sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm24、下
- Nginx 的 proxy_pass 使用简介
m0_74825223
面试学习路线阿里巴巴nginx运维
文章目录1.基本概念1.1`proxy_pass`概述1.2语法1.3使用场景2.基本用法2.1HTTP代理2.1.1基本示例2.1.2绝对根路径vs相对路径2.2Stream代理3.高级用法3.1正则匹配3.2变量使用3.3重定向3.4精确匹配3.5`if`语句3.6`limit_except`4.实际案例4.1转发到多个后端服务器4.2转发到不同路径4.3转发到UnixDomainSocket
- minio多主机分布式部署
一剑丶飘香
云计算
Minio多主机分布式docker-compose集群部署_miniodocker-compose-CSDN博客
- Docker、docker-compose常用命令
珍朱(珠)奶茶
dockerdocker容器运维
最近很慌的一件事是要在客户的服务器上使用docker容器来部署项目,当时接到这个任务时一脸懵逼,我是谁我在哪;对于还不会docker容器技术的我确实很懵逼,啥也不会;所以最终的结果就是一边学一边部署,从不会到会,到最终上线完成,心情就像是过山车一样,遇到各种问题。好了,废话不多说直接上,这里整理了我在部署时遇到的一些问题,以及在实际部署常用的命令。docker卸载旧版本yumremovedocke
- Docker--Docker Network(网络)
芯作者
DD:日记docker
DockerNetwork(网络)是Docker容器之间和容器与外部网络之间的通信和连接的一种机制。以下是对DockerNetwork的详细解释:一、Docker网络的重要性Docker容器网络是为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP协议栈、端口套接字、IP路由表、防火墙等与网络相关的模块。通过Docker网络,可以实现以下
- Nginx的正向与反向代理
yifanghub
Linuxnginx
一、Nginx简介1.什么是NginxNginx(发音为“engine-x”)是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx是由俄罗斯的IgorSysoev(伊戈尔·赛索耶夫)为解决C10k问题(即同时处理超过10000个客户端连接)而开发的。它以高性能、稳定性、功能丰富和低资源消耗而闻名。它第一个公开版本0.1.0发布于2004年10月4日
- 如何在docker上部署java服务
R-sz
dockerjavapython
目录结构首先DockerfileFROMbladex/alpine-java:
[email protected]=Asia/ShanghaiRUNln-sf/usr/share/zoneinfo/$TZ/etc/localtime&&echo$TZ>/etc/timezoneRUNmkdir-p/xhWORKDIR/xhEXPOSE8106A
- nginx 搭建 IPv6 -> IPv4 反向代理服务器
Gerald Kwok
nginx
背景在实际生产过程中,由于各种原因,我们的在线服务搭建在火山云服务器上,使用火山云包括ECS、CLB、PLB等组件进行网络通信,并且通过专线接受来自某公司内部流量。但是在大概22~23年,某公司要把所有网络流量变为IPv6往下发,火山云的CLB和PLB还不支持IPv6,那我们就面临着断流的风险。经调研和学习,了解到可以通过nginx来搭建一个反向代理服务里,把IPv6的流量转成IPv4往下发,这样
- 【nginx】转发请求connect() failed (111: Connection refused) while connecting to upstream
麦当劳不要薯条
nginx运维
nginx转发请求Connectionrefused一、场景:小程序-->nginx(docker部署)-->转发到后端服务二、nxing转发服务时提示“Connectionrefused”三、解决方案1、解决方案一2、解决方案二一、场景:小程序–>nginx(docker部署)–>转发到后端服务下面是nginx的配置upstreamxian{serverip:端口;}server{listen8
- nginx正向代理与反向代理
a1denzzz
服务器网络运维
一、正向代理与反向代理正向代理正向代理代理的是客户端。客户端设备要访问局域网以外的Internet时,需在客户端浏览器中配置代理服务器,然后通过代理服务器来进行访问,将访问到的局域网以外的Internet网站内容返回给客户端,而不是通过局域网中的客户端设备直接访问。正向代理的用途访问原来无法访问的资源;可做缓存,加速访问资源;对客户端访问授权,上网进行认证;代理可以记录用户访问记录等,且对外隐藏用
- 基于OneAPI+ChatGLM3-6B+FastGPT搭建LLM大语言模型知识库问答系统
闯江湖50年
oneapi语言模型人工智能llamalangchaingpt自然语言处理
搭建大语言模型知识库问答系统部署OneAPI拉取镜像bash复制代码dockerpulljustsong/one-api创建挂载目录bash复制代码mkdir-p/usr/local/docker/oneapi启动容器bash复制代码dockerrun--nameone-api-d--restartalways-p3001:3000-eTZ=Asia/Shanghai-v/usr/local/do
- 在docker中运行R容器,并在Windows下的vscode中使用该R
smx6666668
dockerdockerr语言windows
步骤1:安装和配置Docker安装DockerDesktopforWindows访问Docker官网下载安装程序。安装时启用WSL2后端(推荐)或Hyper-V(旧版Windows)。启动DockerDesktop并确保服务运行正常(任务栏出现Docker图标)。验证Docker安装打开PowerShell或命令提示符,运行:dockerrunhello-world如果看到欢迎信息,说明安装成功。
- 使用Python创建简单的HTTP服务器
xiaoyaozi2020
服务器http运维
转自:https://www.weidianyuedu.com/如果需要一个简单的WebServer,而不是安装那些复杂的HTTP服务程序,比如:Apache,Nginx等。那么可以使用Python自带的包完成一个简单的内建HTTP服务器。于是,你可以把你的目录和文件都以HTTP的方式展示出来。基本命令python-mWeb服务器模块[端口号,默认8000]这里的“Web服务器模块”有如下三种:B
- nginx采用域名访问后台接口时报400
zl_code_le
nginx运维
背景:一直正常用的nginx,ip+端口访问正常,现在要求采用域名后出现了访问后台接口400的问题。解决方案:可以看下nginx的配置文件中是否存在:proxy_set_headerHost$host;将其注释后重启试一下
- 一行指令自动搭建AI绘画:stable-diffusion-webui_v1.3.2
954L
AI前沿技术dockerstablediffusionlinux
Demo效果一、前言本文使用docker进行部署,环境等所有依赖全部整合完毕(版本:v1.3.2)容器内默认已支持(无需额外配置):xformers+controlnet支持自定义启动参数,本文示例为开放api接口供外部业务调用,并已解决API方式下Lora不生效的BUG;开启方式文末细说首次启动下载必要依赖较耗时,容器已配置国内代理加速,预计5分钟内完成容器内自带官方的模型:v1-5-prune
- docker下载redis,zookeeper,kafka超时time out
林小夕success
dockerrediszookeeper
最新地址将registry-mirrors相关复制进去即可,这些地址下载不会超时。{“builder”:{“gc”:{“defaultKeepStorage”:“20GB”,“enabled”:true}},“experimental”:false,“features”:{“buildkit”:true},“registry-mirrors”:[“https://do.nark.eu.org”,“
- Jenkins 升级报错:NoClassDefFoundError: org/jruby/javasupport/proxy/InternalJavaProxy
淾江
jenkinsjava运维开发语言
Jenkins升级报错,浏览器访问Jenkins页面显示异常内容如下:问题原因新版本的jenkins已经使用了比11更高版本的java,而ruby-runtime插件不支持java11导致。解决方法删除不支持的ruby-runtime插件,然后重启jenkins服务即可。登录后复制rm-rf./jenkins_home/plugins/ruby-runtimerm-rf./jenkins_home
- 升级jenkins 导致jenkins启动失败_害你加班的Bug是我写的,记一次升级Jenkins插件引发的加班
weixin_39927378
升级jenkins导致jenkins启动失败
本文主要记录了下Jenkins升级插件过程中出现的场景,一次加班经历,事发时没有截图,有兴趣可以看看。起因需求最近有个需求:在Jenkins流水线中完成下载Git上的文件简单修改并提交的功能起初找到了相关的插件用法,即使用SSHAgentPlugin来完成这个功能插件不生效经测试无法完成效果,分别怀疑了以下几点:凭据配置有误写错了脚本当前未安装此插件当前插件版本过低当前插件由于某种原因未生效排查不
- jenkins自动打包vuejs部署到docker
戚辰先生丶
流程1、配置jenkins-git项目克隆2、配置运行jenkins的shell脚本3、编写Dockerfile自动制作镜像并复制jenkins打包好的文件到容器里4、jenkins负责运行docker命令进行停止、删除原有镜像,并重新运行镜像docker部署jenkinsdockerrun-d-p8086:8080-p50000:50000-v/var/run/docker.sock:/var/
- 【Jenkins】一种闭包(函数嵌套)函数的Jenkinsfile写法,类似于Python的装饰器
luojiaao
汽车软件开发-工具链jenkinspython运维
defprepare(MapJOB,Closurebody){dir('xxxxx'){sh(script:"gitupdate${JOB.version}")body()}}//调用方法1prepare(version:"3asd8asd7a7ds"){sh(script:"gitcommit")}defJOB=[version:"3asd8asd7a7ds",xxxx:"xxxx"]//调用方
- 【jenkins】jenkinsfile更新作业描述的方法
luojiaao
汽车软件开发-工具链jenkins前端运维
Stringget_initial_description(){wrap([$class:'BuildUser']){defuser=env.BUILD_USER_IDreturn"user:${user}\nNumber:${env.BUILD_NUMBER}"}}//获取初始化描述currentBuild.description=get_initial_description()//追加描述内
- 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独立出来,数据持