【期末复习】JavaEE(下)
1. MVC开发模式
1.1. 运行流程
1.2. SpringMVC 核心组件
1.3. 注解解释
2. ORM与MyBatis
2.1. ORM—对象关系映射
2.2. MyBatis
2.2.1. 创建步骤
会话是单例的,不能跨方法。(单例的原因主要是从数据安全角度出发)
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.Reader;
import java.util.List;public class MyBatisExample {public static void main(String[] args) {SqlSessionFactory sqlSessionFactory = null;try (Reader reader = Resources.getResourceAsReader("mybatis-config.xml")) {sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);} catch (IOException e) {e.printStackTrace();}try (SqlSession session = sqlSessionFactory.openSession()) {// 获取 Mapper 接口的代理对象UserMapper userMapper = session.getMapper(UserMapper.class);// 使用 Mapper 接口的方法执行 SQL 操作1User user = userMapper.selectUserById(1);System.out.println(user);User newUser = new User();newUser.setName("John");newUser.setAge(30);// 使用 Mapper 接口的方法执行 SQL 操作2userMapper.insertUser(newUser);session.commit(); // 提交事务// 使用 Mapper 接口的方法执行 SQL 操作3List<User> users = userMapper.selectAllUsers();for (User u : users) {System.out.println(u);}} catch (Exception e) {e.printStackTrace();}}
}
2.2.2. mybatis-config.xml 配置
UserDao 是接口,在 namespace 必须是完整的路径。
2.2.3. sql 注入
2.2.4. 动态 SQL
if 和 where 是最重要的。
2.2.4.1. if
2.2.4.2. where
where 可以自动选择去掉多余的 and
2.2.4.3. set
set 可以自动去掉多余的 ,
2.2.4.4. foreach 语句
collection 是集合的变量名
。
2.2.4.5. trim 标签
2.2.4.6. choose、when、otherwise
2.2.5. Mybatis 的结果类型(使用 resultMap 和 resultType)
2.2.5.1. resultMap 的详细使用
在 MyBatis 中,resultMap
是一个非常重要的标签,它主要用于复杂的结果映射,特别是当数据库表的列名和 Java 对象的属性名不一致,或者需要映射关联关系(如一对一、一对多等)时。以下是 resultMap
的详细使用方法:
一、基本使用步骤
- 定义
resultMap
:
在 Mapper XML 文件中,首先定义一个resultMap
,指定id
(用于在 SQL 语句中引用该结果映射)和type
(映射结果的 Java 类型)。
<resultMap id="userResultMap" type="com.example.User"><id property="id" column="user_id"/><result property="userName" column="user_name"/><result property="age" column="user_age"/>
</resultMap>
在上述 resultMap
中:
id="userResultMap"
:是结果映射的唯一标识符,后续会在select
语句中使用。type="com.example.User"
:表示映射的 Java 类型是com.example.User
类。<id>
标签:用于映射主键,property
是 Java 对象的属性名,column
是数据库表的列名。<result>
标签:用于映射非主键的普通列,property
是 Java 对象的属性名,column
是数据库表的列名。
- 在
select
语句中使用resultMap
:
将resultMap
应用于select
语句中,而不是resultType
。
<select id="selectUserById" resultMap="userResultMap">select user_id, user_name, user_age from users where user_id = #{id}
</select>
二、处理复杂对象映射
当处理对象之间的关联关系时,resultMap
变得更加重要。
2.2.5.1.1. 一对一关联映射
假设 User
类中有一个 Address
对象作为属性,并且 Address
存储在另一个表中,需要进行一对一关联映射。
- 首先,在
User
类中添加Address
属性:
public class User {private int id;private String userName;private int age;private Address address;// getters and setters
}
- 然后,在 Mapper XML 文件中定义
resultMap
包含association
元素:
<resultMap id="userWithAddressResultMap" type="com.example.User"><id property="id" column="user_id"/><result property="userName" column="user_name"/><result property="age" column="user_age"/><association property="address" javaType="com.example.Address"><id property="id" column="address_id"/><result property="street" column="address_street"/><result property="city" column="address_city"/><result property="zipcode" column="address_zipcode"/></association></resultMap>
- 在
select
语句中使用该resultMap
:
<select id="selectUserWithAddressById" resultMap="userWithAddressResultMap">select u.user_id, u.user_name, u.user_age, a.address_id, a.address_street, a.address_city, a.address_zipcodefrom users ujoin addresses a on u.user_id = a.user_idwhere u.user_id = #{id}
</select>
2.2.5.1.2. 一对多关联映射
假设 User
类中有一个 List<Order>
表示用户的多个订单,需要进行一对多关联映射。
- 在
User
类中添加List<Order>
属性:
public class User {private int id;private String userName;private int age;private List<Order> orders;// getters and setters
}
- 在 Mapper XML 文件中定义
resultMap
包含collection
元素:
<resultMap id="userWithOrdersResultMap" type="com.example.User"><id property="id" column="user_id"/><result property="userName" column="user_name"/><result property="age" column="user_age"/><collection property="orders" ofType="com.example.Order"><id property="id" column="order_id"/><result property="orderName" column="order_name"/><result property="amount" column="order_amount"/></collection></resultMap>
- 在
select
语句中使用该resultMap
:
<select id="selectUserWithOrdersById" resultMap="userWithOrdersResultMap">select u.user_id, u.user_name, u.user_age, o.order_id, o.order_name, o.order_amountfrom users ujoin orders o on u.user_id = o.user_idwhere u.user_id = #{id}
</select>
三、继承和扩展 resultMap
可以使用 extends
属性扩展已有的 resultMap
,以避免重复定义。
<resultMap id="extendedUserResultMap" type="com.example.User" extends="userResultMap"><result property="email" column="user_email"/>
</resultMap>
四、使用 resultMap
的好处
- 灵活映射:可以处理各种复杂的映射情况,包括列名和属性名不匹配、关联对象映射等。
- 代码清晰:将结果映射的逻辑集中在 XML 文件中,使得 SQL 语句和结果映射逻辑清晰,易于维护。
五、注意事项
- 列名和属性名:确保
resultMap
中的column
与 SQL 语句中的列名一致,property
与 Java 对象的属性名一致。 - 关联关系:使用
association
处理一对一关系,使用collection
处理一对多关系,确保关联的对象和集合类型正确。
使用 resultMap
可以让 MyBatis 更好地处理复杂的结果映射,使数据库结果能够准确地映射到 Java 对象及其关联对象或集合,提供了强大而灵活的结果映射机制,特别是在处理对象之间的复杂关系时,它是 MyBatis 实现对象关系映射的关键元素。
2.2.5.2. typeAliases
2.2.6. 查询的 resultType
2.2.7. sql 抽取
3. Spring MVC
SpringMVC 中有默认的编码拦截器
,所以不用管乱码的问题。
3.1. Spring MVC工作原理
3.2. 控制器编写
3.3. 拦截器
3.3.1. 拦截器配置
3.3.1.1. 编写拦截器
3.3.1.2. 配置拦截器
3.3.1.2.1. 基于代码
3.3.1.2.2. 基于 xml
3.3.2. 单个拦截器
3.3.3. 多个拦截器
4. Spring
4.1. Spring 体系结构
4.2. 核心容器
4.3. web
4.4. 数据访问
4.5. 其他模块
4.6. Spring 特征
4.7. IOC
4.8. DI
4.9. Bean配置(重点)
使用ApplicationContext 对象获取 bean:
bean 的配置文件:
4.9.1. xml 的四种方式配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 1.使用property标签--><bean id="book" class="com.bean.Book"><!-- 如果类中有显示构造函数,则必须加上这两行--><constructor-arg index="0" value=""/><constructor-arg index="1" value=""/><property name="name" value="书名0"></property><property name="price" value="2022.12"></property></bean><!-- 2.使用 构造器+index 标签--><bean id="book" class="com.bean.Book"><constructor-arg index="0" value="书名1"/><constructor-arg index="1" value="2024.12"/></bean><!-- 3.使用 构造器+name 标签--><bean id="book" class="com.bean.Book"><constructor-arg name="name" value="书名2"></constructor-arg><constructor-arg name="price" value="2023.12"></constructor-arg></bean><!-- 4.使用 p标签--><bean id="book" class="com.bean.Book" p:name="书名3" p:price="2025.12"><!-- 如果类中有显示构造函数,则必须加上这两行--><constructor-arg index="0" value=""/><constructor-arg index="1" value=""/></bean>
</beans>
4.9.2. 注解配置(重点)
4.9.3. ApplicationContext 的构造方式
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("D:\\code\\4Spring\\ssm_st" +
ClassPathXmlApplicationContext:使用文件名
FileSystemXmlApplicationContext:使用绝对路径
4.9.4. Bean的作用域
4.9.4.1. 多例模式
<bean id="book" class="com.bean.Book" p:name="书名3" p:price="2025.12" scope="prototype"><!-- 如果类中有显示构造函数,则必须加上这两行--><constructor-arg index="0" value=""/><constructor-arg index="1" value=""/></bean>
4.9.4.2. 单例模式
<bean id="book" class="com.bean.Book" p:name="书名3" p:price="2025.12" scope="singleton"><!-- 如果类中有显示构造函数,则必须加上这两行--><constructor-arg index="0" value=""/><constructor-arg index="1" value=""/></bean>
4.9.5. bean 的 xml 装配
4.9.5.1. 手动-ref 标签
<!-- bean的装配--><!-- 1.手动装配--><bean id="cat" class="com.bean.Cat"></bean><bean id="dog" class="com.bean.Dog"></bean><bean id="animal" class="com.bean.Animal"><property name="cat" ref="cat"/><property name="dog" ref="dog"/></bean>
4.9.5.2. 自动-autowire
- 通过名字
<!-- 2.自动装配--><bean id="cat" class="com.bean.Cat"></bean><bean id="dog" class="com.bean.Dog"></bean><bean id="animal" class="com.bean.Animal" autowire="byName"></bean>
- 通过类型
<!-- 2.自动装配--><bean id="cat" class="com.bean.Cat"></bean><bean id="dog" class="com.bean.Dog"></bean><bean id="animal" class="com.bean.Animal" autowire="byType"></bean>
4.9.5.2.1. autowire 属性取值
4.9.5.3. 总结
- 手动需要使用 ref 标签进行引用
- 自动需要通过
名字
或者类型
,间接使用 setter 方法进行装配
4.10. bean 的注解装配
4.10.1. Autowired
- 匹配流程:
-
- 根据类型
- 类型相同,根据名称
- 不用 setter 方法
4.10.2. Qualifier
- 按照名字查
- 不能单独使用
4.10.3. Resource
- 匹配流程:
-
- 根据名称
- 名称相同,根据类型
4.10.4. 注解包扫描装配
4.11. AOP
4.11.1. 相关概念
4.11.2. 基于 xml
<!-- 注册bean--><bean id="userService" class="com.bean.service.UserService"></bean><!-- 注册切面bean--><bean id="myPoint" class="com.pointCut.MyPointCut"></bean><!-- 配置切面--><aop:config><aop:aspect ref="myPoint"><!-- 配置切点--><aop:pointcut id="point" expression="execution(String com.bean.service.UserService.show())"/><!-- 配置通知--><aop:before method="before" pointcut-ref="point"></aop:before><aop:after method="after" pointcut-ref="point"></aop:after></aop:aspect></aop:config>
切点和通知不需要注册 bean。
4.11.3. 基于注解
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;import java.util.Arrays;// 配置类,启用 AOP 支持
@Configuration
@EnableAspectJAutoProxy
@SpringBootApplication
public class AopExampleApplication {public static void main(String[] args) {SpringApplication.run(AopExampleApplication.class, args);}// 定义一个简单的业务服务@Servicepublic static class UserService {public String getUserById(int id) {System.out.println("Executing getUserById with id: " + id);return "User " + id;}public void updateUser(int id, String name) {System.out.println("Updating user with id: " + id + " and name: " + name);}}// 定义自定义注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Loggable {}// 切面类,包含各种通知@Aspect@Componentpublic static class LoggingAspect {// 定义切点,拦截 UserService 类的所有方法@Pointcut("execution(* com.example.AopExampleApplication.UserService.*(..))")public void userServicePointcut() {}// 前置通知@Before("userServicePointcut()")public void beforeAdvice(JoinPoint joinPoint) {System.out.println("Before method execution: " + joinPoint.getSignature().getName());System.out.println("Arguments: " + Arrays.toString(joinPoint.getArgs()));}// 后置通知@After("userServicePointcut()")public void afterAdvice(JoinPoint joinPoint) {System.out.println("After method execution: " + joinPoint.getSignature().getName());}// 环绕通知@Around("userServicePointcut()")public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("Before around advice: " + joinPoint.getSignature().getName());Object result = joinPoint.proceed();System.out.println("After around advice: " + joinPoint.getSignature().getName());return result;}// 返回通知,获取方法返回值@AfterReturning(pointcut = "userServicePointcut()", returning = "result")public void afterReturningAdvice(JoinPoint joinPoint, Object result) {System.out.println("Method returned: " + result);}// 异常通知,处理方法抛出的异常@AfterThrowing(pointcut = "userServicePointcut()", throwing = "e")public void afterThrowingAdvice(JoinPoint joinPoint, Exception e) {System.out.println("Method threw exception: " + e.getMessage());}// 自定义注解作为切点@Pointcut("@annotation(Loggable)")public void loggablePointcut() {}@Before("loggablePointcut()")public void loggableBeforeAdvice(JoinPoint joinPoint) {System.out.println("Before annotated method execution: " + joinPoint.getSignature().getName());}}
}
还需要在 xml 开启配置:
<!-- 基于注解配置切面的xml--><context:component-scan base-package="com.*"></context:component-scan><aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
4.11.4. 环绕通知
@Around("execution(String com.bean.service.UserService.show())")public void around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("====around->执行方法之前的处理====");Object res = pjp.proceed();System.out.println("====around->执行方法之后的处理====");System.out.println("方法执行的返回结果:"+res);}
4.11.5. 返回结果后的通知
@AfterReturning("execution(String com.bean.service.UserService.show())")public void afterReturning() {System.out.println("====afterReturning->执行方法之后的处理====");}
4.11.6. 抛异常后的通知
@AfterThrowing("execution(String com.bean.service.UserService.show())")public void afterThrowing() {System.out.println("====afterThrowing->执行异常之后的处理====");}
4.11.7. 切点表达式
4.12. 事务管理
4.12.1. 编程式事务
4.12.2. 声明式事务
4.12.3. 例子
4.12.4. 注解实现
4.12.5. 传播方式
4.12.6. 隔离级别
5. SSM整合
相关文章:
【期末复习】JavaEE(下)
1. MVC开发模式 1.1. 运行流程 1.2. SpringMVC 核心组件 1.3. 注解解释 2. ORM与MyBatis 2.1. ORM—对象关系映射 2.2. MyBatis 2.2.1. 创建步骤 会话是单例的,不能跨方法。(单例的原因主要是从数据安全角度出发) import org.apache.ibatis…...
HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口
1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…...
《HelloGitHub》第 105 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、…...
适配器模式概述
大体介绍 适配器模式(Adapter Pattern)是一种结构型设计模式,其核心目的是通过提供一个适配器类来使得原本接口不兼容的类可以一起工作。它通过将一个类的接口转换成客户端所期望的接口,使得原本因接口不兼容而无法一起工作的类可…...
跟着问题学3.1——R-CNN模型详解
R-CNN解决什么问题 前面我们介绍了经典的网络模型如AlexNet,VGG,ResNet等,这些模型要解决的任务都是分类问题,即输入一张图片,判断图片上是什么类别的物体,而且一般是单个物体。但实际中,我们会遇到一张图片上有多个或…...
微服务-1 认识微服务
目录 1 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 2 服务拆分原则 2.1 什么时候拆 2.2 怎么拆 2.3 服务调用 3. 服务注册与发现 3.1 注册中心原理 3.2 Nacos注册中心 3.3 服务注册 3.3.1 添加依赖 3.3.2 配置Nacos 3.3.3 启动服务实例 …...
25秋招面试总结
秋招从八月底开始,陆陆续续面试了不少,现在也是已经尘埃落定,在这里做一些总结一些我个人的面试经历 腾讯 腾讯是我最早面试的一家,一开始捞我面试的是数字人民币,安全方向的岗位,属于腾讯金融科技这块。…...
【C#学习——特性】
前言 C#特性学习、主要是用在数据库连接时如何动态创建对应的表,正常开发应该使用如Entity Framework等ORM框架实现自动创建生成。 代码 1、声明特性 [AttributeUsage(AttributeTargets.Property)] public class PrimaryKeyAttribute : Attribute { }[AttributeUs…...
Appscan扫出API成批分配问题解决方案
漏洞条件: 请求json参数不是接收参数的javabean及其父类中的任意属性。 意思就是:我javaben里面没有这个参数 你缺传递过来了 例如我只需要pageNum pageSize 你还传了role:admin 那么这样就有可能导致致特权升级、数据篡改、绕过安全机制 解决方案&am…...
STM32-笔记14-排队控制系统
一、项目需求 1. 红外传感器检测有人通过并计数; 2. 计数值显示在LCD1602 3. 允许通过时,LED1闪烁,蜂鸣器不响,继电器不闭合; 4. 不允许通过时,LED2闪烁,蜂鸣器响,继电器闭合&#…...
【时间之外】IT人求职和创业应知【80】-特殊日子
目录 北京冬季招聘会 OpenAI CEO炮轰马斯克 英伟达推出全新AI芯片B300 莫欢喜,总成空。本周必须要谨行慎言。 感谢所有打开这个页面的朋友。人生不如意,开越野车去撒野,会害了自己,不如提升自己。提升自己的捷径就是学习和思考…...
【GlobalMapper精品教程】090:合并多个面状图斑(以一个镇的多个村不动产宗地为例)
本文讲述在Globalmapper中,合并多个面状图斑的方法,以一个镇的多个村不动产宗地为例(假设一个镇的多个村的不动产宗地数据是分别存储在不同的村子矢量数据中,此时需要合并),点状和线状的操作方法类似。 文章目录 一、加载数据二、数据分析三、合并图斑四、注意事项一、加…...
ffmpeg之播放一个yuv视频
播放YUV视频的步骤 初始化SDL库: 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。操作:调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 创建窗口用于显示YUV视频: 目的:…...
在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档
软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项,系统需要java环境,确认系统有java环境,根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包,解压,将runt…...
总结一下本次使用docker部署遇到的问题
1.Invalid bound statement (not found):异常 解决:原因是Dao层与动态Sql映射文件名字没有对应 2.element-plus的upload组件文件上传不成功 因为是直接请求后端不是统一的api前缀,所以nginx需要额外配置跨域 3.文件上传问题 描述:当时文…...
c#泛型学习
使用泛型的优点:使用泛型的好处包括类型安全、代码重用和性能优化。 在C#中,泛型是一种强大的工具,它允许你在编写类、接口、方法和委托时定义类型参数。这些类型参数在实例化泛型类型或调用泛型方法时被具体的类型所替代。 1. 泛型类 泛型…...
十二月第五周python
第一个程序,熟悉转换器,把加法计算器变成exe# // 1,制作加法计算器, # 输入两个数字得到相加结果并输出aint(input("输入数字:"))#int()是把输入的内容转换成整数, bint(input("输入数字:&…...
Unity中如何修改Sprite的渲染网格
首先打开SpriteEditor 选择Custom OutLine,点击Genrate 则在图片边缘会出现边缘线,调整白色小方块可以调整边缘 调整后,Sprite就会按照调整后的网格渲染了。 如何在UI中使用? 只要在UI的Image组件中选择Use Sprite Mesh 即可 结果࿱…...
修复OpenHarmony系统相机应用横屏拍照按钮点不到的问题
适配OpenHarmony系统相机应用横屏UI, 相关pr: https://gitee.com/openharmony/applications_camera/pulls/233/files 适配效果 如何安装 编译好的hap提供在附件中 1.预置在源码,随固件安装 2.安装hap hdc shell "mount -o remount,rw /"…...
keepass实现google自输入_SSH_TELNET_RDP联动
涉及到的是使用开源密码管理工具KeePass结合特定插件实现自动化密码填充的功能,特别是在谷歌浏览器中的应用。KeePass是一款强大的密码管理软件,它允许用户安全地存储各种账号的用户名和密码,并通过加密保护这些敏感信息。 1. keepass安装及配…...
电脑缺失sxs.dll文件要怎么解决?
一、文件丢失问题:以sxs.dll文件缺失为例 当你在运行某个程序时,如果系统提示“找不到sxs.dll文件”,这意味着你的系统中缺少了一个名为sxs.dll的动态链接库文件。sxs.dll文件通常与Microsoft的.NET Framework相关,是许多应用程序…...
Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架
以下是一个使用Python实现机器学习驱动的智能医疗预测模型系统的示例代码框架。这个框架涵盖了数据收集(爬虫)、数据清洗和预处理、模型构建(决策树和神经网络)以及模型评估的主要步骤。 1. 数据收集(爬虫)…...
Vue3生态: 使用Vite进行高速开发
Vue3生态: 使用Vite进行高速开发 一、Vite概述 什么是Vite 法语意为 "快速")是一个为现代浏览器原生开发提供服务的构建工具。它使用ES模块作为原生浏览器加载工具,利用浏览器去解析 import 的方式加载文件,极大地加快了应用的启动…...
Android MQTT关于断开连接disconnect报错原因
最近项目遇到一个需求,就是在登录状态的时候。才能接收到消息。所有我在上线,下线状态的时候。做了MQTT断开和连接的动作。然后就是发生了。我们标题的这关键点了。直接报错了。报错的内容如下: MqttAndroidClient unregisterRecevicer afte…...
YOLO11全解析:从原理到实战,全流程体验下一代目标检测
前言 一、模型介绍 二、网络结构 1.主干网络(Backbone) 2.颈部网络(Neck) 3.头部网络(Head) 三、算法改进 1.增强的特征提取 2.优化的效率和速度 3.更高的准确性与更少的参数 4.环境适应性强 5.…...
python中函数的用法总结(二阶段)
话接上回,继续讲下函数的用法 10. 函数的注解(Function Annotations) Python 3 引入了函数注解,允许你在函数定义时给参数和返回值添加注解。注解并不影响函数的实际行为,它们更多地用于代码的可读性、文档生成以及静…...
1082 射击比赛
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。 输入格式:…...
模型工作流:自动化的模型内部三角面剔除
1. 关于自动减面 1.1 自动减面的重要性及现状 三维模型是游戏、三维家居设计、数字孪生、VR/AR等几乎所有三维软件的核心资产,模型的质量和性能从根本上决定了三维软件的画面效果和渲染性能。其中,模型减面工作是同时关乎质量和性能这两个要素的重要工…...
力扣题目解析--两数相除
题目 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.…...
Python PyMupdf 去除PDF文档中Watermark标识水印
通过PDF阅读或编辑工具,可在PDF中加入Watermark标识的PDF水印,如下图: 该类水印特点 这类型的水印,会在文件的字节流中出现/Watermark、EMC等标识,那么,我们可以通过改变文件字节内容,清理掉…...
嵌入式AI STM32部署卷积神经网络的魔法棒
基于STM32部署卷积神经网络控制设备方案-AI项目-STM32部署卷积神经网络方案-红外信号复制方案-轨迹识别 项目包含下述内容 硬件部分、PCB制板、BOM表文件等等 (Hardware)外壳、3D打印文件 (3D_print)软件程序、用于电子法棒的软件程序 AI Keil等等(Software)QT上位机动作识别…...
电路元件与电路基本定理
电流、电压和电功率 电流 1 定义: 带电质点的有序运动形成电流 。 单位时间内通过导体横截面的电量定义为电流强度, 简称电流,用符号 i 表示,其数学表达式为:(i单位:安培(A&#x…...
【蓝桥杯——物联网设计与开发】系列前言
前言 本系列博客是博主为准备2024年第十五届蓝桥杯大赛物联网设计与开发赛道而写,经过4个月学习备战,最终获得全国一等奖。 从第十六届蓝桥杯大赛开始,物联网赛道更换竞赛实训平台。之前的博客,可以借鉴代码思想,但引脚…...
Linux -- 从抢票逻辑理解线程互斥
目录 抢票逻辑代码: thread.hpp thread.cc 运行结果: 为什么票会抢为负数? 概念前言 临界资源 临界区 原子性 数据不一致 为什么数据不一致? 互斥 概念 pthread_mutex_init(初始化互斥锁) p…...
免费干净!付费软件的平替款!
今天给大家介绍一个非常好用的电脑录屏软件,完全没有广告界面,非常的干净简洁。 电脑录屏 无广告的录屏软件 这个软件不需要安装,打开就能看到界面直接使用了。 软件可以全屏录制,也可以自定义尺寸进行录制。 录制的声音选择也非…...
Mybatis插件better-mybatis-generator的下载与使用
1.下载 找到设置 插件 搜索better-mybatis-generator 下载并且重启IDEA 2.连接数据库 点击测试连接 连接成功如下图 3.使用插件 选择对应的表 右击选择 注意:mysql8.0驱动一定要勾上mysql_8 其他地方不要动 然后实体类 mapper xml就都生成好了 mapper里有默认增删…...
【测试】接口测试
长期更新好文,建议关注收藏! 目录 接口规范接口测试用例设计postmanRequests 复习HTTP超文本传输协议 复习cookiesession 实现方式 1.工具 如postman ,JMeter(后者功能更全) 2.代码 pythonrequests / javahttpclient【高级】 接…...
靶机系列|VULNHUB|DC-2
免责声明: 笔记只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 泷羽sec官网:https://longyusec.com/ 泷羽sec B站地址:https://s…...
上手教程:使用Terraform打造弹性VPC架构
最近Akamai发布的虚拟专用云(VPC)功能提供了一种隔离的网络,让云资源可以用私密的方式进行通信。 关于Akamai VPC功能,最棒的地方在于它有着极高的灵活性。用户可以通过Cloud Manager、开发人员工具(如CLI)…...
详解VHDL如何编写Testbench
1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型,它为所测试的元件提供了激励信号,可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中,也可以从…...
Kafka为什么要放弃Zookeeper
1.Kafka简介 Apache Kafka最早是由Linkedin公司开发,后来捐献给了Apack基金会。 Kafka被官方定义为分布式流式处理平台,因为具备高吞吐、可持久化、可水平扩展等特性而被广泛使用。目前Kafka具体如下功能: 消息队列,Kafka具有系统解耦、流…...
python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况
目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了,如果这个不知道,就可以…...
go语言的成神之路-筑基篇-gin常用功能
第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能: 使用场景: 可能的错误: 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…...
K8S中,pod的创建流程
kubelet创建pod流程 流程图 OCI(Open Container Initiative)是一个由docker社区发起的项目,Docker、containerd CNI(Container Network Interface)网络配置:为容器分配IP地址、配置网络接口、设置路由 C…...
Windows系统提示synsoacc.dll文件报错要怎么解决?
一、文件丢失问题:深度剖析与应对策略 文件丢失是电脑运行时常见的问题之一。它可能由多种原因引起,如硬盘故障、病毒攻击、不当的文件操作等。当Windows系统提示synsoacc.dll丢失时,通常意味着该文件对于当前正在运行的程序或系统服务至关重…...
【从0带做】基于Springboot3+Vue3的高校食堂点餐系统
大家好,我是武哥,最近给大家手撸了一个基于SpringBoot3Vue3的高校食堂点餐系统,可用于毕业设计、课程设计、练手学习,系统全部原创,如有遇到网上抄袭站长的,欢迎联系博主~ 项目演示视频和教程视频 https:…...
C语言-基因序列转换独热码(one-hot code)
1.题目要求 (语言: C)在生物信息学家处理基因序列时,经常需要将基因序列转化为独热码,在英文文献中称做 one-hot code, 直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制。 如基因序列有四种状态&…...
git在idea中操作频繁出现让输入token或用户密码,可以使用凭证助手(使用git命令时输入的用户密码即可) use credential helper
1、打开 idea 设置,找到 git 路径 File | Settings | Version Control | Git 2、勾选 Use credential helper 即可...
《机器视觉:开启智能新时代》
《机器视觉:开启智能新时代》 一、机器视觉:工业之眼的崛起二、核心组件:构建精准视觉系统(一)光源:照亮视界的画笔(二)镜头:聚焦精准的慧眼(三)相…...
C#冒泡排序
一、冒泡排序基本原理 冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以一个简单的整数数…...