SQLiteC/C++接口详细介绍之sqlite3类(九)

返回目录:SQLite—免费开源数据库系列文章目录 上一篇:SQLiteC/C++接口详细介绍之sqlite3类(八) 下一篇:​​SQLiteC/C++接口详细介绍之sqlite3类(十)(未发表)​​​​ 27.sqlite3_db_release_memory SQLite3提供的一个手动释放内存的函数,它可以用于在运行时释放一些已分配的内存,降低数据库占用内存的峰值以减少内存占用。该函数只释放一些可以被释放的内存,不会破坏数据的完整性和可用性。 sqlite3_db_release_memory函数的原型如下: int sqlite3_db_release_memory(sqlite3*); 其中,第一个参数是指向sqlite3对象的指针。 下面演示案例供参考: #include <stdio.h> #include "sqlite3.h" int main(void){ sqlite3 *db; sqlite3_open(":memory:", &db); sqlite3_db_release_memory(db); return sqlite3_close(db); } 在上面的代码中,创建了一个内存数据库对象,然后立即调用sqlite3_db_release_memory函数来释放该数据库对象占据的空间。 注意:这个函数并不能一次性释放所有内存,它只能尽量释放一部分已分配的内存,如果需要完全释放内存,可以考虑调用sqlite3_close函数。SQLite3的内存管理采用了一种分配器模型,该模型允许在需要时手动释放内存,也可以使用自动调整机制对内存进行优化和管理。因此,在应用程序设计中,我们应尽可能充分利用SQLite3提供的内存管理机制,避免对内存进行过多手动调整,以达到最佳的整体性能和内存效率。 28.sqlite3_db_status SQLite3提供的一个获取数据库状态的接口,它可以返回有关SQLite3数据库对象的各种状态信息,如内存使用、锁定情况、句柄数量等。这些状态信息可以帮助我们诊断和优化SQLite3应用程序的性能和资源使用,也可以被用于实现一些动态监控或资源调整的功能。 sqlite3_db_status函数的原型如下: int sqlite3_db_status(sqlite3*, int op, int *pCurrent, int *pHighwater, int resetFlag); 其中,第一个参数是指向sqlite3对象的指针,第二个参数是用来指定所需状态信息的选项。pCurrent和pHighwater参数是用来存放状态信息的两个整数,resetFlag参数用来指定是否应将与所选次数相关的计数器重置为0。 下面演示案例供参考: #include <stdio.h> #include "sqlite3.h" int main(void){ sqlite3 *db; int current, highwater; sqlite3_open(":memory:", &db); sqlite3_db_status(db, SQLITE_STATUS_MEMORY_USED, &current, &highwater, 0); printf("memory used = %d\n", current); sqlite3_close(db); return 0; } 在上面的代码中,我们创建了一个内存数据库对象,然后调用sqlite3_db_status函数并使用选项SQLITE_STATUS_MEMORY_USED来查询当前数据库对象使用的内存量。该函数会在current参数中返回当前内存使用量,而在highwater参数中返回内存使用峰值。这里我们使用了printf输出了当前内存使用量。

从政府工作报告探计算机行业发展

目录 一、政府工作报告中关于计算机行业的政策导向 二、新兴技术在计算机行业中的应用和推动作用 三、计算机行业在数字经济时代的角色和定位 四、国际合作在计算机行业发展中的作用 五、人才培养和科技创新在计算机行业可持续发展中的作用 政府工作报告不仅是政府工作的总结和规划,更是对各个行业发展趋势的深刻洞察和前瞻性指导。针对计算机行业,政府工作报告中提出了一系列政策导向,强调了新兴技术的重要性,并对数字经济和数字化转型、国际合作以及人才培养和科技创新等方面进行了论述。本文将从这些方面进行深入分析,探讨政策导向对行业发展的影响,以及企业如何把握机遇,推动创新发展。 一、政府工作报告中关于计算机行业的政策导向 政府工作报告中明确指出,要加强计算机行业的创新能力和核心竞争力,推动行业高质量发展。这包括加大对计算机行业的投入,支持关键核心技术研发,鼓励企业加大创新投入,加强知识产权保护等方面。这些政策导向为计算机行业的发展提供了有力的政策支持,为企业的创新发展创造了良好的环境。 二、新兴技术在计算机行业中的应用和推动作用 政府工作报告中特别强调了云计算、大数据、人工智能等新兴技术在计算机行业中的应用和推动作用。这些技术不仅提高了计算机行业的运行效率和服务质量,还催生了新的业态和商业模式,为行业发展注入了新的动力。企业应抓住这些新兴技术的发展机遇,加强技术研发和应用,推动产业升级和创新发展。 三、计算机行业在数字经济时代的角色和定位 政府工作报告中强调了数字经济和数字化转型的重要性,计算机行业作为数字经济的重要组成部分,在推动数字化转型方面发挥着关键作用。企业应积极拥抱数字化转型,利用计算机技术和新兴技术推动传统产业的转型升级,提升行业整体的数字化水平和竞争力。 四、国际合作在计算机行业发展中的作用 政府工作报告中提到要加强计算机行业的国际合作,这既是提升我国计算机行业水平和国际竞争力的重要途径,也是推动全球计算机行业共同发展的重要举措。通过国际合作,企业可以引进先进技术和管理经验,拓展国际市场,提升品牌影响力。同时,国际合作也有助于我国计算机行业在全球产业链和价值链中占据更有利的位置,推动行业的持续健康发展。 五、人才培养和科技创新在计算机行业可持续发展中的作用 政府工作报告中强调了人才培养和科技创新在计算机行业可持续发展中的重要性。随着计算机技术的不断发展和应用领域的不断拓展,对人才的需求也越来越迫切。企业应加大对人才培养的投入,建立完善的人才培养体系,吸引和留住优秀人才。同时,企业还应加强科技创新,推动关键核心技术的突破和创新,提升行业整体的科技水平和创新能力。

管理类联考--复试--英文面试--经典问题

文章目录 考研复试英语口试日常问题及连续表达问题一、考研复试英语口试的相关事项二、考研英语复试口语日常问题列举考研原因 (reasons for my choice)研究生期间你的计划 (plans in the postgraduate study)介绍你的家乡 (hometown)你的家庭 (family)你的大学 (university)研究生计划,你如何打算? (plans)关于所选、所学专业 (reasons for taking postgraduate exams) 三、考研英语复试口语连续表达问题列举一、考生在回答自由发挥题目时要明确题干中要求自己讨论的是什么,利用主题句加上支持细节的方法进行准备如下。二、经过上面的分析,考生可以在三个方面进行自己的个人陈述。三、点评 考官提问各院校常考话题精选英语复试口试题·常考话题2018年复旦大学税务专硕2017年同济大学中德学院2016年复旦大学国际商务专业2016年浙江财经大学金融学院2015年中国人民大学国际关系学院2015年中国人民大学MBA/MPA2011年山东大学电路与系统专业2011年华中科技大学计算机应用技术专业 英语面试的题目其实也有规律可循 考研复试英语口试日常问题及连续表达问题 一、考研复试英语口试的相关事项 对考研复试英语口语的考查,各个学校情况各不相同。有的学校制定了非常 详细的标准和流程,甚至规定了每个老师发问的方式和时间;有的只是面试老师的自由发挥,成绩也基本上由面试老师主观判定。不管面试是否严格控制,考生 对下面几个问题一定要认真准备: 一是:自我介绍,如自己来自什么地方,毕业学校,所学专业,业余喜好,家庭基本情况等信息。 二是:做好用英语讲解自己专业 的准备。 口语测试时老师有可能要求你就本专业展开话题,考查你用英语讲解陌生概念的能力。因此考生对此要有所准备,先用笔头组织这些问题的要点,然后再以 这些词组织语言。在阅读专业文献时,也要多积累一些专业方面的英语词汇。当然提问的问题不可能难度太高。 1、考试形式:内容包括自我介绍和提问回答,一般是一到两名老师参与口语考试,首先是考生自我介绍,其次是老师对同学的即兴提问。 2、提问一般包含如下两部分: 第一部分:考查学生理解并回答有关日常生活、家庭、工作、学习等问题的能力(3–5分钟)。 第二部分:考查学生连续表达的能力。考生从所给的问题中选择一个话题,就此话题表达自己的看法(7–10分钟)。 3、评价成绩一般为: (1)优秀——能用外语就指定的话题进行口头交流,基本没有困难。 (2)良好——能用外语就指定的题材进行口头交流,虽有些困难,但不影响交流。 (3)及格——能用外语就指定的话题进行简单的口头交流。 (4)不及格——不具有口头表达能力。 二、考研英语复试口语日常问题列举 考研原因 (reasons for my choice) There are several reasons. I have been deeply impressed by the academic atmosphere when I came here last summer. In my opinion, as one of the most famous XXX in our country, it provides people with enough room to get further enrichment.

linux下test,/usr/bin/test,[],和/usr/bin/[的作用及用法举例

1.test,/usr/bin/test,[],和/usr/bin/[介绍 首先,linux下test,/usr/bin/test,[],和/usr/bin/[命令都是等价命令 其次,linux下test,/usr/bin/test,[],和/usr/bin/[命令一般用来测试文件类型,或者用来比较字符串 test,/usr/bin/test,[],和/usr/bin/[命令的区别: 1.test是shell内建命令 [root@elasticsearch ~]# type test test is a shell builtin [root@elasticsearch ~]# 2./usr/bin/test是外部命令 [root@elasticsearch ~]# type /usr/bin/test /usr/bin/test is /usr/bin/test [root@elasticsearch ~]# 3.[],[是shell内建命令,需与]配合结尾 [root@elasticsearch ~]# type [ [ is a shell builtin [root@elasticsearch ~]# type ] -bash: type: ]: not found [root@elasticsearch ~]# 4./usr/bin/[是外部命令 [root@elasticsearch ~]# type /usr/bin/[ /usr/bin/[ is /usr/bin/[ [root@elasticsearch ~]# 2.test,/usr/bin/test,[],和/usr/bin/[用法举例 样例: [root@elasticsearch ~]# cat test.sh #!/bin/bash echo "1.test testing" if test -z "

关于Qt中的信号与槽

在Qt中,信号与槽是一种用于对象间通信的机制。信号是在特定事件发生时被发射的,而槽是在接收到信号时执行的函数。通过信号与槽,一个对象可以告诉其他对象某个事件已经发生,并提供有关该事件的信息。 以下是关于Qt中信号与槽的一些详细说明: 信号:信号是特殊的成员函数,用于通知其他对象某个事件的发生。信号不包含任何具体的实现,只是定义了函数的签名和返回值。在信号中可以包含参数,用于传递和描述事件的相关信息。信号通常被放在类的声明中,使用signals关键字标记。 槽:槽是一个普通的成员函数,用于接收信号并执行相应的操作。槽可以有任意数量的参数,但参数类型必须与信号的参数类型相匹配。槽的返回类型通常为void,但也可以有其他返回类型。槽可以被称为一个特定的函数,其名称和参数列表与信号匹配。 连接信号与槽:通过连接信号与槽,可以实现对象间的通信。连接通常在对象之间建立,在一个对象中的信号发射时,与之连接的槽将会被执行。可以通过使用connect函数来连接信号与槽。connect函数需要传递信号的发送者、信号的名称、槽的接收者和槽的名称。 信号与槽的参数:信号与槽可以使用任意类型的参数,但要求参数类型必须可复制(可拷贝)。如果信号发送者传递给多个槽相同的参数,那么槽将会接收到这些参数的副本。 信号与槽的线程安全:Qt中的信号与槽机制可以实现线程间的通信。在多线程环境下,当信号被发射时,槽的执行将由所连接的槽所在的线程来执行。通过使用Qt::DirectConnection或Qt::QueuedConnection连接类型,可以在不同的线程之间传递信号。 通过使用信号与槽,开发人员可以将代码分成更小的模块并实现更好的架构设计。信号与槽的机制提供了一种松耦合的方式来处理对象之间的通信,使代码更加可维护和可扩展。

Mybatis(搭建,CRUD,方法参数,XML映射文件,动态SQL)【详解】

目录 一.准备基础代码 Mybatis的通用配置 二. 基本CURD操作 1.查询-根据id查询一条 2.查询-查询数量 3.删除 4.新增 获取主键值 5.修改 6.查询-模糊查询 预编译SQL #{}与${}的区别【面试题】 三. Mybatis的方法参数与结果集 1.SQL里取方法参数的值 2.查询结果集的封装 方案一:SQL语句里给字段起别名 方案二:使用@Results和@Result手动映射 四.Mybatis的XML映射文件 1.介绍 2.用法 3.示例 4.给idea配置代码模板 五、Mybatis的动态SQL【重点】 1. 动态SQL介绍 2. if标签和where标签 3. set标签 4. foreach标签 5. sql标签和include标签 一.准备基础代码 把基础工程《资料\00.基础工程\web09-mybatis-curd》拷贝到不含中文、空格、特殊字符的目录里,然后使用idea直接open打开项目 准备基础环境 依赖pom.xml <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> </parent> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> <scope>runtime</scope> </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> </dependencies> 配置文件application.

【打造家庭服务器系列02】笔记本安装Ubuntu后的一些配置

一、如何开启和关闭蓝牙 方式一 # 安装蓝牙包 apt install bluez # 查看蓝牙信息 hciconfig -a # 关闭蓝牙 hciconfig hci0 down 方式二 # 查看蓝牙开启状态,关闭蓝牙状态 systemctl status bluetooth 二、查看电池电量 使用upower命令 upower --dump | grep --color=never -E "state|to\ full|to\ empty|percentage" state: discharging # 充电状态, discharging 表示未充电 time to empty: 21.8 hours # 应该是预计使用时长吧,我猜测 percentage: 89% # 电池剩余电量 但是我们不可能每次查看电池电量都输入这么一串命令,我们可以给这个命令设置一个别名,到时候直接输入别名就能查看 vim ~/.bashrc # 在末尾加入,power-now 就是设置的别名,可以自定义名称 alias power-now='upower --dump | grep --color=never -E "state|to\ full|to\ empty|percentage"' # 刷新bash bash root@rion-mi:~# power-now state: discharging time to empty: 21.

net/http 框架源码解读

一、Hello World 使用net/http编写一个简单的web服务器, 定义了一个UserHandler的处理函数,通过HandleFunc来将路由和handler进行绑定,最后通过ListenAndServe启动web服务,后面我将handler统称为视图函数 package main import "net/http" func UserHandler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World!")) } func main() { http.HandleFunc("/", UserHandler) http.ListenAndServe(":8080", nil) } 二、http.HandlFunc 源码解析 HandleFunc 接受两个参数,第一个是路由地址,第二个是一个视图函数,该函数接受两个参数 ResponseWriter 和 *Request ,前者是用来处理http请求的响应,后者是用来处理http请求的参数。 func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) { DefaultServeMux.HandleFunc(pattern, handler) } DefaultServeMux 是一个结构体变量,真实的结构体是ServeMux。 var DefaultServeMux = &defaultServeMux var defaultServeMux ServeMux type ServeMux struct { mu sync.RWMutex m map[string]muxEntry es []muxEntry // slice of entries sorted from longest to shortest.

SolidGen An Autoregressive Model for Direct B-rep Synthesis(SolidGen直接B-rep合成的自回归模型)【浅读】

SolidGen: An Autoregressive Model for Direct B-rep Synthesis(SolidGen:直接B-rep合成的自回归模型) 2023 Transactions on Machine Learning Research https://openreview.net/forum?id=ZR2CDgADRo 目录 摘要方法总结我的总结 摘要 边界表示(B-rep)格式是计算机辅助设计(CAD)中实体和薄片对象建模的实际形状表示。最近生成CAD模型的方法集中在学习草图和挤压建模序列上,这些序列由后处理中的实体建模内核执行,以恢复B-rep。在本文中,我们提出了一种新的方法,可以在不需要监督的情况下通过CAD建模序列数据来学习和合成brep。我们的方法SolidGen是一个自回归神经网络,通过使用基于Transformer和指针的神经网络预测顶点、边缘和面,直接对B-rep进行建模。实现这一目标的关键是我们的索引边界表示,它在一个定义良好的层次结构中引用B-rep顶点、边和面,以捕获适合机器学习使用的几何和拓扑关系。由于其B-rep分布的概率建模,SolidGen可以很容易地根据上下文进行调节,例如类标签、图像和体素。我们定性,定量地证明,并通过人类受试者的感知评估,SolidGen可以产生高质量,逼真的CAD模型。 本文的贡献: 我们提出了SolidGen,这是一种基于transformer和两级指针网络的新型生成模型,用于直接合成b -rep,而无需来自CAD建模操作序列的监督。据我们所知,SolidGen是第一个可以直接合成b -rep的生成模型。我们提出了一种新的表示,即索引边界表示,它可以将B-reps表示为适合机器学习使用的数字数组,同时仍然允许B-reps的几何和拓扑完全恢复。我们演示了如何通过使用类标签、图像和体素来实现B-reps的可控生成。相比之下,我们的方法是一个自回归生成模型,除了点云之外,还支持更多的输入模式,如图像和类,并且不需要昂贵的优化步骤来构建合理的B-reps。 方法 总结 总结。我们提出了一个生成模型SolidGen,它可以直接学习和合成有界任意表示(B-rep) CAD模型,而不需要来自CAD建模序列的监督 操作。我们通过派生索引的B-rep格式来实现这一点,该格式捕获的层次结构特性B-rep顶点,边和面在一个新的机器学习友好的表示。SolidGen生成在我们与先前工作的比较中证明了连贯而多样的b -代表。我们的方法有潜力要集成到CAD软件的工作流程中,因为所有CAD软件都允许导入实体而无需建模的历史。由于我们的方法可以生成B-rep拓扑的局部区域,除了整个实体,这使得基于学习的技术在许多其他工作流程中发挥作用,例如实体模型绘制和分型面创建。条件生成可以帮助基于草图的建模工作流转换点云,网格或其他文件格式为B-reps进一步编辑。 我的总结 该文主要应用于CAD的生成,和我的方向不匹配

基于卷积神经网络知识识别算法的三维CAD模型分类【浅读】

Classification of 3D CAD Models considering the Knowledge Recognition Algorithm of Convolutional Neural Network(基于卷积神经网络知识识别算法的三维CAD模型分类) 2022 Hindawi 摘要 为了提高三维CAD模型的分类效果,本文结合卷积神经网络的知识识别算法,构建三维CAD模型classi cation模型。此外,本文还分析了卷积神经网络算法在三维CAD模型分类中的应用,改进了知识识别算法,构建了卷积神经网络的基本结构。此外,本文在改进算法的支持下构建了智能识别模型,设计实验验证本文的效果,并根据统计测试结果绘制了可视化显示统计图。通过实验研究,可以知道本文提出的基于卷积神经网络知识识别算法的三维CAD分类模型可以有效地提高CAD模型的分类效果。 方法 结论 由于工业CAD模型的分类需要丰富的专业领域知识,在大多数情况下,分类工作主要由工程师进行。 传统的自动分类算法是通过用户设计一定的特征描述提取算法提取特征描述符,并利用机器学习算法完成对模型的自动分类。然而,由于三维模型本身的复杂性,这种由用户设计的特征描述符提取算法难以完整、准确地捕获三维模型的特征信息,表达能力有限。浅机器学习的缺点是,由于训练集和计算能力不足,限制了固有难以求解的函数的表达效果。本文结合卷积神经网络的知识识别算法构建三维CAD分类模型,提高三维CAD模型的分类效果,提高工业设计的工作效率。实验研究结果表明,本文提出的基于卷积神经网络知识识别算法的三维CAD分类模型可以有效地提高CAD模型的分类效果。 我的看法 实验不足,期刊不好无价值。

使用线程池比手动创建线程好在哪?

今天聊一聊为什么使用线程池比手动创建线程要好,具体好在哪里? 为什么要使用线程池 首先,回顾线程池的相关知识,在 Java 诞生之初是没有线程池的概念的,而是先有线程,随着线程数的不断增加,人们发现需要一个专门的类来管理它们,于是才诞生了线程池。没有线程池的时候,每发布一个任务就需要创建一个新的线程,这样在任务少时是没有问题的,如代码所示。 /** * 描述: 单个任务的时候,新建线程来执行 */ public class OneTask { public static void main(String[] args) { Thread thread0 = new Thread(new Task()); thread0.start(); } static class Task implements Runnable { public void run() { System.out.println("Thread Name: " + Thread.currentThread().getName()); } } } 在这段代码中,我们发布了一个新的任务并放入子线程中,然后启动子线程执行任务,这时的任务也非常简单,只是打印出当前线程的名字,这种情况下,打印结果显示 Thread Name: Thread-0,即我们当前子线程的默认名字。 我们来看一下任务执行流程,如图所示,主线程调用 start() 方法,启动了一个 t0 的子线程。这是在一个任务的场景下,随着我们的任务增多,比如现在有 10 个任务了,那么我们就可以使用 for 循环新建 10 个子线程,如代码所示。 /** * 描述: for循环新建10个线程 */ public class TenTask { public static void main(String[] args) { for (int i = 0; i < 10; i++) { Thread thread = new Thread(new Task()); thread.

手动创建线程池各个参数的意义?

今天我们学习线程池各个参数的含义,并重点掌握线程池中线程是在什么时机被创建和销毁的。 线程池的参数 首先,我们来看下线程池中各个参数的含义,如表所示线程池主要有 6 个参数,其中第 3 个参数由 keepAliveTime + 时间单位组成。我们逐一看下它们各自的含义,corePoolSize 是核心线程数,也就是常驻线程池的线程数量,与它对应的是 maximumPoolSize,表示线程池最大线程数量,当我们的任务特别多而 corePoolSize 核心线程数无法满足需求的时候,就会向线程池中增加线程,以便应对任务突增的情况。 线程创建的时机 接下来,我们来具体看下这两个参数所代表的含义,以及线程池中创建线程的时机。如上图所示,当提交任务后,线程池首先会检查当前线程数,如果此时线程数小于核心线程数,比如最开始线程数量为 0,则新建线程并执行任务,随着任务的不断增加,线程数会逐渐增加并达到核心线程数,此时如果仍有任务被不断提交,就会被放入 workQueue 任务队列中,等待核心线程执行完当前任务后重新从 workQueue 中提取正在等待被执行的任务。 此时,假设我们的任务特别的多,已经达到了 workQueue 的容量上限,这时线程池就会启动后备力量,也就是 maximumPoolSize 最大线程数,线程池会在 corePoolSize 核心线程数的基础上继续创建线程来执行任务,假设任务被不断提交,线程池会持续创建线程直到线程数达到 maximumPoolSize 最大线程数,如果依然有任务被提交,这就超过了线程池的最大处理能力,这个时候线程池就会拒绝这些任务,我们可以看到实际上任务进来之后,线程池会逐一判断 corePoolSize、workQueue、maximumPoolSize,如果依然不能满足需求,则会拒绝任务。 corePoolSize 与 maximumPoolSize 通过上面的流程图,我们了解了 corePoolSize 和 maximumPoolSize 的具体含义,corePoolSize 指的是核心线程数,线程池初始化时线程数默认为 0,当有新的任务提交后,会创建新线程执行任务,如果不做特殊设置,此后线程数通常不会再小于 corePoolSize ,因为它们是核心线程,即便未来可能没有可执行的任务也不会被销毁。随着任务量的增加,在任务队列满了之后,线程池会进一步创建新线程,最多可以达到 maximumPoolSize 来应对任务多的场景,如果未来线程有空闲,大于 corePoolSize 的线程会被合理回收。所以正常情况下,线程池中的线程数量会处在 corePoolSize 与 maximumPoolSize 的闭区间内。 “长工”与“临时工” 我们可以把 corePoolSize 与 maximumPoolSize 比喻成长工与临时工,通常古代一个大户人家会有几个固定的长工,负责日常的工作,而大户人家起初肯定也是从零开始雇佣长工的。假如长工数量被老爷设定为 5 人,也就对应了 corePoolSize,不管这 5 个长工是忙碌还是空闲,都会一直在大户人家待着,可到了农忙或春节,长工的人手显然就不够用了,这时就需要雇佣更多的临时工,这些临时工就相当于在 corePoolSize 的基础上继续创建新线程,但临时工也是有上限的,也就对应了 maximumPoolSize,随着农忙或春节结束,老爷考虑到人工成本便会解约掉这些临时工,家里工人数量便会从 maximumPoolSize 降到 corePoolSize,所以老爷家的工人数量会一致保持在 corePoolSize 和 maximumPoolSize 的区间。

物联网毕设 -- 指纹密码锁(指纹+STM32+云平台+APP)

前言 一 连线图 1 原理图 2 PCB效果(开发版不适用) 3 实物效果 4 APP效果 5 功能概括 (1)硬件端 (2)APP端 (3)云平台使用(阿里云)(需要可以找我获取) (4)演示视频 二 底层代码使用方式 1 使用说明 2 下载程序 三 APP使用方式 四 程序架构及修改(通用) 前言 该设备具有多种功能,包括使用4X4密码键盘进行密码解锁,使用电磁锁进行大门的开关控制,使用OLED显示屏实时显示输入的秘密以及设备状态,使用蜂鸣器与LED灯进行设备状态异常报警,以及添加指纹解锁功能。在APP端,用户可以进行登录、密码管理、开锁权限设置和一键开锁等操作。管理员还可以对密码进行修改和查询,并赋予用户开锁的权限。同时,如果密码输入错误超过3次,蜂鸣器会报警,并在120秒后才能继续输入密码。 关注微信公众号--星之援工作室 发送关键字(项目清单) 可获取项目清单资料 ➡️🫡🫡🫡🫡🫡🫡🫡🫡➡️ ⚠️⚠️(本文章仅提供思路和实现方法,并不包含代码,需要代码的同学请自行联系博主) ⚠️⚠️(有疑问或需要定制或者技术支持等,也请自行联系博主)⚠️⚠️ 一 连线图 1 原理图 开发板资料链接下载: 链接: 开发板资料https://pan.baidu.com/s/1c_uSIiXXMSLfkND4FPGWyw?pwd=XZY0 开发板本身自带一个LED ,这个LED作为我们查看网络连接状态和获取数据状态的说明 (1)若MCU上面的的LED处于闪烁状态,则说明我们的设备处于正常运行,若LED灯不再闪烁,请按复位键将程序手动复位一次 (2)硬件每隔3秒会向APP传输一次数据。 2 PCB效果(开发版不适用) 3 实物效果 4 APP效果 5 功能概括 (1)硬件端 使用4X4密码键盘进行密码解锁(输出错误次数超过5次自动进行锁机30S)使用电磁锁进行大门的开关控制;使用0.96寸OLED显示屏实时显示输入的秘密以及设备状态使用蜂鸣器与LED灯进行设备状态异常报警报警功能: 密码输入错误的时候给出相应的提醒,如果次数超过 3 次,蜂鸣器就报警,并且120 S后才可继续输入密码。指纹模块:添加指纹解锁功能 (2)APP端 登录功能:第一次使用 app,需要输入用户姓名、年龄、性别、籍贯和联系方式,然后登录(注册的信息都保存到本地数据库中)。密码管理功能:管理员可以对密码进行修改和查询,普通用户只有输入密码进行开锁的功能。用户开锁权限设置:管理员可以查看用户信息,并赋予用户开锁的权限,只有被授权过的用户才能开锁成功。用户一键开锁:被授权的用户可以使用手机app一键开锁,也可以硬件键盘输入密码的方式开锁 (3)云平台使用(阿里云)(需要可以找我获取) 只是链接各个设备使用,采用MQTT即时通讯; (4)演示视频 链接: 演示视频https://pan.baidu.com/s/1Zf1AKD6tYYBtkHRs-B3cOg?pwd=XZY0 提取码:XZY0 二 底层代码使用方式 1 使用说明 (1).

蛇形卷积【浅读 / 即插即用】

Dynamic Snake Convolution based on Topological Geometric Constraints for Tubular Structure Segmentation(基于拓扑几何约束的动态蛇形卷积管状结构分割) https://github.com/YaoleiQi/DSCNet 目录 摘要结论代码 摘要 拓扑管状结构(如血管和道路)的准确分割在各个领域都至关重要,可以确保下游任务的准确性和效率。然而,许多因素使任务复杂化,包括薄的局部结构和可变的全局形态。在这项工作中,我们注意到管状结构的特殊性,并利用这一知识指导我们的DSCNet在三个阶段同时增强感知:特征提取、特征融合和损失约束。首先,我们提出了一种动态蛇形卷积,通过自适应聚焦细长和弯曲的局部结构来准确捕捉管状结构的特征。随后,我们提出了一种多视角特征融合策略,以补充特征融合过程中对多个视角特征的关注,确保保留来自不同全局形态的重要信息。最后,提出了一种基于持久同调的连续性约束损失函数,以更好地约束分割的拓扑连续性。在二维和三维数据集上的实验表明,与几种方法相比,我们的DSCNet在管状结构分割任务上具有更好的准确性和连续性。 具体贡献有三个方面: (1)提出了一种动态蛇形卷积算法,自适应聚焦于细长和弯曲的局部特征,在二维和三维数据集上实现管状结构的精确分割。我们的模型使用内部和外部测试数据进行了彻底验证。(2)提出多视角特征融合策略,补充对多视角重要特征的关注。(3)提出一种基于持久同调的拓扑连续性约束损失函数,较好地约束了分割的连续性。 结论 在本研究中,我们关注管状结构的特殊特征,并利用这些知识指导模型在特征提取、特征融合和损失约束三个阶段同时增强感知。首先,我们提出了一种动态蛇形卷积,自适应聚焦于细长和扭曲的结构,从而准确捕捉管状结构的特征。其次,引入多视角特征融合策略,弥补了特征融合过程中多角度关注特征的不足,保证了不同全局形态的重要信息被保留;最后,我们提出了拓扑连续性约束损失来约束分割的拓扑连续性。在二维和三维数据集上对该方法进行了验证,结果表明,与几种方法相比,该方法在管状结构分割任务上具有更好的准确性和连续性。 代码 # -*- coding: utf-8 -*- import os import torch from torch import nn import einops from typing import Union """Dynamic Snake Convolution Module""" class DSConv_pro(nn.Module): def __init__( self, in_channels: int = 1, out_channels: int = 1, kernel_size: int = 9, extend_scope: float = 1.0, morph: int = 0, if_offset: bool = True, device: Union[str, torch.

Spring Boot 获取maven打包时间

引入maven打包插件 <build> <plugins> <!-- 打包时生成打包时间 --> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>buildnumber-maven-plugin</artifactId> <version>3.2.0</version> <configuration> <timestampFormat>yyyy-MM-dd HH:mm:ss</timestampFormat> </configuration> <executions> <execution> <goals> <goal>create-timestamp</goal> </goals> </execution> </executions> <inherited>false</inherited> </plugin> </plugins> <!-- maven打包时包含静态资源文件 --> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.yaml</include> <include>META-INF/**</include> <include>**/*.xml</include> </includes> <!-- true表示maven会对文件进行过滤,将@project.version@替换为该属性的值 --> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build> application.properties内引用 #获取build时的时间 app.buildTime=@timestamp@ #获取项目版本 app.version=@project.version@

python爬虫实战——小红书

目录 1、博主页面分析 2、在控制台预先获取所有作品页的URL 3、在 Python 中读入该文件并做准备工作 4、处理图文类型作品 5、处理视频类型作品 6、异常访问而被中断的现象 7、完整参考代码 任务:在 win 环境下,利用 Python、webdriver、JavaScript等,获取 xiaohongshu 某个博主的全部作品。 本文仅做学习和交流使用。 1、博主页面分析 section 代表每一项作品,但即使博主作品有很多,在未登录状态下,只会显示 20 项左右。向下滚动页面,section 发生改变(个数不变),标签中的 index 会递增。 向下滚动页面时,到一定的范围时,会发送一个获取作品数据的请求,该请求每次只请求 30 项作品数据。该请求携带了 cookies 以及其他不确定值的参数。 2、在控制台预先获取所有作品页的URL 为了获取博主的全部作品数据,在登录的状态下访问目标博主页面,在控制台中注入JavaScript 脚本(在没有滚动过页面的情况下)。该脚本不断滚动页面到最底部,每次滚动一段距离后,都获取每一个作品的信息(通过a标签的 href 获取到作品页URL;通过判断a标签是否有一个 class='play-icon' 的后代元素来判断是图文还是视频类型的作品,如果有该标签就是视频作品,反之则是图文作品)。 将作品页 URL 作为键,作品是视频作品还是图文作品作为值,添加到 js 对象中。 显示完所有的作品,即滚动到最底部时,将所有获取到的作品信息导出为 txt 文件。 在控制台中执行: // 页面高度 const vh = window.innerHeight let work_obj = {} // 延迟 function delay(ms){ return new Promise(resolve => setTimeout(resolve, ms)); } async function action() { let last_height = document.

每日OJ题_简单多问题dp②_力扣213. 打家劫舍 II

目录 力扣213. 打家劫舍 II 解析代码 力扣213. 打家劫舍 II 213. 打家劫舍 II 难度中等 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。 示例 1: 输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2), 因为他们是相邻的。 示例 2: 输入:nums = [1,2,3,1] 输出:4 解释:你可以先偷窃 1 号房屋(金额 = 1),然后偷窃 3 号房屋(金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。 示例 3: 输入:nums = [1,2,3] 输出:3 提示: 1 <= nums.length <= 1000 <= nums[i] <= 1000 class Solution { public: int rob(vector<int>& nums) { } }; 解析代码 两种情况下的最大值,就是最终的结果。

OpenCV亮度对比度调节

static void on_track_lightness(int b, void* user_data) { Mat image = *((Mat *)user_data); if (image.empty()) return; Mat dst = Mat::zeros(image.size(), image.type()); Mat m = Mat::zeros(image.size(), image.type()); addWeighted(image, 1.0, m, 0, b, dst); imshow("亮度对比度调节", dst); } static void on_track_contrast(int b, void* user_data) { Mat image = *((Mat *)user_data); Mat dst = Mat::zeros(image.size(), image.type()); Mat m = Mat::zeros(image.size(), image.type()); double contrast = b / 100.0; addWeighted(image, contrast, m, 0.0, 0, dst); imshow("亮度对比度调节", dst); } void on_pushButton_brightness_clicked() { namedWindow("

【Python学习篇】Python基础入门学习——Python基础语法(二)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由妄北y原创,首发CSDN🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导航: 妄北y系列专栏导航: C/C++的基础算法:C/C++是一种常用的编程语言,可以用于实现各种算法,这里我们对一些基础算法进行了详细的介绍与分享。🎇🎇🎇 QT基础入门学习:对QT的基础图形化页面设计进行了一个简单的学习与认识,利用QT的基础知识进行了翻金币小游戏的制作🤹🤹🤹 Linux基础编程:初步认识什么是Linux,为什么学Linux,安装环境,进行基础命令的学习,入门级的shell编程。🍻🍻🍻 Linux应用开发基础开发:分享Linux的基本概念、命令行操作、文件系统、用户和权限管理等,网络编程相关知识,TCP/IP 协议、套接字(Socket)编程等,可以实现网络通信功能。💐💐💐 Linux驱动开发:Linux驱动开发是Linux操作系统中非常关键的一部分,驱动程序是一种特殊的程序,它包含有关硬件设备的信息,并充当操作系统与硬件之间的桥梁。驱动开发的主要目标是让硬件设备能够在Linux系统上正常运行,并实现与操作系统之间的无缝连接。💪💪💪 Linux项目开发:Linux基础知识的实践,做项目是最锻炼能力的一个学习方法,这里我们会学习到一些简单基础的项目开发与应用,而且都是毕业设计级别的哦。🤸🤸🤸 非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨ ​ 文章介绍: 🎉本篇文章对Python学习的相关知识进行分享!🥳🥳🥳 Python基础语法是编程的核心知识之一,学习它可以帮助学习者掌握编程的基本概念、术语和技巧。这些基础知识对于后续学习其他编程语言或深入Python的高级特性都非常重要。 如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作动力的源泉,让我们一起加油,一起奔跑,让我们顶峰相见!!!💪💪💪 🎁感谢大家点赞👍收藏⭐评论✍️ 目录: 目录 一、字面量: 1.1 什么是字面量: 1.2 常用的值类型 1.3 字符串 1.4 如何在代码中写它们 二、注释: 2.1 注释的作用 2.2 注释的分类 三、变量: 3.1 什么是变量 3.2 变量的特征 四、数据类型: 4.1 数据类型 4.2 type()语句 4.3 type()语句的使用方式 4.4 type()语句的使用方式 4.5 字符串类型的不同定义方式 五、数据类型转换: 5.1 为什么要转换类型 5.2 常见的转换语句 5,3 类型转换注意事项 六、标识符: 6.1 什么是标识符

四、MySQL

MySQL MySQL1.初识网站2.安装MySQL2.1 下载(最重要的一点是路径中不能有中文,哪怕是同级目录也不行)2.2安装补丁2.3安装2.4创建配置文件2.5初始化 3.启动MySQL4.连接测试4.1 设置密码4.2 查看已有的文件夹(数据库)4.3 退出(关闭连接)4.4 再连接MySQL 5.忘记密码小结6.MySQL指令6.1数据库管理文件(文件夹)6.2数据表的管理(文件)6.3 数据行操作1.新增数据2.删除数据3.修改数据4.查询数据 小结 7.案例:员工管理7.1创建表结构7.2python操作MySQL1.创建数据库2.查询数据3.删除数据4.修改数据 8.案例:Flask+MySQL8.1新增用户8.2查询所有用户 MySQL python相关:基础、函数、数据类型、面向、模块。 前端开发:HTML、CSS、JavaScript、jQuery。【静态页面】 Java+前端;python+前端;Go+前端 -> 【动态页面】 直观: 静态,写死了,页面永远长一个样子。动态页面,页面上的数据可以实时的修改和展示。 1.初识网站 默认编写的静态效果 动态:需要用到Web框架的功能。 对于目前的我们来看,都什么可以做数据的存储: txt文件 excel文件 专业的软件:数据库管理系统。 MySQL(*)免费 Oracle/SQLServer/DB2/Access... 今日概要: MySQL安装 & 配置MySQL的启动和关闭指令(*)Python第三方模块,发送指令并获取MySQL返回的结果。 2.安装MySQL MySQL,本质上就是一个软件。 8.x5.x,课堂上5.7.31版本windows补丁MySQL压缩包 2.1 下载(最重要的一点是路径中不能有中文,哪怕是同级目录也不行) 参考一下博主这个就可以安装好:https://blog.csdn.net/i_for/article/details/131133383?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171025622116800185830297%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=171025622116800185830297&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-131133383-null-null.142v99pc_search_result_base2&utm_term=mysql8.0.26%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&spm=1018.2226.3001.4187 https://downloads.mysql.com/archives/community/ 2.2安装补丁 2.3安装 2.4创建配置文件 2.5初始化 3.启动MySQL 启动MySQL一般有两种方式: 临时启动(不建议) 制作成Windows服务,服务来进行关闭和开启。 制作服务 将目录添加到系统环境变量后,之后在cmd后,直接输入mysql -u root -p 4.连接测试 4.1 设置密码 set password = password('root123'); 4.2 查看已有的文件夹(数据库) show databases; 4.3 退出(关闭连接) exit; 4.4 再连接MySQL 汇总命令: