科帮网-Java论坛、Java社区、JavaWeb毕业设计

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > Struts2与Spring3 MVC性能比较 (MVC性能测试)
总共48086条微博

动态微博

查看: 2006|回复: 0

Struts2与Spring3 MVC性能比较 (MVC性能测试)

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-03-16 18:02:11 |只看该作者 |倒序浏览
    你想建设一个能承受500万PV/每天的网站吗?
    + C. d0 |+ }+ _* |' U$ K) u500万PV是什么概念?我的服务器每秒要处理多少个请求? $ Q4 i7 \: Q- h
    ( R( O: a+ ^+ h' P
    PV是什么?
    : b9 ^4 ~; O" v5 q8 b: u3 Z' qPV是page view的简写。PV是指页面刷新的次数,每一次页面访问,就算做一次pv流量。 3 \3 K  T  u9 W$ c$ E% k
    4 h; g4 L. p, s8 J8 x& H
    计算模型:
    / Y- p" S& c9 Z- P每台服务器每秒处理请求的数量=((80%*总PV量)/(24小时*60分*60秒*40%))/服务器数量
    3 Y3 J/ X& L% g2 d) B其中关键的参数是80%、40%。表示一天中有80%的请求发生在40%的时间内。24小时的40%是9.6小时,有80%的请求发生一天的9.6个小时当中(很适合互联网的应用)。
    / {2 ?3 }8 [0 _7 b4 a! F
    $ _7 F- x* m/ r0 v. i/ D((80%*500万)/(24小时*60分*60秒*40%))/1 = 1157个请求/秒
    8 M* f' t0 B: y2 n; C((80%*100万)/(24小时*60分*60秒*40%))/1 = 231个请求/秒 " k7 p# ~+ T+ k0 G1 v" B$ @8 O
    : c% n3 j( o% t  @3 n& D& N

      |$ `* G$ M5 V# t6 v2 O& c结论: 1 i9 ?3 G" q0 D: d" K6 d! ^+ Z
    现在我们在做压力测试时,就有了标准,如果你的服务器一秒能处理1157个请求,就可以承受500万PV/每天。这里不关心是请求的是静态的html,还是动态的jsp。
    + [2 }/ `& c4 v; b1 r- Q* y6 r9 @7 U* }如果你的服务器一秒能处理231个请求,就可以承受100万PV/每天.
    & Z. ]% c1 k* ]8 y" l4 _2 c2 T2 K/ E
    说明:这里说明每秒N个请求,更像是TPS。而不是请求一个html页面而附带请求的css,js,图片。因为我关心的是应用程序处理业务的能力。 : n. Q! f1 O; |! C! a  U# a
    $ O: P$ [/ Y  l3 w9 M
    & f2 N, M1 \1 g- V
    --------------------------------------------------------------------------------------- ' u+ i, Y# p4 H
    基本概念:
    ' K/ V9 s: w, J8 M3 Y  [Throughput(吞吐量):按照常规理解网络吞吐量表示在单位时间内通过网卡数据量之和,其中即包括本机网卡发送出去的数据量也包括本机网卡接收到的数据量。
    + @) ], M6 U" |并发用户数:是同时执行操作的用户
    ) a+ [$ U9 f( F! c0 v: C- D响应时间:对请求作出响应所需要的时间 9 y& B! _5 p' W. t# Q+ ^$ w9 |
    --------------------------------------------------------------------------------------- $ ]3 P' k; T. x8 M& \
    JMeter测试参数说明:
    & |" _* Z3 E+ \/ e+ D" Q! @8 U! H& o- N7 R% Y  U& E7 h
    Label:每一个测试单元的名字。
    3 P5 r. P5 [# p1 h
    5 L8 v9 L# m- z% @5 k#Samples:表示一个测试单元一共发出了多少个请求。
    / N9 u- I- G/ I9 \4 s+ R, N" P& v' R. s
    Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间。,不重要。 : Y" q1 s1 B$ ^

    0 c& I! h* v0 kMedian:中位数,也就是 50% 用户的响应时间,如果把响应时间从小到大顺序排序,那么50%的请求的响应时间在这个范围之内。重要。 + {+ r2 ]1 Q  X  Q3 i/ f9 T
    2 p3 N% |! M6 O9 R
    90% Line:90% 用户的响应时间,如果把响应时间从小到大顺序排序,那么90%的请求的响应时间在这个范围之内。重要。
    9 U  I* L, \7 Q- I- D: H! F
    + D, N/ G. q5 }2 vMin:最小响应时间,不重要。 " t, K5 W2 J% b# I( z, h
    1 o6 ~; M9 y' K6 U% T
    Max:最大响应时间,出现几率只不过是千分之一甚至万分之一,不重要。
      H( `! V( }  z7 s+ ?; k, z
    7 ]5 l, ^+ d0 A* ~9 l) aError%:本次测试中出现错误的请求的数量 5 t# r. H# ]7 q# ~8 c

    ' S; W# s% e& s! p  WThroughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数 + |% ]# w& R( Z) B  f

    8 O3 u! S: ]1 e! G  c" yKB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
    3 e0 J  T: {! j4 e' i: ]) D---------------------------------------------------------------------------------------
    " Y" k2 E- W- g9 `, V0 l3 I' floadrunner测试参数说明: % n. e4 a0 E" [- v, y% Z
    1 y4 f7 G, ]# T/ W7 c2 I* m
    响应时间: 取90%值,如果把响应时间从小到大顺序排序,那么90%的请求的响应时间在这个范围之内。重要。
    " U7 P5 H' o% k* o+ K2 v. [$ x5 {1 Y! V: W7 M  u9 j0 C
    每秒点击数 :hits per Second,每秒钟向服务器提交请求的数量。
    . ^, W9 K. u% w1 C0 w/ U. n6 k  T4 v9 }" v: ^
    TPS: Transaction per Second ,每秒事务数,一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程 + z5 a/ [% m- o7 Q( t0 l

    ! z0 d3 I1 H8 j0 s2 ?% U' m8 oThroughput(吞吐量): Loadrunner记录的Throughput是接收到服务器返回的所有字节数之和,与本地发出的字节数无关。 7 l" N; C7 z* o" E+ R

    3 i* ^. h, |8 ?6 J5 E7 mThroughput/Sec: 每秒的吞吐量。
    2 d" z& M8 W& M
    & C. T$ Y$ y6 A
    ) _5 a+ q9 `8 Q- w对于BS架构的一般分析 响应时间、点击率、吞吐量、TPS(每秒事务数)。
    + b0 R& j' ~: t, Y% u2 z对于CS架构的一般分析 TPS(每秒事务数)
    , ^' ^: p2 y/ x" i
    7 `" h+ K1 A) ?3 B--------------------------------------------------------------------------------------- ' D, [, R; b/ E, U5 _1 L# z, a5 i

    6 \! G1 g  t7 {3 ]. C- m( ?. rApache ab测试参数说明:
    ( X; N; \. J3 _6 O0 D( \+ Y5 ]- {
    , V3 y$ v* H9 r) J/ I+ @) FRPS: Request per Second,每秒处理的请求数   }* u  h% D  k0 W' d& D" K7 B6 ]! u; h

    " Q4 k9 A/ Z& g4 ^8 [) z详见: / T6 h0 W' j0 m
    http://blog.chinaunix.net/u3/108043/showart_2260477.html
    2 P! b& O- n& z---------------------------------------------------------------------------------------
    3 t; [' T+ B' N0 Q( T
      s% u7 q2 t$ O( |5 j: `; \
    : j+ u0 ~! r& `6 Z) R! j$ ?测试配置如下图: 其实jmeter还是很弱的,我打开"集合点(synchronizing Timer)","察看结果树","用表格查看结果"中的任何一个都会导致性能下降和小部分请求的响应出错(可能是线程数太多了),所以禁用了。只启用了cookie管理器。
    7 e/ B( m3 I8 e% y! K3 z5 y3 D 9 u& d$ C0 w; ?0 i1 l

    . q( O+ W" ?, ^& _' }" M% Y---------------------------------------------------------------------------------------
    8 {. y5 Q1 p4 [' T0 hTomcat6.0 配置文件的说明 ,做测试之前是要整清楚的。 2 q- H6 x, C% d
    默认的Server.xml中如下
    + T* C- k6 B; E9 V; c<connector port="8080" maxhttpheadersize="8192" $ c' A" `  n; J6 V
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75" " w% Q. Z. P: K# g3 p
    enableLookups="false" redirectPort="8443" acceptCount="100" : ^6 }2 H8 Q" }; x
    connectionTimeout="20000" disableUploadTimeout="true" />
    8 s# I. ?2 w. g4 T1 T! I' c3 A( Q( ?; }9 G# Z+ Z/ @& R0 E! o& n
    7 k( ]- Q& G! V1 I2 a$ q0 a( K
    enableLookups ) E( w6 m) d8 d# I
    是否允许DNS查询,当web应用程序要通过域名服务器查找机器名转换为IP地址时。会使用DNS查询,需要占用网络,延长较长 8 I# U; X- M/ p5 r4 s  c4 x$ V
    maxThreads
    0 f. }2 |+ l6 n7 b7 S# ATomcat可创建的最大的线程数,每一个请求须要一个线程来处理,原来的150太小了,我们测试时并发会超过他的。 2 M0 C' O: g$ w! {  q% v
    acceptCount 3 m& O3 E9 o; u2 o. C  [' y7 t
    指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,就是被排队的请求数,超过这个数的请求将拒绝连接。 2 \. R8 o5 [# _7 a, ^& ~
    connnectionTimeout # m  N3 ?/ M) @( w& f3 Z
    网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为20000毫秒。
    - W9 g: J- [( ?# F  M  [! hminSpareThreads ' h7 M0 A+ U$ d
    Tomcat初始化时创建的线程数
    1 ^0 ?/ ]5 O# t2 ]9 O8 Z2 ?& \% ?maxSpareThreads ( M) {% n' Y  _2 Q  Z2 e6 [! [2 `
    一旦创建的线程中空闲线程超过这个值,Tomcat就会关闭不再需要的socket线程。 / {4 t4 Y8 u; W- @6 d
    6 S; M* [0 y/ b0 t% H
    注意:maxThreads 设置为500,也就是最多有500个线程,为下一步的压力测试做好准备。 . h) m, }1 I$ {/ w- L1 Q
    ( P4 R! h" ?. @* m
    --------------------------------------------------------------------------------------- 3 t3 a- d: t/ Q+ F: {: O

    . T9 U- y# Z' o, \! G测试环境说明:
    ( V% |4 x7 u5 @7 l服务器: 4G内存,至强3.0 (4核超线程)CPU,windows 2003
    - F5 J4 }2 F# D  {测试机:笔记本 2G内存,p8600 CPU,windows XP ' m1 l6 H: I1 ]+ G3 q
    网络:100Mb局域网
    7 O' a+ ~# Z4 P; n$ ^7 D7 q" s测试软件:
    5 K, i' S( F+ U# G* R' q! PJmeter 2.3.4    分配了512M内存 + x  f) I8 m* H( o! O$ Q
    tomcat 6  默认内存大小
    - @, A+ e3 c2 \, d" `! h---------------------------------------------------------------------------------------
    * q, S9 t4 ^. t; `' G. t1 S测试时服务器CPU使用率 10% 1 a8 @" m7 \" J/ F0 b' F
    测试时测试机CPU使用率 100%(测试机不行啊) " y9 \6 c  O$ I9 `
    每次测试CPU都这样,就统一写这里了。 1 |# @' @( o4 c: I. B
    6 E5 e/ o: p! Y7 y  @
    测试1:2213个请求/秒
    5 ^0 p% s% U0 |9 F100并发,循环100次,共10000个请求,请求一个大小3.34KB的jsp页面。
    3 l" @* P/ b  f% M- s# h
    " O- v: G" Q, \7 R: ]$ ^$ w8 k. U/ v, B( G- a% _

    ) I: o  y0 Y5 A) X' V测试2:1889个请求/秒 / m% H, t$ v/ Z8 o3 M2 {; G- K  r4 ~2 m
    100并发,循环100次,共10000个请求,请求一个servlet总控制器,验证权限后,new一个Action,再转发到一个大小3.34KB的jsp页面。
      F! o8 Q) y& F" {9 B
    * `) i" Q( O8 `4 I" a/ M
    ' k8 V1 U: R( T$ ^% G6 U" Y7 A- E1 S4 Y; V3 y" R
    测试3:2607个请求/秒 & \. ]. w- E+ b$ E
    100并发,循环100次,共10000个请求,请求一个3.2KB的html页面。
    / N3 g3 v- ]& N & J: H# I. Q+ d' a& x: @7 q' W
    $ {& q/ }: z& q" E! ~$ m. X
    2 B( g6 n" H9 p3 W
    测试4: 833个请求/秒 $ c- v+ L- @3 J" z. h
    100并发,循环100次,共10000个请求,请求一个13.4KB的html页面。与上面比是只是文件大了一些,性能就降了不少!! 3 ~) N. w$ C: }" p+ ?
    7 z" ?" v( R7 H/ E8 X  u. m

    ( t1 `9 p) M1 h: r; J2 u' w8 N5 c/ s8 d6 p. j9 W
    测试5: spring   2012个请求/秒
    6 p. K4 ?( B  D! m# G100并发,循环100次,共10000个请求,请求一个spring3 MVC的action,再转发到一个0.8K的JSP,其内容是简单的html " R7 `4 |% O; D3 o9 T( H8 u
    6 o. X2 ^! H1 ^" F9 Y, p' m8 H
    & [) w+ v. I; s* c

    ) {2 x8 N: i9 q& n测试6: spring   1800-1924个请求/秒 " m* X0 r. R& h0 C) R" A
    100并发,循环100次,共10000个请求,请求一个spring3 MVC的action,两个参数类型转换为int、Date,再new 一个List,再转发到一个1.3K的JSP,用JSTL标签显示List中的内容。
    . g" t  {# `+ J/ Z0 M2 ]
    3 H4 ?! ]+ G- aJSTL标签内容是如下,看来JSTL标签性能还是不错的。
    5 A9 @- W  s  \4 K 2 i( A) v+ _% @" K/ O

    8 O9 V# x4 k* ?# }9 S$ o- s5 j, s) g3 n无记录!
    5 `. J2 Q4 y2 O- I  U. G - Q+ u2 n, T3 F5 C1 e4 x6 Z

    , s' Q5 U+ w: }" T  ?- L $ G) O6 }, \. E, |- y" y7 Z

    $ g* |7 V6 L" L/ o% D, ?' I# X+ U从 1 开始的迭代计数
    , k. l+ `6 G$ Z& K! g- _, M) n  g. o从 0 开始的迭代计数 - F3 u6 z' B" D; w- m' G
    产品名称 ( p& u5 w, ?7 X1 I

    ; i2 ]4 l: f. S/ C7 ?3 N* g
    " j4 v; q3 c' S' H 9 C5 O1 J; D& b' ], ], m3 J
    ${s.count}  ( C0 B  M; b# r% W1 ?) F5 @
    ${s.index}  $ D" K2 t5 v3 ~" d/ C
    ${item}  
    8 L0 \. ]% \  Z) N! c5 B " p7 Q$ z( L4 ^2 P

      J3 T2 w1 V, h4 p
    # `2 E+ D" d" P2 _6 ?/ \& A' F, W
    + _* x0 h; c, X/ b! @. k' x" `9 Y; b" m* ^
    测试7: 图片   1997个请求/秒
    - L; q) I5 s- b5 R; j6 y0 \4 `0 d100并发,循环100次,共10000个请求. 因为我使用了spring3 MVC,拦截/,所以图片不能访问,所以添加了:
    / n4 P0 a8 T) T( r+ w        l8 z1 h0 c0 ^/ L
        default      8 K& a4 g4 D7 e) @6 X$ }$ v. l
        *.jpg      ; H2 w( [- [/ v; L# F4 |

    - j3 d3 o1 @0 H4 Z+ g走默认的servlet,来访问2.5K的图片 7 k1 K5 O4 e3 f: o
    ( I4 G0 I) r' d( u  p

      J# T" _7 k, r4 x
    ; w/ ~2 @  r+ w$ m测试8: 图片   1967个请求/秒
    + D- H2 t3 Z& c  l& Q: X* r100并发,循环100次,共10000个请求,因为我使用了spring3 MVC,拦截/,所以图片不能访问,所以添加了:
    , p# f! |6 g/ S+ ?
    0 c3 V# J' T- ^( l来访问2.5K的图片,会走spring的可匹配的一个拦截器。 4 {  `2 O# w) S* K% v
    . l# l/ j: c! F

    # o& X# V% n7 a测试9:struts2的测试   {8 a7 y; g1 ]3 b
    100并发,循环1次,没有循环100次,因为strtus2在这次测试中响应太慢了,我等不起了,所以单个url的测试样本从10000降到了100.一共11个url,共1100个样本。 " c- r3 P7 H( E  O2 K
    "spring" 使用的就是前面“测试5”的URL,放在这里是为了与strtus2对比的。 : x2 o% a! k! r9 ?0 _
    "html"   使用的就是前面“测试3”的URL,放在这里是为了与strtus2对比的。
      t* A! H! F4 o: N6 L"struts2-1" 使用的是官方自带的示例项目,名称是struts2-blank-2.1.8.1.war - C: A9 b6 U+ k5 c% C" }% d* m
    "struts2-2" 使用的是官方自带的示例项目,名称是struts2-showcase-2.1.8.1.war,我在其中随便选了一个action来做测试   Y3 }6 K+ u' m/ V$ p  g
    "struts2-3" 同上 ) I$ J" v/ M6 u6 x
    "struts2-4" 同上 9 K# T, q8 x1 w. w
    "struts2-5" 同上 , n* ^% p+ x) O2 a
    "struts2-6" 同上 , g; z& `  R  g2 l' ]1 G
    "struts2-7" 同上
    - D0 i0 s, B  |% W"struts2-8" 同上
    5 a* M# p8 l; N8 f& T"struts2-9" 同上 4 m# x0 p! E0 d, k5 H8 i
    太忙了,没有时间对Struts2做优化,使用的都是官方带的示例,Struts2的测试结果不理想,放在这里做一个参考。“struts2-1”是struts2中测试成绩最好的,但也不理想。 ' A1 ?% o* h9 B# _

    5 A2 R% h  U9 O" m* J; T
    4 u9 C( c9 ~2 i5 }0 }( C$ U. M! y! f4 N  o+ C
    测试10:Struts2的测试。
    5 _  H6 H% I/ J) P2 E% H2 y* }上一个测试结果太离谱了,第二天,想了想又重新测试了下,使用的还是struts2官方提供的struts2-blank-2.1.8.1.war示例。访问下面的action,action内容简单就是转发到一个JSP。 3 X' T+ W! Z' \# i7 g' |# Y& z
    http://192.168.0.5/struts2/example/HelloWorld.action & Y: E# |! s' N- o& p
    2 Q3 f; U4 u$ d9 ~+ C
    下图是示例默认的action,我没有修改:
    5 K" D( O: T! r' {
    / q5 ]% I2 R# l1 _5 S% W; \要说一说转发到的jsp,其中有struts2标签
    - [0 p4 \/ b6 Q, I$ w1 B7 l3 c8 K" h $ D6 e! `6 E# G( _1 @" @
    - ^/ p5 B, ?' f! z
         en
    4 Z5 L; X0 Y5 i$ n+ f$ f , ~/ R' i8 N2 R  S- _' L9 F
    English
    4 W; B4 N/ |$ J1 S- s8 ^9 y) }& {. m4 S& P0 h, W8 {: W
    我把jsp改了,删除了所有struts2标签,只输出一行文件 4 g. H" U6 q7 n0 c8 k. W, {

    ( o5 D8 t2 u) n2 I天啊,性能超出我的想像,太好了。看来是struts2标签拖了后腿。 % W4 S/ m& F0 f) F" |
    $ u/ ]2 M2 r& F& R% Q
    我把jsp改了,换了其它的struts2标签 0 Z3 `9 k, P9 n1 K
    ) m. j9 ~8 K- E! V6 x
    标签是:   F5 U& j6 x" l, O- F& |6 w8 P( \

    # F2 p' ]# t  z: v     . ^) W0 K' L, S4 q( G
         
    & P1 {' n: T: I, S     
    " M7 ~0 _& z/ ?1 W6 y% J 4 _3 P" N0 W# e! {& _% E
    看来struts2的标签性能太差了。
    5 x7 B  ?! p  a/ W0 L1 z2 B, Q3 Z( r& {. j# t7 o& |5 J; D3 ^
    Struts2由于采用了 值栈、OGNL表达式、struts2标签库等,会导致性能下降。如果避免或减少使用这些,性能还是很好了。
    ( j$ r* ]+ z6 @( S; u, SStruts2的
    多层拦截器、 多实例action不是导致性能问题的原因。 ! }$ {; ?; l' [1 g' J' O1 \8 q
    ( R$ `. c8 L) w& w7 `, B
    , \! R: A( q) m2 D4 X7 G( H
    注:以上测试都没有数据库,也没有业务,action中,jsp中内容很简单。
    * V) {1 Z  U* c$ j4 n; _) |
    9 f8 _! i# h$ z' j2 ?---------------------------------------------------------------------------------------
    1 z/ n0 F' P# E
    8 O% S( ]) ^6 K" _/ D5 W$ M9 ]/ S其它测试文章:
    & _, h1 _+ m9 u0 N7 `" j* uhttp://zhaoshg.iteye.com/blog/356231 6 E  r3 W2 Q7 @2 C: }3 w% \
    http://www.iteye.com/topic/679543 ) s2 Y3 _9 E1 g

    2 r4 ]6 {7 M4 Q' HMVC框架性能比较
      s% h. B7 d9 j, p+ X& Ghttp://wenku.baidu.com/view/148d7e34eefdc8d376ee32ac.html % J  H5 F; q% Z; p# S
    ; H. Y6 R/ K& _+ V! w
    spring3mvc与struts2比较
    9 b7 Q) \4 k- A4 nhttp://www.iteye.com/topic/646240
    ) P  e# ~) }. m/ f! y
    ( U/ N1 w( Q5 X& B$ X: ~2 W7 l; V' b  Z( r" G
    : U" e( y$ G$ ~' m7 g& [6 }
    附:
    ' V; O  |( t& u( }" _几种标签和框架组合解析数据时候的 性能测试对比

    5 z" x8 O% A1 f* L( J$ i. p2 W
    一、 数据
    数据通过查询日志表得到数据,共 1302 条数据,将查询出的数据放入一个静态 List 中,保证每次请求的数据相同。
    测试页面的元素相同,只是在取数据方式上不同。
    二、 测试目标
    1、 在 JSP 页面使用 struts2 标签的性能;
    2、 在 JSP 页面使用 JSTL 标签的性能;
    3、 在 Freemarker 页面使用 struts2 标签的性能;
    4、 在 Freemarker 页面使用 JSTL 标签的性能;
    5、 在 Freemarker 页面使用其本身的数据加载方式的性能。
    三、 加载耗时对比
    时间: ms           注:每一次对比都是在同一时间段按同一顺序依次执行下列几种方式

    ! K( `6 N9 y, i! T; }: b

    1 ?5 d0 \' k8 f8 X) o
    struts2
    JSTL ( C )
    Freemarker-struts2
    Freemarker-C
    Freemarker
    第一次
    306
    58
    1618
    4 }( K. P% o( ^7 d" V0 G/ J4 |
    41
    第二次
    202
    52
    1643

    " j1 }' d' C* J9 Q) N
    39
    第三次
    211
    58
    2047

    0 L+ N" i: a: _) R8 X, M
    36
    第四次
    196
    49
    1621

    " D$ i5 b! Z% @* W: {
    28
    第五次
    218
    52
    1607
    , o5 U; B' R1 t; r! L' i
    40
    第六次
    303
    331
    1857

    1 F6 [; @- `. i- p5 Y2 V. {
    45
    第七次
    210
    50
    1671

    + x& I( B4 w9 T3 M( E2 z6 c
    33
    第八次
    311
    51
    1699
    # ^0 {: u+ ~& K- \( x
    47
    第九次
    462
    55
    2180

    ' R. G  r3 I. p) G2 t
    37
    第十次
    218
    46
    1721

    * W; Q5 K" B' ]4 K1 v: L
    42
    平均值
    263.7
    80.2
    1766.4
    ' ?4 d5 x+ g, n
    38.8
    去掉最高和最低

    # b" \3 w3 c2 n; t* S

    科帮网-Java论坛、Java社区、JavaWeb毕业设计 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网-Java论坛、Java社区、JavaWeb毕业设计享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网-Java论坛、Java社区、JavaWeb毕业设计的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网-Java论坛、Java社区、JavaWeb毕业设计管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    红红火火恍恍惚惚
    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表