原来的计划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的算法,大家有没有什么想法?
算法和这些具体的工具操作有什么关系?哈。不是没关系。而是前者决定后者的关系。你确定算法首先是抽象的数学问题,随后是工程化问题。但工程化考虑的不是如何实现算法,而是这个数学模型在实际应用中的一些限制。最后做出来的数学模型如果理论验证没问题,才去考虑实际的实现,包括数据的来源的模拟。这和用什么语言或工具集、基出库没什么关系。这些都是设计,而使用具体化工具做出来,这个属于实现。哈。
“自己统计数据的算法经过讨论理论上是没问题的”
你的算法不能包含上面那些具体的工具,而是应该包含具体的场景限制。 ######加了个油######露珠是个丧心病狂的深井冰######没做过
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。