当前位置: 首页 > news >正文

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(后进先出)
  • 通常使用 listcollections.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
应用场景
  1. 用于 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)]
  1. 作为 functools.reduce() 的参数
from functools import reduce
nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product)  # 24

9 函数传参

类型可变性示例函数内部修改是否影响原变量
不可变对象❌ 不可变intfloatstrtuple❌ 不影响,创建新对象
可变对象✅ 可变listdictset✅ 影响,会修改原对象

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 规则

  1. Local(局部作用域):函数内部定义的变量。
  2. Enclosing(闭包作用域):外部嵌套函数的变量。
  3. Global(全局作用域):模块级变量。
  4. 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 的 listnumpy.array(数组)的区别

虽然 listnumpy.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

在上面的例子中,DogCat 都继承了 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

在上面的例子中,DogCat 都继承自 Animal 类,并重写了 speak 方法。通过父类引用调用 speak() 方法时,Python 会根据实际的对象类型(DogCat)来决定调用哪个版本的 speak 方法,从而实现了多态。


总结:
  1. 封装:通过限制直接访问对象的属性和方法,保证对象的状态不被外部直接修改,提供了更好的数据保护和接口管理。
  2. 继承:通过继承机制,子类可以复用父类的代码,并可以通过方法重写扩展或修改父类的行为。
  3. 多态:允许同一接口根据对象的不同类型表现出不同的行为,从而使得程序更具扩展性和灵活性。

这三个特性是面向对象编程的基础,设计更清晰、更易维护的代码。

17

相关文章:

Python-八股总结

目录 1 python 垃圾处理机制2 yield3 python 多继承&#xff0c;两个父类有同名方法怎么办&#xff1f;4 python 多线程/多进程/协程4.1 多线程与GIL全局解释器锁4.2 多进程4.3 协程 5 乐观锁/悲观锁6 基本数据结构**1. 列表&#xff08;List&#xff09;****2. 元组&#xff0…...

整合分块请求大模型返回的测试用例及小工具显示bug修复

在之前的分块发送需求数据给大模型进行测试用例生成时&#xff0c;由于数据结构的改变&#xff0c;需要对分块的回复进行整合&#xff0c;正确的整合是保障系统稳定性和功能正确性的核心。随着测试需求的复杂化&#xff0c;这对测试工程师提出了更高的整合和管理要求。本文将为…...

记一道CTF题—PHP双MD5加密+”SALT“弱碰撞绕过

通过分析源代码并找到绕过限制的方法&#xff0c;从而获取到flag&#xff01; 部分源码&#xff1a; <?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详解!!!

&#x1f552; Spring Data审计利器&#xff1a;LastModifiedDate详解&#x1f525; &#x1f31f; 简介 在数据驱动的应用中&#xff0c;记录数据的最后修改时间是常见需求。Spring Data的LastModifiedDate注解让这一过程自动化成为可能&#xff01;本篇带你掌握它的核心用法…...

【SLURM】介绍

SLURM Slurm&#xff08;Simple Linux Utility for Resource Management&#xff09; 是一个用于管理和调度计算集群任务的开源作业调度系统。它主要用于高性能计算&#xff08;HPC&#xff09;环境&#xff0c;比如超算中心、大学的计算集群或企业的数据中心。 本文主要针对使…...

算法-贪心算法

圣诞老人的礼物-Santa Clau’s Gifts 现在有多箱不同的糖果&#xff0c;每箱糖果有自己的价值和重量&#xff0c;每箱糖果都可以拆分成任意散装组合带走。圣 诞老人的驯鹿雪橇最多只能装下重量W的糖果&#xff0c;请 问圣诞老人最多能带走多大价值的糖果。 输入 第一行由两个…...

Nginx — Nginx处理Web请求机制解析

一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务&#xff1a; 二、Nginx进程模型 1、nginx常用命令解析 master进程&#xff1a;主进程&#xff08;只有一个&#xff09; worker进程&#xff1a;工作进程&#xff08;可以有多个&#xff0c;默认只有一…...

GAN随手笔记

文章目录 1. description2. code 1. description 后续整理 GAN是生成对抗网络&#xff0c;主要由G生成器&#xff0c;D判别器组成&#xff0c;具体形式如下 D 判别器&#xff1a; G生成器&#xff1a; 2. code 部分源码&#xff0c;暂定&#xff0c;后续修改 import nump…...

Java 8 时区与历法处理指南:跨越全球的时间管理

Java 8 的 java.time API 不仅修复了旧版日期时间 API 的设计缺陷&#xff0c;还提供了对时区和多历法的全面支持。无论是处理全球化应用的时区转换&#xff0c;还是适配不同文化的日历系统&#xff0c;Java 8 都能轻松应对。本文将深入解析其核心功能&#xff0c;并提供实用代…...

【STM32】对stm32F103VET6指南者原理图详解(超详细)

目录 一、原理图基本概念二、STM32F103VET6 的主要特性二、MCU模块三、电源模块四、时钟模块五、复位模块NRST 六、GPIO模块LED 七、调试模块JTAG 八、外设模块UARTSPII2CADC 九、其它模块BOOT 一、原理图基本概念 原理图/电路图通常由硬件工程师使用Altium Designer/ KiCad / …...

瑞芯微RKRGA(librga)Buffer API 分析

一、Buffer API 简介 在瑞芯微官方的 librga 库的手册中&#xff0c;有两组配置 buffer 的API&#xff1a; importbuffer 方式&#xff1a; importbuffer_virtualaddr importbuffer_physicaladdr importbuffer_fd wrapbuffer 方式&#xff1a; wrapbuffer_virtualaddr wrapb…...

移动端六大语言速记:第1部分 - 基础语法与控制结构

移动端六大语言速记&#xff1a;第1部分 - 基础语法与控制结构 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的基础语法与控制结构&#xff0c;帮助开发者快速理解各语言间的差异与共性。 1. 基础语法 1.1 数据类型 各语言的基本数据…...

Java 大视界 -- Java 大数据在智能金融区块链跨境支付与结算中的应用(154)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Python Playwright库全面详解

Playwright 是 Microsoft 开发的一个现代化的端到端测试和浏览器自动化库&#xff0c;支持 Chromium、WebKit 和 Firefox 浏览器。它提供了跨浏览器、跨平台的自动化能力&#xff0c;且具有高性能和可靠性。 一、核心特性 多浏览器支持&#xff1a; Chromium (Chrome, Edge)We…...

脑疾病分类的疑惑【6】:脑疾病分类比较适合使用具有哪些特点的模型?

脑疾病分类是一个复杂的任务&#xff0c;涉及医学影像、神经电生理信号、基因数据等多种信息类型。为了有效地进行脑疾病分类&#xff0c;选择合适的模型是至关重要的。以下是一些适合脑疾病分类的模型特点&#xff0c;您可以参考这些特点来选择合适的模型&#xff1a; 1. 深度…...

24_原型和原型链_this

目录 一、this关键字 修改this的指向 二、原型和原型链 三、创建对象 通过构造函数创建 &#xff08;es5&#xff09; 通过类创建 &#xff08;es6&#xff09; 四、浅拷贝和深拷贝 ctrlc 浅拷贝&#xff1a; 只拷贝一层 深拷贝: 可以拷贝多层 一、this关键字 每个函…...

自定义类型:结构体(1)

1.结构体回顾 结构是一些值的集合&#xff0c;这些值被称为成员变量。结构的每个成员可以是不同类型的变量。 1.1结构的声明 struct tag {member-list; }variable-list;例如描述一个学生&#xff1a; struct Stu {char name[20];int age;char sex[5]; }; 1.2结构体变量的创…...

Java进阶——Lombok的使用

Lombok可以通过注解的方式&#xff0c;在编译时自动生成 getter、setter、构造函数、toString 等样板代码&#xff0c;从而减少代码的冗余&#xff0c;提高开发效率。本文深入讲解Lombok在实际开发中的使用。 本文目录 1. Lombok 依赖添加2. 常用Lombok注解及使用场景2.1 Gette…...

饿了么 bx-et 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 import requests bx_et re…...

python黑科技:无痛修改第三方库源码

需求不符合 很多时候&#xff0c;我们下载的 第三方库 是不会有需求不满足的情况&#xff0c;但也有极少的情况&#xff0c;第三方库 没有兼顾到需求&#xff0c;导致开发者无法实现相关功能。 如何通过一些操作将 第三方库 源码进行修改&#xff0c;是我们将要遇到的一个难点…...

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 函数代码的详细解释&#xff1a; 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数据类型数据类型别名数据类型转换 变量作用域总结 编程的本质 编程的本质是什么&#xff1f;虽然程序里能实现很多复杂的逻辑&#xff0c;但是从底层的硬件上来看&#xff0c;编程的本质就是数据的搬移。…...

前端基础知识汇总

目录 HTML5详解&#xff08;结构层&#xff09; 什么是HTML HTML基本结构 网页基本信息 图像标签 链接标签 超链接 行内元素与块元素 列表标签 表格标签 页面结构分析 iframe内联框架 表单语法 表单元素格式 表单的简单应用 表单初级验证 CSS详解&#xff08;…...

2024蓝桥杯省赛C/C++大学B组 题解

文章目录 2024蓝桥杯省赛C/C大学B组A 握手问题&#xff08;5分&#xff09;B 小球反弹&#xff08;5分&#xff09;C 好数&#xff08;10分&#xff09;D R 格式&#xff08;10分&#xff09;E 宝石组合&#xff08;15分&#xff09;F 数字接龙&#xff08;15分&#xff09;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品牌在轻型机械臂行业中以其轻量化、灵活性和高精度的技术特点而知名。其产品线广泛适用于医疗、科研和工业等多个领域&#xff0c;对机器人技术的进步起到了积极的推动作用。Kinova轻型机械臂凭借其精良的设计和稳定的性能&#xff0c;为用户提供了高效且可靠的解决方案…...

智研咨询:2025DeepSeek技术全景解析重塑全球AI生态的中国力量|附下载方法

导 读INTRODUCTION 随着人工智能技术的飞速发展&#xff0c;AI大模型已成为推动行业进步的重要力量。智研咨询最新发布的《DeepSeek技术全景解析重塑全球AI生态的中国力量》报告&#xff0c;深入探讨了DeepSeek公司在AI领域的突破性成就及其对全球AI生态的深远影响。 如果感兴…...

超导量子计算机编程实战:IBM Qiskit 2025新API详解

一、量子计算平台演进与Qiskit 2025定位 1.1 IBM量子硬件发展路线 2025年IBM将实现三大技术突破&#xff1a; 量子体积&#xff1a;新一代"Goldeneye"处理器达到QV 8192相干时间&#xff1a;超导量子比特寿命突破500μs互联规模&#xff1a;模块化架构支持万级量子…...

斐波那契数列----C语言

关于斐波那契 已知&#xff1a; 问题背景&#xff1a;一对兔子从第3个月开始每月生一对新兔子&#xff0c;新兔子同样在第3个月开始繁殖。 关键观察&#xff1a; 第1个月&#xff1a;1对&#xff08;初始兔子&#xff09;。 第2个月&#xff1a;1对&#xff08;未成熟&#…...

打开pycharm显示编制索引后卡死

若项目中包含过多文件&#xff0c;PyCharm 启动后会进行自动索引&#xff0c;电脑性能不高时往往会导致崩溃&#xff08;主要是内存问题&#xff09;。以下为解决措施。 ✅ 1. 仅索引代码&#xff0c;排除文件 设置PyCharm 主要索引代码文件&#xff08;.py、.ipynb&#xff…...

AWS云安全全面详解:从基础防护到高级威胁应对

随着企业加速向云端迁移,AWS作为全球最大的云服务提供商之一,其安全性成为用户首要关注的问题。本文将深入剖析AWS云安全架构,从基础防护到高级威胁应对,帮助您构建全方位的云安全防线。 一、AWS安全责任共担模型 在深入探讨AWS具体安全措施前,首先需要理解AWS的安全责任…...

【C++重点】虚函数与多态

在 C 中&#xff0c;虚函数是实现多态的基础。多态是面向对象编程的重要特性之一&#xff0c;允许程序在运行时决定调用哪一个函数版本。通过虚函数&#xff0c;我们能够实现动态绑定&#xff0c;使得不同类型的对象可以通过相同的接口进行操作。 1 静态绑定与动态绑定 静态绑…...

算法学习之BFS

关于BFS我的理解是根据离我们当前这个点的权重来移动&#xff0c;这里权重也可以理解为离这个点的距离&#xff0c; 从起点开始&#xff0c;往前走一步&#xff0c;记录下所有第一步能走到的点开始&#xff0c;然后从所有第一部能走到的点开始向前走第二步&#xff0c;重复下去…...

每日小积累day1

网络&#xff1a; g是用来检测网络联通性的的诊断工具&#xff0c;使用的协议是ICMP 显示数据包括 ICMP数据&#xff1a;序列号&#xff0c;存活时间&#xff08;TTL&#xff09; 目标主机域名IP 往返时间&#xff08;RTT&#xff09; 统计数据&#xff08;平均RTT等等&a…...

【NLP】13. NLP推理方法详解 --- 穷举和贪心搜索

NLP推理方法详解 — 穷举和贪心搜索 在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;推理&#xff08;Inference&#xff09;是指在给定模型的情况下&#xff0c;找到最可能的输出序列。由于模型通常是神经网络&#xff0c;它会为每个可能的输出分配一个概率&am…...

基于 Python 深度学习 lstm 算法的电影评论情感分析可视化系统(2.0 系统全新升级,已获高分通过)

大家好&#xff0c;欢迎来到我的技术专栏&#xff01;今天我将和大家聊聊如何利用 Python 的深度学习技术&#xff0c;打造一个集电影评论情感分析与可视化展示于一体的系统。这个系统不仅能自动采集和解析海量影评&#xff0c;还能实时生成直观的情感趋势图表&#xff0c;对于…...

妙用《甄嬛传》中的选妃来记忆概率论中的乘法公式

强烈推荐最近在看的不错的B站概率论课程 《概率统计》正课&#xff0c;零废话&#xff0c;超精讲&#xff01;【孔祥仁】 《概率统计》正课&#xff0c;零废话&#xff0c;超精讲&#xff01;【孔祥仁】_哔哩哔哩_bilibili 其中概率论中的乘法公式&#xff0c;老师用了《甄嬛传…...

linux--------------进程控制

1.进程创建 1.1fork函数初识 在linux中fork函数是⾮常重要的函数&#xff0c;它从已存在进程中创建⼀个新进程。新进程为⼦进程&#xff0c;⽽原进 程为⽗进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;⾃进程中返回0&#xff0c;⽗进程返回⼦进程id…...

Video Transformer Network

目录 摘要 Abstract VTN 背景 模型框架 视频特征提取 时空位置编码 Transformer编码器 任务特定头 关键创新 实验 代码 总结 摘要 Video Transformer Network 是基于Transformer架构改进的视频理解模型&#xff0c;旨在解决传统3D卷积神经网络在长距离依赖建模和…...

Java网络编程演进:从NIO到Netty的UDP实践全解析

前言 在当前高并发、大数据量的互联网环境下&#xff0c;高性能的网络通信框架变得越来越重要。本文将深入探讨Java网络编程的演进&#xff0c;从NIO到Netty&#xff0c;并通过实际案例分析Netty的优势和应用。&#xff08;本次主要以UDP请求为例&#xff09; Java网络编程演…...

Linux系统中快速安装docker

1 查看是否安装docker 要检查Ubuntu是否安装了Docker&#xff0c;可以使用以下几种方法&#xff1a; 方法1&#xff1a;使用 docker --version 命令 docker --version如果Docker已安装&#xff0c;输出会显示Docker的版本信息&#xff0c;例如&#xff1a; Docker version …...

人工智能之数学基础:幂法和反幂法求特征值和特征向量

本文重点 特征值和特征向量是矩阵的重要性质,我们前面学习了矩阵的正交分解,要想完成正交分解需要求出一个矩阵的特征值和特征向量。有的时候,我们只需要求出一个矩阵的最大的特征值以及矩阵的最小特征值,它们以及它们对应的特征向量具有特殊的含义,下面我们介绍两种方法…...

数据结构 -- 树的应用(哈夫曼树和并查集)

树的应用 哈夫曼树 带权路径长度 结点的权&#xff1a;有某种现实含义的数值&#xff08;如&#xff1a;表示结点的重要性等&#xff09; 结点的带权路径长度&#xff1a;从树的根到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积 树的带权路径…...

游戏引擎学习第193天

仓库:https://gitee.com/mrxiao_com/2d_game_4 回顾 我们昨天做了一些非常有趣的实验。在实验中&#xff0c;我们的目标是实现一个能够在运行时改变的编译时常量的概念。最开始&#xff0c;这个想法纯粹是出于一时的兴趣&#xff0c;觉得这应该是个很有意思的尝试。于是我们进…...

数据结构每日一题day7(顺序表)★★★★★

题目描述&#xff1a;从顺序表中删除其值在给定值s与t之间(包含s和 t&#xff0c;要求 s<t)的所有元素&#xff0c;若s或t不合理或顺序表为空&#xff0c;则返回 false&#xff0c;若执行成功则返回 true。 算法思想&#xff1a; 输入检查&#xff1a;若顺序表为空、指针为…...

ACM模式常用方法总结(Java篇)

文章目录 一、ACM输入输出模式二、重要语法2.1、导包2.2、读取数据2.3、判断是否有下一个数据2.4、输出2.5、关闭scanner2.6、易踩坑点 一、ACM输入输出模式 在力扣上编写代码时使用的是核心代码模式&#xff0c;如果在面试中遇到ACM模式就会比较迷茫&#xff1f;ACM模式要求你…...

SpringCould微服务架构之Docker(6)

容器的基本命令&#xff1a; 1. docker exec &#xff1a;进入容器执行命令 2. docker logs: -f 持续查看容器的运行日志 3. docker ps&#xff1a;查看所有运行的容器和状态 案例&#xff1a;创建运行一个容Nginx容器 docker run--name myNginx -p 80:80 -d nginx 命…...

脑疾病分类的疑惑【7】一般FMRI数据都存储为什么格式?能不能给我用数据简单的描述一下FMRI是如何存储的?

fMRI 数据通常以 NIfTI&#xff08;Neuroimaging Informatics Technology Initiative&#xff09; 格式存储&#xff0c;这是一种专为神经影像设计的开放标准格式。以下是简化说明和示例&#xff1a; 1. 常见fMRI数据格式 格式扩展名特点NIfTI.nii 或 .nii.gz最常用&#xff0…...