可以提供思路吗?越详细越好

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. 保证线程安全,纯java实现的话,建议用java.concurrent里的原子类
  3. 这个貌似只需要你按指定的结构保存在内存里,定时每秒刷新一次统计数据
  4. 考虑怎么写入更高效,刷新动作可能需要开一个新线程去做

1.首先定义了一个接口,里面定义了2个方法;
2.定义一个类,里面定义了3个long变量,一个List集合。