- 异常处理:@ControllerAdvice, @ExceptionHandler, @ResponseStatus, @Valid, @DataAccessException
张紫娃
注解java
注解名称来源框架/规范典型使用场景版本(引入年份)是否推荐使用@DataAccessExceptionSpringFramework封装JDBC/MyBatis等数据访问异常Spring1.0(2004)✅@TransactionalSpringFramework声明数据库事务(如Service层操作)Spring2.0(2007)✅@ExceptionHandlerSpringMVC方法内捕获并
- Spring Framework 7.019.验证、数据绑定和类型转换(Validation, Data Binding, and Type Conversion)
程序员勇哥
Java全套教程SpringFramework7spring数据库javaspringboot
SpringFramework7.019.验证、数据绑定和类型转换(Validation,DataBinding,andTypeConversion)验证、数据绑定和类型转换各有优缺点。将验证视为业务逻辑,Spring提供的验证和数据绑定设计不会将两者相互排斥。具体来说,验证不应绑定到Web层,应该易于本地化,并且应该能够插入任何可用的验证器。考虑到这些问题,Spring提供了一个Validato
- Vue 添加指令校验input只能输入正整数
随心点儿
vue.jshtml
1、添加指定文件inputValid.jsimportVuefrom'vue'//只对input生效exportdefaultfunction(el){varinput=el;input.onkeyup=function(e){if(e.target.value.length==1){e.target.value=e.target.value.replace(/[^0-9]/g,'');}else
- Spring Boot 升级 3.4 报错 Invalid value type for attribute ‘factoryBeanObjectType‘: java.lang.String
幼稚园的山代王
javaspringboot后端
在升级SpringBoot到3.4版本时,遇到Invalidvaluetypeforattribute'factoryBeanObjectType':java.lang.String错误,通常是由于某些Bean的定义或配置不兼容新版本导致的。以下是一些可能的解决方案:检查Bean定义确保所有Bean的定义和配置符合SpringBoot3.4的要求。特别是检查@Bean注解的使用,确保返回类型正确。
- Python中什么时候需要返回值,什么时候不需要返回值???
似乎很简单
Python学习日记python开发语言
在Python中,函数是否需要返回值取决于它的设计目的和功能需求。需要返回值的情况计算结果需要被后续代码使用当函数的主要目的是计算或生成数据,且调用方需要这些结果时:defadd(a,b):returna+b#结果需要被其他代码使用total=add(3,5)#需要返回值需要传递状态或信息如果函数执行后需要告诉调用方是否成功、返回状态码或错误信息:defvalidate_input(input):
- leetcode393. UTF-8 编码验证
wl1929
leetcode
classSolution{publicbooleanvalidUtf8(int[]data){intnumberOfBytesToProcess=0;for(inti=0;i=8?binRep.substring(binRep.length()-8):"00000000".substring(binRep.length()%8)+binRep;if(numberOfBytesToProcess=
- LeetCode 393. UTF-8 编码验证
Sasakihaise_
LeetCodeleetcode模拟
题目链接:力扣https://leetcode-cn.com/problems/utf-8-validation/【模拟】先转为二进制,直接用Integer.toString(int,2)即可,然后不足八位的前面补0;接下来遍历,如果以‘0’开头直接不用管,如果以‘1’开头,则遍历这个字符串记录1的个数,如果是1或者>4则直接false,否则将t--(除去自身),然后继续遍历剩下的字符串,每当出现
- 华为OD机试专栏--1.3 算法基础:1.3.3 动态规划入门
xiaoheshang_123
华为OD机试真题题库解析华为od面试职场和发展算法
目录1.3算法基础1.3.3动态规划入门一、动态规划的核心思想1.1什么是动态规划?1.2动态规划的特点二、动态规划的基本步骤三、经典动态规划问题3.1斐波那契数列(FibonacciSequence)问题描述动态规划解法代码实现(Python)3.2背包问题(KnapsackProblem)问题描述动态规划解法代码实现(Python)3.3最长公共子序列(LongestCommonSubsequ
- 329. 矩阵中的最长递增路径C语言
给定一个mxn整数矩阵matrix,找出其中最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。你不能在对角线方向上移动或移动到边界外(即不允许环绕)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix著作权归领扣网络所有。商业转载请联系官方授权,非商业转载
- 力扣 329. 矩阵中的最长递增路径
乔碧萝·乔斯达
leetcode矩阵算法
跳转至矩阵中的最长递增路径https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/题目给定一个mxn整数矩阵matrix,找出其中最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例1:输入:matrix=[[9,9,4],[6,6,8]
- dp力扣 329. 矩阵中的最长递增路径
329.矩阵中的最长递增路径题目:链接https://leetcode.cn/problems/longest-increasing-path-in-a-matrix/代码:classSolution{public:structnode{inti;intj;intv;};staticboolcmp(nodex,nodey){returnx.vver;intlongestIncreasingPath
- Mysql 8.0问题汇总
Greenland_12
mysql数据库
1概述8.0对安全性做了大量默认限制(认证方式、远程访问、密码复杂度等)1认证插件改变8.0使用caching_sha2_password,之前是mysql_native_password见问题328.0默认auth_socket登录8.0默认需要使用sudomysql登录见问题3同一修改38.0密码策略严格8.0validate_password.policy默认是MEDIUM见问题148.0默
- javascript基础从小白到高手系列四千八百七十三:禁用验证
完美句号
javascript开发语言ecmascript
通过指定novalidate属性可以禁止对表单进行任何验证:这个值也可以通过JavaScript属性noValidate检索或设置,设置为true表示属性存在,设置为false表示属性不存在:document.forms[0].noValidate=true;//关闭验证如果一个表单中有多个提交按钮,那么可以给特定的提交按钮添加formnovalidate属性,指定通过该按钮无须验证即可提交表单:
- 【Swift开发】屏蔽NSSecureCoding频繁警告
Jaaaaaaaaaaaaa
swift开发语言ios
解决iOS开发中NSSecureCoding警告的最佳实践问题背景在开发Mac应用时,我遇到了一个令人困扰的问题:Xcode控制台不断输出NSSecureCodingallowedclasseslistcontains[NSObjectclass]相关的警告信息。这些警告虽然不影响应用功能,但严重干扰了开发调试过程,让真正重要的日志信息淹没在系统警告中。***-[NSXPCDecodervalid
- 关于swagger网页不显示Multparfile文件的问题
BACKLS
java开发语言springboot
今天写了一个多文件上传的接口,但是在swagger文档里面,一直不显示文件这个参数,但是在postman没有问题@ApiOperation(value="上传文件")@PostMapping("/uploadFile")@ExceptionHandler(MethodArgumentNotValidException.class)@Transactional(rollbackFor=Runtime
- 更换SSL证书引发的异常:`sun.security.validator.ValidatorException: PKIX path building failed` `[Nginx跳转失败:501]
猿享天开
技术经验sslnginx网络协议
博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++,C#,Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQLserver,Oracle,mysql,postgresql等进行开发应用,熟悉DICOM医学影像及DICOM协议,业余时间自学JavaScript,Vue,
- 前端开发问题:SyntaxError: “undefined“ is not valid JSON
我命由我12345
前端-问题清单json前端javascriptvue.js开发语言ecmascriptjs
在JavaScript开发,遇到如下问题SyntaxError:"undefined"isnotvalidJSON#翻译SyntaxError:"undefined"不是有效的JSON问题原因当使用JSON.parse()时,传入了一个undefined或字符串"undefined",而它不是有效的JSON字符串问题复现传入一个undefinedconstjsonStr=undefined;con
- 【前后端联调】MethodArgumentNotValidException
宣布无人罪
前后端联调javatomcatspringbootspring
【前后端联调】MethodArgumentNotValidException01问题描述前后端联调,前端传了一个参数是null,但是这个参数设置了校验不能为null,所以报了这个错误handleMethodArgumentNotValidException,132]-Validationfailedforargument[0]inpubliccom.ruoyi.common.core.domain
- 面向对象与面向过程编程:核心区别解析
三笠o.0
Pythonpython开发语言
1.面向过程和面向对象面向对象编程(OOP)与结构化编程是两种不同的编程范式,它们解决问题的思路有着本质区别:结构化编程(面向过程)的特点:分析阶段:通过自顶向下的方式将问题分解为若干步骤实现阶段:将每个步骤转化为独立的方法/函数执行方式:程序通过依次调用这些方法来完成功能示例:银行转账程序可能包含:validateInput()验证输入checkBalance()检查余额updateAccoun
- mysql和neo4j组合使用_Neo4j学习
大禹昆仑
mysql和neo4j组合使用
NEO4J基本命令1.CREATECREATE(NODE_NAME:LABEL_NAME>,{PROPERTY1:VALUE1,PROPERTY2:VALUE2,})示例create(person:zhanglisheng,{age:43,height:174})注意点:当属性值是字符串时候,必须加单引号或双引号,否则报错invalidliteralnumber(line1,column44(of
- LeetCode-最长回文子串
踏实写代码,认真搞学术的小研
leetcode
classSolution:deflongestPalindrome(self,s:str)->str:n=len(s)#创建一个二维数组dp,用于记录回文子串的信息dp=[[False]*nfor_inrange(n)]start=0#记录最长回文子串的起始位置max_len=1#记录最长回文子串的长度#初始化单个字符和相邻两个字符是回文子串的情况foriinrange(n):dp[i][i]=
- 最长回文子串-leetCode-005
针对这个问题,共有四种解法,分别是暴力法,中心拓展法,动态规划,Manacher算法解法一:暴力法思路:枚举所有可能的子串,然后判断每个子串是否是回文串,最后找出最长的回文子串。classSolution{publicStringlongestPalindrome(Strings){intn=s.length();if(n==0){return"";}StringmaxPalindrome=s.s
- LeetCode-5.最长回文子串 C++实现
一.问题描述给你一个字符串s,找到s中最长的回文子串(如果字符串向前和向后读都相同,则它满足回文性。)。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1usingnamespacestd;classSolution{public:stringlongestPalindrome(strings){intn=s.
- GIVT与SIVT:互联网流量欺诈的攻防演进
weixin_47233946
算法网络
在数字广告投入突破5000亿美元的市场环境下,无效流量(InvalidTraffic)带来的营销预算损失已升级为全球性挑战。GIVT(GeneralInvalidTraffic)和SIVT(SophisticatedInvalidTraffic)作为流量欺诈的两种主要类型,正不断演变出新的技术形态,形成对现代网络安全和数字经济的持续威胁。本文将从技术原理、实现手段及防御策略三个维度,深度解析这两类
- docker-compose报错ERROR: Invalid interpolation format for “web“ option in service “services“:
reiraoy
dockerjava容器
1.问题在Linux中使用docker-compose过一段时间后再次使用docker-compose命令启动或关闭容器报错:ERROR:Invalidinterpolationformatfor"web"optioninservice"services":2.解决思路DockerCompose1.24.1版本对于复杂的变量插值(特别是带有默认值-和:混合使用)的解析非常严格甚至存在一些已知的问题
- python内积 卷积
AI算法网奇
python基础python开发语言
内积就是点乘,卷积先取反。importnumpyasnpbb=[1,2]cc=[2,3]aa=np.dot(bb,cc)print(aa)dd=np.convolve([2,1],cc,'valid')print(dd)dd=np.convolve(bb,cc,'same')print(dd)dd=np.convolve(bb,cc,'full')print(dd)结果:8[8][27][276]
- 查找字符串中最长的重复子字符串算法(Java实现)
自由徜徉碧海蓝天
算法javapythonJava
查找字符串中最长的重复子字符串算法(Java实现)在字符串处理的算法中,有一个常见的问题是如何查找一个字符串中最长的重复子字符串。这个问题可以用多种方法解决,其中一种较为高效的方法是使用后缀数组和最长公共前缀数组(LongestCommonPrefixArray,简称LCP数组)的结合。下面是一个使用Java语言实现的算法,用于查找字符串中最长的重复子字符串:importjava.util.Arr
- c# 读磁盘 c#读扇区 c#读驱动器 c#读硬盘 c#读 MBR
nvip
c#编程c#磁盘bufferfiledistancebyte
c#读磁盘c#读扇区c#读驱动器c#读硬盘c#读MBR网上流传的c#打开驱动器都有问题,原因是createfile的参数不对,下面是改好的,publicconstuintFILE_ATTRIBUTE_NORMAL=0x80;publicconstshortINVALID_HANDLE_VALUE=-1;publicconstuintGENERIC_READ=0x80000000;publiccon
- NGINX代理minio外链配置
闲话不说。直接上代码#代理8888端口server{listen8888;server_name127.0.0.1;#允许带特殊字符的请求(如AWS签名参数中的符号)valid_referersnoneblockedserver_names;charsetutf-8;location/{#保留原始请求的路径和查询参数proxy_passhttp://10.10.10.10:8888$request
- OracleSync2MySQL 数据同步问题bad connection、创建表异常、数据映射异常
aspirant-complete
运维开发
1、mysql数据库连接badconnection、invalidconnection等异常检查数据库连接空闲时间MySQL服务器等待一个连接所允许的空闲时间。如果达到此时间,MySQL服务器将自动关闭该连接,除非该连接正在活动状态```sqlSHOWVARIABLESLIKE'wait_timeout';,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而 查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表 分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步
- java中的BigDecimal
bijian1013
javaBigDecimal
在项目开发过程中出现精度丢失问题,查资料用BigDecimal解决,并发现如下这篇BigDecimal的解决问题的思路和方法很值得学习,特转载。
原文地址:http://blog.csdn.net/ugg/article/de
- Shell echo命令详解
daizj
echoshell
Shell echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo string
您可以使用echo实现更复杂的输出格式控制。 1.显示普通字符串:
echo "It is a test"
这里的双引号完全可以省略,以下命令与上面实例效果一致:
echo Itis a test 2.显示转义
- Oracle DBA 简单操作
周凡杨
oracle dba sql
--执行次数多的SQL
select sql_text,executions from (
select sql_text,executions from v$sqlarea order by executions desc
) where rownum<81;
&nb
- 画图重绘
朱辉辉33
游戏
我第一次接触重绘是编写五子棋小游戏的时候,因为游戏里的棋盘是用线绘制的,而这些东西并不在系统自带的重绘里,所以在移动窗体时,棋盘并不会重绘出来。所以我们要重写系统的重绘方法。
在重写系统重绘方法时,我们要注意一定要调用父类的重绘方法,即加上super.paint(g),因为如果不调用父类的重绘方式,重写后会把父类的重绘覆盖掉,而父类的重绘方法是绘制画布,这样就导致我们
- 线程之初体验
西蜀石兰
线程
一直觉得多线程是学Java的一个分水岭,懂多线程才算入门。
之前看《编程思想》的多线程章节,看的云里雾里,知道线程类有哪几个方法,却依旧不知道线程到底是什么?书上都写线程是进程的模块,共享线程的资源,可是这跟多线程编程有毛线的关系,呜呜。。。
线程其实也是用户自定义的任务,不要过多的强调线程的属性,而忽略了线程最基本的属性。
你可以在线程类的run()方法中定义自己的任务,就跟正常的Ja
- linux集群互相免登陆配置
林鹤霄
linux
配置ssh免登陆
1、生成秘钥和公钥 ssh-keygen -t rsa
2、提示让你输入,什么都不输,三次回车之后会在~下面的.ssh文件夹中多出两个文件id_rsa 和 id_rsa.pub
其中id_rsa为秘钥,id_rsa.pub为公钥,使用公钥加密的数据只有私钥才能对这些数据解密 c
- mysql : Lock wait timeout exceeded; try restarting transaction
aigo
mysql
原文:http://www.cnblogs.com/freeliver54/archive/2010/09/30/1839042.html
原因是你使用的InnoDB 表类型的时候,
默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,
因为有的锁等待超过了这个时间,所以抱错.
你可以把这个时间加长,或者优化存储
- Socket编程 基本的聊天实现。
alleni123
socket
public class Server
{
//用来存储所有连接上来的客户
private List<ServerThread> clients;
public static void main(String[] args)
{
Server s = new Server();
s.startServer(9988);
}
publi
- 多线程监听器事件模式(一个简单的例子)
百合不是茶
线程监听模式
多线程的事件监听器模式
监听器时间模式经常与多线程使用,在多线程中如何知道我的线程正在执行那什么内容,可以通过时间监听器模式得到
创建多线程的事件监听器模式 思路:
1, 创建线程并启动,在创建线程的位置设置一个标记
2,创建队
- spring InitializingBean接口
bijian1013
javaspring
spring的事务的TransactionTemplate,其源码如下:
public class TransactionTemplate extends DefaultTransactionDefinition implements TransactionOperations, InitializingBean{
...
}
TransactionTemplate继承了DefaultT
- Oracle中询表的权限被授予给了哪些用户
bijian1013
oracle数据库权限
Oracle查询表将权限赋给了哪些用户的SQL,以备查用。
select t.table_name as "表名",
t.grantee as "被授权的属组",
t.owner as "对象所在的属组"
- 【Struts2五】Struts2 参数传值
bit1129
struts2
Struts2中参数传值的3种情况
1.请求参数绑定到Action的实例字段上
2.Action将值传递到转发的视图上
3.Action将值传递到重定向的视图上
一、请求参数绑定到Action的实例字段上以及Action将值传递到转发的视图上
Struts可以自动将请求URL中的请求参数或者表单提交的参数绑定到Action定义的实例字段上,绑定的规则使用ognl表达式语言
- 【Kafka十四】关于auto.offset.reset[Q/A]
bit1129
kafka
I got serveral questions about auto.offset.reset. This configuration parameter governs how consumer read the message from Kafka when there is no initial offset in ZooKeeper or
- nginx gzip压缩配置
ronin47
nginx gzip 压缩范例
nginx gzip压缩配置 更多
0
nginx
gzip
配置
随着nginx的发展,越来越多的网站使用nginx,因此nginx的优化变得越来越重要,今天我们来看看nginx的gzip压缩到底是怎么压缩的呢?
gzip(GNU-ZIP)是一种压缩技术。经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用
- java-13.输入一个单向链表,输出该链表中倒数第 k 个节点
bylijinnan
java
two cursors.
Make the first cursor go K steps first.
/*
* 第 13 题:题目:输入一个单向链表,输出该链表中倒数第 k 个节点
*/
public void displayKthItemsBackWard(ListNode head,int k){
ListNode p1=head,p2=head;
- Spring源码学习-JdbcTemplate queryForObject
bylijinnan
javaspring
JdbcTemplate中有两个可能会混淆的queryForObject方法:
1.
Object queryForObject(String sql, Object[] args, Class requiredType)
2.
Object queryForObject(String sql, Object[] args, RowMapper rowMapper)
第1个方法是只查
- [冰川时代]在冰川时代,我们需要什么样的技术?
comsci
技术
看美国那边的气候情况....我有个感觉...是不是要进入小冰期了?
那么在小冰期里面...我们的户外活动肯定会出现很多问题...在室内呆着的情况会非常多...怎么在室内呆着而不发闷...怎么用最低的电力保证室内的温度.....这都需要技术手段...
&nb
- js 获取浏览器型号
cuityang
js浏览器
根据浏览器获取iphone和apk的下载地址
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" content="text/html"/>
<meta name=
- C# socks5详解 转
dalan_123
socketC#
http://www.cnblogs.com/zhujiechang/archive/2008/10/21/1316308.html 这里主要讲的是用.NET实现基于Socket5下面的代理协议进行客户端的通讯,Socket4的实现是类似的,注意的事,这里不是讲用C#实现一个代理服务器,因为实现一个代理服务器需要实现很多协议,头大,而且现在市面上有很多现成的代理服务器用,性能又好,
- 运维 Centos问题汇总
dcj3sjt126com
云主机
一、sh 脚本不执行的原因
sh脚本不执行的原因 只有2个
1.权限不够
2.sh脚本里路径没写完整。
二、解决You have new mail in /var/spool/mail/root
修改/usr/share/logwatch/default.conf/logwatch.conf配置文件
MailTo =
MailFrom
三、查询连接数
- Yii防注入攻击笔记
dcj3sjt126com
sqlWEB安全yii
网站表单有注入漏洞须对所有用户输入的内容进行个过滤和检查,可以使用正则表达式或者直接输入字符判断,大部分是只允许输入字母和数字的,其它字符度不允许;对于内容复杂表单的内容,应该对html和script的符号进行转义替换:尤其是<,>,',"",&这几个符号 这里有个转义对照表:
http://blog.csdn.net/xinzhu1990/articl
- MongoDB简介[一]
eksliang
mongodbMongoDB简介
MongoDB简介
转载请出自出处:http://eksliang.iteye.com/blog/2173288 1.1易于使用
MongoDB是一个面向文档的数据库,而不是关系型数据库。与关系型数据库相比,面向文档的数据库不再有行的概念,取而代之的是更为灵活的“文档”模型。
另外,不
- zookeeper windows 入门安装和测试
greemranqq
zookeeper安装分布式
一、序言
以下是我对zookeeper 的一些理解: zookeeper 作为一个服务注册信息存储的管理工具,好吧,这样说得很抽象,我们举个“栗子”。
栗子1号:
假设我是一家KTV的老板,我同时拥有5家KTV,我肯定得时刻监视
- Spring之使用事务缘由(2-注解实现)
ihuning
spring
Spring事务注解实现
1. 依赖包:
1.1 spring包:
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.
- iOS App Launch Option
啸笑天
option
iOS 程序启动时总会调用application:didFinishLaunchingWithOptions:,其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有此程序启动的原因。
launchOptions中的可能键值见UIApplication Class Reference的Launch Options Keys节 。
1、若用户直接
- jdk与jre的区别(_)
macroli
javajvmjdk
简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包,可以包括函数库、编译程序等。
JDK就是Java Development Kit JRE是Java Runtime Enviroment是指Java的运行环境,是面向Java程序的使用者,而不是开发者。 如果安装了JDK,会发同你
- Updates were rejected because the tip of your current branch is behind
qiaolevip
学习永无止境每天进步一点点众观千象git
$ git push joe prod-2295-1
To
[email protected]:joe.le/dr-frontend.git
! [rejected] prod-2295-1 -> prod-2295-1 (non-fast-forward)
error: failed to push some refs to '
[email protected]
- [一起学Hive]之十四-Hive的元数据表结构详解
superlxw1234
hivehive元数据结构
关键字:Hive元数据、Hive元数据表结构
之前在 “[一起学Hive]之一–Hive概述,Hive是什么”中介绍过,Hive自己维护了一套元数据,用户通过HQL查询时候,Hive首先需要结合元数据,将HQL翻译成MapReduce去执行。
本文介绍一下Hive元数据中重要的一些表结构及用途,以Hive0.13为例。
文章最后面,会以一个示例来全面了解一下,
- Spring 3.2.14,4.1.7,4.2.RC2发布
wiselyman
Spring 3
Spring 3.2.14、4.1.7及4.2.RC2于6月30日发布。
其中Spring 3.2.1是一个维护版本(维护周期到2016-12-31截止),后续会继续根据需求和bug发布维护版本。此时,Spring官方强烈建议升级Spring框架至4.1.7 或者将要发布的4.2 。
其中Spring 4.1.7主要包含这些更新内容。