LoadRunner去除事物中的程序的执行时间
大家在性能测试过程中,经常会用到程序处理或组织数据,以达到一定的测试目的,但是程序本身执行会消耗一些时间,这部分消耗的时间是包含在响应时间里面,此时,响应时间=正常响应时间+程序执行消耗时间。那么如何来保证响应最接近真实,LoadRunner提供了一组函数,减去程序消耗时间,达到测试目的。函数(绿色标注)如下: double time_elapsed = 0.00, duration = 0.00, waste = 0.00,trans_time = 0.00,waste_time = 0.00; merc_timer_handle_t timer; timer = lr_start_timer(); //timer开始 if(strlen(lr_eval_string("{P_Bal}")) > ) { for(i=;i < strlen(lr_eval_string("{P_Bal}"));i++) { //lr_error_message("%d",i); lr_save_var(lr_eval_string("{P_Bal}")+i,,,"P_Value"); #define temp = 0; //lr_error_message("%s",lr_eval_string("{P_Value}")); if(atoi(lr_eval_string("{P_Value}")) != ) { if(strcmp(lr_eval_string("{P_Value}"),",") != && strcmp(lr_eval_string("{P_Value}"),".") != ) { break; } } } } time_elapsed = lr_end_timer(timer);//停止timer lr_output_message("%lf",time_elapsed); waste = time_elapsed * ; //毫秒转成秒 if(lr_get_transaction_status("XXX") == || atoi(lr_eval_string("{P_Value}")) <= ) { lr_wasted_time(waste);//响应时间减去纯语句消耗的时间 lr_end_transaction("XXX", LR_FAIL); lr_output_message("XXX失败 %s %s",lr_eval_string("{UserName}"),lr_eval_string("{P_AccountId}")); goto exit; }
以下代码: 由于web_find函数进行的操作无须包括在事务总执行时间中,因些要用计时器来计算其执行时间,然后用lr_wasted_time函数将其从事务的总执行时间中扣除。 Action() { double time_elapsed; merc_timer_handle_t timer; lr_start_transaction("Search"); web_url("baidu_search", "url=http://www.baidu.com/s?wd=LoadRunner", "mode=html", LAST); timer=lr_start_timer();//创建计时器,返回值是计时器标志 web_find("web_find","what=load",LAST); time_elapsed=lr_end_timer(timer);//计时结束,计时结果time_elapsed返回值单位是秒 lr_wasted_time(time_elapsed*);//lr_wasted_time函数定义的参数是毫秒,所以要*1000 lr_error_message("Find Time= %lf,wasted_time=%lf",time_elapsed,lr_get_transaction_wasted_time("Search")); lr_end_transaction("Search",LR_AUTO); return ; } 以上代码,lr_get_transaction_wasted_time使用注意点: 、要在lr_end_transaction之前使用,因为它只能对当前处于“运行状态”的事务返回>0的结果。 、调用lr_get_transaction_wasted_time之前,要使用lr_wasted_time移除损耗时间。
关于时间的几个函数:
lr_get_transaction_duration得到transaction运行到当前位置的duration,包含事务的响应时间和wasted time,单位是s; 着重理解下wasted time:
wasted time包括事务中函数自身执行所消耗的时间,这个时间是loadrunner自动会计的,计在lr_get_transaction_wasted_time里面,还有比如C语言等外部接口进行处理的时间这个loadrunner不会自动计,但是我们可以通过lr_start_timer(单位是s)、lr_end_timer(单位是s)、lr_wasted_time(这个函数的形参中wasted time的单位是毫秒,所以通过timer计的时间需要乘上1000)等函数手动计入lr_get_transaction_wasted_time里面 下面来验证下:
Action()
{
int i, baseIter = ;
char dude[];
double wasteTime;
merc_timer_handle_t timer; lr_start_transaction("baidu"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=www.baidu.com"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=passport.baidu.com"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=suggestion.baidu.com"); web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
EXTRARES,
"Url=http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png", ENDITEM,
"Url=http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js", ENDITEM,
"Url=/favicon.ico", "Referer=", ENDITEM,
"Url=http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656", ENDITEM,
"Url=http://suggestion.baidu.com/su?
wd=&zxmode=&json=&p=&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=", ENDITEM, LAST); //在脚本中间位置,记录此时事务自身函数消耗的时间,这个是loadrunner自动计的
lr_output_message("User created waste time to this point calculated by loadrunner = %lf", lr_get_transaction_wasted_time("baidu")); //使用一个测试语句手动记录消耗的时间
timer = lr_start_timer(); for (i=; i< ( * baseIter); ++i)
sprintf(dude, "This is the way we waste time in a script = %d", i); wasteTime = lr_end_timer(timer); lr_output_message("User created waste time calculated by timer = %lf", wasteTime); wasteTime *= ; //通过lr_wasted_time函数将wasteTime标记为wasted time
lr_wasted_time(wasteTime); //通过lr_get_transaction_wasted_time函数会汇总手工记录的消耗时间和loadrunner自动记录的消耗时间
lr_output_message("Total User created waste time = %lf", lr_get_transaction_wasted_time("baidu")); lr_output_message("Transaction duration = %lf", lr_get_transaction_duration("baidu")); lr_end_transaction("baidu", LR_AUTO); return ;
} 运行日志如下:
Virtual User Script started at : -- ::
Starting action vuser_init.
Web Turbo Replay of LoadRunner 11.0. for WINXP; build (Aug ::) [MsgId: MMSG-]
Run Mode: HTML [MsgId: MMSG-]
Run-Time Settings file: "F:\LR\baidu_open\\default.cfg" [MsgId: MMSG-]
Ending action vuser_init.
Running Vuser...
Starting iteration .
Starting action Action.
Action.c(): Notify: Transaction "baidu" started.
Action.c(): web_add_cookie was successful [MsgId: MMSG-]
Action.c(): web_add_cookie was successful [MsgId: MMSG-]
Action.c(): web_add_cookie was successful [MsgId: MMSG-]
Action.c(): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png" (specified by argument number ) [MsgId: MMSG-]
Action.c(): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js" (specified by argument number )
[MsgId: MMSG-]
Action.c(): Downloading resource "http://www.baidu.com/favicon.ico" (specified by argument number ) [MsgId: MMSG-]
Action.c(): Downloading resource "http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656" (specified by argument number ) [MsgId: MMSG-]
Action.c(): Downloading resource "http://suggestion.baidu.com/su?wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658" (specified by argument number ) [MsgId: MMSG-]
Action.c(): Found resource "http://www.baidu.com/img/baidu_jgylogo3.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-]
Action.c(): Found resource "http://www.baidu.com/img/bdlogo.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-]
Action.c(): Found resource "http://www.baidu.com/cache/global/img/gs-2.0.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-]
Action.c(): Found resource "http://s1.bdstatic.com/r/www/cache/static/jquery/jquery-1.10.2.min_f2fb5194.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-]
Action.c(): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/all_async_f712ea4c.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-]
Action.c(): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/imsg_45172630.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-]
Action.c(): web_url("www.baidu.com") was successful, body bytes, header bytes, chunking overhead bytes [MsgId: MMSG-]
Action.c(): User created waste time to this point calculated by loadrunner = 0.758138
Action.c(): User created waste time calculated by timer = 7.646098
Action.c(): Total User created waste time = 8.404138
Action.c(): Transaction duration = 8.745259
Action.c(): Notify: Transaction "baidu" ended with "Pass" status (Duration: 8.7524 Wasted Time: 8.4041).
Ending action Action.
Ending iteration .
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
运行的结果也证明了我之前的理解 注:在最开始的时候,使用oracle两层协议录制脚本,一直不能演示出自身函数消耗的时间,lr_get_transaction_wasted_time的值都为0,后来使用http协议可以演示出来
Action()
{
int i=;
int j=;
int l; double time_elapsed, duration, waste;
merc_timer_handle_t timer;
for (l=;l<=;l++) {
lr_start_transaction("测试");
timer = lr_start_timer();
//lr_think_time(4);
time_elapsed = lr_end_timer(timer); // Convert to millisecond.s
waste = time_elapsed * ; if(waste>) {
lr_end_transaction("测试", LR_FAIL);
lr_output_message("时间= %f",waste); i=i+;
}
else {
lr_end_transaction("测试", LR_PASS);
lr_output_message("时间= %f",waste); j=j+;
}; }; lr_output_message("成功次数为= %d",j);
lr_output_message("失败次数为= %d",i); return ;
}
lr_get_transaction_wasted_time函数
http://luochunfeng163.blog.163.com/blog/static/16700924920128205233959/ lr_get_transaction_wasted_time函数用于返回指定事物当前的损耗时间(wasted time)。 损耗时间通常是指脚本消耗在为了支持测试分析而做的操作时间。这些操作不会被实际用户所执行。 例如一些循环赋值操作或插入检查点操作。消耗的时间有lr_wasted_time函数在 lr_get_transaction_wasted_time函数之前移除了,移除后才得到对应的结果。 函数语法结果 double lr_get_transaction_wasted_time (const char * transaction); 参数 transaction 为事物名称 使用lr_get_transaction_wansted_time 函数必须注意,一它只能对当前运行状态的事物才能返回大于等于0的结果,否则返回小于0的结果。二是他使用之前应调用lr_wansted_time 函数移除过损耗时间 wasted time,否则lr_get_transaction_wansted_time将返回0。 Action()
{
int i, baseIter = 1000; char dude[1000]; double wasteTime, actualElapsedTime; merc_timer_handle_t MasterT, timer; // Examine the total elapsed time of the action MasterT = lr_start_timer(); //Start transaction lr_start_transaction("Demo"); // Create some elapsed time for the transaction for (i=0; i< (10 * baseIter); ++i)
sprintf(dude, "This is the way we create elapsed time artificially = %d", i); // Add some think time lr_think_time(0.5); // Create some wasted time and record it with timer timer = lr_start_timer(); for (i=0; i< (5 * baseIter); ++i) sprintf(dude, "This is the way we waste time in a script = %d", i); wasteTime = lr_end_timer(timer); lr_output_message("User created waste time = %lf", wasteTime); lr_output_message("Before lr_waste_time: Duration = %lf - Waste = %lf", lr_get_transaction_duration("Demo"), lr_get_transaction_wasted_time("Demo")); /* Convert Timer in seconds to wasted time in milliseconds and add to internally generated waste time */ wasteTime *= 1000; lr_wasted_time(wasteTime); lr_output_message("After lr_waste_time: Duration = %lf - Waste = %lf", lr_get_transaction_duration("Demo"), lr_get_transaction_wasted_time("Demo")); lr_output_message("Think time = %lf", lr_get_transaction_think_time("Demo")); lr_end_transaction("Demo", LR_AUTO); actualElapsedTime = lr_end_timer(MasterT); lr_output_message("Total Elapsed time for Action = %lf", actualElapsedTime); return 0;
} 结果:
Starting iteration 1.
Starting action Action.
Action.c(17): Notify: Transaction "Demo" started.
Action.c(45): User created waste time = 15.768059
Action.c(47): Before lr_waste_time: Duration = 65.147478 - Waste = 0.000000
Action.c(61): After lr_waste_time: Duration = 65.153110 - Waste = 15.768000
Action.c(67): Think time = 0.000000
Action.c(71): Notify: Transaction "Demo" ended with "Pass" status (Duration: 65.1589 Wasted Time: 15.7680).
Action.c(75): Total Elapsed time for Action = 65.170579
Ending action Action.
Ending iteration 1.
初识loadrunner wasted time 关于时间的几个函数:
lr_get_transaction_duration得到transaction运行到当前位置的duration,包含事务的响应时间和wasted time,单位是s; 着重理解下wasted time:
wasted time包括事务中函数自身执行所消耗的时间,这个时间是loadrunner自动会计的,计在lr_get_transaction_wasted_time里面,还有比如C语言等外部接口进行处理的时间这个loadrunner不会自动计,但是我们可以通过lr_start_timer(单位是s)、lr_end_timer(单位是s)、lr_wasted_time(这个函数的形参中wasted time的单位是毫秒,所以通过timer计的时间需要乘上1000)等函数手动计入lr_get_transaction_wasted_time里面 下面来验证下:
Action()
{
int i, baseIter = 200;
char dude[200];
double wasteTime;
merc_timer_handle_t timer; lr_start_transaction("baidu"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=www.baidu.com"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=passport.baidu.com"); web_add_cookie("BAIDUID=63CCB143FE1734437DBED1D457D18E3E:FG=1; DOMAIN=suggestion.baidu.com"); web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
EXTRARES,
"Url=http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png", ENDITEM,
"Url=http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js", ENDITEM,
"Url=/favicon.ico", "Referer=", ENDITEM,
"Url=http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656", ENDITEM,
"Url=http://suggestion.baidu.com/su?
wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658", ENDITEM, LAST); //在脚本中间位置,记录此时事务自身函数消耗的时间,这个是loadrunner自动计的
lr_output_message("User created waste time to this point calculated by loadrunner = %lf", lr_get_transaction_wasted_time("baidu")); //使用一个测试语句手动记录消耗的时间
timer = lr_start_timer(); for (i=0; i< (5 * baseIter); ++i)
sprintf(dude, "This is the way we waste time in a script = %d", i); wasteTime = lr_end_timer(timer); lr_output_message("User created waste time calculated by timer = %lf", wasteTime); wasteTime *= 1000; //通过lr_wasted_time函数将wasteTime标记为wasted time
lr_wasted_time(wasteTime); //通过lr_get_transaction_wasted_time函数会汇总手工记录的消耗时间和loadrunner自动记录的消耗时间
lr_output_message("Total User created waste time = %lf", lr_get_transaction_wasted_time("baidu")); lr_output_message("Transaction duration = %lf", lr_get_transaction_duration("baidu")); lr_end_transaction("baidu", LR_AUTO); return 0;
} 运行日志如下:
Virtual User Script started at : 2014-05-15 09:58:45
Starting action vuser_init.
Web Turbo Replay of LoadRunner 11.0.0 for WINXP; build 8859 (Aug 18 2010 20:14:31) [MsgId: MMSG-27143]
Run Mode: HTML [MsgId: MMSG-26000]
Run-Time Settings file: "F:\LR\baidu_open\\default.cfg" [MsgId: MMSG-27141]
Ending action vuser_init.
Running Vuser...
Starting iteration 1.
Starting action Action.
Action.c(12): Notify: Transaction "baidu" started.
Action.c(14): web_add_cookie was successful [MsgId: MMSG-26392]
Action.c(16): web_add_cookie was successful [MsgId: MMSG-26392]
Action.c(18): web_add_cookie was successful [MsgId: MMSG-26392]
Action.c(20): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/global/img/icons_37d13939.png" (specified by argument number 9) [MsgId: MMSG-26577]
Action.c(20): Downloading resource "http://s1.bdstatic.com/r/www/cache/static/sug/js/bdsug_31b8d653.js" (specified by argument number 11)
[MsgId: MMSG-26577]
Action.c(20): Downloading resource "http://www.baidu.com/favicon.ico" (specified by argument number 13) [MsgId: MMSG-26577]
Action.c(20): Downloading resource "http://passport.baidu.com/passApi/js/uni_login_wrapper.js?cdnversion=1400118095796&_=1400118095656" (specified by argument number 16) [MsgId: MMSG-26577]
Action.c(20): Downloading resource "http://suggestion.baidu.com/su?wd=&zxmode=1&json=1&p=3&sid=4948_6429_1450_5223_6505_4760_6017_6462_6428_6456_6454&cb=jQuery110208749060739643981_1400118095657&_=1400118095658" (specified by argument number 18) [MsgId: MMSG-26577]
Action.c(20): Found resource "http://www.baidu.com/img/baidu_jgylogo3.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659]
Action.c(20): Found resource "http://www.baidu.com/img/bdlogo.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659]
Action.c(20): Found resource "http://www.baidu.com/cache/global/img/gs-2.0.gif" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659]
Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/jquery/jquery-1.10.2.min_f2fb5194.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659]
Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/all_async_f712ea4c.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659]
Action.c(20): Found resource "http://s1.bdstatic.com/r/www/cache/static/global/js/imsg_45172630.js" in HTML "http://www.baidu.com/" [MsgId: MMSG-26659]
Action.c(20): web_url("www.baidu.com") was successful, 106231 body bytes, 4084 header bytes, 59 chunking overhead bytes [MsgId: MMSG-26385]
Action.c(35): User created waste time to this point calculated by loadrunner = 0.758138
Action.c(45): User created waste time calculated by timer = 7.646098
Action.c(52): Total User created waste time = 8.404138
Action.c(53): Transaction duration = 8.745259
Action.c(55): Notify: Transaction "baidu" ended with "Pass" status (Duration: 8.7524 Wasted Time: 8.4041).
Ending action Action.
Ending iteration 1.
Ending Vuser...
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.
运行的结果也证明了我之前的理解 注:在最开始的时候,使用oracle两层协议录制脚本,一直不能演示出自身函数消耗的时间,lr_get_transaction_wasted_time的值都为0,后来使用http协议可以演示出来
LoadRunner去除事物中的程序的执行时间的更多相关文章
- 编写Java程序,读取文本文档的内容,去除文本中包含的“广告”字样,把更改后的内容保存到一个新的文本文档中
查看本章节 查看作业目录 需求说明: 读取文本文档的内容,去除文本中包含的"广告"字样,把更改后的内容保存到一个新的文本文档中 实现思路: 在main() 方法中,使用 new F ...
- 去除WPF中3D图形的锯齿
原文:去除WPF中3D图形的锯齿 理论上讲PC在计算3D图形的时候是无法避免不出现锯齿的,因为3D图形都是又若干个三角形组成,如果3D图形想平滑就必须建立多个三角形,你可以想象一下正5边形和正100边 ...
- Python关于去除字符串中空格的方法
Python关于去除字符串中空格的方法 在编写程序时我们经常会遇到需要将字符串中的空格去掉的情况,通常我们可以使用下面几种解决方法: 1.strip()方法:该方法只能把字符串头和尾的空格去掉,但是不 ...
- 【转】C#中WinForm程序退出方法技巧总结
C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...
- [转]java去除List中重复的元素
java去除List中重复的元素 如果用Set ,倘若list里边的元素不是基本数据类型而是对象, 那么请覆写Object的boolean equals(Object obj) 和int ...
- mysql 时间格式与日期格式转换,去除datetime中的具体时间
DATE_FORMAT(`addtime`,'%Y-%m-%d') 时间格式转成字符串 time_format('1924-01-02', '%Y-%m-%d') 字符串转成时间格式 CONVERT ...
- 去除字符串中的html标记及标记中的内容
去除字符串中的html标记及标记中的内容 --1.创建函数 create function [dbo].[clearhtml] (@maco varchar(8000)) returns varcha ...
- LoadRunner测试场景中添加负载生成器
如何在LoadRunner测试场景中添加负载生成器 本文对如何在LoadRunner的测试场景中添加负载生成器,如何使用负载生成器的方法,总结形成操作指导手册,以指导测试人员指导开展相关工作. 1.什 ...
- C#中WinForm程序退出方法技巧总结(转)
本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit ...
随机推荐
- BNU-2017.7.4排位赛2总结
链接:https://www.bnuoj.com/v3/contest_show.php?cid=9147#info A题 sort之后交换首尾两个数. B题 for一遍,如果每个数都在对应位置了,输 ...
- angular 使用rxjs 监听同级兄弟组件数据变化
angular 的官网给出了父子组件之间数据交互的方法,如ViewChild.EventEmitter 但是如果要在同级组件之间进行数据同步,似乎并没有给出太多的信息. 有时候我们想,在一个组件中修改 ...
- C++ ------ 互斥锁、原子操作的性能测试
atomic原子操作:是在新标准C++11,引入了原子操作的概念,并通过这个新的头文件提供了多种原子操作数据类型,例如,atomic_bool,atomic_int等等 测试程序 #include & ...
- Nexus(Maven仓库私服)安装
一.Nexus介绍 Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架设一个Maven ...
- OpenCV---圆检测
推文:Opencv2.4.9源码分析——HoughCircles 霍夫圆检测 加载一幅图像并对其模糊化以降噪 对模糊化后的图像执行霍夫圆变换 . 在窗体中显示检测到的圆. def detect_cir ...
- JS零碎小知识
filter()方法对数组进行过滤,生成新数组 var aqiNewData = aqiData.filter(function(data){ return data[1]>60; }); // ...
- spring boot 2.0.3+spring cloud (Finchley)5、路由网关Spring Cloud Zuul
Zuul作为微服务系统的网关组件,用于构建边界服务,致力于动态路由.过滤.监控.弹性伸缩和安全. 为什么需要Zuul Zuul.Ribbon以及Eureka结合可以实现智能路由和负载均衡的功能:网关将 ...
- CF839 D 容斥
求$gcd>1$的所有$gcd(a_i,a_{i+1}…a_{n})*(n-i+1)$的和 首先先标记所有出现的数.从高到低枚举一个数k,记录它的倍数出现次数cnt,那么当前所有组合的答案就是$ ...
- Jdbc练习
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- js、php本周第一天和本周最后一天
PHP:本周一 echo date('Y-m-d',(time()-((date('w')==0?7:date('w'))-1)*24*3600)); //w为星期几的数字形式,这里0为周日 本周日 ...