1.题目描述:数组中最大的子数组之和

 

要求:输入:一个数组和它的大小 ;输出:这个数组中最大子数组的和

 

例如:

 

2.实现代码

本次实验主要是使用Java语言来实现的,使用eclipse来进行单元检测.

主要过程如下:

1.创建一个Java项目,编写程序代码如下:

ackage test1;

import java.util.Scanner;

public class Maxsum {
public int Max(int Array[],int size){
int max=Array[0];
int num;
int sum=max;
for(num=1;num<size;num++)
{
if(sum<0)
sum=Array[num];
else
sum+=Array[num];
if(sum>max)
max=sum;
}
return max;
}
public static void main(String[] args){
Maxsum sum=new Maxsum();
Scanner in=new Scanner(System.in);
int size=in.nextInt();
int []Array=new int[size];
int num;
for(num=0;num<size;num++)
Array[num]=in.nextInt();
System.out.println(sum.Max(Array,size));
in.close();
}
}

 3.单元测试

1.点击test1,选着new->JUnit Test Case

2.创建测试单元文件名,点击finish,进入编辑界面

 

3.编写测试用例代码如下:

package test1;

import static org.junit.Assert.*;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class MaxsumTest {

Maxsum sum=new Maxsum();
@Before
public void setUp() throws Exception {

}

@After
public void tearDown() throws Exception {

}
@Test
public void testMax1() {
int []Array=new int[]{1,-2,4,-1,-5};
assertEquals(4, sum.Max(Array,5));
}
@Test
public void testMax2() {
int []Array=new int[]{1,-2,-4,1,5};
assertEquals(6, sum.Max(Array,5));
}
@Test
public void testMax3() {
int []Array=new int[]{1,2,3,1,1};
assertEquals(8, sum.Max(Array,5));
}
@Test
public void testMax4() {
int []Array=new int[]{-1,-2,-4,-1,-5};
assertEquals(-1, sum.Max(Array,5));
}
@Test
public void testMax5() {
int []Array=new int[]{0,0,0,0,0};
assertEquals(0, sum.Max(Array,5));
}

}

 

4.测试用例为:

 

 5.测试运行结果为:

 

 五组测试用例全部通过了测试。

4.使用jprofiler进行性能分析

Profiler是一个重量级的JVM监控工具,提供对JVM精确监控,其中堆遍历、CPU剖析、线程剖析看成定位当前系统瓶颈的得力工具。可以统计压测过程中JVM的监控数据,定位性能问题。

Live momery (内存视图) 

  




Heap walker (堆遍历)

 

 CPU views(cpu视图)

 

Monitor &locks

 

CPU分析
通常一个方法的执行时间越长则占用CPU的资源则越多,在JProfiler里就是通过方法的执行时间来描述对CPU的使用情况。
通过CPU views视图的Method Statistics子视图可以看到一段时间里涉及类方法的执行时间,这些时间是从开始记录到查看该视图这段时间所发生的执行时间的合计,如此可以准确反映出真实场景下的方法执行情况。

 

 线程分析

线程的运行情况可以直接反应出系统的瓶颈所在,对线程一般有以下三个关注点:

Web容器的线程最大数管理,Web容器允许开启的线程数与系统要求的最大并发数有一定的对应关系,通常是Web容器运行的线程数略大于最大并发数,以Tomcat为例,在{$tomcat}/conf/server.xml文件的Connector选项里配置maxThreads,它的默认值时150;
线程阻塞;
线程死锁。
通过Threads视图可以观察到项目的线程情况

 

如图在Threads 的Thread History视图里可以查看Web容器共打开的线程数以及这些线程的使用情况。