自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1393)
  • 收藏
  • 关注

原创 【百战面试-45】CLOCK

相较于严格的LRU算法,CLOCK实现更简单,性能接近,因此在操作系统中广泛应用(如Linux的。如果替换一个被修改的页面,需要先写回磁盘,增加I/O开销。因此,改进的CLOCK算法(如。当需要替换页面时,算法按顺序扫描页面,并根据。之间取得了良好平衡,是操作系统中最常用的页面置换算法之一。:如果所有页面频繁访问,CLOCK会退化成类似FIFO的策略。进一步优化了I/O开销,使其成为现代系统的高效选择。(类似时钟的指针循环移动),每个页面关联一个。:无法严格保证替换最久未使用的页面。

2025-04-04 13:33:05 236

原创 【百战面试-44】动态扩展服务器

服务器动态扩展是现代分布式系统的核心能力,指根据实时负载情况。关键是根据业务特点选择合适的扩展粒度和速度。的组合方案,而传统企业可能选择。服务器动态扩展的本质是。

2025-04-03 18:41:06 253

原创 【百战面试-43】不借助第三方库实现动态扩展服务器数量

在纯C++环境下实现服务器动态扩展,需要设计合理的架构和控制机制。

2025-04-03 18:37:27 594

原创 【百战面试-42】内存泄露检测方法

内存泄漏是 Python 开发中常见的问题,尤其是长期运行的服务。以下是全面的内存泄漏检测方法和解决方案。内存泄漏是 C++ 开发中最常见的问题之一,以下是全面的检测方案和工具链,从基础检查到高级工具应有尽有。:没有单一工具能100%检测所有泄漏,组合使用才是王道!:速度慢(降低10-20倍):Windows 支持不完善。:检测所有类型的内存问题。:需 C++23 的。:无法定位具体泄漏点。

2025-04-03 18:26:45 513

原创 【百战面试-41】如何在日志避免字符串拼接

在Python中要实现完全不创建新对象的字符串拼接是不可能的,因为字符串本身是不可变类型。但我们可以通过以下方法。

2025-04-03 18:22:57 186

原创 【百战面试-40】A*算法多路情况

A算法遇到多条可行路径时的处理策略A算法遇到多条可行路径时的处理策略。

2025-04-03 17:56:24 131

原创 【百战面试-39】A*多路

A算法处理多条等价路径的情况A算法处理多条等价路径的情况。

2025-04-03 17:51:58 227

原创 【百战面经-38】A*例题

A算法实际应用示例A算法实际应用示例。

2025-04-03 17:45:32 341

原创 【百战面经-37】A*算法

A的核心。

2025-04-03 17:38:32 407

原创 【百战面经-36】磁盘调度算法

磁盘调度算法(Disk Scheduling Algorithm)是操作系统。的核心组成部分,用于优化磁盘访问顺序,减少。磁盘(尤其是传统机械硬盘 HDD)的。,并分析它们的特点和适用场景。(如减少磁盘 I/O 延迟)。理解这些算法有助于优化。

2025-04-03 17:36:51 289

原创 【百战面经-35】进程调度算法

进程调度算法(Process Scheduling Algorithm)是操作系统。,以优化系统性能(如吞吐量、响应时间等)。,并分析它们的特点和适用场景。的核心组成部分,用于决定。(如减少平均等待时间)和。(如游戏、嵌入式系统)。理解这些算法有助于优化。

2025-04-03 17:35:29 239

原创 【百战面试-34】页面置换算法

页面置换算法(Page Replacement Algorithm)是操作系统中。时决定哪些内存页应该被换出(写入磁盘),以便为新的页面腾出空间。技术,使得进程可以访问比物理内存更大的地址空间。当进程访问的页面不在物理内存((如 Redis、数据库缓冲池)。,并分析它们的特点和适用场景。的核心组成部分,用于在。理解这些算法有助于优化。(如减少缺页中断)和。

2025-04-03 17:33:56 400

原创 【百战面试-33】从编译角度看菱形继承

希望这份从编译器角度的分析能帮助你更深入理解菱形继承问题!会导致数据冗余和访问二义性。

2025-04-03 17:32:53 346

原创 【百战面试-32】C++的菱形继承问题

Base/ \\ /

2025-04-03 17:31:09 149

原创 【百战面试-31】C++的final和override

关键字主要用于类的继承体系中,帮助开发者更清晰地控制虚函数的重写和类的继承行为。在C++11中引入的。

2025-04-03 17:30:10 97

原创 【面试百战-30】手撕单例模式

指令重排(Instruction Reordering)确实是双重检查锁模式中需要特别注意的问题,特别是在C++11之前的版本中。让我详细解释这个问题及其解决方案。

2025-04-01 22:44:52 247

原创 【百战面经-29】emplace_back VS push_back

的成员函数,用于在容器尾部添加元素,但它们的实现方式和效率有显著区别。

2025-04-01 22:43:18 354

原创 【百战面经-28】Ping工作原理

Ping(Packet Internet Groper)是最常用的网络诊断工具,基于。协议,用于检测主机之间的连通性、延迟和丢包情况。,理解其原理能帮助快速定位问题!Ping 是网络故障排查的。

2025-04-01 22:40:49 489

原创 【百战面试-27】ICMP中标识符和序号的作用

虽然它们经常一起出现,但各自的作用不同。如果需要进一步探讨具体协议(如 IPv6 ICMP 或扩展应用),可以继续深入!是两个关键字段,主要用于。

2025-04-01 22:38:26 512

原创 【百战面试-26】at函数引发vector扩容

的动态扩容机制产生关联。的扩容机制或性能优化策略,可以继续深入!,但它的边界检查行为可能与。可能对性能有轻微影响(对比。不直接引发扩容,但其。

2025-04-01 22:34:41 283

原创 【百战面试-25】ICMP报文标识符的作用

ICMP 标识符是 Ping 协议的“会话 ID”,确保请求和响应正确关联,同时支持多进程并发检测网络连通性。是一个关键字段,主要用于。

2025-04-01 22:34:06 615

原创 【百战面试-24】vector引发扩大

是 C++ 标准库提供的动态数组,其大小可以自动调整,但扩容可能涉及内存重新分配和数据拷贝,影响性能。的“扩大”通常指的是动态扩容(resizing)或容量增长(capacity expansion)。希望这个解释对你有帮助!如果有更具体的场景需求,欢迎进一步讨论。可显著减少动态扩容带来的性能损失。时,会自动扩容(通常按。典型实现(如 GCC 的。

2025-04-01 22:32:18 250

原创 【百战面试-23】vector底层的三个指针-超细节

是 C++ STL 中内存管理的典型指针成员变量,常见于。等动态数组容器的实现中。

2025-04-01 16:06:18 275

原创 【百战面试-22】poll和epoll的输入输出对比

进行深度对比,结合底层机制和实际场景,分析它们的设计差异和性能表现。epoll_create创建实例。epoll_wait等待事件。epoll_ctl注册fd。直接获取就绪events。初始化pollfd数组。遍历所有revents。

2025-04-01 15:41:38 716

原创 【百战面试-21】select和poll的输入输出对比

是早期Unix系统的设计(1983年BSD引入),受限于当时硬件条件(内存昂贵、fd数量少)。的API简单,适合少量fd的场景(如终端交互)。(2002年)是后来引入的优化方案。的行为会破坏现有程序,而。

2025-04-01 15:39:19 722

原创 【百战面试-20】events是输入,revents是输出,怎么理解?

在poll机制中,eventsrevents,这种设计体现了清晰的职责分离。我们可以通过一个生活中的比喻和技术细节来彻底理解它们的区别和协作方式。想象你是一个餐厅老板(),雇佣了一个服务员(events→ 你给服务员的“帮我盯着5号桌(fd)的两种情况:顾客举手(POLLIN)和需要加水(POLLOUT)”(这是你主动设置的,服务员不会修改你的清单)revents→ 服务员返回的“5号桌现在正在举手()”(这是服务员观察到的事实,每次报告后会覆盖上一次的结果)

2025-04-01 15:35:31 446

原创 【百战面试-19】内核只需修改revents,那这个event干什么用

的分工非常明确,它们的协同工作方式是 poll 设计的核心。),明确告知内核:“请帮我监视这个文件描述符的可读和可写事件”。不会被内核修改,应用程序只需在初始化时设置一次,后续调用。设置fd.events = POLLIN | POLLOUT。内核检测到文件描述符状态变化后,会将实际发生的事件(如。2. 将就绪事件写入fd.revents。的值来决定需要监控哪些事件。,减少了不必要的内存写入操作。前重新设置监控条件(对比。必须每次重置形成对比)。,反映当前最新的就绪事件。是用户空间的配置信息,

2025-04-01 15:31:43 748

原创 【百战面试-18】poll 设计中 events 和 revents 分离的原因

poll 系统调用中每个文件描述符对应一个结构,其中包含events和revents两个字段。

2025-04-01 15:30:03 639

原创 【百战面试-17】select,poll,epoll的区别

epoll的这种设计使其成为Linux下高并发网络编程的首选方案,特别是在需要处理大量并发连接的场景下(如Web服务器、即时通讯服务等)。调用select/poll。epoll_ctl添加fd。遍历所有fd检查就绪状态。epoll_wait等待。:每次全量扫描所有fd。

2025-04-01 15:03:33 443

原创 【百战面试-16】事件通知为什么是O(1)

这种设计使得epoll在保持大量连接时,性能几乎不受影响,而select/poll的性能会随连接数线性下降。调用sock_def_readable。调用ep_poll_callback。select/poll 采用。epoll 内核维护了一个。将epitem加入就绪队列。

2025-04-01 15:00:52 761

原创 【面试百战-15】SIP哈希

(但可以扩展为128位)。它结合了**ARX(Addition-Rotation-XOR)**操作,类似于ChaCha/Salsa20等加密算法。,同时提供抗哈希泛洪攻击(Hash-Flooding Attack)的安全性。(Crypto-PRF),专门设计用于。SIP哈希(SipHash)是一种。,以防止DoS攻击。

2025-03-30 22:33:37 889

原创 【面试百战-14】AVL树和红黑树对比

AVL树提供更快的查找但维护成本高红黑树提供更均衡的插入/删除/查找性能在实际系统设计中,红黑树因其综合性能更好而被更广泛采用,特别是在需要频繁更新的场景中。而AVL树则在查找密集型且数据相对静态的场景中表现更优。

2025-03-30 22:27:53 464

原创 【百战面试-13】哈希表扩容缩容和rehash

Rehash是指当哈希表扩容或缩容时,所有元素需要根据新的容量重新计算哈希位置并迁移的过程。哈希表的动态扩容和缩容机制使其能够在保持高效操作的同时适应数据量的变化。理解这些机制对于设计高性能的哈希表实现至关重要,特别是在需要考虑内存使用和响应时间的应用中。

2025-03-30 22:00:42 220

原创 【百战面试-12】CA证书里面有什么

CA证书(Certificate Authority Certificate)是数字证书认证机构颁发的电子文档,用于验证实体身份。

2025-03-30 19:57:08 563

原创 【百战面试-11】BSS

未初始化的全局变量未初始化的静态变量被初始化为0的全局/静态变量。

2025-03-30 19:55:11 513

原创 【百战面试-10】map和unorderedmap

);return h;

2025-03-30 19:53:35 273

原创 【百战面试-9】const和static

是 C/C++ 中的类型限定符,用于指定对象或变量不可被修改。常量变量指针与const函数参数成员函数返回值 的优势提高代码可读性和安全性允许编译器进行更多优化帮助捕获编程错误 关键字 在不同上下文中有不同含义:特点:特点:特点:C++11保证静态局部变量的初始化是线程安全的。全局常量类静态常量静态常量成员函数关键区别特性主要作用定义不可变性控制存储期和可见性变量生命周期与普通变量相同整个程序运行期间

2025-03-30 19:52:19 437

原创 【百战面试-8】volatile具有原子性吗

原子性指一个操作不可被中断,要么完全执行,要么完全不执行。在多线程环境中,原子操作可以防止竞态条件(Race Condition)。volatile❌不提供任何原子性保证❌不能用于线程安全的数据共享✔️适用于硬件寄存器访问和信号处理等特定场景💡在多线程编程中总是优先使用正确理解volatile的局限性对于编写可靠的多线程程序至关重要。在需要原子操作的场景中,C++11引入的<atomic>头文件提供了完整且可移植的解决方案。

2025-03-30 19:38:58 336

原创 【百战面经-7】volatile关键字

是 C/C++ 中的一个类型修饰符,用于告诉编译器不要对被修饰的变量进行某些优化,确保每次访问都直接从内存中读取或写入。典型应用场景1. 硬件寄存器访问2. 多线程共享变量3. 信号处理程序中的变量volatile 与多线程重要说明volatile 不保证原子性:对 volatile 变量的操作不一定是原子的不解决内存可见性问题:现代多核CPU需要内存屏障保证可见性不能替代原子操作或互斥锁:在C++11中应使用 错误用法示例volatile 在 C++11 及以后的变化与

2025-03-30 19:38:22 232

原创 【百战面经-6】为什么原来的观察者需要继承特定接口qt不需要?MOC的魔力

减少耦合:发送者和接收者不需要知道对方的具体类型更灵活:支持多种可调用对象,不限于类成员函数类型安全:编译时检查连接的有效性(使用新式语法时)线程安全:内置跨线程通信机制可扩展:易于添加新的信号和槽而无需修改接口这种设计使Qt信号槽成为比传统观察者模式更强大、更灵活的通信机制,同时保持了类型安全和良好的运行时性能。

2025-03-30 14:00:49 296

文字图片的一些阐述以及补充

文字图片的一些阐述以及补充

2024-06-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除