SPring Boot整合第三方框架
springboot整合第三方框架
1. 整合mybatis
1.1引入依赖——pom.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>sbAndMybatis</artifactId><version>0.0.1-SNAPSHOT</version><name>sbAndMybatis</name><description>sbAndMybatis</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis和springboot的整合的依赖--><dependency><groupId>repMaven.org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency></dependencies><build><plugins><plugin><groupId>repMaven.org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.2.5</version><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>
spring-boot-starter-parent的版本为2.3.12,因为jdk版本为8,只有17及以上版本的jdk才可以用3.0以上的
mybatis-spring-boot-starter的版本依赖于上述的版本,为3.0的话会出现兼容问题,采用2.1.4
spring-boot-maven-plugin自动生成的会飘红,改为使用本地仓库的插件
1.2 配置文件
spring.application.name=sbAndMybatis
#数据源的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zmq?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456#配置mybatis映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
在该文件中可以配置关于数据库的相关信息,也可以指定端口号和上下文路径
1.3 在entiry包下生成实体类User
@Data
public class User {private Integer id;private String username;private String password;
}
1.4 在dao包下生成接口UserDao
@Repository
public interface UserDao {//添加public int insert(User user);//删除public int del(Integer id);//修改public int update(User user);//查询全部public List<User> selectAll();//根据id查询public User selectById(Integer id);
}
1.5 在resources目录下生成mapper
在该文件下生成UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zmq.dao.UserDao"><!--resultMap映射--><resultMap id="myMap" type="com.zmq.entity.User" autoMapping="true"><id property="id" column="id"/><result property="username" column="u_name"/></resultMap><!--添加新用户--><insert id="add">insert into user values (null,#{username},#{password})</insert><insert id="insert">insert into user values (null,#{username},#{password})</insert><update id="update">update user set u_name=#{username},password=#{password} where id=#{id}</update><delete id="del">delete from user where id=#{id}</delete><!--根据姓名和密码查询--><select id="getByOthers" resultMap="myMap">select * from user where u_name=#{username} and password=#{password}</select><select id="selectAll" resultMap="myMap">select * from user</select><select id="selectById" resultMap="myMap">select * from user where id=#{id}</select>
</mapper>
1.6 在vo包下生成R类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {private Integer code;private String msg;private Object object;
}
该类用于统一返回信息的类型
1.7 在service包下生成UserService业务接口
public interface UserService {public R insert(User user);public R del(Integer id);public R update(User user);public R selectAll();public R selectById(Integer id);
}
1.8 在service包下生成impl包
在该包下生成UserServiceImpl类,并实现UserService接口
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic R insert(User user) {int insert = userDao.insert(user);if(insert>0){return new R(200,"添加成功!",null);}else {return new R(500,"添加失败!",null);}}@Overridepublic R del(Integer id) {int del = userDao.del(id);if(del>0) {return new R(200,"删除成功!",null);}else {return new R(500,"删除失败!",null);}}@Overridepublic R update(User user) {int update = userDao.update(user);if(update>0){return new R(200,"修改成功!",null);}else {return new R(500,"修改失败!",null);}}@Overridepublic R selectAll() {List<User> list = userDao.selectAll();if(list!=null){return new R(200,"查询成功!",list);}else {return new R(500,"查询失败",null);}}@Overridepublic R selectById(Integer id) {User user = userDao.selectById(id);if(user!=null){return new R(200,"查询成功",user);}else {return new R(500,"查询失败!",null);}}
}
1.9 在controller层生成UerController类
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;//添加@PostMapping("/insert")public R insert(@RequestBody User user){return userService.insert(user);}//删除@DeleteMapping("/delete")public R delete(Integer id){return userService.del(id);}//修改@PutMapping("/update")public R update(@RequestBody User user){return userService.update(user);}//查询全部@GetMapping("/selectAll")public R selectAll(){return userService.selectAll();}//根据id查询@GetMapping("/selectById")public R selectById(Integer id){return userService.selectById(id);}
}
1.10 在主类上添加注入dao层的注解
@SpringBootApplication
//为指定的dao生成代理实现类
@MapperScan(basePackages = "com.zmq.dao")
public class SbAndMybatisApplication {public static void main(String[] args) {SpringApplication.run(SbAndMybatisApplication.class, args);}}
1.11 报错
- 报错1

没有为dao生成代理实现类

- 报错2

mybatis和springboot整合的版本太高
2. 整合swagger2
2.1 什么是swagger2
swagger2就是在线生成接口文档的,而且还可以对接口进行测试
Swagger2是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的web服务,现在我们使用spring boot整合,作用:
1. 在线生成接口文档
2. 接口的功能测试
Restful风格:在controller层的注解使用:
添加:@PostMapping
删除:@DeleteMapping
修改:@PutMapping
查询:@GetMapping
2.2 为什么需要使用swagger2
因为项目为前后端分离,靠接口调用连接,就需要为每个接口生成接口文档,而手写word文档实时性差

2.3 如何使用
- 引入依赖
<!--引入swagger2依赖--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>1.9.1.RELEASE</version></dependency><!--图形化依赖--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency>
考虑版本不兼容问题
- 创建swagger2配置类
@Configuration
public class Swagger2Config {//创建swagger实例@Beanpublic Docket docket() {Docket docket=new Docket(DocumentationType.SWAGGER_2).apiInfo(getInfo())//设置接口文档的信息.select().apis(RequestHandlerSelectors.basePackage("com.zmq.controller")) //指定为那些路径下得到类生成接口文档.build();return docket;}private ApiInfo getInfo(){Contact DEFAULT_CONTACT = new Contact("ldw", "http://www.ldw.com", "110@qq.com");ApiInfo DEFAULT = new ApiInfo("用户管理系统API", "该系统中的接口专门操作用户的", "v1.0", "http://www.baidu.com",DEFAULT_CONTACT, "dong", "http://www.jd.com", new ArrayList<VendorExtension>());return DEFAULT;}
}
@Configuration:Spring注解:声明该类为配置类
@Bean注解:用在方法上,必须用在配置类里面,将当前方法的返回值对象存入容器中
Docket对象说明:
- 构造方法:需要一个DocumentationType类对象,这里选择SWAGGER_2


Docket对象说明:
- apiInfo():用于配置swagger 信息,设置接口文档的信息
这个类对象仅有如下属性,且只有一个构造方法。
- 在主类上开启swagger的注解驱动
@SpringBootApplication
@MapperScan(basePackages = "com.zmq.dao")
//开启文档注解
@EnableSwagger2
public class SbAndMybatisWorkApplication {public static void main(String[] args) {SpringApplication.run(SbAndMybatisWorkApplication.class, args);}}
@EnableSwagger2:开启swagger2的注解驱动
- 访问swagger接口文档
第一种:http://localhost:8080/swagger-ui.html
第二种:http://localhost:8080/doc.html
2.4 swagger2常用注解
- 对controller层的三个注解
@Api(tags=“”):使用在接口类上,对接口类的说明
@ApiOperation(value=“”):接口方法上,对接口方法的说明
@ApiImplicitParams(
@ApiImplicitParam(name=“参数名”,value=“参数说明”,required=“是否必写”,dataType=“数据类型”)
):接口方法所有参数的概述
@RestController
@RequestMapping("/user")
@Api(tags = "用户管理")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/insert")@ApiOperation(value = "添加用户")@ApiImplicitParams(@ApiImplicitParam(name = "user" ,value="用户对象",required = true,dataType = "User"))public R insert(@RequestBody User user){return userService.isnert(user);}@GetMapping("/selectAll")public R selectAll(){return userService.selectAll();}
}
- 对实体类的两个注解
@ApiModel(value=“”):使用在实体类上,对实体类的说明
@ApiModelProperty(value=“”):使用在实体类属性上,对属性的说明
@Data
@ApiModel(value = "用户实体类")
public class User {private Integer id;@ApiModelProperty(value = "用户姓名")private String username;@ApiModelProperty(value = "用户密码")private String password;
}
3. 整合定时器
在指定的时间执行相应的业务代码。场景:oss修改照片时,存在一个冗余照片。定时删除冗余照片
比如:下单,30分钟未支付就取消订单
- 引入定时器依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>
- 创建一个定时业务类
@Configuration
public class QuartzConfig {//定时业务代码//定义定时规则@Scheduled(cron = "0/5 * * * * ?")public void show(){System.out.println("*******************");//发生短信 或者删除oss冗余文件 或者取消订单}
}
cron:表达式
- 在主类上开启定时器注解驱动
@SpringBootApplication
@MapperScan(basePackages = "com.zmq.dao")
//开启文档注解
@EnableSwagger2
//开启定时器注解
@EnableScheduling
public class SbAndMybatisWorkApplication {public static void main(String[] args) {SpringApplication.run(SbAndMybatisWorkApplication.class, args);}
}
@EnableScheduling:开启定时器注解驱动
在线生成cron表达式:https://cron.ciding.cc/
4. 整合mybatis-plus
4.1 概述
MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强,不做改变,为简化开发、提高效率而生
4.2 特点
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作。
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询。
- 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
- 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
4.3 使用
- 引入依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version>
</dependency>
若因为MyBatis-Plus和MyBatis的依赖版本问题而报错,可以将MyBatis的依赖删除,因为MyBatis-Plus中包含MyBatis的依赖,且保证了版本的一致性
- 配置文件
spring.application.name=sbAndMPspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zmq1?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456#??mybatis???????
mybatis.mapper-locations=classpath:mapper/*.xml#配置日志--sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- 实体类
@TableName(value ="user")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {/*** 主键ID*/@TableIdprivate Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮箱*/private String email;@TableField(exist = false)private static final long serialVersionUID = 1L;
}
- mapper层
@Repository
public interface UserMapper extends BaseMapper<User> {
}
- 在主类上为mapper生成代理实现类
//生成代理实现类
@MapperScan("com.zmq.mapper")
public class SbAndMpApplication {public static void main(String[] args) { SpringApplication.run(SbAndMpApplication.class, args);}
}
测试:
- 根据id查询
@SpringBootTest
class Qy174SpringbootMpApplicationTests {@Autowiredprivate UserMapper userMapper;/*** 如果出现实体类和表名不一致。@TableName* 如果出现实体类属性名和字段名不一致。@TableField*/@Testvoid testSelectById() {User user = userMapper.selectById(1);System.out.println(user);}}
- 添加
@Testvoid testInsert(){//添加一条记录
// User user=new User(null,"qqq",19,"123@qq.com");
// //添加--把生成的主键也会赋值给对象中主键属性
// System.out.println("填进去:"+user);
// int row = userMapper.insert(user);
// System.out.println(row);
// System.out.println("填进去后:"+user);//批量添加
// List<User> list=new ArrayList<>();
// list.add(new User(null,"aa",18,"123@qq.com"));
// list.add(new User(null,"aaa",19,"223@qq.com"));
// list.add(new User(null,"vb",19,"323@qq.com"));
// list.add(new User(null,"bb",17,"323@qq.com"));
// List<BatchResult> insert = userMapper.insert(list);//如果有id则修改 没有则添加User user=new User(2,"sss",19,"123@qq.com");userMapper.insertOrUpdate(user);}
相关文章:
SPring Boot整合第三方框架
springboot整合第三方框架 1. 整合mybatis 1.1引入依赖——pom.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…...
读取sqlserver数据库中varbinary(max)类型的内容,并将图片信息显示在前端页面
目录 1.varbinary(max)的说明 2.图片显示 3.总结 1.varbinary(max)的说明 varbinary(max) 是一种SQL Server数据库字段类型,用于存储二进制数据,可以存储最大长度的二进制数据。以下是关于 varbinary(max) 的说明: 存储容量: 可以存储最大…...
orcad导出pdf 缺少title block
在OrCAD中导出PDF时没有Title Block 最后确认问题在这里: 要勾选上Title Block Visible下面的print...
XML 验证器:确保数据完整性和准确性的关键工具
XML 验证器:确保数据完整性和准确性的关键工具 引言 在当今数字化时代,数据的有效管理和交换至关重要。XML(可扩展标记语言)作为一种用于存储和传输数据的语言,广泛用于各种应用程序和系统之间。为确保XML数据的完整…...
opencv学习:图像视频的读取截取部分图像数据颜色通道提取合并颜色通道边界填充数值计算图像融合
一、计算机眼中的图像 1.图像操作 构成像素点的数字在0~255之间 RGB叫做图像的颜色通道 h500,w500 2.灰度图像 3. 彩色图像 4.图像的读取 5.视频的读取 cv2.VideoCapture()--在OpenCV中,可以使用VideoCapture来读取视频文件,或是摄像头数…...
数据结构——单链表详解(超详细)(2)
前言: 上一篇文章小编简单的介绍了单链表的概念和一些函数的实现,不过为了保证文章的简洁,小编把它分成了两篇来写,这一篇小编紧接上一篇文章继续写单链表函数功能的实现: 目录: 1.单链表剩余函数的编写 1.…...
类和对象(2
*续上文中的运算符重载 4 重载运算符时,有前置和后置的,运算符重载的函数名都是operator, 无法很好区分 所以c规定,后置重载时,增加一个int形参 与前置做区分 5 重载<<和>>时需要重载为全局函数, 因为重载为成员函数时, this指针默认抢占了第一个形参位, 第一个形参…...
AcWing 668. 游戏时间2
读取四个整数 A,B,C,D𝐴,𝐵,𝐶,𝐷,用来表示游戏的开始时间和结束时间。 其中 A𝐴 和 B𝐵 为开始时刻的小时和分钟数,C𝐶 和 D𝐷 为结束时刻的小时和分钟数。…...
AI发展下的伦理挑战,应当如何应对?
针对人工智能(AI)发展中面临的伦理挑战,构建一个全面、有效的治理体系至关重要。以下是对三大关键方向——隐私保护、算法公正与透明度、深度伪造管控——的深入探讨与具体实践方案: 方向一:构建可靠的AI隐私保护机制…...
Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别
目录 引言: 正文: 一、Serial GC工作原理 年轻代垃圾回收(Minor GC): 老年代垃圾回收(Major GC或Full GC): 二、年轻代和老年代的区别 年轻代(Young Generation&a…...
网络安全高级工具软件100套
1、 Nessus:最好的UNIX漏洞扫描工具 Nessus 是最好的免费网络漏洞扫描器,它可以运行于几乎所有的UNIX平台之上。它不止永久升级,还免费提供多达11000种插件(但需要注册并接受EULA-acceptance–终端用户授权协议)。 它…...
Ubuntu 添加gcc头文件搜索路径
对个人用户生效 sudo vim ~/.bashrc在该文件末尾添加 #gcc C_INCLUDE_PATH$C_INCLUDE_PATH:your_path export C_INCLUDE_PATH #g CPLUS_INCLUDE_PATH$CPLUS_INCLUDE_PATH:your_path export CPLUS_INCLUDE_PATH最后,重启终端即可生效 可用以下命令查看搜索路径 ec…...
c++写数据结构进入文件
以下定义一个数据结构 struct SData {std::string url;int number;std::string memo; };写入文件 void StorageDataToFile(const std::string& filename, const SData& data) {std::ofstream outFile(filename);if (outFile.is_open()) {// 使用std::stringstream格式…...
Java实验4
实验内容 考试题 要求在一个界面内至少显示5道选择题,每道题4个选项。题目从数据库读取。表结构自定义。 另有2个命令按钮,分别为“重新答题”(全部选项及正确答题数清空)和“提交”(计算),在…...
优化 Java 数据结构选择与使用,提升程序性能与可维护性
优化 Java 数据结构选择与使用,提升程序性能与可维护性 引言 在软件开发中,数据结构的选择是影响程序性能、内存使用以及代码可维护性的关键因素之一。Java 作为一门广泛使用的编程语言,提供了丰富的内置数据结构,如数组、链表、…...
华为USG6000V防火墙安全策略用户认证
目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1🤣防火墙FW1web服务配置 2.网络配置 要求1:DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问 要求2:生产区不…...
Windows 应急响应手册v1.2 -百度网盘下载
家好,《Windows 应急响应手册 v1.2》 发布啦! 本次是一个大更新,解决了两个大问题,添加了4个大的事件处置流程以及一些更新,下载链接在文末 两个大问题是: Windows 平台的 Adobe acrobat DC 、Firefox 浏…...
Billu_b0x靶机
信息收集 使用arp-scan 生成网络接口地址来查看ip 输入命令: arp-scan -l 可以查看到我们的目标ip为192.168.187.153 nmap扫描端口开放 输入命令: nmap -min-rate 10000 -p- 192.168.187.153 可以看到开放2个端口 nmap扫描端口信息 输入命令&…...
GitHub+Picgo图片上传
Picgo下载,修改安装路径,其他一路下一步! 地址 注册GitHub,注册过程不详细展开,不会的百度一下 地址 新建GitHub仓库存放图片 ——————————————————————————————————————————…...
springboot的事务管理
在yml配置文件中添加以下:logging.level.org.springframework.jdbc.support.JdbcTransactionManagerdebug...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
