- flink---window
搞数据的小杰
flink大数据
Window介绍DataStream:https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/dev/datastream/operators/windows/SQL:https://nightlies.apache.org/flink/flink-docs-release-1.17/zh/docs/dev/table/
- Rust 操作符及示例
gqkmiss
rustrust开发语言后端rust操作符操作符
Rust操作符Rust提供了一系列操作符(operators),每种操作符都有特定的功能和应用场景。1.算术操作符这些操作符用于基本的数学运算:+:加法,用于两个数相加。示例:letsum=5+10;-:减法,用于两个数相减。示例:letdifference=10-5;*:乘法,用于两个数相乘。示例:letproduct=4*3;/:除法,用于两个数相除。示例:letquotient=10/2;%
- Docker学习系列(七):使用Kubernetes Operators进行应用的自动化运维管理
黄宝良
Docker运维docker学习
使用KubernetesOperators进行应用的自动化运维管理KubernetesOperators是扩展Kubernetes功能的强大工具,可以自动化复杂的应用运维任务。本篇文章将详细介绍KubernetesOperators的概念、工作原理,并通过实际案例演示如何创建和使用Operators进行应用的自动化运维管理。一、什么是KubernetesOperators?KubernetesOp
- RxSwift 使用踩坑 rxFatalError
走一朝
fatalError(lastMessage)报错:PrintingdescriptionoflastMessage:"FailureconvertingfromOptional()toUIScrollViewDelegate"代码一直没有改过就集成了一个百度的bug分析第三方BaiduMobStatCodeless目前不清楚两者内部有什么冲突。
- Java Operator SDK
快乐骑行^_^
日常分享专栏java开发语言OperatorSDK
JavaOperatorSDK生成项目骨架快速入门模式和最佳实践使用示例Operators实现示例OperatorQuarkusSpringBootOperators代表Kubernetes管理集群和非集群资源。这个JavaOperatorSDK(JOSDK)旨在通过使用一个对Java开发人员来说应该感觉自然的API,使编写Kubernetes操作员变得尽可能容易,并且不必担心许多低级细节,因为S
- IOS 14 封装网络请求框架
sziitjin
IOSios
本文基于IOS13网络请求和Moya框架,对网络请求框架Moya的二次封装,并实现JSON对象解析等。添加依赖#网络请求框架#https://github.com/Moya/Moyapod'Moya/RxSwift'#避免每个界面定义disposeBag#https://github.com/RxSwiftCommunity/NSObject-Rxpod"NSObject+Rx"#JSON解析为对
- RxSwift如何选择操作符?
MMD_
amb多个Observables中,取第一个发出元素的Observablebuffer缓存元素当元素达到某个数量,然后将元素集合发送出来catchError拦截一个error事件,将他替换成其他的元素或一组元素,使得正常结束catchErrorJustReturn将error事件替换成其他的一个元素,然后结束该序列combineLatest将多个Observables中最新的元素通过一个函数组合起
- Angular + rxjs 实现 某个方法防抖
clearlove_lwc
Angularangular.js前端
场景:监听输入变化从而触发搜索方法或某个方法的搜索框、输入框等//引入rxjs等包import{Subject}from'rxjs';import{distinctUntilChanged,debounceTime}from'rxjs/operators';举例:search()方法会调用getList()这个方法向后台查询数据//预置方法/*调用后台查询数据接口*/getList(){*****
- Angular中如何实现防抖和节流
crary,记忆
前端知识总结angular.jsjavascript前端angular
在Angular中实现防抖和节流的方法有多种,这篇博客主要是详细介绍两种常用的方法:使用RxJS操作符和使用Angular自带的工具。使用RxJS操作符实现防抖和节流:防抖(Debounce)://简易版import{debounceTime}from'rxjs/operators';input.valueChanges.pipe(debounceTime(300)).subscribe(valu
- C++ opencv之图像像素的算术操作
阿超没有蛀牙
OpenCVopencv
这节课我们来学习图像像素的读写操作。文章目录一、像素的加减乘除操作1、加法操作:2、减法操作:3、除法操作:4、乘法操作一、像素的加减乘除操作1、加法操作:voidQuickDemo::operators_Demo(Mat&image){Matdst;dst=image+Scalar(50,50,50);imshow("加法操作",dst);}输出结果为:可以明显的感受到右边这幅图,亮度增强了。o
- C++opencv图像算数操作-加减乘除
忙什么果
opencvc++opencv开发语言
quick_opencv.h#includeusingnamespacecv;classQuickDemo{public:voidoperators_demo(Mat&image);//图像算数操作};QuickDemo.cpp#include//图像算数操作voidQuickDemo::operators_demo(Mat&image){Matdst1,dst2,dst3,dst4;//超出25
- RxSwift-DisposeBag垃圾袋
May_Dobin
DisposeBag垃圾袋分析,demo运行如下:self.intervalOB=Observable.interval(.seconds(1),scheduler:MainScheduler.init())self.intervalOB.subscribe(onNext:{(num)inself.showSencondNum.text=String(num)}).disposed(by:disp
- 16.6Todo I - 通过一个真实的App体会Rx的基本概念
CDLOG
经过了前面几节的内容铺垫后,现在,是时候在一个真的应用里感受下这些的Rx的概念了。在日常的开发中,如何通过RxSwift绑定的用户界面和模式?如何在不同的控制器之间共享数据?通过对这些内容的实践,你就会更真实的感受到之前提到的那些基本概念的含义。当然,作为开始,我们的目标还不是一个MVVM架构的应用程序,那是最终的目标。在这一节,我们先从一个常规开发的应用程序开始,用的Rx的思想改造一些常规功能的
- RxSwift 源码之 CurrentThreadScheduler
狼性刀锋
先来看看核心代码subscribeoverridefuncsubscribe(_observer:O)->DisposablewhereO.E==Element{if!CurrentThreadScheduler.isScheduleRequired{//Thereturneddisposableneedstoreleaseallreferencesonceitwasdisposed.letdis
- Swift Combine 从入门到精通一
AI架构师易筋
iOSswift开发语言combineswiftUI
1.Combine简介用Apple官方的话来说,Combine是:adeclarativeSwiftAPIforprocessingvaluesovertime.Combine是Apple用来实现函数响应式编程的库,类似于RxSwift。RxSwift是ReactiveX对Swift语言的实现。Combine使用了许多可以在其他语言和库中找到的相同的函数响应式概念,并将Swift的静态类型特性应用
- 【Flink】:No operators defined in streaming topology. Cannot execute.
一杯咖啡半杯糖
Flink实战flink
在运行Flink的时候出现如下问题Exceptioninthread"main"java.lang.IllegalStateException:Nooperatorsdefinedinstreamingtopology.Cannotexecute.atorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment.getS
- RxSwift的使用详解
adaodao3056
RxSwift的使用详解一.RxSwift简介推荐:RxSwift官方文档中文:RxSwift官方文档的中文翻译RxSwift是Swift函数响应式编程的一个开源库,由Github的ReactiveX组织开发、维护其他语言像C#,Java和JS也有,Rx.Net、RxJava、rxjsRxSwift的目的是让数据/事件流和异步任务能够更方便的序列化处理,能够使用Swift进行响应式编程1.RxSw
- RxSwift之内存管理
暮云_开发
通过前面的学习,到这里RxSwift也已经接近完结了,这里对于内存的问题,再次做一个总结,同时这里也有一个问题思考,那就是RxSwift有没有循环引用的问题?在Swift的闭包中我们经常会使用到[weakself]和[unownedself]来保证在闭包中使用self不会造成循环引用的问题,那在RxSwift中有没有相同的问题呢。在这个问题之前,先来了解一下weak和unowned的区别,weak
- Flink cdc3.0动态变更表结构——源码解析
yyoc97
大数据flinkflink源码解析动态变更
文章目录前言源码解析1.接收schema变更事件2.发起schema变更请求3.schema变更请求具体处理4.广播刷新事件并阻塞5.处理FlushEvent6.修改sink端schema结尾前言上一篇Flinkcdc3.0同步实例介绍了最新的一些功能和问题,本篇来看下新功能之一的动态变更表结构的具体实现。在Flink中,应用程序由流数据流组成,这些数据流是由用户定义的Operators进行转换。
- RxJs高级教程
Yong_bcf4
Pipeable操作符从5.5版本开始我们提供了“pipeable操作符”,它们可以通过rxjs/operators来访问(注意"operators"是复数)。相比较于通过在rxjs/add/operator/*中以“打补丁”的方式来获取需要用到的操作符,这是一种更好的方式,注意:如果使用rxjs/operators而不修改构建过程的话会导致更大的包。详见下面的已知问题一节。重命名的操作符由于操作
- 10RXSwift中的销毁者底层剖析
越来越胖了
今天捋了一下RXSwift中的销毁者,想到之前的观察者,突然来了灵魂一问:观察者和销毁者的本质是什么?刚开始想到这个问题是,自己也懵逼了,是啥子?我的天我也不晓得,突然感觉近一个月的RX白学了,真的好惭愧。还是先讲讲销毁者的底层原理实现吧,问题的答案放在最后面。先来一个最基本的rx实例://创建序列letob=Observable.create{(observer)->Disposableinob
- Java编程思想(第四版)Thinking in Java 4th 读书笔记
虾米记
读书笔记Javajava学习读书笔记
目录前言配书代码使用指南第1章对象导论1.2接口1.4被隐藏的具体实现1.5复用具体实现1.7多态1.8单根继承第2章一切都是对象object2.2必须由你创建所有对象2.2.1五个地方存储数据2.2.2特例:基本类型2.4类2.4.1字段和方法2.6构建一个Java程序2.6.1名字可见性2.7你的第一个Java程序2.8注释和嵌入式文档第3章操作符operators3.1更简单的打印语句3.4
- RxSwift - Observable序列的创建方式
恍然如梦_b700
1:emty首先来一个空的序列-本来序列事件是Int类型的,这里调用emty函数没有序列,只能completeprint("********emty********")letemtyOb=Observable.empty()_=emtyOb.subscribe(onNext:{(number)inprint("订阅:",number)},onError:{(error)inprint("error
- 基于 kubebuilder 的 operators 的设计 & 开发
流雨声
前文提要本篇开始开发一个有实际作用的operator,该operator名为elasticweb,既弹性web服务,本篇参考网络的文章进行汇总实践;这将是一次完整的operator开发实战,设计、编码、部署等环节都会涉及到每一个产品的细节和具体实现,elasticweb从CRD设计再到controller功能都有明确的业务含义,能执行业务逻辑。需求背景设计架构背景:做过网站开发的同学对横向扩容应该
- Rxjs 函数式编程 响应式编程 观察者模式 推送体系 惰性
glenlg
新概念:在RxJS中用来解决异步事件管理的的基本概念是:Observable(可观察对象):表示一个概念,这个概念是一个可调用的未来值或事件的集合。Observer(观察者):一个回调函数的集合,它知道如何去监听由Observable提供的值。Subscription(订阅):表示Observable的执行,主要用于取消Observable的执行。Operators(操作符):采用函数式编程风格的
- 【JS】问号点(?.)和双问号(??)的用法
一颗不甘坠落的流星
JavaScript笔记?.??javascript
文章目录问号点(?.)双问号(??)如何使用问号点(?.)参考文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining当访问多层对象属性(比如res.data.list)时,如果属性res.data为空,则会报引用错误为此我们不得不这么处理:letdataList
- 解决连续请求报错情况"NSURLErrorDomain" - code: 18446744073709550594
山有木枝壮
使用Alamofire做请求,如果连续发起多个请求,可以取消上一个请求,但是处理结果的时候,取消的请求如果不处理,会当做错误抛出来。letnsError=dataResponse.result.errorasNSErrorifnsError.code==NSURLErrorCancelled{//如果用RxSwift,可以直接onCompleted结束请求//如果用原生的,可以直接return,不
- 设计一个Call Center
李黎明
算法python设计
约束和假设在CallCenter中会有几种类型的雇员?Operator,supervisor,director我们可以假设Operator总是得到初始化call吗?对如果没有可用的Operators或者Operator不能处理call,这个call会去到supervisor那里吗?对如果没有可用的supervisors,或者supervisor不能处理call,这个call直接去director哪
- Streaming -- Operators -- Windows
qing_feng
窗口是处理无限流的核心。Windows将流分割成有限大小的"桶",我们可以在这些桶上进行计算。本文档主要介绍在Flink中如何执行窗口,以及程序员如何从它提供的功能中获得最大的好处。窗口Flink程序的一般结构如下所示。第一个片段引用键控流,而第二个片段引用非键控流。可以看到,唯一的区别是键控流的keyBy(…)调用和非键控流的window(…)调用。这也将作为页面其余部分的路线图。KeyedWi
- 关于js学习-初体验
踏过山河,踏过海
opengljavascript学习前端OpenGLwebglthree.js
js学习为什么分类到opengl?前言js的基础语法1.Variables(变量):2.DataTypes(数据类型):3.Arrays:4.Objects:5.Operators:6.ControlStructures:7.Functions:8.Events(事件):9.Comments(注释):思考:differenceof'var'and'let'1.Scope(范围):2.Hoistin
- redis学习笔记——不仅仅是存取数据
Everyday都不同
returnSourceexpire/delincr/lpush数据库分区redis
最近项目中用到比较多redis,感觉之前对它一直局限于get/set数据的层面。其实作为一个强大的NoSql数据库产品,如果好好利用它,会带来很多意想不到的效果。(因为我搞java,所以就从jedis的角度来补充一点东西吧。PS:不一定全,只是个人理解,不喜勿喷)
1、关于JedisPool.returnSource(Jedis jeids)
这个方法是从red
- SQL性能优化-持续更新中。。。。。。
atongyeye
oraclesql
1 通过ROWID访问表--索引
你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.
2 共享SQL语句--相同的sql放入缓存
3 选择最有效率的表
- [JAVA语言]JAVA虚拟机对底层硬件的操控还不完善
comsci
JAVA虚拟机
如果我们用汇编语言编写一个直接读写CPU寄存器的代码段,然后利用这个代码段去控制被操作系统屏蔽的硬件资源,这对于JVM虚拟机显然是不合法的,对操作系统来讲,这样也是不合法的,但是如果是一个工程项目的确需要这样做,合同已经签了,我们又不能够这样做,怎么办呢? 那么一个精通汇编语言的那种X客,是否在这个时候就会发生某种至关重要的作用呢?
&n
- lvs- real
男人50
LVS
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
#. /etc/rc.d/init.d/functions
VIP=10.10.6.252
host='/bin/hostname'
case "$1" in
sta
- 生成公钥和私钥
oloz
DSA安全加密
package com.msserver.core.util;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
public class SecurityUtil {
- UIView 中加入的cocos2d,背景透明
374016526
cocos2dglClearColor
要点是首先pixelFormat:kEAGLColorFormatRGBA8,必须有alpha层才能透明。然后view设置为透明glView.opaque = NO;[director setOpenGLView:glView];[self.viewController.view setBackgroundColor:[UIColor clearColor]];[self.viewControll
- mysql常用命令
香水浓
mysql
连接数据库
mysql -u troy -ptroy
备份表
mysqldump -u troy -ptroy mm_database mm_user_tbl > user.sql
恢复表(与恢复数据库命令相同)
mysql -u troy -ptroy mm_database < user.sql
备份数据库
mysqldump -u troy -ptroy
- 我的架构经验系列文章 - 后端架构 - 系统层面
agevs
JavaScriptjquerycsshtml5
系统层面:
高可用性
所谓高可用性也就是通过避免单独故障加上快速故障转移实现一旦某台物理服务器出现故障能实现故障快速恢复。一般来说,可以采用两种方式,如果可以做业务可以做负载均衡则通过负载均衡实现集群,然后针对每一台服务器进行监控,一旦发生故障则从集群中移除;如果业务只能有单点入口那么可以通过实现Standby机加上虚拟IP机制,实现Active机在出现故障之后虚拟IP转移到Standby的快速
- 利用ant进行远程tomcat部署
aijuans
tomcat
在javaEE项目中,需要将工程部署到远程服务器上,如果部署的频率比较高,手动部署的方式就比较麻烦,可以利用Ant工具实现快捷的部署。这篇博文详细介绍了ant配置的步骤(http://www.cnblogs.com/GloriousOnion/archive/2012/12/18/2822817.html),但是在tomcat7以上不适用,需要修改配置,具体如下:
1.配置tomcat的用户角色
- 获取复利总收入
baalwolf
获取
public static void main(String args[]){
int money=200;
int year=1;
double rate=0.1;
&
- eclipse.ini解释
BigBird2012
eclipse
大多数java开发者使用的都是eclipse,今天感兴趣去eclipse官网搜了一下eclipse.ini的配置,供大家参考,我会把关键的部分给大家用中文解释一下。还是推荐有问题不会直接搜谷歌,看官方文档,这样我们会知道问题的真面目是什么,对问题也有一个全面清晰的认识。
Overview
1、Eclipse.ini的作用
Eclipse startup is controlled by th
- AngularJS实现分页功能
bijian1013
JavaScriptAngularJS分页
对于大多数web应用来说显示项目列表是一种很常见的任务。通常情况下,我们的数据会比较多,无法很好地显示在单个页面中。在这种情况下,我们需要把数据以页的方式来展示,同时带有转到上一页和下一页的功能。既然在整个应用中这是一种很常见的需求,那么把这一功能抽象成一个通用的、可复用的分页(Paginator)服务是很有意义的。
&nbs
- [Maven学习笔记三]Maven archetype
bit1129
ArcheType
archetype的英文意思是原型,Maven archetype表示创建Maven模块的模版,比如创建web项目,创建Spring项目等等.
mvn archetype提供了一种命令行交互式创建Maven项目或者模块的方式,
mvn archetype
1.在LearnMaven-ch03目录下,执行命令mvn archetype:gener
- 【Java命令三】jps
bit1129
Java命令
jps很简单,用于显示当前运行的Java进程,也可以连接到远程服务器去查看
[hadoop@hadoop bin]$ jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:
- ZABBIX2.2 2.4 等各版本之间的兼容性
ronin47
zabbix更新很快,从2009年到现在已经更新多个版本,为了使用更多zabbix的新特性,随之而来的便是升级版本,zabbix版本兼容性是必须优先考虑的一点 客户端AGENT兼容
zabbix1.x到zabbix2.x的所有agent都兼容zabbix server2.4:如果你升级zabbix server,客户端是可以不做任何改变,除非你想使用agent的一些新特性。 Zabbix代理(p
- unity 3d还是cocos2dx哪个适合游戏?
brotherlamp
unity自学unity教程unity视频unity资料unity
unity 3d还是cocos2dx哪个适合游戏?
问:unity 3d还是cocos2dx哪个适合游戏?
答:首先目前来看unity视频教程因为是3d引擎,目前对2d支持并不完善,unity 3d 目前做2d普遍两种思路,一种是正交相机,3d画面2d视角,另一种是通过一些插件,动态创建mesh来绘制图形单元目前用的较多的是2d toolkit,ex2d,smooth moves,sm2,
- 百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
bylijinnan
java算法面试百度招聘
import java.util.Arrays;
/**
* 最早是在陈利人老师的微博看到这道题:
* #面试题#An array with n elements which is K most sorted,就是每个element的初始位置和它最终的排序后的位置的距离不超过常数K
* 设计一个排序算法。It should be faster than O(n*lgn)。
- 获取checkbox复选框的值
chiangfai
checkbox
<title>CheckBox</title>
<script type = "text/javascript">
doGetVal: function doGetVal()
{
//var fruitName = document.getElementById("apple").value;//根据
- MySQLdb用户指南
chenchao051
mysqldb
原网页被墙,放这里备用。 MySQLdb User's Guide
Contents
Introduction
Installation
_mysql
MySQL C API translation
MySQL C API function mapping
Some _mysql examples
MySQLdb
- HIVE 窗口及分析函数
daizj
hive窗口函数分析函数
窗口函数应用场景:
(1)用于分区排序
(2)动态Group By
(3)Top N
(4)累计计算
(5)层次查询
一、分析函数
用于等级、百分点、n分片等。
函数 说明
RANK() &nbs
- PHP ZipArchive 实现压缩解压Zip文件
dcj3sjt126com
PHPzip
PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流。这里整理一下常用的示例供参考。
一、解压缩zip文件 01 02 03 04 05 06 07 08 09 10 11
- 精彩英语贺词
dcj3sjt126com
英语
I'm always here
我会一直在这里支持你
&nb
- 基于Java注解的Spring的IoC功能
e200702084
javaspringbeanIOCOffice
- java模拟post请求
geeksun
java
一般API接收客户端(比如网页、APP或其他应用服务)的请求,但在测试时需要模拟来自外界的请求,经探索,使用HttpComponentshttpClient可模拟Post提交请求。 此处用HttpComponents的httpclient来完成使命。
import org.apache.http.HttpEntity ;
import org.apache.http.HttpRespon
- Swift语法之 ---- ?和!区别
hongtoushizi
?swift!
转载自: http://blog.sina.com.cn/s/blog_71715bf80102ux3v.html
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错:
var stringValue : String
//
- centos7安装jdk1.7
jisonami
jdkcentos
安装JDK1.7
步骤1、解压tar包在当前目录
[root@localhost usr]#tar -xzvf jdk-7u75-linux-x64.tar.gz
步骤2:配置环境变量
在etc/profile文件下添加
export JAVA_HOME=/usr/java/jdk1.7.0_75
export CLASSPATH=/usr/java/jdk1.7.0_75/lib
- 数据源架构模式之数据映射器
home198979
PHP架构数据映射器datamapper
前面分别介绍了数据源架构模式之表数据入口、数据源架构模式之行和数据入口数据源架构模式之活动记录,相较于这三种数据源架构模式,数据映射器显得更加“高大上”。
一、概念
数据映射器(Data Mapper):在保持对象和数据库(以及映射器本身)彼此独立的情况下,在二者之间移动数据的一个映射器层。概念永远都是抽象的,简单的说,数据映射器就是一个负责将数据映射到对象的类数据。
&nb
- 在Python中使用MYSQL
pda158
mysqlpython
缘由 近期在折腾一个小东西须要抓取网上的页面。然后进行解析。将结果放到
数据库中。 了解到
Python在这方面有优势,便选用之。 由于我有台
server上面安装有
mysql,自然使用之。在进行数据库的这个操作过程中遇到了不少问题,这里
记录一下,大家共勉。
python中mysql的调用
百度之后能够通过MySQLdb进行数据库操作。
- 单例模式
hxl1988_0311
java单例设计模式单件
package com.sosop.designpattern.singleton;
/*
* 单件模式:保证一个类必须只有一个实例,并提供全局的访问点
*
* 所以单例模式必须有私有的构造器,没有私有构造器根本不用谈单件
*
* 必须考虑到并发情况下创建了多个实例对象
* */
/**
* 虽然有锁,但是只在第一次创建对象的时候加锁,并发时不会存在效率
- 27种迹象显示你应该辞掉程序员的工作
vipshichg
工作
1、你仍然在等待老板在2010年答应的要提拔你的暗示。 2、你的上级近10年没有开发过任何代码。 3、老板假装懂你说的这些技术,但实际上他完全不知道你在说什么。 4、你干完的项目6个月后才部署到现场服务器上。 5、时不时的,老板在检查你刚刚完成的工作时,要求按新想法重新开发。 6、而最终这个软件只有12个用户。 7、时间全浪费在办公室政治中,而不是用在开发好的软件上。 8、部署前5分钟才开始测试。