自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手撕归并排序

归并排序(Merge Sort)是一种分治法(Divide and Conquer)算法,它将一个大问题分解成若干个小问题,解决这些小问题后再将它们合并起来。归并排序的时间复杂度为 O(n·logn),在最坏情况下也表现得非常稳定。

2025-01-02 10:33:12 261

原创 Image Signal Processing (ISP) Pipeline:ISP流程分析

随着数字图像处理技术的不断发展,图像信号处理器(ISP)作为摄像设备中至关重要的部分,扮演着越来越重要的角色。ISP负责将来自传感器的原始图像信号经过一系列处理后转换成最终的图像输出,涵盖了从图像采集、预处理到后期优化的各个环节。本文旨在对ISP Pipeline进行全面的介绍,帮助读者熟悉其整体流程,并深入了解ISP中的各个关键环节。在后续的内容中,我们将逐一对ISP Pipeline中的各个模块进行详细分析,包括其核心概念、原理、以及实际应用中的代码实现。

2024-11-28 10:23:52 2328

原创 找到字符串中所有字母异位词

通过滑动窗口法结合字符计数,可以高效地找到所有异位词。该算法的时间复杂度为线性时间 O(n),适用于大规模字符串的处理。

2024-11-11 22:48:19 890

原创 C++实现自旋锁SpinLock

自旋锁是一种锁机制,用于多线程编程中保护共享资源。与普通的阻塞锁不同,自旋锁在获取不到锁时,线程不会被挂起,而是持续循环(“自旋”)检查锁是否可用。当锁被释放时,线程立即获取锁进入临界区。自旋锁适用于短时间的临界区操作,因为它避免了线程上下文切换的开销,但在长时间等待时会浪费大量 CPU 资源。自旋锁是一种用于多线程环境下的同步机制,能够确保在同一时间只有一个线程能够访问共享资源。

2024-10-25 10:31:29 1170

原创 无重复字符的最长子串

初始化变量l = 0(左边界),r = 0(右边界),ans = 0(最长无重复子串长度),和哈希表map用来记录窗口内字符的出现情况。使用循环遍历字符串,右边界r每次右移,动态调整窗口:当s[r]不在map中时,将字符加入哈希表,扩大窗口。当s[r]已经在map中时,缩小窗口,通过移动左边界l,直到窗口内无重复字符。每次调整窗口后,计算当前窗口长度r - l,更新ans。最后,返回ans,即为最长无重复子串的长度。

2024-10-17 10:12:02 1050

原创 MySQL事务的四大特性及实际案例

在数据库系统中,事务 (Transaction) 是保证数据完整性和一致性的重要机制。尤其在高并发和复杂的应用场景下,事务能够确保多个操作的整体性,使系统在面对错误或异常时依然能保证数据的可靠性。为了实现这一目标,事务具备四大关键特性:原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability),简称ACID。

2024-10-11 10:44:44 994

原创 C++的四种类型强转

在 C++ 编程中,类型转换是一个常见且重要的操作。然而,随意使用 C 风格的类型转换可能会导致难以发现的错误和潜在的安全隐患。const_cast和。每种转换都具有特定的用途和特点,适用于不同的场景。本文将详细介绍这四种类型转换操作符的功能、应用场景以及示例代码。通过对这些转换的理解,程序员能够更加有效地管理类型安全,提高代码的可读性和可维护性。掌握这些知识将帮助开发者在复杂的代码中避免潜在的错误,使程序更加健壮。C++ 的四种类型转换操作符(const_cast和。

2024-10-09 01:45:00 1588

原创 指针与引用的区别

在C++编程中,指针和引用是两种重要的间接引用机制,它们在内存管理和数据操作中扮演着关键角色。尽管它们看似相似,但二者在语法、特性和使用场景上存在显著差异。理解指针与引用的区别,能够帮助开发者更有效地管理内存,提高代码的安全性与可读性。本节将详细探讨指针与引用的主要区别,包括空值处理、初始化、重新赋值、语法以及性能等方面。同时,我们将通过代码示例直观展示这些概念,帮助读者深入理解何时使用指针,何时使用引用,以便在实际编程中做出更明智的选择。

2024-10-08 10:31:47 594

原创 用两个栈实现一个队列

通过使用两个栈来模拟队列的先进先出(FIFO)特性:一个栈用于执行入队操作(将新元素压入栈1),另一个栈用于出队操作(从栈2中弹出元素)。在出队时,如果栈2为空,则将栈1中的所有元素逐一弹出并压入栈2,从而确保出队的顺序与入队顺序一致。

2024-10-06 21:53:05 1346

原创 实现一个简单的环形队列

环形队列(Circular Queue)是一种特殊的数据结构,旨在高效地管理和利用存储空间。与传统的线性队列相比,环形队列的主要特点在于,它的队尾和队头可以在同一存储空间中循环使用,从而避免了空间浪费。

2024-10-04 11:50:18 526

原创 快速判断大端小端字节序

大小端(Endianness)是指计算机存储多字节数据时,字节的顺序。

2024-10-02 11:02:54 449

原创 C++实现生产者消费者模型

生产者-消费者模型是一种用于解决多线程同步问题的经典设计模式,常见于缓冲区管理、任务调度等场景。该模型的核心是两个角色:生产者和消费者。通过共享缓冲区(通常是队列)进行协作。

2024-09-30 06:00:00 815

原创 手撕快速排序

快速排序是一种高效的排序算法,采用分治的思想时间复杂度最佳情况:O(n log n)(基准元素每次均匀分割)平均情况:O(n log n)最坏情况:O(n²)(当数组已经是有序的,或所有元素相同,且每次选择的基准是最小或最大值)空间复杂度空间复杂度:O(log n)(递归调用栈的空间,取决于递归深度)在最坏情况下(O(n))时,可能需要额外的O(n)空间(当分区极不均匀时)

2024-09-29 08:30:00 410

原创 C++ 简易异步定时器实现

这个代码实现了一个简单的异步定时器Timer类,利用 C++ 的和std::async进行多线程处理。启动定时器:通过start方法,可以设置一个延迟时间和一个回调函数。定时器在延迟结束后会自动执行这个回调。停止定时器:可以使用stop方法来停止定时器,并等待当前正在执行的任务完成。线程安全:使用std::mutex确保在多线程环境中安全地访问和修改定时器的状态。异步执行:定时器的延迟处理在一个独立线程中进行,主线程可以继续执行其他操作。

2024-09-28 10:44:02 1462 1

空空如也

空空如也

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

TA关注的人

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