Python-八股总结
目录
- 1 python 垃圾处理机制
- 2 yield
- 3 python 多继承,两个父类有同名方法怎么办?
- 4 python 多线程/多进程/协程
- 4.1 多线程与GIL全局解释器锁
- 4.2 多进程
- 4.3 协程
- 5 乐观锁/悲观锁
- 6 基本数据结构
- **1. 列表(List)**
- **2. 元组(Tuple)**
- **3. 字典(Dictionary)**
- **4. 集合(Set)**
- **5. 字符串(String)**
- **6. 队列(Queue)**
- **7. 栈(Stack)**
- **8. 堆(Heap)**
- **汇总**
- 7 `is` 和 `==` 的区别(适用于 Python 3.7)
- **示例**
- 8 什么是 Lambda 函数(适用于 Python 3.8)
- **语法**
- **示例**
- **应用场景**
- 9 函数传参
- 10 `*args` 和 `**kwargs` 的用法与原理**
- **(1) `*args`(可变位置参数)**
- **(2) `**kwargs`(可变关键字参数)**
- **(3) `*args` 和 `**kwargs` 混用**
- 11 装饰器(Decorator)的作用与原理
- **(1) 装饰器的作用**
- **(2) 装饰器的原理**
- 12 Python 变量的作用域
- 13 解释型和编译型语言的区别
- **(1) 解释型语言**
- **(2) 编译型语言**
- 14 `__init__ `和 `__new__ `的区别
- 15 Python 的 `list` 和 `numpy.array`(数组)的区别
- **1. 类型限制**
- **2. 性能**
- **3. 功能与方法**
- **4. 内存效率**
- **5. 维度支持**
- **6. 广播机制**
- **总结**
- 16 Python 的面向对象(OOP)
- 1. **封装 (Encapsulation)**
- **封装的关键点:**
- **示例:**
- 2. **继承 (Inheritance)**
- **继承的关键点:**
- **示例:**
- 3. **多态 (Polymorphism)**
- **多态的关键点:**
- **示例:**
- **总结:**
- 17
1 python 垃圾处理机制
Python垃圾回收详细讲解
2 yield
def fibonacci(n):result = []a, b = 0, 1for _ in range(n):result.append(a) # 存储所有 Fibonacci 数值a, b = b, a + breturn result # 一次性返回所有值fib = fibonacci(1000000) # 计算 100 万个斐波那契数def fibonacci(n):a, b = 0, 1for _ in range(n):yield a # 每次迭代返回一个值,而不是存入列表a, b = b, a + bfib = fibonacci(1000000) # 创建生成器对象,但不立即计算
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
0
1
1
2
3
3 python 多继承,两个父类有同名方法怎么办?
单继承
class Parent:def greet(self):print("Hello from Parent!")class Child(Parent): # Child 继承 Parentpassc = Child()
c.greet() # 输出: Hello from Parent!
多继承
class Parent1:def greet(self):print("Hello from Parent1!")class Parent2:def greet(self):print("Hello from Parent2!")class Child(Parent1, Parent2): # 继承多个父类passc = Child()
c.greet() # 输出什么?
Python 解决多继承方法冲突的方法是 MRO(Method Resolution Order),即方法解析顺序。在 Python 中,MRO 遵循 C3 线性化算法,它按照深度优先+广度遍历的方式来确定方法的调用顺序。
可以用 .__ mro__ 或 mro() 方法查看 MRO:print(Child.__mro__)
(<class ‘main.Child’>, <class ‘main.Parent1’>, <class ‘main.Parent2’>, <class ‘object’>)
先查找 Child
再查找 Parent1
再查找 Parent2
最后查找 object(所有类的基类)
解决方法冲突
直接指定某个父类的方法
class Parent1:def greet(self):print("Hello from Parent1!")class Parent2:def greet(self):print("Hello from Parent2!")class Child(Parent1, Parent2):def greet(self):Parent2.greet(self) # 直接调用 Parent2 的方法c = Child()
c.greet() # 输出: Hello from Parent2!
4 python 多线程/多进程/协程
多线程指在同一个进程内通过创建多个线程来执行任务。每个线程都可以执行不同的任务,但它们共享同一进程的内存空间和资源。
多进程是指通过创建多个进程来并行执行任务。每个进程拥有独立的内存空间和资源,可以完全独立地运行。
4.1 多线程与GIL全局解释器锁
在同一进程中创建多个线程,共享进程内存空间,通过线程调度器实现并发执行。由于 Python 的 GIL(全局解释器锁)GIL全局解释器锁,多线程在 CPU 密集型任务(如计算)下无法真正实现并行,只适用于 I/O 密集型任务(如网络请求、文件读写)。
使用方式1 传入目标方法
import threading
def worker():print('线程正在执行')
# 创建线程
t = threading.Thread(target=worker)
# 启动线程
t.start()
# 等待线程执行完毕
t.join()使用方式2 集成重写方法
class MyThread(threading.Thread):def run(self):print(f'{self.name} 线程正在执行')
# 创建线程实例
my_thread = MyThread()
# 启动线程
my_thread.start()
# 等待线程执行完毕
my_thread.join()
4.2 多进程
4.3 协程
- 协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
- 第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
def coroutine_example():print("Coroutine started")x = yield "First yield value"print(f"Received: {x}")y = yield "Second yield value"print(f"Received: {y}")return "Coroutine finished"# 创建协程实例
coroutine = coroutine_example()# 启动协程,执行到第一个yield处
print(next(coroutine)) # 输出: Coroutine started,并返回 "First yield value"# 恢复协程,传入值给x,继续执行到第二个yield处
print(coroutine.send(10)) # 输出: Received: 10,并返回 "Second yield value"# 再次恢复协程,传入值给y,继续执行到结束
result = coroutine.send(20) # 输出: Received: 20,然后协程结束# 捕获协程结束时的返回值
print(f"Coroutine result: {result}") # 输出: Coroutine result: Coroutine finished# 尝试再次恢复协程会引发StopIteration异常
try:coroutine.send(30)
except StopIteration as e:print(f"Coroutine ended with exception: {e}") # 捕获异常并输出
5 乐观锁/悲观锁
悲观锁 适用于高并发、冲突频繁的场景 确保同一时刻只有一个线程能访问数据,从而避免数据不一致
乐观锁 适用于并发冲突较少的场景 它允许多个线程同时读取数据,更新时检查数据是否被修改,若有冲突则重试。
6 基本数据结构
Python 的基本数据结构主要包括以下几类:
1. 列表(List)
- 可变,支持增删改查
- 有序,支持索引访问
- 允许重复元素
- 底层实现:动态数组
lst = [1, 2, 3, 4]
lst.append(5) # 添加元素
lst.pop() # 删除末尾元素
lst[1] = 99 # 修改元素
2. 元组(Tuple)
- 不可变,一旦创建不能修改
- 有序,支持索引访问
- 允许重复元素
- 底层实现:静态数组
tup = (1, 2, 3, 4)
val = tup[1] # 访问元素
3. 字典(Dictionary)
- 可变,支持动态添加键值对
- 无序(Python 3.6 之前),有序(Python 3.7+)
- 键唯一,不可变;值可变
- 底层实现:哈希表(dict 使用哈希函数存储键值对)
d = {'a': 1, 'b': 2}
d['c'] = 3 # 添加键值对
d.pop('b') # 删除键值对
4. 集合(Set)
- 可变,支持增删元素
- 无序
- 不允许重复元素
- 底层实现:哈希表
s = {1, 2, 3}
s.add(4) # 添加元素
s.remove(2) # 删除元素
5. 字符串(String)
- 不可变
- 有序,支持索引访问
- 支持切片
- 底层实现:字符数组
s = "hello"
print(s[1]) # 'e'
print(s[:3]) # 'hel'
6. 队列(Queue)
- FIFO(先进先出)
- 通常使用
collections.deque
实现
from collections import deque
q = deque()
q.append(1) # 入队
q.popleft() # 出队
7. 栈(Stack)
- LIFO(后进先出)
- 通常使用
list
或collections.deque
实现
stack = []
stack.append(1) # 入栈
stack.pop() # 出栈
8. 堆(Heap)
- 默认是最小堆
- Python 使用
heapq
模块
import heapq
heap = [3, 1, 4]
heapq.heapify(heap) # 转换为堆
heapq.heappush(heap, 2) # 入堆
heapq.heappop(heap) # 出堆(最小值)
汇总
数据结构 | 可变性 | 有序性 | 允许重复 | 适用场景 |
---|---|---|---|---|
列表(list) | ✅ 可变 | ✅ 有序 | ✅ 允许 | 需要动态增删改查 |
元组(tuple) | ❌ 不可变 | ✅ 有序 | ✅ 允许 | 需要不可变序列 |
字典(dict) | ✅ 可变 | ✅ 有序 (Py3.7+) | ❌ 键唯一 | 需要键值对存储 |
集合(set) | ✅ 可变 | ❌ 无序 | ❌ 不允许 | 需要去重 |
字符串(str) | ❌ 不可变 | ✅ 有序 | ✅ 允许 | 处理文本 |
队列(queue) | ✅ 可变 | ✅ 有序 | ✅ 允许 | 先进先出(FIFO) |
栈(stack) | ✅ 可变 | ✅ 有序 | ✅ 允许 | 后进先出(LIFO) |
堆(heap) | ✅ 可变 | ✅ 有序 | ✅ 允许 | 维护最小/最大值 |
7 is
和 ==
的区别(适用于 Python 3.7)
is
比较的是对象的内存地址(是否是同一个对象)。==
比较的是对象的值(内容是否相等)。
示例
a = [1, 2, 3]
b = [1, 2, 3]
c = aprint(a == b) # True (内容相同)
print(a is b) # False (a 和 b 是不同的对象)print(a == c) # True (内容相同)
print(a is c) # True (a 和 c 指向同一对象)
8 什么是 Lambda 函数(适用于 Python 3.8)
lambda
函数是匿名函数,即没有名字的函数,使用 lambda
关键字定义。
语法
lambda 参数: 表达式
示例
add = lambda x, y: x + y
print(add(3, 5)) # 8
等价于:
def add(x, y):return x + y
应用场景
- 用于
map()
、filter()
、sorted()
nums = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, nums))
print(squared) # [1, 4, 9, 16, 25]even_nums = list(filter(lambda x: x % 2 == 0, nums))
print(even_nums) # [2, 4]pairs = [(1, 2), (3, 1), (5, 0)]
pairs.sort(key=lambda x: x[1])
print(pairs) # [(5, 0), (3, 1), (1, 2)]
- 作为
functools.reduce()
的参数
from functools import reduce
nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product) # 24
9 函数传参
类型 | 可变性 | 示例 | 函数内部修改是否影响原变量 |
---|---|---|---|
不可变对象 | ❌ 不可变 | int 、float 、str 、tuple | ❌ 不影响,创建新对象 |
可变对象 | ✅ 可变 | list 、dict 、set | ✅ 影响,会修改原对象 |
10 *args
和 **kwargs
的用法与原理**
(1) *args
(可变位置参数)
- 允许函数接收任意数量的位置参数,并将它们存储为一个 元组 (
tuple
)。
def add(*args):return sum(args)print(add(1, 2, 3)) # 6
print(add(4, 5, 6, 7)) # 22
等价于:
def add(a, b, c):return a + b + c
原理:
*args
作用是 收集 多个位置参数,将它们封装成一个元组传递给函数。
(2) **kwargs
(可变关键字参数)
- 允许函数接收任意数量的 关键字参数,并将它们存储为 字典 (
dict
)。
def greet(**kwargs):for key, value in kwargs.items():print(f"{key} : {value}")greet(name="Alice", age=25, country="USA")
# name : Alice
# age : 25
# country : USA
原理:
**kwargs
作用是 收集 多个关键字参数,并存储为字典 {key: value}
传递给函数。
(3) *args
和 **kwargs
混用
*args
必须放在**kwargs
之前,否则会报错。
def demo(a, b, *args, c=10, **kwargs):print(a, b, args, c, kwargs)demo(1, 2, 3, 4, 5, c=20, x=100, y=200)
# 输出:1 2 (3, 4, 5) 20 {'x': 100, 'y': 200}
11 装饰器(Decorator)的作用与原理
(1) 装饰器的作用
装饰器用于 在不修改原函数代码的情况下,增强函数的功能,比如:
- 计算函数执行时间
- 记录日志
- 检查权限
- 缓存数据
(2) 装饰器的原理
装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。
def decorator(func):def wrapper():print("执行前")func()print("执行后")return wrapper@decorator
def hello():print("Hello, world!")hello()
# 执行前
# Hello, world!
# 执行后
等价于:
def hello():print("Hello, world!")hello = decorator(hello)
hello()
@decorator
语法糖的作用:等价于 hello = decorator(hello)
12 Python 变量的作用域
Python 作用域遵循 LEGB 规则:
- Local(局部作用域):函数内部定义的变量。
- Enclosing(闭包作用域):外部嵌套函数的变量。
- Global(全局作用域):模块级变量。
- Built-in(内建作用域):Python 预定义的变量,如
len()
。
x = "global"def outer():x = "enclosing"def inner():x = "local"print(x) # 输出 "local"inner()print(x) # 输出 "enclosing"outer()
print(x) # 输出 "global"
13 解释型和编译型语言的区别
(1) 解释型语言
- 代码逐行执行,不需要预先编译。
- 运行时才翻译,直接执行。
- 适用于动态语言(Python、JavaScript)。
print("Hello, World!") # Python 解释器逐行执行
(2) 编译型语言
- 代码需要 先编译 成机器码(
.exe
等),然后执行。 - 运行速度快,但需要编译过程。
- 适用于静态语言(C、C++、Rust)。
#include <stdio.h>
int main() {printf("Hello, World!");return 0;
}
编译后生成 a.out
文件,运行时不需要解释。
14 __init__
和 __new__
的区别
方法 | 作用 | 调用时机 |
---|---|---|
__new__ | 创建对象,返回对象实例 | 类实例化时,先调用 __new__ |
__init__ | 初始化对象,设置属性 | __new__ 之后调用 __init__ |
class A:def __new__(cls, *args, **kwargs):print("调用 __new__")instance = super().__new__(cls)return instancedef __init__(self, name):print("调用 __init__")self.name = namea = A("Tom")
# 调用 __new__
# 调用 __init__
15 Python 的 list
和 numpy.array
(数组)的区别
虽然 list
和 numpy.array
都是可以存储一系列元素的容器,但它们在以下几个方面有显著区别:
1. 类型限制
-
list
:
list
是 动态类型,可以存储不同类型的元素,例如整数、字符串、浮点数等。元素的类型可以混合在一起。my_list = [1, "hello", 3.14]
-
numpy.array
:
numpy.array
是 同质类型,即所有元素必须是相同的数据类型(例如,全是整数或浮点数),并且在创建时会固定类型。这样做的好处是可以更高效地进行数值计算。import numpy as np arr = np.array([1, 2, 3]) # 类型为整数
2. 性能
-
list
:
Python 的list
是为通用数据存储设计的,它的元素可以是任何对象,因此它的操作(如访问、添加或删除元素)通常需要更多的内存管理和更复杂的逻辑。对于大规模数值计算或高性能需求,list
可能不够高效。 -
numpy.array
:
numpy.array
是专门为科学计算设计的,所有元素都是同一数据类型,因此在内存中是连续存储的。这样可以利用低级优化(如 SIMD)来提高性能,特别是在进行大量数学运算时,numpy.array
显著优于list
。import numpy as np arr1 = np.array([1, 2, 3, 4, 5]) arr2 = np.array([6, 7, 8, 9, 10]) result = arr1 + arr2 # 进行高效的向量加法
3. 功能与方法
-
list
:
list
是 Python 内建的数据结构,支持的基本操作包括添加、删除、修改、切片等,但它不支持直接进行数学或向量操作。my_list = [1, 2, 3] my_list.append(4) my_list.pop()
-
numpy.array
:
numpy.array
提供了 大量的数学运算和线性代数操作,例如向量加法、矩阵乘法、元素级操作、广播等。import numpy as np arr = np.array([1, 2, 3]) result = arr * 2 # 每个元素都乘以 2 print(result) # 输出 [2, 4, 6]
numpy
还支持很多函数,比如矩阵乘法(np.dot()
)、求和(np.sum()
)等。
4. 内存效率
-
list
:
Python 的list
是动态数组,元素存储为指针,因此每个元素的内存开销较大。此外,由于 Python 的list
是动态扩展的,可能会发生重新分配内存,这也会影响性能。 -
numpy.array
:
numpy.array
使用 紧凑的内存布局,所有元素连续存储,这使得它的内存使用更加高效,尤其是当处理大量数据时。
5. 维度支持
-
list
:
Python 的list
只能表示一维数组。如果要表示多维数据(如二维矩阵),通常会使用嵌套list
。my_list = [[1, 2], [3, 4], [5, 6]] # 需要嵌套 list 来模拟二维矩阵
-
numpy.array
:
numpy.array
支持任意维度的数组,能够表示 一维、二维、三维 等复杂的数据结构,并可以轻松地进行切片和变形操作。arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 2D array
6. 广播机制
-
list
:
list
不支持 广播机制(Broadcasting),这意味着你不能直接对list
进行元素级的算术操作。 -
numpy.array
:
numpy.array
支持广播机制,可以让不同形状的数组之间进行运算。它会自动扩展数组的形状,以便进行元素级运算。arr = np.array([1, 2, 3]) result = arr + 10 # 结果是 [11, 12, 13]
总结
list
是 Python 内建的通用容器,适用于存储不同类型的元素,且易于使用,但在进行数值计算时性能不佳。numpy.array
是为科学计算设计的高效数组类型,它支持同质数据存储、广播机制和大量的数学运算操作,特别适用于需要高性能的数值计算任务。
在处理大量数值数据时,numpy.array
更加高效。如果你的任务主要涉及到数值计算、矩阵操作等,建议使用 numpy
。而如果你需要处理混合类型的数据或进行常规的存储,list
可能更合适。
16 Python 的面向对象(OOP)
Python 的面向对象(OOP)特性包括 封装、继承 和 多态,这三个是面向对象编程的核心概念。下面详细解释这三个特性:
1. 封装 (Encapsulation)
封装是指将对象的状态(属性)和行为(方法)绑定在一起,并对外界隐藏实现细节,只暴露必要的接口。
封装的关键点:
- 私有属性和方法:可以使用双下划线(
__
)将属性或方法标记为私有,防止外部直接访问或修改。 - 公共接口:通过公共的接口(通常是方法),提供对私有数据的访问或操作。这样,外部只能通过这些方法访问和修改对象的状态,而无法直接改变对象的内部实现。
示例:
class Person:def __init__(self, name, age):self.__name = name # 私有属性self.__age = age # 私有属性def get_name(self): # 公共方法return self.__namedef set_name(self, name): # 公共方法self.__name = namedef get_age(self): # 公共方法return self.__agedef set_age(self, age): # 公共方法self.__age = age# 创建对象
person = Person("Alice", 30)
print(person.get_name()) # 通过公共接口访问私有属性
通过封装,我们可以控制对象的属性的读取和修改方式,保证对象的状态在有效范围内。
2. 继承 (Inheritance)
继承是面向对象的一种机制,允许一个类继承另一个类的属性和方法。继承实现了代码的复用,并支持子类重写父类的方法,从而能够对父类的行为进行定制。
继承的关键点:
- 父类和子类:父类(或基类)是被继承的类,子类(或派生类)是继承父类的类。子类可以继承父类的所有公有属性和方法,也可以重写父类的方法。
- 方法重写:子类可以重写父类的方法来改变或扩展其行为。
示例:
class Animal:def speak(self):print("Animal makes a sound")class Dog(Animal): # Dog 类继承 Animal 类def speak(self): # 重写父类方法print("Dog barks")class Cat(Animal): # Cat 类继承 Animal 类def speak(self): # 重写父类方法print("Cat meows")# 创建对象
dog = Dog()
dog.speak() # 输出 Dog barkscat = Cat()
cat.speak() # 输出 Cat meows
在上面的例子中,Dog
和 Cat
都继承了 Animal
类,并且各自重写了 speak
方法,实现了不同的行为。继承让代码更具可复用性。
3. 多态 (Polymorphism)
多态是指同一个方法或操作可以作用于不同的对象上,并且表现出不同的行为。多态可以通过方法重写(子类中重新定义父类方法)和接口统一来实现。
多态的关键点:
- 方法重写:子类可以重写父类的方法,使得不同子类的对象能够调用相同的方法时表现出不同的行为。
- 统一接口:不同类型的对象可以通过统一的接口(方法)进行操作,方法的具体实现取决于对象的类型。
示例:
class Animal:def speak(self):raise NotImplementedError("Subclass must implement abstract method")class Dog(Animal):def speak(self):print("Dog barks")class Cat(Animal):def speak(self):print("Cat meows")# 创建对象
animals = [Dog(), Cat()]for animal in animals:animal.speak() # 输出不同的行为:Dog barks 和 Cat meows
在上面的例子中,Dog
和 Cat
都继承自 Animal
类,并重写了 speak
方法。通过父类引用调用 speak()
方法时,Python 会根据实际的对象类型(Dog
或 Cat
)来决定调用哪个版本的 speak
方法,从而实现了多态。
总结:
- 封装:通过限制直接访问对象的属性和方法,保证对象的状态不被外部直接修改,提供了更好的数据保护和接口管理。
- 继承:通过继承机制,子类可以复用父类的代码,并可以通过方法重写扩展或修改父类的行为。
- 多态:允许同一接口根据对象的不同类型表现出不同的行为,从而使得程序更具扩展性和灵活性。
这三个特性是面向对象编程的基础,设计更清晰、更易维护的代码。
17
相关文章:
Python-八股总结
目录 1 python 垃圾处理机制2 yield3 python 多继承,两个父类有同名方法怎么办?4 python 多线程/多进程/协程4.1 多线程与GIL全局解释器锁4.2 多进程4.3 协程 5 乐观锁/悲观锁6 基本数据结构**1. 列表(List)****2. 元组࿰…...
整合分块请求大模型返回的测试用例及小工具显示bug修复
在之前的分块发送需求数据给大模型进行测试用例生成时,由于数据结构的改变,需要对分块的回复进行整合,正确的整合是保障系统稳定性和功能正确性的核心。随着测试需求的复杂化,这对测试工程师提出了更高的整合和管理要求。本文将为…...
记一道CTF题—PHP双MD5加密+”SALT“弱碰撞绕过
通过分析源代码并找到绕过限制的方法,从而获取到flag! 部分源码: <?php $name_POST[username]; $passencode(_POST[password]); $admin_user "admin"; $admin_pw get_hash("0e260265122865008095838959784793");…...
stm32F103RCT6 FLASH模拟EEPROM 读写32位数据
#include “stm32flash.h” #ifndef __STMFLASH_H__ #define __STMFLASH_H__ #include "main.h" #define</...
Spring Data审计利器:@LastModifiedDate详解!!!
🕒 Spring Data审计利器:LastModifiedDate详解🔥 🌟 简介 在数据驱动的应用中,记录数据的最后修改时间是常见需求。Spring Data的LastModifiedDate注解让这一过程自动化成为可能!本篇带你掌握它的核心用法…...
【SLURM】介绍
SLURM Slurm(Simple Linux Utility for Resource Management) 是一个用于管理和调度计算集群任务的开源作业调度系统。它主要用于高性能计算(HPC)环境,比如超算中心、大学的计算集群或企业的数据中心。 本文主要针对使…...
算法-贪心算法
圣诞老人的礼物-Santa Clau’s Gifts 现在有多箱不同的糖果,每箱糖果有自己的价值和重量,每箱糖果都可以拆分成任意散装组合带走。圣 诞老人的驯鹿雪橇最多只能装下重量W的糖果,请 问圣诞老人最多能带走多大价值的糖果。 输入 第一行由两个…...
Nginx — Nginx处理Web请求机制解析
一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务: 二、Nginx进程模型 1、nginx常用命令解析 master进程:主进程(只有一个) worker进程:工作进程(可以有多个,默认只有一…...
GAN随手笔记
文章目录 1. description2. code 1. description 后续整理 GAN是生成对抗网络,主要由G生成器,D判别器组成,具体形式如下 D 判别器: G生成器: 2. code 部分源码,暂定,后续修改 import nump…...
Java 8 时区与历法处理指南:跨越全球的时间管理
Java 8 的 java.time API 不仅修复了旧版日期时间 API 的设计缺陷,还提供了对时区和多历法的全面支持。无论是处理全球化应用的时区转换,还是适配不同文化的日历系统,Java 8 都能轻松应对。本文将深入解析其核心功能,并提供实用代…...
【STM32】对stm32F103VET6指南者原理图详解(超详细)
目录 一、原理图基本概念二、STM32F103VET6 的主要特性二、MCU模块三、电源模块四、时钟模块五、复位模块NRST 六、GPIO模块LED 七、调试模块JTAG 八、外设模块UARTSPII2CADC 九、其它模块BOOT 一、原理图基本概念 原理图/电路图通常由硬件工程师使用Altium Designer/ KiCad / …...
瑞芯微RKRGA(librga)Buffer API 分析
一、Buffer API 简介 在瑞芯微官方的 librga 库的手册中,有两组配置 buffer 的API: importbuffer 方式: importbuffer_virtualaddr importbuffer_physicaladdr importbuffer_fd wrapbuffer 方式: wrapbuffer_virtualaddr wrapb…...
移动端六大语言速记:第1部分 - 基础语法与控制结构
移动端六大语言速记:第1部分 - 基础语法与控制结构 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法与控制结构,帮助开发者快速理解各语言间的差异与共性。 1. 基础语法 1.1 数据类型 各语言的基本数据…...
Java 大视界 -- Java 大数据在智能金融区块链跨境支付与结算中的应用(154)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Python Playwright库全面详解
Playwright 是 Microsoft 开发的一个现代化的端到端测试和浏览器自动化库,支持 Chromium、WebKit 和 Firefox 浏览器。它提供了跨浏览器、跨平台的自动化能力,且具有高性能和可靠性。 一、核心特性 多浏览器支持: Chromium (Chrome, Edge)We…...
脑疾病分类的疑惑【6】:脑疾病分类比较适合使用具有哪些特点的模型?
脑疾病分类是一个复杂的任务,涉及医学影像、神经电生理信号、基因数据等多种信息类型。为了有效地进行脑疾病分类,选择合适的模型是至关重要的。以下是一些适合脑疾病分类的模型特点,您可以参考这些特点来选择合适的模型: 1. 深度…...
24_原型和原型链_this
目录 一、this关键字 修改this的指向 二、原型和原型链 三、创建对象 通过构造函数创建 (es5) 通过类创建 (es6) 四、浅拷贝和深拷贝 ctrlc 浅拷贝: 只拷贝一层 深拷贝: 可以拷贝多层 一、this关键字 每个函…...
自定义类型:结构体(1)
1.结构体回顾 结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.1结构的声明 struct tag {member-list; }variable-list;例如描述一个学生: struct Stu {char name[20];int age;char sex[5]; }; 1.2结构体变量的创…...
Java进阶——Lombok的使用
Lombok可以通过注解的方式,在编译时自动生成 getter、setter、构造函数、toString 等样板代码,从而减少代码的冗余,提高开发效率。本文深入讲解Lombok在实际开发中的使用。 本文目录 1. Lombok 依赖添加2. 常用Lombok注解及使用场景2.1 Gette…...
饿了么 bx-et 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 import requests bx_et re…...
python黑科技:无痛修改第三方库源码
需求不符合 很多时候,我们下载的 第三方库 是不会有需求不满足的情况,但也有极少的情况,第三方库 没有兼顾到需求,导致开发者无法实现相关功能。 如何通过一些操作将 第三方库 源码进行修改,是我们将要遇到的一个难点…...
PGD对抗样本生成算法实现(pytorch版)
PGD对抗样本生成算法 一、理论部分1.1 PGD 原理(1) 数学形式(2) 核心改进1.2 PGD 与其他攻击对比1.3 注意事项二、代码实现2.1 导包2.2 数据加载和处理2.3 网络构建2.4 模型加载2.5 生成对抗样本2.6 对抗测试2.7 启动攻击2.8 效果展示一、理论部分 1.1 PGD 原理 PGD 是 BIM/I-…...
小智机器人相关函数解析,BackgroundTask::Schedule (***)将一个回调函数添加到后台任务队列中等待执行
以下是对 BackgroundTask::Schedule 函数代码的详细解释: void BackgroundTask::Schedule(std::function<void()> callback) {std::lock_guard<std::mutex> lock(mutex_);if (active_tasks_ > 30) {int free_sram heap_caps_get_free_size(MALLOC_…...
C++学习之路:深入理解变量
目录 编程的本质变量的本质内存模型、变量名与值以及地址的关系数据类型C数据类型数据类型别名数据类型转换 变量作用域总结 编程的本质 编程的本质是什么?虽然程序里能实现很多复杂的逻辑,但是从底层的硬件上来看,编程的本质就是数据的搬移。…...
前端基础知识汇总
目录 HTML5详解(结构层) 什么是HTML HTML基本结构 网页基本信息 图像标签 链接标签 超链接 行内元素与块元素 列表标签 表格标签 页面结构分析 iframe内联框架 表单语法 表单元素格式 表单的简单应用 表单初级验证 CSS详解(…...
2024蓝桥杯省赛C/C++大学B组 题解
文章目录 2024蓝桥杯省赛C/C大学B组A 握手问题(5分)B 小球反弹(5分)C 好数(10分)D R 格式(10分)E 宝石组合(15分)F 数字接龙(15分)G 爬…...
BIM/I-FGSM对抗样本生成算法实现(pytorch版)
BIM/I-FGSM对抗样本生成算法 一、理论部分1.1 核心思想1.2 数学形式1.3 BIM 的优缺点1.4 BIM 与 FGSM、PGD 的关系1.5 实际应用建议二、代码实现2.1 导包2.2 数据加载和处理2.3 网络构建2.4 模型加载2.5 生成对抗样本2.6 攻击测试2.7 启动攻击2.8 效果展示一、理论部分 1.1 核心…...
前沿科技:从Gen2到Gen3—Kinova轻型机械臂的技术升级路径
Kinova品牌在轻型机械臂行业中以其轻量化、灵活性和高精度的技术特点而知名。其产品线广泛适用于医疗、科研和工业等多个领域,对机器人技术的进步起到了积极的推动作用。Kinova轻型机械臂凭借其精良的设计和稳定的性能,为用户提供了高效且可靠的解决方案…...
智研咨询:2025DeepSeek技术全景解析重塑全球AI生态的中国力量|附下载方法
导 读INTRODUCTION 随着人工智能技术的飞速发展,AI大模型已成为推动行业进步的重要力量。智研咨询最新发布的《DeepSeek技术全景解析重塑全球AI生态的中国力量》报告,深入探讨了DeepSeek公司在AI领域的突破性成就及其对全球AI生态的深远影响。 如果感兴…...
超导量子计算机编程实战:IBM Qiskit 2025新API详解
一、量子计算平台演进与Qiskit 2025定位 1.1 IBM量子硬件发展路线 2025年IBM将实现三大技术突破: 量子体积:新一代"Goldeneye"处理器达到QV 8192相干时间:超导量子比特寿命突破500μs互联规模:模块化架构支持万级量子…...
斐波那契数列----C语言
关于斐波那契 已知: 问题背景:一对兔子从第3个月开始每月生一对新兔子,新兔子同样在第3个月开始繁殖。 关键观察: 第1个月:1对(初始兔子)。 第2个月:1对(未成熟&#…...
打开pycharm显示编制索引后卡死
若项目中包含过多文件,PyCharm 启动后会进行自动索引,电脑性能不高时往往会导致崩溃(主要是内存问题)。以下为解决措施。 ✅ 1. 仅索引代码,排除文件 设置PyCharm 主要索引代码文件(.py、.ipynbÿ…...
AWS云安全全面详解:从基础防护到高级威胁应对
随着企业加速向云端迁移,AWS作为全球最大的云服务提供商之一,其安全性成为用户首要关注的问题。本文将深入剖析AWS云安全架构,从基础防护到高级威胁应对,帮助您构建全方位的云安全防线。 一、AWS安全责任共担模型 在深入探讨AWS具体安全措施前,首先需要理解AWS的安全责任…...
【C++重点】虚函数与多态
在 C 中,虚函数是实现多态的基础。多态是面向对象编程的重要特性之一,允许程序在运行时决定调用哪一个函数版本。通过虚函数,我们能够实现动态绑定,使得不同类型的对象可以通过相同的接口进行操作。 1 静态绑定与动态绑定 静态绑…...
算法学习之BFS
关于BFS我的理解是根据离我们当前这个点的权重来移动,这里权重也可以理解为离这个点的距离, 从起点开始,往前走一步,记录下所有第一步能走到的点开始,然后从所有第一部能走到的点开始向前走第二步,重复下去…...
每日小积累day1
网络: g是用来检测网络联通性的的诊断工具,使用的协议是ICMP 显示数据包括 ICMP数据:序列号,存活时间(TTL) 目标主机域名IP 往返时间(RTT) 统计数据(平均RTT等等&a…...
【NLP】13. NLP推理方法详解 --- 穷举和贪心搜索
NLP推理方法详解 — 穷举和贪心搜索 在自然语言处理(NLP)任务中,推理(Inference)是指在给定模型的情况下,找到最可能的输出序列。由于模型通常是神经网络,它会为每个可能的输出分配一个概率&am…...
基于 Python 深度学习 lstm 算法的电影评论情感分析可视化系统(2.0 系统全新升级,已获高分通过)
大家好,欢迎来到我的技术专栏!今天我将和大家聊聊如何利用 Python 的深度学习技术,打造一个集电影评论情感分析与可视化展示于一体的系统。这个系统不仅能自动采集和解析海量影评,还能实时生成直观的情感趋势图表,对于…...
妙用《甄嬛传》中的选妃来记忆概率论中的乘法公式
强烈推荐最近在看的不错的B站概率论课程 《概率统计》正课,零废话,超精讲!【孔祥仁】 《概率统计》正课,零废话,超精讲!【孔祥仁】_哔哩哔哩_bilibili 其中概率论中的乘法公式,老师用了《甄嬛传…...
linux--------------进程控制
1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数,它从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值:⾃进程中返回0,⽗进程返回⼦进程id…...
Video Transformer Network
目录 摘要 Abstract VTN 背景 模型框架 视频特征提取 时空位置编码 Transformer编码器 任务特定头 关键创新 实验 代码 总结 摘要 Video Transformer Network 是基于Transformer架构改进的视频理解模型,旨在解决传统3D卷积神经网络在长距离依赖建模和…...
Java网络编程演进:从NIO到Netty的UDP实践全解析
前言 在当前高并发、大数据量的互联网环境下,高性能的网络通信框架变得越来越重要。本文将深入探讨Java网络编程的演进,从NIO到Netty,并通过实际案例分析Netty的优势和应用。(本次主要以UDP请求为例) Java网络编程演…...
Linux系统中快速安装docker
1 查看是否安装docker 要检查Ubuntu是否安装了Docker,可以使用以下几种方法: 方法1:使用 docker --version 命令 docker --version如果Docker已安装,输出会显示Docker的版本信息,例如: Docker version …...
人工智能之数学基础:幂法和反幂法求特征值和特征向量
本文重点 特征值和特征向量是矩阵的重要性质,我们前面学习了矩阵的正交分解,要想完成正交分解需要求出一个矩阵的特征值和特征向量。有的时候,我们只需要求出一个矩阵的最大的特征值以及矩阵的最小特征值,它们以及它们对应的特征向量具有特殊的含义,下面我们介绍两种方法…...
数据结构 -- 树的应用(哈夫曼树和并查集)
树的应用 哈夫曼树 带权路径长度 结点的权:有某种现实含义的数值(如:表示结点的重要性等) 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积 树的带权路径…...
游戏引擎学习第193天
仓库:https://gitee.com/mrxiao_com/2d_game_4 回顾 我们昨天做了一些非常有趣的实验。在实验中,我们的目标是实现一个能够在运行时改变的编译时常量的概念。最开始,这个想法纯粹是出于一时的兴趣,觉得这应该是个很有意思的尝试。于是我们进…...
数据结构每日一题day7(顺序表)★★★★★
题目描述:从顺序表中删除其值在给定值s与t之间(包含s和 t,要求 s<t)的所有元素,若s或t不合理或顺序表为空,则返回 false,若执行成功则返回 true。 算法思想: 输入检查:若顺序表为空、指针为…...
ACM模式常用方法总结(Java篇)
文章目录 一、ACM输入输出模式二、重要语法2.1、导包2.2、读取数据2.3、判断是否有下一个数据2.4、输出2.5、关闭scanner2.6、易踩坑点 一、ACM输入输出模式 在力扣上编写代码时使用的是核心代码模式,如果在面试中遇到ACM模式就会比较迷茫?ACM模式要求你…...
SpringCould微服务架构之Docker(6)
容器的基本命令: 1. docker exec :进入容器执行命令 2. docker logs: -f 持续查看容器的运行日志 3. docker ps:查看所有运行的容器和状态 案例:创建运行一个容Nginx容器 docker run--name myNginx -p 80:80 -d nginx 命…...
脑疾病分类的疑惑【7】一般FMRI数据都存储为什么格式?能不能给我用数据简单的描述一下FMRI是如何存储的?
fMRI 数据通常以 NIfTI(Neuroimaging Informatics Technology Initiative) 格式存储,这是一种专为神经影像设计的开放标准格式。以下是简化说明和示例: 1. 常见fMRI数据格式 格式扩展名特点NIfTI.nii 或 .nii.gz最常用࿰…...