- Golang | Leetcode Golang题解之第388题文件的最长绝对路径
__AtYou__
经验分享GolangLeetcode题解
题目:题解:funclengthLongestPath(inputstring)(ansint){n:=len(input)level:=make([]int,n+1)fori:=0;i1{length+=level[depth-1]+1}ifisFile{ans=max(ans,length)}else{level[depth]=length}}return}funcmax(a,bint)int
- golang学习总结--函数
小罗tongxue
golanggolang
1.go函数声明语法:func函数名(参数列表)(返回值列表){}funcadd()(){}2.golang函数特点(1)不支持重载:一个包中不能有两个函数名称一样的函数,即使参数列表不同(2)多返回值(3)匿名函数(4)函数是一种类型,也可以赋值给一个变量(5)函数名大小写敏感,函数名首字母表示该函数可跨包调用,小写表示不可跨包调用packagemainimport("fmt")typeop_f
- Golang安装与环境配置
夏月歌者
Golang开发golang开发语言
文章目录1.安装环境说明2.下载Golang安装包3.修改配置3.1开启开启GO111MODULE3.2依赖包缓存的路径3.3修改GOPATH3.4设置镜像代理地址4.总结1.安装环境说明操作系统:Windows11Golang版本:1.23.02.下载Golang安装包我们可以到Golang官网下载对应操作系统的安装包https://go.dev/dl/这里我们下载Windows平台的安装包:g
- Golang基础语法学习与速成
PleaSure乐事
golang开发语言学习
作者:CSDN-PleaSure乐事欢迎大家阅读我的博客希望大家喜欢目录1.golang介绍1.1介绍1.2优势2.语法2.1控制台输出2.2算术运算符2.3变量常量2.4for循环2.5if语句2.6switch语句2.7作用域2.8浮点数和零值2.8.1浮点数2.8.2零值2.9格式化动词2.10整数和字符串2.11字符串字面值和原始字符串2.12字符2.13类型别名2.14常用内置函数2.1
- 【Golang】LeetCode面试经典150题:移除元素
高瑞克
【go】力扣面试经典150题leetcode面试算法golang数据结构
题干:给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:更改nums数组,使nums的前k个元素包含不等于val的元素。nums的其余元素和nums的大小并不重要。返回k。解法1:双指针,没有心智负担解法1其实就是把不同的元素复制进
- Golang | Leetcode Golang题解之第385题迷你语法分析器
__AtYou__
经验分享GolangLeetcode题解
题目:题解:funcdeserialize(sstring)*NestedInteger{index:=0vardfsfunc()*NestedIntegerdfs=func()*NestedInteger{ni:=&NestedInteger{}ifs[index]=='['{index++fors[index]!=']'{ni.Add(*dfs())ifs[index]==','{index+
- Golang并发编程-定时器Timer & Ticker详解
ChineHe
Golanggolang开发语言后端
目录1Golang中的定时器2Timer2.1关于Timer2.2Timer的结构体方法2.2.1Stop2.2.2Reset2.3创建Timer2.3.1NewTimer2.3.2AfterFunc2.3.3After2.4使用示例2.4.1使用Timer实现延时执行2.4.2使用Timer实现超时控制3Ticker3.1关于Ticker3.2Tiker的结构体方法3.2.1Stop3.2.2R
- Golang并发编程——sync包详解
ChineHe
Golanggolang服务器开发语言
目录1关于sync包2Cond条件变量2.1关于Cond2.2结构体方法2.2.1NewCond构造函数2.2.2Wait等待2.2.3Signal通知2.2.4Broadcast广播2.3示例2.3.1实现生产者-消费者模式2.3.2多协程等待任务完成3Locker锁接口4Mutex互斥锁4.1关于Mutex4.2Mutex的互斥公平性4.3结构体方法4.3.1Lock获取锁4.3.2TryLo
- Vscode 搭建 Golang 项目
抢钱——小子
golangvscodegolang编辑器开发语言
安装vscode扩展->go,安装安装go依赖工具集command+shift+p,输入go:install,然后选中Install/UpdateTools,按回车进行安装连接远程服务器开发command+shift+x,打开安装插件Remote-SSH,安装完了之后,左下角绿色的地方点击为单独项目设置gopathcode->首选项->设置->搜索gopath->在setting.json中编辑-
- go-zero单体服务使用泛型简化注册Handler路由
qq_43479892
pythongolang开发语言后端计算机
优质资源分享学习路线指引(点击解锁)知识定位人群定位Python实战微信订餐小程序进阶级本课程是pythonflask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。Python量化交易实战入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统一、Golang环境安装及配置GoModulehttps://go-zero.dev/cn/docs/prepare/go
- Golang测试func TestXX(t *testing.T)的使用
席万里
Golanggolang
一般Golang中的测试代码都以xxx_test.go的样式,在命名测试函数的时候以Testxx开头。以下是我写的一个单元:packagetestsimport"strings"funcSplit(s,sepstring)(res[]string){i:=strings.Index(s,sep)fori>-1{res=append(res,s[:i])s=s[i+len(sep):]i=strin
- 【Go】初识Golang切片(slice)(二)
SEer.绫竹丹
go学习go
【Go】初识Golang切片(slice)(二)一、切片常用方法(一)append()方法funcappend(slice[]Type,elems...Type)[]Typeappend方法返回了一个切片,这个切片的内容是slic和elems的集合。不会影响原切片!packagemainimport"fmt"funcmain(){slice1:=[]int{1,2,3,4}fmt.Println(
- Golang | Leetcode Golang题解之第380题O(1)时间插入、删除和获取随机元素
__AtYou__
经验分享GolangLeetcode题解
题目:题解:typeRandomizedSetstruct{nums[]intindicesmap[int]int}funcConstructor()RandomizedSet{returnRandomizedSet{[]int{},map[int]int{}}}func(rs*RandomizedSet)Insert(valint)bool{if_,ok:=rs.indices[val];ok{
- Golang学习笔记——context包
沉默巴比伦
Golang
说明Context上下文用于控制函数调用链,所有进入服务的请求需要创建Context,调用其他服务需要接受一个Context,Context需要在函数调用链中进行传播。使用WithCancel,WithDeadline,WithTimeout,WithVaule,可以从一个Context上派生出子Context,并得到CancelFunc。调用CancelFunc可以关闭子Context及其派生出
- golang笔记——手写数据结构——顺序表
Evince_s
入门题gogithub数据结构
使用go语言手动实现数据结构中的顺序表已在github上开源,欢迎issueskay2336/goDataStructure:DataStructure(github.com)其中函数包括:InitList():初始化ListLength():返回长度ListEmpty():返回是否为空PrintlnAll():输出所有元素UpdateByIndex():修改特定序号元素的值JudgeByElem
- Go语言学习笔记——Golang 1.18新特性工作区workspace
PPPsych
Go精进学习golangvscode
文章目录Golang1.18新特性工作区workspace需求分析实现步骤Golang1.18新特性工作区workspace需求分析加入现在我们把一个大的项目分成了两个项目,一个项目是基础模块,用来实现项目的公用功能。第二个项目要依赖第一个项目,注意:这里提到的是项目,而不是模块。解决方法有二:把第一个项目创建好,提交到github,第二个项目使用goget下载。第二个就是我们今天提到的使用Gol
- 详解 gRPC 客户端长连接机制实现
a...Z
后端
本文作者:熊喵君,原文链接:https://pandaychen.github.io/2020/09/01/GRPC-CLIENT-CONN-LASTING/转载Go语言中文网公众号Golang爱好者社区,这里有精选的网站上数千篇优秀文章供你学习,内容涵盖Golang基础系列教程、实战教程等优秀开源项目实践,同时会分享职场经验。每周获取Golang一周资讯等值得关注的内容0x00前言HTTP2是一
- Golang的append函数
程序员java-python-go
golang开发语言后端
发现问题golang的append函数funcappendfuncappend(slice[]Type,elems...Type)[]Type内建函数append将元素追加到切片的末尾。若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。slice=append(slice,elem1,elem2)slice=
- Java共享内容通信 VS Golang通信共享内存
Coder陈、
并发编程javagolang开发语言协程线程
接触的编程语言从C到Java再到现在Go,每个语言都有其独有特性,也具备共通之处。最近在学习并发编程的时候,发现一个很有意思的点:Java基于共享共享内存通信,而Golang则是通过通信共享内存。为什么?下面我们一起一探究竟!目录1、Java内存模型2、GoCSP模型3、代码表现形式3.1、Java交替打印3.2、Go交替打印4、总结1、Java内存模型JMM(JavaMemoryModel),定
- 五分钟学会Go这个Append内建函数~
Billy___
Go语言深入浅出golang后端
appendappend是golang中的一个内建函数,它的作用是官方的介绍是Theappendbuilt-infunctionappendselementstotheendofaslice.Ifithassufficientcapacity,thedestinationisreslicedtoaccommodatethenewelements.Ifitdoesnot,anewunderlying
- golang内置函数的使用
JinChanle
个人开发golang
前言:在使用多个goroutine中遇见panic问题,写了较全面的内置函数使用目录funcappend(slice[]Type,elems...Type)[]Typefunccap(vType)intfuncclose(cchan<-Type)funccomplex(r,iFloatType)ComplexTypefunccopy(dst,src[]Type)intfuncdelete(mmap
- golang学习笔记——grom连接mysql
怪我冷i
golang从入门到入门golang
GORM指南ThefantasticORMlibraryforGolangaimstobedeveloperfriendly.Golang的ORM库旨在对开发人员友好。特性全功能ORM关联(HasOne,HasMany,BelongsTo,ManyToMany,多态,单表继承)Create,Save,Update,Delete,Find中钩子方法支持Preload、Joins的预加载事务,嵌套事务
- golang微服务框架特性分析及选型
谬了个大也
解决方案go微服务云原生
目录一、微服务框架特性(10个)包括:Istio、go-zero、go-kit、go-kratos、go-micro、rpcx、kitex、goa、jupiter、dubbo-go、tarsgo1、特性及使用场景2、比较二、web框架特性(7个)包括:gin、fiber、beego、echo、iris、mux、goa1、特性及使用场景2、比较(以下框架均为go框架)一、微服务框架特性(10个)包括
- Golang | Leetcode Golang题解之第268题丢失的数字
__AtYou__
经验分享GolangLeetcode题解
题目:题解:funcmissingNumber(nums[]int)int{n:=len(nums)total:=n*(n+1)/2arrSum:=0for_,num:=rangenums{arrSum+=num}returntotal-arrSum}
- golang新特性:泛型
Czsaltt
golangjava开发语言
泛型Go的泛型(或者或类型形参)目前可使用在3个地方泛型类型-类型定义中带类型形参的类型泛型receiver-泛型类型的receiver泛型函数-带类型形参的函数为了实现泛型,Go引入了一些新的概念:类型形参类型形参列表类型实参类型约束实例化-泛型类型不能直接使用,要使用的话必须传入类型实参进行实例化以下三个典型位置无法自定义泛型(但是可以使用别处定义好的泛型)匿名结构体匿名函数方法Go1.18开
- sort排序免忘记
silver9886
数据结构排序算法算法
1.timesortrust稳定排序/python使用的算法2.pdgsortgolang/最新1.21使用的算法/rust非稳定排序使用的算法3.dual-pivotquicksort双基准快速排序jdk使用的不稳定排序算法参考资料:slices:usedual-pivotquicksortinsteadofpdqsort#61027WhatisthesortingalgorithmforJav
- BSV区块链发布Golang软件开发工具包
BSV区块链
区块链golang开发语言
发表时间:2024年8月8日BSV区块链团队正式发布为Golang语言开发的软件开发工具包(SDK)。这个GolangSDK(以下称GoSDK)为开发可扩展的BSV区块链应用提供了一套升级且标准化的接口和工具。请在GitHub上访问GoSDK:https://github.com/bitcoin-sv/go-sdkGoSDK为开发者提供了一种以点对点网络为基础的应用程序开发方式,使得简化支付验证(
- Golang | Leetcode Golang题解之第367题有效的完全平方数
__AtYou__
经验分享GolangLeetcode题解
题目:题解:funcisPerfectSquare(numint)bool{x0:=float64(num)for{x1:=(x0+float64(num)/x0)/2ifx0-x1<1e-6{x:=int(x0)returnx*x==num}x0=x1}}
- Golang学习笔记-Golang中的锁
武昌库里写JAVA
面试题汇总与解析springlog4jjava开发语言算法
同步原语和锁Golang作为一个原生支持用户态的语言,当提到并发进程,多线程的时候,是离不开锁的,锁是一种并发编程中的同步原语(SynchronizationPrimitives),它能保证多个Goroutine在访问同一片内存时不会出现竞争条件(Racecondition)等问题。基于原语go语言在sync包中提供了用于同步的一些基本原语,包括常见的sync.Mutex,sync.RWMutex
- Golang性能分析
242030
golanggolang
Golang性能分析1、通过pprof实时分析性能分析的场景主要有:CPU、Memory、IO、Goroutine、死锁几种。下面是主要两种类型的应用:1.1服务型应用_"net/http/pprof"包,专用于采集web服务运行数据的分析,即在运行的服务中通过API调用取数据。服务型应用场景中因为应用要一直提供服务,所以pprof是通过API访问来获取,pprof使用了默认的http.Defau
- 关于旗正规则引擎下载页面需要弹窗保存到本地目录的问题
何必如此
jsp超链接文件下载窗口
生成下载页面是需要选择“录入提交页面”,生成之后默认的下载页面<a>标签超链接为:<a href="<%=root_stimage%>stimage/image.jsp?filename=<%=strfile234%>&attachname=<%=java.net.URLEncoder.encode(file234filesourc
- 【Spark九十八】Standalone Cluster Mode下的资源调度源代码分析
bit1129
cluster
在分析源代码之前,首先对Standalone Cluster Mode的资源调度有一个基本的认识:
首先,运行一个Application需要Driver进程和一组Executor进程。在Standalone Cluster Mode下,Driver和Executor都是在Master的监护下给Worker发消息创建(Driver进程和Executor进程都需要分配内存和CPU,这就需要Maste
- linux上独立安装部署spark
daizj
linux安装spark1.4部署
下面讲一下linux上安装spark,以 Standalone Mode 安装
1)首先安装JDK
下载JDK:jdk-7u79-linux-x64.tar.gz ,版本是1.7以上都行,解压 tar -zxvf jdk-7u79-linux-x64.tar.gz
然后配置 ~/.bashrc&nb
- Java 字节码之解析一
周凡杨
java字节码javap
一: Java 字节代码的组织形式
类文件 {
OxCAFEBABE ,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组
}
&nbs
- java各种小工具代码
g21121
java
1.数组转换成List
import java.util.Arrays;
Arrays.asList(Object[] obj); 2.判断一个String型是否有值
import org.springframework.util.StringUtils;
if (StringUtils.hasText(str)) 3.判断一个List是否有值
import org.spring
- 加快FineReport报表设计的几个心得体会
老A不折腾
finereport
一、从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度。否则每次设计时模板均要从远程读取数据,速度相当慢!!
二、找一个富文本编辑软件(如NOTEPAD+)编辑SQL语句,这样会很好地检查语法。有时候带参数较多检查语法复杂时,结合FineReport中生成的日志,再找一个第三方数据库访问软件(如PL/SQL)进行数据检索,可以很快定位语法错误。
- mysql linux启动与停止
墙头上一根草
如何启动/停止/重启MySQL一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用 service 启动:service mysqld stop2、使用 mysqld 脚本启动:/etc/inin
- Spring中事务管理浅谈
aijuans
spring事务管理
Spring中事务管理浅谈
By Tony Jiang@2012-1-20 Spring中对事务的声明式管理
拿一个XML举例
[html]
view plain
copy
print
?
<?xml version="1.0" encoding="UTF-8"?>&nb
- php中隐形字符65279(utf-8的BOM头)问题
alxw4616
php中隐形字符65279(utf-8的BOM头)问题
今天遇到一个问题. php输出JSON 前端在解析时发生问题:parsererror.
调试:
1.仔细对比字符串发现字符串拼写正确.怀疑是 非打印字符的问题.
2.逐一将字符串还原为unicode编码. 发现在字符串头的位置出现了一个 65279的非打印字符.
 
- 调用对象是否需要传递对象(初学者一定要注意这个问题)
百合不是茶
对象的传递与调用技巧
类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看
为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)
类和对象的基础概念:
JAVA中万事万物都是类 类有字段(属性),方法,嵌套类和嵌套接
- JDK1.5 AtomicLong实例
bijian1013
javathreadjava多线程AtomicLong
JDK1.5 AtomicLong实例
类 AtomicLong
可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
 
- 自定义的RPC的Java实现
bijian1013
javarpc
网上看到纯java实现的RPC,很不错。
RPC的全名Remote Process Call,即远程过程调用。使用RPC,可以像使用本地的程序一样使用远程服务器上的程序。下面是一个简单的RPC 调用实例,从中可以看到RPC如何
- 【RPC框架Hessian一】Hessian RPC Hello World
bit1129
Hello world
什么是Hessian
The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary p
- 【Spark九十五】Spark Shell操作Spark SQL
bit1129
shell
在Spark Shell上,通过创建HiveContext可以直接进行Hive操作
1. 操作Hive中已存在的表
[hadoop@hadoop bin]$ ./spark-shell
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Welcom
- F5 往header加入客户端的ip
ronin47
when HTTP_RESPONSE {if {[HTTP::is_redirect]}{ HTTP::header replace Location [string map {:port/ /} [HTTP::header value Location]]HTTP::header replace Lo
- java-61-在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差. 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5,
bylijinnan
java
思路来自:
http://zhedahht.blog.163.com/blog/static/2541117420116135376632/
写了个java版的
public class GreatestLeftRightDiff {
/**
* Q61.在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差。
* 求所有数对之差的最大值。例如在数组
- mongoDB 索引
开窍的石头
mongoDB索引
在这一节中我们讲讲在mongo中如何创建索引
得到当前查询的索引信息
db.user.find(_id:12).explain();
cursor: basicCoursor 指的是没有索引
&
- [硬件和系统]迎峰度夏
comsci
系统
从这几天的气温来看,今年夏天的高温天气可能会维持在一个比较长的时间内
所以,从现在开始准备渡过炎热的夏天。。。。
每间房屋要有一个落地电风扇,一个空调(空调的功率和房间的面积有密切的关系)
坐的,躺的地方要有凉垫,床上要有凉席
电脑的机箱
- 基于ThinkPHP开发的公司官网
cuiyadll
行业系统
后端基于ThinkPHP,前端基于jQuery和BootstrapCo.MZ 企业系统
轻量级企业网站管理系统
运行环境:PHP5.3+, MySQL5.0
系统预览
系统下载:http://www.tecmz.com
预览地址:http://co.tecmz.com
各种设备自适应
响应式的网站设计能够对用户产生友好度,并且对于
- Transaction and redelivery in JMS (JMS的事务和失败消息重发机制)
darrenzhu
jms事务承认MQacknowledge
JMS Message Delivery Reliability and Acknowledgement Patterns
http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
Transaction and redelivery in
- Centos添加硬盘完全教程
dcj3sjt126com
linuxcentoshardware
Linux的硬盘识别:
sda 表示第1块SCSI硬盘
hda 表示第1块IDE硬盘
scd0 表示第1个USB光驱
一般使用“fdisk -l”命
- yii2 restful web服务路由
dcj3sjt126com
PHPyii2
路由
随着资源和控制器类准备,您可以使用URL如 http://localhost/index.php?r=user/create访问资源,类似于你可以用正常的Web应用程序做法。
在实践中,你通常要用美观的URL并采取有优势的HTTP动词。 例如,请求POST /users意味着访问user/create动作。 这可以很容易地通过配置urlManager应用程序组件来完成 如下所示
- MongoDB查询(4)——游标和分页[八]
eksliang
mongodbMongoDB游标MongoDB深分页
转载请出自出处:http://eksliang.iteye.com/blog/2177567 一、游标
数据库使用游标返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效控制,从shell中定义一个游标非常简单,就是将查询结果分配给一个变量(用var声明的变量就是局部变量),便创建了一个游标,如下所示:
> var
- Activity的四种启动模式和onNewIntent()
gundumw100
android
Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android总Activity的启动模式分为四种:
Activity启动模式设置:
<acti
- 攻城狮送女友的CSS3生日蛋糕
ini
htmlWebhtml5csscss3
在线预览:http://keleyi.com/keleyi/phtml/html5/29.htm
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>攻城狮送女友的CSS3生日蛋糕-柯乐义<
- 读源码学Servlet(1)GenericServlet 源码分析
jzinfo
tomcatWebservlet网络应用网络协议
Servlet API的核心就是javax.servlet.Servlet接口,所有的Servlet 类(抽象的或者自己写的)都必须实现这个接口。在Servlet接口中定义了5个方法,其中有3个方法是由Servlet 容器在Servlet的生命周期的不同阶段来调用的特定方法。
先看javax.servlet.servlet接口源码:
package
- JAVA进阶:VO(DTO)与PO(DAO)之间的转换
snoopy7713
javaVOHibernatepo
PO即 Persistence Object VO即 Value Object
VO和PO的主要区别在于: VO是独立的Java Object。 PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。
实际上,这个VO被用作Data Transfer
- mongodb group by date 聚合查询日期 统计每天数据(信息量)
qiaolevip
每天进步一点点学习永无止境mongodb纵观千象
/* 1 */
{
"_id" : ObjectId("557ac1e2153c43c320393d9d"),
"msgType" : "text",
"sendTime" : ISODate("2015-06-12T11:26:26.000Z")
- java之18天 常用的类(一)
Luob.
MathDateSystemRuntimeRundom
System类
import java.util.Properties;
/**
* System:
* out:标准输出,默认是控制台
* in:标准输入,默认是键盘
*
* 描述系统的一些信息
* 获取系统的属性信息:Properties getProperties();
*
*
*
*/
public class Sy
- maven
wuai
maven
1、安装maven:解压缩、添加M2_HOME、添加环境变量path
2、创建maven_home文件夹,创建项目mvn_ch01,在其下面建立src、pom.xml,在src下面简历main、test、main下面建立java文件夹
3、编写类,在java文件夹下面依照类的包逐层创建文件夹,将此类放入最后一级文件夹
4、进入mvn_ch01
4.1、mvn compile ,执行后会在