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

Python后端面试题

1. 文件操作w+和r+的区别

在Python中,文件操作模式中的w+r+都表示对文件的读写操作,但它们在打开文件时的行为有所不同:

  1. r+模式

    • 读写:这种模式允许你同时读取和写入文件。文件必须已经存在,否则会抛出一个FileNotFoundError
    • 位置:打开文件时,文件指针位于文件的开始。这意味着你可以从文件的开头开始读取数据,或者覆盖(而不是追加)现有内容开始写入。
    • 用途:通常用于修改文件的现有内容,比如先读取一些数据,然后在同一个地方或后面写入新数据。
  2. w+模式

    • 读写:同样允许读取和写入文件,但与r+不同,如果文件已存在,则会被清空(即原有内容会被删除);如果文件不存在,则会创建一个新文件。
    • 位置:打开文件后,文件指针同样位于文件的开始,但由于文件被清空,实际上你是从一个空白文件开始写入和读取。
    • 用途:适合于需要重新初始化文件内容的场景,即先清空文件内容,然后写入新的数据,同时也可能需要读取刚写入的数据进行验证或其他处理。

总结来说,选择r+还是w+主要取决于你的具体需求:

  • 如果你需要保留并可能修改文件的现有内容,应该使用r+
  • 如果你想创建一个新文件或覆盖现有文件的内容,并随后可能进行读取,那么应使用w+

2. @staticmethod和@classmethod的区别,两者可否通过实例调用?

@staticmethod@classmethod都是Python中用于定义特殊方法的装饰器,它们改变了方法调用的方式和能访问的数据范围,但各自有不同的应用场景和行为特点:

@staticmethod

  • 特点:静态方法不需要访问实例或类的属性,因此它不接收隐式的self(实例)或cls(类)参数。静态方法类似于普通的函数,只是它们在类的命名空间中定义,有助于逻辑上的组织或归类。
  • 调用方式:静态方法可以通过类名直接调用,如ClassName.static_method(),也可以通过类的实例来调用,尽管这样做在语义上并不直观,因为静态方法不操作实例数据,如instance.static_method()

@classmethod

  • 特点:类方法接收一个隐式的参数cls,代表调用该方法的类本身。这使得类方法可以访问类的属性或方法,而且在继承体系中,如果子类重写了此类方法,cls会指向子类,这对于基于类的逻辑非常有用。
  • 调用方式:类方法既可以通过类名调用,如ClassName.class_method(),也可以通过类的实例调用,如instance.class_method()。虽然通过实例调用,但重要的是理解在这个过程中cls参数传递的是类本身,而不是实例。

总结区别

  • 访问权限:静态方法不涉及类或实例的状态,因此无法直接访问类变量或实例变量。类方法通过cls参数可以访问类变量,修改类的状态(但不建议直接修改),并且能够调用其它类方法或创建类的新实例。
  • 设计意图:静态方法通常用于那些逻辑上属于类但不需要特定实例或类上下文的操作。类方法则用于需要类的信息,但在没有具体实例或为了实现多态性时使用。

是否可通过实例调用

  • @staticmethod:可以,尽管这样做没有特别的意义,因为静态方法不依赖于实例。
  • @classmethod:同样可以,通过实例调用时,cls参数自动绑定到实例所属的类,这在需要基于类而不是实例进行操作时很有用。

__new__()与__init__()区别

在Python中,__new____init__都是用于对象创建过程中的特殊方法,但它们在对象生命周期中的作用点和职责有所不同:

__new__

  • 作用__new__是一个静态方法,负责创建并返回一个新实例。它是实例化过程中的第一步,负责分配内存空间给新对象。当调用一个类来创建新实例时,Python会自动调用__new__方法。
  • 目的:主要用于控制实例的创建过程,比如实现单例模式、定制实例的生成过程(如改变生成的类类型)、执行复杂的初始化前任务等。
  • 返回值:必须返回一个实例,这个实例可以是当前类的一个新实例,也可以是其父类或任何其他类的实例。如果不返回,会抛出异常。
  • 调用时机:在__init__之前被调用,且仅在类首次被实例化时调用一次。对于后续的实例化,如果__new__缓存了实例(如在单例模式中),则可能不会再次调用。

__init__

  • 作用__init__是一个实例方法,负责初始化新创建的对象。当__new__完成实例的创建并返回一个实例后,Python接着会自动调用__init__方法来设置对象的初始状态,如给对象的属性赋初值。
  • 目的:主要用于设置对象的初始属性值,执行必要的初始化任务,使对象达到可用状态。
  • 参数:第一个参数总是self,表示当前实例本身,后面可以有其他参数用于接收传入的初始化数据。
  • 调用时机:在__new__返回一个实例后立即调用,每次创建实例时都会执行。

总结

  • __new__关注于创建实例本身,包括决定由哪个类来创建实例以及是否复用现有实例(如在单例模式中)。
  • __init__关注于实例创建完成后,如何设置实例的初始状态,使其准备好被使用。

3. CPU密集型适合用多线程还是多进程

CPU密集型任务更适合使用多进程。原因在于CPU密集型任务主要依赖处理器的计算能力,这类任务倾向于最大化利用CPU的计算资源。在多进程环境下,每个进程可以被操作系统调度到不同的CPU核心上并行执行,从而实现真正的并行计算,提高整体的计算效率。

相比之下,虽然多线程也能提供一定程度的并发执行,但是在某些编程环境中(特别是像Python的CPython解释器,受全局解释器锁GIL的影响),多线程并不能在CPU密集型任务上实现真正的并行计算,因为GIL限制了同一时间只有一个线程能在CPU上执行Python字节码。这意味着在CPU密集型任务中,多线程可能会因为GIL而无法充分利用多核CPU的优势,甚至在某些情况下,多线程的线程切换开销可能会降低程序的执行效率。

因此,对于CPU密集型任务,选择多进程能够更好地利用多核处理器的并行计算能力,提高程序的执行效率。

4. 协程的缺点

协程作为一种轻量级的并发编程工具,在处理高并发和IO密集型任务时表现出诸多优势,如节省资源、简化编程模型等。然而,它也存在一些局限性和缺点,主要包括:

  1. 无法充分利用多核资源:协程的本质是单线程的,意味着它在同一时间只能运行在一个CPU核心上。对于拥有多个核心的现代CPU,协程自身无法直接实现并行计算,无法充分发挥多核处理器的计算潜力。要利用多核,通常需要结合多进程或多线程,让每个进程或线程内部使用协程来处理IO密集型任务。

  2. 阻塞操作会阻塞整个程序:尽管协程擅长处理非阻塞的IO操作,但如果协程中出现了阻塞操作(如某些未优化的IO操作、长时间的计算任务等),它会阻塞住整个执行协程的线程,影响其他协程的执行,直到阻塞操作完成。

  3. 调试和追踪复杂:相较于传统的线程或顺序执行的程序,协程的执行流程更为复杂,包含更多的控制转移,这可能会增加调试的难度。调试工具和日志可能需要特殊的支持来清晰地追踪协程间的跳转和执行顺序。

  4. 编程模型的学习成本:虽然协程可以简化异步编程,但理解和正确使用协程(特别是涉及复杂的协同和调度逻辑时)仍需要开发者有一定的学习曲线,尤其是对于那些习惯于同步编程模型的开发者来说。

  5. 语言和生态系统支持程度不一:并非所有编程语言都原生支持协程,或者支持的程度和易用性不同。此外,围绕协程的库和框架生态系统成熟度也有差异,这可能影响到开发效率和可用资源。

综上所述,尽管协程是处理高并发和IO密集型应用的强大工具,但在设计和实施时,需要充分考虑上述缺点并采取相应的策略来规避或缓解这些问题。

5. 列表推导式和生成器的优劣

列表推导式和生成器各有其优势和劣势,具体选择取决于应用场景的需求:

列表推导式的优势:

  1. 简洁明了:列表推导式提供了一种简洁的方式来创建列表,代码更加直观易读。
  2. 执行速度:对于较小的数据集,列表推导式通常执行较快,因为CPython对这类结构进行了优化。
  3. 一次性计算:所有元素一次性计算并存储在内存中,适合于数据量不大且需要频繁访问的情况。
  4. 功能丰富:可以直接用于构建复杂的列表结构,包括嵌套和条件过滤。

列表推导式的劣势:

  1. 内存消耗:对于大数据集,列表推导式会消耗大量内存,因为它需要一次性存储所有元素。
  2. 不可中断:一旦开始计算,必须生成完整列表,即使只需要部分结果。

生成器的优势:

  1. 内存效率:生成器采用惰性求值,仅在需要时计算下一个值,大大减少了内存使用。
  2. 流式处理:适合处理大数据集或无限数据流,能够在不耗尽内存的情况下逐步处理数据。
  3. 可中断:生成器可以暂停和恢复执行,提供了更好的控制灵活性。

生成器的劣势:

  1. 延迟计算:需要时才计算下一个值,对于需要立即访问所有数据的场景不如列表推导式直接。
  2. 功能相对有限:相比列表推导式,生成器在构造复杂数据结构方面可能不够直观或灵活。
  3. 迭代特性:生成器是一次性的,一旦遍历完就不能再次使用,除非重新创建。

6. Python中的重载

在Python中,传统意义上的“重载”(overloading)概念,即基于不同参数类型或数量来提供多个同名函数的机制,并不是语言直接内置支持的特性。这是因为Python是一种动态类型语言,它在设计上鼓励使用鸭子类型(duck typing)和默许参数(default arguments)、可变参数(*args, **kwargs)等机制来实现类似的功能,而不是依赖于严格的类型检查。

尽管如此,Python 提供了一些方法来模仿重载的效果,尤其是在处理不同类型数据时,可以让一个函数或方法根据传入参数的不同表现不同的行为。这些方法包括但不限于:

  • 默许参数与关键字参数:通过为函数参数设置默认值,或者使用*args**kwargs来捕获额外的参数,可以在一个函数体内实现多种情况的处理逻辑。

  • 类型检查:在函数内部使用类型检查(如isinstance()函数)来判断参数类型,并据此执行不同的代码路径。

  • 使用functools.singledispatch装饰器:对于基于类的方法,Python 3.4 引入了functools.singledispatch装饰器,它允许为一个函数的第一个参数的不同类型定义多个实现。这是一种更加面向对象的重载模拟方式,更接近静态类型语言中的重载概念。

7. MVC和MVT

MVC (Model-View-Controller) 是一种软件设计模式,广泛应用于构建用户界面和应用程序。它的核心思想是将应用程序分为三个核心部分,以促进代码的解耦、可维护性和可扩展性:

  • Model(模型):负责管理应用程序的数据和业务逻辑。它封装了数据并定义了对数据进行操作的方法,如存取数据库、数据验证等。

  • View(视图):负责展示数据给用户,即用户界面。它从模型获取数据并格式化显示。视图应该只关注如何展示数据,而不涉及数据的获取和处理。

  • Controller(控制器):作为模型和视图之间的桥梁,处理用户的输入,控制应用程序的流程。它接收用户的请求,调用模型来处理数据,然后选择合适的视图来展示处理后的数据。

MVT (Model-View-Template) 是Django框架采用的一种设计模式,它是MVC的一个变体,尤其是在视图和模板的分离上做了进一步的区分:

  • Model(模型):与MVC中的模型角色相同,负责数据管理和业务逻辑处理。

  • View(视图):在Django中,视图的概念与MVC中的控制器角色更相似。Django的视图主要负责接收HTTP请求,处理请求(可能包括调用模型来获取或更新数据),并返回响应。这里的视图更侧重于逻辑处理,而不是展示层。

  • Template(模板):对应于MVC中的视图角色,负责页面的布局和渲染。模板从视图那里接收数据,并按照定义好的HTML结构展示数据。模板应该只包含展示逻辑,不包含业务逻辑或数据处理。

8. FBV和CBV,CBV的优点

在Django框架中,视图可以使用两种风格来编写:FBV(Function-Based Views)和CBV(Class-Based Views)。

FBV(Function-Based Views)

  • 简单直观:对于简单的逻辑,FBV更容易理解和编写,因为它们直接以函数的形式呈现,直观明了。
  • 快速开发:对于小型项目或一次性使用的视图,直接使用FBV可以更快地完成开发。

CBV(Class-Based Views)

  • 代码组织和重用:CBV允许更好的代码组织,通过继承和组合,可以重用和扩展视图逻辑。这在大型项目中特别有用,有助于保持代码的模块化和DRY(Don't Repeat Yourself)原则。
  • 功能丰富:Django为CBV提供了丰富的内置类和Mixin,这些类和Mixin封装了常见的操作,如分页、表单处理、权限控制等,简化了视图的实现。
  • 面向对象编程:作为Python的类,CBV充分利用了面向对象编程的优势,如继承、封装和多态性,使代码更加灵活和易于维护。
  • 清晰的HTTP方法处理:CBV使得针对不同HTTP方法(GET、POST等)的处理更加清晰,每个方法都可以单独定义,提高了代码的可读性。
  • 易于扩展:通过覆盖或添加方法,可以轻松地扩展视图的行为,而不必重写整个视图逻辑。

总之,CBV在代码结构、重用性和扩展性方面具有明显优势,尤其适合于构建复杂、可维护的大型应用程序。而FBV则因其简单直接,在处理简单视图时依然有其价值。开发者可以根据项目的规模和需求来选择最合适的视图实现方式。

9. orm和原生sql的优缺点

ORM (Object-Relational Mapping, 对象关系映射) 的优缺点:

优点:

  1. 提高开发效率:通过将数据库操作转换为面向对象的编程方式,开发者可以使用熟悉的对象操作,而无需编写复杂的SQL语句。
  2. 减少错误:自动化的查询生成有助于避免SQL语法错误和拼写错误。
  3. 易于维护:当数据库结构发生变化时,只需调整对应的对象模型,相关查询也会自动适应变化,减少了硬编码SQL带来的维护负担。
  4. 数据库无关性:良好的ORM实现可以抽象出底层数据库的差异,使得在不同数据库间迁移变得更加容易。
  5. 安全性:许多ORM框架内置了防范SQL注入的机制,提高应用的安全性。

缺点:

  1. 性能损失:由于ORM增加了额外的抽象层,相比于直接编写SQL,可能会有轻微的性能下降,尤其是在处理复杂查询时。
  2. 学习曲线:对于初学者,理解ORM的概念和使用方式可能需要时间。
  3. 不够灵活:对于高度定制化的查询,ORM可能无法提供足够的灵活性,有时需要编写原生SQL作为补充。
  4. 资源消耗:某些情况下,ORM可能会产生多余的数据库访问,如N+1查询问题,这会增加资源消耗。

原生SQL的优缺点:

优点:

  1. 性能高效:直接编写SQL可以针对特定查询进行优化,从而获得最佳的执行性能。
  2. 灵活性高:可以编写任何复杂的查询,不受ORM框架的限制,适合处理特殊或复杂的数据库操作。
  3. 直观性:对于熟悉SQL的开发者来说,直接查看和编辑SQL语句更加直观和直接。

缺点:

  1. 开发效率低:需要手动编写和维护SQL语句,这可能降低开发速度,特别是在处理大量的数据库交互时。
  2. 易出错:手动编写SQL容易出现语法错误或逻辑错误,需要额外的测试和调试。
  3. 数据库耦合:原生SQL紧密绑定特定数据库的语法,更换数据库系统时可能需要重写大量SQL代码。
  4. 安全性问题:没有ORM框架提供的自动防护,需要手动防范SQL注入等安全问题。

10. 什么是跨域

跨域(Cross-Origin)是指在互联网上的一个域下的文档或脚本尝试请求另一个域下的资源时,域名、协议或端口不同的这种情况。由于浏览器的同源策略(Same-origin policy)安全限制,默认情况下,出于安全考虑,Web浏览器禁止网页脚本跨域访问其他源的资源。同源策略要求Web内容只能从同一个源加载,这里的“源”指的是协议、域名和端口号的组合,三者完全一致方视为同源。如果源不相同,则构成了跨域访问。

同源策略的目的是为了防止恶意网站通过脚本读取另一个网站的敏感数据,例如:Cookies、存储在浏览器中的数据等,从而保护用户的信息安全。

跨域场景示例

  • 页面 https://example.com 中的 JavaScript 尝试请求 https://api.example.org/data 的资源。
  • 页面 http://www.example.com 中的 AJAX 请求发送到 https://www.example.com

解决跨域的方法

为了解决合法的跨域需求,同时保持安全,现代Web开发中采用了多种技术和策略,包括但不限于:

  1. CORS(跨源资源共享,Cross-Origin Resource Sharing):通过服务端设置Access-Control-Allow-Origin等响应头,允许特定来源的请求访问资源。
  2. JSONP(JSON with Padding):利用 <script> 标签没有跨域限制的特点,通过动态插入 <script> 标签来实现跨域请求,通常用于GET请求。
  3. 代理服务器:设置一个代理服务器(如 Nginx 或自己搭建的代理服务),将跨域请求转发到目标服务器,从而绕过浏览器的同源策略限制。
  4. WebSockets:虽然主要用于实时通信,但WebSockets协议本身并不受同源策略限制,可以实现跨域通信。
  5. PostMessage API:HTML5引入的API,允许来自不同源的脚本采用异步方式进行有限制的通信,通常用于iframe间的跨域消息传递。

11. 接口的幂等性

接口的幂等性(Idempotency)是指一个操作或者API无论执行多少次,其结果都是一样的,对系统的影响也是一致的。换句话说,多次重复执行同一请求应该具有相同的效果,不会因为多次请求而导致额外的副作用,比如多次扣款、多次创建相同的记录等。

幂等性对于提升系统可靠性、处理网络重试和容错非常重要,尤其是在分布式系统和网络环境中,请求可能会因为网络延迟、丢包、重传等原因到达服务器多次。确保接口的幂等性可以简化系统设计,提高用户体验。

实现幂等性的策略

  1. 唯一标识: 对于每个可能改变系统状态的请求,生成一个唯一的标识符(例如事务ID),并在后续的重试中使用这个标识符检查操作是否已经执行过。如果之前已经处理过相同的请求(依据唯一ID判断),则直接返回之前的处理结果,不再执行业务逻辑。

  2. 乐观锁: 在更新数据时,利用数据的一个版本字段(如version或timestamp),每次更新时检查版本是否发生变化,如果版本与请求中的版本匹配,则执行更新并递增版本号;如果不匹配,则拒绝此次操作,因为数据已经被其他请求修改过。

  3. 悲观锁: 在处理请求前锁定资源,确保同一时间只有一个请求能操作资源,处理完后再释放锁。这种方法可能导致资源竞争和阻塞,因此在高并发场景下不太适用。

  4. 状态机: 对于有状态转换的操作,可以设计成状态机的形式,确保状态迁移是幂等的。每个状态只允许特定的转换,避免重复处理导致状态异常。

  5. 补偿机制: 如果无法直接实现幂等性,可以设计补偿操作来撤销或修正非幂等操作带来的副作用。例如,发生重复扣款时,可以通过退款操作来补偿。

 12. 进程间的通信方式

进程间的通信(Inter-Process Communication, IPC)是多进程系统中非常关键的一部分,它允许不同的进程之间交换数据和同步执行。多种技术被用于实现进程间通信,以下是一些常见的进程间通信方式:

  1. 管道(Pipe)和命名管道(Named Pipe):

    • 管道是一种半双工的通信方式,数据只能单向流动,通常用于具有亲缘关系的进程(例如,父子进程)之间的通信。
    • 命名管道则是存在于文件系统中的一种特殊文件,它可以用于任意两个进程间的通信,无论它们是否有亲缘关系。
  2. 信号(Signal):

    • 信号是一种进程间的异步通信方式,用于通知接收进程某个事件的发生,如程序终止、挂起等。信号处理机制允许进程对接收到的信号做出响应。
  3. 消息队列(Message Queue):

    • 消息队列提供了一种低级的通信方式,允许多个进程读写一系列固定大小的消息。消息队列独立于发送和接收进程的生命周期,可以实现进程间的同步。
  4. 共享内存(Shared Memory):

    • 共享内存是最直接的通信方式,它允许多个进程访问同一块内存区域。这种方式速度快,但需要程序员处理同步问题,如使用互斥锁(Mutex)或信号量来防止数据竞争。
  5. 信号量(Semaphore):

    • 信号量是一种同步工具,用于解决多个进程对共享资源的访问控制问题。它不仅可以用来同步进程,还能作为一种计数器,限制对资源的访问数量。
  6. 套接字(Socket):

    • 虽然最初是为了网络通信而设计的,但套接字同样可以用于同一台机器上不同进程间的通信,支持TCP(面向连接)和UDP(无连接)两种通信模式,具有很好的通用性和跨平台性。
  7. 内存映射文件(Memory-Mapped Files):

    • 类似于共享内存,内存映射文件将文件映射到内存地址空间,使得进程可以像访问内存一样访问文件内容,适合大容量数据交换。
  8. 远程过程调用(Remote Procedure Call, RPC):

    • RPC提供一种透明调用远程系统上过程的方法,让开发者感觉像是在调用本地函数,底层通过网络通信实现,常用于分布式系统中。

选择哪种通信方式取决于具体的应用需求,包括通信的数据量、实时性要求、是否需要跨网络通信、同步还是异步的需求等因素。

 

相关文章:

Python后端面试题

1. 文件操作w和r的区别 在Python中&#xff0c;文件操作模式中的w和r都表示对文件的读写操作&#xff0c;但它们在打开文件时的行为有所不同&#xff1a; r模式&#xff1a; 读写&#xff1a;这种模式允许你同时读取和写入文件。文件必须已经存在&#xff0c;否则会抛出一个Fi…...

docker打包 arm32v7/debian 问题总结

1.架构不同 我的宿主是x86 ,但是打包的是arm架构 安装qemu sudo apt-get install binfmt-support qemu qemu-user-static 然后使用buildx打包 docker buildx build --no-cache --platform linux/arm/v7 -t tdc_post:1.0.1 . --load 保存tar docker save -o tdc_post.tar tdc_p…...

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 30 节&#xff09; P30《29.数据持久化-用户首选项》 实现数据持久化在harmonyOS中有很多种方式&#xff0c;比较常见的是以下两…...

Vuetify3:监听当前手机还是电脑

我们在开发的时候&#xff0c;实现根据移动设备或PC设备来改编一些交互样式&#xff0c;这个时候我们需要监听宽度&#xff0c;在Vuetify3中可我们可以参考 ​​​​显示 & 平台配合监听即可在窗口缩小的时候判断出手机还是电脑 <template><v-app><div v-if…...

Zabbix 配置钉钉告警

Zabbix 配置钉钉告警 随着企业IT运维需求的不断增加&#xff0c;及时、准确地获取系统告警信息显得尤为重要。在众多告警工具中&#xff0c;Zabbix 因其强大的监控功能和灵活的告警机制&#xff0c;成为了很多企业的首选。同时&#xff0c;随着企业内部沟通工具的多样化&#…...

TTL转RS232与USB转TTL

USB转TTL是一种常用的通信接口转换器&#xff0c;它将USB&#xff08;通用串行总线&#xff09;接口转换为TTL&#xff08;晶体管-晶体管逻辑&#xff09;电平的串行接口。这种转换器在许多场景下非常有用&#xff1a; USB转TTL&#xff1a; 功能&#xff1a; 将计算机的USB接…...

【力扣 896】单调数列 C++题解(循环)

如果数组是单调递增或单调递减的&#xff0c;那么它是 单调 的。 如果对于所有 i < j&#xff0c;nums[i] < nums[j]&#xff0c;那么数组 nums 是单调递增的。 如果对于所有 i < j&#xff0c;nums[i]> nums[j]&#xff0c;那么数组 nums 是单调递减的。 当给定…...

代码随想录Day71(图论Part07)

53.寻宝 题目&#xff1a;53. 寻宝&#xff08;第七期模拟笔试&#xff09; (kamacoder.com) 思路&#xff1a;首先&#xff0c;我不知道怎么存这样的东西&#xff0c;用三维数组吗&#xff0c;没搞懂&#xff0c;果断放弃 prim算法实现 import java.util.*;class Main {publi…...

[Mdp] lc 494. 目标和(01背包变种+dp+dfs)

文章目录 1. 题目来源2. 题目解析1. 题目来源 链接:494. 目标和 2. 题目解析 方法一:dfs 数据量比较小,长度只有 20,那么针对每一个数都有两种选择,正、负,即 2 20 = 100 w 2^{20} = 100w 220=100w 差不多的时间复杂度,dfs 解决即可。时间复杂度: O ( 2 n ) O(2^{n…...

React vs Vue:谁是构建现代Web应用的王者?

在前端开发领域&#xff0c;React 和 Vue 是两大备受推崇的框架&#xff08;React实为库&#xff09;&#xff0c;各自拥有庞大的社区和丰富的生态系统。本文旨在深入探讨这两者之间的区别&#xff0c;通过代码示例来分析它们各自的优势和适用场景&#xff0c;从而帮助开发者做…...

Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程

PHP_diseval_extension 这个方法是支持PHP8的, Suhosin禁用eval函数&#xff0c;不支持PHP8 一、安装 cd / git clone https://github.com/mk-j/PHP_diseval_extension.gitcd /PHP_diseval_extension/source/www/server/php/82/bin/phpize ./configure --with-php-config/ww…...

Matlab 中 fftshift 与 ifftshift

文章目录 【 1. fftshift、ifftshift 的区别】【 2. fftshift(fft(A)) 作图 】【 3. fftshift(fft(A)) 还原到 A 】Matlab 直接对信号进行 FFT 的结果中,前半部分是正频,后半部分是负频,为了更直观的表示,需要将 负频 部分移到 前面。【 1. fftshift、ifftshift 的区别】 M…...

被裁了(9年)

那年&#xff08;2015年&#xff09;我刚毕业有一年多&#xff08;20出头&#xff09;&#xff0c;阴差阳错来到了现在的单位。 那时互联网腾起&#xff0c;单位也迅速发展&#xff0c;部门从起初的不到30号人发展到500人&#xff1b;A轮、B轮.....D轮&#xff0c;一轮轮的融资…...

13. Revit API: Filter(过滤器)

13. Revit API: Filter&#xff08;过滤器&#xff09; 前言 在讲Selection之前&#xff0c;还是有必要先了解一下的过滤器的。 对了&#xff0c;关于查找一些比较偏的功能或者API的用法&#xff0c;可以这样查找 关键词 site:https://thebuildingcoder.typepad.com/ site是…...

hadoop 3.X 分布式HA集成Kerbos(保姆级教程)

前提&#xff1a;先安装Kerbos 1、创建keytab目录 在每台机器上上提前创建好对应的kertab目录 [hadooptv3-hadoop-01 ~]$ sudo mkdir -p /BigData/run/hadoop/keytab/ [hadooptv3-hadoop-01 ~]$ sudo mkdir -p /opt/security/ [hadooptv3-hadoop-01 ~]$ sudo chown hadoop:had…...

VDS虚拟导播切换台软件

VDS 导播软件是一款功能强大的虚拟导播系统软件&#xff0c;具有全媒体接入、播出内容丰富、调音台、快捷切播与导播键盘、云台控制等特点&#xff0c;同时支持向多个平台直播推流。以下是一些常见的 VDS 导播软件特点&#xff1a; 1. 全媒体接入&#xff1a;支持多种设备和网…...

UE4_材质_使用彩色半透明阴影

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿大美临沂生活越来越好&#xff01; 本教程将介绍如何配置虚幻引擎来投射彩色半透明阴影。 此功能在许多应用中都很有用&#xff0c;常见例子就是透过彩色玻璃窗的彩色光。 一、半透明阴影颜色 阴影在穿过半…...

arthas监控工具笔记(二)monior等

文章目录 monitor/watch/trace 相关monitormonitor例子monitor -c <value>monitor -m <vaule>monitor 条件表达式monitor -b monitor文档(界面描述)monitor文档(help) stack - 输出当前方法被调用的调用路径trace - 方法内部调用路径&#xff0c;并输出方法路径上的…...

【mybatis】mybatis-plus中主键生成策略

1、简介 MyBatis-Plus 中的主键生成策略是一个关键特性&#xff0c;它决定了如何为新插入的行生成唯一标识符&#xff08;即主键&#xff09;。MyBatis-Plus 提供了多种主键生成策略&#xff0c;以满足不同场景下的需求。 2、常见主键生成策略 1. AUTO&#xff08;数据库ID自…...

模型情景制作-如何制作棕榈树

夏天&#xff0c;沙滩&#xff0c;海景&#xff0c;棕榈树&#xff0c;外加美女&#xff0c;想象下热带海滨的样子吧 可是口年的上班族没有多少机会去到海滩&#xff0c;肿么办&#xff1f;我们自己DIY一个海滨情景摆在办公桌上吧~~~ 什么什么&#xff1f;棕榈树不会做&#xf…...

# mysql 中文乱码问题分析

mysql 中文乱码问题分析 一、问题分析&#xff1a; MySQL 中文乱码通常是因为字符集设置不正确导致的。MySQL 有多种字符集&#xff0c;如 latin1、utf8、utf8mb4 等&#xff0c;如果在创建数据库、数据表或者字段时没有指定正确的字符集&#xff0c;或者在插入数据时使用了与…...

[小试牛刀-习题练]《计算机组成原理》之指令系统

一、选择题 0.【指令-课本习题】某计算机按字节编址&#xff0c;指令字长固定且只有两种指令格式&#xff0c;其中三地址指令29条&#xff0c;二地址指令107条&#xff0c;每个地址字段为6位&#xff0c;则指令字长至少应该是&#xff08;A&#xff09; A.24位 B. 26位 C. 28位…...

JAVA 实现拍卖框架及拍卖详情流程介绍(包含代码示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…...

力扣1177.构建回文串检测

力扣1177.构建回文串检测 因为子串可以重新排序 因此考虑一下什么情况需要替换字母1.当前有一个字母的数量为奇数 需要替换的次数为0 2.当前有二个字母的数量为奇数 需要替换的次数为1 (奇数个a 奇数个b 需要将b -> a) 3.当前有三个字母的数量为奇数 需要替换的次数为1 4.当…...

Vue跨域获取ip和ip位置城市等归属地信息

由于端口设置与查询服务器不一致&#xff0c;所以不能直接从ip138网上抓取&#xff0c;只能跨域查询。实现跨域查询&#xff0c;简单的方法是使用jsonp方式&#xff0c;只支持get请求&#xff0c;同时也需要查询的服务器支持jsonp。这时找到了腾讯位置服务。参考文章&#xff0…...

缺失的第一个正数

给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,2] 中的数字都在数组…...

mac 上 Docker Desktop的免费开源的替代工具Colima

当谈到在macOS上运行容器时&#xff0c;Docker长期以来一直是首选。但是&#xff0c;必须解决使用适用于macOS的Docker Desktop时出现的一些限制&#xff0c;特别是对于大中型公司&#xff0c;最大的问题是需要购买许可证。另外&#xff0c;macOS 版Docker Desktop的性能问题也…...

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…...

Cesium 立式雷达扫描

Cesium 立式雷达扫描 自定义 Primitive 实现支持水平和垂直交替扫描...

Oracle HTTP Server(OHS)与Oracle数据库的紧密绑定

Oracle HTTP Server&#xff08;OHS&#xff09;与Oracle数据库的紧密绑定通常是通过一系列的配置和集成步骤来实现的。以下是这些步骤的详细归纳&#xff0c;包括必要的分点表示和参考信息&#xff1a; 一、安装和配置Oracle HTTP Server 安装OHS&#xff1a; 在安装Oracle…...

mmcv安装失败及解决方案

假如想安装的版本是mmcv1.4.0, 但是pip install mmcv1.4.0总是失败&#xff0c;若是直接pip install mmcv会安装成功&#xff0c;但是安装的就是最新版本&#xff0c;后面代码跑起来还会报错&#xff0c;怎么办呢&#xff1f; 接下来分享一个mmcv指定版本安装的方式。 网页&a…...

国产强大免费WAF, 社区版雷池动态防护介绍

雷池WAF&#xff0c;基于智能语义分析的下一代 Web 应用防火墙 使用情况 我司于2023年4月23日对雷池进行测试&#xff0c;测试一个月后&#xff0c;于2023年5月24日对雷池进行正式切换&#xff0c;此时版本为1.5.1。 里程碑纪念 后续一直跟随雷池进行版本升级&#xff0c;当前…...

【Django】网上蛋糕项目商城-首页

概念 本文在上一文章搭建完数据库&#xff0c;以及创建好项目之后&#xff0c;以及前端静态文件后&#xff0c;对项目的首页功能开发。 后端代码编写 在views.py文件中创建方法&#xff0c;连接数据库&#xff0c;并获取首页需要的数据 def getGoodsList(type):# 获取所有横…...

Vue 父子页面使用指南

Vue3父子页面使用指南 Vue3作为一种现代化的前端框架&#xff0c;提供了强大的组件化功能&#xff0c;使得页面开发更加模块化和可维护。本文将深入探讨Vue3中父子页面的使用方法&#xff0c;包括如何传递参数、父组件如何调用子组件的方法&#xff0c;以及父子页面的加载原理…...

TVBox自定义配置+软件密码版本

apk地址 : https://gitee.com/wheat-wheat/kekeda-duck-apk 1、安装安卓SDK Android SDK Windows 安装及环境配置教程_sdk manager windows-CSDN博客 修改点: 基础配置: java版本:...

Java单体架构项目_云霄外卖-特殊点

项目介绍&#xff1a; 定位&#xff1a; 专门为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的一款软件商品 分为&#xff1a; 管理端&#xff1a;外卖商家使用 用户端&#xff08;微信小程序&#xff09;&#xff1a;点餐用户使用。 功能架构&#xff1a; &#xff08…...

一文搞懂 java 线程池:ScheduledThreadPool 和 WorkStealingPool 原理

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

轮换IP是什么?——深入了解轮换IP的特点

大家在日常上网时&#xff0c;可能听说过“轮换IP”这个词。那么&#xff0c;轮换IP到底是什么&#xff1f;它有哪些特点&#xff1f;今天&#xff0c;我们就来揭开轮换IP的神秘面纱。 什么是轮换IP&#xff1f; 简单来说&#xff0c;轮换IP是指定期更换上网时使用的IP地址。…...

中英双语介绍美国的州:华盛顿州(Washington)

中文版 华盛顿州简介 华盛顿州&#xff08;Washington&#xff09;位于美国太平洋西北地区&#xff0c;以其壮丽的自然景观和蓬勃发展的经济闻名。以下是对华盛顿州的详细介绍&#xff0c;包括其地理位置、人口、经济、教育、文化和主要城市。 地理位置 华盛顿州北接加拿大…...

美工画师必看!AI绘画Stable Diffusion 一键生成 B 端图标教程,轻松制作商业可用的设计图标,从此告别加班!(附安装包)

大家好&#xff0c;我是画画的小强 在日常工作中&#xff0c;设计师在应对运营和UI设计的B端图标时&#xff0c;常常面临大量的构思、制作和渲染等工作&#xff0c;耗时耗力。我们可以利用Stable Diffusion(以下简称SD)结合AI的方式&#xff0c;帮助设计师优化图标的设计流程&…...

使用表单系统快速搭建邀请和签到系统

在组织活动时&#xff0c;邀请和签到环节往往是活动成败的关键之一。传统的纸质邀请和签到方式不仅费时费力&#xff0c;还容易出现各种问题&#xff0c;例如名单遗漏、签到混乱等。而使用TDuckX“搭建邀请和签到系统”将彻底改变这一现状&#xff0c;为活动组织者提供了一种高…...

Vue 3 入门与精通:为初学者打造的全面学习指南

引言&#xff1a; Vue.js&#xff0c;这款由尤雨溪创建的轻量级前端框架&#xff0c;以其简洁的API、双向数据绑定和组件化的开发模式&#xff0c;深受广大开发者喜爱。Vue 3 的发布&#xff0c;带来了更多的性能优化和功能增强&#xff0c;为开发者提供了更广阔的空间。本文旨…...

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…...

寄5公斤哪个快递便宜?寄10多斤的物品怎么寄最划算?

作为一个频繁需要寄东西的大学生&#xff0c;每次选择快递公司都是一件头疼的事。尤其是寄5公斤左右的包裹&#xff0c;既要考虑价格&#xff0c;又要看服务质量。今天&#xff0c;我就来分享一些寄5公斤包裹省钱的干货&#xff0c;希望能帮到大家。云木寄快递首先要推荐的就是…...

【postgresql】索引

见的索引类型&#xff1a; B-tree 索引&#xff1a;这是最常用的索引类型&#xff0c;适用于大多数查询。B-tree索引可以高效地处理范围查询。 Hash 索引&#xff1a;适用于等值查询&#xff0c;但不支持范围查询。 GiST 索引&#xff1a;通用搜索树&#xff08;GiST&#xf…...

2D Game Kit在unity的使用

本文参考&#xff1a; 如何制作游戏&#xff1f;【不需要编程 __】新手30分钟 学会制作2D游戏&#xff01;_ 如何制作游戏 _ unity教学 _ 制作游戏 _ 2d游戏_哔哩哔哩_bilibili 1、下载2d game kit 新建一个unity工程&#xff0c;进入该工程后&#xff0c;在Window -> Ass…...

使用中国大陆镜像源安装最新版的 docker Deamon

在一个智算项目交付过程中&#xff0c;出现了新建集群中的全部 docker server V19 进程消失、仅剩 docker server 的 unix-socket 存活的现象。 为了验证是否是BD产品研发提供的产品deploy语句缺陷&#xff0c;需要在本地环境上部署一个简单的 docker Deamon 环境。尴尬的是&a…...

机器学习原理之 -- 支持向量机分类:由来及原理详解

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是统计学习理论的一个重要成果&#xff0c;广泛应用于分类和回归问题。SVM以其高效的分类性能和良好的泛化能力在机器学习领域中占据重要地位。本文将详细介绍支持向量机的由来、基本原理、构建过程及其优缺点。…...

华为机试HJ8合并表记录

华为机试HJ8合并表记录 题目&#xff1a; 数据表记录包含表索引index和数值value&#xff08;int范围的正整数&#xff09;&#xff0c;请对表索引相同的记录进行合并&#xff0c;即将相同索引的数值进行求和运算&#xff0c;输出按照index值升序进行输出。 想法&#xff1a…...

Leetcode 2043简易银行交易系统

题目描述 简易银行系统 尝试过 中等 相关标签 相关企业 提示 你的任务是为一个很受欢迎的银行设计一款程序&#xff0c;以自动化执行所有传入的交易&#xff08;转账&#xff0c;存款和取款&#xff09;。银行共有 n 个账户&#xff0c;编号从 1 到 n 。每个账号的初始余额存储…...

UEC++ 虚幻5第三人称射击游戏(二)

UEC++ 虚幻5第三人称射击游戏(二) 派生榴弹类武器 新建一个继承自Weapon的子类作为派生榴弹类武器 将Weapon类中的Fire函数添加virtual关键字变为虚函数让榴弹类继承重写 在ProjectileWeapon中重写Fire函数,新建生成投射物的模版变量 Fire函数重写逻辑 代码//生成的投射物U…...

在 Mac 上使用 MLX 微调微软 phi3 模型

微调大语言模型是常见的需求&#xff0c;由于模型参数量大&#xff0c;即使用 Lora/Qlora 进行微调也需要 GPU 显卡&#xff0c;Mac M系是苹果自己的 GPU&#xff0c;目前主流的框架还在建立在 CUDA 的显卡架构&#xff0c;也就是主要的卡还是来自英伟达。如果要用 Mac 来做训练…...

数据分析如何在企业中发挥价值

数据分析如何在企业中发挥价值 数据分析的目的是什么为什么怎么做做什么 思考问题流程确认问题拆解问题量化分析 分析数据流程收集数据处理数据制作图表 全流程 数据分析的目的 是什么 通过数据量化企业当前的经营现状或业务事实&#xff0c;将业务细节转换为具体数据&#xf…...

windows USB设备驱动开发-开发USB 设备端驱动

USB 设备是通过单个端口连接到计算机的外设&#xff0c;例如鼠标设备和键盘。 USB 客户端驱动程序是计算机上安装的软件&#xff0c;该软件与硬件通信以使设备正常运行。 如果设备属于 Microsoft 支持的设备类&#xff0c;Windows 会为该设备加载 Microsoft 提供的 USB 驱动程序…...

NoSQL 非关系型数据库 Redis 的使用:

redis是基于内存型的NoSQL 非关系型数据库&#xff0c;本内容只针对有基础的小伙伴&#xff0c; 因为楼主不会做更多的解释&#xff0c;而是记录更多的技术接口使用&#xff0c;毕竟楼主不是做教学的&#xff0c;没有教学经验。 关于redis的介绍请自行搜索查阅。 使用redis数据…...

leetCode-hot100-动态规划专题

动态规划 动态规划定义动态规划的核心思想动态规划的基本特征动态规划的基本思路例题322.零钱兑换53.最大子数组和72.编辑距离139.单词拆分62.不同路径63.不同路径Ⅱ64.最小路径和70.爬楼梯121.买卖股票的最佳时机152.乘积最大子数组 动态规划定义 动态规划&#xff08;Dynami…...

20.98万元起!长安福特蒙迪欧运动版上市

2024年6月7日长安长安福特蒙迪欧运动版上市,新车共推出2款车型,厂商指导价20.98万元、22.98万元。动力上,搭载2.0T大马力E混动系统。外观方面,新车整体采用福特全新设计语言,看上去更加的运动。前脸8边形黑化蜂眼式前格栅,显得十分的运动。两侧采用分体式大灯组,上部细长…...

简化销售流程升级购物体验电商网购节创新举措促消费

今年“618电商网购节”,各大平台加强创新、简化流程,积极疏通消费堵点。多位专家表示,随着消费品以旧换新等政策落地,加上电商平台的创新举措,今年电商网购节持续激发消费市场活力,推动消费进一步回升。人工智能加快渗透取消预售模式是今年“618电商网购节”的最大变化。…...

新款吉利博越即将亮相!外观内饰升级,13.2英寸中控

新款吉利博越要出新款了,车友们知道吗?据念寒目前掌握到的最新消息,新车将会新疆阿勒泰的博越用户草原大会上首发亮相,至于为什么会选择在草原上发布新款车型,我有点儿没看懂。不过话说回来,对于有关注过吉利博越的车友应该知道,在去年4月份的时候,就已经发布过名叫吉利…...

mysql内存和磁盘的关系

mysql内存和磁盘的关系 1.MySQL的内存和磁盘之间的关系是密切的。MySQL的数据存储在磁盘上&#xff0c;但为了高效地执行查询操作&#xff0c;它也会将数据页&#xff08;每个页通常为16KB&#xff09;读入内存。MySQL的缓冲池&#xff08;buffer pool&#xff09;是在内存中的…...

2024/5/28 P1247 取火柴游戏

取火柴游戏 题目描述 输入 k k k 及 k k k 个整数 n 1 , n 2 , ⋯ , n k n_1,n_2,\cdots,n_k n1​,n2​,⋯,nk​&#xff0c;表示有 k k k 堆火柴棒&#xff0c;第 i i i 堆火柴棒的根数为 n i n_i ni​&#xff1b;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下&…...

心链4---搜索页面前后端业务实现以及分布式session的共享实现

心链 — 伙伴匹配系统 搜索详情页面 之前前端的代码写到了搜索页面可以挑选搜索标签&#xff0c;并没有去根据具体标签搜索用户。这里就开始实现。 新建SearchResultPage.vue&#xff0c;并添加相关路由。 在搜索页添加搜索按钮&#xff0c;和触发点击。搜索页选择标签&#x…...