-
2019-02-25 14:50:07
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts时刻编号id的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。
具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。
【输入格式】
第一行包含三个整数N、D和K。
以下N行每行一条日志,包含两个整数ts和id。对于50%的数据,1 <= K <= N <= 1000
对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000【输出格式】
按从小到大的顺序输出热帖id。每个id一行。【输入样例】
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3【输出样例】
1
3资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms解 析:这个题总体来说难度不算太大,我的思路就是记录下每一个帖子id第一次出现的时间,如果这个id又出现了(也就是出现次数>1),先获取该id第一次出现的时间t,然后判断该id现在出现的时间是否在[t,t+d)范围内,如果有效的范围内就让该id的点赞数+1,如果该id的点赞个数>=k(也就是热帖),则用一个Map集合来记录热帖id和该id的点赞数,用Map来存储是因为Map存储的都是键值对类型的数据,可以对热帖id更新其对应的点赞数。最后创建一个可以用来比较的类,把Map中的数据存入一个一个对象中,然后都存入到ArrayList集合中,然后再排一下序,最后输出id即可。
代码如下:
import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Scanner; class STU1 implements Comparable<STU1> //类似于C语言中的结构体 { private int id; // 热帖id private int n; // 热帖点赞个数 public STU1(int id,int n) { this.id = id; this.n = n; } public int getId() { return id; } @Override public int compareTo(STU1 o) { if(this.id!=o.id) //按从小到大的顺序输出热帖id { return this.id - o.id; } return 0; } } public class 日志统计 { public static void main(String[] args) { Scanner in = new Scanner(System.in); HashMap<Integer,Integer> map = new HashMap<Integer,Integer>(); //记录每一个帖子第一次点赞的时间 HashMap<Integer,Integer> mt = new HashMap<Integer,Integer>(); //记录热帖和其点赞个数 int n = in.nextInt(); int d = in.nextInt(); int k = in.nextInt(); int[] a = new int[100010]; //记录帖子id对应的点赞个数 for(int i=0;i<n;++i) { int x = in.nextInt(); //点赞时间 int y = in.nextInt(); //帖子id if(a[y]==0) //说明第一次出现该帖子id { a[y]++; //该帖子点赞数+1 map.put(y,x); //记录下帖子id第一次点赞的时间 } else //该帖子id不是第一次出现 { int t = map.get(y); //获取该帖子id第一次出现的时间 if(x>=t&&x<t+d) //题目中的时间限制:[T, T+D) { a[y]++; //id对应的点赞数+1 if(a[y]>=k) //超过规定的点赞数,说明是一个热帖 { mt.put(y,a[y]); //记录下热帖id和其点赞数 } } } } ArrayList<STU1> stu = new ArrayList<STU1>(); //存放帖子id和点赞个数的集合 for(Integer str : mt.keySet()) { STU1 stu1 = new STU1(str,mt.get(str)); //先放入一个对象中 stu.add(stu1); //再放入集合 } Collections.sort(stu); //根据点赞数降序排序 for(int i=0,t=stu.size();i<t;++i) { System.out.println(stu.get(i).getId()); } } }
运行结果:
输入:
7 10 2 0 1 0 10 10 10 10 1 9 1 100 3 100 3
输出:
1 3
更多相关内容 -
shell脚本实现的网站日志分析统计(可以统计9种数据)
2021-01-10 15:23:12写了个shell脚本,可以用来统计每天的访问日志,并发送到电子邮箱,方便每天了解网站情况。脚本统计了:1、总访问量2、总带宽3、独立访客量4、访问IP统计5、访问url统计6、来源统计7、404统计8、搜索引擎访问统计... -
使用shell脚本分析网站日志统计PV、404、500等数据
2021-01-20 16:15:45下面的脚本能统计出网站的总访问量,以及404,500出现的次数。统计出来后,我们可以结合监控宝来进行记录,进而可以看出网站访问量是否异常,是否存在攻击,一目了然。还可以根据查看500出现的次数,进而判断网站程序... -
python实现的分析并统计nginx日志数据功能示例
2020-12-23 11:23:43本文实例讲述了python实现的分析并统计nginx日志数据功能。分享给大家供大家参考,具体如下: 利用python脚本分析nginx日志内容,默认统计ip、访问url、状态,可以通过修改脚本统计分析其他字段。 一、脚本运行方式 ... -
利用PHP如何统计Nginx日志的User Agent数据
2021-01-21 16:13:57接着马上想到自己网站的访问日志不就是现成的优质数据源吗?于是愉快的决定写个脚本统计一下Nginx访问日志中的UA信息。 这类简单操作,用脚本语言就足够,毫无疑问肯定要用最熟悉的PHP。打开vim就开撸,十几分钟下来... -
从日志统计到大数据分析.pdf
2022-01-07 14:11:04从日志统计到大数据分析.pdf -
java基于spark streaming和kafka,hbase的日志统计分析系统.rar
2021-10-19 13:13:06本使用kafka,spark,hbase开发日志分析系统 -
互联网用户行为日志数据集.rar
2021-03-22 20:30:51互联网用户行为日志数据集.rar -
Python统计日志中每个IP出现次数的方法
2020-12-23 13:31:27本文实例讲述了Python统计日志中每个IP出现次数的方法。分享给大家供大家参考。具体如下: 这脚本可用于多种日志类型,本人测试MDaemon的all日志文件大小1.23G左右,分析用时2~3分钟 代码很简单,很适合运维人员,有不足... -
网络游戏-GSM-R网络测试日志数据可视化回放与统计分析系统及方法.zip
2021-09-19 16:49:08网络游戏-GSM-R网络测试日志数据可视化回放与统计分析系统及方法.zip -
服务器集群日志统一收集 用ELK来作服务器集群日志统计分析.zip
2021-01-05 20:46:13服务器集群日志统一收集 用ELK来作服务器集群日志统计分析.zip -
Java实现蓝桥杯日志统计
2020-03-02 16:52:17标题:日志统计 小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞"。 现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾...标题:日志统计
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts时刻编号id的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。
具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。
【输入格式】
第一行包含三个整数N、D和K。
以下N行每行一条日志,包含两个整数ts和id。对于50%的数据,1 <= K <= N <= 1000
对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000【输出格式】
按从小到大的顺序输出热帖id。每个id一行。【输入样例】
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3【输出样例】
1
3资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。package 第七次模拟; import java.util.Arrays; import java.util.Scanner; public class Demo12日志统计 { public static void main(String args[]) { int n, d, k; // 输入的N行每行一条日志,包含两个整数ts 和id。 Scanner sc = new Scanner(System.in); n = sc.nextInt(); d = sc.nextInt(); k = sc.nextInt(); ClickHot arr[] = new ClickHot[n]; for (int i = 0; i < n; i++) { int time = sc.nextInt(); int id = sc.nextInt(); arr[i] = new ClickHot(time, id); // 存放每组数字 } Arrays.sort(arr); // 对其进行排序 int parentId = arr[0].id; // 先拿到第一个id boolean flag =false; // 设置一个标志 for (int i = 0; i < n; i++) { // 我当前得id如果有k个赞得话,就是热帖 // 当前位置和以后的k个位置上都是此id,就有k个赞 // 并且时间差小于d,并且没有被输出过 if (i + k - 1 < n && arr[i + k - 1].id == parentId && arr[i + k - 1].ts - arr[i].ts < d && !flag ) { System.out.println(parentId); // 输出这个id 因为题目中只要求输出在同一个时间段有两个赞即可 flag = true;// 这步设置变量,当后面来相同的,但是我不需要输出了,因为两个已经够了 } else if (arr[i].id != parentId) // 这步是如果我不相同id值,那么我就把这个当前的id用我现在i数组中对应的id取代 { parentId = arr[i].id; // 把先前的id替换 flag = false; // 重新设置标志 i = i - 1; // 因为我把上面一个设置了,此时我需要向上减一,然后再做比较,这样相当于我开始时候i不做变换没我把该取代的值取代掉 } } } } class ClickHot implements Comparable<ClickHot> // 创建一个ClickHot类留存放两个每次的两个数字 一个是 // ts 是td { int ts, id; ClickHot(int ts, int id) // 两个变量 { this.ts = ts; this.id = id; } @Override public int compareTo(ClickHot o) { if (id == o.id) // 先对id做比较其次id相同对ts做比较 return ts - o.ts; else return id - o.id; } }
-
基于SQL-on-Hadoop的网络日志分析
2021-01-14 21:37:35利用真实TB 级数据集对多种 Hadoop 列存储格式及压缩算法进行性能测试,并对比Hive和Impala引擎日志扫描及统计查询效率,选用Gzip压缩的Parquet格式可将日志体积压缩80%,且将Impala查询性能提升至5倍。基于该平台已... -
日志分析实战之清洗、网站统计小教程.pdf
2018-02-02 15:27:25日志分析实战之清洗、网站统计小教程.pdf日志分析实战之清洗、网站统计小教程.pdf日志分析实战之清洗、网站统计小教程.pdf -
从日志统计到大数据分析.pptx
2021-10-14 02:45:22从日志统计到大数据分析.pptx -
Nginx日志统计分析
2022-03-14 22:18:23统计PV,UV数 统计所有的PV数 cat access.log | wc -l 1 统计当天的PV数 cat access.log | sed -n /`date "+%d\/%b\/%Y"`/p | wc -l 1 统计指定某一天的PV数 cat access.log | sed -n '/20\/Aug\/2019/p' | wc -l 1 ...分析背景
注册用户近4W人,最高峰活跃用户过2W,日常活跃用户过1W,通过nginx日志分析记录用户流量及系统负载等。系统采用3台nginx轮询负载,故三台流量均衡,取流量最高日进行分析。
日志格式如下所示:
系统数据:单表最大6g,单条数据根据表结构不同最大1.3k,最小0.18k,平均每天占用磁盘空间17G左右,表数据日最高:血压表近6W,佩戴状态表420W,心率表520W,呼吸率表560W,睡眠表27W,血氧表500W,运动表1500W,温度表600W,轨迹表16W
PV:日最高可达2000W
IP数量:日最高可达1.8W
系统并发:秒级可达4K 分级可达4W
通过ip相关统计可在系统突发流量异常情况下,分析是否受到攻击
页面访问统计及性能分析:可根据api访问频率及响应时间,优化对应接口,提高系统性能
一、统计PV,UV数
1、统计所有的PV数
cat access.log | wc -l2、统计指定某一天的PV数
cat access.log-20220204 | sed -n '/03\/Feb\/2022/p' | wc -l
3、根据访问IP统计UV--近1.8W
awk '{print $1}' access.log|sort | uniq -c |wc -l二、IP相关统计
1、统计每个IP访问次数
awk '{print $1}' access.log|sort | uniq -c
2、统计IP访问量(独立ip访问数量)--近1.8W独立IP
awk '{print $1}' access.log | sort -n | uniq | wc -l3、查看某一时间段的IP访问量(10-11点)
grep "02/Feb/2022:1[0-1]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l
4、查看访问最频繁的前100个IP
awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 1005、查看访问100次以上的IP
awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn6、查询某个IP的详细访问情况,按访问频率排序
grep '101.242.68.110' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100
三、页面访问统计
1、查看访问最频的api(TOP100)
awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 1002、查看访问最频的页面([排除sendHrSpo2HalfOriginalData接口】(TOP100)
grep -v "sendHrSpo2HalfOriginalData" access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100
3、查询访问最频繁的api
awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more4、查看页面访问次数超过100次的api
cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' |less5、查看最近1000条记录,访问量最高的页面
tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less四、每秒每分钟每小时请求量统计
1、统计每秒的请求数,top100的时间点(精确到秒)--近4k并发
awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100
2、统计每分钟的请求数,top100的时间点(精确到分钟)
awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100
3、每小时的请求数,top100的时间点(精确到小时)
awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100五、性能分析
*在nginx log中最后一个字段加入$request_time
1、列出传输时间超过 3 秒的页面,显示前20条
cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20
2、列出uploadDataV2请求时间超过3秒的页面,并统计其出现的次数,显示前100条
cat access.log|awk '($NF > 3 && $7~/\uploadDataV2/){print $7}'|sort -n|uniq -c|sort -nr|head -100 -
大数据分析-网站日志数据文件(Hadoop部署分析资料)
2022-05-09 09:28:19本次要实践的数据日志来源于国内某技术学习论坛,该论坛由某培训机构主办,汇聚了众多技术学习者,每天都有人发帖、回帖。至此,我们通过Python网络爬虫手段进行数据抓取,将我们网站数据(2013-05-30,2013-05-31)... -
Linux下对nginx日志进行统计分析
2022-04-25 19:32:361.awk按状态码统计数量命令: cat /usr/local/nginx/logs/access.log | awk '{print $9}' |...或统计最后100条日志的情况 tail -n 1000 /usr/local/nginx/logs/access.log | awk '{print $9}' | awk 'BEGIN{count[$1]..1.awk按状态码统计数量命令:
cat /usr/local/nginx/logs/access.log | awk '{print $9}' | awk 'BEGIN{count[$1]=0}{count[$1]+=1}END{for(i in count) print(i,count[i])}'
或统计最后100条日志的情况
tail -n 1000 /usr/local/nginx/logs/access.log | awk '{print $9}' | awk 'BEGIN{count[$1]=0}{count[$1]+=1}END{for(i in count) print(i,count[i])}'
2.统计访问ip的数量,去重:
cat /usr/local/nginx/logs/access.log | awk '{print $1}' | sort -nr | uniq | wc -l
或统计最后100条日志的情况
tail -n 1000 /usr/local/nginx/logs/access.log | awk '{print $1}' | sort -nr | uniq | wc -l
批注:sort排序,uniq删除重复列,wc -l统计行数3.统计不同ip访问nginx的次数,并由多到少排序:
cat /usr/local/nginx/logs/access.log | awk '{print $1}' | sort | uniq -c| sort -rn
批注:uniq -c每列旁边显示该行重复出现的次数,sort -rn反序4.统计在某段时间内(1月27日15点)的访问总次数:
使用正则表达式cat /usr/local/nginx/logs/access.log | grep -E '27/Jan/2021:15'| wc -l
统计在某段时间内(1月27日15点-16点)的访问总次数:
cat /usr/local/nginx/logs/access.log | grep -E '27/Jan/2021:1[5-6]'| wc -l
统计在某段时间内(1月27日15点-24点)的访问总次数:
cat /usr/local/nginx/logs/access.log | grep -E '27/Jan/2021:1[5-9]|27/Jan/2021:2[0-3]'| wc –l
5.查看访问最频繁的前3个ip,并列出访问ip:
cat /usr/local/nginx/logs/access.log | awk '{print $1}' | sort -n | uniq -c| sort -rn | head -n 3
6.查看访问次数大于X(这里假设是100)的ip,并列出访问次数:
cat /usr/local/nginx/logs/access.log | awk '{print $1}' | sort -n | uniq -c| sort -rn | awk '{if($1>100)print $0}'
7.查询出访问最频繁的URL:
cat /usr/local/nginx/logs/access.log | awk '{print $7}' | awk -F '?' '{print $1}' | sort -n | uniq -c | sort -nr | head -n 1
对url进行统计:
cat /usr/local/nginx/logs/access.log | awk '{print $7}' | awk -F '?' '{print $1}' | sort -n | uniq -c | sort –nr
8.统计访问成功次数(状态码为2开头的都为成功2xx):
cat /usr/local/nginx/logs/access.log | awk '{if($9 ~ /2[0-9]{2}/)print $9}' | wc -l
9.导出某个时间段的nginx日志
导出access.log
sed -n '/14\/Jun\/2022:08:50:00/,/14\/Jun\/2022:09:20/p' access.log > 624access.log
导出error.log
cat /home/shanwei/error.log | grep -E '2022/06/14 08:5[7-9]' > 789error.log
cat /home/shanwei/error.log | grep -E '2022/06/14 09:0[0-2]' > 012error.log10.查看指定ip访问过的url和访问次数
grep "39.105.67.140" /var/log/nginx/access.log|awk '{print $7}' |sort |uniq -c |sort -n -k 1 -r
11、查询某个url响应代码是200情况
统计次数
grep "/xxx/yyy/zzz" /home/shanwei/615_37/access.log | grep -E '15/Jun/2022:09:[0-9]' | awk '{if($6 = "POST")print $0}' |awk '{if($9 ~ /2[0-9]{2}/)print $9}' |sort |uniq -c |sort -n -k 1 -r
查看最后10条
grep "/xxx/yyy/zzz" /home/shanwei/615_37/access.log | grep -E '15/Jun/2022:09:[0-9]' | awk '{if($6 = "POST")print $0}' |awk '{if($9 ~ /2[0-9]{2}/)print $0}' |sort -nr|head -n 10导出最后10条
grep "/xxx/yyy/zzz" /home/shanwei/615_37/access.log | grep -E '15/Jun/2022:09:[0-9]' | awk '{if($6 = "POST")print $0}' |awk '{if($9 ~ /2[0-9]{2}/)print $0}' |sort -nr|head -n 10 > bbb.log一些推荐的好文
-
Iptalbes ulogd实现流量日志统计
2014-04-05 17:43:39本文简要介绍通过iptalbes和ulogd实现流量日志统计。 -
网站日志统计分析脚本 v1.0.rar
2019-07-13 06:03:12并剔除假蜘蛛统计百度和谷歌蜘蛛抓取及各种网维数据]linux cywine两个版本 使用说明: 将带有.log后缀名的日志文件和脚本放到一个空文件夹里运行该脚本即可得到相应数据 警告:如果你使用的是windows操作系统... -
分析nginx中access.log日志统计状态为500
2019-07-30 16:11:27我们可以使用下面的命令行,统计服务器返回的状态码,发现系统可能存在的问题。 awk '{print $9}' access.log | sort | uniq -c | sort 正常情况下,状态码 200 或 30x 应该是出现次数最多的。40x 一般表示... -
Oracle统计产生日志&数据增长&增量
2019-09-24 16:09:59文章目录1、如何度量增删改操作产生的日志量2、根据归档日志估算数据增量情况3、DBA_HIST_SYSSTAT计算redo产生量(AWR中profile "redo size")4、根据dba_hist_tbspc_space_usage表空间维度估算容量增长情况5、根据dba... -
linux对日志文件内容进行统计-awk
2022-01-07 22:03:47打印行所有数据。 jack 12 170 man 3:awk '$1=="jack" && $2==12|| NR==1{print $0}' test.txt NR==1默认输出第一行, 要么满足条件,要么为第一行,就输出。 name age heght sex jack 12 170 man 4:awk -F "," '{... -
网站日志统计分析脚本 v1.0
2019-10-31 21:46:01并剔除假蜘蛛统计百度和谷歌蜘蛛抓取及各种网维数据]linux cywine两个版本 使用说明: 将带有.log后缀名的日志文件和脚本放到一个空文件夹里运行该脚本即可得到相应数据 警告:如果你使用的是windows操作系统,请... -
通用实时日志分类统计实践
2020-01-13 11:35:02通用实时日志分类统计实践 原创谢志旺网易游戏运维平台2019-08-04 谢志旺 16 年加入网易游戏技术中心。曾负责或参与技术中心自动化运维平台、统一日志中心等多个系统的研发,开发的系统稳定服务于公司几百... -
nginx kafka flink mysql用户操作日志统计
2022-04-13 15:56:03编写数据持久类,保存统计结果到数据库 /** * @function:jdbc持久化器 */ public class JdbcPersistence extends RichSinkFunction<List<String>> { @Override public void invoke(List<String> values, Context ... -
java版数据分析--上网日志流量统计
2018-05-01 17:15:18在给的http.log日志文件中,是电信运营商记录用户上网访问某些网站行为的日志记录数据,一条数据中有多个字段用空格分隔。例如:"18611132889 http://v.baidu.com/tv 20 5000"是一条上网行为,第一个字段...