- 博客(155)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Vim 命令速查表
Vim 命令速查表,注释化 vimrc 配置文件,经典 Vim 键盘图,实用 Vim 书籍,Markdown 格式,目录化检索,系统化学习,快速熟悉使用!
2023-02-22 21:16:03
1055
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Mac配置homebrew
是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。Homebrew主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。
2023-02-21 23:08:08
2019
原创 笔试-深搜、广搜算法突破
提到深搜、广搜,大家一般就会说深搜用栈或递归,广搜用队列。但是其实我认为应该先考虑一下,是搜的对象是什么,是树、还是图当然无论是图的深搜、还是树的深搜,其基本理念都是一致的。
2024-06-06 12:45:09
295
原创 python常见问题
FastAPI 是一个非常强大的工具,用于快速开发高性能的 API 服务。它支持异步编程,可以处理大量并发请求。通过自动文档生成,它也极大地简化了 API 的测试和前后端的协同开发工作。装饰器是 Python 中一个非常强大的功能,允许开发者以非常干净和模块化的方式增强函数功能。理解装饰器的工作原理可以帮助开发者写出更清晰、更有效、更 Pythonic 的代码。Python 的垃圾回收机制通过引用计数来实时回收无用对象,并通过标记-清除和分代收集来处理复杂情况如循环引用。
2024-04-29 10:55:08
626
原创 asyncio 并发编程
asyncio是 Python 中处理并发编程的强大工具,特别适合处理 I/O 密集型和高级别并发应用程序。通过使用asyncawait语法,asyncio使得异步代码易于编写和理解。asyncio的事件循环是异步编程的核心,它允许代码以非阻塞的方式执行多个操作。通过合理使用事件循环和相关的asyncioAPI,可以构建出高效的异步应用程序。任务的取消和子协程的调用是asyncio异步编程中的两个基本操作。任务取消允许你优雅地中断可能长时间运行的异步操作,而子协程的调用则是构建复杂异步应用程序的基石。
2024-04-29 10:48:59
684
原创 python协程和异步io
并发和并行处理多任务的方式不同,前者是任务交替执行,后者是真正同时执行。同步和异步关注任务处理的流程是否被阻塞。阻塞和非阻塞描述的是程序在等待调用结果时的行为。理解这些概念有助于开发者更好地设计和优化多任务处理和 I/O 密集型应用。通过使用async和await,Python 程序员可以有效地避免回调之痛,同时保持代码的清晰和简洁。这些工具也使得错误处理和测试变得更加简单。在现代 Python 异步编程中,推荐使用这些新的语言特性来处理并发和异步操作。
2024-04-29 10:37:45
551
原创 python多线程、多进程和线程池编程
Lock:适用于需要简单互斥的场景。RLock:适用于同一个线程需要多次获取同一锁的场景,例如递归调用。正确使用这些锁可以帮助避免多线程编程中的竞态条件和死锁问题,保证数据的一致性和程序的稳定性。
2024-04-28 23:34:26
694
1
原创 python socket编程
Python 中的 socket 编程是通过socket模块来实现的,它提供了标准的 BSD 套接字接口。使用 socket,你可以实现网络通信,创建客户端和服务器应用程序。这里,我将介绍如何在 Python 中使用 socket 创建一个简单的服务器和客户端。
2024-04-28 23:17:51
324
原创 python迭代器和生成器
在 Python 中,迭代器和可迭代对象是常用的概念,它们使得处理序列数据(如列表、元组等)和自定义数据结构变得更加灵活和高效。理解这两个概念对于高效地使用 Python 非常重要。可迭代对象可以是任何实现了__iter__()或方法的对象。__iter__()和__next__()。迭代器允许逐个处理集合中的元素,而可迭代对象提供了一种方式来获取一个可以实现这种逐个处理的迭代器。
2024-04-28 23:02:00
556
原创 python元类编程
使用property功能可以让你控制属性的访问和设置,增加数据验证,改变属性的内部实现而不影响外部调用代码。这是一种强大的封装和接口控制工具,可以帮助你编写更健壯、易于维护的代码。getattr属性描述符提供了一种强大的方法来控制属性的访问,它们在 Python 的很多高级特性中都有应用,如@property装饰器就是建立在描述符基础之上的。理解属性查找过程和描述符的工作原理是深入理解 Python 对象模型的关键。在 Python 中,元类是类的类,即它们定义了其他类的行为。
2024-04-28 22:51:46
796
原创 对象引用、可变性和垃圾回收
使用del语句可以删除对象的引用,从而可能导致对象的内存被释放,但它本身不执行内存回收。垃圾回收是 Python 自动进行的内存管理过程,用于回收没有被任何引用指向的对象的内存。在大多数情况下,Python 开发者不需要显式地介入垃圾回收过程,但了解其工作原理可以帮助优化内存使用和诊断内存相关的问题。
2024-04-28 19:01:17
633
原创 深入python的set和dict
dict类是 Python 中的一个非常强大的内置数据结构,它不仅实现了的所有方法,还通过继承链实现了其他几个重要的抽象基类的方法。这些抽象基类为dict提供了规范的行为和接口,使得dict可以与其他实现了相同接口的自定义类在多态性方面兼容。这种设计也便于开发者在创建自己的类时,通过继承或实现这些抽象基类来确保它们的类具有一致的接口和行为。Python 中的dict和set是基于高效的哈希表实现的,它们提供了快速的数据存取操作。
2024-04-28 18:56:27
780
原创 python自定义序列类
使用bisect模块可以高效地维护一个有序序列,特别是在需要频繁插入元素且希望保持序列有序的情况下。这个模块避免了每次插入元素后进行全排序的开销,使得操作更加高效。列表推导式:适用于创建列表,尤其是需要对元素进行变换或应用过滤条件时。生成器表达式:适用于处理大数据集,或当你不需要立即拥有所有数据,而是希望按需处理时。字典推导式:适用于构建键值对的映射,可以通过对键和值应用表达式来创建字典。这些工具都提供了强大的数据处理能力,使代码更加简洁和易于理解。
2024-04-28 18:50:09
725
1
原创 python深入理解类和对象
在设计类时,应根据变量是否应该由所有实例共享来选择使用类变量还是实例变量。类变量适合用于所有实例共享的属性(如公司所有员工的年度加薪比例),而实例变量适合用于每个实例独有的属性(如员工的姓名和工资)。数据封装和私有属性是面向对象编程中保护和隐藏数据的重要手段。封装使得对象的内部表示被隐藏起来,只暴露有限的接口与外界交互,而私有属性则提供了一种防止外部直接访问对象状态的方法。这些机制有助于降低系统的复杂性,并增强代码的安全性和可维护性。
2024-04-28 18:40:10
759
原创 笔试-动态规划算法突破
在理解了01背包和完全背包后,记住动态规划五部曲,遇到需要使用动态规划解决的问题时,就是思考如何转化到相应的问题上,去书写代码了。
2024-04-19 17:13:55
575
原创 笔试-回溯算法突破
组合问题:元素不重复取,backtracking(…, i + 1)切割问题:元素不重复取,backtracking(…, i + 1)子集问题:元素不重复取,backtracking(…, i + 1)排列问题:元素判重, 需要使用used数组标记棋盘问题:二维矩阵回溯。
2024-04-19 16:38:36
861
原创 面试-递归与迭代的区别与联系
递归和迭代是解决问题的两种基本方法,它们在许多情况下可以互换使用,但各自具有独特的特点和适用场景。理解它们之间的区别和联系对于选择合适的解决方案非常重要。
2024-04-19 15:34:58
418
原创 笔试-递归算法突破
递归通常用于解决可以被分解为多个子问题的问题,其中每个子问题与原问题具有相同的形式。递归算法的关键在于定义递归结束的条件,即基准情况(base case),以防止无限递归和栈溢出。写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
2024-04-19 15:29:30
234
原创 笔试-双指针算法突破
双指针技术是一种常用的算法技术,用于解决数组或链表中的问题,通常能以较低的时间复杂度解决问题。双指针可以被分为几种类型,包括等。这里,我将解释这些类型并提供一些示例问题及其解决方案。
2024-04-19 15:15:36
160
原创 打包调试和发布
默认情况下,CMake 的模型是构建目录仅包含单个配置,无论是 Debug、Release、MinSizeRel 还是 RelWithDebInfo。但是,可以设置 CPack 来捆绑多个构建目录并构建一个包含同一项目的多个配置的包。经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考。首先,我们要确保调试和发布版本对将安装的库使用不同的名称。现在调试和发布版本都已完成,我们可以使用自定义配置文件将两个版本打包到单个版本中。
2023-10-19 00:33:54
111
原创 添加导出配置
至此,我们已经为项目生成了可重定位的 CMake 配置,可以在项目安装或打包后使用。如果我们希望我们的项目也可以从构建目录中使用,我们只需将以下内容添加到顶层的底部。CMake 想说的是,在生成导出信息的过程中,它将导出一条与当前机器本质上相关的路径,并且在其他机器上无效。在此期间, 我们添加了打包这些信息的功能,以便将其分发给其他人。下一步是添加必要的信息,以便其他 CMake 项目可以使用我们的项目,无论是来自构建目录、本地安装还是打包时。因此,让我们继续将一个新文件添加到名为的项目的顶层,
2023-10-19 00:33:09
119
原创 选择静态或共享库
此时,如果您构建所有内容,您可能会注意到链接失败,因为我们将没有位置无关代码的静态库与具有位置无关代码的库组合在一起。经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考。使用 CMake 文档,你能找到一个帮助模块来简化这个过程吗?为了实现这一点,我们需要添加BUILD_SHARED_LIBS。在本节中,我们将展示如何BUILD_SHARED_LIBS。接下来,我们需要为静态库和共享库指定输出目录。数学函数/MathFunctions.h。
2023-10-19 00:32:29
69
原创 打包安装程序
接下来假设我们想要将我们的项目分发给其他人以便他们可以使用它。这与我们之前在 中所做的安装略有不同,我们之前安装的是从源代码构建的二进制文件。在此示例中,我们将构建支持二进制安装和包管理功能的安装包。为了实现这一目标,我们将使用 CPack 创建特定于平台的安装程序。具体来说,我们需要在顶级文件的底部添加几行。接下来,我们将一些 CPack 变量设置为存储该项目的许可证和版本信息的位置。经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考。
2023-10-19 00:31:46
82
原创 添加自定义命令和生成的文件
经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考。查看该文件后,我们可以看到该表是作为有效的 C++ 代码生成的,并且输出文件名作为参数传入。在本节中,我们将在构建过程中创建表,然后将该表编译到我们的应用程序中。可执行文件,然后将其作为构建过程的一部分运行。我们还必须将当前的二进制目录添加到包含目录列表中,假设,出于本教程的目的,我们决定永远不想使用平台。配置项目,然后使用您选择的构建工具构建它。. 然后,将适当的命令添加到文件中以构建。
2023-10-19 00:31:02
67
原创 添加系统自省
宏用于检查编译器是否支持特定的C++语法或功能,以便在CMake配置中进行条件化处理。例如,你可以使用它来检查是否支持C++11或更高版本的标准,或者是否支持某些C++库或功能。是 CMake 中的一个宏,用于检查给定的 C++源代码片段是否可以成功编译。经过第一个练习,大家对于基本的使用应该已经掌握了,由于代码过多,在文档中详细介绍太过于啰嗦,大家可以自行下载代码参考。这个宏是CMake中的一个有用工具,可以在配置过程中检查编译器的功能,以确保项目的C++源代码可以正确编译。在这个示例中,我们使用。
2023-10-19 00:30:08
60
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人