- 牛客周赛 Round 39补题
cozywinter
python
警钟长鸣,题目的名字和题目没有绝对关系B-小红不想做鸽巢原理_牛客周赛Round39(nowcoder.com)鸽巢原理是类似于三个人进两间屋子,至少有一个屋子的人至少为两人这样,和这个好像关联也不是太大,可能我太笨没想到求一下读入的数量的总数,对k取模,列表降序排列,从最大的数量开始判断能取几堆球不要忘记特判能全取光的情况n,k=map(int,input().split())li=list(m
- 学习笔记(29):训练集与测试集划分详解:train_test_split 函数深度解析
宁儿数据安全
#机器学习学习笔记深度学习
学习笔记(29):训练集与测试集划分详解:train_test_split函数深度解析一、为什么需要划分训练集和测试集?在机器学习中,模型需要经历两个核心阶段:训练阶段:用训练集数据学习特征与目标值的映射关系(如线性回归的权重)。测试阶段:用测试集评估模型在未见过的数据上的表现,避免“过拟合”(模型只记住训练数据的噪声,无法泛化到新数据)。类比场景:学生通过“练习题”(训练集)学习知识,再通过“考
- YOLOv12_ultralytics-8.3.145_2025_5_27部分代码阅读笔记-split_dota.py
红色的山茶花
YOLO笔记深度学习
split_dota.pyultralytics\data\split_dota.py目录split_dota.py1.所需的库和模块2.defbbox_iof(polygon1:np.ndarray,bbox2:np.ndarray,eps:float=1e-6)->np.ndarray:3.defload_yolo_dota(data_root:str,split:str="train")->
- 用java,把12.25.pdf从最后一个点分割,得到pdf
连杰李
JAVA开发中遇到的问题javapdfpython
要在Java中从文件名12.25.pdf的最后一个点(.)分割文件名和扩展名,可以使用String类的lastIndexOf()和substring()方法。以下是一个示例代码:publicclassFileNameSplitter{publicstaticvoidmain(String[]args){StringfileName="12.25.pdf";//找到最后一个点的位置intlastDo
- 如何将Webpack与React结合使用:深入的教程
cumi6497
javapythonbabelreactnativehtml5
UpdatedtoBabel7更新至Babel7InthistutorialwewillseethebasicsofWebpackforReacttogetyoustarted,includingReactRouter,HotModuleReplacement(HMR),CodeSplittingbyRouteandVendor,productionconfigurationandmore.在本教
- 【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)Text Splitters详解 ?
【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)TextSplitters详解?【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Retrieval组件)TextSplitters详解?文章目录【AI大模型学习路线】第三阶段之RAG与LangChain——第十四章(LangChain与Re
- Java流式处理
太阳伞下的阿呆
java生成器迭代器stream流式处理
在Java中,没有直接类似Python生成器的语法,但可以通过迭代器(Iterator)和流式处理(如使用Spliterator或ReactiveStreams)来实现类似生成器的功能。此外,也可以通过BlockingQueue和线程的组合实现异步文件解压流。以下是几种实现方式:**方法1:使用****Iterator**实现一个Iterator,在每次调用next()时返回解压完成的下一个文件名
- vue项目做导入excel(通过base64)
最近项目的需求,记录下笔记要求:1..xls后缀名文件2.文件不超过10M3.转成base64传给后端导入excel//点击导入exceluploadFile(res){letfile=res.filethis.getBase64(file).then(baseFile=>{letdata=baseFile.split(';')[1]//base64的截取,根据后端要求截取的后半截的this.sa
- InnoDB的页分裂、页合并及优化策略
flydroid
mysql数据库
文章目录B+树结构1.非叶子节点(索引节点)2.叶子节点(数据节点)3.层级关系4.B+树vsB树的核心区别5.B+树查询流程示例1.页分裂(PageSplit)触发条件分裂过程分裂类型性能影响2.页合并(PageMerge)触发条件合并过程性能影响3.页分裂与合并的根因B+树的平衡性要求动态数据操作的必然结果4.页分裂与合并的优化策略减少页分裂减少页合并5.示例分析页分裂场景页合并场景总结Inn
- SQL STRING_SPLIT函数,将指定的分隔符将字符串拆分为子字符串行
进击的巨无霸汉堡
开发基础sql数据库
文章目录STRING_SPLIT(Transact-SQL)1、语法2、参数3、样例样例1样例2STRING_SPLIT(Transact-SQL)STRING_SPLIT是一个表值函数,它根据指定的分隔符将字符串拆分为子字符串行。1、语法STRING_SPLIT(string,separator[,enable_ordinal])2、参数参数参数名说明string字符串任何字符类型(例如nvar
- Day33打卡 @浙大疏锦行
ayuan0119
python打卡shupython
知识点回顾:PyTorch和cuda的安装查看显卡信息的命令行命令(cmd中使用)cuda的检查简单神经网络的流程数据预处理(归一化、转换成张量)#仍然用4特征,3分类的鸢尾花数据集作为我们今天的数据集fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnp
- 如何使用 langchain 与 openAI 连接
海乐学习
langchainpythonlangchainpython
上一篇写了如何安装langchainhttps://www.cnblogs.com/hailexuexi/p/18087602这里主要说一个langchain的使用创建一个目录langchain,在这个目录下创建两个文件main.py这段python代码,用到了openAI,需要openAI及FQ。这里只做为示例#-*-coding:utf-8-*-fromlangchain.text_split
- day38
心落薄荷糖
Python训练营python
importtorchimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportMinMaxScalerimporttimeimportmatplotlib.pyplotaspltfromtqdmimporttqd
- 力扣代码错题记录
0319zz
leetcode算法
1.排序1.1快排不稳定的排序方法:[5,3A,6,3B]->[3B,3A,5,6]publicclassMain{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);Stringstring=scanner.nextLine();String[]split=string.trim().split("");
- Python打卡:Day24
剑桥折刀s
python打卡python
importpandasaspdimportnumpyasnpimportreimportxgboostasxgbfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportclassification_report,confusion_matrix,accuracy_score,precision_score
- DAY 33 简单的神经网络
2401_84854050
python打卡神经网络深度学习人工智能
1.数据预处理(0)准备数据、划分数据#仍然用4特征,3分类的鸢尾花数据集作为我们今天的数据集fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnp#加载鸢尾花数据集iris=load_iris()X=iris.data#特征数据y=iris.target
- 20240820 代码随想录 | 图论 岛屿
m0_46259676
图论算法
98.所有可达路径深度优先搜索(dfs)和广度优先搜索(bfs)区别:dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。n,m=map(int,input().split())print(''.join(
- 20240821 代码随想录 | 图论
m0_46259676
图论
103.水流问题dfs深度优先搜素directions=[[0,1],[0,-1],[1,0],[-1,0]]set_1=set()set_2=set()n,m=map(int,input().split())g=[]for_inrange(n):g.append(list(map(int,input().split())))defdfs(g,x,y,visited,s):visited[x][y
- Python中的split()和rsplit()的使用
y_bccl27
Pythonpython
第一种:split()表示通过指定分隔符对字符串进行切片defdemo():str="a,b,c,d,e,f,g"str=str.split(",")[len(str.split(","))-1]print(str)demo()执行上述代码,其输出结果为:g第二种:rsplit()表示从右侧开始将字符串拆分为列表defdemo():str="/home/data/text.txt"str=str.
- 《Vue3+ECharts 大屏性能优化全攻略:从加载到交互的极致体验》
前端极客探险家
vue数据可视化性能优化大屏端echarts
1.大屏项目痛点分析与优化目标典型性能问题:首屏白屏时间过长大数据量下的渲染卡顿复杂动画导致的掉帧优化目标设定:首屏加载{config.splitChunks({chunks:'all',minSize:20000,maxSize:250000,minChunks:1,automaticNameDelimiter:'~',cacheGroups:{echarts:{test:/[\\/]node_
- Python学习Day34
m0_64472246
python打卡学习python
学习来源:@浙大疏锦行优化耗时:importtorchimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportMinMaxScalerimpo
- 字符串内置函数
Uzizi
Python
一、实验字符串二、函数1、find函数2、rfind函数3、index函数rindex函数4、count函数5、replace6、join函数7、split函数8、title函数9、capitalize10、startwithendwith11、lowerupper12、lstriprstrip13、strip14、partionrpartion函数15、isalpha函数16、isdigit函数
- python训练day37 早停策略和模型权重的保持
importtorchimporttorch.nnasnnimporttorch.optimasoptimfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportMinMaxScalerimporttimeimportmatp
- WinUI3入门9:自制SplitPanel
初级代码游戏
WinUIWinUIC#SplitPanel拉伸
初级代码游戏的专栏介绍与文章目录-CSDN博客我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。源码指引:github源码指引_初级代码游戏的博客-CSDN博客C#是我多年以来的业余爱好,新搞的东西能用C#的就用C#了。WinUI3里面有个SplitView,实现了两块
- python学习记录16
彤银浦
学习
字符串总结python程序使用unicode编码,中文字符与英文字符都占一个字符,但英文字符只占一个字节,中文字符若按照utf-8格式编码占3个字节。(1)字符串常用方法1)大小写转化string.upper()#将所有字母转换为大写string.lower()#将所有字母转换为小写2)字符串分割string.split(sep='')#将字符串按照sep进行分割3)字符串的检索string.co
- 基于Split Bregman算法的稀疏图像重建(附带Matlab代码)
代码创造者
算法matlab人工智能Matlab
基于SplitBregman算法的稀疏图像重建(附带Matlab代码)SplitBregman算法是一种用于稀疏图像重建的优化算法,它能够有效地恢复受损的图像并保持重要的细节。本文将详细介绍SplitBregman算法的原理,并提供Matlab代码实现。算法原理SplitBregman算法是一种迭代算法,用于求解具有L1正则化项的优化问题。在图像重建中,我们希望找到一个稀疏表示来恢复受损的图像。该
- 分类树/装袋法/随机森林算法的R语言实现
廖致君
R
原文首发于简书于[2018.06.12]本文是我自己动手用R语言写的实现分类树的代码,以及在此基础上写的袋装法(bagging)和随机森林(randomforest)的算法实现。全文的结构是:分类树基本知识predginisplitrulesplitrule_bestsplitrule_randomsplittingbuildTreepredict装袋法与随机森林基本知识baggingpredic
- python打卡day55
Takina~
python打卡python机器学习
importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.preprocessingimportMinMaxScalerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLinearRegressionfromsklearn.ensembl
- MapReduce
2401_8554978
mapreduce大数据
MapReduce原理与组成一、MapReduce组件及任务Mapper(映射器)任务:处理输入数据并生成键值对。每个输入记录被转换成一个或多个键值对。工作原理:Mapper接收输入的分片(InputSplit),通常是文件的一部分,然后根据业务逻辑将这些数据转换为键值对。例子:假设我们要统计文本中每个单词出现的次数,Mapper可以将每一行文本分割成单词,并输出每个单词作为键,值设为1。Redu
- Abel 变换,离散型分部积分
_Equinox
数据结构与算法数学随笔数学算法
文章目录零、引入:分部积分一、Abel变换1.1Abel变换1.2证明二、一些比较浅显的应用2.1等差乘等比型求和2.2平方求和公式2.3不等式证明三、一些算法题的式子优化3.13500.将数组分割为子数组的最小代价3.2D.ArraySplitting3.3300.任务安排1零、引入:分部积分我们不难表示出上图中的面积A1和A2A1=∫y1y2xdyA2=∫x1x2ydxA1+A2=x2y2−x
- 算法 单链的创建与删除
换个号韩国红果果
c算法
先创建结构体
struct student {
int data;
//int tag;//标记这是第几个
struct student *next;
};
// addone 用于将一个数插入已从小到大排好序的链中
struct student *addone(struct student *h,int x){
if(h==NULL) //??????
- 《大型网站系统与Java中间件实践》第2章读后感
白糖_
java中间件
断断续续花了两天时间试读了《大型网站系统与Java中间件实践》的第2章,这章总述了从一个小型单机构建的网站发展到大型网站的演化过程---整个过程会遇到很多困难,但每一个屏障都会有解决方案,最终就是依靠这些个解决方案汇聚到一起组成了一个健壮稳定高效的大型系统。
看完整章内容,
- zeus持久层spring事务单元测试
deng520159
javaDAOspringjdbc
今天把zeus事务单元测试放出来,让大家指出他的毛病,
1.ZeusTransactionTest.java 单元测试
package com.dengliang.zeus.webdemo.test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import
- Rss 订阅 开发
周凡杨
htmlxml订阅rss规范
RSS是 Really Simple Syndication的缩写(对rss2.0而言,是这三个词的缩写,对rss1.0而言则是RDF Site Summary的缩写,1.0与2.0走的是两个体系)。
RSS
- 分页查询实现
g21121
分页查询
在查询列表时我们常常会用到分页,分页的好处就是减少数据交换,每次查询一定数量减少数据库压力等等。
按实现形式分前台分页和服务器分页:
前台分页就是一次查询出所有记录,在页面中用js进行虚拟分页,这种形式在数据量较小时优势比较明显,一次加载就不必再访问服务器了,但当数据量较大时会对页面造成压力,传输速度也会大幅下降。
服务器分页就是每次请求相同数量记录,按一定规则排序,每次取一定序号直接的数据
- spring jms异步消息处理
510888780
jms
spring JMS对于异步消息处理基本上只需配置下就能进行高效的处理。其核心就是消息侦听器容器,常用的类就是DefaultMessageListenerContainer。该容器可配置侦听器的并发数量,以及配合MessageListenerAdapter使用消息驱动POJO进行消息处理。且消息驱动POJO是放入TaskExecutor中进行处理,进一步提高性能,减少侦听器的阻塞。具体配置如下:
- highCharts柱状图
布衣凌宇
hightCharts柱图
第一步:导入 exporting.js,grid.js,highcharts.js;第二步:写controller
@Controller@RequestMapping(value="${adminPath}/statistick")public class StatistickController { private UserServi
- 我的spring学习笔记2-IoC(反向控制 依赖注入)
aijuans
springmvcSpring 教程spring3 教程Spring 入门
IoC(反向控制 依赖注入)这是Spring提出来了,这也是Spring一大特色。这里我不用多说,我们看Spring教程就可以了解。当然我们不用Spring也可以用IoC,下面我将介绍不用Spring的IoC。
IoC不是框架,她是java的技术,如今大多数轻量级的容器都会用到IoC技术。这里我就用一个例子来说明:
如:程序中有 Mysql.calss 、Oracle.class 、SqlSe
- TLS java简单实现
antlove
javasslkeystoretlssecure
1. SSLServer.java
package ssl;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.security.KeyStore;
import
- Zip解压压缩文件
百合不是茶
Zip格式解压Zip流的使用文件解压
ZIP文件的解压缩实质上就是从输入流中读取数据。Java.util.zip包提供了类ZipInputStream来读取ZIP文件,下面的代码段创建了一个输入流来读取ZIP格式的文件;
ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
&n
- underscore.js 学习(一)
bijian1013
JavaScriptunderscore
工作中需要用到underscore.js,发现这是一个包括了很多基本功能函数的js库,里面有很多实用的函数。而且它没有扩展 javascript的原生对象。主要涉及对Collection、Object、Array、Function的操作。 学
- java jvm常用命令工具——jstatd命令(Java Statistics Monitoring Daemon)
bijian1013
javajvmjstatd
1.介绍
jstatd是一个基于RMI(Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口允许远程的监控工具连接到本地的JVM执行命令。
jstatd是基于RMI的,所以在运行jstatd的服务
- 【Spring框架三】Spring常用注解之Transactional
bit1129
transactional
Spring可以通过注解@Transactional来为业务逻辑层的方法(调用DAO完成持久化动作)添加事务能力,如下是@Transactional注解的定义:
/*
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version
- 我(程序员)的前进方向
bitray
程序员
作为一个普通的程序员,我一直游走在java语言中,java也确实让我有了很多的体会.不过随着学习的深入,java语言的新技术产生的越来越多,从最初期的javase,我逐渐开始转变到ssh,ssi,这种主流的码农,.过了几天为了解决新问题,webservice的大旗也被我祭出来了,又过了些日子jms架构的activemq也开始必须学习了.再后来开始了一系列技术学习,osgi,restful.....
- nginx lua开发经验总结
ronin47
使用nginx lua已经两三个月了,项目接开发完毕了,这几天准备上线并且跟高德地图对接。回顾下来lua在项目中占得必中还是比较大的,跟PHP的占比差不多持平了,因此在开发中遇到一些问题备忘一下 1:content_by_lua中代码容量有限制,一般不要写太多代码,正常编写代码一般在100行左右(具体容量没有细心测哈哈,在4kb左右),如果超出了则重启nginx的时候会报 too long pa
- java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶
bylijinnan
java
import java.util.Stack;
public class ReverseStackRecursive {
/**
* Q 66.颠倒栈。
* 题目:用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。
* 颠倒之后的栈为{5,4,3,2,1},5处在栈顶。
*1. Pop the top element
*2. Revers
- 正确理解Linux内存占用过高的问题
cfyme
linux
Linux开机后,使用top命令查看,4G物理内存发现已使用的多大3.2G,占用率高达80%以上:
Mem: 3889836k total, 3341868k used, 547968k free, 286044k buffers
Swap: 6127608k total,&nb
- [JWFD开源工作流]当前流程引擎设计的一个急需解决的问题
comsci
工作流
当我们的流程引擎进入IRC阶段的时候,当循环反馈模型出现之后,每次循环都会导致一大堆节点内存数据残留在系统内存中,循环的次数越多,这些残留数据将导致系统内存溢出,并使得引擎崩溃。。。。。。
而解决办法就是利用汇编语言或者其它系统编程语言,在引擎运行时,把这些残留数据清除掉。
- 自定义类的equals函数
dai_lm
equals
仅作笔记使用
public class VectorQueue {
private final Vector<VectorItem> queue;
private class VectorItem {
private final Object item;
private final int quantity;
public VectorI
- Linux下安装R语言
datageek
R语言 linux
命令如下:sudo gedit /etc/apt/sources.list1、deb http://mirrors.ustc.edu.cn/CRAN/bin/linux/ubuntu/ precise/ 2、deb http://dk.archive.ubuntu.com/ubuntu hardy universesudo apt-key adv --keyserver ke
- 如何修改mysql 并发数(连接数)最大值
dcj3sjt126com
mysql
MySQL的连接数最大值跟MySQL没关系,主要看系统和业务逻辑了
方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MYSQL即可
方法二:MySQL的最大连接数默认是100客户端登录:mysql -uusername -ppass
- 单一功能原则
dcj3sjt126com
面向对象的程序设计软件设计编程原则
单一功能原则[
编辑]
SOLID 原则
单一功能原则
开闭原则
Liskov代换原则
接口隔离原则
依赖反转原则
查
论
编
在面向对象编程领域中,单一功能原则(Single responsibility principle)规定每个类都应该有
- POJO、VO和JavaBean区别和联系
fanmingxing
VOPOJOjavabean
POJO和JavaBean是我们常见的两个关键字,一般容易混淆,POJO全称是Plain Ordinary Java Object / Plain Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO,但是JavaBean则比POJO复杂很多,JavaBean是一种组件技术,就好像你做了一个扳子,而这个扳子会在很多地方被
- SpringSecurity3.X--LDAP:AD配置
hanqunfeng
SpringSecurity
前面介绍过基于本地数据库验证的方式,参考http://hanqunfeng.iteye.com/blog/1155226,这里说一下如何修改为使用AD进行身份验证【只对用户名和密码进行验证,权限依旧存储在本地数据库中】。
将配置文件中的如下部分删除:
<!-- 认证管理器,使用自定义的UserDetailsService,并对密码采用md5加密-->
- mac mysql 修改密码
IXHONG
mysql
$ sudo /usr/local/mysql/bin/mysqld_safe –user=root & //启动MySQL(也可以通过偏好设置面板来启动)$ sudo /usr/local/mysql/bin/mysqladmin -uroot password yourpassword //设置MySQL密码(注意,这是第一次MySQL密码为空的时候的设置命令,如果是修改密码,还需在-
- 设计模式--抽象工厂模式
kerryg
设计模式
抽象工厂模式:
工厂模式有一个问题就是,类的创建依赖于工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则。我们采用抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。
总结:这个模式的好处就是,如果想增加一个功能,就需要做一个实现类,
- 评"高中女生军训期跳楼”
nannan408
首先,先抛出我的观点,各位看官少点砖头。那就是,中国的差异化教育必须做起来。
孔圣人有云:有教无类。不同类型的人,都应该有对应的教育方法。目前中国的一体化教育,不知道已经扼杀了多少创造性人才。我们出不了爱迪生,出不了爱因斯坦,很大原因,是我们的培养思路错了,我们是第一要“顺从”。如果不顺从,我们的学校,就会用各种方法,罚站,罚写作业,各种罚。军
- scala如何读取和写入文件内容?
qindongliang1922
javajvmscala
直接看如下代码:
package file
import java.io.RandomAccessFile
import java.nio.charset.Charset
import scala.io.Source
import scala.reflect.io.{File, Path}
/**
* Created by qindongliang on 2015/
- C语言算法之百元买百鸡
qiufeihu
c算法
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁,母,雏各几何?
代码如下:
#include <stdio.h>
int main()
{
int cock,hen,chick; /*定义变量为基本整型*/
for(coc
- Hadoop集群安全性:Hadoop中Namenode单点故障的解决方案及详细介绍AvatarNode
wyz2009107220
NameNode
正如大家所知,NameNode在Hadoop系统中存在单点故障问题,这个对于标榜高可用性的Hadoop来说一直是个软肋。本文讨论一下为了解决这个问题而存在的几个solution。
1. Secondary NameNode
原理:Secondary NN会定期的从NN中读取editlog,与自己存储的Image进行合并形成新的metadata image
优点:Hadoop较早的版本都自带,