面经 - DNS底层用的协议
DNS(Domain Name System)底层主要使用UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)两种协议,具体取决于查询的场景和需求。
1.DNS主要使用UDP协议默认情况下,DNS查询使用UDP协议(端口号53)。
特点:
UDP是一种无连接的协议,传输速度快,但不保证数据的可靠性和完整性。
DNS查询通常是短小的请求和响应,UDP的轻量级特性非常适合这种场景。
UDP的默认最大传输数据包大小为512字节(传统限制),但现代DNS可能支持更大的UDP包(通过EDNS0扩展)
适用场景:
大多数标准的DNS查询(如A记录、AAAA记录、CNAME等)。
快速解析域名,适合对速度要求较高的场景。
2.DNS也使用TCP协议当DNS查询的数据量超过UDP的限制(如512字节),或者需要更高的可靠性时,DNS会使用TCP协议(端口号53)。
特点:
TCP是一种面向连接的协议,保证数据的可靠传输。
TCP支持更大的数据传输,适用于复杂或数据量较大的查询。
使用场景
区域传输(Zone Trans ...
深入理解Linux网络笔记-第一章内核是如何接收网络包的
2.2.1 linux网络收包总览用户进程$~~~$|应用层 客户端| —–> HTTP、FTP
————-| socket|———————-
Linux内核 $~~~~~~~~$| 传输层 | —–> TCP、UDP
协议栈 | 网络层 | -----> IP、ICMP以及IGMP
----------------------------------------------
驱动 | 链路层 | -----> 网络设备驱动
| 物理层 | -----> 网卡、网线
内核和网络设备驱动通过中断方式处理。而且对于网络模块中断,由于处理过程比较复杂和耗时,如果在中断函数中完成所有处理,会导致中断处理函数(优先级过高)过度占用CPU,使得CPU无法响应其他设备,例如鼠标和键盘。
Linux中断处理函数分为上、下部分。上半部分只进行简单的 ...
深入理解Linux网络笔记-第一章绪论
1.1.6 软中断和硬中断在内核的网络模块中,有两个很重要的组件,硬中断和软中断等。软中断还分成了NET_RX(R指的是Receive)和NET_TX(T指Transmit)等。RX->接受,TX->发送。
Linux上使用top等命令查看CPU开销时,展示结果中把总开销分成了us、sy、hi、si等几项。其中us是花在用户空间的CPU占比,sy是内核空间的占比,hi是硬中断消耗占比,si是软中断消耗占比。
面经 - 中断相关
概念中断(Interrupt)是一种硬件或软件机制,用于在计算机系统中处理意外事件或请求。当中断发生时,CPU会暂停当前正在执行的任务,转而处理中断请求。中断可以来自硬件设备(如键盘、鼠标、硬盘等)或软件程序(如系统调用、异常处理等)。
中断的分类1. 硬件中断由外部硬件设备发起的中断。例如,键盘按键、鼠标移动、硬盘读写数据完成等。
硬件设备通过特定的中断引脚(如中断请求线IRQ)向CPU发送中断信号。
2. 软件中断由软件程序主动发起的中断。例如,系统调用(如int0x80在Linux中)或异常处理(如除零错误、非法指令等)。
软件中断通常通过特定的指令(如int指令)或异常触发机制实现。
中断处理过程当中断发生时,CPU会执行一系列操作来处理中断请求。以下是中断处理的主要步骤:
中断请求: 硬件设备或软件程序发起中断请求。硬件中断通过中断引脚发送信号,软件中断通过特定指令触发。
中断响应: CPU检测到中断信号后,会暂停当前正在执行的任务,并保存当前任务的上下文信息(如程序计数器PC、寄存器状态等)。 CPU通过中断响应信号(如INTA)告知硬件设备已收到中断请求。
中断处理 ...
面经 - CAP定理
概念CAP定理(Consistency,Availabili,Partition Tolerance) 是分布式系统领域的一个重要理论。它描述了分布式系统在设计时需要在三个关键特性之间做出权衡,即一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。
CAP定理的核心内容在一个分布式系统中,以下三个特性无法同时完全满足:
一致性(Consistency): 所有节点在同一时间看到相同的数据。 当一个节点更新数据后,其他节点立即能够看到这个更新。 例如: 在分布式数据库中,所有副本的数据完全一致。
可用性(Availability): 系统在任何情况下都能响应客户端的请求。 即使部分节点失败或网络出现分区,系统仍然能够处理请求并返回结果
分区容错性(Partition Tolerance): 系统能够容忍网络分区(即节点之间的通信中断) 在分布式系统中,网络分区是不可避免的,因此分区容错性是必须满足的。
根据 CAP定理,在分布式系统中,只能同时满足其中的两个特性,而无法同时满足全部三个特性。
三种权衡组合
CP ...
面试复盘 - 腾讯云智移动客户端 一面
Q 那我问你一个问题qt,然后渲染图片那个组件叫什么
A 关于图片,我重新画了一下吧,当然对,重新画了一下。
分析1:QPainter:QPainter是一个基于扫描线的图形渲染引擎,可以用于绘制各种图形和文本,包括图片。它与特定设备的 QPainterDevice对象交互,将二维图形呈现到窗口上。QPainter可以与QWidget或其他显示设备(如QImage或QPrinter)配合使用,因此你可以在屏幕上轻松地呈现复杂的几何图形和文本。
Q 重新画了一下,是他肯定要从客户端或者说你的服务端里面读一张牌信息,还是说你整个牌都是自己画的。
A 整个牌是存储在本地的牌的信息,然后把那个排的信息存储到本地之后,从本地第就是拿本地的图片去做。
Q 本地的图片去做,那你本地的图片怎么去都提升了?是你本地存了各种牌64章。
A 对本地存了64张牌。
Q 本地测试做对应的是吧?
A 对。
Q 有个小问题,那你本地的图片放在抽屉上,展示qt有组件可以,控件可以展示的。
A 这个不记,这个不记得。
分析2:QPainter,同上一个分析
Q QT常见的生命周期函数。
A 生命周期函数。 ...
面经 - 一致性哈希
概念一致性哈希是一种用于分布式系统中的哈希算法,主要用于解决分布式缓存、负载均衡等问题,特别是在服务器节点动态增减的情况下,能够尽量减少数据的重新分配。
基本原理
普通哈希的局限性: 在传统的哈希算法中,数据通过哈希函数映射到某个服务器节点上。例如,使用取模的模式: server_id = hash(key) mod N 其中N是服务器的数量
当服务器数量N发生变化(如增加或减少服务器)时,几乎所有的数据都需要重新分配到新的服务器上,这会导致大量的数据迁移和性能问题
一致性哈希的改进: 一致性哈希通过引入一个”哈希环”来解决这个问题。所有服务器节点和数据都被映射到一个虚拟的环形空间上。
数据的存储位置由其哈希值在环上的位置决定,数据会被分配到顺时针方向最近的服务器节点。
当服务器节点增加或减少时,只有那些哈希值落在被修改节点附近的数据需要重新分配,而其他数据的存储位置保持不变。
一致性哈希的步骤
构建哈希环: 将服务器节点的标识(如IP地址或名称)通过哈希函数映射到一个0到2的32次方(或更大的范围)的环形空间上。
每个服务器节点在环上占据一个位置。
数据分配 ...
讯兔科技算法工程师-半程实习总结
第一次线下实习之前有一次线上实习,主要是做PPT和整理资料,是关于一个外国实验的,跟开发没啥太大关系。所以呢,这次实习对我来说真的是第一次真正意义上的开发实习。实际参与到产品开发中,在从头开始做一个产品模块,最后还成功上线了。这对我来说是一次难得的经历,不仅让我学到了很多实用的技术,也让我对整个从零到一再到上线的流程有了更深的认识。第一次投简历是在大二的时候,面试的第一个职位是关于QT开发的。那时候完全是第一次面试,过于小白,甚至连自我介绍都没准备,结果不出所料地没通过(QAQ)。我拿到的第一个offer来自一家做数据收集的公司,可能会用到爬虫技术。但那时我因为某些原因拒绝了这个机会,现在想想还挺后悔的,因为这算是我在整个大二离实习offer最近的一次了。大三的时候我又开始投简历了,因为那段时间脱不开身去不了现场。第一波投递拿了一家不到50人的小公司的远程offer,做了大概两个月吧,主要是做MIT实验的PPT。这段经历最大的收获就是学会了Git的一些操作,像push啊、创建分支之类的,都是那时候学的。还有就是通过这个实习,我强制自己完成了几个MIT操作系统的实验,这实验我一直想做但没 ...
C++20设计模式-9-装饰器模式
9.1 预想方案123456789101112131415161718192021222324252627282930#include <iostream>#include <sstream>#include <string>struct Shape{ virtual std::string str() const = 0;};struct Circle : Shape{ float radius; explicit Circle(const float radius) : radius{radius} {} void resize(float factor) { radius *= factor; } std::string str() const override { std::ostringstream ...
C++20设计模式-8-组合模式
8.0 开篇1234567891011121314151617181920212223242526#include <generator>#include <iostream>#include <coroutine>#include <ranges>class Values{public: std::generator<int> operator()() { co_yield 1; co_yield 2; co_yield 3; }};int main(void){ Values v; for (auto i : v()) std::cout << i << ' '; return 0;}
8.1 支持数组形式的属性12345678910111213141516171819202122232425262728293031323334 ...
