import java.util.List;
/**
* 通用计数器模块接口ICounter,用于系统内部的请求量计数,
* 多个线程会频繁调用hit()方法进行计数
*
* 请实现ICounter接口(请关注接口实现,不需要写测试用例)
* 不使用任何第三方的服务(包括Redis)
*/
interface ICounter {
// 调用一次,计数加1
void hit();
// 获取当前的计数统计状态
StatData getStat();
}
class StatData {
// 最近10秒的每秒平均计数量
public long last10SecondAverage;
// 最近10分钟的每分钟平均计数量
public long last10MinuteAverage;
// 最近60分钟的每分钟平均计数量
public long last60MinuteAverage;
// 最近60秒的每秒计数量的集合
public List<Long> last60SecondHistory;
}
1、按照题目是一个累加计数问题,需要保障多线程调用的情况下都可以进行原子累加操作,建议看看LongAdder
2、第二个类的每个数据,可以知道最小单位是秒,那么需要存储每秒的计数值,同时为了分钟的不至于存储数据过多,再有一个是分钟存储的累加值。给你一个参考:https://blog.csdn.net/bahun9158/article/details/101672093 可以找找你的思路
定义一个静态计数属性,每次请求接口时,这个属性自增。
这个的关键是满足题目中多个线程频繁调用的要求
1.首先定义了一个接口,里面定义了2个方法;
2.定义一个类,里面定义了3个long变量,一个List集合。