自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ape's IT Blog

C/C++/Data Structure/Linux/OS/Internet/MySQL/Docker/Algorithm

  • 博客(422)
  • 收藏
  • 关注

原创 【计算机组成】一文带你看懂SRAM,DRAM

SRAM和DRAM是计算机系统中两种重要的内存类型,它们各有优缺点,适用于不同的应用场景。SRAM速度快、稳定性高,但成本高、密度低,适合用作高速缓存;DRAM成本低、密度高,但速度较慢、功耗较高,适合用作主内存。在Linux系统中,启动后的第一个用户空间进程是init进程(或systemd),它负责启动系统中的其他进程和服务。当使用Xshell登录云服务器时,登录后的第一个进程通常是用户的shell进程,如bash。

2025-02-15 10:37:58 901 1

原创 【Docker】Docker中卷的类型、区别及应用

Docker卷是Docker中用于持久化数据的重要机制,提供了多种类型的卷以满足不同的应用场景。匿名卷和命名卷适用于需要持久化数据的场景,绑定挂载适用于开发环境,临时文件系统适用于存储临时数据。理解这些卷的类型、区别及应用场景,有助于开发者更好地管理和使用Docker容器。在实际应用中,开发者应根据具体需求选择合适的卷类型,以确保数据的安全性和性能。通过合理使用Docker卷,可以大大提高容器化应用的可靠性和可维护性。

2025-02-15 09:19:51 986

原创 【Docker】Docker Run 中指定 `bash` 和 `sh` 参数的区别:深入解析与实践指南

ps是 Linux 系统中用于查看进程状态的命令。它支持多种参数选项,用于显示不同的进程信息。在docker run中,bash和sh是两种常见的 Shell 解释器,bash功能更丰富,适合交互式操作,而sh更轻量,适合执行简单脚本。ps -ef和ps aux是 Linux 系统中常用的进程查看命令,ef和aux分别表示不同的输出格式和信息内容。aux在 Shell 命令中用于查看进程信息,而在 Docker 命令中并不常见,Docker 使用其他参数来管理容器和镜像。

2025-02-15 09:17:15 776 3

原创 【Docker】容器被停止/删除的方式及命令:全面解析与实践指南

容器的停止和删除是 Docker 日常操作中的重要环节。通过合理使用docker rm等命令,我们可以高效地管理容器的生命周期,确保资源的合理利用和环境的整洁。希望本文能为 C++ 程序员在 Docker 容器管理方面提供实用的指导和帮助。参考文献Docker 官方文档: https://docs.docker.com/Docker 容器管理最佳实践: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

2025-02-14 19:49:39 1216

原创 【Docker 】虚悬镜像:深入理解与清理实践

虚悬镜像是指那些没有标签(Tag)且没有被任何容器引用的镜像。镜像重建:当你重新构建一个镜像时,Docker 会为新的镜像分配一个新的镜像 ID,而旧的镜像 ID 就会变成虚悬镜像。删除标签:如果你手动删除了一个镜像的标签,而这个镜像没有被其他标签引用,那么它也会变成虚悬镜像。镜像分层:Docker 镜像是由多个分层组成的,当某个分层不再被任何镜像引用时,它也会变成虚悬镜像。虚悬镜像的名称通常显示为,表示它们没有标签和版本信息。

2025-02-14 15:58:08 653

原创 在AI迭代如此之快的时代下,如何做好一个C++程序员

在 AI 迭代如此之快的时代下,C++ 程序员需要不断提升自身能力,适应技术变革。通过深入掌握 C++ 语言特性、学习 AI 相关知识、关注行业动态、提升软技能以及积累项目经验,C++ 程序员可以在 AI 时代中保持竞争力,并在职业生涯中持续成长。无论是技术专家、全栈工程师还是技术管理者,持续学习和实践都是成功的关键。希望本文能为 C++ 程序员在 AI 时代的发展提供有价值的参考和指导。

2025-02-13 10:15:35 547

原创 【CPP】一文带你掌握CPP设计模式

设计模式是软件开发中用于解决常见问题的经典解决方案。它们是由经验丰富的开发者总结出来的最佳实践,能够提高代码的可维护性、可扩展性和可复用性。设计模式是软件开发中的经典解决方案,能够提高代码的可维护性、可扩展性和可复用性。通过掌握常见的设计模式,开发者可以更好地组织代码结构,解决复杂问题。理解模式的核心思想:每个设计模式都有其独特的应用场景和解决问题的方式。灵活运用:在实际开发中,根据具体需求选择合适的设计模式。避免过度设计:设计模式是工具,而不是目标,避免为了使用模式而增加不必要的复杂性。

2025-02-12 09:32:18 794

原创 【面试】面试常见的智力题

智力题是一种通过逻辑推理、数学计算或创造性思维来解决的问题。它们通常没有固定的解题模式,需要候选人灵活运用知识和技巧。问题描述为什么井盖通常是圆形的?解题思路从几何、物理和实用性角度分析。答案安全性:圆形井盖不会掉入井口,因为直径相等。易于搬运:圆形井盖可以滚动,便于搬运。均匀受力:圆形结构受力均匀,不易损坏。智力题是面试中常见的考察方式,旨在测试候选人的逻辑思维能力、创造性思维和应变能力。通过掌握常见的智力题类型和解题技巧,候选人可以在面试中更加自信地应对这类问题。多练习。

2025-02-11 11:54:36 1441 4

原创 【Docker】从瀑布开发到敏捷开发

瀑布开发是一种线性的、阶段化的软件开发方法。其核心思想是将软件开发过程划分为多个明确的阶段,每个阶段必须在前一个阶段完成后才能开始。瀑布开发的名称来源于其阶段之间的顺序流动,类似于瀑布的水流。敏捷开发是一种以人为核心、迭代和增量的开发方法。其核心思想是通过小步快跑的方式快速交付可用的软件,并在开发过程中不断适应变化。个体和互动高于流程和工具。可用的软件高于详尽的文档。客户合作高于合同谈判。响应变化高于遵循计划。从瀑布开发到敏捷开发,软件开发方法论的演进反映了行业对灵活性、效率和用户价值的追求。

2025-02-11 09:27:47 807 2

原创 【Linux】一文带你读懂Linux文件系统

什么是文件系统?答案:文件系统是操作系统用于管理存储设备上数据的一种机制。它定义了数据的存储方式、组织结构以及访问方法。文件系统的主要功能包括:管理文件和目录。控制文件的访问权限。提供数据的持久化存储。Linux 文件系统是 Linux 操作系统的核心组成部分,理解其工作原理和管理方法对于系统管理员、开发者和运维工程师来说至关重要。本文涵盖了 Linux 文件系统的各个方面,包括其结构、类型、管理工具以及性能优化等内容,希望能够帮助读者全面掌握 Linux 文件系统的知识。

2025-02-10 19:34:18 1735 8

原创 【Docker】从技术架构到容器实战{空间隔离/资源控制/LXC容器/mount}

空间隔离通过 NameSpace 机制实现了系统资源的逻辑隔离,确保不同的进程或应用运行在独立的环境中,互不干扰。通过unshare命令,可以创建新的 NameSpace,并运行进程在该 NameSpace 中。操作系统在底层通过创建新的 NameSpace、隔离资源、挂载文件系统等操作,实现了资源的隔离和管理。空间隔离是容器技术(如 Docker)的基础,它使得容器可以在独立的运行环境中运行,确保容器的安全性和资源管理的灵活性。

2025-02-10 12:39:28 1263

原创 【QT】 Qt经典面试题

Qt 是一个跨平台的 C++ 框架,广泛应用于图形用户界面(GUI)开发、嵌入式系统、网络编程等领域。由于其强大的功能和灵活性,Qt 开发者在面试中常常会遇到各种深入的问题。本文将探讨一些经典的 Qt 面试题,涵盖从基础概念到高级特性的多个方面,帮助读者更好地准备面试。什么是 Qt 的信号与槽机制?什么是 Qt 的元对象系统?什么是 Qt 的插件系统?Qt 中有哪些常见的布局管理器?什么是 Qt 的模型/视图架构?Qt 中有哪些常见的窗口部件?Qt 的未来发展方向是什么?Qt 的核心特性有哪些?

2025-02-09 15:16:53 1303 1

原创 【CPP】C++后端开发面试:深入理解编程中的锁机制

在C++后端开发中,选择合适的锁机制对于保证多线程程序的正确性和性能至关重要。互斥锁:适用于简单的临界区保护。递归锁:适用于可能递归调用的场景。读写锁:适用于读多写少的场景。自旋锁:适用于锁持有时间非常短的场景。条件变量:适用于线程间需要等待特定条件的场景。理解这些锁机制的区别和应用场景,可以帮助开发者编写出更高效、更安全的多线程程序。在实际开发中,应根据具体需求选择合适的锁机制,并注意避免死锁、竞争条件等常见问题。在多线程编程中,选择合适的锁机制和并发控制策略是确保程序正确性和性能的关键。

2025-02-07 18:17:02 1633

原创 【Redis】事务因WATCH的键被修改而失败 事务队列中的操作被自动丢弃 UNWATCH的应用场景

优先使用Lua脚本:Lua脚本可以避免事务冲突和重试开销,是最推荐的解决方案。优化数据模型和事务范围:减少事务冲突的概率。指数退避和异步重试:降低重试带来的开销。乐观锁和批量操作:进一步优化性能。通过以上方法,可以有效减少因WATCH失败导致的事务重试开销,提升系统性能。UNWATCH是 Redis 中与WATCH配合使用的命令,用于取消对所有键的监控。理解UNWATCH的应用场景需要先明确WATCH的作用。WATCH的作用WATCH用于监控一个或多个键,如果在事务执行期间(即MULTI和EXEC。

2025-02-07 11:34:32 1092

原创 【Linux】Linux经典面试题

在Linux文件系统中,每个文件都有一个唯一的inode(索引节点)。inode存储了文件的元数据,包括文件的大小、权限、所有者、组、时间戳(如创建时间、修改时间等)以及指向文件数据块的指针。文件名并不存储在inode中,而是存储在目录项中。目录项将文件名与inode号关联起来。如何查看文件的inode号?可以使用ls -i命令查看文件的inode号。Linux作为C++程序员的重要开发环境,掌握其核心概念和常用工具是必不可少的。

2025-02-06 10:50:11 988

原创 【CPP】CPP经典面试题

多重继承可能导致菱形继承问题(Diamond Problem),即一个类从两个基类继承,而这两个基类又共同继承自同一个基类,导致派生类中包含多个相同的基类子对象。虚函数是用于实现多态的机制。显式特化是为特定类型提供完全不同的实现,而部分特化是为特定类型的一部分提供不同的实现。显式特化是为特定类型提供完全不同的实现,而部分特化是为特定类型的一部分提供不同的实现。RAII 原则是指将资源的生命周期与对象的生命周期绑定,通过对象的构造函数获取资源,通过析构函数释放资源,确保资源在对象销毁时自动释放。

2025-02-05 19:28:27 1426

原创 【C语言】C语言经典面试题详解

问题:什么是函数指针?如何使用?解答函数指针是指向函数的指针变量。通过函数指针,可以动态调用不同的函数。示例// 调用add函数关键点函数指针的类型必须与所指向函数的签名一致。函数指针可以用于回调函数、函数表等场景。问题:什么是宏定义?函数宏与普通函数有什么区别?解答宏定义是通过#define指令定义的文本替换规则。宏在预处理阶段被替换为定义的文本。函数宏是带有参数的宏,类似于函数调用,但在预处理阶段进行文本替换。示例// 预处理后替换为: int max = ((x) > (y)

2025-02-05 16:10:57 1158 1

原创 【CPP】迭代器失效问题 static和inline

指的是在容器进行某些操作后,原先获取的迭代器不再指向有效的元素或位置。迭代器失效可能会导致未定义行为(如访问无效内存、程序崩溃等)。不同的容器在特定操作下会有不同的迭代器失效行为。理解迭代器失效的场景和规则,可以帮助你编写更安全、更健壮的C++代码。

2025-02-04 18:41:27 709

原创 【CPP】异步操作的底层原理与应用举例

非阻塞 I/O:允许程序在等待 I/O 操作完成时继续执行其他任务。事件循环:监听和分发事件,调用相应的回调函数。回调机制:处理异步操作完成后的结果。多线程与线程池:通过多线程实现并发执行。操作系统支持:提供高效的异步 I/O 机制。异步操作在网络服务器、文件读写、定时任务等场景中都有广泛的应用。通过理解异步操作的底层原理,我们可以编写出高效、并发的程序。希望这篇文章能帮助你更好地理解异步操作的工作机制!如果你有任何问题或想法,欢迎在评论区讨论!

2025-02-04 17:33:46 390 1

原创 【CPP】协程的底层原理:如何实现异步与挂起

协程是一种可以挂起和恢复执行的函数。与普通函数不同,普通函数一旦开始执行,就必须运行到结束,而协程可以在执行过程中暂停,保留当前的执行状态,并在稍后的某个时间点恢复执行。协程帧:用于保存协程的执行状态。挂起与恢复机制:通过co_await和co_yield实现协程的挂起和恢复。编译器生成的代码:编译器会生成额外的代码来管理协程的状态。事件循环与调度器:事件循环和调度器是协程异步实现的核心组件。通过理解这些底层原理,我们可以更好地掌握协程的工作机制,并编写出高效、简洁的异步代码。

2025-02-04 16:44:32 1044

原创 【CPP】一文带你读懂什么是协程

协程是一种特殊的函数,它可以在执行过程中暂停(挂起),并在稍后的某个时间点恢复执行。与普通的函数不同,普通函数一旦开始执行,就必须运行到结束,而协程可以在中途暂停,保留当前的执行状态,等到需要时再继续执行。协程是 C++20 引入的一个重要特性,它允许我们以同步的方式编写异步代码,极大地简化了异步编程的复杂性。协程在网络编程、游戏开发、数据处理等场景中都有广泛的应用。通过协程,我们可以写出更加简洁、易读、高效的代码。希望这篇文章能帮助你理解 C++ 协程的概念和应用。

2025-02-04 16:42:35 829

原创 【操作系统】同步与异步,同步与互斥

同步是任务按照顺序依次执行,通常是阻塞的。异步是任务在后台执行,不会阻塞主线程,通常通过回调、Future/Promise、事件循环或协程来实现。互斥用于保护共享资源,防止多个线程同时访问,常用的机制有互斥锁、条件变量和信号量。理解这些概念并正确使用它们,是写出高效、安全并发代码的关键。希望这篇文章能帮助你更好地理解同步、异步和互斥的概念。如果你有任何问题或想法,欢迎在评论区讨论!

2025-02-04 16:12:36 716

原创 【分布式】服务端高并发分布式结构演进

服务端高并发分布式结构的演进是一个循序渐进的过程,每个阶段都有其特定的技术挑战和解决方案。从单机架构到微服务架构,系统的复杂度逐渐增加,但系统的性能、可扩展性和可用性也得到了显著提升。在实际应用中,技术团队需要根据业务需求和用户量的变化,灵活选择适合的架构方案,并在系统演进过程中不断优化和调整。总的来说,服务端架构的演进不仅仅是技术的升级,更是对业务需求和技术团队能力的不断挑战。只有通过不断的实践和优化,才能构建出真正高可用、高并发、高性能的分布式系统。

2025-02-04 10:00:01 1572 3

原创 【MySQL】MySQL经典面试题深度解析

原理层面:深入理解MySQL的存储引擎、索引、事务等核心机制编码实践:熟练使用C++进行高效的数据库操作性能调优:具备诊断和优化数据库性能的能力架构设计:设计高可用、高性能的数据库方案推荐实践路线实现一个高性能的连接池设计并优化一个复杂查询搭建主从复制集群研究MySQL源码的关键模块通过持续实践和深入学习,您将成为真正的MySQL专家,在C++高性能开发领域占据优势地位。

2025-02-04 09:33:08 1120 3

原创 【ProtoBuf】C++开发者必知的Protobuf经典面试题深度解析

C++类型Protobuf类型内存开销适用场景string动态分配长文本、二进制数据bytes动态分配原始字节流int32_tfixed324字节大数值(>2^28)int64_tsfixed648字节精确时间戳repeated连续内存同类型数据集合原理层面:理解Varint编码、TLV结构、反射系统等底层机制编码实践:熟练运用Arena、CodedStream等高级API性能调优:具备诊断和优化序列化性能的能力工程能力:设计企业级的Protobuf应用架构。

2025-02-03 15:55:09 1074

原创 【Docker】C++开发者必知的Docker经典面试题全解析

Docker核心概念在C++场景下的特殊考量容器化C++应用的构建、调试、优化全流程生产环境中的最佳实践与排错技巧应对高级面试的综合解决方案将现有C++项目Docker化尝试多阶段构建优化镜像体积在容器中重现并解决一个历史bug设计容器化的CI/CD流水线随着云原生技术的不断发展,掌握Docker已成为C++开发者进阶的必备技能。保持对容器运行时(如containerd)、安全容器(如Kata Containers)等新技术的关注,将助于在职业发展中始终保持竞争力。

2025-02-03 15:48:26 764

原创 【Redis】Redis 经典面试题解析:深入理解 Redis 的核心概念与应用

Redis 是一个功能强大且灵活的工具,掌握其核心概念和应用场景对于面试和实际开发都非常重要。本文涵盖了 Redis 的经典面试题,包括数据结构、持久化、高可用性、缓存淘汰策略、分布式锁等内容。希望这些解析能帮助读者更好地理解 Redis,并在面试中脱颖而出!如果你对 Redis 的其他问题感兴趣,欢迎在评论区留言讨论!

2025-02-02 11:39:34 1380

原创 【C++面试题】malloc和new delete和delete[]

malloc是 C 标准库中的函数,底层依赖于操作系统的内存管理机制(如brksbrk或mmap),主要用于分配原始内存块。new是 C++ 中的操作符,底层通常调用malloc来分配内存,并自动调用对象的构造函数来初始化对象。两者在内存分配和管理上有相似之处,但new提供了更高层次的功能,特别是在对象构造和异常处理方面。在 C++ 中,delete和delete[]是用于释放动态分配内存的操作符,但它们的行为和用途有所不同。

2025-02-02 11:32:54 961

原创 【ProtoBuf】Protocol Buffers完全指南:从零掌握高效数据交换技术

/ 必须显式声明版本// 字段编号必须>0// 字符串类型// 布尔类型// 重复字段(数组)// 映射类型MOBILE = 0;HOME = 1;WORK = 2;在现有项目中替换一个JSON API接口为protobuf格式尝试使用protobuf定义完整的业务对象模型使用Wireshark抓包对比protobuf和JSON的网络传输量参与protobuf官方GitHub社区的讨论。

2025-02-01 19:46:21 937

原创 【Redis】Redis入门完全指南:从零开始掌握这个高性能数据库

你已经掌握了Redis的核心概念和实战技巧。在本地搭建Redis环境尝试所有基础命令用Redis改造现有项目的某个模块探索Redis的Stream和地理空间索引等高级功能。

2025-02-01 19:41:21 860

原创 【计算机网络】设备更换地区后无法访问云服务器问题

更换地区后无法访问云服务器

2025-01-30 18:11:05 1190

原创 【力扣系列题目】最后一块石头的重量 分割回文串 验证回文串 等差数列划分{最大堆 背包 动态规划}

【力扣系列题目】最后一块石头的重量 分割回文串 验证回文串 等差数列划分{最大堆 背包 动态规划}

2025-01-29 13:10:07 841

原创 【Docker】Docker入门了解

Docker 是一个开源的应用容器引擎,允许你把应用和所有依赖打包到一个标准化的容器里,这样就可以在任何环境中运行。它主要解决了“在我的机器上能运行”的问题,确保你的应用在不同的环境中有一致的表现。简单来说,Docker 就是通过容器化技术,让开发、测试、部署的过程更加高效、轻松。容器是一种轻量级、可移植的虚拟化方式,可以让你在同一台机器上运行多个应用,而不会互相干扰。如果有具体的问题或者需要进一步讲解某部分,随时告诉我!假设你有一个简单的 C++ 应用,并想要将它放进 Docker 容器里运行。

2025-01-27 21:46:20 1501 1

原创 【ProtoBuf 安装】ProtoBuf在window/Linux下的安装 创建/删除swap分区

如果你的系统在没有足够物理内存的情况下运行某些内存密集型程序,可能会遇到性能下降,或者在内存不足时发生程序崩溃,但不会直接导致数据丢失。test的模块⾥⾯有⾮常多的测试⽤例,这些⽤例对服务器环境要求特别严格,需要增⼤下swap分区,具体操作可参考:https://blog.csdn.net/AlexWang30/article/details/90341172。如果你计划长期不使用 swap,可以考虑重新评估系统的内存配置,或者增加物理内存来减少对 swap 的依赖。文件,删除你之前添加的那一行关于。

2025-01-26 15:24:21 838

原创 【Linux线程总结】VMA ELF 地址转换 同步和互斥 条件变量 PC模型 循环队列 POSIX信号量 线程池

【Linux线程总结】VMA ELF 地址转换 同步和互斥 条件变量 PC模型 循环队列 POSIX信号量 线程池

2025-01-26 12:30:08 794

原创 【Linux指令/信号总结】粘滞位 重定向 系统调用 信号产生 信号处理

因为信号处理函数是用户提供的,如果以内核态执行用户代码的话,由于内核态具有完全的访问权限,用户代码可能会修改系统的重要数据,从而导致系统资源和硬件设备遭到破坏。如果信号的处理方法是自定义捕捉,则切换到用户态执行信号处理程序,完成后再次陷入内核,清除对应信号的pending标志,最后返回用户态继续执行用户程序。(即所有者可以读写,所属组可以读,其他人可以读)。如果信号的处理方法是默认或忽略,则直接在内核态完成相应的处理动作(终止进程、暂停进程、清除pending标志),不需要切换到用户态。

2025-01-25 15:24:58 965

原创 【Linux进程总结】PCB 进程创建 进程等待 进程替换 进程通信 前台后台进程

程序映像:【进程地址空间/PCB/页表不二次创建 但是数据会换成新的程序对应的数据】打开的文件描述符:fd默认未设置为FD_CLOEXEC, 默认状态下会保持打开状态。如果设置了FD_CLOEXEC,则会关闭相应的文件描述符。新进程对于fd的值 【假定旧进程打开了fd=3 和fd=4 两个文件】进程替换会替换掉代码和数据,虽然fd没关,但是进程替换后,新进程已经无法知道旧进程打开的fd是多少了。如果要操作旧进程打开的文件,那么新进程就得需要知道旧进程打开的文件fd,如何知道?

2025-01-25 15:14:37 677

原创 【Linux网络总结】字节序转换 收发信息 TCP握手挥手 多路转接

/ 点分十进制转二进制===主机转网络// 二进制转点分十进制===网络转主机//二进制转点分十进制存到静态缓冲区 存在线程安全问题// 成功返回strptr 失败返回NULL并设置errnoipv6 -- 16byte -- 128位// 对于 IPv4 地址,strptr缓冲区大小至少应为 INET_ADDRSTRLEN(通常为 16 字节);// 对于 IPv6 地址,缓冲区大小至少应为 INET6_ADDRSTRLEN(通常为 46 字节)。

2025-01-23 19:34:39 818 2

原创 【Redis】在ubuntu上安装Redis

redis安装

2025-01-23 15:31:23 564

原创 【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}

Redis入门第一篇

2025-01-23 15:09:57 742

空空如也

空空如也

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

TA关注的人

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