C#十大排序总结

传送门 一、C#冒泡排序算法-CSDN博客 二、C#选择排序算法-CSDN博客 三 C#插入排序算法-CSDN博客 未完待续。。。

C++实现直接使用初始化列表来实现成员变量初始化

在C++类初始化过程中,我们有的时候希望直接通过参数列表初始化所有的参数,或者像vector一样,我们直接通过vector<int> a{1,2,3,4,5}的方式初始化,那么这种方式是如何实现的呢?C++中,std::initializer_list直接给我们提供了这一工具来实现此功能,可以首先将数据读入改模板的实例来传参进行初始化,我们通过一个实例来说明: #include<iostream> #include <initializer_list> template <std::size_t T_size> class testArray { int m_flags[T_size]; public: testArray(std::initializer_list<int> il) { int i = 0; for (auto p = il.begin(); p != il.end() && i < T_size; p++) m_flags[i++] = *p; } testArray() { for (std::size_t i = 0; i < T_size; i++) { m_flags[i] = 0; } } void print() { for (std::size_t i = 0; i < T_size; i++) { std::cout << m_flags[i] << std::endl; } } }; int main() { testArray<5> t1; t1.

在Latex中优雅的插入svg图片(Ubuntu22.04)

文章目录 一、前言二、准备工作三、脚本编程四、结论 一、前言 在 LaTeX \LaTeX LATE​X 中,插入图片常用的为 figure 环境加 \includegraphics 命令: \begin{figure}[!htbp] \centering \includegraphics[width=\textwidth]{图片名.jpg/jpeg/png/pdf} \caption{标题}\label{标签} \end{figure} 然而如果我们的图片为 SVG 图,直接进行插入是会报错的: 主要报错信息如下: ! Unable to read an entire line---bufsize=200000. Please increase buf_size in texmf.cnf. 百度是能找到很多 svg 图转其他格式图片的方法的,用 Python 也能做,这里主要介绍结合 bash 脚本进行批量处理。 二、准备工作 首先使用 apt-get 安装 inkscape 工具: sudo apt-get install inkscape -y 其主要思路就是使用 inkscape 工具将目录下的 svg 图片逐一转换为 pdf 文件,这样便能通过上述 \includegraphics 命令插入: inkscape --export-filename=图片名.pdf 图片名.svg 三、脚本编程 对于一整个文件夹的 svg 图片,我们希望能通过脚本实现自动将其全部转换为 pdf 文件以方便我们插入,在 svg 图片目录下打开终端,新建文件 convert_svg_to_pdf.

后端工程师快速使用vue和Element

文章目录 Vue1 Vue概述2 快速入门3 Vue指令3.1 v-bind和v-model3.2 v-on3.3 v-if和v-show3.4 v-for3.5 案例 4 生命周期 Element快速使用1 Element介绍2 快速入门3 当前页面中嵌套另一个页面案例代码案例截图 Vue 1 Vue概述 通过我们学习的html+css+js已经能够开发美观的页面了,但是开发的效率还有待提高,那么如何提高呢?我们先来分析下页面的组成。一个完整的html页面包括了视图和数据,数据是通过请求 从后台获取的,那么意味着我们需要将后台获取到的数据呈现到页面上,很明显, 这就需要我们使用DOM操作。正因为这种开发流程,所以我们引入了一种叫做MVVM(Model-View-ViewModel)的前端开发思想,即让我们开发者更加关注数据,而非数据绑定到视图这种机械化的操作。那么具体什么是MVVM思想呢? MVVM:其实是Model-View-ViewModel的缩写,有3个单词,具体释义如下: Model: 数据模型,特指前端中通过请求从后台获取的数据View: 视图,用于展示数据的页面,可以理解成我们的html+css搭建的页面,但是没有数据ViewModel: 数据绑定到视图,负责将数据(Model)通过JavaScript的DOM技术,将数据展示到视图(View)上 如图所示就是MVVM开发思想的含义: 基于上述的MVVM思想,其中的Model我们可以通过Ajax来发起请求从后台获取;对于View部分,我们将来会学习一款ElementUI框架来替代HTML+CSS来更加方便的搭建View;而今天我们要学习的就是侧重于ViewModel部分开发的vue前端框架,用来替代JavaScript的DOM操作,让数据展示到视图的代码开发变得更加的简单。可以简单到什么程度呢?可以参考下图对比: 在更加复杂的dom操作中,vue只会变得更加的简单!在上述的代码中,我们看不到之前的DOM操作,因为vue全部帮我们封装好了。 接下来我们来介绍一下vue。 Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 框架即是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。基于框架进行开发,更加快捷、更加高效。 2 快速入门 接下来我们通过一个vue的快速入门案例,来体验一下vue。 第一步:在VS Code中创建名为12. Vue-快速入门.html的文件,并且在html文件同级创建js目录,将资料/vue.js文件目录下得vue.js拷贝到js目录,如下图所示: 第二步:然后编写<script>标签来引入vue.js文件,代码如下: <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> 第三步:在js代码区域定义vue对象,代码如下: <script> //定义Vue对象 new Vue({ el: "#app", //vue接管区域 data:{ message: "Hello Vue" } }) </script> 在创建vue对象时,有几个常用的属性: el: 用来指定哪儿些标签受 Vue 管理。 该属性取值 #app 中的 app 需要是受管理的标签的id属性值data: 用来定义数据模型methods: 用来定义函数。这个我们在后面就会用到 第四步:在html区域编写视图,其中{{}}是插值表达式,用来将vue对象中定义的model展示到页面上的

【开源】SpringBoot框架开发毕业生追踪系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.3 新增荣誉5.4 新增留言5.5 查询证书 六、免责说明 一、摘要 1.1 项目介绍 基于JAVA+Vue+SpringBoot+MySQL的毕业生追踪系统,包含了毕业去向填报模块、校友论坛模块、学生荣誉模块、学生证书模块、学历深造模块,还包含系统自带的用户管理、班级管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,毕业生追踪系统基于角色的访问控制,给学生、教务管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。 1.2 项目录屏 二、功能模块 毕业生追踪系统针对毕业生管理信息化而设计的。系统可以统计毕业生信息,毕业方向,进行数据分析便于管理员对各毕业生进行管理,且设计了校园论坛,毕业生可在校园论坛内发布招聘信息,求职信息。系统通过JAVA技术平台进行研发和创新,采用的是MVC模式。其中使用Spring、SpringBoot等开源框架进行后端开发,使用Vue框架构建前端,使用MySQL数据库存储数据,使用Tomcat作为服务器。系统实现了学校采集毕业生就业信息、统计就业数据、跟踪分析就业动向等。 毕业生追踪系统的功能性需求主要包含登陆注册模块、学生基本配置模块、就业状况模块、学历深造模块、信息汇总分析模块、校友论坛六大模块,是基于浏览器运行的web管理后端,其中各个模块详细说明如下。 2.1 登陆注册模块 登陆注册模包含了系统登陆功能和注册功能。我们需要建立这个模块给老师和学生提供登陆注册服务,登陆需要提供账号、密码和验证码,注册则需要提供登陆账户、密码、手机号、手机验证码数据。 2.2 学生基本配置模块 学生基本配置模块包含了学生的基础数据,如学生id、姓名、性别、手机号、身份证号、学院、班级等信息。 2.3 就业状况模块 就业状况模块包含了学生毕业后的就业情况,如未就业、已就业、升学、入伍、创业等等,已经就业的同学需要填写所在岗位、薪资区间等信息,在这个模块进行维护。 2.4 学历深造模块 部分学生在毕业之后选择了升学,所以对这一类学生需要额外分析管理,需要学生填写院校以及专业信息,分析出各个班级、各个专业的考研率、升学率等等,为高校决策出谋划策。 2.5 信息汇总分析模块 信息汇总分析模块放置了若干图表,用于对毕业生的去向进行图表分析,可以给管理员更加直管的数据展示。 2.6 校友论坛模块 校友论坛模块提供了留言板的功能,毕业生可以在这个模块进行留言互动,增加毕业生之间的联系。 三、系统设计 3.1 用例设计 3.2 实体设计 通过需求功能分析以及各个模块的设计,最后将每个模块都进行数据库的设计,并且通过E-R图来进行展示。 学生基本配置模块是对学生的账号进行记录并管理,其中学生的信息包括了学生的学生ID、姓名、性别、身份证号、学院、班级、出生日期、手机号、邮箱、备注等,其中学生ID是系统用户的确定性因素。 就业状况模块是对学生的就业状况进行记录并管理,其中就业状况的信息包括了学生ID、学生姓名、学生性别、手机号、身份证、毕业班级、就业去向、是否就业、备注等,其中学生ID是学生的确定性因素。 校友论坛模块是对毕业生的留言进行管理,毕业生进行的每一条留言都是一条记录,该记录包括了学生ID、学生姓名、学生性别、手机号、毕业班级、发送内容、回复ID、是否发送、发送时间、备注等,其中学生ID是学生的确定性因素。 四、系统展示 五、核心代码 5.1 查询我的就业状况 @RequestMapping(value = "/getMyOne", method = RequestMethod.GET) @ApiOperation(value = "

我手写的轮子开源了

我手写的轮子开源了 文章目录 1.gitee坐标和地址1.1.gitee坐标1.2.gitee地址 2.github坐标和地址2.1.github坐标2.2.github地址 3.总结 1.gitee坐标和地址 1.1.gitee坐标 <dependency> <groupId>io.gitee.bigbigfeifei</groupId> <artifactId>es-spring-boot-start</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>io.gitee.bigbigfeifei</groupId> <artifactId>mqtt-spring-boot-start</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>io.gitee.bigbigfeifei</groupId> <artifactId>rabbitmq-spring-boot-start</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>io.gitee.bigbigfeifei</groupId> <artifactId>ding-robot-spring-boot-start</artifactId> <version>1.0</version> </dependency> 1.2.gitee地址 https://gitee.com/BigBigFeiFei/es-spring-boot-start https://gitee.com/BigBigFeiFei/mqtt-spring-boot-start https://gitee.com/BigBigFeiFei/rabbitmq-spring-boot-start https://gitee.com/BigBigFeiFei/ding-robot-spring-boot-start 2.github坐标和地址 2.1.github坐标 <dependency> <groupId>io.github.bigbigfeifei</groupId> <artifactId>es-spring-boot-start</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>io.github.bigbigfeifei</groupId> <artifactId>mqtt-spring-boot-start</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>io.github.bigbigfeifei</groupId> <artifactId>rabbitmq-spring-boot-start</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>io.github.bigbigfeifei</groupId> <artifactId>ding-robot-spring-boot-start</artifactId> <version>1.0</version> </dependency> 2.2.github地址 https://github.com/BigBigFeiFei/es-spring-boot-start https://github.com/BigBigFeiFei/mqtt-spring-boot-start https://github.com/BigBigFeiFei/rabbitmq-spring-boot-start https://github.com/BigBigFeiFei/ding-robot-spring-boot-start 3.总结 这几个starter我觉得思路最好的就是这个rabbitmq-spring-boot-start,这个思路适用于springBoot官方提供的所有的start的重写,如果你想玩多个配置的话,这个思路是一个不错的选择,全网我各种搜索都还没有这种实现的,我基本测试了下,是ok的,上面提供出来的包我都引入项目测试了都是可以跑起来了的,这几个start都有readme.md文件的,教程都写的很清楚的还有我之前的文章链接的,如果大家在使用的过程中遇到啥问题bug可以联系我,或者自己把源码拉下来改改也是可以的,毕竟我这个是开源的,这个就是平时的一些项目代码中的沉淀,也不能白搞,总还是有收获的,总得留下点什么嘛,虽然说写的一般但是思路还是可以的,毕竟网上都还没有哪个人这种搞过的,用习惯了springBoot官方提供的,已经形成了定势思维了,也没有说想着把它推翻重造的想法和实践,都是喜欢用现成的,能跑就行,但是如果你有自己的思路然后把springBoot官方的提供的可以推翻重写的话,我相信乐趣是无穷的,同时给你带来成就感,写代码其实也并没有那么枯燥乏味,也有乐趣和充满了探索实践在里面的,如果后续有啥新的想法实现也会开源的,如果想用springBoot3.x来自动装配需要对源码进行修改,里面的依赖需要换成springBoot3.x相关的依赖,springBoot3.x的starter的写法跟springBoot2.x的略有不同,这个可以去网上百度,这几个starter配置使用都很简单,对业务使用友好,效率高,让代码更简洁,这几个项目如果后续有啥拓展的我会更新发布的,基本上是不会有啥拓展和更新了,因为都没有啥业务场景,希望我的分享对你有所启发和帮助,请给我写的这几个start点个start和关注,请一键三连,么么么哒!

爬虫加密算法

js常见的加密方式 加密在前端开发和爬虫中是经常遇见的。掌握了加密算法且可以将加密的密文进行解密破解的,也是你从一个编程小白到大神级别质的一个飞跃。且加密算法的熟练和剖析也是很有助于帮助我们实现高效的js逆向。下述只把我们常用的加密方法进行总结。不去深究加密的具体实现方式。 常见的加密算法基本分为这几类, 线性散列算法(签名算法)MD5对称性加密算法 AES DES非对称性加密算法 RSA Md5加密(不可逆) MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整的一致性。且MD5加密之后产生的是一个固定长度(32位或16位)的数据。 结论:一旦看到了一个长度为32位的密文数据,该数据极有可能是通过md5算法进行的加密! 解密: 常规讲MD5是不存在解密的。但是理论上MD5是可以进行反向暴力破解的。暴力破解的大致原理就是用很多不同的数据进行加密后跟已有的加密数据进行对比,由此来寻找规律。理论上只要数据量足够庞大MD5是可以被破解的。但是要注意,破解MD5是需要考虑破解的成本(时间和机器性能)。假设破解当前的MD5密码需要目前计算能力最优秀的计算机工作100年才能破解完成。那么当前的MD5密码就是安全的。 增加破解成本的方法(方法很多,这里只说我常用的)。 使用一段无意义且随机的私匙进行MD5加密会生成一个加密串,我们暂且称之为串1将要加密的的数据跟串1拼接,再进行一次MD5,这时会生成串2将串2再次进行MD5加密,这时生成的串3就是我们加密后的数据。 我们在注册账号时的密码一般都是用的MD5加密。 <html> <script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script> <script type="text/javascript"> var hashCode = md5("i am bobo!"); alert(hashCode) </script> </html> 上述代码的核心关键字:md5 DES/AES加密(可逆) DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的算法。该加密算法是一种对称加密方式,其加密运算、解密运算需要使用的是同样的密钥(一组字符串)即可。注意: 现在用AES这个标准来替代原先的DES。AES和DES的区别: 加密后密文长度的不同: DES加密后密文长度是8的整数倍AES加密后密文长度是16的整数倍 应用场景的不同: 企业级开发使用DES足够安全如果要求高使用AES DES和AES切换只需要修改 CryptoJS.AES <=> CryptoJS.DES 使用DES/AES进行数据交互时要求双方都拥有相同的私匙破解方法: 暴力破解。DES如果使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。只要计算足够强大是可以被破解的 DES算法的入口参数有三个: Key、Data、Mode,padding。 Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式。padding为填充模式,如果加密后密文长度如果达不到指定整数倍(8个字节、16个字节),填充对应字符 padding的赋值固定为CryptoJS.pad.Pkcs7即可 <html> <script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.js"></script> <script type="text/javascript"> var aseKey = "12345678" //定制秘钥,长度必须为:8/16/32...位 var message = "

2023年蓝桥杯省赛——阶乘求和

题目链接:9.阶乘求和 - 蓝桥云课 (lanqiao.cn) 思路 难点:关于阶乘的数学问题 首先我们需要了解阶乘的一个特性。我来带着大家算一遍 如果你计算1!~ 4!的阶乘会发现并没有什么奇怪的,但是随着计算的深入就可以费县一些规律 下面是1!~30!的结果 1的阶乘 = 12的阶乘 = 23的阶乘 = 64的阶乘 = 245的阶乘 = 1206的阶乘 = 7207的阶乘 = 50408的阶乘 = 40,3209的阶乘 = 362,88010的阶乘 = 3,628,80011的阶乘 = 39,916,80012的阶乘 = 479,001,60013的阶乘 = 6,227,020,80014的阶乘 = 87,178,291,20015的阶乘 = 1,307,674,368,00016的阶乘 = 20,922,789,888,00017的阶乘 = 355,687,428,096,00018的阶乘 = 6,402,373,705,728,00019的阶乘 = 121,645,100,408,832,00020的阶乘 = 2,432,902,008,176,640,00021的阶乘 = 51,090,942,171,709,440,00022的阶乘 = 1,124,000,727,777,607,680,00023的阶乘 = 25,852,016,738,884,976,640,00024的阶乘 = 620,448,401,733,239,439,360,00025的阶乘 = 15,511,210,043,330,985,984,000,00026的阶乘 = 403,291,461,126,605,636,584,960,00027的阶乘 = 10,888,869,450,418,352,160,768,000,00028的阶乘 = 304,888,344,611,713,860,501,504,000,00029的阶乘 = 8,841,761,993,739,700,852,282,368,000,00030的阶乘 = 265,252,859,812,191,058,636,308,480,000,000 所以发现了没,尾部的0是不是越来越多,我只有一个问题。当到一个阶乘的时候,尾部全部是0,那么他和其他值相加,是不是不影响尾部9位数的答案。既然如此我们就拿下了,发现没有,蓝桥杯的填空题全部都是数学问题。

Mysql 索引、锁与MVCC等相关知识点

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 索引类型存储方式区分逻辑区分实际使用区分索引失效情况 索引建立规范SQL编写规范exlpain字段解析ACID的原理日志引擎慢SQL整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁: 乐观锁(Optimistic Locking):假设并发操作时不会发生冲突,只在提交事务时检查数据是否被其他事务修改过。常用于读多写少的场景。 悲观锁(Pessimistic Locking):假设并发操作时会发生冲突,因此在操作期间持有锁来避免冲突。常用于写多读少的场景。 全局锁(Global Lock):对整个数据库实例加锁,限制除了超级用户外的所有查询和修改操作。一般用于备份、恢复等操作。 表级锁(Table Lock):对整个表加锁,其他连接无法修改或读取该表的数据,但可以对其他表进行操作。 意向共享锁(Intention Shared Lock):表级锁的辅助锁,表示事务要在某个表或页级锁上获取共享锁。 意向排它锁(Intention Exclusive Lock):表级锁的辅助锁,表示事务要在某个表或页级锁上获取排它锁。 页级锁(Page Lock):对数据页(通常是连续的几个行)加锁,控制并发事务对该页的访问。适用于数据较大且并发量较高的场景。 行级锁(Row Lock):对单个行加锁,只锁定需要修改的数据行,其他行可以被同时修改或读取。并发性高,但锁管理较复杂。 记录锁(Record Lock):行级锁的特定类型,锁定单个行,确保其他事务无法同时修改或读取该行。 共享锁(Shared Lock):也称为读锁,多个事务可以同时持有共享锁并读取数据,但不能修改数据。适用于同时读取同一数据的场景。 排它锁(Exclusive Lock):也称为写锁,事务持有排它锁时,其他事务无法同时持有共享锁或排它锁,用于保护数据的写操作。 间隙锁(Gap Lock):锁定一个范围的键,但不包括这些键的实际值。用于防止其他事务在范围内插入数据。 临建锁(Metadata Lock):锁定数据库对象的元数据,如表结构,用于保证数据定义的一致性。 各种锁解析 锁使用 使用方式: 乐观锁示例: 悲观锁: 悲观锁的实现通常通过使用SELECT … FOR UPDATE或使用LOCK IN SHARE MODE语句来加锁。 -- 事务1:查询并修改订单状态 START TRANSACTION; -- 查询订单状态,并持有排它锁 SELECT order_id, status FROM orders WHERE order_id = 1 FOR UPDATE; -- 执行一些业务逻辑判断... -- 修改订单状态 UPDATE orders SET status = 'completed' WHERE order_id = 1; COMMIT; 全局锁:

Python大数据实践:selenium爬取京东评论数据

准备工作 selenium安装 Selenium是广泛使用的模拟浏览器运行的库,用于Web应用程序测试。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。 #终端pip安装 pip install selenium #清华镜像安装 pip install selenium -i https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/ 安装Chrome driver 查看Google版本,并下载对应版本的驱动 下载路径 安装在anaconda的Scripts文件夹中 测试 from selenium import webdriver # 初始化WebDriver browser = webdriver.Chrome() 如果弹出Chrome浏览器,则说明安装成功 爬虫 示例:爬取【AppleiPhone 13】Apple/苹果 iPhone 13 (A2634)128GB 绿色 支持移动联通电信5G 双卡双待手机【行情 报价 价格 评测】-京东 先导入所用的包,这样一步一步跟着做不会出错 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from bs4 import BeautifulSoup import time 初始化并访问 # 初始化WebDriver browser = webdriver.

【开源】SpringBoot框架开发学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于JAVA+Vue+SpringBoot+MySQL的学生综合素质评价系统,包含了成绩查询模块、学生自评模块、教师评价模块和教务打分模块,还包含系统自带的用户管理、班级管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,学生综合素质评价系统基于角色的访问控制,给学生、教师和教务管理员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。 1.2 项目录屏 二、功能模块 2.1 学生功能 登录:勾选学生登录 学业发展水平(分三个部分,第一个是上学期均分(教师端填写,填写3门课语数外,然后自动计算)学生端只能查看,第二个部分是个自评问卷(内容和分值我会给),第三个部分是获奖情况(用下拉菜单之类的实现等级的区分,国家级,省级之类的,加分和这个有关),对应的加分数值我会给),前两个满分都是一百分,最后的得分取均分加上获奖情况的额外加分。 品德与社会化水平(分两个部分,第一部分是自评问卷,第二部分是教师填写的问卷(教师端填写)自己只能查看填写结果)。满分都是一百分,最后的得分取均分。 身心健康水平(分两个部分,第一部分是自评问卷,第二部分是教师填写的问卷,(教师端填写)自己只能查看填写结果,第三部分是教务处填写的体育考试分数)。三个满分都是一百分,最后的得分取均分。 分数查看功能:查看三个部分的分数和综合分数(综合分数就是三个部分的均分) 2.2 教师功能 登录(选择教师登录) 修改个人信息 评价学生学业发展水平(填写学生上学期分数),没填写的学生会留存在这个页面,直到填写完毕为止。 评价学生品德与社会化水平(填写问卷),没填写的学生会留存在这个页面,直到评价完毕为止。 查询学生信息,只能查询属于自己的班级的(通过姓名或者学号,或者该学生是否评价完的状态(这里的评价完就是指自己有没有评价完,不管学生自评和教务处填写的东西),或者综合成绩的区间)。信息包括学号,姓名,班级,分数的查看(包括学业、品德、身心健康和综合成绩等四项)和是否已经完成评价。 2.3 教务处功能 登录(选择教务处登录) 修改个人信息 评价学生身心健康水平(填写体育考试分数),没填写的学生会留存在这个页面,直到评价完毕为止。 查询学生信息(通过姓名或者学号,或者班级,或者该学生是否评价完的状态(这里的评价完就是指自己有没有评价完,不管学生自评和教师填写的东西),或者综合成绩的区间),信息包括学号,姓名,分数的查看(包括学业、品德、身心健康和综合成绩等四项)和是否已经完成评价。 三、系统展示 四、核心代码 4.1 查询我的学科竞赛 @RequestMapping(value = "/getMyPage", method = RequestMethod.GET) @ApiOperation(value = "查询我的学科竞赛") public Result<IPage<Competition>> getMyPage(@ModelAttribute Competition competition ,@ModelAttribute PageVo page){ User currUser = securityUtil.getCurrUser(); QueryWrapper<StudentEvaluate> seQw = new QueryWrapper<>(); seQw.

中国传统游戏-幻方-c/c++实现

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行、同一列和同一对角线上的几个数的和都相等。 幻方又称为魔方,方阵或厅平方,最早起源于中国。 宋代数学家杨辉称之为纵横图。 幻方的幻在于无论取哪一条路线,最后得到的和或积都是完全相同的。大约两千多年前西汉时代,流传夏禹治水时,黄河中跃出一匹神马,马背上驮着一幅图,人称「河图」;又洛水河中浮出一只神龟,龟背上有一张象征吉祥的图案称为「洛书」.他们发现,这个图案每一列,每一行及对角线,加起来的数字和都是一样的,这就是我们所称的幻方.也有人认为"洛书"是外星人遗物;而"河图"则是描述了宇宙生物(包括外星人)的基因排序规则,幻方是外星人向地球人的自我介绍.另外在上海浦东陆家嘴地区挖出了一块元朝时代伊斯兰教信徒所挂的玉挂,玉挂的正面写着:「万物非主,惟有真宰,默罕默德,为其使者」,而玉挂的另一面就是一个四阶幻方. #include <bits/stdc++.h> using namespace std; const int N = 100; int metric[N][N]; int main() { int n; cin>>n; //第一个数字存放的位置 int row = 0; int col = n / 2; metric[row][col] = 1; //存放第二个到第n*n个数字 for(int k = 2;k <= n * n;k++) { //默认放置上一个数字的右上角 row--; col++; //以下四种情况 //行越界,列不越界 if(row < 0 && col < n) { row = n - 1; } //列越界,行不越界 else if(row > -1 && col >= n) { col = 0; } //行列都越界 else if(row < 0 && col >= n) { row += 2; col--; } //行列都不越界 else { if(metric[row][col] !

计算机网络:性能指标

计算机网络:性能指标 速率带宽吞吐量时延时延带宽积往返时间利用率丢包率 本博客介绍计算机网络的性能指标,我们可以从不同的方面来度量计算机网络的性能。常用的计算机网络性能指标有以下 8 个,他们是:速率、带宽、吞吐量、时延、时延带宽积、往返时间、利用率、丢包率: 速率 为了能够更好的理解速率,我们需要先了解比特。比特是计算机中数据量的基础单位,也是信息论中信息量的单位。一个比特就是二进制数字的一个1或0。 以下为计算机中数据量的常见单位: 单位大小比特 bit存储一个 0 或 1字节 byte1 Byte = 8 b千字节 KB1 KB = 210 B兆字节 MB1 MB = 210 KB = 220 B吉字节 GB1 GB = 210 MB = 230 B太字节 TB1 TB = 210 GB = 240 B 常用的数据量单位有比特bit,字节byte,千字节KB,兆字节MB,吉字节GB,太字节TB。在计算机数据量中,小写b表示bit,大写B表示byte,大写K表示的是210。 有了比特的概念,我们就可以引出计算机网络中的一个重要的性能指标,速率。它具体是指连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特律或数据率。 常用的数据率单位有比特每秒,可以简写为小写字母b/s,或者写为 bps。其是速率的基本单位。 以下为计算机中速率的常见单位: 单位大小比特每秒 bit/s数字信道上每秒可以传输的比特数量千比特每秒 kb/s1 kb/s = 8 b/s兆比特每秒 Mb/s1 Mb/s = 103 kb/s = 106 b/s吉比特每秒 Gb/s1 Gb/s = 103 Mb/s = 109 b/s太比特每秒 Tb/s1 Tb/s = 103 Gb/s = 1012 b/s 千比特每秒,这里的 k 用小写,而数据量单位中的 K 常用大写。小写 k 在速率单位中的值为 103,也就是 1, 000。而大写 K 在数据量单位中的值为 210,也就是 1024。

Odoo17免费开源ERP开发技巧:如何在表单视图中调用JS类

文/Odoo亚太金牌服务·开源智造 老杨 在Odoo最新V17新版中,其突出功能之一是能够构建个性化视图,允许用户以独特的方式与数据互动。本文深入探讨了如何使用 JavaScript 类来呈现表单视图来创建自定义视图。通过学习本教程,你将获得关于开发Odoo 17前端交互的开发指南与建议,改善Odoo原有的本土化用户体验不佳的问题。 我们将探讨如何使用JavaScript类功能在Odoo中自定义表单视图。我们将首先向 XML 视图添加一个自定义按钮,单击该按钮将触发 JavaScript 函数。我们将逐步浏览 JavaScript 代码以理解它是如何工作的。在本文的最后,您将更好地了解如何使用JavaScript来增强Odoo的功能。 JavaScript 类函数通过为特定视图注册类来运行。当我们将此类添加到窗体视图时,它会将自定义视图注入到窗体中。为此,我们必须将自定义视图创建为模板,将其注册为组件,然后将其链接到表单控制器。因此,表单控制器在加载视图时检测到指定的类时将执行视图。 在下面的截图中,会注意到使用 JavaScript 类“model_info”集成到表单视图中的“Info”按钮。 在这里,我们继承了销售订单窗体,并添加了值为“model_info”的属性“js_class”。 <?xml version="1.0"?> <odoo> <record id="view_sale_order_form_inherit" model="ir.ui.view"> <field name="name">sale.order</field> <field name="model">sale.order</field> <field name="inherit_id" ref="sale.view_order_form"/> <field name="arch" type="xml"> <xpath expr="//form" position="attributes"> <attribute name="js_class">model_info</attribute> </xpath> </field> </record> </odoo> 首先,表单控制器验证 JS 类是否保存在注册表中。为此,我们在核心注册表中的自定义视图中注册该类。 在这里,我们通过添加按钮作为模板来继承基本窗体视图。 <templates> <t t-name="blog_js_class.modelInfoBtn" t-inherit="web.FormView"> <xpath expr="//t[@t-set-slot='layout-actions']" position="inside"> <button class="btn btn-primary" t-on-click="actionInfoForm">Info </button> </xpath> </t> </templates> 在这里,我们有一个按钮标签,里面有一个点击函数“actionInfoForm()”。现在,我们将模板扩展到组件中,以呈现视图以及从按钮单击调用的函数。 /** @odoo-module **/ import { FormController } from "

App接入Android指纹识别

Biometric Authentication 是一种使用面部或指纹识别进行用户认证的方式,这是保护敏感信息的方法之一。它对于需要用户每次打开应用都要进行认证的金融和医疗健康应用非常重要。 1. 声明依赖项 您可以在此处检查最新的版本发布情况。 dependencies { implementation("androidx.biometric:biometric:1.1.0") ... } 2. 选择认证类型 • BIOMETRIC_STRONG — Class 3 生物认证,了解更多详细信息请点击[这里] (https://developer.android.com/training/sign-in/biometric-auth#strong-vs-weak)。 • BIOMETRIC_WEAK — Class 2 生物认证,了解更多详细信息请点击[这里] (https://developer.android.com/training/sign-in/biometric-auth#strong-vs-weak)。 • DEVICE_CREDENTIAL — 用户需输入屏幕锁定的 PIN/图案/密码 对于 STRONG 和 WEAK 之间的区别,我不会详细展开,因为这将是一个过长的话题。您还可以同时选择多种类型:BIOMETRIC_STRONG 或 DEVICE_CREDENTIAL。 3. 检查认证是否可用 双重检查导入项,确保您正在使用 androidx.biometric.*。 在下面的示例中,我将使用 BIOMETRIC_STRONG。某些设备可能没有生物认证功能。以下是四种可能性: val biometricManager = BiometricManager.from(this) when (biometricManager.canAuthenticate(BIOMETRIC_STRONG)) { BiometricManager.BIOMETRIC_SUCCESS -> { // 使用生物特征进行认证 } BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> { // 缺少生物特征硬件 } BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> { // 当前无法使用生物特征 } BiometricManager.

从 XML 到 Compose 快速迁移指南

前言 日常工作,业务需求中的界面布局是至关重要的一部分,长期以来,我们一直都是使用XML布局文件来定义自己的用户界面,但随着Jetpack Compose已经崭露头角,无疑成为了一种强大的UI工具,允许我们以更声明性和可组合的方式构建用户界面。 到目前为止,Compose正在逐步取代XML,越来越多的技术团队已经开始普及使用。下面笔者将以初学者的角度出发,简单阐述如何将现有的XML布局文件转换为Jetpack Compose,实现无缝衔接,以便逐步迁移应用程序的用户界面。 为什么要使用Jetpack Compose Jetpack Compose是Google官方提供的声明式UI工具包,它引入了一种全新的方式来构建用户界面,基于Kotlin编写,而Kotlin作为目前Android的第一生产力语言,这无疑是相得益彰的。由于笔者长期使用XML编写布局,虽然近期才开始重新学习Compose并开始实践用于工作和学习当中, 但Compose必定是未来大势所趋的;虽说目前国内还未完全普及,应用市场上还是有很多应用还在使用着传统的XML布局; 不得不说,现在更新后的AS(笔者这里是Android Studio Giraffe | 2022.3.1 Patch 2)创建的新项目都是默认使用Compose进行界面编写,完全摒弃了传统XML界面布局,这已经说明Compose基本上成为了Google官方主推的UI工具包了; 这时候有人就会说了,既然会成为主流,那它一定有巨大的优势吧;没错,与传统的XML布局文件相比,Jetpack Compose提供了以下优势: 声明性UI编程:Compose允许以声明性的方式描述UI,而不再需要手动操作XML布局文件。这使得UI代码更易于阅读、维护和调试。可组合性:Compose的核心概念是可组合性。可以将小部件组合在一起,构建复杂的UI元素,而不必担心繁琐的布局层次。实时预览:Compose提供了实时预览功能,可以在编写代码的同时查看UI的外观和行为,提高了开发效率。更少的样板代码:与XML布局相比,Compose代码通常更少,因为它减少了样板代码的需要。动态性:Compose允许在运行时动态更改UI,这在某些情况下非常有用。 从XML 迁移到Compose 由于最近一个小项目需要将之前的传统布局代码全部迁移为Compose,虽然整体项目布局文件不算太多,但这过程就我而言,非常繁琐,需要自己对传统布局以及Compose相应的替代方案有一定的熟练度,难度不大,不过相对于初学者来说真的挺折磨,毕竟是在旧项目上操刀,尤其是在替换后需要处理布局的差异,要尽可能保持一致,不影响现有效果;话不多说,下面是笔者简单替换的流程图(仅供参考) 步骤1:创建Compose界面 首先,我们需要在Compose中创建一个等效的界面。对于每个XML布局,我们将创建一个Compose函数,以相同的UI元素作为参数。举个例子,如果我们有一个XML布局文件包含一个TextView和一个Button,我们可以创建如下的Compose函数: @Composable fun MyComposeScreen(text: String, buttonText: String) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = text) Button(onClick = { /* 点击处理逻辑 */ }) { Text(text = buttonText) } } } 步骤2:将数据绑定到Compose界面 接下来,我们需要将数据从XML布局中绑定到Compose界面。这通常涉及创建ViewModel或使用其他数据绑定技术,以确保数据在Compose界面中正确显示。 步骤3:逐步替换XML 一旦Compose界面准备好,并且数据绑定完成,我们可以开始逐步替换XML布局。在每个步骤中,我们将删除XML布局的引用,并在适当的位置调用我们的Compose函数。 这里作为初学者,可以给大家推荐一个网站 Which Compose API to use

C# Selenium Edge 驱动下的常见用法

using OpenQA.Selenium; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Support.UI; //添加缩放属性 将浏览器缩放设为100% EdgeOptions options=new EdgeOptions(); options.AddArgument("force-device-scale-factor=1"); //不需添加额外属性 options可不写 直接 var driver = new EdgeDriver() using (var driver = new EdgeDriver(options)) { //打开指定Url路径 driver.Navigate().GoToUrl("https://test.com"); //将浏览器全屏化 driver.Manage().Window.Maximize(); try { /可添加等待时间 等待网页加载 直至某元素出现 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); //等待直到标题出现 //wait.Until(d=>d.Title.Contains("Example Domain")); //等待特定元素出现 //等待Test按钮出现 wait.Until(d => d.FindElement(By.Id("test-button")).Displayed); //查找按钮元素并点击 IWebElement buttonElement = driver.FindElement(By.Id("test-button")); buttonElement.Click(); //网页跳转后 等待网页加载 System.Threading.Thread.Sleep(1000); //直到某元素出现 by -name wait.Until(d => d.FindElement(By.Name("username")).Displayed); //by -css //wait.Until(d => d.

输送带的制造工艺

输送带的制造工艺 一、引言 输送带作为现代工业生产中不可或缺的物料运输工具,广泛应用于矿山、冶金、化工、电力、港口、粮食等各个行业。随着科技的发展,输送带的制造工艺也在不断进步,以满足日益增长的生产需求和运输效率。本文将详细介绍输送带的制造工艺,包括材料选择、结构设计、生产工艺、质量控制等方面。 二、材料选择 输送带的制造材料主要包括橡胶、塑料、织物等。其中,橡胶输送带以其优良的耐磨、耐油、耐水、耐寒等性能成为最常用的输送带材料。在选择材料时,需考虑使用环境、运输物料、工作条件等因素,以确保输送带具有足够的强度、耐磨性和使用寿命。 三、结构设计 输送带的结构设计是制造工艺中的关键环节,直接影响到输送带的性能和使用寿命。结构设计主要包括带芯层、覆盖层、耐磨层等。带芯层是输送带的主要承载部分,通常采用织物或钢丝绳作为增强材料;覆盖层则起到保护带芯层的作用,防止物料对输送带造成磨损;耐磨层则用于提高输送带的耐磨性能,延长使用寿命。 四、生产工艺 输送带的生产工艺主要包括炼胶、压延、硫化、成型等步骤。炼胶是将橡胶与各种添加剂混合均匀,形成具有一定性能的胶料;压延是将胶料与增强材料一起压制成一定厚度的带材;硫化是通过加热和压力使带材中的橡胶与增强材料紧密结合,形成具有一定强度和耐磨性的输送带;成型则是将硫化后的输送带切割成所需尺寸,并进行必要的修整和检验。 五、质量控制 质量控制是输送带制造工艺中的重要环节,直接影响到产品的质量和性能。质量控制主要包括原材料检验、生产过程监控、成品检验等方面。原材料检验需确保所使用的材料符合相关标准和要求;生产过程监控需对各个生产环节进行严格把关,确保生产过程的稳定性和可控性;成品检验则需对生产出的输送带进行全面的性能测试和质量评估,确保产品质量符合相关标准和客户要求。 六、结论 输送带的制造工艺涉及多个环节,需要严格控制材料选择、结构设计、生产工艺和质量控制等方面。随着科技的进步和市场需求的变化,输送带的制造工艺也在不断创新和优化。未来,随着新材料、新工艺的应用,输送带的性能和使用寿命将得到进一步提升,为各行业的生产和发展提供更加可靠和高效的物料运输解决方案。

电商数据API接口开发一键接入1688阿里巴巴api接口item_get-获得1688阿里巴巴商品详情api演示

要接入阿里巴巴1688 API接口获取商品详情,首先需要在开放平台注册一个账号并创建应用。创建应用后,你会得到Api Key和Api Secret,这两个参数将用于调用API接口。 接下来,你需要选择一个合适的阿里巴巴1688 API接口,例如alibaba.item.get(获取单个商品的详细信息),这个接口可以获取到商品详情的相关信息。 以下是一个使用Python调用阿里巴巴1688 API接口的示例代码: # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pip install requests """ from __future__ import print_function import requests # 请求示例 url 默认请求参数已经做URL编码 url = "https://item_get/?key=<您自己的apiKey>&secret=<您自己的apiSecret>&num_iid=610947572360" headers = { "Accept-Encoding": "gzip", "Connection": "close" } if __name__ == "__main__": r = requests.get(url, headers=headers) json_obj = r.json() print(json_obj) 接口请求示例 { "item":{ "num_iid":601824709263, "title":"韩版仿兔毛围巾秋冬毛毛围巾学生毛毛绒围脖冬季女套头防寒户外", "desc_short":"", "price":"2.2", "total_price":0, "suggestive_price":0, "orginal_price":"2.2", "nick":"_sopid@BBBEbRNm7OS0uGCXPJucMBy2w", "num":3786174, "min_num":2, "detail_url":"https://detail.1688.com/offer/601824709263.html", "pic_url":"https://cbu01.alicdn.com/img/ibank/11921650503_1818272533.jpg", "

基于Spring Boot的宿舍管理系统

摘 要 随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建宿舍管理系统。本文通过课题背景、课题目的及意义相关技术,提出了一种楼宇信息、宿舍信息、宿舍安排、缺勤信息等于一体的系统构建方案。 本文通过采用B/S架构,MySQL数据库以及java语言、Spring Boo框架,结合国内宿舍管理现状,开发了一个基于基于Spring Boot的宿舍管理系统。系统分为多个功能模块:学生、宿舍管理、楼宇信息、宿舍信息、宿舍安排、缺勤信息等。通过系统测试,本系统实现了系统设计目标,相对于人工管理方式,本系统有效的减少了学校的经济投入,并且大幅度提升了宿舍管理的效率。 关键词:宿舍管理系统;java语言;Spring Boo框架;MySQL数据库 Abstract With the advent of the information age, the shortcomings of the traditional management methods in the past are gradually exposed. The shortcomings of the traditional management methods in the past are analyzed, and the dormitory management system is built by computer. Based on the background, purpose and significance of the project, this paper proposes a system construction scheme that integrates building information, dormitory information, dormitory arrangement and absence information.