- 登录jwt处理
原谅我很悲
#Java项目总结java
登录jwt处理1、引入jwt依赖io.jsonwebtokenjjwt0.9.02、jwt工具类封装packagecom.zhw.util;importio.jsonwebtoken.Claims;importio.jsonwebtoken.JwtBuilder;importio.jsonwebtoken.Jwts;importio.jsonwebtoken.SignatureAlgorithm;
- 2020-03-24
黑乎乎AI
Datawhale零基础入门数据挖掘-Task2数据分析【代码摘要】赛题:零基础入门数据挖掘-二手车交易价格预测地址:[https://tianchi.aliyun.com/competition/entrance/231784/introduction?spm=5176.12281957.1004.1.38b02448ausjSX]EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来确
- Node.js和Puppeteer进行Web抓取的简单使用
今天也想MK代码
node.js前端
至此我们大概了解到node+electron+谷歌浏览器基本开发知识,现在就可以肝代码了。不要忘记自动化工具主要功能,自动化操作网页。这个时候我们就用到了Puppeteer这个库。Puppeteer的基础这里的第一步是创建一个新文件夹,其中我们创建一个新的JavaScript文件。通过终端找到你新建的文件夹,并使用下面的行安装Puppeteer包。npminstall--savepuppeteer
- 【Three.js基础学习】19.Custom models with Blender
蚕食我的耐心
three.js基础学习学习blender
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言blender模型资源:【blender】一个汉堡包-CSDN博客一、代码import'./style.css'import*asTHREEfrom'three'import{OrbitControls}from'three/examples/jsm/controls/OrbitControls.js'import{GLTFLoa
- Web:PHP序列化和反序列化
时之彼岸Φ
#WebCTF前端phpandroid
简而言之,序列化和反序列化就是数据类型的转换,序列化是将对象,数组等转换为便于传输的形式,例如:JSON、XML等。而反序列化则是序列化逆向的过程。一、序列化和反序列化1.PHP序列化例如:method=$method;$this->args=$args;}function__destruct(){if(in_array($this->method,array("ping"))){call_use
- 笔记:node.js基础
一只小bug。
node.js
1.初识node.jsNode.js是一个基于chromeV8引擎的javaScript运行环境。浏览器中js的运行环境=chromeV8引擎+webAPI(BOM、DOM、ajax等)。Node.js中js的运行环境=V8引擎+内置API(fs、path、http、js内置对象等)。终端快捷键:tab(补全路径)、esc(清空当前已输入的命令)、clear(清空终端)。2.fs文件模块系统fs模
- 经验笔记:理解和保障JWT的安全性
漆黑的莫莫
计算机网络笔记
经验笔记:理解和保障JWT的安全性引言在软件开发领域,特别是Web应用开发中,JWT(JSONWebTokens)是一种广泛使用的认证机制。JWT不仅能够简化客户端与服务端之间的身份验证流程,还能增强数据传输的安全性。本文将深入探讨JWT的工作原理,并重点讲解如何确保JWT在实际应用中的安全性,特别是在防止JWT被篡改方面。JWT的工作原理JWT是一种开放标准(RFC7519),它定义了一种紧凑且
- Shell处理Json数据
promise524
jsonpythonlinuxbash
在Shell中处理复杂的JSON数据,一般有以下三种方式:jq:jq是一款强大的JSON处理工具,支持过滤、修改、重组和生成JSON数据。Python:使用Python来处理复杂的JSON数据。结合了Shell脚本的便利性和Python处理JSON的强大能力grep/sed/awk:在无其他工具的情况下使用grep/sed/awk等(不推荐)一、基于jq处理JSON如果未安装jq,会提示如下错误-
- node.js版本管理器——NVM
小清20
npmnode.js前端
在日常工作中,需同时开发好几个前端项目的时候,可能不同项目使用的node的版本也不一样,而一台电脑只能安装和同时使用一个版本的node,这个时候我们需要借助NVM来管理node的版本了。下面一起来看下是怎么使用NVM的吧。一、什么是NVMnvm的全称是node.jsversionmanagement,是专门用来管理node版本的工具,可用对node的版本进行查看、下载、切换使用等操作二、如何安装N
- java jmap jstat_JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解
小五咔咔咔
javajmapjstat
是什么jps查看所有的jvm进程,包括进程ID,进程启动的路径等等。我自己也用PS,即:ps-ef|grepjavajstack观察jvm中当前所有线程的运行情况和线程当前状态。系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的javastack和nativestack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。系统hung住了?
- jstack输出文件linux,Jvm dump jstack jmap jstat 介绍与使用
欢12
jstack输出文件linux
总结:(1)栈信息:jstack输出的信息。(2)堆信息:jmap-dump输出的文件,(3)jstat查看gc情况,jstat-gc间隔毫秒数比如jstat-gc123455000也就是每隔5秒打印进程12345的gc情况一、看一下jstackjstack-m>jvm_deadlocks.txtjstack-l>jvm_listlocks.txt参考资料jstack-StackTrace使用to
- 【AR.js】初步认识与官方示例的使用
o0o_-_
ARarjavascript开发语言
说在前面测试浏览器:MicrosoftEdge(PC版本97.0.1072.55)/Firefox(Android)github库:AR.jsAR系列文章:这里go版本:goversiongo1.17.3windows/amd64其他:本文的关注点在于官方用例。关于AR.js这里他们有三种实现:基于标记、基于特征点、以及基于地理位置;前面两种差不大多。优点:只要有支持webrtc以及webgl的浏
- 【React】React事件和HTML事件的区别
田本初
Reactreact.jshtmljavascript
React写法测试HTML写法测试区别ReactHTML原生事件绑定方式小驼峰命名法,事件处理函数通过JSX语法直接绑定全小写形式定义事件处理函数函数引用内联的字符串表达式事件对象基于Event重写的SyntheticEvent对象原生的Event对象默认行为通过event.preventDefault()来阻止事件的默认行为,不需要returnfalse可以是event.preventDefau
- 开源项目Arc.js安装与使用指南
孟元毓Pandora
开源项目Arc.js安装与使用指南arc.jsgreatcircleroutesinjavascript项目地址:https://gitcode.com/gh_mirrors/ar/arc.js目录结构及介绍在克隆或下载了SpringMeyer/Arc.js项目之后,你会看到以下主要目录和文件:src/:源代码目录,包含了核心库的实现。arc.js:主要源文件,实现了大圆路线计算功能。dist/:
- ArtPlayer.js 开源项目使用手册
苏承根
ArtPlayer.js开源项目使用手册ArtPlayer:art:ArtPlayer.jsisamodernandfullfeaturedHTML5videoplayer项目地址:https://gitcode.com/gh_mirrors/ar/ArtPlayer1.目录结构及介绍ArtPlayer.js的项目目录精心组织,以支持高效的开发与维护。以下是核心的目录结构及简要介绍:├──docs
- 探索未来飞行器控制方式:Node.js版AR.Drone库
毕艾琳
探索未来飞行器控制方式:Node.js版AR.Drone库node-ar-droneAnode.jsclientforcontrollingParrotARDrone2.0quad-copters.项目地址:https://gitcode.com/gh_mirrors/no/node-ar-drone在计算机科学领域中,无人机已经成为一个重要的研究方向。近年来,随着硬件设备的发展和智能算法的进步,
- 心智AR (mind-ar-js): 开源Web增强现实SDK安装与使用指南
范凡灏Anastasia
心智AR(mind-ar-js):开源Web增强现实SDK安装与使用指南mind-ar-jsWebAugmentedReality.ImageTracking,FaceTracking.Tensorflow.js项目地址:https://gitcode.com/gh_mirrors/mi/mind-ar-js心智AR(mind-ar-js)是一款开源的Web增强现实(AR)软件开发工具包(SDK)
- AR.js 开发与使用指南
Hello.Reader
javascript前端arjavascript开发语言
1.AR.js简介AR.js是基于Web技术的AR库,依赖于WebGL和WebRTC,可以在大多数现代浏览器上运行。它的主要优势在于不需要安装任何插件或应用程序,用户只需通过浏览器即可体验AR效果。AR.js提供了Marker-based(基于标记的)和Location-based(基于位置的)两种模式,适用于多种场景。2.环境搭建在开始开发之前,我们需要先搭建开发环境。以下是搭建AR.js开发环
- java-net-php-python-ssmKTV点歌系统查重PPT计算机毕业设计程序
荣荣科技
javaphp开发语言
java-net-php-python-ssmKTV点歌系统查重PPT计算机毕业设计程序java-net-php-python-ssmKTV点歌系统查重PPT计算机毕业设计程序本源码技术栈:项目架构:B/S架构开发语言:Java语言开发软件:ideaeclipse前端技术:Layui、HTML、CSS、JS、JQuery等技术后端技术:JAVA运行环境:Win10、JDK1.8数据库:MySQL5
- WebSocket心跳检测与重连
暴走的水果
Java基础htmlwebsocketjavascript
/**webSocket连接**/functionopenSocket(url,heartTime){//验证心跳时间if($.common.isEmpty(heartTime)||heartTime<10){heartTime=10;}console.log("心跳时间:"+heartTime);varsocket;varcuser=JSON.parse(storage.get("user"))
- 正则表达式和枚举
宇文心亘
正则表达式前端后端
一、正则表达式1、目的正则表达式是独立于java的技术,不依附于java,但是它可以在java中使用,也可以在python/js等中使用通过正则表达式处理字符串复杂的查找/替换/匹配/分割工作2、概述使用单个字符串来描述或者匹配一系列符合某种语法规则的字符串3、使用步骤(1)通过大量的字符串寻找规律,得出定义规则(2)使用这种规则去匹配新的字符串(3)匹配成功做出相应的操作4、基本语法1、原义字符
- Java财政票据查验接口、医疗票据查验、发票验真接口
翔云API
人工智能apiocr开发语言自动化
支持非税收入类票据:非税收入通用票据、非税收入一般缴款书真伪查验,结算类票据:资金往来结算票据真伪查验,其他财政票据:公益事业捐赠票据、医疗收费票据、社会团体会费票据真伪查验,上传票据查验要素信息,即可返回票据相关信息,有助于财务管理智能化Java财政票据查验接口代码示例:packagecom.test;importokhttp3.*;importorg.json.JSONObject;impor
- 在vue中优雅地异步引入(懒加载)腾讯地图API
试着奔跑的菜鸟
javascriptvuevue.jsjavascript前端腾讯地图
背景接到一个需求需要在网站首页显示使用腾讯地图展示公司所在地。一开始我直接全局引入了腾讯地图js,结果发现在用户打开登陆页面的时候首页比较缓慢,为了提高用户登陆的加载效率,需要优化为异步引入。思路根据官网的示例,通过dom追加script的方式来加载js,并且在加载完成时会回调window下的callback方法。但是这么使用的话,每次都需要在当前组件中写一个全局的函数,A组件中写的回调函数可能覆
- [内附完整源码和文档] 基于JSP的记账管理系统设计与实现
UserJSKer
摘要近年来由于生活节奏的加快,好像每个人都被很多难以启齿的问题困惑,然而关于随意消费是大多数人头疼的问题,没有任何计划和筹备的情况下随意消费,导致现实生活中我们所称为的“月光族”。如果我们定期花一些时间去记录我们生活中那些主要的消费情况,了解自己的收入和支出情况,这样坚持几个月你将会发现一些规律,收入是否稳定,月底的时候是收入少了还是支出多了,投资是否符合预期;这些规律,就是你通过记账了解到的财务
- 很好用的扩展JS
u010465417
javascript开发语言ecmascript
/***创建人:DJ*日期:2021-11-21***/constmethodExt=function(_dom){if(null==_dom)return{};if(null!=_dom.mext)return_dom;var__$mext={isJson:function(arg){if(null==arg)returnfalse;if(("string"==typeofarg)||(true
- 解决常见的 `npm install` 报错
程序人~
npm前端node.js
解决常见的npminstall报错在Node.js项目中,我们经常使用npminstall命令来安装项目所需的依赖包。然而,有时候在执行这个命令时会遇到一些问题和报错。本文将介绍一些常见的npminstall报错,并提供相应的解决方法。报错1:“ERR!Failedatthe[package-name]installscript.”这个报错通常表示在执行包的安装脚本时出现了错误。这可能是由于依赖包
- Spring中 @Autowired标签与 @Resource标签 的区别
七七仔17
autowiredspringbeansetternull
Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource、@PostConstruct及@PreDestroy。1.@Autowired@Autowired是Spring提供的,需导入Package:org.springframework.beans.factory.annotation.Autowired;只按照byType注入。2
- Vue3的Suspense:Suspense是Vue3的另一个新特性,它允许我们在等待异步组件时渲染一些“备用”内容,提高了用户体验。
哎 你看
vueuxvue.jsjavascript
I.引言A.对Vue3的简要介绍:Vue.js是一款开源JavaScript框架,用于构建用户界面和单页面应用。自从2004年发布以来,Vue.js在全球开发者社区中受到广泛欢迎。Vue3是Vue.js的最新版,不仅带来了许多重要功能和性能改进,还引入了一些全新的概念。新的CompositionAPI,以及如Teleport和Suspense等创新特性,都在开发人员的工具箱中添加了更多有用的工具,
- js 中的 try catch finally
施主画个猿
try/catch/finally语句用于处理代码中可能出现的错误信息。错误可能是语法错误,通常是程序员造成的编码错误或错别字。也可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。try语句允许我们定义在执行时进行错误测试的代码块。catch语句允许我们定义当try代码块发生错误时,所执行的代码块。finally语句在try和catch之后无论有无异常都会执行。try{tryCode-尝试执
- Java工具封装:Yaml、Properties、Json三种内容格式之间互相转换
嗯嗯**
JavajavajsonYamlProperties内容转换
文章目录概述工具支持转换的形式代码测试可视化体验测试概述源码地址:https://github.com/FasterXML/jackson-dataformats-text依赖com.fasterxml.jackson.dataformatjackson-dataformat-yaml2.14.0-rc3com.fasterxml.jackson.dataformatjackson-datafor
- 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独立出来,数据持