机试题——DNS本地缓存
题目描述
正在开发一个DNS本地缓存系统。在互联网中,DNS(Domain Name System)用于将域名(例如www.example.com)解析为IP地址,以便将请求发送到正确的服务器上。通常情况下,DNS请求会发送到互联网上的某个DNS服务器,这会造成一定的网络延迟和负载。为了解决这个问题要开发一个本地DNS缓存系统,可以在本地缓存一部分DNS请求的结果,以提高性能和减轻网络负载。
DNS本地缓存系统有以下功能:
- 系统初始状态无存储记录,最大可缓存N条记录。
- 系统每1秒能解析1个URL地址,先从本地DNS上查找:
- 如果本地缓存中能查到就直接返回
from_cache。 - 如果本地DNS上没有该地址,返回
from_internet,并从URL的属性列表tls上,读取该URL的TTL(Time To Live,代表该URL的生存时长,即能够保存到缓存系统中的时长),并将URL存入缓存系统中;如果在tls上未能读到该URL的TTL,设置默认TTL为5秒。
- 如果本地缓存中能查到就直接返回
- 本地缓存系统中URL地址的
TTL每秒减1,当TTL=0时,将该URL地址从缓存系统中移除。 - 在系统空间装满后,如果还有新的URL要录入,则将
TTL最小的一个URL移除,如果TTL最小的URL存在多个,按照先进先出的方式移除1个URL。 - 现在每1秒输入一个URL地址,求每个URL地址的解析方式(
from_cache还是from_internet)。
输入描述
输入包含多行:
- 第一行包含两个整数
N和X,分别表示DNS缓存系统的最大缓存记录数和待请求的URL数量。 - 第二行包含
X个整数,分别代表对应的URL地址,形如:url1, url2, url3, ..., urlX,元素允许重复。 - 第三行包含一个整数
Y,表示URL的属性列表tls的长度。 - 接下来的
Y行,每行包含两个整数url_i和ttl_i,分别表示URL的编号和对应的TTL值。
数据范围说明:
0 < N, X, Y ≤ 65535,N、X、Y为正整数。0 ≤ url_i, ttl_i ≤ 65535,url_i、ttl_i为整数。
输出描述
输出每秒中URL的解析方式列表:
0表示from_cache。1表示from_internet。
用例输入
5 5
3 1 2 1 2
2
1 4
2 2
1 1 1 0 1
10 15
11 14 10 5 8 3 8 13 12 9 12 15 15 7 7
8
11 2
14 11
10 9
5 7
8 1
13 10
9 10
15 8
1 1 1 1 1 1 1 1 1 1 0 1 0 1 0
解题思路
本题需要模拟一个DNS本地缓存系统的工作过程,主要思路如下:
- 数据结构设计:
- 使用一个优先队列(最小堆)来管理缓存中的URL,以便快速找到
TTL最小的URL。 - 使用一个布尔数组
f来记录某个URL是否在缓存中,以便快速判断是否命中缓存。
- 使用一个优先队列(最小堆)来管理缓存中的URL,以便快速找到
- 初始化:
- 读取输入数据,包括缓存大小
N、URL数量X、URL列表以及URL的TTL属性。 - 初始化所有URL的默认
TTL为5秒。
- 读取输入数据,包括缓存大小
- 模拟每秒的解析过程:
- 每秒处理一个URL:
- 先检查缓存中是否有该URL:
- 如果有,输出
0(from_cache)。 - 如果没有,输出
1(from_internet),并将该URL加入缓存。
- 如果有,输出
- 如果缓存已满,移除
TTL最小的URL(如果TTL最小的URL有多个,按照先进先出移除)。 - 更新缓存中所有URL的
TTL,移除TTL为0的URL。
- 先检查缓存中是否有该URL:
- 每秒处理一个URL:
- 输出结果:
- 按照每秒的解析结果输出对应的
0或1。
- 按照每秒的解析结果输出对应的
代码
#include <iostream>
#include <vector>
#include <queue>
#include <sstream>
#include <string>
#include <stack>
#include <algorithm>
#include <map>
using namespace std;
#define msize 100005struct node {int edt, stt, id; // edt代表生存周期结束时间,stt代表开始时间bool operator<(const node& b) const {// 优先队列默认为大堆顶,所以要将优先删除的TTL最小的// 即结束时间最小的排在前面,相等时按先进先出原则,按开始时间排序。if (edt == b.edt) return stt > b.stt;return edt > b.edt;}
};int n, x, y; // 请求数量 cache大小 ts表大小
priority_queue<node> q; // 优先队列定义
int re[msize]; // 请求数量
int ttls[msize]; // 每个URL的ttl
bool f[msize]; // 记录当前队列中有没有某个URLint main() {ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n >> x;for (int i = 1; i <= x; i++) {cin >> re[i];}for (int i = 0; i < msize; i++) {ttls[i] = 5;f[i] = 0;}cin >> y;for (int i = 0; i < y; i++) {int u, t;cin >> u >> t;ttls[u] = t;}for (int i = 1; i <= x; i++) {// 已经过期了while (q.size() && q.top().edt <= i) {f[q.top().id] = 0; // 该url不在了q.pop();}if (f[re[i]]) {// 存在缓存中cout << "0 ";} else {// 缓存满了就得扔出去一个if (q.size() == n) {f[q.top().id] = 0;q.pop();}f[re[i]] = 1;q.push({i + ttls[re[i]], i, re[i]});cout << "1 ";}}
}
相关文章:
机试题——DNS本地缓存
题目描述 正在开发一个DNS本地缓存系统。在互联网中,DNS(Domain Name System)用于将域名(例如www.example.com)解析为IP地址,以便将请求发送到正确的服务器上。通常情况下,DNS请求会发送到互联…...
Day38【AI思考】-彻底打通线性数据结构间的血脉联系
文章目录 **彻底打通线性数据结构间的血脉联系****数据结构家族谱系图****一、线性表(老祖宗的规矩)****核心特征** **二、嫡系血脉解析**1. **数组(规矩森严的长子)**2. **链表(灵活变通的次子)** **三、庶…...
【LeetCode】152、乘积最大子数组
【LeetCode】152、乘积最大子数组 文章目录 一、dp1.1 dp1.2 简化代码 二、多语言解法 一、dp 1.1 dp 从前向后遍历, 当遍历到 nums[i] 时, 有如下三种情况 能得到最大值: 只使用 nums[i], 例如 [0.1, 0.3, 0.2, 100] 则 [100] 是最大值使用 max(nums[0…i-1]) * nums[i], 例…...
[MRCTF2020]Ez_bypass1(md5绕过)
[MRCTF2020]Ez_bypass1(md5绕过) 这道题就是要绕过md5强类型比较,但是本身又不相等: md5无法处理数组,如果传入的是数组进行md5加密,会直接放回NULL,两个NuLL相比较会等于true; 所以?id[]1&gg…...
MySQL 缓存机制与架构解析
目录 一、MySQL缓存机制概述 二、MySQL整体架构 三、SQL查询执行全流程 四、MySQL 8.0为何移除查询缓存? 五、MySQL 8.0前的查询缓存配置 六、替代方案:应用层缓存与优化建议 总结 一、MySQL缓存机制概述 MySQL的缓存机制旨在提升数据访问效率&am…...
LabVIEW自定义测量参数怎么设置?
以下通过一个温度采集案例,说明在 LabVIEW 中设置自定义测量参数的具体方法: 案例背景 假设使用 NI USB-6009 数据采集卡 和 热电偶传感器 监测温度,需自定义以下参数: 采样率:1 kHz 输入量程:0~10 V&a…...
海思的一站式集成环境Hispark Studio更新了
HiSpark Studio是海思提供的面向智能设备开发者提供一站式集成开发环境,支持代码编辑、编译、烧录和调试等功能。我以前在评测星闪芯片的时候用过,当时写了篇博客:【星闪开发连载】WS63E开发板Windows环境的构建_hispark studio-CSDN博客。那…...
TresJS:用Vue组件构建3D场景的新选择
在当今数字化时代,3D图形技术正以前所未有的速度发展,从游戏开发到虚拟现实(VR)、增强现实(AR),再到各种沉浸式体验,3D技术的应用场景日益丰富。TresJS作为一款基于Three.js的Web3D开…...
Axure设计教程:动态排名图(中继器实现)
一、开篇 在Axure原型设计中,动态图表是展示数据和交互效果的重要元素。今天,我们将学习如何使用中继器来创建一个动态的排名图,该图表不仅支持自动轮播,还可以手动切换,极大地增强了用户交互体验。此教程旨在提供一个…...
攻防世界 文件上传
题目名称-文件包含 今天的题大概提一下解题思路就好了 这里要使用php://filter 在此基础上因为网页过滤了一些关键字 我们要进行爆破 UCS-4* UCS-4BE UCS-4LE* UCS-2 UCS-2BE UCS-2LE UTF-32* UTF-32BE* UTF-32LE* UTF-16* UTF-16BE* UTF-16LE* UTF-7 UTF7-IMAP UTF-8* ASCII…...
从 .NET Framework 升级到 .NET 8 后 SignalR 问题处理与解决方案
随着 .NET Framework 向 .NET 8 的迁移,许多开发者在使用 SignalR 时遇到了一些前后端连接、配置、调用等方面的问题。尤其是在处理 SignalR 实时通信功能时,升级后的一些兼容性问题可能导致应用程序无法正常工作。本文将介绍在从 .NET Framework 升级到…...
《Node.js Express 框架》
《Node.js Express 框架》 引言 Node.js 是一种基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 来编写服务器端代码。Express 是一个简洁、灵活的 Node.js Web 应用框架,它为 Web 和移动应用程序提供了一系列强大的功能。本文将详细介绍 Node.js …...
Unity LineRenderer 画线及代码控制--Unity小记
Unity LineRenderer 画线及代码控制 目录 Unity LineRenderer 画线及代码控制 一、添加LineRenderer 组件 二、LineRenderer设置起始坐标 三、设置LinRenderer 四、代码片段,找代码直接点我(找代码直接点我) 一、添加LineRenderer 组件…...
llama.cpp GGML Quantization Type
llama.cpp GGML Quantization Type 1. GGML Quantization Type2. static const struct ggml_type_traits type_traits[GGML_TYPE_COUNT]3. Q#_K_M and Q#_KReferences 什么神仙妖魔,不过是他们禁锢异族命运的枷锁! GGUF https://huggingface.co/docs/hu…...
k8s部署go-fastdfs
前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 制备器的具体部署方式可参考我的上一篇文章: k8s部署rabbitmq-CSDN博客文章浏览阅读254次,点赞3次,收藏5次。k8s部署rabbitmqhttps://blo…...
Python----Python高级(并发编程:协程Coroutines,事件循环,Task对象,协程间通信,协程同步,将协程分布到线程池/进程池中)
一、协程 1.1、协程 协程,Coroutines,也叫作纤程(Fiber) 协程,全称是“协同程序”,用来实现任务协作。是一种在线程中,比线程更加轻量级的存在,由程序员自己写程序来管理。 当出现IO阻塞时,…...
什么是可观测性?
现代服务架构常常谈及三个性: 弹性,韧性,可观测性。今天且按下其他两性不表,着重聊一聊可观测性。本文就几个主题对可观测性展开讨论: 可观测性是什么可观测性是必须的吗企业的可观测性落地 可观测性理念 可观测性是…...
3. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--环境搭建
构建现代云原生应用程序时,开发环境的搭建至关重要。NET Aspire 作为一款专为云原生应用设计的开发框架,提供了一整套工具、模板和集成包,旨在简化分布式系统的构建和管理。开始项目初始化之前,确保开发环境的正确配置是成功的第一…...
kubeadm构建k8s源码阅读环境
目标 前面看了minikube的源码了解到其本质是调用了kubeadm来启动k8s集群,并没有达到最初看代码的目的。 所以继续看看kubeadm的代码,看看能否用来方便地构建源码调试环境。 k8s源码编译 kubeadm源码在k8s源码库中,所以要先克隆k8s源码。之…...
【Flink快速入门-1.Flink 简介与环境配置】
Flink 简介与环境配置 实验介绍 在学习一门新的技术之前,我们首先要了解它的历史渊源,也就是说它为什么会出现,它能够解决什么业务痛点。所以本节我们的学习目的是了解 Flink 的背景,并运行第一个 Flink 程序,对它有…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
