12
返回列表 发新帖
楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

数据砖 店面 ng

地里匿名用户
🔗
匿名用户-1UKE9  2021-12-24 18:04:20
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-1UKE9  2021-12-25 06:02:51
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-SY7FI  2022-2-14 04:56:17
匿名者 发表于 2021-10-11 15:58
Use a ring buffer to hold per-second counter in the past 5 mins. For example:

这个不对呀,比如说很长一段时间没有任何操作,load应该是0
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-M9IMW  2022-4-9 00:34:36
  1. import org.junit.jupiter.api.Assertions;
  2. import org.junit.jupiter.api.Test;

  3. import java.util.HashMap;
  4. import java.util.LinkedHashMap;
  5. import java.util.Map;

  6. public class KeyValueStoreWithTime {
  7.     private final Map<String, String> kv = new HashMap<>();
  8.     private final LinkedHashMap<Long, Integer> getMetrics = new LinkedHashMap<>();
  9.     private final LinkedHashMap<Long, Integer> putMetrics = new LinkedHashMap<>();
  10.     private final int interval = 300;

  11.     public String get(String key, long currentTime) {
  12.         String value = kv.get(key);
  13.         // long currentTime = System.currentTimeMillis() / 1000;
  14.         getMetrics.merge(currentTime, 1, Integer::sum);
  15.         truncateMetricsMap(getMetrics, currentTime, interval);
  16.         return value;
  17.     }

  18.     public void put(String key, String value, long currentTime) {
  19.         kv.put(key, value);
  20.         // long currentTime = System.currentTimeMillis() / 1000;
  21.         putMetrics.merge(currentTime, 1, Integer::sum);
  22.         truncateMetricsMap(putMetrics, currentTime, interval);
  23.     }

  24.     public int getMetrics() {
  25.         return getMetrics.values().stream().mapToInt(Integer::intValue).sum();
  26.     }

  27.     public int putMetrics() {
  28.         return putMetrics.values().stream().mapToInt(Integer::intValue).sum();
  29.     }

  30.     private void truncateMetricsMap(LinkedHashMap<Long, Integer> metricsMap, long currentTime, int interval) {
  31.         metricsMap.entrySet().removeIf(longIntegerEntry -> longIntegerEntry.getKey() < currentTime - interval);
  32.     }

  33.     @Test
  34.     public void testKeyValueStoreWithTime() {
  35.         put("1", "v", 1);
  36.         put("2", "v", 100);
  37.         put("3", "v", 200);
  38.         put("4", "v", 200);
  39.         put("5", "v1", 400);
  40.         put("5", "v2", 400);
  41.         put("6", "v", 500);

  42.         Assertions.assertEquals(5, this.putMetrics());
  43.     }
  44. }
复制代码
我的想法是用一个LinkedHashMap记录put和get操作的次数,因为Java 的LinkedHashMap是按照key的插入时间有序的,每次put/get操作完,只要遍历一下这个LinkedHashMap,把300s之前的记录全部删掉。需要返回put/get统计的时候,把这个LinkedHashMap的值sum一下即可

觉得有帮助请加点米
回复

使用道具 举报

全局:
请问这道题需要我们从头design hashmap吗,比如 LC 706, 还是我们可以调用java已有的hashmap?谢谢啦
回复

使用道具 举报

🔗
dtccx 2022-8-7 13:40:50 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-MOMZD  2022-10-10 07:34:01
dtccx 发表于 2022-8-6 22:40
感觉不太对,应该把truncateMetricsMap放在getMetrics()和putMetrics()里面的,如果在第0秒call了一次put ...

你可以putMetrics之前先更新下queue,把5分钟之前的全都pop queue
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表