开发者社区> 问答> 正文

终于开始没日没夜加班了,可是笑不出来了。。。啊哈哈哈哈哈哈 400 请求报错 

原来的计划1个礼拜搞定的,可惜今天都周四了这次真的搞不定了。这次的开发不是写写业务逻辑就完事了, 算是一个统计算法,算法没搞过啊,啥数据结构看着能用就用了,结果用的时候出现了一些问题也不好验证算法的正确性。
需求很简单,有很多的请求不停的发送给你,统计这些请求的并发数和TPS(Transaction Per Second) 。
这些请求是通过JMS推送过来的,仔细考虑过JMS消峰平谷的作用,所以统计的时候就需要推迟一个时间段统计上个时间点的数据。
个人思路:外部程序不停的向集合中推送数据,计算程序中需要有一个定时器 ,定时统计上面所说的数据。为了应对在集合中取时间段内数据的操作,是用了TreeSet一个SortedSet的实现去保存数据,而且此Set亦提供了subSet(E fromElement, E toElement)方法获取数据。要做的统计也只是通过subset, remove 之类的操做实现,不涉及遍历统计。同时考虑到是用定时器定时操作这些set统计数据,是用了并发库中ConcurrentSkipListSet解决多线程并发的问题。  
自己统计数据的算法经过讨论理论上是没问题的,但实际上跑出来的数据会有些许误差,而又找 不出问题出现的什么地方。现在主要是因为这些测试数据都是程序临时生成的,除了用这个程序进行统计,没有其他的方法可以从另一方面验证  算法的正确性。
目前感觉自己匮乏的Java技能,一是多线程并发不会用,都是临时抱佛脚。二是Java中的集合除了set,list,map还有很多,例如并发库中的集合。最重要的是要了解其实现原理,这样自己可以客户化适合自己高效率的集合  。
针对统计并发和TPS的算法,大家有没有什么想法?

展开
收起
kun坤 2020-05-30 14:23:06 468 0
1 条回答
写回答
取消 提交回答
  • 算法和这些具体的工具操作有什么关系?哈。不是没关系。而是前者决定后者的关系。你确定算法首先是抽象的数学问题,随后是工程化问题。但工程化考虑的不是如何实现算法,而是这个数学模型在实际应用中的一些限制。最后做出来的数学模型如果理论验证没问题,才去考虑实际的实现,包括数据的来源的模拟。这和用什么语言或工具集、基出库没什么关系。这些都是设计,而使用具体化工具做出来,这个属于实现。哈。
    自己统计数据的算法经过讨论理论上是没问题的”
    你的算法不能包含上面那些具体的工具,而是应该包含具体的场景限制。 ######加了个油######露珠是个丧心病狂的深井冰######没做过

    2020-05-30 14:23:12
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载