三、Python高级特性
Python中的高级数据结构:队列、栈、双端队列、堆与优先队列
在Python编程中,高级数据结构为我们提供了强大而灵活的工具来处理各种复杂的数据存储和操作需求。本文将详细介绍队列、栈、双端队列、堆与优先队列这几种常见的高级数据结构及其在Python中的实现。
1. 高级数据结构
• 队列、栈、双端队列等数据结构
一、队列(Queue)
队列是一种遵循“先进先出”(FIFO,First In First Out)原则的数据结构。它就像一条排队等候的队伍,最早进入队列的元素最先被移除。
在Python中,我们可以使用列表(list)来实现一个基本的队列。列表的append()方法用于在尾部添加元素(相当于队列的入队操作),而pop(0)方法则用于移除并返回列表的第一个元素(相当于队列的出队操作)。然而,这种方法在队列较大时效率较低,因为每次出队操作都需要移动后续的所有元素。
为了更高效地实现队列,Python标准库提供了collections.deque(双端队列)。deque通过使用双向链表实现,确保了在两端执行插入和删除操作的时间复杂度均为O(1)。使用deque实现队列的基本操作非常直观,例如:
from collections import dequequeue = deque()
queue.append("任务1") # 入队操作
queue.append("任务2")
print("初始队列:", queue)task = queue.popleft() # 出队操作
print("处理任务:", task)
print("处理后队列:", queue)
二、栈(Stack)
栈是一种遵循“先进后出”(LIFO,Last In First Out)原则的数据结构。它就像一个盒子,最后放入的元素最先被取出。
在Python中,栈同样可以使用列表来实现。列表的append()方法用于向栈中添加元素(入栈操作),而pop()方法则用于从栈中提取出指定元素(出栈操作)。需要注意的是,pop()方法默认移除并返回列表的最后一个元素,这正好符合栈的“先进后出”原则。此外,Python中还可以定义顺序栈类来实现栈的存储和操作,顺序栈底层采用的是数组。例如:
class SqStack:def __init__(self, MAXSIZE):self.MAXSIZE = MAXSIZEself.data = [None] * self.MAXSIZEself.top = -1def Push(self, item):if self.top == self.MAXSIZE - 1:return "Stack is full"self.data[self.top + 1] = itemself.top += 1def Pop(self):if self.top == -1:return "Stack is empty"rs = self.data[self.top]self.top -= 1return rs# 使用示例
stack = SqStack(5)
stack.Push(1)
stack.Push(2)
print(stack.Pop()) # 输出: 2
三、双端队列(Deque)
双端队列(double-ended queue,简称deque)是一种允许在其两端进行添加和删除操作的数据结构。它结合了队列和栈的优点,提供了更高的灵活性和操作效率。在Python中,collections.deque就是一个双端队列的实现。它支持在两端进行快速的插入和删除操作,时间复杂度均为O(1)。使用deque不仅可以实现队列和栈的功能,还可以进行更多灵活的操作,例如限制队列的大小、从两端添加或移除元素等。
from collections import deque# 创建一个最大长度为3的deque
limited_deque = deque(maxlen=3)
limited_deque.append(1)
limited_deque.append(2)
limited_deque.append(3)
limited_deque.append(4) # 此时1会被自动移除
print(limited_deque) # 输出: deque([2, 3, 4], maxlen=3)
• 堆与优先队列
堆(Heap)
堆是一种特殊的树形数据结构,常用于高效地维护一组元素中的最大值或最小值。在堆中,每个节点的值都满足堆属性:在最大堆中,每个节点的值都大于或等于其子节点的值;而在最小堆中,每个节点的值都小于或等于其子节点的值。Python内置模块heapq提供了堆操作的支持。通过heapq模块,我们可以方便地创建和操作最小堆和最大堆。需要注意的是,heapq模块默认实现的是最小堆。如果需要实现最大堆,可以通过将元素的值取反来使用heapq模块进行模拟。
import heapq# 创建最小堆
min_heap = []
heapq.heappush(min_heap, 4)
heapq.heappush(min_heap, 2)
heapq.heappush(min_heap, 7)
min_value = heapq.heappop(min_heap)
print(min_value) # 输出: 2# 创建最大堆(使用负数表示)
max_heap = []
heapq.heappush(max_heap, -4)
heapq.heappush(max_heap, -2)
heapq.heappush(max_heap, -7)
max_value = -heapq.heappop(max_heap)
print(max_value) # 输出: 7
堆数据结构在许多算法和问题中有广泛的应用,如优先队列、最小/最大值查找、合并多个有序数组、Dijkstra算法以及Top K问题等。
优先队列(Priority Queue)
优先队列是一种特殊的队列,其中每个元素都有一个优先级。出队操作总是移除具有最高优先级的元素(在最大堆中)或最低优先级的元素(在最小堆中)。优先队列常用于任务调度、算法设计等场景。在Python中,我们可以使用heapq模块来实现一个优先队列。通过将元素和它们的优先级组合成一个元组,并将这些元组推入堆中,我们就可以实现一个优先队列。出队时,堆顶元素(具有最高或最低优先级的元素)将被移除并返回。
import heapq# 创建一个空的最小堆作为优先队列
priority_queue = []# 添加元素到优先队列(元素和优先级的元组)
heapq.heappush(priority_queue, (3, "任务C"))
heapq.heappush(priority_queue, (1, "任务A"))
heapq.heappush(priority_queue, (2, "任务B"))# 获取并移除具有最高优先级的元素
while priority_queue:priority, task = heapq.heappop(priority_queue)print(f"处理任务: {task} 优先级: {priority}")
输出:
处理任务: 任务A 优先级: 1
处理任务: 任务B 优先级: 2
处理任务: 任务C 优先级: 3
综上所述,队列、栈、双端队列、堆与优先队列等高级数据结构在Python编程中发挥着重要作用。它们为我们提供了强大而灵活的工具来处理各种复杂的数据存储和操作需求。通过掌握这些数据结构的特点和实现方法,我们可以更好地设计和优化算法,提高程序的效率和可靠性。
2. 并发编程
在现代编程中,提升程序效率和响应速度至关重要,而并发编程正是实现高效程序的一项重要技术。Python作为一种高级编程语言,提供了多种并发编程的实现方式,包括线程、进程以及异步编程。
• 线程与进程的基本概念
1. 线程(Thread):线程是程序执行流的最小单元,一个进程中可以包含多个线程,这些线程共享该进程的资源(如内存空间、打开的文件等),并能并发执行。线程之间通信成本较低,因为它们共享内存,但这也可能导致资源访问的冲突。由于Python全局解释器锁(GIL)的存在,同一时间只有一个线程在执行Python字节码,因此线程更适合I/O密集型任务。
2. 进程(Process):进程是操作系统分配资源的基本单位,每个进程都拥有自己独立的内存空间和系统资源。进程之间的通信成本相对较高,因为它们不共享内存,需要通过特定的机制(如管道、消息队列等)来进行数据交换。进程更适合CPU密集型任务,因为它可以充分利用多核CPU的优势。
• 使用threading和multiprocessing模块进行并发编程
1. threading模块:
• 线程创建:使用threading.Thread(target=...)创建一个线程对象,并指定要执行的任务函数。
• 线程启动:调用线程对象的start()方法启动线程。
• 线程同步:为保证多线程访问共享资源的安全性,可以使用锁(Lock)、信号量(Semaphore)等同步工具。
• 线程等待:使用join()方法等待线程完成。以下是一个简单的例子,通过threading.Thread创建和启动一个线程来执行打印任务:
import threadingdef print_numbers():for i in range(5):print(f"Number: {i}")thread = threading.Thread(target=print_numbers)thread.start()thread.join()print("Main thread finished.")
2. multiprocessing模块:
• 进程创建:使用multiprocessing.Process(target=...)创建一个进程对象,并指定要执行的任务函数。
• 进程启动:调用进程对象的start()方法启动进程。
• 进程同步与通信:进程间不共享内存,需要通过管道、消息队列等方式进行通信。
• 进程池:multiprocessing.Pool提供了一个方便的接口来并行执行函数,它可以自动管理进程池。以下是一个使用多进程执行CPU密集型任务的例子:
import multiprocessingdef cpu_intensive_task(n):return n ** 2def multi_process_test():numbers = range(100)with multiprocessing.Pool(8) as pool: # 假设有8个CPU核心results = pool.map(cpu_intensive_task, numbers)print(results)if __name__ == "__main__":multi_process_test()
• 异步编程与asyncio库
异步编程是一种并发编程模型,它允许程序在等待某些I/O操作(例如网络请求、文件读取等)时,不阻塞整个程序,而是让程序继续执行其他任务,等到I/O操作完成后再处理结果。与传统的同步编程相比,异步编程可以显著提高程序的并发性能,特别是在处理大量I/O请求时。
Python中的asyncio库提供了基于协程的异步I/O框架,允许我们编写高效、非阻塞的异步代码。
1. 协程(Coroutine):用async def定义的函数是协程,它是异步编程的基本单元。协程的执行会被挂起,直到遇到await,等待异步操作完成。
2. 事件循环(Event Loop):asyncio使用事件循环来调度和执行协程。事件循环不断地检查是否有可执行的任务,并按顺序执行它们。
3. 任务(Task):协程是懒执行的,需要通过asyncio.create_task()或await来启动协程并创建任务,任务会被事件循环调度执行。以下是一个使用asyncio进行异步网络请求的例子:
import asyncio
import aiohttpasync def fetch(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main():urls = ["https://example.com","https://httpbin.org/get","https://www.python.org"]tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(result[:100]) # 打印前100个字符asyncio.run(main())
在这个例子中,我们通过aiohttp库进行异步HTTP请求,并使用asyncio.gather()并发执行多个异步任务。
总结
Python提供了多种并发编程的实现方式,包括线程、进程以及异步编程。线程适合I/O密集型任务,进程适合CPU密集型任务,而异步编程则特别适合处理大量I/O操作。通过合理使用这些并发编程技术,我们可以显著提升程序的性能和响应速度。在实际开发中,我们需要根据任务类型和硬件资源情况选择合适的并发编程方式。
3. 元编程
Python,作为一种灵活且强大的编程语言,其元编程特性为开发者提供了强大的工具,使得代码可以更加动态和智能
• 动态类型与反射
Python是一种动态类型语言,这意味着变量的类型可以在运行时改变,而无需在声明时指定。这种特性使得Python代码更加灵活,但也对开发者的类型管理提出了更高要求。
反射(Reflection)是Python中一种强大的技术,它允许程序在运行时检查、访问和修改其结构。Python提供了一系列内置函数和特殊方法来实现反射,如getattr()、setattr()、hasattr()、delattr()和dir()等。这些函数使得开发者可以在运行时动态地获取对象的属性和方法信息,从而实现自我修改和扩展。
反射在ORM(对象关系映射)框架、插件系统和配置管理等领域有着广泛的应用。例如,ORM框架可以利用反射根据数据库中的表结构动态生成模型类,并根据需要动态执行增删改查操作。
• 装饰器与上下文管理器
装饰器(Decorators)是Python中一种独特的语法结构,它允许开发者在不修改函数或类源代码的情况下,动态地为其添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。这种特性使得装饰器成为Python中函数式编程范式的强大工具之一。
装饰器在日志记录、性能计时、权限检查等方面有着广泛的应用。例如,可以使用装饰器来统计函数的执行时间,或者检查用户是否有权限执行某个敏感操作。
上下文管理器(Context Managers)是Python中另一种强大的特性,它提供了一种机制来安全地获取和释放资源,即使在出现异常时也能确保资源的正确释放。上下文管理器通常使用with语句来管理资源的获取和释放,这对于处理文件、数据库连接等需要资源管理的情况特别有用。
• 自定义类与元类
在Python中,类本身也是对象,而生成类的类就是元类(Metaclasses)。元类是Python中一种高级的元编程技术,它可以动态地创建类,而不是实例。通过自定义元类,开发者可以控制类的创建过程,添加类的属性和方法,甚至实现一些高级的编程模式,如单例模式、代理模式和混入等。
自定义元类通常通过继承内置的type类来实现,并使用metaclass关键字参数为一个类指定元类。自定义元类在ORM框架、RPC框架和动态路由等领域有着广泛的应用。例如,可以使用自定义元类来动态生成模型类,并根据数据库中的表结构添加相应的属性和方法。
此外,自定义类也是Python编程中的基础。通过定义类,开发者可以创建具有特定属性和方法的对象,从而实现面向对象编程的范式。自定义类可以包含构造函数(__init__方法)、析构函数(__del__方法)、特殊方法(如__str__、__repr__等)以及用户自定义的方法。
总结
Python的元编程特性为开发者提供了强大的工具,使得代码可以更加动态和智能。动态类型与反射使得程序可以在运行时自我修改和扩展;装饰器与上下文管理器为函数和类提供了额外的功能和资源管理机制;自定义类与元类则允许开发者控制类的创建过程,实现高级的编程模式。通过深入理解和掌握这些元编程技术,开发者可以编写出更加优雅、高效和可维护的Python代码。
相关文章:
三、Python高级特性
Python中的高级数据结构:队列、栈、双端队列、堆与优先队列 在Python编程中,高级数据结构为我们提供了强大而灵活的工具来处理各种复杂的数据存储和操作需求。本文将详细介绍队列、栈、双端队列、堆与优先队列这几种常见的高级数据结构及其在Python中的…...
使用 OpenCV 拼接进行图像处理对比:以形态学操作为例
图像处理在计算机视觉中起着至关重要的作用,而 OpenCV 作为一个强大的图像处理库,提供了丰富的函数来实现各类图像处理任务。形态学操作(Morphological Operations)是其中常用的技术,尤其适用于二值图像的处理。常见的…...
OPENCV数字识别(非手写数字/采用模板匹配)
这篇文章的重点在于 模板匹配 的使用。模板匹配是计算机视觉中的一项基本技术,它通过比对输入图像与模板图像的相似度,来进行目标识别。对于数字识别,特别是标准数字的识别,模板匹配非常有效。 请看效果: 文章结构 …...
【STM32】知识点介绍一:硬件知识
文章目录 一、电源引脚简介二、电平信号三、电路分析 一、电源引脚简介 VCC、GND、VDD和VSS是电子电路中常见的术语,代表着不同的电源引脚或电压。 VCC(Voltage at the Common Collector):VCC是指集电极(Collector&am…...
基于SpringBoot的电影售票系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
记录我的ICME2025论文之旅:困顿与收获
人生第一次中B会,还是在课业繁重的大三上(有点说法~) “在最黑暗的时刻,总有一束光为你指引前行。” ——记录这段难忘的历程 今年的ICME投稿量创下新高,录取率却跌至20多%,并且首次加入了rebuttal…...
FreeRTOS学习(九):中断管理
FreeRTOS学习(九):中断管理 文章目录 FreeRTOS学习(九):中断管理前言一、中断优先级分组设置特点中断优先级分组设置 二、FreeRTOS中断优先级配置PendSV和SysTick中断优先级配置 三、中断相关寄存器PRIMASK…...
07-项目中应提前准备下一阶段计划
在项目当前版本的功能开发任务都完成之后,人就空出来了,通常这个时候,项目负责人还有很多繁琐的工作要做,比如项目内部验收、提交测试申请和版本发布等等。为了给项目成员找事情做,就匆匆忙忙安排下个版本的任务&#…...
【C语言】多进程/多线程
【C语言】多进程/多线程 参考链接多进程/多线程服务器1. 多进程服务器2. 多线程服务器 结语参考链接 参考链接 c 中文网 菜鸟 c 多进程/多线程服务器 多进程和多线程是常用的并发编程技术。它们都允许程序同时执行多个任务,提高了系统的资源利用率和程序的运行效率…...
GaussDB数据库表设计与性能优化实践
GaussDB分布式数据库表设计与性能优化实践 引言 在金融、电信、物联网等大数据场景下,GaussDB作为华为推出的高性能分布式数据库,凭借其创新的架构设计和智能优化能力,已成为企业核心业务系统的重要选择。本文深入探讨GaussDB分布式架构下的…...
全星FMEA软件系统——助力汽车部件行业高效管控质量风险
全星FMEA软件系统——助力汽车部件行业高效管控质量风险 在汽车部件行业,产品质量与可靠性直接影响整车安全性与市场竞争力。如何高效管理失效风险、优化控制计划并确保流程合规性,成为企业核心挑战。 全星FMEA软件系统应运而生,专为汽车部…...
文件I/O--C++的文件操作
一、打开文件,从文件中读取、写入文件 从文件中读取数据: #include<fstream> //fstream File stream:文件流 #include<iostream> //fstream包含了 iostream,所以这句可以省略,现在不能了 using namespace std;i…...
Docker-Compose部署 EasySearch 异常问题排查
近期将原本运行在 macOS 上的 EasySearch、Console 和 Coco-server 等服务迁移至群晖 NAS 平台。在迁移过程中遇到了EasySearch容器无法正常启动或运行中意外终止的问题。本文记录了这些问题的具体表现及解决方案,旨在为后续类似部署提供参考。 基础部署配置 以下…...
秒杀业务优化之从分布式锁到基于消息队列的异步秒杀
一、业务场景介绍 优惠券、门票等限时抢购常常出现在各类应用中,这样的业务一般为了引流宣传而降低利润,所以一旦出现问题将造成较大损失,那么在业务中就要求我们对这类型商品严格限时、限量、每位用户限一次、准确无误的创建订单,…...
【CGE】社会核算矩阵构建(一):SAM基本结构
【CGE】社会核算矩阵构建(一):SAM基本结构 社会核算矩阵构建(一):SAM基本结构一、SAM的概念和基本特点二、SAM的基本结构1.开放经济体的SAM表结构2.SAM表各账户的主要核算内容(1)社会…...
蓝桥杯算法实战分享:算法进阶之路与实战技巧
引言 蓝桥杯作为国内极具影响力的程序设计竞赛,为众多编程爱好者和专业人才提供了展示自我的舞台。参与蓝桥杯不仅能检验自身编程水平,还能拓宽技术视野,为未来职业发展积累宝贵经验。本文将结合历年真题与参赛经验,全面分享蓝桥…...
自定义minshell
我们在前面已经了解了进程的概念,以及如何进行进程控制。接下来我们就使用这些知识,来自己实现一个shell即命令行解释器!!! 一.打印命令行提示符 我们在使用Linux操作系统时,一登陆就会启动bash进程——命…...
坦克大战(c++)
今天我给大家分享一个c游戏。 废话不多说,作品展示: #include <stdio.h> #include <windows.h> #include <time.h> //里规格:长39*278 (真坐标)(假坐标宽为39) 高39 //外规格:长…...
《可爱风格 2048 游戏项目:HTML 实现全解析》
一、引言 在如今的数字化时代,小游戏以其简单易上手、趣味性强的特点深受大家喜爱。2048 游戏作为一款经典的数字合并游戏,拥有庞大的玩家群体。本文将详细介绍一个用单文件 HTML 实现的可爱风格 2048 游戏项目,它不仅具备传统 2048 游戏的基…...
C++ 利用类模板实现一个数组类封装
案例描述: 实现一个通用的数组类,要求如下: 可以对内置数据类型以及自定义数据类型的数据进行存储 将数组中的数据存储到堆区 构造函数中可以传入数组的容量 提供对应的拷贝构造函数以及operator防止浅拷贝问题 提供尾插法和尾删法对数组…...
【AndroidRTC-11】如何理解webrtc的Source、TrackSink
Android-RTC系列软重启,改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性,方便形成肌肉记忆。同时不分种类、不分难易程度,在线征集问题切入点。 问题1:如何理解VideoSource、VideoTrack&VideoSink三者的关系…...
数据类设计_图片类设计之9_图标类设计_C++实战_(前端架构)
前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 前面写了矩阵图形类对象和像素图形类对象,本贴通过一个快捷方式图标类的设计,来继续数据类型设计的一些讨论. 快捷方式图标是这个样子: 属性分析 首先,快捷方式…...
fuse性能关键参数entry_timeout
entry_timeout 是 FUSE(Filesystem in Userspace)中的一个选项,用于控制目录项缓存的有效期。具体来说,它决定了文件系统在多长时间内缓存目录项(如文件名到 inode 的映射),从而影响文件系统的性…...
3. 轴指令(omron 机器自动化控制器)——>MC_ResetFollowingError
机器自动化控制器——第三章 轴指令 13 MC_ResetFollowingError变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启动运动指令▶多重启运动指令▶异常 MC_ResetFollowingError 对指令当前位置和反馈当前位置的偏差进行复位。 指令名称FB/FUN图形表现S…...
Spring Boot项目快速创建-开发流程(笔记)
主要流程: 前端发送网络请求->controller->调用service->操纵mapper->操作数据库->对entity数据对象赋值->返回前端 前期准备: maven、mysql下载好 跟学视频,感谢老师: https://www.bilibili.com/video/BV1gm4…...
[操作系统] 进程间通信:进程池的实现
引言 在学习操作系统时,进程间通信(IPC)和多进程管理是核心内容之一。进程池是一种常见的模式,通过预先创建一组工作进程来处理任务,避免频繁创建和销毁进程带来的开销。本文将详细剖析一个用 C 实现的进程池代码&…...
信号相关的程序
1、不断打印*换行之后响应信号,然后循环 #include <stdio.h> #include <string.h> #include <signal.h> #include <stdlib.h> #include <unistd.h> static void alrm_handler(int signo) {write(1,"!",1); }int main( in…...
【计算机网络】-计算机网络期末复习题复习资料
一、计算机网络体系结构(800字) 1. OSI参考模型 七层结构:物理层→数据链路层→网络层→传输层→会话层→表示层→应用层 各层核心功能: 物理层:比特流传输(如RJ45、光纤接口) 数据链路层&…...
Linux 基础入门操作 第十二章 TINY Web 服务器
1 服务器基础架构 1.1 背景知识 Web 服务器使用 HTTP 协议与客户端(即浏览器)通信,而 HTTP 协议又基于 TCP/IP 协议。因此我们要做的工作就是利用 Linux 系统提供的 TCP 通信接口来实现 HTTP 协议。 而 Linux 为我们提供了哪些网络编程接口…...
L2-052 吉利矩阵
L2-052 吉利矩阵 - 团体程序设计天梯赛-练习集 这道题打表 打表部分被注释了 n4 [0,0,282, 2008, 10147, 40176, 132724, 381424, 981541, 2309384] n3 [0,0,21, 55, 120, 231, 406, 666, 1035, 1540] n2 [0,0,3, 4, 5, 6, 7, 8, 9, 10] l,n map(int,input().split()) if…...
BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量时序光伏功率预测,附模型研究报告
BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量时序光伏功率预测,附模型研究报告 目录 BKA-CNN-LSTM、CNN-LSTM、LSTM、CNN四模型多变量时序光伏功率预测,附模型研究报告预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-LSTM、CNN-LSTM、…...
【读书笔记】华为《从偶然到必然》
note 华为的成功并非偶然,而是通过IPD体系、投资组合管理、平台战略等系统性工具,将研发投资转化为可持续的商业竞争力。书中强调的“管理即内部因素”理念,揭示了企业规模扩张与管理能力匹配的深层规律,为高科技企业提供了可借鉴…...
flink广播算子Broadcast
文章目录 一、Broadcast二、代码示例三.或者第二种(只读取一个csv文件到广播内存中)提示:以下是本篇文章正文内容,下面案例可供参考 一、Broadcast 为了关联一个非广播流(keyed 或者 non-keyed)与一个广播流(BroadcastStream),我们可以调用非广播流的方法 connect(),…...
实时图像处理:让你的应用更智能
I. 引言 实时图像处理在现代应用中扮演着重要的角色,它能够使应用更加智能、响应更加迅速。本文将深入探讨实时图像处理的原理、部署过程以及未来的发展趋势,旨在帮助开发者更好地理解如何将实时图像处理应用于他们的项目中。 II. 实时图像处理的基础概…...
深入理解 Linux 基础 IO:从文件操作到缓冲区机制
亲爱的读者朋友们😃,此文开启知识盛宴与思想碰撞🎉。 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 在 Linux 系统中,文件输入输出(IO)…...
汇编语言高级编程技巧:从基础到进阶
前言 汇编语言作为底层编程语言,直接操作硬件,执行效率高,但编写复杂逻辑时往往显得繁琐。通过使用汇编伪指令和宏,我们可以实现类似于高级语言的结构,如条件判断、循环、结构体和函数等,从而提升代码的可读…...
Android Studio常见问题解决
一、环境配置问题 1. 安装失败 问题描述:在安装过程中,可能会遇到硬件要求不符合、网络问题、安装包损坏、权限不足或安装路径问题等,导致安装失败。 解决方法: 硬件要求:确保设备满足最低硬件要求。 网络问题&…...
【RHCE】LVS-NAT模式负载均衡实验
目录 题目 IP规划 配置IP RS1 RS2 RS3 LVS client 配置RS 配置LVS 安装lvs软件 启动ipvsadm服务 lvs规则匹配 ipvsadm部分选项 客户端测试 总结 题目 使用LVS的 NAT 模式实现 3 台RS的轮询访问,IP地址和主机自己规划。 IP规划 主机IP地址RS1-nat模…...
MacOS下的IntelliJ IDEA突然无法访问本机的虚拟机
今天在开发的过程中,突然遇到一个怪事,之前运行的好好的程序,突然间报无法连接redis服务器,一开始以为是网络问题,在OS的terminal里又是ping 又是telnet的,一切正常,可是程序就是连不上。 挠了半…...
【渗透测试】Fastjson 反序列化漏洞原理(一)
目录 一、Fastjson 是什么二、Fastjson 工作原理三、反序列化漏洞原理1. 反序列化漏洞的定义2. Fastjson 的反序列化机制3. 漏洞成因关注以下几点(1) 动态类型解析(2) 自动调用方法(3) 信任用户输入 4. 漏洞利用过程(1) 寻找可利用的类(也称为 "Gadget"&a…...
BM100-K系列开关量输入信号隔离器
1. 产品概述 BM100-K系列开关量输入信号隔离器是一款高性能的信号处理设备,专为工业自动化控制系统设计。该产品支持干接点或NAMUR型接近开关输入,并通过继电器或晶体管实现隔离输出。其核心功能包括输入输出逻辑控制(同相/反相可调…...
c++11 | 细说智能指针
💓个人主页:mooridy 💓专栏地址:C 关注我🌹,和我一起学习更多计算机的知识 🔝🔝🔝 什么是智能指针? 智能指针是 C 中一种用于管理动态内存的机制。它提供了一…...
谷歌大型推理模型曝光!击败Claude-3.7-Thinking
哎!最近推特上的网友在LMSYS Arena 发现了个泄漏的大模型 Nebula,效果据说特别好,打败了o1、o3-mini、Claude 3.7 Thinking等模型: 网友们通过询问和分析 API,发现这似乎是谷歌正在秘密测试的新推理模型!推…...
Python FastAPI面试题及参考答案
目录 FastAPI 的优缺点是什么?列举典型应用场景。 解释 FastAPI 的路由机制,如何定义路径参数和查询参数? Pydantic 模型在 FastAPI 中的作用是什么?如何进行数据验证与序列化? FastAPI 如何自动生成 OpenAPI 文档?Swagger UI 和 ReDoc 的区别? 什么是 ASGI?FastAP…...
C++(初阶)(八)——string
string string遍历下标[]迭代器iterator反向迭代器 范围for修改 Capacitysize和lengthmax_sizecapacityclearcapacity的扩容reserveresize Element accessoperator[]和at **Modifiers**:appendinserterasereplace String operationsc_strsubstr和findfind_first_ofgetline 题目…...
计算机操作系统处理机调度(1)
系列文章目录 第三章:处理机调度与死锁 文章目录 系列文章目录前言一、作业和资源:二、处理机调度的层次: 1.高级调度2.初级调度3.中级调度 三、作业调度算法举例:总结 前言 在多道程序的环境下,内存中存在着多个进…...
ctfshow REVERSE re2 萌新赛 内部赛 七夕杯 WP
目录 re2 萌新赛 flag白给 签退 数学不及格 内部赛 批量生产的伪劣产品 来一个派森 好好学习 天天向上 屏幕裂开了 七夕杯 逆向签到 easy_magic re2 ida分析主函数,将flag.txt内容加密写入enflag.txt 这是密钥加密过程 标准rc4加密 简单异或解…...
云服务器怎么设置端口禁用呢?
在云服务器上禁用特定端口是提升安全性的重要措施,可通过云平台安全组和服务器本地防火墙双重配置实现。以下是详细操作指南: 一、通过云平台安全组禁用端口(优先推荐) 1. 莱卡云/腾讯云/华为云等操作步骤 登录云控制台 进入ECS实…...
V8引擎源码编译踩坑实录
背景 为了解决 view8 代码没有指定版本的 v8 引擎问题GitHub - suleram/View8: View8 - Decompiles serialized V8 objects back into high-level readable code. 但是打出来了exe文件也没啥用,不清楚这个view8是解决啥逆向用的,如果想逆向electron的j…...
享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享技术来高效地支持大量细粒度对象的复用。 一、基础 1 意图 运用共享技术有效地支持大量细粒度的对象 减少内存中对象的数量,节省系统资源 2 适用场景 一个应用程序使用了大量对象 由于对象数量庞大造成很大的…...