全网最全Django面试题整理(二)

什么是 Django ORM?它的作用是什么?

Django ORM(Object-Relational Mapping)是Django框架中的一个重要组成部分,用于简化与数据库的交互。它提供了一种将数据库中的数据映射到Python对象的方法,使得开发者能够使用面向对象的方式来操作数据库,而无需直接使用SQL语句。Django ORM简化了数据库交互的复杂性,提高了开发效率,同时保持了良好的可维护性。通过使用ORM,开发者可以专注于业务逻辑而不用过多关注底层的数据库细节。
Django ORM 的主要作用包括:

  1. 对象关系映射

Django ORM允许开发者定义Python类,这些类映射到数据库中的表,类的属性映射到表的字段。这种映射关系允许开发者通过操作Python对象来实现对数据库的操作,而不用直接处理SQL语句。

  1. 数据库查询

使用Django ORM,可以使用高级的查询API来执行数据库查询,而无需手写复杂的SQL语句。查询API提供了许多方法,例如 filterexcludeannotate 等,用于构建灵活且强大的数据库查询。

  1. 跨数据库兼容性

Django ORM 提供了一层抽象,使得可以轻松切换底层的数据库引擎,而不用改变应用程序的代码。这种抽象提高了应用程序的灵活性和可维护性。

  1. 事务管理

Django ORM 支持事务管理,确保数据库操作的原子性。开发者可以使用 atomic 装饰器或 with transaction.atomic() 上下文管理器来定义事务,以确保一系列数据库操作要么全部成功,要么全部回滚。

  1. 模型关系

Django ORM 支持定义模型之间的关系,如一对多、多对一、多对多等。这些关系被映射到数据库的外键、中间表等结构,使得在应用程序中更容易表示和处理数据之间的关联。

Django 的ORM有哪些查询方法?请列举几种常用的查询方法。

Django 的 ORM 提供了多种查询方法,允许开发者执行灵活而强大的数据库查询。以下是一些常用的 Django ORM 查询方法:
**all()** 返回模型的所有对象。

all_objects = MyModel.objects.all()

**get(**kwargs)** 根据给定的条件获取单个对象。

my_object = MyModel.objects.get(name='example')

**filter(**kwargs)** 根据给定的条件过滤对象集。

filtered_objects = MyModel.objects.filter(name='example')

**exclude(**kwargs)** 排除满足给定条件的对象。

excluded_objects = MyModel.objects.exclude(name='example')

**order_by(*fields)** 按照指定字段对结果进行排序。

ordered_objects = MyModel.objects.order_by('name', '-created_at')

**values(*fields)** 返回包含指定字段的字典的 QuerySet。

values_list = MyModel.objects.values('name', 'created_at')

**count()** 返回满足条件的对象数量。

object_count = MyModel.objects.filter(name='example').count()

**exists()** 检查是否存在满足条件的对象。

has_objects = MyModel.objects.filter(name='example').exists()

**first()**** 和 **last()**:** 返回满足条件的第一个或最后一个对象。

first_object = MyModel.objects.filter(name='example').first()
last_object = MyModel.objects.filter(name='example').last()

链式查询: 可以链式组合多个查询方法,形成复杂的查询。

result = MyModel.objects.filter(name='example').exclude(status='inactive').order_by('-created_at')

**annotate()** 使用聚合函数对查询结果进行注释。

from django.db.models import Countannotated_result = MyModel.objects.values('category').annotate(category_count=Count('category'))

**distinct()** 返回去重后的结果。

distinct_objects = MyModel.objects.values('name').distinct()

**values_list(*fields, flat=False)** 返回包含指定字段的元组的 QuerySet。

values_list = MyModel.objects.values_list('name', 'created_at', flat=True)

**update(**kwargs)** 更新满足条件的对象的字段值。

MyModel.objects.filter(name='old_name').update(name='new_name')

**delete()** 删除满足条件的对象。

MyModel.objects.filter(name='example').delete()

**raw(raw_query, params=None)** 允许执行原始 SQL 查询。

raw_query_result = MyModel.objects.raw('SELECT * FROM myapp_mymodel WHERE name = %s', ['example'])

**defer(*fields)**** 和 **only(*fields)**:** 控制选择性地延迟或仅选择加载的字段。

deferred_objects = MyModel.objects.defer('description')
only_selected_objects = MyModel.objects.only('name', 'created_at')

**select_related(*fields)**** 和 **prefetch_related(*fields)**:** 优化查询,减少关联对象的查询次数。

selected_related_objects = MyModel.objects.select_related('related_model')
prefetch_related_objects = MyModel.objects.prefetch_related('related_set')

**filter(Q())** 使用复杂的查询逻辑。

from django.db.models import Qcomplex_query = MyModel.objects.filter(Q(name='example') | Q(name='another_example'))

**F()**** 表达式:** 使用数据库字段值进行查询。

from django.db.models import Fincreased_objects = MyModel.objects.filter(count__gt=F('threshold'))

**aggregate()** 使用聚合函数对查询结果进行汇总。

from django.db.models import Avgaverage_count = MyModel.objects.aggregate(average=Avg('count'))

**extra()** 允许添加额外的 SQL 片段到查询中。

extra_query = MyModel.objects.extra(where=["name LIKE %s"], params=['example%'])

**in_bulk()** 通过指定的 ID 列表获取对象字典。

id_list = [1, 2, 3]
objects_dict = MyModel.objects.in_bulk(id_list)

**dates()**** 和 **datetimes()**:** 获取日期或日期时间字段的聚合结果。

from django.db.models import Countdate_aggregation = MyModel.objects.dates('created_at', 'month', order='DESC')
datetime_aggregation = MyModel.objects.datetimes('created_at', 'minute', order='DESC')

**values()**** 和 **values_list()** 的聚合:** 对查询结果进行聚合操作。

from django.db.models import Countaggregated_values = MyModel.objects.values('category').annotate(category_count=Count('category'))
aggregated_values_list = MyModel.objects.values_list('name').annotate(name_count=Count('name'))

**bulk_create()** 批量创建对象,减少数据库插入操作的次数。

objects_to_create = [MyModel(name='example1'), MyModel(name='example2')]
MyModel.objects.bulk_create(objects_to_create)

**reverse()** 反转查询集的顺序。

reversed_objects = MyModel.objects.all().reverse()

**first()**** 和 **last()** 的默认值:** 为 first()last() 指定默认值。

first_object_or_default = MyModel.objects.filter(name='nonexistent').first(default=None)
last_object_or_default = MyModel.objects.filter(name='nonexistent').last(default=None)

**get_or_create()** 尝试获取对象,如果不存在则创建。

obj, created = MyModel.objects.get_or_create(name='example', defaults={'description': 'example description'})

请简述 Django 的ORM和SQL查询语言的区别。

Django 的 ORM(对象关系映射)和 SQL 查询语言是用于与数据库交互的两种不同的方法,它们在语法和使用上有一些显著的区别:
Django ORM:

  1. 高级抽象: Django ORM 提供了高级的抽象,允许开发者通过 Python 类来定义模型,并通过这些模型与数据库表进行交互。这使得开发者可以更专注于业务逻辑而不是底层数据库细节。
  2. 对象导向: 模型类对应于数据库表,类的属性对应于表的字段。通过使用模型,开发者可以通过对象导向的方式进行数据库操作,而不是直接编写 SQL 语句。
  3. 数据库无关性: Django ORM 提供了对多种数据库后端的支持,使得应用程序更具可移植性,可以在不同的数据库系统中运行而无需修改模型定义。
  4. 自动生成 SQL: Django ORM 在执行查询时会自动生成相应的 SQL 语句,使开发者无需直接编写 SQL,从而减少了出错的可能性。
  5. 查询集(QuerySet): 查询结果返回的是 QuerySet 对象,这是一个可以链式调用的查询集合,允许对结果进行进一步过滤、排序、聚合等操作。
  6. 内建管理器(Manager): 模型类自动获得一个内建的管理器,用于执行数据库查询操作。

SQL 查询语言:

  1. 底层控制: SQL 查询语言直接操作数据库,提供了对数据库底层操作的直接控制。开发者需要手动编写 SQL 语句,从而更直接地控制数据库操作。
  2. 声明性: SQL 是一种声明性语言,开发者需要指定要检索或修改的数据,而不需要关心具体的执行细节。
  3. 直接操作数据库: SQL 允许执行诸如插入、更新、删除等直接的数据库操作。这对于特定的需求和性能优化是有益的。
  4. 数据库依赖性: SQL 查询语言通常是特定于数据库引擎的,不同的数据库系统可能需要不同的语法和查询方式。
  5. 灵活性: SQL 具有更大的灵活性,对于一些复杂的查询和优化需求,直接使用 SQL 可能更为合适。

在 Django 中,如何创建一个模型(Model)?

在 Django 中创建模型是定义数据库表结构的关键步骤之一。以下是创建一个简单模型的基本步骤:

  1. 在应用中创建一个模型类: 打开你的 Django 应用的 models.py 文件,并创建一个继承自 django.db.models.Model 的类。每个类属性都代表表中的一个字段。
# models.pyfrom django.db import modelsclass MyModel(models.Model):# 定义模型的字段name = models.CharField(max_length=100)description = models.TextField()created_at = models.DateTimeField(auto_now_add=True)

在这个例子中,MyModel 模型有三个字段:name(CharField)、description(TextField)和 created_at(DateTimeField)。

  1. 迁移数据库: 创建了模型类后,需要使用 Django 的迁移工具来应用这些变更到数据库。运行以下命令:
python manage.py makemigrations
python manage.py migrate

这将根据模型类创建数据库表。

  1. 使用模型: 一旦模型创建并迁移成功,你可以在应用程序中使用它。在视图函数、表单、管理后台等地方引入模型,并对数据进行操作。
# views.pyfrom django.shortcuts import render
from .models import MyModeldef my_view(request):# 获取所有 MyModel 对象my_objects = MyModel.objects.all()return render(request, 'my_template.html', {'my_objects': my_objects})

这是一个简单的例子,演示了如何在视图中查询所有 MyModel 对象。

  1. 管理后台注册模型(可选): 如果想要通过 Django 管理后台管理模型,可以在应用的 admin.py 中注册模型。
# admin.pyfrom django.contrib import admin
from .models import MyModeladmin.site.register(MyModel)

什么是模型字段?举例几种常见的模型字段类型。

在Django的模型(Model)中,模型字段用于定义数据库表中的字段,每个字段对应表中的一个列。模型字段定义了该列的数据类型、验证规则和其他属性。以下是一些常见的Django模型字段类型的例子:

  1. CharField(字符字段)

用于存储短文本字符串,例如名称、标题等。

from django.db import modelsclass Person(models.Model):name = models.CharField(max_length=100)
  1. IntegerField(整数字段)

用于存储整数。

class Book(models.Model):pages = models.IntegerField()
  1. FloatField(浮点数字段)

用于存储浮点数。

class Product(models.Model):price = models.FloatField()
  1. DateField(日期字段)

用于存储日期。

class Event(models.Model):date = models.DateField()
  1. DateTimeField(日期时间字段)

用于存储日期和时间。

class Article(models.Model):published_at = models.DateTimeField()
  1. BooleanField(布尔字段)

用于存储布尔值(True或False)。

class Task(models.Model):completed = models.BooleanField(default=False)
  1. EmailField(电子邮件字段)

用于存储电子邮件地址。

class Contact(models.Model):email = models.EmailField()
  1. ImageField(图像字段)

用于存储图像文件路径。

class UserProfile(models.Model):profile_picture = models.ImageField(upload_to='profile_pics/')
  1. ForeignKey(外键)

用于建立与另一个模型的关联。例如,一个模型可以包含指向另一个模型的外键,表示两个模型之间的关系。

class Comment(models.Model):post = models.ForeignKey(Post, on_delete=models.CASCADE)
  1. ManyToManyField(多对多关系)

用于表示多对多的关系,一个模型中的一个字段可以与多个目标模型建立关联。

class Student(models.Model):courses = models.ManyToManyField(Course)

什么是数据库迁移?如何执行数据库迁移?

数据库迁移是指对 Django 项目中的数据库模型进行更改,并将这些更改应用到实际的数据库的过程。迁移允许你在应用程序的开发过程中修改数据库结构,而不会导致数据丢失或不一致。

  1. 创建模型

在 Django 应用程序中的 models.py 文件中定义你的模型。这可以包括新的模型、字段的添加或修改等。

  1. 生成迁移文件

在终端中运行以下命令,生成一个新的数据库迁移文件。Django 将比较模型的变化并生成相应的SQL语句。

python manage.py makemigrations
  1. 查看迁移文件

可以查看生成的迁移文件,确认数据库迁移包含了你期望的变化。

python manage.py sqlmigrate your_app_name migration_number
  1. 应用迁移

运行以下命令,将迁移应用到数据库中,实际修改数据库结构。

python manage.py migrate
  1. 创建超级用户(可选):

如果你的模型包含了用户或权限相关的更改,可能需要创建超级用户。

python manage.py createsuperuser
  1. 查看数据库状态

可以运行以下命令,查看当前数据库的状态,确保所有迁移都已应用。

python manage.py showmigrations

请解释 Django 模型中的 CharField 和 TextField 之间的区别?

在 Django 模型中,CharFieldTextField 是两种用于存储文本数据的字段类型,它们之间的主要区别在于存储的文本数据的长度和用途。
CharField:

  • 用途:适用于短文本数据,如标题、名称等。
  • 特点:限制了字段的最大长度,需要指定 max_length 参数。
  • 示例
class Product(models.Model):name = models.CharField(max_length=255)

TextField:

  • 用途:适用于较长的文本数据,如文章内容、描述等。
  • 特点:不限制字段的最大长度,可存储任意长度的文本数据。
  • 示例
class Article(models.Model):content = models.TextField()

CharField 用于存储有限长度的文本数据,而 TextField 则用于存储不受限制的文本数据。在选择使用哪种类型时,可以根据数据的特性和存储需求来决定。如果你知道文本数据的最大长度,并且长度不会太长,那么使用 CharField 是合适的。如果文本数据可能会很长或长度不确定,那么使用 TextField 更合适。

如何在 Django 模型中定义外键和多对多关系?

在 Django 模型中,你可以使用 ForeignKeyManyToManyField 字段来定义外键关系和多对多关系。
外键关系(ForeignKey):
外键用于建立模型之间的一对多关系,其中一个模型的一个实例对应另一个模型的多个实例。

from django.db import modelsclass Author(models.Model):name = models.CharField(max_length=100)class Book(models.Model):title = models.CharField(max_length=200)author = models.ForeignKey(Author, on_delete=models.CASCADE)

在上面的例子中,Book 模型包含一个 ForeignKey 字段,该字段建立了与 Author 模型的外键关系。on_delete=models.CASCADE 表示当关联的作者记录被删除时,与之关联的书籍记录也会被删除。
多对多关系(ManyToManyField):
多对多关系用于建立模型之间的多对多关系,其中一个模型的一个实例可以与另一个模型的多个实例关联。

from django.db import modelsclass Student(models.Model):name = models.CharField(max_length=100)class Course(models.Model):title = models.CharField(max_length=200)students = models.ManyToManyField(Student)

在上面的例子中,Course 模型包含一个 ManyToManyField 字段,该字段建立了与 Student 模型的多对多关系。每个课程可以有多个学生,每个学生可以选修多个课程。
需要注意的是,在使用 ManyToManyField 时,Django 会自动创建一个中间表来维护关联关系。

什么是模型管理器(Model Manager)?如何自定义一个模型管理器?

在 Django 中,模型管理器(Model Manager)是一个负责查询数据库的工具,它允许你执行数据库查询和与模型相关的其他数据库操作。每个 Django 模型都有一个默认的模型管理器,但你也可以自定义模型管理器以添加自定义的查询方法或其他功能。
默认模型管理器:
每个 Django 模型都有一个默认的模型管理器,可以通过 objects 属性访问。例如:

class MyModel(models.Model):name = models.CharField(max_length=100)# 使用默认模型管理器
instances = MyModel.objects.all()

自定义模型管理器:
你可以创建自定义的模型管理器,以添加自定义的查询方法或其他功能。通常,自定义管理器是通过继承 models.Manager 类来实现的。

from django.db import modelsclass MyModelManager(models.Manager):def custom_query(self):# 自定义查询逻辑return self.filter(...)  # 例如,使用 filter 进行过滤操作class MyModel(models.Model):name = models.CharField(max_length=100)# 使用自定义模型管理器custom_objects = MyModelManager()

在上面的例子中,MyModelManager 继承自 models.Manager 类,然后在 MyModel 模型中通过 custom_objects 属性引入了这个自定义管理器。现在,你可以使用 custom_objects 执行自定义的查询操作:

# 使用自定义模型管理器执行查询
custom_instances = MyModel.custom_objects.custom_query()

默认管理器的替换:
如果你想替换模型的默认管理器,可以在模型中使用 objects 属性定义一个新的管理器。这样,你就可以使用新的管理器名称来执行查询。

from django.db import modelsclass MyCustomModelManager(models.Manager):def custom_query(self):return self.filter(...)class MyModel(models.Model):name = models.CharField(max_length=100)# 替换默认模型管理器objects = MyCustomModelManager()

在上面的例子中,objects 属性被重新定义为 MyCustomModelManager,这样 MyModel 将使用这个新的管理器作为默认管理器。自定义模型管理器为你提供了在模型层面组织和扩展查询逻辑的能力,使得你能够更方便地封装数据库操作和提供更清晰的 API。

Django 中支持哪些数据库后端?如何切换数据库后端?

Django 支持多种数据库后端,允许你选择适合你应用需求的数据库引擎。以下是一些常见的数据库后端:

  1. SQLite: 轻量级、嵌入式数据库,适用于小型项目或开发和测试环境。
  2. PostgreSQL: 强大的开源关系型数据库,提供高级功能和性能。
  3. MySQL: 另一种流行的开源关系型数据库,广泛用于 Web 应用程序。
  4. Oracle Database: 商业级关系型数据库,适用于大型企业应用。
  5. Microsoft SQL Server: Microsoft 提供的关系型数据库,适用于 Windows 平台。

切换数据库后端:

  1. 配置 **DATABASES** 设置:

在项目的 settings.py 文件中,你可以找到 DATABASES 设置,这是一个字典,用于配置数据库连接。修改 ENGINE 键的值来切换数据库后端。以下是一些常见的示例:

# 使用 SQLite(默认设置)
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / "db.sqlite3",}
}# 使用 PostgreSQL
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': 'mydatabase','USER': 'mydatabaseuser','PASSWORD': 'mypassword','HOST': 'localhost','PORT': '5432',}
}# 使用 MySQL
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mydatabase','USER': 'mydatabaseuser','PASSWORD': 'mypassword','HOST': 'localhost','PORT': '3306',}
}

什么是数据库索引?在 Django 中如何创建和使用索引?

数据库索引是一种优化数据库查询性能的机制,它提供了一种快速访问数据的方式。索引是数据库表上一个或多个列的数据结构,它们被组织为树形结构,以加速对表中数据的检索。在 Django 中,你可以使用模型的 indexes 属性来定义数据库索引。
创建索引:
在模型的 Meta 类中,使用 indexes 属性定义索引。以下是一个示例:

from django.db import modelsclass MyModel(models.Model):name = models.CharField(max_length=100)age = models.IntegerField()class Meta:indexes = [models.Index(fields=['name'], name='name_idx'),models.Index(fields=['name', 'age'], name='name_age_idx'),]

在上面的例子中,定义了两个索引。name_idx 是对单个字段 name 的索引,name_age_idx 是对多个字段 nameage 的联合索引。
使用 **unique** 属性创建唯一索引:
如果你想要创建唯一索引,可以使用模型字段的 unique 属性,或者使用 unique_together 属性定义多字段的唯一性:

from django.db import modelsclass MyModel(models.Model):name = models.CharField(max_length=100, unique=True)age = models.IntegerField()class Meta:unique_together = [('name', 'age')]

在上面的例子中,name 字段上的 unique=True 属性创建了一个唯一索引,而 unique_together 定义了对多个字段的唯一性要求。
迁移:
创建或修改索引后,你需要运行 Django 数据库迁移以应用这些更改:

python manage.py makemigrations
python manage.py migrate

Django 将生成相应的数据库命令来创建或修改索引。注意:在大型数据库中使用索引可能会提高读取性能,但也会增加写入操作的开销。因此,在设计索引时需要权衡查询性能和写入性能。

如何在 Django 模型中使用抽象基类(Abstract Base Classes)?

在 Django 模型中,抽象基类(Abstract Base Classes)是一种用于封装共享字段和方法的方式,但不会创建数据库表。它为模型提供了一种代码重用的机制,让你能够定义一组字段和方法,并在其他模型中继承它们。

创建抽象基类:

要创建一个抽象基类,你需要使用 abstract 属性将其设置为 True。以下是一个简单的例子:

from django.db import modelsclass BaseModel(models.Model):created_at = models.DateTimeField(auto_now_add=True)updated_at = models.DateTimeField(auto_now=True)class Meta:abstract = Trueclass MyModel(BaseModel):name = models.CharField(max_length=100)description = models.TextField()

在上面的例子中,BaseModel 是一个抽象基类,包含了 created_atupdated_at 两个字段。MyModel 继承了 BaseModel,因此它会继承这两个字段,但并不会创建 BaseModel 对应的数据库表。

继承抽象基类:

其他模型可以通过继承抽象基类来使用其中定义的字段和方法:

class AnotherModel(BaseModel):title = models.CharField(max_length=200)content = models.TextField()

在上面的例子中,AnotherModel 继承了 BaseModel,因此它也拥有 created_atupdated_at 两个字段,同时不会创建 BaseModel 对应的数据库表。

注意事项:

  • 抽象基类不能直接用于查询或保存数据,因为它本身没有对应的数据库表。
  • 如果你的抽象基类有外键关系,确保在关联的模型中设置 on_delete 参数,以定义在抽象基类被删除时的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/157859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深信服技术认证“SCSA-S”划重点:渗透测试工具使用

为帮助大家更加系统化的学习网络安全知识,尽快通过深信服安全服务认证工程师认证,深信服推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师(…

【开源】基于Vue和SpringBoot的创意工坊双创管理系统

项目编号: S 049 ,文末获取源码。 \color{red}{项目编号:S049,文末获取源码。} 项目编号:S049,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、…

生物活性分子库

Pubchem web:https://pubchem.ncbi.nlm.nih.gov/ PubChem是美国国立卫生研究院(NIH)的开放化学数据库。 “开放”意味着您可以将科学数据存储在PubChem中,其他人也可以使用它。自2004年启动以来,PubChem已成为科学家,…

[SSD测试 1.1] SSD测试软件哪个好? 8 款固态硬盘软件对比

传送门: >>> 总目录 依公知及经验整理,原创保护,请勿转载。 专栏 《深入理解SSD》 软件推荐指数PCmark5 星CrystalSSDMark4 星安兔兔4 星AS SSD3 星ATTODisk3 星HDTune3 星AnvilsStorage Utilities3 星CrystalDiskInfo3 星TxBENCH3 星系统自带工具1 星前言 测试软件…

消息的并发处理

看一下实现消息并发处理的代码,并发处理会增大实现流量控制、保证消息顺序方面的难度。 1 并发处理过程 处理效率的高低是反应Consumer实现好坏的重要指标,本节以ConsumeMessageConcurrentlyService类为例来分析RocketMQ的实现方式。ConsumeMessageCon…

紧跟热点:教你如何快速掌握ChatGPT

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

图解Spark Graphx基于connectedComponents函数实现连通图底层原理

原创/朱季谦 第一次写这么长的graphx源码解读,还是比较晦涩,有较多不足之处,争取改进。 一、连通图说明 连通图是指图中的任意两个顶点之间都存在路径相连而组成的一个子图。 用一个图来说明,例如,下面这个叫graph…

【教3妹学编程-算法题】最大异或乘积

3妹:2哥,你有没有看到新闻“18岁父亲为4岁儿子落户现身亲子鉴定” 2哥 : 啥?18岁就当爹啦? 3妹:确切的说是14岁好吧。 2哥 : 哎,想我30了, 还是个单身狗。 3妹:别急啊, 2…

已完结7个,再启动1个新项目,嘎嘎强!

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!😄 大家好,我是技术UP主小傅哥。 💐又到了启动新项目的时候,死鬼开心嘛。小傅哥的星球&#xf…

数据库课后习题加真题

文章目录 第二章第三章第四到六章某年真题 第二章 第三章 3.8 对于教学数据库的三个基本表: s( 学号 ‾ \underline{学号} 学号​,姓名,年龄, 性别) sc( 学号 , 课程号 ‾ \underline{学号, 课程号} 学号,课程号​, 成绩) c( 课程号 ‾ \un…

【C++】类与对象(中)

一、类的默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会自…

[超详细]基于YOLO&OpenCV的人流量统计监测系统(源码&部署教程)

1.图片识别 2.视频识别 [YOLOv7]基于YOLO&Deepsort的人流量统计系统(源码&部署教程)_哔哩哔哩_bilibili 3.Deepsort目标追踪 (1)获取原始视频帧 (2)利用目标检测器对视频帧中的目标进行检测 &#xff08…

oracle21c报错 【ORA-65096: 公用用户名或角色名无效】

1.数据库版本 oracle21c 2.问题提示 创建用户提示【ORA-65096: 公用用户名或角色名无效】 create user 自定义用户名 identified by 密码;--例:用户为test1,密码为123456 create user test1 identified by 123456;三.解决办法及结果 oracle11g之后的版本&#xff…

将kali系统放在U盘中插入电脑直接进入kali系统

首先准备一个空白的 U 盘。 Kali Linux | Penetration Testing and Ethical Hacking Linux Distribution 在 Windows 上制作 Kali 可启动 USB 驱动器 Making a Kali Bootable USB Drive on Windows | Kali Linux Documentation 1. 首先下载 .iso 镜像 Index of /kali-images…

构建 App 的方法

目录 构建 App 使用 App 设计工具以交互方式构建 App 使用 MATLAB 函数以编程方式构建 App 构建实时编辑器任务 可以使用 MATLAB 来构建可以集成到各种环境中的交互式用户界面。可以构建两种类型的用户界面: App - 基于用户交互执行操作的自包含界面 实时编辑器…

css中5种属性选择器

属性选择器 语法: [属性名]{} 选择含有指定属性的元素 [属性名属性值]{} 选择含有指定属性和属性值的元素 [属性名^属性值]{} 选择属性值以指定值开头的元素 [属性名$属性值]{} 选择属性值以指定值结尾的元素 [属性名*属性值]{} 选择属性值含有某值的元素 以下为演…

【HCSD大咖直播】亲授大厂面试秘诀【云驻共创】

同学们,毕业季是否找到了自己心仪的工作呢?是否了解大厂面试流程、要求以及技巧呢?华为云IoT高级工程师,传授大厂面试秘诀,教大家如何轻松get大厂offer!提前为大厂面试做准备,赢在起跑线&#x…

uniapp和vue3+ts创建自定义下拉选择框组件

使用uniapp开发小程序的时候,使用了uview的ui组件,但是里面没有下拉选择组件,只有Picker 选择器,但是我们想要使用下拉选择的组件,所以需要自定义个一个下拉选择的自定义组件,我就只能自己动手创建这个自定…

43、vue导出pdf文件,并解决滚动条外内容无法获取的问题

使用插件html2canvas和jspdf插件 下载完两个插件后引入所需要的页面 import html2canvas from "html2canvas" import jsPDF from "jspdf"1、在导出之前将元素的高度或者宽度设置为滚动高度或者宽度,如: el.style.height el.scro…

【MySQL】CONCAT、CONCAT_WS、GROUP_CONCAT 函数用法

CONCAT 含义 将多个字符串连接成一个字符串 语法 CONCAT(str1, str2,...)数据模拟(user_score) idnamescore1小明652小红703小兰904(Null)1005小李(Null) SQL 代码 SELECT CONCAT(name, ,, score) AS score FROM user_score结果 score小明,65小红…