青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试
青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试
- 一、软件测试
- 二、自动化测试
- 三、单元测试
- 四、Django 单元测试
- (一)、创建测试用例
- (二)、运行测试
- (三)、常用测试功能
课题摘要: 本文全面介绍了软件测试的基础知识、自动化测试和单元测试的详细内容,以及在Django中进行单元测试的具体方法。首先,阐述了软件测试的定义、目的、类型和重要性,强调了其在降低软件风险、提高用户满意度和保障企业利益方面的作用。接着,深入探讨了自动化测试的优势、常用工具、实施步骤和局限性,指出自动化测试虽能提高效率和准确性,但初始成本高且无法完全替代人工测试。文章还详细讲解了单元测试的定义、目的、实施步骤和重要性,强调了其在提高软件质量和促进敏捷开发中的关键作用。最后,介绍了Django单元测试的创建、运行和常用测试功能,包括测试数据库、视图和表单的方法,为Django开发者提供了实用的测试指南。
一、软件测试
软件测试是软件开发过程中一个非常重要的环节,以下是对其详细的介绍:
(一)、定义
软件测试是为了发现软件产品中的错误、缺陷和问题,验证软件是否满足用户需求、符合设计规格,并评估软件质量的一系列活动。它通过人工或自动化手段,对软件的各项功能、性能、兼容性、安全性等属性进行检查、验证和度量。
(二)、目的
- 发现缺陷
- 软件在开发过程中,由于各种原因(如程序员的疏忽、需求理解偏差等)可能会产生缺陷。例如,在一个电商软件中,可能因为代码逻辑错误,导致用户在结算时无法正常支付。软件测试能够通过各种测试用例,像模拟用户的各种操作场景(如添加商品到购物车、选择支付方式等),来发现这些隐藏的缺陷。
- 验证需求满足程度
- 确保软件实现了预期的功能。比如一个企业资源规划(ERP)系统,其需求是能够对企业的生产、销售、库存等环节进行有效管理。软件测试要验证系统是否能够准确地记录生产数据、生成销售报表、实时更新库存信息等,以满足企业的业务需求。
- 评估软件质量
- 从多个维度对软件质量进行评估。包括功能完整性(软件功能是否齐全)、性能(如响应时间、吞吐量等指标是否达标)、可靠性(软件在长时间运行或在特定压力下是否稳定)、易用性(用户界面是否友好,操作是否便捷)等方面。例如,对于一个视频播放软件,测试其在不同网络环境下(如Wi - Fi、4G等)的视频加载速度和播放流畅度,来评估其性能质量。
(三)、类型
- 按测试阶段划分
- 单元测试
- 是软件测试的最基础阶段,主要针对软件中的最小可测试单元(通常是函数、方法或类)进行测试。例如,在一个计算器软件的开发中,对加法函数进行单元测试。测试人员会输入各种可能的数值(包括正常值、边界值如最大整数、最小整数等),检查加法函数的输出结果是否正确。目的是验证单个单元的功能正确性,确保其能够独立地、正确地执行预定功能。
- 集成测试
- 在单元测试的基础上,将多个单元组合在一起进行测试。以一个在线教育平台为例,将课程管理模块(负责课程的添加、删除等操作)和用户管理模块(负责用户注册、登录等操作)进行集成测试。测试的重点是检查模块之间的接口是否正确,数据交互是否正常。比如,当用户注册成功后,课程管理模块是否能够正确识别新用户并为其提供课程选择服务。
- 系统测试
- 把整个软件系统作为一个整体进行测试。还是以在线教育平台为例,系统测试会模拟真实用户在平台上的各种操作流程,包括浏览课程、购买课程、观看视频、参与讨论等。同时,还会测试软件与外部系统的交互,如与支付系统的接口是否稳定,能否正确完成支付流程等。目的是验证软件系统作为一个整体是否满足用户需求和设计规格。
- 验收测试
- 是软件正式交付用户之前的最后一个测试阶段。通常由用户或用户代表来执行。在验收测试中,用户会根据自己的实际业务场景和需求,对软件进行全面的测试。例如,一个医院信息系统在验收测试阶段,医院的医护人员会使用该系统进行挂号、病历管理、药品调配等操作,检查系统是否符合医院的业务流程和管理要求。验收测试的结果将决定软件是否能够正式投入使用。
- 单元测试
- 按测试技术划分
- 黑盒测试
- 把软件看作一个黑盒子,测试人员不关心软件内部的实现逻辑,只关注软件的输入和输出。测试用例是根据软件的规格说明来设计的。例如,对于一个登录功能,测试人员会根据规格说明(如用户名和密码的格式要求、登录成功后的页面跳转等),设计不同的输入组合(如正确的用户名和密码、错误的用户名、空密码等),观察输出结果(登录成功、提示用户名错误、提示密码不能为空等)。黑盒测试的优点是能够从用户的角度发现软件的问题,缺点是对软件内部逻辑的覆盖不够全面。
- 白盒测试
- 测试人员需要了解软件的内部结构和实现逻辑。测试用例是根据软件的代码路径、逻辑分支等来设计的。比如在一个排序算法的白盒测试中,测试人员会根据算法的代码逻辑,设计测试用例来覆盖不同的分支路径(如当输入数组为空、数组只有一个元素、数组元素已经有序等情况)。白盒测试能够深入地发现软件内部的缺陷,但工作量相对较大,且需要测试人员具备较强的编程能力。
- 灰盒测试
- 是介于黑盒测试和白盒测试之间的一种测试方法。测试人员既关注软件的输入输出,也对软件的部分内部结构有所了解。例如,在测试一个具有多层架构(如前端界面层、业务逻辑层、数据库层)的软件时,测试人员可能会关注前端界面层和业务逻辑层之间的数据交互是否正确,同时也会根据业务逻辑层的代码逻辑来设计一些测试用例。灰盒测试能够更好地结合黑盒测试和白盒测试的优点,在实际的软件测试工作中应用较为广泛。
- 黑盒测试
(四)、重要性
- 降低软件风险
- 通过软件测试发现并修复缺陷,可以避免软件在实际运行过程中出现故障,给用户带来不便甚至造成损失。例如,对于一个金融软件,如果存在安全漏洞(如用户账户信息容易被盗取),一旦投入使用,可能会导致用户的资金损失,给金融机构带来巨大的声誉和经济风险。而软件测试能够提前发现这类安全问题,降低风险。
- 提高用户满意度
- 当软件能够满足用户需求、功能正常、运行稳定且易于使用时,用户的满意度就会提高。高质量的软件测试能够确保软件具备这些特性。例如,一个手机游戏,如果经过充分的测试,游戏画面流畅、操作响应迅速、关卡设计合理,玩家就会有良好的游戏体验,从而提高对游戏的满意度。
- 保障企业利益
- 对于软件开发企业来说,高质量的软件产品能够增强企业的市场竞争力。如果企业能够提供经过严格测试、质量可靠的软件,就能赢得客户的信任,增加市场份额。同时,减少因软件缺陷导致的后期维护成本和客户投诉成本,为企业带来经济效益。
二、自动化测试
自动化测试是软件测试领域中一种重要的测试手段,以下是对其详细的介绍:
(一)、定义
自动化测试是利用自动化测试工具或框架,按照预先设计好的测试用例,自动执行测试过程,并对测试结果进行自动记录和分析的一种测试方法。它通过编写测试脚本,模拟用户操作或者调用软件接口等方式,来实现对软件的自动测试。
(二)、优势
- 提高测试效率
- 自动化测试可以在短时间内执行大量的测试用例。例如,对于一个具有复杂功能的软件系统,手动测试可能需要测试人员花费数天甚至数周的时间来完成所有测试用例的执行。而自动化测试工具可以在几小时甚至几十分钟内完成相同数量的测试用例。像在回归测试(当软件有新的功能更新或者修复了某些缺陷后,对原有功能进行重新测试)场景中,自动化测试能够快速地对软件的各个功能模块进行验证,大大缩短了测试周期。
- 提高测试准确性
- 人工测试容易受到测试人员的主观因素和疲劳程度的影响。而自动化测试严格按照预设的测试脚本执行,能够精确地重复相同的测试步骤,避免了人为的疏忽和错误。例如,在测试软件的数值计算功能时,自动化测试可以精确地输入各种数值组合,并准确地验证计算结果是否符合预期,不会出现因测试人员手误输入错误数值或者计算错误而导致的测试结果偏差。
- 可重复性强
- 自动化测试脚本一旦编写完成,就可以在不同的测试环境中反复执行。这对于测试软件在不同操作系统、不同硬件配置、不同网络环境下是否能够正常运行非常有帮助。比如,一个移动应用软件,自动化测试可以在多种手机品牌和操作系统版本(如iOS不同版本、Android不同版本)上重复执行相同的测试用例,确保软件在各种环境下都能达到预期的功能和性能要求。
- 便于回归测试
- 当软件版本更新时,自动化测试可以方便地对旧版本的测试用例进行重新执行。测试人员只需更新测试脚本中与新功能或修改相关的内容,就可以快速地对软件进行全面的回归测试。例如,一个办公软件增加了新的文档格式支持功能,在回归测试中,自动化测试可以自动检查原有文档编辑、格式转换等功能是否仍然正常工作,同时验证新功能是否与旧功能兼容。
(三)、常用的自动化测试工具
- Selenium
- 主要用于Web应用的自动化测试。它可以模拟用户在浏览器中的各种操作,如点击按钮、输入文本、选择下拉菜单选项等。Selenium支持多种编程语言(如Java、C#、Python等)来编写测试脚本。例如,测试一个电商网站的登录功能,使用Selenium可以编写脚本,打开浏览器,输入用户名和密码,点击登录按钮,然后检查登录后的页面元素(如用户头像、用户名显示等)是否符合预期,从而判断登录功能是否正常。
- Appium
- 是一个开源的移动应用自动化测试框架,支持对iOS和Android平台的应用进行测试。它基于Selenium的架构,能够模拟用户在移动设备上的操作,如滑动屏幕、点击图标、输入文本等。例如,在测试一个移动地图应用时,Appium可以编写测试脚本,模拟用户打开应用,输入目的地地址,点击导航按钮,检查导航路线是否正确显示等操作。
- JUnit
- 是一个主要用于Java语言的单元测试框架。它可以帮助开发者编写和执行单元测试用例。开发者可以使用JUnit提供的注解(如@Before、@Test、@After等)来定义测试方法的执行顺序和环境准备。例如,在测试一个Java类的加法方法时,可以使用JUnit编写测试用例,通过断言(assert)语句来验证加法方法的返回结果是否与预期的和相等。
- LoadRunner
- 是一款性能测试工具,它可以模拟大量用户同时访问软件系统,来测试系统的性能。LoadRunner能够记录用户操作脚本,并在测试过程中按照设定的参数(如并发用户数、事务响应时间等)来执行脚本。例如,对于一个在线交易系统,LoadRunner可以模拟成百上千的用户同时进行交易操作,测试系统在高并发情况下的响应速度、吞吐量等性能指标,帮助发现系统性能瓶颈。
(四)、实施自动化测试的步骤
- 测试需求分析
- 首先要明确软件的测试需求,确定哪些功能模块适合进行自动化测试。例如,对于一个具有用户管理、订单处理和数据分析等功能的软件,分析后可能发现用户登录、订单生成等频繁使用的功能模块适合自动化测试,因为这些模块的测试用例相对稳定,且需要在多个测试阶段反复执行。
- 选择合适的自动化测试工具
- 根据软件的类型(如Web应用、移动应用、桌面应用等)、开发语言、测试需求等因素,选择合适的自动化测试工具。如前面提到的,对于Web应用可以选择Selenium,对于移动应用可以选择Appium等。
- 编写测试脚本
- 根据测试用例,使用选定的自动化测试工具提供的语法和功能,编写测试脚本。测试脚本要能够模拟用户操作或者调用软件接口,实现对软件的自动测试。例如,在使用Selenium测试Web应用时,编写脚本来打开网页、定位页面元素、执行操作(如点击、输入等)并验证结果。
- 执行测试脚本
- 在搭建好的测试环境中(如配置好浏览器、移动设备模拟器等),运行测试脚本。自动化测试工具会自动执行脚本中的测试步骤,并记录测试结果。测试人员需要监控测试执行过程,查看是否有异常情况发生。
- 结果分析与缺陷报告
- 测试执行完成后,对测试结果进行分析。如果测试结果不符合预期,需要定位问题所在,是软件本身存在缺陷还是测试脚本编写有误。对于发现的软件缺陷,及时记录并报告给开发团队,以便进行修复。同时,也要对测试脚本进行维护和优化,以适应软件版本的更新和测试需求的变化。
(五)、局限性
- 初始成本高
- 实施自动化测试需要投入一定的成本,包括购买自动化测试工具(部分工具是商业软件,需要付费购买)、搭建测试环境(如购买服务器、配置网络等)、编写测试脚本(需要专业的测试人员投入大量时间)等。例如,对于一个小型软件企业,购买一套功能强大的自动化测试工具可能需要数万元,而且还需要花费数月时间来编写测试脚本,这对于企业的资金和人力都是一个较大的负担。
- 测试脚本维护成本高
- 当软件频繁更新时,测试脚本也需要相应地进行维护和更新。如果软件的界面发生较大变化(如元素位置改变、控件类型变更等),或者业务逻辑有调整,测试脚本可能无法正常执行,需要重新编写或修改。例如,一个Web应用更新了页面布局,原来的Selenium测试脚本中定位页面元素的方式可能就不再适用,需要花费时间重新修改脚本,增加了维护成本。
- 无法完全替代人工测试
- 自动化测试主要侧重于按照预设的测试用例执行测试,对于一些需要测试人员主观判断的测试场景(如界面的美观性、用户体验的主观感受等)无法进行有效的测试。例如,在测试一个艺术设计软件的界面时,自动化测试无法判断界面的颜色搭配是否协调、图标设计是否符合艺术审美等,这些需要测试人员凭借自己的经验和主观感受来进行人工测试。
三、单元测试
单元测试是软件测试中非常基础且关键的一个环节,以下是对其详细的介绍:
(一)、定义
单元测试是指对软件中的最小可测试单元(通常是函数、方法或类)进行检查和验证。它是在软件开发过程中,由开发者或者测试人员针对单个软件组件进行的测试,目的是确保每个单元能够独立地、正确地执行其预定功能。
(二)、目的
- 验证单元功能正确性
- 单元测试的核心目的是验证单个单元的功能是否符合设计要求。例如,对于一个数学库中的求平方根函数,单元测试要验证当输入不同的数值(如正数、零、非常大的数等)时,函数能否返回正确的平方根结果。通过单元测试,可以确保每个单元在逻辑上是正确的,为后续的集成测试和系统测试打下坚实的基础。
- 快速定位问题
- 当单元测试失败时,由于测试范围仅限于单个单元,所以能够快速地定位问题所在。比如在一个软件项目中,有 hundreds of functions,当对其中一个排序函数进行单元测试发现错误时,开发者可以迅速聚焦到这个排序函数的代码上,检查是算法逻辑错误、边界条件处理不当还是其他原因导致的测试失败,从而节省问题排查的时间。
- 支持代码重构
- 在软件开发过程中,代码重构是常见的活动。单元测试为代码重构提供了保障。当开发者对代码进行重构(如优化算法、调整函数结构等)时,可以重新运行单元测试。如果单元测试仍然通过,说明重构后的代码在功能上仍然正确,没有引入新的错误。例如,对一个数据处理类进行重构,修改了部分方法的实现逻辑,通过单元测试可以验证重构后的类是否仍然能够正确地处理数据,保证软件质量。
(三)、实施步骤
- 确定测试需求
- 首先要明确被测试单元的功能需求。这通常来源于软件的设计文档或者开发任务说明。例如,对于一个用户注册功能中的密码验证方法,需求可能是密码长度至少为8位,包含数字、字母和特殊字符。单元测试就要围绕这些需求来设计测试用例。
- 设计测试用例
- 根据单元的功能需求,设计多种测试用例。测试用例应该包括正常输入(如符合密码格式要求的字符串)、边界输入(如密码长度刚好为8位的字符串)和异常输入(如空字符串、密码长度小于8位的字符串等)。对于每个测试用例,都要明确预期的输出结果。例如,对于密码验证方法,正常输入的预期结果是验证通过,异常输入的预期结果是验证失败并返回相应的错误提示。
- 编写测试代码
- 使用合适的单元测试框架(如JUnit for Java、NUnit for .NET、pytest for Python等)来编写测试代码。测试代码要能够调用被测试单元,并将测试用例的输入传递给单元,然后获取单元的输出结果。例如,在使用JUnit测试Java中的一个加法方法时,编写测试类,使用@Test注解标注测试方法,在测试方法中调用加法方法,并使用assert语句来验证返回结果是否与预期结果相等。
- 执行测试
- 运行编写好的测试代码,自动化测试工具会执行测试用例,并将测试结果输出。测试人员需要查看测试结果,判断每个测试用例是否通过。如果测试用例失败,要进一步分析是测试用例设计问题还是被测试单元存在缺陷。
- 维护测试代码
- 随着软件的迭代开发,被测试单元可能会发生变化。当单元的接口、功能或者实现逻辑发生改变时,相应的测试代码也需要进行维护。例如,如果加法方法增加了对浮点数的支持,原来的测试用例可能只考虑了整数加法,就需要补充浮点数加法的测试用例,并修改测试代码来适应新的功能。
(四)、重要性
- 提高软件质量
- 单元测试能够及时发现代码中的错误,从最基础的单元层面保证软件质量。通过单元测试,可以减少缺陷在后续测试阶段(如集成测试、系统测试)的传播,降低缺陷修复成本。例如,在一个大型软件系统中,如果每个单元都经过了严格的单元测试,那么在集成测试时,由于单元本身质量较高,集成时出现的问题就会相对较少,从而提高整个软件系统的质量。
- 增强开发信心
- 当开发者为编写的代码单元编写了完善的单元测试,并且测试通过后,会增强开发者对代码的信心。开发者可以更有把握地进行后续的开发工作,如代码合并、功能扩展等。例如,一个开发者为新编写的数据加密函数进行了全面的单元测试,测试结果显示函数能够正确地加密和解密数据,那么在将这个函数集成到更大的系统中时,开发者会更有信心,相信这个单元不会轻易出错。
- 促进敏捷开发
- 在敏捷开发模式下,软件需求可能会频繁变化,代码需要快速迭代。单元测试与敏捷开发相辅相成。单元测试可以快速验证新开发的单元功能是否符合新的需求,同时在代码重构以适应需求变化时,单元测试能够保障重构后的代码质量。例如,在一个敏捷开发项目中,根据用户反馈需要调整一个用户界面组件的交互逻辑,开发者可以先修改单元测试用例来反映新的交互需求,然后修改代码并通过单元测试来确保新的逻辑正确,这样可以加快开发进度,适应敏捷开发的节奏。
四、Django 单元测试
在 Django 中进行单元测试主要通过 Django 自带的测试框架来实现,以下是详细步骤:
(一)、创建测试用例
-
编写测试类
-
在 Django 应用的
tests.py
文件中编写测试类。测试类需要继承自django.test.TestCase
。例如:from django.test import TestCaseclass MyModelTestCase(TestCase):def test_model_creation(self):# 测试代码pass
-
TestCase
类提供了很多有用的方法和属性来帮助进行测试,比如assertEqual()
、assertTrue()
等断言方法,用于验证测试结果是否符合预期。
-
-
编写测试方法
-
在测试类中编写测试方法,每个测试方法以
test_
开头。测试方法中编写具体的测试逻辑。 -
例如,测试一个模型的创建是否成功:
from django.test import TestCase from .models import MyModelclass MyModelTestCase(TestCase):def test_model_creation(self):# 创建模型实例my_model_instance = MyModel.objects.create(field1='value1', field2='value2')# 断言模型实例是否创建成功self.assertIsNotNone(my_model_instance.id)
-
(二)、运行测试
- 使用命令行运行
- 在项目的根目录下,使用命令
python manage.py test
来运行所有应用的测试用例。Django 会自动发现并运行tests.py
文件中的测试类和方法。 - 也可以指定特定应用进行测试,例如
python manage.py test myapp
,这样只会运行myapp
应用下的测试用例。
- 在项目的根目录下,使用命令
- 使用测试发现功能
- Django 的测试框架支持测试发现功能。如果测试文件名以
test
开头,并且位于应用目录下,Django 会自动发现并运行这些测试文件中的测试用例。例如,除了tests.py
,还可以创建test_models.py
、test_views.py
等文件来存放不同类型的测试用例。
- Django 的测试框架支持测试发现功能。如果测试文件名以
(三)、常用测试功能
-
测试数据库
- Django 会为测试自动创建一个独立的测试数据库。在测试过程中,对数据库的操作不会影响到实际的开发数据库。测试结束后,测试数据库会被自动删除。
- 可以在测试方法中使用 Django 的 ORM 操作数据库,比如创建、查询、更新和删除模型实例。
-
测试视图
-
使用
Client
类来模拟 HTTP 请求,测试视图的响应。例如:from django.test import TestCase, Clientclass MyViewTestCase(TestCase):def test_view(self):client = Client()response = client.get('/my-view-url/')self.assertEqual(response.status_code, 200)
-
可以通过
client.get()
、client.post()
等方法模拟不同的 HTTP 请求方法,并检查响应的状态码、内容等。
-
-
测试表单
-
测试表单的验证逻辑。例如:
from django.test import TestCase from .forms import MyFormclass MyFormTestCase(TestCase):def test_form_valid(self):form_data = {'field1': 'value1', 'field2': 'value2'}form = MyForm(data=form_data)self.assertTrue(form.is_valid())
-
可以创建表单实例,传入测试数据,然后使用
is_valid()
方法检查表单是否验证通过。
-
通过以上步骤和功能,你可以在 Django 项目中有效地进行单元测试,确保代码的质量和稳定性。
相关文章:
青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试
青少年编程与数学 02-009 Django 5 Web 编程 20课题、测试 一、软件测试二、自动化测试三、单元测试四、Django 单元测试(一)、创建测试用例(二)、运行测试(三)、常用测试功能 课题摘要: 本文全面介绍了软件…...
WPF 中为 Grid 设置背景图片全解析
WPF 中为 Grid 设置背景图片全解析 在 WPF(Windows Presentation Foundation)开发中,界面的美观度是吸引用户的重要因素之一。而添加背景图片是提升界面视觉效果的常见手段。今天,我们就来深入探讨在 WPF 里如何为 Grid 设置背景…...
3.10 实战Hugging Face Transformers:从文本分类到模型部署全流程
实战Hugging Face Transformers:从文本分类到模型部署全流程 一、文本分类实战:IMDB电影评论情感分析 1.1 数据准备与预处理 from datasets import load_dataset from transformers import AutoTokenizer # 加载IMDB数据集 dataset = load_dataset("imdb") …...
Android中获取so文件来源于哪个库
Android app中可能有很多的.so文件,有时我们不确定这些.so文件都是来源于哪些库的,可以通过在build.gradle中添加代码来统计。具体方法如下: 1.在com.android.application模块的build.gradle文件最后添加如下代码: // 获取所有的…...
地面沉降监测,为地质安全保驾护航
地面沉降,不容忽视的城市隐患 随着城市化进程的加速,大规模的工程建设、地下水过度开采等因素,导致地面沉降现象日益严重。地面沉降不仅会使建筑物开裂、倾斜,影响其使用寿命和安全性,还会破坏地下管线,引…...
宝塔docker 安装oracle11G
1、拉取镜像 sudo docker pull iatebes/oracle_11g #iatebes为用户名2、查看镜像 sudo docker images3、创建并运行容器 docker run -d --privileged --name oralce11g -p 1521:1521 iatebes/oracle_11g4、登录到容器 5、进入容器并修改system用户密码 docker exec -it orac…...
unity学习39:连续动作之间的切换,用按键控制角色的移动
目录 1 不同状态之间的切换模式 1.1 在1个连续状态和一个连续状态之间的transition,使用trigger 1.2 在2个连续状态之间的转换,使用bool值切换转换 2 至少现在有2种角色的移动控制方式 2.1 用CharacterController 控制角色的移动 2.2 用animator…...
DeepSeek等大模型功能集成到WPS中的详细步骤
记录下将**DeepSeek功能集成到WPS中**的步骤,以备忘。 1. 下载并安装OfficeAI插件 访问OfficeAI插件下载地址:https://www.office-ai.cn/,下载插件(目前只支持windows系统)。 注意,有两个插件࿰…...
基于Python的Flask微博话题舆情分析可视化系统
✅️配套lun文 1w9字 ✅️爬虫可用 12月数据 ✅️实时微博热点分析 技术栈:爬虫➕Flask后端框架➕bert深度学习模型➕mysql数据库系统功能:爬取微博数据(可以是同类型文章或者制定文章),微博文章情感分析,微博评论情感…...
服务器A到服务器B免密登录
#!/bin/bash # 变量定义 source_host"192.168.42.250" # 源主机 IP target_host"192.168.24.43" # 目标主机 IP target_user"nvidia" # 目标主机的用户名 ssh_port"6666" # SSH 端口号 # 生成 SSH…...
Unity中可靠的UDP实现
可靠 UDP(Reliable UDP)是一种在用户数据报协议(UDP)基础上,通过添加额外机制来实现可靠数据传输的技术。与传统 UDP 相比,它克服了 UDP 本身不保证数据可靠性、顺序性以及可能丢失数据的缺点,同…...
轮播图html
题十二:轮播图 要求: 1.鼠标不在图片上方时,进行自动轮播,并且左右箭头不会显示;当鼠标放在图片上方时,停止轮播,并且左右箭头会显示; 2.图片切换之后,图片中下方的小圆…...
二十多年前的苹果电源Power Mac G4 Mdd 电源接口
在1999年,苹果推出了最初的Power Mac G4电脑。第一代Power Mac G4有与G3系列相似的外壳和两种主板设置,分别使用PCI和AGP显示总线。第二代电脑被昵称为快银或水银机,来自2001年的它们有更高速的PowerPC 7450系列芯片,增强了L2缓存…...
java听书项目
项目的架构 网关:1路由转发 2.认证鉴权(token)3.统一处理(跨域) Mysql:关系型数据库 ES:搜索数据库 Redis:页面级缓存,会话状态存储 GitLab:私有托管平台 K8S:自动化部署、扩展和管理容器化应用程序的开源系统 Jenkins:自动化部署 1.环境搭建 创建一个父工程…...
RadASM环境,win32汇编入门教程之三
;运行效果 ;win32汇编环境,RadAsm入门教程之三 ;在这个教程里,我们学一下如何增加控件,比如按钮,其它的控件类似这样增加 ;以下的代码就是在教程一的窗口模版里增加一个按钮控件,可以比较一下,增加了什么内…...
【机器学习】线性回归 多元线性回归
【机器学习系列】 KNN算法 KNN算法原理简介及要点 特征归一化的重要性及方式线性回归算法 线性回归与一元线性回归 线性回归模型的损失函数 多元线性回归 多项式线性回归 多元线性回归 V1.0多元线性回归一元线性回归与多元线性回归多元线性回归模型的误差衡量多元线性回归的最…...
线性代数中的正交和标准正交向量
在线性代数中,理解正交向量和正交向量至关重要,尤其是对于机器学习中的应用。这篇博文将简化这些概念,而不会太深入地深入研究复杂的数学。 正交向量 如果两个向量的点积等于零,则认为这两个向量是正交的。但点积到底是什么呢&am…...
Vue 项目登录的基本流程
Vue 用户登录的基本流程包括以下6个步骤: 步骤: 1. 创建登录表单 在前端,首先要创建一个登录表单,用户输入账号(用户名、邮箱、手机号等)和密码。 示例:Login.vue <template><div…...
坐井说天阔---DeepSeek-R1
前言 DeepSeek-R1这么火,虽然网上很多介绍和解读,但听人家的总不如自己去看看原论文。于是花了大概一周的时间,下班后有进入了研究生的状态---读论文。 DeepSeek这次的目标是探索在没有任何监督数据的情况下训练具有推理能力的大模型&#…...
Spring 是如何解决循环依赖问题的?
Spring框架通过使用三级缓存机制来解决单例Bean之间的循环依赖问题。以下是详细的解释,包括循环依赖的概念、Spring的解决方案以及三级缓存的具体作用。 什么是循环依赖? 循环依赖是指两个或多个Bean之间相互依赖,形成一个闭环。例如&#…...
【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
thingboard告警信息格式美化
原始报警json内容: { "severity": "CRITICAL","acknowledged": false,"cleared": false,"assigneeId": null,"startTs": 1739801102349,"endTs": 1739801102349,"ackTs": 0,&quo…...
Javaweb中,使用Servlet编写简单的接口
案例:网页提交用户名和密码信息,后端校验密码长度需在6-12位之间 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…...
三层渗透测试-DMZ区域 二三层设备区域
DMZ区域渗透 信息收集 首先先进行信息收集,这里我们可以选择多种的信息收集方式,例如nmap如此之类的,我的建议是,可以通过自己现有的手里小工具,例如无影,密探这种工具,进行一个信息收集。以免…...
Java 开发者需要了解的 PDF 基础知识
PDF 代表“可移植文档格式”(Portable Document Format),它是全球最流行的文件格式。因此,Java 开发人员很可能会经常需要处理它。然而,与 Microsoft Word 或 HTML/XML 这样的格式相比,PDF 并不那么直观。理…...
基于图像处理的裂缝检测与特征提取
一、引言 裂缝检测是基础设施监测中至关重要的一项任务,尤其是在土木工程和建筑工程领域。随着自动化技术的发展,传统的人工巡检方法逐渐被基于图像分析的自动化检测系统所取代。通过计算机视觉和图像处理技术,能够高效、精确地提取裂缝的几何特征,如长度、宽度、方向、面…...
Webpack 基础入门
一、Webpack 是什么 Webpack 是一款现代 JavaScript 应用程序的静态模块打包工具。在 Web 开发中,我们的项目会包含各种类型的文件,如 JavaScript、CSS、图片等。Webpack 可以将这些文件打包成一个或多个文件,以便在浏览器中高效加载。它就像…...
掌握SQLite_轻量级数据库的全面指南
1. 引言 1.1 SQLite简介 SQLite 是一个嵌入式关系型数据库管理系统,它不需要单独的服务器进程或系统配置。它的设计目标是简单、高效、可靠,适用于各种应用场景,尤其是移动设备和嵌入式系统。 1.2 为什么选择SQLite 轻量级:文件大小通常在几百KB到几MB之间。无服务器架构…...
大数据处理如何入门
大数据处理的入门可以从以下几个方面入手: 1. 基础知识学习 在深入大数据领域之前,建议先掌握一些基础知识,包括数据类型、存储与处理的基本概念,以及常用的数据处理工具。例如,Python或Java编程语言在大数据领域应用…...
算法与数据结构(最小栈)
题目 思路 为了返回栈中的最小元素,我们需要额外维护一个辅助栈 min_stack,它的作用是记录当前栈中的最小值。 min_stack的作用: min_stack的栈顶元素始终是当前栈 st 中的最小值。 每当st中压入一个新元素时,如果这个元素小于等…...
LeetCode 1287.有序数组中出现次数超过25%的元素:遍历
【LetMeFly】1287.有序数组中出现次数超过25%的元素:遍历 力扣题目链接:https://leetcode.cn/problems/element-appearing-more-than-25-in-sorted-array/ 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出…...
春招项目=图床+ k8s 控制台(唬人专用)
1. 春招伊始 马上要春招了,一个大气的项目(冲击波项目)直观重要,虽然大家都说基础很重要,但是一个足够新颖的项目完全可以把你的简历添加一个足够闪亮的点。 这就不得不推荐下我的 k8s 图床了,去年折腾快…...
Vue 记录用户进入页面的时间、离开页面的时间并计算时长
在 Vue 项目中,要记录用户进入页面的时间、离开页面的时间,并在用户离开时计算时长并调用后端接口,可以借助 Vue 的生命周期钩子和浏览器的一些事件来实现。以下是具体的实现步骤和示例代码: 实现思路 记录进入时间:…...
解锁豆瓣高清海报(三)从深度爬虫到URL构造,实现极速下载
脚本地址: 项目地址: Gazer PosterBandit_v2.py 前瞻 之前的 PosterBandit.py 是按照深度爬虫的思路一步步进入海报界面来爬取, 是个值得学习的思路, 但缺点是它爬取慢, 仍然容易碰到豆瓣的 418 错误, 本文也会指出彻底解决旧版 418 错误的方法并提高爬取速度. 现在我将介绍…...
机器学习--逻辑回归
机器学习–逻辑回归 一、认知革命:从线性回归到逻辑回归 1.1 本质差异对比 维度线性回归逻辑回归输出类型连续值概率值 (0-1)目标函数最小二乘法极大似然估计数学表达式 y w T x b yw^Txb ywTxb p 1 1 e − ( w T x b ) p\frac{1}{1e^{-(w^Txb)}} p1e−(wTxb…...
gradio创建openai前端对接deepseek等模型流式输出markdown格式文本
环境 gradio3.50.2 openai1.63.1代码 import openai import gradio as gr#导入gradio的包api_key "sk-**a8" api_base "https://api.deepseek.com/v1"import gradio as gr import openai from typing import List, Any, Iteratorclient openai.OpenAI…...
【LeetCode Hot100】最大子数组和|动态规划/贪心,Java实现!图解+代码,小白也能秒懂!
💻 [LeetCode Hot100] 最大子数组和|动态规划/贪心,Java实现!图解代码,小白也能秒懂! ✏️本文对应题目链接:最大子数组和 📌 题目描述 给定一个整数数组 nums,找到一个…...
【Go语言快速上手】第二部分:Go语言进阶之网络编程
文章目录 前言:网络编程一、TCP/UDP 编程:net 包的使用1. TCP 编程1.1 TCP 服务器1.2 TCP 客户端 2. UDP 编程2.1 UDP 服务器2.2 UDP 客户端 二、HTTP 编程:net/http 包的使用,编写 HTTP 服务器和客户端2.1 HTTP 服务器2.2 HTTP 客…...
AI法理学与责任归属:技术演进下的法律重构与伦理挑战
文章目录 引言:智能时代的新型法律困境一、AI技术特性对传统法理的冲击1.1 算法黑箱与可解释性悖论1.2 动态学习系统的责任漂移1.3 多智能体协作的责任稀释二、AI法理学的核心争议点2.1 法律主体资格认定2.2 因果关系的技术解构2.3 过错标准的重新定义三、责任归属的实践案例分…...
Linux探秘坊-------8.进程详解
1.概念详解 1.运行&&阻塞&&挂起 内容基础:方框中的就是调度队列,是一个 双向队列,每一个元素是PCB其对应的代码数据 1.运行 只要进程 在调度队列中,进程的状态就是运行(running). 2.阻塞…...
C#使用文件读写操作实现仙剑五前传称号存档修改
手把手教学仙剑五前传 称号存档修改器 首先找到 Pal5Q所在目录的save\global.sav 文件,这是一个只有488字节的文件,这里存放称号对应的编号ID,以及是否已获得该称号,1为已获取称号,0为未获取称号 [称号:是否获取]这是一个键值对 称号的编号ID是一个Int32数字,使用C#的方法Bi…...
Kubernetes知识点总结(十)
什么是 K8s 的 namespace? 在 K8s 中,Namespace(名字空间)提供了一种机制,将同一集群中的资源划分为相互隔离的组, 是在多个用户之间划分集群资源的一种方法。 名字空间作用域仅针对带有名字空间的对…...
【达梦数据库】disql工具参数绑定
前言 在达梦数据库的使用过程中尽管管理工具很好用,但是命令行工具还是有着得天独厚的优势,但是在参数绑定方面就没有管理工具做的更加完美,现在就汇总下disql 工具参数绑定的常用几种方式 disql 参数绑定 使用 ? select * from v$dm_in…...
箭头函数的this指向谁
先看1个重要原则: 由Vue管理的函数,一定不要写箭头函数,箭头函数的this就不再是Vue实例了 箭头函数的 this 指向在定义时确定,继承自外层作用域(即定义时的上下文)的 this,且无法通过 call、app…...
Node.js技术原理分析系列——Node.js调试能力分析
本文由体验技术团队屈金雄原创。 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,它允许开发者在服务器端运行 JavaScript 代码。Node.js 是基于 Chrome V8引擎构建的,专为高性能、高并发的网络应用而设计,广泛应用于构建服务器端应…...
网络基础 【UDP、TCP】
1.UDP 首先我们学习UDP和TCP协议 要从这三个问题入手 1.报头和有效载荷如何分离、有效载荷如何交付给上一层的协议?2.认识报头3.学习该协议周边的问题 UDP报头 UDP我们先从示意图来讲解,认识报头。 UDP协议首部有16位源端口号,16位目的端…...
python旅游推荐系统+爬虫+可视化(协同过滤算法)
✅️基于用户的协同过滤算法 ✅️有后台管理 ✅️2w多数据集 这个旅游数据分析推荐系统采用了Python语言、Django框架、MySQL数据库、requests库进行网络爬虫开发、机器学习中的协同过滤算法、ECharts数据可视化技术,以实现从网站抓取旅游数据、个性化推荐和直观展…...
数据结构 树的存储和遍历
一、树的定义 树的定义 树型结构是⼀类重要的⾮线性数据结构。 • 有⼀个特殊的结点,称为根结点,根结点没有前驱结点。 • 除根结点外,其余结点被分成M个互不相交的集合T1 、T2 、...、Tm T,其中每⼀个集合⼜是⼀棵树,…...
《解锁自然语言处理:让公众正确拥抱AI语言魔法》
在当今数字化浪潮中,自然语言处理(NLP)技术作为人工智能领域的璀璨明珠,正以惊人的速度融入我们的生活。从智能语音助手到智能客服,从机器翻译到内容创作辅助,NLP技术无处不在。然而,如同任何强…...
qt实习总结
创建一个滑动条 QSlider *slider new QSlider(Qt::Vertical); //创建一个垂直方向的 进度条 带有上下箭头的输入框 QSpinBox 提供了一个带有上下箭头的输入框 垂直 水平怎么说 horizontal vetical 布局知识 BtnLayout->addWidget(AmendBtn); BtnLayout->addWidg…...