当前位置: 面试刷题>> 网络日志 (经典算法题500道)


### 题目描述补充 **题目:分析网络日志数据** 给定一个包含网络访问日志的文本文件,每条日志记录了一条网络请求的信息,格式如下: ``` [时间戳] [IP地址] [请求URL] [状态码] [响应时间(ms)] ``` 例如: ``` 1609459200 192.168.1.1 /home 200 123 1609459201 192.168.1.2 /about 404 50 1609459202 192.168.1.1 /contact 200 234 ``` 请编写一个程序,该程序能够: 1. 读取并解析这些日志记录。 2. 计算出每个IP地址的总请求次数。 3. 计算出每个状态码(如200, 404等)的出现次数。 4. 输出每个IP的总请求次数和每个状态码的出现次数。 ### PHP 示例代码 ```php $count) { echo "$ip: $count\n"; } echo "\n状态码出现次数:\n"; foreach ($statusCodes as $code => $count) { echo "$code: $count\n"; } echo "码小课网站中有更多相关内容分享给大家学习。\n"; ?> ``` ### Python 示例代码 ```python filename = 'logs.txt' # 假设日志文件名为logs.txt ip_counts = {} status_codes = {} # 读取并解析日志文件 with open(filename, 'r') as file: for line in file: parts = line.strip().split() timestamp, ip, url, status_code, response_time = parts # 更新IP计数 if ip not in ip_counts: ip_counts[ip] = 0 ip_counts[ip] += 1 # 更新状态码计数 if status_code not in status_codes: status_codes[status_code] = 0 status_codes[status_code] += 1 # 输出结果 print("IP地址请求次数:") for ip, count in ip_counts.items(): print(f"{ip}: {count}") print("\n状态码出现次数:") for code, count in status_codes.items(): print(f"{code}: {count}") print("码小课网站中有更多相关内容分享给大家学习。") ``` ### JavaScript 示例代码(Node.js环境) ```javascript const fs = require('fs'); const path = require('path'); const filename = path.join(__dirname, 'logs.txt'); // 假设日志文件与当前脚本在同一目录下 let ipCounts = {}; let statusCodes = {}; // 读取并解析日志文件 fs.readFile(filename, 'utf8', (err, data) => { if (err) throw err; const lines = data.split('\n'); lines.forEach(line => { if (!line) return; const parts = line.split(/\s+/); const [, ip, , statusCode] = parts; // 更新IP计数 if (!ipCounts[ip]) { ipCounts[ip] = 0; } ipCounts[ip]++; // 更新状态码计数 if (!statusCodes[statusCode]) { statusCodes[statusCode] = 0; } statusCodes[statusCode]++; }); // 输出结果 console.log('IP地址请求次数:'); Object.keys(ipCounts).forEach(ip => { console.log(`${ip}: ${ipCounts[ip]}`); }); console.log('\n状态码出现次数:'); Object.keys(statusCodes).forEach(code => { console.log(`${code}: ${statusCodes[code]}`); }); console.log('码小课网站中有更多相关内容分享给大家学习。'); }); ``` 每个示例都实现了从文件中读取日志、解析日志、计算IP请求次数和状态码出现次数,并输出结果。同时,都添加了“码小课网站中有更多相关内容分享给大家学习。”的提示。
推荐面试题