应用访问地域排名
题目内容:给定陌陌一段时间的Nginx AccessLog(多个文件,估计66G左右),以最快的方式找到访问次数最多的5个IP。提交脚本或是可执行程序,约定以命令行参数的形式传入文件所在路径。按照次数降序输出5个IP,每个IP一行。
已知说明:
1. Linux Centos7服务器,配置限制在内存2G,4核CPU
2. Nginx access log 放置在指定目录下, 文件内容格式
'$remote\_addr\\t-\\t$remote_user\t$time_local\t'
'$http\_x\_forwarded\_for\\t$tcpinfo_rtt\t$tcpinfo\_rttvar\\t$tcpinfo_snd_cwnd\t$tcpinfo_rcv_space\t'
'$request\_method\\t$host\t$request\_uri\\t$server_protocol\t$request\_length\\t$request_time\t'
'$status\\t$body_bytes_sent\t$bytes_sent\t'
'$http\_referer\\t$http_user_agent\t'
'$connection\\t$connection_requests\t'
'$upstream\_addr\\t$upstream_status\t$upstream\_response\_length\\t$upstream_response_time\t'
'$scheme\\t$ssl_session_reused';
10.0.0.1 - - 22/Oct/2019:00:00:05 +0800 - 45250 5000 20 14600 POST api.immomo.com /v1/welcome/logs?fr=123456789 HTTP/1.1 567 0.029 200 96 651 - MomoChat/8.20.2 ios/1878 (iPhone 7 Plus; iOS 11.0.3; zh_CN; iPhone9,2; S1) 93983365152 15 10.0.0.1:9000 200 101 0.029 https .
3. 不限制实现语言,但是不能依赖任何开源的第三方依赖或者服务
3. 题目输入参数只有一个就是: Accesslog的文件夹路径
4. 题目输出需要在程序运行路径下创建result的文件,文件内容的格式是:按照访问量倒排的5个IP和对应的访问次数。
比如:
10.12.12.1 10000
102.12.12.2 9999
...
评判规则:
统计准确且耗时最短者胜出
2核4G 机械硬盘
解题思路
性能讨论点
耗时分析
单线程/多线程读写文件快慢?
结论:在我们处理大文件读取的时候,单线程要优于多线程的~