搞定mysql的 行转列(7种方法) 和 列转行

一、行转列 1、使用case…when…then 2、使用SUM(IF()) 生成列 3、使用SUM(IF()) 生成列 + WITH ROLLUP 生成汇总行 4、使用SUM(IF()) 生成列,直接生成汇总结果,不再利用子查询 5、使用SUM(IF()) 生成列 + UNION 生成汇总行,并利用 IFNULL将汇总行标题显示为 Total 6、动态查询列值不确定的情况 7、合并字段显示:group_concat() 二、列转行 ———————————————— 一、行转列 即将原本同一列下多行的不同内容作为多个字段,输出对应内容。 建表语句 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT '用户id', subject VARCHAR(20) COMMENT '科目', score DOUBLE COMMENT '成绩', PRIMARY KEY(id) )ENGINE = INNODB DEFAULT CHARSET = utf8; 插入数据 INSERT INTO tb_score(userid,subject,score) VALUES ('001','语文',90); INSERT INTO tb_score(userid,subject,score) VALUES ('001','数学',92); INSERT INTO tb_score(userid,subject,score) VALUES ('001','英语',80); INSERT INTO tb_score(userid,subject,score) VALUES ('002','语文',88); INSERT INTO tb_score(userid,subject,score) VALUES ('002','数学',90); INSERT INTO tb_score(userid,subject,score) VALUES ('002','英语',75.

一文通透位置编码:从标准位置编码、旋转位置编码RoPE到ALiBi、LLaMA 2 Long

前言 关于位置编码和RoPE 应用广泛,是很多大模型使用的一种位置编码方式,包括且不限于LLaMA、baichuan、ChatGLM等等我之前在本博客中的另外两篇文章中有阐述过(一篇是关于LLaMA解读的,一篇是关于transformer从零实现的),但自觉写的不是特别透彻好懂 再后来在我参与主讲的类ChatGPT微调实战课中也有讲过,但有些学员依然反馈RoPE不是特别好理解 考虑到只要花足够多的时间 心思 投入,没有写不清楚的,讲课更是如此,故为彻底解决这个位置编码/RoPE的问题,我把另外两篇文章中关于位置编码的内容抽取出来,并不断深入、扩展、深入,比如其中最关键的改进是两轮改进,一个12.16那天,一个12.21那天 12.16那天 小的改进是把“1.1 标准位置编码的起源”中,关于i、2i、2i+1的一系列计算结果用表格规整了下 如此,相比之前把一堆数字一堆,表格更加清晰、一目了然 大的改进是把“3.1.1 第一种形式的推导(通俗易懂版)”的细节重新梳理了以下,以更加一目了然、一看即懂,可能是全网关于RoPE最通俗细致的推导12.21那天 把RoPE的本质给强调出来 最终成为本文 第一部分 transformer原始论文中的标准位置编码 如此篇文章《Transformer通俗笔记:从Word2Vec、Seq2Seq逐步理解到GPT、BERT》所述,RNN的结构包含了序列的时序信息,而Transformer却完全把时序信息给丢掉了,比如“他欠我100万”,和“我欠他100万”,两者的意思千差万别,故为了解决时序的问题,Transformer的作者用了一个绝妙的办法:位置编码(Positional Encoding) 1.1 标准位置编码的起源 即将每个位置编号,从而每个编号对应一个向量,最终通过结合位置向量和词向量,作为输入embedding,就给每个词都引入了一定的位置信息,这样Attention就可以分辨出不同位置的词了,具体怎么做呢? 如果简单粗暴的话,直接给每个向量分配一个数字,比如1到1000之间也可以用one-hot编码表示位置 transformer论文中作者通过sin函数和cos函数交替来创建 positional encoding,其计算positional encoding的公式如下 其中,pos相当于是每个token在整个序列中的位置,相当于是0, 1, 2, 3...(看序列长度是多大,比如10,比如100),代表位置向量的维度(也是词embedding的维度,transformer论文中设置的512维) 至于是embedding向量的位置下标对2求商并取整(可用双斜杠表示整数除法,即求商并取整),它的取值范围是,比如 位置向量的第多少维 (0 2 4等偶数维用sin函数计算)0 1 2 3 4 56....510511 相当于 是指向量维度中的偶数维,即第0维、第2维、第4维...,第510维,用sin函数计算 是向量维度中的奇数维,即第1维、第3维、第5维..,第511维,用cos函数计算 不要小看transformer的这个位置编码,不少做NLP多年的人也不一定对其中的细节有多深入,而网上大部分文章谈到这个位置编码时基本都是千篇一律、泛泛而谈,很少有深入,故本文还是细致探讨下 1.2 标准位置编码的示例:多图多举例 考虑到一图胜千言 一例胜万语,举个例子,当我们要编码「我 爱 你」的位置向量,假定每个token都具备512维,如果位置下标从0开始时,则根据位置编码的计算公式可得『且为让每个读者阅读本文时一目了然,我计算了每个单词对应的位置编码示例(在此之前,这些示例在其他地方基本没有)』 当对上的单词「我」进行位置编码时,它本身的维度有512维 当对上的单词「爱」进行位置编码时,它本身的维度有512维 然后再叠加上embedding向量,可得 当对上的单词「你」进行位置编码时,它本身的维度有512维 .... 最终得到的可视化效果如下图所示 1.3 标准位置编码的coding实现 代码实现如下 “”“位置编码的实现,调用父类nn.Module的构造函数”“” class PositionalEncoding(nn.Module): def __init__(self, d_model, dropout, max_len=5000): super(PositionalEncoding, self).

AIGC面经大全(持续更新)

目录 DDPM算法原理部分: DDIM算法原理部分: ⾼阶采样⽅案: 特征编码篇: Stable Diffusion篇: SDXL篇: ⼤模型微调篇: 控制模型篇: 适配器篇: DDPM算法原理部分: 简述DDPM的算法流程: 初始化:从带噪声的图像开始。正向扩散:逐步向数据添加高斯噪声,直到数据完全转化为无结构的噪声。反向去噪:通过模型预测并逐渐去掉每一步加入的噪声,还原得到无噪声的图像。训练:使用反向传播算法更新模型参数,以最小化正向和反向过程之间的差异。测试:对新的高噪声图像应用训练好的模型进行去噪。 实现DDPM是否需要什么条件: 马尔可夫链:DDPM使用马尔可夫链来描述数据的扩散过程。马尔可夫链是一个随机过程,具有无记忆性,即在给定当前状态的情况下,未来的状态只依赖于当前状态。微小变化:DDPM通过逐步添加微小的高斯噪声来扩散数据。这些微小的变化是在数据中引入随机性的关键步骤。高斯噪声变化:DDPM使用高斯噪声来模拟数据的扩散过程。高斯噪声是一种常见的随机噪声,也称为正态分布噪声。 为什么DDPM加噪声的幅度是不⼀致的? 前期加噪少是为了保持数据结构的完整性,后期加噪多是为了加速扩散过程,使得模型能够更快地从噪声中恢复出清晰的数据。 DDPM预测噪声还是预测当前分布? 预测噪声,预测分布只是中间过程 DDIM算法原理部分: DDIM是怎么实现加速采样的? DDIM通过保证DDPM的三项前向条件不变:前向⾼斯噪声+⻢尔可夫链,实现逆向递推公式优化,减少逆向推理步骤 DDIM是不是确定性⽣成,为什么 是确定性⽣成。因为在逆向去噪声过程中,DDIM的逆推公式,将随机噪声的部分置为0 Score-Based-diffusion-model 提供了⼀种解释扩散模型的等价⽅式,其中降噪过程可以看作是沿着分数(梯度)前进 ⾼阶采样⽅案: 是否了解DPM++等加速采样⽅案 通过ODE对扩散模型进⾏建模,通过解析解的形式解构扩散模型求解步骤 特征编码篇: 介绍⼀下CLIP编码: 构建⼤规模的图像-⽂本数据构建(⽂本,图像)pair对,在其他下游⼦任务中取得极⾼的zero-shot指标 CLIP编码特征的优缺点 优点:泛化性能强,特征在同⼀空间下衡量,模型简单不需要额外训练。 缺陷:⽂本描述简单“A photo of a xxx”,图⽂理解能⼒偏弱 介绍⼀下BLIP/BLIP2的原理 BLIP:通过多路损失函数,以及图像分快理解策略等算法,构建⾼质量的图像理解模型。 BLIP2:在BLIP基础上,利用Q-Former构建图像与⼤语⾔模型之间的桥梁,充分利⽤⼤语⾔模型⾃身的预训练能⼒ 为什么BLIP/BLIP2的特征没法直接⽤ 因为受到⽂图⼀致性等隐形损失约束,相关特征不再同⼀个特征空间下(⽆法直接⽤距离衡量⽂图特征的相似性)。因此⽆法像CLIP⼀样“直接”接⼊模型中使⽤ Stable Diffusion篇: Stable Diffusion 的核⼼优化是什么? 通过VAE将特征映射到Latent Space,⼤幅减少运算量的同时还能保证⽣成质量。 通过Unet实现对⽣成内容的引导 Stable Diffusion是怎么训练的? 从训练集中选取一张加噪过的图片和噪声强度输入unet,让unet预测噪声图计算和真正的噪声图之间的误差通过反向传播更新unet的参数 VAE为什么会导致图像变模糊 VAE编解码整体是⼀个有损过程,可以选择减少损失,⽐如优化模型结构,提升采样效率等。完全不减少损失的⽅案就是原图反贴 介绍⼀下SD,Dall-E2两者的异同 Dalle2通过自回归的方式逐个预测像素点,最终生成符合描述的图像。 SD加⼊了Latent-Space(⼤幅降低特征维度),以及交叉注意⼒机制+Unet的步骤,更精细更可控 介绍下classifier-free guidance和Classifier Guidance Classifier Guidance的一般流程如下:首先单独预训练一个噪声鲁棒的分类器模型。然后训练一个普通的无条件Diffusion模型。Diffusion模型生成图像的采样过程中,利 用预训练好的分类器来提供条件信号。具体来说,就是每个采样步骤都计算分类器的输 出,获得条件影响项,加入到Diffusion模型的更新公式中。这样就可以利用分类器的条 件信号,实现Diffusion模型在推理阶段条件生成图像的目的。Classifier-Free Guidance 中,⽣成模型不仅仅学习如何根据给定的条件⽣成数据,⽽且还学习如何在没有任何条件输⼊的情况下⽣成数据。换句话说,模型既能进⾏条件⽣成,也能进⾏⽆条件⽣成。CFG的训练过程其实就是对提供的条件输入做随机的dropout,这样就可以得到一个无条件和条件提示的两个输出,然后学习二者之间的方向差指导采样过程。在⽣成过程中,Classifier-Free Guidance 允许我们在没有显式使⽤分类器或判别器的情况下调节条件⽣成的强度。这是通过“调节”(或“混合”)条件⽣成和⽆条件⽣成的输出来实现的,以此来控制⽣成内容的相关性和多样性noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond) guidance scale是一个放缩系数,越大,生成的结果越倾向于输入条件,多样性会下降。越小,多样性越大。 Stable Diffusion 怎么实现⽂本和图像的条件控制的

SpringBoot Test详解

目录 spring-boot-starter-test1、概述2、常用注解2.1、配置类型的注解2.2、Mock类型的注解2.3、自动配置类型的注解2.4、启动测试类型的注解2.5、相似注解的区别和联系 3、SpringBootTest和Junit的使用3.1、单元测试3.2、集成测试 4、MockMvc4.1、简单示例4.2、自动配置4.3、使用方式1、测试逻辑2、MockMvcBuilder3、MockMvcRequestBuilders4、ResultActions5、ResultMatchers6、MvcResult 5、业务代码6、分层测试6.1、Dao层测试6.2、Service层测试6.3、Controller层测试 7、JSON接口测试 spring-boot-starter-test 1、概述 SpringBoot对单元测试的支持在于提供了一系列注解和工具的集成,它们是通过两个项目提供的: spring-boot-test项目:包含核心功能spring-boot-test-autoconfigure项目:支持自动配置 通常情况下,我们通过spring-boot-starter-test的Starter来引入SpringBoot的核心支持项目以及单元测试项目以及单元测试库。 spring-boot-starter-test包含的类库如下: JUnit:一个Java语言的单元测试框架Spring Test & Spring Boot Test:为SpringBoot应用提供集成测试和工具支持AssertJ::支持流式断言的Java测试框架Hamcrest:一个匹配器库Mockito:一个Java Mock框架JSONassert:一个针对JSON的断言库JsonPath:一个JSON XPath库 如果SpringBoot提供的基础类无法满足业务需求,我们也可以自行添加依赖。依赖注入的优点之一就是可以轻松使用单元测试。这种方式可以直接通过new来创建对象,而不需要涉及Spring。当然,也可以通过模拟对象来替换真实依赖。 如果需要集成测试,比如使用Spring的ApplicationContext,Spring同样能够提供无须部署应用程序或连接到其它基础环境的集成测试。而SpringBoot应用本身就是一个ApplicationContext,因此除了正常使用Spring上下文进行测试,无须执行其它操作。 Maven依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> 2、常用注解 从功能上讲,Spring Boot Test中的注解主要分如下几类: 类别示例说明配置类型@TestConfiguration等提供一些测试相关的配置入口mock类型@MockBean等提供mock支持启动测试类型@SpringBootTest等以Test结尾的注解,具有加载applicationContext的能力自动配置类型@AutoConfigureJdbc等以AutoConfigure开头的注解,具有加载测试支持功能的能力 2.1、配置类型的注解 注解作用实践中的使用@TestComponent该注解为另一种@Component,在语义上用来指定某个Bean是专门用于测试的该注解适用与测试代码和正式混合在一起时,不加载被该注解描述的Bean,使用不多@TestConfiguration该注解是另一种@TestComponent,它用于补充额外的Bean或覆盖已存在的Bean在不修改正式代码的前提下,使配置更加灵活@TypeExcludeFilters用来排除@TestConfiguration和@TestComponent适用于测试代码和正式代码混合的场景,使用不多@OverrideAutoConfiguration可用于覆盖@EnableAutoCOnfiguration,与ImportAutoConfiguration结合使用,以限制所加载的自动配置类在不修改正式代码的前提下,提供了修改配置自动配置类的能力@PropertyMapping定义@AutoConfigure注解中用到的变量名称,例如在@AutoConfigureMockMvc中定义名为spring.test.mockmvc.webclient.enabled的变量一般不使用 使用@SpringBootApplication启动测试或者生产代码,被@TestComponent描述的Bean会自动被排除掉。如果不是则需要向@SpringBootApplication添加TypeExcludeFilter。 2.2、Mock类型的注解 注解作用MockBean用于Mock指定的class或被注解的属性MockBeans使@MockBean支持在同一类型或属性上多次出现@SpyBean用于spy指定的class或被注解的属性@SpyBeans使@SpyBeans支持在同一类型或属性上次多次出现 @MockBean和@SpyBean这两个注解,在mockito框架中本来已经存在,且功能基本相同。Spring Boot Test又定义一份重复的注解,目的在于使MockBean和SpyBean被ApplicationContext管理,从而方便使用。 MockBean和SpyBean功能非常相似,都能模拟方法的各种行为。不同之处在于MockBean是全新的对象,跟正式对象没有关系;而SpyBean与正式对象紧密联系,可以模拟正式对象的部分方法,没有被模拟的方法仍然可以运行正式代码。 2.3、自动配置类型的注解 注解作用@AutoConfigureJdbc自动配置JDBC@AutoConfigureCache自动配置缓存@AutoConfigureDataLdap自动配置LDAP@AutoConfigureJson自动配置JSON@AutoConfigureJsonTesters自动配置JsonTester@AutoConfigureDataJpa自动配置JPA@AutoConfigureTestEntityManager自动配置TestEntityManager@AutoConfigureRestDocs自动配置Rest Docs@AutoConfigureMockRestServiceServer自动配置MockRestServiceServer@AutoConfigureWebClient自动配置WebClient@AutoConfigureWebFlux自动配置WebFlux@AutoConfigureWebTestClient自动配置WebTestClient@AutoConfigureMockMvc自动配置MockMvc@AutoConfigureWebMvc自动配置WebMvc@AutoConfigureDataNeo4j自动配置Neo4j@AutoConfigureDataRedis自动配置Redis@AutoConfigureJooq自动配置Jooq@AutoCOnfigureTestDatabase自动Test Database,可以使用内存数据库 这些注解可以搭配@Test使用,用于开启在@Test中未自动配置的功能。例如@SpringBootTest和@AutoConfigureMockMvc组合后,就可以注入org.springframework.test.web.servlet.MockMvc。 自动配置类型有两种使用方式: 在功能测试(即使用@SpringBootTest)时显示添加。一般在切片测试中被隐式使用,例如@WebMvcTest注解时,隐式添加了@AutoConfigureCache、@AutoConfigureWebMvc和@AutoConfigureMockMvc。 2.4、启动测试类型的注解 所有的@*Test注解都被@BootstrapWith注解,它们可以启动ApplicationContext,是测试的入口,所有的测试类必须声明一个@*Test注解。 注解作用@SpringBootTest自动侦测并加载@SpringBootApplication或@SpringBootConfiguration中的配置,默认web环境为Mock,不见听任务端口@DataRedisTest测试对Redis操作,自动扫描被@RedisHash描述的类,并配置Spring Data Redis的库@DataJpaTest测试基于JPA的数据库操作,同时提供了TestEntityManager替代JPA的EntityManager@DataJdbcTest测试基于Spring Data JDBC的数据库操作@JsonTest测试JSON的序列化和反序列化@WebMvcTest测试Spring MVC中的Controllers@WebFluxTest测试Spring WebFlux中的Controllers@RestClientTest测试对REST客户端的操作@DataLdapTest测试对LDAP的操作@DataMongoTest测试对MongoDB的操作@DataNeo4jTest测试对Neo4j的操作 除了@SpringBootTest之外的注解都是用来进行切面测试的,他们会默认导入一些自动配置,点击查看官方文档。 一般情况,推荐使用@SpringBootTest而非其它切片测试的注解,简单有效。若某次改动仅涉及特定切片,可以考虑使用切片测试。SpringBootTest是这些注解中最常用的一个,其中包含的配置项如下: value:指定配置属性properties:指定配置属性,和value意义相同classes:指定配置类,等同于@ContextConfiguration中的class,若没有显示指定,将查找嵌套的@Configuration类,然后返回到SpringBootConfiguration搜索配置webEnviroment:指定web环境,可选值如下: MOCK:此值为默认值,该类型提供一个mock环境,此时内嵌的服务(servlet容器)并没有真正启动,也不会监听web端口RANDOM_PORT:启动一个真实的web服务,监听一个随机端口DEFINED_PORT:启动一个真实的web服务,监听一个定义好的端口(从配置中读取)NONE:启动一个非web的ApplicationContext,既不提供mock环境,也不提供真实的web服务 2.5、相似注解的区别和联系 @TestComment和@Comment:@TestComment是另一种@Component,在语义上用来指定某个Bean是专门用于测试的。使用@SpringBootApplication服务时,@TestComponent会被自动排除@TestConfiguration和@Configuration:@TestConfiguration是Spring Boot Boot Test提供的,@Configuration是Spring Framework提供的。@TestConfiguration实际上是也是一种@TestComponent,只是这个@TestComponent专门用来做配置用。@TestConfiguration和@Configuration不同,它不会阻止@SpringBootTest的查找机制,相当于是对既有配置的补充或覆盖。@SpringBootTest和@WebMvcTest(或@*Test):都可以启动Spring的ApplicationContext @SpringBootTest自动侦测并加载@SpringBootApplication或@SpringBootConfiguration中的配置,@WebMvcTest不侦测配置,只是默认加载一些自动配置。@SpringBootTest测试范围一般比@WebMvcTest大。@MockBean和@SpyBean:都能模拟方法的各种行为。不同之处在于MockBean是全新的对象,跟正式对象没有关系;而SpyBean与正式对象紧密联系,可以模拟正式对象的部分方法,没有被模拟的方法仍然可以运行正式代码。 3、SpringBootTest和Junit的使用 整体上,Spring Boot Test支持的测试种类,大致可以分为如下三类:

学生信息管理系统(Python版),2024最新版,流程齐全,快来围观

图标(在figma自己设计的,取青出于蓝之意)🤣 SIMS学生信息管理系统(Students Information Management System) 前言: 学生信息管理系统为Python基础阶段知识的整合,在这一过程中可以增进对Python数据类型的理解, 也可以对包、模块、函数等的相关知识进行巩固,对基础知识进行复盘,加深对Python语法的理解。 系统开发环境 操作系统: Windows11开发工具: PycharmPython解释器版本: Python3.10Python内置模块:os,re 项目目录结构 需求分析 学生信息管理系统应该具备的功能 添加学生及成绩信息将学生信息保存到文件当中修改和删除学生信息查询学生信息根据学生成绩进行排序统计学生的分数 系统设计 系统业务流程 主函数设计 编号功能0退出系统1录入学生信息,调用insert()函数2查找学生信息,调用search()函数3删除学生信息,调用delete()函数4修改学生信息,调用modify()函数5对学生成绩排序,调用sort()函数6统计学生人数,调用total()函数7显示所有的学生信息,调用show()函数 学生信息维护模块设计 实现从控制台录入学生信息,并将信息保存到磁盘文件当中 具体实现 save()函数,用于将学生信息保存到文件 insert()函数,用于记录学生信息 实现查询学生信息功能 从控制台录入学生ID或姓名,到磁盘文件中找到对应的学生信息 具体实现 编写主函数中调用的查找学生信息的函数search() 定义显示查询结果的函数show_student(query_student) 3.实现从控制台找到学生信息,并将其删除 具体实现 编写主函数中调用的修改学生信息的函数modify() 调用了show()函数显示学生信息 4.实现修改学生信息功能 从控制台录入学生ID,到磁盘文件中找到对应的学生信息,将其进行修改 5.实现按学生成绩排序功能 主要对学生信息按语文、数学、英语、总成绩进行升序或降序排序 选择0表示升序排序,选择0表示降序排序 选择完排序方式后,实现选择1按照语文成绩排序,选择2按照数学成绩排序,选择3按照英语成绩排序,选择0按总成绩排序 6.实现统计学生总人数功能 统计学生信息文件中保存的学生信息个数 具体实现: 利用对列表的长度的计算,因为列表内的每个学生信息都是一个字典,所以有几个字典就有几条学生信息,即有几个学生 7.显示所有学生信息的功能 将学生信息文件中保存的全部学生信息获取并展示 项目打包 安装第三方模块 在线安装方式 – pip install PyInstaller 执行打包操作 pyinstaller --onefile --icon=SIMS_ver1.0\SIMS.ico --clean sims.py 全部代码 # editor: 百年 # time: 2024/1/26 11:39 # 定义要保存成的文件 import os.

sql判断字符串是否存在

sql判断某个字符是否包含在字段中,在mysql通常有以下几种方式 一、LIKE模糊查询 LIKE是用于模糊查找的关键字,使用%作为通配符,分左模式、有模式、左右模式 SELECT '貂蝉' LIKE '%貂蝉%'; 二、FIND_IN_SET函数 FIND_IN_SET(str,strlist) : str 要查询的字符串,strlist 需查询的字段,参数以”,”分隔;该函数的作用是查询字段(strlist)中是否包含(str)的结果,返回结果为null或记录。 SELECT FIND_IN_SET('貂蝉','西施,昭君,貂蝉,赵飞燕'); 三、LOCATE函数 LOCATE(substr,str,pos)函数是MySQL中用于查找某个字符串在另一个字符串中第一次出现的位置的函数。它返回目标字符串在源字符串中的起始位置,如果目标字符串不存在,则返回0。与find_in_set相比,LOCATE不受分隔符约束,它是一种字符串匹配模式,但是无法直接返回记录,需要手动判断 查询字符串位置 SELECT LOCATE('西施','西施,昭君,貂蝉,赵飞燕'); SELECT LOCATE('貂蝉','西施、昭君、貂蝉、赵飞燕'); SELECT LOCATE('貂蝉','西施昭君貂蝉赵飞燕'); 查询记录 SELECT LOCATE('貂蝉','西施、昭君、貂蝉、赵飞燕')>0; 四、INSTR函数 INSTR(str,substr)I在一个字符串(str)中搜索指定的字符(substr),返回发现指定的字符的位置(index)。在字符串str里面,字符串substr出现的第一个位置(index),index是从1开始计算,如果没有找到就直接返回0,没有返回负数的情况。 SELECT INSTR('西施、昭君、貂蝉、赵飞燕、西施、','西施'); SELECT INSTR('西施、昭君、貂蝉、赵飞燕','昭君') > 0; 从使用上看INSTR和LOCATE的作用基本相同,仅仅是用法上有极小的差异,主要在参数列表上

SpringBoot导出Excel的四种方式

方法一:hutools 该方法通过自研的一套Excel注解,在实体类上添加注解,然后用一套工具类(见源码中com.leixi.excel.util.excelOne)实现实体类列表的导出。优点是不用建模板,调用简单,缺点是迁移麻烦。有好几个配套的文件如注解,工具类等,想要在别的项目中使用,就涉及到文件的拷贝。老实说,不太优雅,而且更可惜的是,这些方法里居然没有封装导出方法。下面给出实体类创建,方法调用的代码,供各位参考(相关源码会在文中提供) //引入依赖 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.12</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.3.0</version> </dependency> //controller方法,不得不说,调用起来是真的方便 @PostMapping(value = "/exportData") public ResponseEntity<byte[]> exportData(String fileName) { List<ExcelOneDto> list = CommonUtil.buildDemoExcel(ExcelOneDto.class); Workbook workbook = new DefaultWriteHandler<ExcelOneDto>().write("sheet名称",list, ExcelOneDto.class); return CommonUtil.exportWorkbook(workbook, fileName); } //实体类 @Data public class ExcelOneDto { @ExcelCell(priority = "A", cellTitle = "编号") private Integer code; @ExcelCell(priority = "B", cellTitle = "名称") private String name; @ExcelCell(priority = "C", cellTitle = "详情") private String desc; @ExcelCell(priority = "

java中字符串替换的4种方法

目录 前言 一、String的replace()方法 二、String的replaceAll()方法 三、StringBuffer/StringBuilder的replace()方法 四、Matcher的replaceAll()方法 总结 前言 在日常开发中,我们对字符串的操作非常频繁,今天我总结了一下字符串替换常用的4种方式,这里再强调下字符串是不可变的,进行字符串替换后记得赋值。 一、String的replace()方法 使用String的replace()方法:该方法可以将字符串中的某个字符或字符串替换为另一个字符或字符串。例如: String str = "Hello World"; String newStr = str.replace("World", "Java"); System.out.println(newStr); // 输出:Hello Java 二、String的replaceAll()方法 使用String的replaceAll()方法:该方法可以使用正则表达式来匹配需要替换的字符串,并将其替换为指定的字符串。例如: String str = "Hello 123 World"; String newStr = str.replaceAll("[0-9]+", ""); // 移除所有数字 System.out.println(newStr); // 输出:Hello World 三、StringBuffer/StringBuilder的replace()方法 使用StringBuffer或StringBuilder的replace()方法:这两个类都提供了replace()方法来替换字符串中的某个字符或字符串。区别在于StringBuffer是线程安全的,而StringBuilder是非线程安全的。例如: StringBuffer sb = new StringBuffer("Hello World"); sb.replace(6, 11, "Java"); // 将索引6到11的部分替换为"Java" System.out.println(sb.toString()); // 输出:Hello Java StringBuilder sb = new StringBuilder("Hello World"); sb.replace(6, 11, "

引领AI创意教育新浪潮,瑞云AIGC实训平台解决方案来了

过去的2023年,AI(人工智能)成为了年度科技圈关键词,各行各业都在AI化,据统计,AIGC市场规模预计到2030年将达到万亿级别,这不仅是市场的趋势,更是创新的机遇。 教育行业更是如此,许多高校和职校引入了AIGC的课程,一些艺术和设计学院开始将AIGC技术融入课程中,让学生通过实践学习如何使用AI生成图像等创意内容。例如,学生可能会使用AI生成的图像作为设计项目的起点。 这意味着各大学校对一个便捷且易用的AIGC实训平台建设的需求愈发增强。 01 传统AIGC实训平台弊端:算力冗余且投入高 Stable Diffusion(下文简称SD)模型是当前AI绘画领域中非常受欢迎的文字生成图片的开源模型之一,Stable Diffusion能够通过文本prompt生成图像,执行图像的超分辨率、风格迁移、图像修复等任务。该模型在广告业、设计图像等领域得到广泛应用,也是视觉教育中不可或缺的一项技能。 然而,对于大多数人来说,从底层编写Python代码来调用Stable Diffusion模型的难度较大。此外,传统的SD实训平台建设也面临着以下几个方面的问题: 设备投入高昂,算力过度冗余。在多终端教学场景下,每一台教学机器必须配一张带有CUDA的显卡,这对于教育机构来说是一笔不小的成本。而在实际的教学场景中,教师授课通常不需要全程使用显卡,只有在需要生成图像等出图操作时才会调用机器的算力。这导致了显卡的利用率低下,算力资源浪费严重。 平台建设难,管理难。传统的SD平台需要在每台设备上单独安装和部署SD软件或服务,这对于跨教室部署来说操作过于麻烦。此外,传统SD平台无法有效地控制学生对SD软件的使用,这使得老师难以有效地管理学生使用和教学。因此,需要寻求更有效的SD平台来管理学生使用和教学。 因此,如果有一个应用程序可以让人们简单地输入文字,然后点击一下就可以生成图像,那将会是非常方便和愉悦的体验。 02 瑞云SD实训平台:简化操作,提升效率 为了解决这些问题,瑞云科技作为国内领先的视觉云计算服务提供商,推出了一款基于市场主流Stable Diffusion WebUI二次开发的可视化实训管理平台,旨在为视觉行业的AIGC教育创新提供强有力的支持,具有以下几个方面的优势: 无需繁杂的配置流程,一键启动,帮助没有能力自建,或者本地算力不足的用户,快速在云上构建Stable Diffusion环境。 提供丰富GPU服务器类型选择,灵活调度算力,覆盖推理、训练、微调等任何AIGC算力需求场景。 拒绝碎片化教程,提供系统化、最贴切商业需求场景的教程,由浅入深剖析SD原理,迅速让学生用户上手创作。 提供私有云和公有云两种部署方式,满足不同学校的安全性和灵活性需求。 提供账号管理系统,分配角色、算力资源监控、调度,方便教师对学生的使用情况进行管理和评估。 SD实训平台技术架构 瑞云SD实训平台的应用场景涵盖了从线稿上色、产品设计,到建筑设计、数字人外貌定制等多个领域。无论是专业的设计师还是充满好奇心的学生,都能在这个平台上找到属于自己的创作空间。 瑞云科技作为国内领先的视觉云计算服务提供商,一直致力于为视觉行业的教育创新提供强有力的支持。通过推出SD实训管理平台,瑞云科技希望能够帮助视觉教育机构和学生,利用人工智能技术,实现自己的想象,提升自己的技能,创造自己的未来! 瑞云科技的基于SD开源推流平台解决方案,是构筑数字化未来的最佳选择,我们邀请您加入我们,一起探索AI与创意的无限可能,共同塑造数字化未来的新篇章。 若您感兴趣,可在官网详细了解,我们会有专人24小时联系您。 本文《引领AI创意教育新浪潮,瑞云AIGC实训平台解决方案来了》内容由3DCAT实时云渲染解决方案提供商整理发布,如需转载,请注明出处及链接。

国产大模型最近挺猛啊!使用Dify构建企业级GPTs;AI阅读不只是「总结全文」;我的Agent自媒体团队;Nijijourney官方AI绘画课完结啦! | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 大模型近期重大进展:百川、讯飞、智源发布新模型,GLM-4、DeepSeek上线开放平台,Google Bard 反超,Mixtral medium 泄露,真的很热闹… https://www.baichuan-ai.com/ 1月29日,百川智能发布超千亿参数的大语言模型 Baichuan 3。根据官方消息,Baichuan 3 在多个权威通用能力评测如中表现出色:在中文任务上更是超越了 GPT-4,在数学和代码专项评测同样表现不错 ⋙ 点击了解详情 https://xinghuo.xfyun.cn/ 1月30日,科大讯飞举行星火认知大模型 V3.5 升级发布会。本次正式发布了首个基于全国产算力训练的讯飞星火 V3.5,七大核心能力全面提升,数学、语言理解、语音交互能力超 GPT-4 Turbo。此外,还正式发布了星火语音大模型,首批 37 个主流语种效果超过 OpenAI Whisper V3 ⋙ 点击了解详情 https://huggingface.co/BAAI/bge-m3 1月30日,智源发布了 BGE 家族新成员「通用语义向量模型BGE-M3」,支持超过 100 种语言,具备领先的多语言、跨语言检索能力。据官方介绍,BGE-M3 能够全面且高质量地支撑「句子」「段落」「篇章」「文档」等不同粒度的输入文本,最大输入长度为 8192,并且一站式集成了稠密检索、稀疏检索、多向量检索三种检索功能,在多个评测基准中达到最优水平 ⋙ 点击了解详情 https://open.bigmodel.cn/dev/api#glm-4 1月30日,智谱宣布 GLM-4 模型开放 API 正式上线。开发者可以通过「智谱AI开放平台」接入 GLM-4 模型开放API,体验到智谱新一代基座大模型的强大能力 ⋙ 点击了解详情 👉 此前的1月16日,智谱正式推出了新一代基座大模型 GLM-4,并宣布了一系列产品升级 ⋙ 点击了解详情 https://platform.deepseek.com 1月31日,DeepSeek (深度探索) 宣布开放平台上线 API 内测。注册即赠送 1000 万 Tokens,而且兼容 OpenAl API 接囗,Chat / Coder双模型可以调用 ⋙ 点击了解详情 👉 此前的1月11日,DeepSeek 宣布开源国内首个 MoE 大模型 DeepSeekMoE,全新架构,支持中英,免费商用 ⋙ 点击了解详情

苹果笔记本macbook,MacOS 13(Ventura) 跳过监管锁(配置锁)

之前因为价格太香,买了带锁的MacBook Pro。之后使用一直正常,直到最近升级了最新的系统(14, Sonama),电脑就用不了了。在网上搜了很久,终于找到了这篇文章:Mac Os ventura sonama,12 13 14 监管锁跳过 - 哔哩哔哩 (bilibili.com)。但有些细节写得不是特别清楚,且中间需要用到科学上网,所以决定写这篇文章,希望能够帮到有需要的人。 第一步:重装系统 长按电源键关机,再长按开机进入恢复模式,抹掉硬盘,重启后安装系统。 第二步:执行代码 系统安装完重启只后,到连WiFi时长按电源键关机。再长按command+R进入恢复模式,打开Safari,输入本篇文章的地址,复制以下代码: #!/bin/bash RED='\033[1;31m' GRN='\033[1;32m' BLU='\033[1;34m' YEL='\033[1;33m' PUR='\033[1;35m' CYAN='\033[1;36m' NC='\033[0m' echo -e "${CYAN}*-------------------*---------------------*${NC}" echo -e "${YEL}* Check MDM - Skip MDM Auto for MacOS by *${NC}" echo -e "${RED}* SKIPMDM.COM *${NC}" echo -e "${RED}* Phoenix Team *${NC}" echo -e "${CYAN}*-------------------*---------------------*${NC}" echo "" PS3='Please enter your choice: ' options=("Autoypass on Recovery" "Reboot") select opt in "${options[@]}"; do case $opt in "

MYSQL用户、权限管理(如何创建用户,给用户授权,远程登录)

文章目录 前言一、用户管理1.用户信息2.创建用户3.删除用户4.修改密码 二、权限管理1.权限管理概念2.给用户授权3.回收权限 前言 MySQL的权限简单的理解就是MySQL允许你做你权利以内的事情,不可以越界。MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中,由mysql_install_db脚本初始化。 存储账户权限信息表主要有:user、db、tables_priv、columns_priv、procs_priv、proxies_priv这六张表(5.6版本之前还有host表,现在已经把host内容整合进user表) 一、用户管理 1.用户信息 MySQL中的用户,都存储在系统数据库mysql的user表中: 字段解释: host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆 user: 用户名 authentication_string: 用户密码通过password函数加密后的 *_priv: 用户拥有的权限 2.创建用户 语法: create user '用户名'@'登陆主机/ip' identified by '密码'; 下面我们创建一个用户: 这时我们便可以用新用户登录了! 3.删除用户 语法: drop user '用户名'@'主机名' 我们不能直接删除用户名,因为它默认是%,表示所有地方可以登陆的用户: 我们要删除的是从主机登录的用户: 4.修改密码 自己改自己密码: set password=password('新的密码'); set password for '用户名'@'主机名'=password('新的密码'); 我们可以看到密码的字符串发生了变化,代表我们修改密码成功: 二、权限管理 1.权限管理概念 MYSQL用户权限管理主要有以下作用: 可以限制用户访问哪些库、哪些表可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作可以限制用户登录的IP或域名可以限制用户自己的权限是否可以授权给别的用户 用户操作MYSQL数据库的权限管理,主要分为两个阶段: 有没有权限连接上来有没有权限执行本操作 MYSQL连接权限 服务器如何判断用户有没有权限连接上来? 你从哪里来?host你是谁?user你的密码是多少?password 用户的这三个信息,存储在mysql库中的user表中。 操作执行权限 mysql数据库(系统数据库)下的表:user、db、tables_priv、columns_priv、proce_priv、proxies_priv共同构成授权表; 1)user表 user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。 2)db表 db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。 3)tables_priv表 tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。 4)columns_priv表 columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。 5)proce_priv columns_priv表指定存储过程权限。这里代表允许使用某个存储过程的权限。 6)proxies_priv 利用 MySQL proxies_priv(模拟角色)实现类似用户组管理。角色(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。

消息中间件(MQ)对比:RabbitMQ、Kafka、ActiveMQ 和 RocketMQ

前言 在构建分布式系统时,选择适合的消息中间件是至关重要的决策。RabbitMQ、Kafka、ActiveMQ 和 RocketMQ 是当前流行的消息中间件之一,它们各自具有独特的特点和适用场景。本文将对这四种消息中间件进行综合比较,帮助您在项目中作出明智的选择。 1. RabbitMQ 特点: 消息模型: RabbitMQ采用AMQP(高级消息队列协议)标准,支持多种消息模型,包括点对点和发布/订阅。可靠性: 提供丰富的可靠性机制,支持持久化、事务和消息确认等。灵活性: 可以轻松地与多种编程语言和框架集成,提供强大的插件系统。 优势: 易用性: 简单易用,适合初学者,有着良好的文档和社区支持。高可用性: 提供集群和镜像队列等机制,提高可用性。 适用场景: 适合需要简单、可靠消息传递的应用。对AMQP标准有需求的企业。 2. Kafka 特点: 持久性: Kafka以日志的形式存储消息,提供高度的持久性和可重放性。高吞吐量: 设计用于处理大规模数据流,适用于高吞吐量的场景。分布式: 构建为分布式系统,支持水平扩展。 优势: 数据管道: 适用于构建实时数据管道,支持流式处理。水平扩展: 可以轻松地水平扩展以应对大规模数据流。 适用场景: 大规模数据处理,实时数据流分析。构建可扩展的、持久性的消息处理系统。 3. ActiveMQ 特点: JMS支持: ActiveMQ完全支持Java Message Service(JMS),提供强大的消息模型。灵活性: 支持多种消息传递模式,包括点对点和发布/订阅。集成: 可以与各种应用服务器和开发框架集成。 优势: JMS标准: 对JMS标准的完整支持,适合Java生态系统。广泛的集成: 适用于广泛的集成场景,包括企业级应用和微服务架构。 适用场景: Java生态系统中的应用。需要支持JMS标准的企业级应用。 4. RocketMQ 特点: 分布式架构: RocketMQ 是一个分布式消息中间件系统,支持水平扩展,适应高并发场景。可靠性: 提供强大的消息持久性和可靠性,支持同步和异步传输方式。灵活性: 支持多种消息传递模式,包括点对点和发布/订阅。实时性: 适用于实时数据传输和大规模消息处理。 优势: 高性能: 具有高吞吐量和低延迟的特性,适合处理大规模数据流。丰富的特性: 提供丰富的特性,如事务消息、顺序消息、延迟消息等。监控和管理: 提供完善的监控和管理工具,便于运维和管理。 适用场景: 大规模分布式系统,需要支持高并发和分布式消息传递。需要实时性、高可用性和顺序消息的场景。 比较表格 特性/消息中间件RabbitMQKafkaActiveMQRocketMQ消息模型AMQP标准(点对点、发布/订阅)发布/订阅,适用于大规模数据流JMS支持,支持点对点、发布/订阅和主题订阅分布式消息中间件,点对点、发布/订阅,顺序消息支持可靠性持久性、事务、消息确认高持久性、可重放性、分区容错JMS事务、持久性、消息确认持久性、同步/异步传输、事务消息、丰富的消息特性灵活性插件系统,多语言支持流式处理、水平扩展多语言支持,集成广泛多语言支持,可扩展性好,支持大规模数据流处理性能适用于一般工作负载,高吞吐量高吞吐量、低延迟适用于一般工作负载,较好的性能高吞吐量、低延迟、适用于大规模数据传输集群和扩展性集群和镜像队列,水平扩展分布式设计,水平扩展集群支持、水平扩展分布式架构,支持水平扩展社区支持强大的社区支持,文档完善大型社区,广泛应用于开源和企业项目社区活跃,企业级支持在开源社区和企业中有一定的用户基础可用性高可用性,提供集群和镜像队列高可用性,分布式设计,支持数据副本高可用性,支持集群和主从模式提供高可用性,支持主从模式、数据冗余数据保证支持事务和消息确认,可实现精准一次投递提供至少一次投递保证,支持异步传输支持事务和消息确认,可实现精准一次投递提供事务消息、可靠投递、顺序消息等特性监控和管理插件和可视化工具支持,易于监控和管理提供监控和管理工具,支持集成监控系统提供监控和管理工具,支持JMX提供完善的监控和管理工具,易于运维和管理 结论 根据以上比较,选择适合自己项目的消息中间件应该综合考虑需求、技术栈和团队经验。每个消息中间件都有其独特的优势,没有一种是适用于所有场景的。仔细评估项目需求,选择最符合要求的消息中间件,将有助于确保系统的可靠性和高效性。

MySQL中的SET数据类型详解

MySQL中的SET数据类型详解 在数据库设计中,我们经常需要存储一组预定义的值,并且这些值可能会有多个同时适用的情况。这时,MySQL的SET数据类型就派上用场了。 SET是MySQL中的一个特殊数据类型,用于存储一个值的集合,这个集合中的值是预定义的。一个SET字段可以包含零个、一个或多个这些预定义值,这些值在存储时是通过逗号分隔的字符串表示的。 如何定义SET类型 创建一个SET类型的列时,你需要定义可能的值集合。例如: CREATE TABLE your_table ( your_column SET('value1', 'value2', 'value3', ...) ); 这里your_column可以存储任何这些值的组合,包括全部都不选。 当向SET类型的列插入数据时,你可以插入定义的任何值的组合。例如: INSERT INTO your_table (your_column) VALUES ('value1,value2'), ('value3'), ('value1,value3'); SET类型的存储和检索 在存储时,SET类型实际上是以整数的形式存储的,每个值对应一个比特位。这种表示方法使得SET类型非常高效,特别是在执行位运算时。 检索SET类型的数据时,它会自动转换回逗号分隔的字符串格式,方便阅读。 SET类型的优势和局限 优势: 紧凑的存储:特别是当有多个选项时,使用SET类型可以节省空间。灵活性:可以轻松地添加或删除值。 局限: 预定义值的限制:SET类型只能包含最多64个不同的值。更新困难:如果你需要更改可能的值集合,可能需要修改整个列的定义。 注意事项 在使用SET类型时,应当确保它确实适合你的数据模型。在某些情况下,使用关联表可能是更好的选择。考虑到未来可能的变化,如果你预计值集合会频繁变动,那么SET类型可能不是最佳选择。 MySQL中的SET类型是一种强大且灵活的数据类型,适合于那些需要存储固定值集合的场景。

十分钟快速上手Spring Boot与微信小程序API接口的调用,快速开发小程序后端服务

1.1 微信小程序API接口介绍 微信小程序API接口是连接小程序前端与后端服务器的桥梁,它提供了丰富的功能接口,包括用户信息、支付、模板消息、数据存储等。这些API接口能够满足开发者在小程序中实现各种复杂业务逻辑的需求。 用户信息接口 用户信息接口允许开发者获取用户的基本信息,如用户的昵称、头像、性别等,以及用户的唯一标识openid。通过这些信息,开发者可以实现个性化的用户体验,例如展示用户的头像和昵称,或者根据用户的性别提供不同的推荐内容。 支付接口 支付接口是小程序中常用的接口之一,它允许开发者在小程序中实现支付功能。用户可以通过微信支付接口完成支付操作,包括付款、退款等。支付接口的使用需要开发者先在微信支付平台注册,并获取到相应的支付密钥等信息。 模板消息接口 模板消息接口允许开发者向用户发送模板消息,包括订单通知、物流通知、活动通知等。开发者可以根据业务需求自定义模板消息的内容,并通过接口向用户发送消息。模板消息具有固定的格式和样式,开发者只需填写消息的内容,就可以快速发送消息给用户。 数据存储接口 数据存储接口允许开发者在小程序中进行数据存储和管理。开发者可以使用这些接口操作用户的数据,包括读取用户的信息、保存用户的数据、更新用户的数据等。数据存储接口通常与后端服务器配合使用,可以实现数据在前端和后端之间的传输和同步。 1.2 微信小程序API接口调用方式 微信小程序API接口调用方式分为两种: 前端调用:在小程序前端代码中直接调用微信小程序提供的API接口。前端调用适用于一些简单的业务逻辑,例如获取用户信息、发送模板消息等。 后端调用:通过后端服务器调用微信小程序的API接口,实现复杂的业务逻辑处理。后端调用适用于一些需要对数据进行处理和存储的场景,例如支付、数据存储等。 在实际开发中,根据业务需求和安全考虑,开发者可以灵活选择前端调用或后端调用的方式来调用微信小程序API接口。 Spring Boot集成微信小程序API接口 2.1 集成微信小程序API接口的方式 在Spring Boot项目中,可以通过以下方式集成微信小程序API接口: 使用第三方SDK:引入第三方的微信小程序SDK,通过SDK封装的接口调用微信小程序API。 自行封装:直接使用Spring Boot提供的HTTP请求库,自行封装请求微信小程序API的方法。 2.2 集成微信小程序登录接口示例 2.2.1 引入依赖 在pom.xml文件中引入微信小程序SDK的依赖: <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> <version>3.7.0</version> </dependency> 2.2.2 配置微信小程序信息 在application.properties文件中配置微信小程序的相关信息: wechat.miniapp.appid=your_appid wechat.miniapp.secret=your_secret 2.2.3 编写业务逻辑 @Service public class WechatMiniappService { @Autowired private WxMaService wxMaService; public WxMaJscode2SessionResult login(String code) { try { return wxMaService.getUserService().getSessionInfo(code); } catch (WxErrorException e) { // 处理异常 } return null; } } 2.

在Mac上启用并切换root

在Mac的终端通过命令行安装软件或者修改文件时,会遇到权限不足的情况,需要切换到root用户才能进行操作。 由于Mac默认不启用root用户,因此需要手动启用root用户,再切换到root进行操作。 启用root用户并切换的步骤如下: 1. 确认是否root用户已经启用 Mac默认不启用root用户,如果输入su root出现下面错误,则说明没有启用root用户。 $ su root Password: su: Sorry 2. 启用root用户 输入下面命令,设置root用户的密码: $ sudo passwd root Password: Changing password for root. New password: Retype new password: 3. 登陆root用户 此时即可切换为root用户。 $ su root Password: 此外,还可以通过下面命令切换root。 sudo -i sudo -s

学生宿舍管理系统设计与实现(源码+数据库+文档)

学生宿舍管理小程序目录 目录 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)学生信息管理 (2)公告信息管理 (3)宿舍信息管理 (4)晚归登记管理 2、小程序学生模块的实现 (1)学生注册 (2)小程序首页 (3)离宿申请 (4)我的 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大家好!我是十五喵,一个死磕知识的铲屎官,坚持长期创造有价值的事情,本人在Java毕业设计领域有多年的经验,目前专注于大学生项目实战开发,讲解,毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 本文介绍了宿舍管理系统小程序的开发全过程。通过分析宿舍管理系统小程序管理的不足,创建了一个计算机管理宿舍管理系统小程序的方案。文章介绍了宿舍管理系统小程序的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本宿舍管理系统小程序有管理员和学生两个角色。管理员功能有个人中心,公告信息管理,班级管理,学生管理,宿舍信息管理,宿舍安排管理,离宿申请管理,宿舍评分管理,晚归登记管理,报修信息管理,报修处理管理,系统管理等。学生功能有注册登录,查看公告信息,宿舍信息,查看宿舍安排,离宿申请,宿舍评分,晚归登记,报修信息,报修处理,我的收藏等。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得宿舍管理系统小程序管理工作系统化、规范化。 关键词:宿舍管理系统小程序;SSM框架;MYSQL数据库 二、系统功能设计 设计的管理员功能结构图如下图所示: 图4-2管理员功能结构图 设计的学生功能结构图如下图所示: 图4-2学生功能结构图 三、系统实现 1、管理员模块的实现 (1)学生信息管理 管理员可以管理学生信息,可以对通过微信小程序端注册的学生信息修改删除。具体界面的展示如图5.1所示。 图5.1 学生信息管理界面 (2)公告信息管理 管理员可以对公告信息进行添加,修改删除查询操作。具体界面如图5.2所示。 图5.2 公告信息管理界面 (3)宿舍信息管理 系统管理员可以查看宿舍信息,并且可以对宿舍信息进行添加修改删除操作。界面如下图所示: 图5.3 宿舍信息管理界面 (4)晚归登记管理 系统管理员可以查看晚归登记,并且可以对晚归登记的信息进行修改删除操作。界面如下图所示: 图5.4 晚归登记管理界面 2、小程序学生模块的实现 (1)学生注册 小程序学生是需要注册才可以进行登录的。界面如下图所示: 图5.5 注册界面 (2)小程序首页 小程序首页会显示公告信息,宿舍信息还有其他信息,通过下滑就可以获取到。界面如下图所示: 图5.6 小程序首页 (3)离宿申请 学生可以提交离宿申请。界面如下图所示: 图5.6 离宿申请 (4)我的 小程序最下面是导航模块,点击我的,可以出现关于我的相关功能。界面如下图所示:

频谱细化之Chirp-Z变换算法

文章目录 一、 算法简介二、算法仿真三、仿真结果 一、 算法简介 Chirp-Z变换的核心思想是在 Z 平面的单位圆上沿螺旋线进行等采样,若 已知离散采样序列 x(m),那么该信号的 Z 变换可表示为: Chirp-Z 变换算法在 Z 平面的一段螺旋线进行等角采样的示意图如下: 其中,Z0,Z1,…,ZM-1表示螺旋线上等分角的 M 个采样点;A0表示螺旋线上起始点 的半径 A0<1 表示起始采样点在圆内;θ0 表示沿着逆时针的起始采样点相角,可 正可负;φ0表示相邻采样点的角频率差,φ0<0 表示 Zk沿着顺时针顺序采样,φ0<0 表示 Zk沿着逆时针顺序采样 等角采样点 Zk可以表示为: 因此求 X(Zk)的过程转变成求 g(m)和 h(m)的卷积,即 g(m)*h(m),线性调频 Z 变换的算法流程可以总结如下: (1)选择 FFT 点数 L,要求 L≥M1+M2-1,并且 L=2m; (2)将序列 g(m)扩展为 L 点 (3)计算 g(m)的 L 点离散傅里叶变化 G(k)=FFT[g(m)]; (4)序列 h(m)选取 L 点; 二、算法仿真 clear; close all; clc; fs = 1024; % 采样率 N = 1024; % 信号长度 nfft = N; n = 0:1:N-1; n1 = fs * (0:nfft/2-1) / nfft; % 时间 x = 1.

8款有效删除Android锁屏的手机解锁软件

为了保护重要数据,许多手机用户倾向于使用图案锁、密码、指纹甚至面部识别来锁定他们的设备。但有时,他们无法解锁手机,因为忘记了复杂的密码、多次重复错误的锁定图案、或者手机被恶意代码攻击等。 8款有效删除Android锁屏的手机解锁软件 那么,有没有可能解锁被锁定的Android呢?是肯定的。解锁Android手机的一个好方法是使用专业的手机解锁软件来解除锁定屏幕。因此,在本文中,我们将向您介绍最好的 Android 解锁工具以及其优缺点。继续阅读。 1. 奇客手机解锁– Android 手机工具包 最推荐的手机解锁软件是奇客手机解锁。它能够在不输入密码的情况下解除 Android 手机上的屏幕锁定。无论您使用 PIN、密码、图案、指纹 ID 还是人脸识别,您都可以使用奇客手机解锁解锁您的手机。因此,您可以在几分钟内再次完全访问锁定的设备。 奇客手机解锁-奇客软件轻松解锁安卓设备的数字密码、指纹密码、人脸识别锁。不限型号,无需密码,没有使用门槛。https://www.geekersoft.cn/geekersoft-unlockgo-android.html 它不仅仅是一个Android解锁工具,还可以从设备、SIM卡或SD卡中恢复丢失的数据,从云帐户中提取数据,修复Android系统问题,绕过FRP锁等等。并且它具有很高的兼容性,可以作为PC或Mac的手机解锁软件。下面查看它的一些主要功能。 奇客手机解锁 一站式Android解锁器 只需几分钟即可删除任何类型的屏幕锁定。 点击解锁。不需要任何技能。每个人都可以应付。 无根。保证您的隐私和设备100%安全。 支持解锁所有型号的Android设备。 那么,如何绕过Android锁屏呢?以下是使用 奇客手机解锁只需单击几下即可解除屏幕锁定的步骤。 步骤1.免费下载奇客手机解锁并在您的PC上运行它。通过 USB 线将 Android 手机连接到计算机。在界面上选择 “解锁屏幕”。 步骤 2. 阅读说明并单击 “开始” 按钮。 步骤3.当您看到下面的界面时,单击 “立即删除” 按钮。 步骤 4. 选择您的设备品牌。DroidKit会根据您的手机品牌准确解锁您的手机。然后您需要按照屏幕上的说明删除屏幕密码。 步骤 5. 完成上述步骤后,奇客手机解锁将开始解除屏幕锁定。稍等片刻,屏幕就会解锁。 2. Android 解锁工具 说到手机解锁软件,很多人都会想到Android Unlock Tool。也许您忘记了自己设置的密码,或者刚收到二手安卓手机而不知道锁屏密码。不用担心,Android Unlock 可让您在几分钟内解锁。Android上的图案、PIN、密码、指纹锁屏都可以被绕过,你可以毫无阻碍地使用你的手机。 优点: 删除 4 种类型的 Android 屏幕锁:图案、PIN、密码和指纹。 与运行 Android 2.0 及更高版本的大多数 Android 品牌兼容。 简洁且用户友好的界面。 缺点: 安卓手机不支持人脸解锁。 有时会崩溃。

midjourney怎么用来设计logo?midjourney商用logo技巧

在使用Midjourney进行Logo设计时,清楚地知道你希望在Logo中包含哪些特定元素以及想要采纳的设计风格是非常关键的。仅仅了解各种设计相关的提示词语并不足够,因为如果你对于Logo的构成细节和希望的风格没有清晰的视野,就算使用众多的提示词也难以创造出满意的Logo设计。这段文字指出了Midjourney和ChatGPT的操作差异:ChatGPT更偏向于声明式操作,它更加灵活,能够适应并扮演不同的交流角色;相对而言,Midjourney操作更为指令式,它需要用户提供明确的指令以帮助引导工具根据用户心中预想的概念生成图像。 一.logo设计分类 设计通常可以分为以下几个主流类别: 图形型Logo:这种Logo以一个明确的图案或图形为中心,比如Apple公司著名的苹果标志、Twitter的小鸟符号或者Midjourney自己使用的标志性图样,都是围绕特定图形构建。 首字母型Logo:此类Logo主要由公司名称的首个字母或首字字母缩写组成。Facebook、Tesla(特斯拉)和IBM(国际商业机器公司)等都是利用其名称首字母来设计的Logo。 几何型Logo:这类Logo使用一个或数个几何形态组成,耐克(Nike)、Pepsi(百事)和Mastercard(万事达卡)等品牌的标志就是以几何形状为基础。 吉祥物型Logo:这种Logo类型较为少见,它以公司的吉祥物形象作为品牌识别。例如,米其林轮胎的吉祥物“米其林人”就是该公司标识的一部分。 除上述类型之外,也有结合文字与图像元素的Logo,这种设计将文字和图案或几何形状等元素相结合来构成品牌的独特标志。举例来说,特斯拉(Tesla)的Logo整合了公司的名字“Tesla”以及代表品牌的图形元素“T”形状。 二.midjourney画logo 好了,那么我们懂了那么多的logo知识后,我们就来看看怎么用midjourney来画以上的logo!。进入【此电脑】以后在顶部文件路径栏目输入:mj绘画.site(鼠标移到右侧的箭头点击)打开系统图片工具。 第一种midjourney画图形Logo: midjourney中文关键词:熊猫简笔画的logo,用于酒水饮料行业的图标,矢量,重绘,单色,以无和有勾勒人物的明暗对比,白色的背景 可以看到,其midjourney质量还是不错的,能基本满足你的要求,如果不满意,那么就利用midjourney重新生成就好了。 第二种midjourney画首字母Logo: midjourney中文关键词:logo设计,以字母c为图标,主要是用于汽车行业的,矢量,重绘,单色,白色的背景 可以看出midjourney画出来的图,第一个和最后一个还是比较满意的,有速度感,有设计感,非常的不错。 第三种midjourney几何图形Logo: midjourney中文关键词:logo设计,以五角星为图标,主要用于电脑显示器行业的,简易,矢量,重绘,单色,白色的背景 midjourney画出来的五角星,感觉这个质感不太行,那么我们就可以重新去进行生成,或者对我们的提示词进行修改,把你的想法代入到里面去。 第四种midjourney吉祥物Logo: midjourney中文关键词:logo设计,以猫为形象,用于烤鱼饮食行业,简易,矢量,重绘,单色,白色的背景 midjourney画出来的猫,感觉还是有点太复杂,一个logo还是要简单一点,那么我们就进行提示词修改。logo设计,以猫为形象,猫吃鱼,简笔画,用于烤鱼饮食行业,简易,矢量,重绘,单色,白色的背景 好了,以上就是关于midjourney设计logo怎么用的一些相关分享,希望本文能帮助到大家,如果想了解更多,欢迎继续关注小编哦。