当前位置: 首页 > news >正文

系统设计题-日活月活统计

一、题目描述

根据访问日志统计接口的日活和月活。日志格式为
yyyy-mm-dd|clientIP|url|result
其中yyyy-mm-dd代表年月日,一个日志文件中时间跨度保证都在同一个月内,但不保证每行是按照日期顺序。
clientIP为合法的点分十进制ipv4地址(1.1.1.1和1.01.001.1视作同一IP地址)
url访问的地址,格式为/login.do,/query.html,,仅包含字母、英文句号.、斜杠/、和下划线_
result接口的访问结果,只有2种:success和fail
日活:统计当天有多少不同IP访问地址是/login.do且结果为success
月活:统计当月有多少不同IP访问地址是/login.do且结果为success。注意月活数量不是日活数量的简单累加!
输出规则
第一个是月活,第2~31代表当月第1到第31天的日活数

样例
输入
2025-01-01|192.168.218.218|/login.do|success
2025-01-01|192.168.218.218|/login.do|success
2025-01-01|192.168.210.210|/login.do|fail
2025-01-02|192.168.210.210|/login.do|success
2025-01-02|192.168.218.218|/login.do|success
输出
2 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

二、算法实现

    // 获取月活,日活public static int[] getActiveUserNum(List<String> logs) {// key存当天,value存放IP,自动去重Map<Integer, Set<String>> activeIpMap = new HashMap<>();// 月活activeIpMap.put(0, new HashSet<>());for (String log : logs) {if (log.endsWith("fail") || !log.contains("login.do|success")) {continue;}Integer day = Integer.valueOf(log.substring(8, 10));String ip = getFormateIp(log);if (!activeIpMap.containsKey(day)) {activeIpMap.put(day, new HashSet<>());}// 日活activeIpMap.get(day).add(ip);// 月活activeIpMap.get(0).add(ip);}int[] res = new int[32];for (int i = 0; i < res.length; i++) {if (!activeIpMap.containsKey(i)) {continue;}res[i] = activeIpMap.get(i).size();}return res;}// 对IP地址格式化private static String getFormateIp(String log) {String[] infos = log.split("\\|");String[] ipNums = infos[1].split("\\.");String ip = "";for (int i = 0; i < ipNums.length; i++) {if (i == ipNums.length - 1) {ip += Integer.valueOf(ipNums[i]);} else {ip += Integer.valueOf(ipNums[i]) + ".";}}return ip;}
http://www.lryc.cn/news/394114.html

相关文章:

  • 在CentOS7云服务器下搭建MySQL网络服务详细教程
  • 【数据结构与算法】快速排序霍尔版
  • 无人机5公里WiFi低延迟图传模组,抗干扰、长距离、低延迟,飞睿智能无线通信新标杆
  • Kappa架构
  • 护网在即,助力安服仔漏洞扫描~
  • 3C电子制造行业MES系统,提高企业生产效率
  • C++ 多态和虚函数
  • 七月记录上半
  • Wing FTP Server
  • 【Linux进阶】文件系统6——理解文件操作
  • Python编译器的选择
  • Java | Leetcode Java题解之第217题存在重复元素
  • python基础语法 006 内置函数
  • ABAP中BAPI_CURRENCY_CONV_TO_EXTERNAL函数详细的使用方法
  • Mac本地部署大模型-单机运行
  • Qt:8.QWidget属性介绍(focuspolicy属性-控件焦点、stylesheet属性-为控件设置样式)
  • R可视化数据必要格式——长格式
  • Android计算器界面的设计——表格布局TableLayout实操
  • 【数据结构】经典链表题目详解集合(反转链表、相交链表、链表的中间节点、回文链表)
  • 人工智能在软件开发中的角色:助手还是取代者?
  • qt播放视频
  • 搭建论坛和mysql数据库安装和php安装
  • [护网训练]原创应急响应靶机整理集合
  • 【Linux】:程序地址空间
  • c++ 学习面试之路
  • Linux文件结构
  • 【简单介绍下Memcached】
  • 字符串和正则表达式踩坑
  • LLM4Decompile——专门用于反编译的大规模语言模型
  • 关于Web开发的详细介绍