- 博客(136)
- 问答 (1)
- 收藏
- 关注
原创 函数式编程:Rust中的闭包与迭代器
闭包是一种匿名函数,它可以赋值给变量也可以作为参数传递给其它函数,不同于函数的是,它允许捕获调用者作用域中的值,例如:上面的代码展示了非常简单的闭包 ,它拥有一个入参 ,同时捕获了作用域中的 的值,因此调用 意味着将 2(参数 )跟 1()进行相加,最终返回它们的和:。可以看到 非常符合闭包的定义:可以赋值给变量,允许捕获调用者作用域中的值。Rust 闭包在形式上借鉴了 和 语言,与函数最大的不同就是它的参数是通过 的形式进行声明,如果是多个参数就 , 下面给出闭包的形式定义:如果只有一个返
2023-10-22 08:00:00
464
2
原创 【Rust基础④】Rust中的集合类型(Vector与HashMap)
原因在于:数组的大小是可变的,当旧数组的大小不够用时,Rust 会重新分配一块更大的内存空间,然后把旧数组拷贝过来。在某些情况下,类型是可以进行隐式强制转换的,虽然这些转换弱化了 Rust 的类型系统,但是它们的存在是为了让 Rust 在大多数场景可以工作,而不是报各种类型上的编译错误。所有的集合类型都是动态的,意味着它们没有固定的内存大小,因此它们底层的数据都存储在内存堆上,然后通过一个存储在栈中的引用类型来访问。,在这里我们程序捕获了错误,编译器告诉我们类型范围超出的转换是不被允许的,因为我们试图把。
2023-10-17 13:42:37
831
原创 【Rust基础③】方法method、泛型与特征
Rust 使用implx: f64,y: f64,// new是Circle的关联函数,因为它的第一个参数不是self,且new并不是关键字// 这种方法往往用于初始化当前结构体的实例Circle {x: x,y: y,// Circle的方法,&self表示借用当前的Circle结构体注:Rust 的对象定义和方法定义是分离的,这种数据和使用分离的方式,会给予使用者极高的灵活度。在开发过程中,往往只要使用x: i32,y: i32println!("{:?}",p);
2023-10-15 17:13:42
853
原创 【Rust基础②】流程控制、模式匹配
时我们往往使用集合的引用形式,除非你不想在后面的代码中继续使用该集合(比如我们这里使用了。类型的值(这种形式的函数在标准库内随处所见),在该函数的内部处理中,如果传入的是一个。值以及处理没有值的情况,为了演示这一点,下面一起来编写一个函数,它获取一个。有时会遇到只有一个模式的值需要被处理,其它值直接忽略的场景,如果用。的匹配必须穷尽所有情况,即穷尽匹配,Rust 编译器清晰地知道。表达式(穷尽性)的要求,写代码时必须在处理完这唯一的成员后加上。该形式清晰的说明了何为模式,何为模式匹配:将模式与。
2023-10-13 15:00:00
378
原创 Rust中的返回值与错误处理
Rust 中的错误主要分为两类:- **可恢复错误**,通常用于从系统全局角度来看可以接受的错误,例如处理用户的访问、操作等错误,这些错误只会影响某个用户自身的操作进程,而不会对系统的全局稳定性产生影响,`Result` 用于可恢复错误- **不可恢复错误**,刚好相反,该错误通常是全局性或者系统性的错误,例如数组越界访问,系统启动时发生了影响启动流程的错误等等,这些错误的影响往往对于系统来说是致命的,`panic!` 用于不可恢复错误。
2023-10-13 10:21:51
605
原创 【Rust】cargo的概念和使用方法
包管理器 cargo 提供了一系列的工具,从项目的建立、构建到测试、运行直至部署,为 Rust 项目的管理提供尽可能完整的手段,与 Rust 语言及其编译器 rustc 紧密结合。
2023-10-12 08:00:00
514
原创 【Rust】包和模块,文档注释,Rust格式化输出
模块是Rust的代码构成单元。Rust 出于安全的考虑,默认情况下,所有的类型都是私有化的,包括函数、方法、结构体、枚举、常量,就连模块本身也是私有化的。被引入到当前模块中时,它的可见性自动被设置为私有的,如果你希望允许其它外部代码引用我们的模块项。宏接受的是可变参数,第一个参数是一个字符串常量,它表示最终输出字符串的格式,包含其中形如。其实就是引用自身模块中的项,也就是说和我们之前章节的代码类似,都调用同一模块中的内容。目录下,每一个文件都是独立的二进制包,同时也会包含一个库包,该包只能存在一个。
2023-10-11 19:00:00
891
原创 【Rust基础①】基本类型、所有权与借用、复合类型
通过关键字struct定义一个清晰明确的结构体名称几个有名字的结构体字段该结构体名称是User,拥有 4 个字段,且每个字段都有对应的字段名及类型声明,例如username代表了用户名,是一个可变的String类型。
2023-10-11 10:25:08
872
原创 程序的DAC检查与LSM简介
LSM框架基于hook机制实现内核功能扩展虽然名字里带Module,但LSM并不是传统意义上的内核模块Kernel中可以同时编译进多个不同的LSMLSM并不是运行时加载,而是编译时引入,在boot阶段通过命令行加载LSM架构与实现原理:从下图中可以看出LSM在Linux安全体系中所处的位置,LSM hook被插入到访问kernel对象与DAC 检查之见,然后LSM调用系统中启用的访问控制模块,检查是否可以访问。
2023-08-18 22:13:54
714
原创 Linux内核的两种安全策略:基于inode的安全与基于文件路径的安全
在Linux中,一切且为文件,实现系统安全的策略主要可分为两种:基于inode的安全、基于文件路径的安全。
2023-08-18 22:00:36
2251
原创 Linux上设置本地DNS缓存服务器
现在, 系统已配置为即使ISP的DNS服务器未如预期那样快速响应, 也可以快速有效地进行DNS查询。此外, 由于使用最新的安全DNS协议来保护DNS查询, 因此数字生活可以更加安全。
2023-08-13 10:57:50
1193
原创 CCF认证 202212-3 JPEG解码
问题背景四年一度的世界杯即将画上尾声。在本次的世界杯比赛中,视频助理裁判(Video Assistant Referee, VAR)的应用可谓是大放异彩。VAR 使用视频回放技术帮助主裁判作出正确判罚决定。西西艾弗岛足球联赛的赛场上也引入了一套 VAR 设备。作为技术供应商的技术主管小C,需要存储和编码 VAR 产生的图像数据。小 C 分析比较发现,JPEG 编码算法可以达到较好的压缩效果,并且质量损失是可以接受的。因此,小 C 决定使用 JPEG 编码算法来存储和传输图像数据。
2023-08-12 16:39:51
278
原创 蓝桥杯-统计子矩阵
滑动窗口[l,r]:遍历右端点,根据区间和调整左端点,如果区间和大了,左端点右移。注意区间和也要移除左端点,直到找到满足的区间,区间大小。然后遍历上边界top和下边界buttom,再这个上下边界内使用滑动窗口,由于前面维护了纵向前缀和,所以转化成类似一维的滑动窗口。使用前缀和+滑动窗口 ,可以先计算出纵向或横向的前缀和,就是以r为右端点的满足条件子矩阵个数,累加即可。表示前i行第j列之和。
2023-08-12 16:39:24
259
原创 Bash显示动画表示长时间运行的任务
在某些情况下,可能需要从Bash脚本中执行长时间运行的命令。最简单的方法为直接输出“Loading…”的消息,但这种静态消息对用户和开发人员来说不是很友好,下面给出两种简单动画示例。
2023-06-06 10:23:41
246
1
原创 软件项目管理要点
质量控制(Quality Control,QC)是确定项目结果与质量标准是否相符,同时确定不符的原因和消除方法,控制产品的质量,及时纠正缺陷的过程,质量控制的任务是策划可行的质量管理活动,然后正确地执行和控制这些活动。迭代生存期模型:通过连续的原型或概念验证来改进产品或成果,每一个新的原型都能带来新的反馈,然后在下一周期的项目活动中纳入新的信息,这有利于识别和减少项目的不确定性,适用于项目复杂性高、变更频繁或当项目范围受到相关方对所需最终产品的不同观点的支配时。①确认并分解项目的主要组成因素。
2023-06-03 08:00:00
482
原创 【软考中级】软件设计师选择题题集(三)
流水线的效率是指流水线的设备利用率,从时空图上看效率就是n个任务所占的时空区与m个段总的时空区之比。图聚集了相关的事物。第二空,根据第一空可知R的一个主键为A2A5,由函数依赖集F可知,存在A2A5àA6,A5A6àA1,A1àA3,这里存在传递函数依赖,故A、B选项均不正确,C选项本身不正确,存在非主属性对候选键的传递函数依赖,是不满足3NF的。设有关系模式R(A1,A2,A3,A4,A5,A6),函数依赖集F={A1→A3,A1 A2→A4,A5 A6→A1,A3 A5→A6,A2 A5→A6}。
2023-05-24 08:00:00
552
原创 【软考中级】软件设计师选择题题集(二)
从题图中可见,程序的MOVE指令跨两个页面,且源地址Datal和目标地址Data2所涉及的区域也跨两个页面的页内地址, 根据题意1、2、3、4和5号页面不在内存,系统取“MOVE Datal,Data2”的指令时, 由于该指令跨越两个页面0、1,查页面变换表可以发现1号页面不在内存,故需要产生一次缺页中断;n]中,在表中的元素已经按关键字递增方式排序的情况下,进行折半查找的方法是:首先将待查元素的关键字(key)值与表r中间位置上(下标为mid)记录的关键字进行比较,若相等,则查找成功;
2023-05-22 08:00:00
1034
原创 【数据库】事务与并发控制
宏观上看,事务就是一次完整的操作过程;程序角度看,事务是用户自定义的数据操作系统,由多条命令组成,内部所有命令语句要被当成一个整体,要么全部被执行,要么全部不执行(前面已经执行部分的命令都撤销—回滚)。以前的后触发器的机制就是事务。如:a账号要给B账号转N元钱,由两步完成:(1)A账户号-n;(2)B账号+n事务对待:上两步要么两句都成功,要么一句都不执行。
2023-05-21 08:00:00
879
2
原创 【数据库】触发器
触发器是一种特殊的存储过程,是发生在用户对数据进行增,删,改时自动运行的一个过程。是一种程序方式的对数据完整性控制的补充,操作更加灵活,它进一步保证数据在业务逻辑的正确性。数据在非查询的修改时,临时表问题(只能在触发器的代码中使用)(1)inserted表:用户向表插入新记录数据时,(A步)先插入在系统的一个临时表inserted表(B步)中,再从inserted表中插入到物理数据库表中(C步)。在上面的BC步之间,还要以做一些判断,判断逻辑正确后,再完成C步。
2023-05-20 08:00:00
520
原创 【数据库】数据库设计
数据库设计面对的主要有哪些问题(1) 懂数据库原理同时懂甲方软件专业知识的人缺少;(2) 应用的数据库系统的最终目标往往在一开始不能完全明确,与开发者与用户方最初没在要求完全一致有关;(3) 应用业务系统千差万别的,难以找到一种通用的工具和方法。
2023-05-19 08:00:00
360
原创 【数据库】游标及应用
游标 cursor是对以前查询结果一条一条记录处理的机制。查询select的结果是一个视图,也是一条条地从数据库/视图提取出来的,呈现在用户面前时是个二维关系表,用户无法直接再一条一条地处理。例:要把第一个同学的姓名改为张三四,把三个同学的生日提前3天,把第四个同学的身高减少1厘米。老办法,使用个独立不相干的UPDATE命令实现,如果是前后台的软件,连接操作数据库三次,效率特别低。如果使用游标,一次操作就完成,而且如果再在过程中使用游标,效率是最高的,前后联系,消息传递一次搞定。如果使用游标来解决上面问题,
2023-05-19 08:00:00
455
原创 【数据库】函数
返回的是一个标准量,如一般数据类型intchar.这种函数相对简单,通过函数体计算,返回调用处一个标量。与其它语言类似,有参数时通过函数名后面参数表带去,也可以无参函数(但空括号不能省)。Create function 函数名(形式参数表) returns 返回值的数据类型 Begin 函数体语句 End引例:输入两个整数a,b,返回之和.C**:**int t;t = a + b;return t;Sql。
2023-05-18 08:00:00
298
原创 【数据库】存储过程
Declare @变量名 类型 [(宽度) , 类型… . . ]为了区分系统内存变量(包括表的列名和系统环境参数)和用户自定义变量,要求用户自定义变量时前加符号。当打开一个表时,表的所有列名如学号,姓名是变量,控制系统内部的参数设置的量也是变量-----系统变量和列变量。declare @xh nchar(10) select @xh = 学号 from 学生表 where 姓名 = '杨春' print @xh为什么要用@xh,而不是xh,因为表列名有可能是“xh”,这是为了避免冲突误会。
2023-05-17 08:00:00
716
2
原创 【数据库】索引和视图
如学生花名册,默认是学生有序的,今天的新申请的QQ号数字比以前申请的要大。如此,这些数据有序的,主要目的是方便以后查询。数据表事先按要查询的关键字列索引后,以后要查询时可以使用二分查找—折半法。如我们经常按用户ID号或用户名登陆等操作,可以对数据原表建立一个附属的文件,保存查询依据的记录顺序。但这样做要增加额外的存储空间,增加数据的复杂度,但最大好处是提高查询效率。从顺序查找的n/2 降到log2(n)引例:如有学生表。
2023-05-16 08:00:00
307
原创 【数据库】数据库表间连接
何时要使用到多表操作(1)嵌套查询可能用到。如查出选了d01课程的学生数据:学号,姓名,性别。这些数据来自于学生表,但要根据成绩表中查哪些选了D01课程的学生的学号,涉及了两个表操作。SQL嵌套IN查询不能超过3层。(2)数据查询结果(不是条件)来自于多个表。如,查出选了D01课程的学生数据:学号,姓名,性别,课程号,成绩值。第一种情况数据来源单一表学生表,虽然使用了成绩表,但结果没有成绩表的数据,成绩表的数据仅仅作为主查询的条件。可以使用连接也可以使用嵌套,把子查询的结果作为主查询的条件。
2023-05-15 08:00:00
420
原创 【数据库】SQL语言基础
SQL:结构化查询语言。使用SQL命令,给出几个用户参数,系统根据这些参数从底层数据库提取结果。这个过程是封装了的,结构化的。其主要功能概括为:数据定义功能:create , drop, alter 对表头结构的建,删,改数据查询:select 最主要应用的,最复杂部分数据操纵:insert , update ,delete 数据内容增,改,删数据控制: grant,revoke,deny 授权用户权限控制建立数据库建立表,修改表的结构(不涉及到表的内容操作)
2023-05-14 08:00:00
851
1
原创 【数据库】数据库模式与关系代数
数据模型对现实世界客观事物抽象建立数据关系的模型**(数据库中各表,及各表之间联系)**,针对数据库来说,数据模型分为层次型,网状型,关系型三大类。数据模型三要素:(1)数据结构:描述数据类型、内容,以及数据之间的联系;(2)数据操纵:是指对数据库中各种对象允许的操作功能集合,如对数据的增、删、查、改等;(3)数据的约束:泛指完整性规则集合,尽可能保证数据的正确性,有效性。
2023-05-13 22:54:00
508
原创 security_operations结构体
"security_operations"结构体是Linux内核安全模块框架中的一个重要结构体,用于定义安全模块的名称和安全钩子函数的指针。“bprm_check_security”:表示在执行可执行文件时要执行的安全钩子函数,类型是"“cred_prepare”:表示准备新的进程凭证时要执行的安全钩子函数,类型是"“task_create”:表示创建新进程时要执行的安全钩子函数,类型是"这个函数将在新的进程凭证被创建时被调用,用于执行自定义的安全策略。
2023-05-03 22:51:46
866
原创 PTA L2-043 龙龙送外卖
龙龙是“饱了呀”外卖软件的注册骑手,负责送帕特小区的外卖。帕特小区的构造非常特别,都是双向道路且没有构成环 —— 你可以简单地认为小区的路构成了一棵树,根结点是外卖站,树上的结点就是要送餐的地址。每到中午 12 点,帕特小区就进入了点餐高峰。一开始,只有一两个地方点外卖,龙龙简单就送好了;但随着大数据的分析,龙龙被派了更多的单子,也就送得越来越累……看着一大堆订单,龙龙想知道,从外卖站出发,访问所有点了外卖的地方至少一次(这样才能把外卖送到)所需的最短路程的距离到底是多少?
2023-04-18 10:31:23
707
原创 L2-3 清点代码库
转自新浪微博:“阿里代码库有几亿行代码,但其中有很多功能重复的代码,比如单单快排就被重写了几百遍。请设计一个程序,能够将代码库中所有功能重复的代码找出。各位大佬有啥想法,我当时就懵了,然后就挂了。。。这里我们把问题简化一下:首先假设两个功能模块如果接受同样的输入,总是给出同样的输出,则它们就是功能重复的;其次我们把每个模块的输出都简化为一个整数(在 int 范围内)。于是我们可以设计一系列输入,检查所有功能模块的对应输出,从而查出功能重复的代码。你的任务就是设计并实现这个简化问题的解决方案。
2023-04-13 09:36:30
150
原创 L2-2 病毒溯源
病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异问题 —— 即每一种病毒都是由唯一的一种病毒突变而来,并且不存在循环变异的情况。
2023-04-13 08:44:15
174
原创 【蓝桥杯】买不到的数目【第四届】【省赛】【A组】
小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。
2023-03-20 10:54:43
244
原创 C++ lambda
先来看一个例子,假设有一个整数列表,我们希望统计一下其中有多少个整数可以被7整除。第一种方案,我们先采用普通函数的形式来实现。我们使用vector来存储数字,使用generate()来往vector中填充随机数。上面的代码即是往vector中填充随机数。为了计算有多少个数能被7整除,这里采用count_if()算法,count_if()算法和generate()函数差不都,同样前两个参数也是指定了一个区间,第三个参数则是一个bool 类型的函数对象。因此,我们可以通过以下函数来计算符合条件的元素。
2023-03-13 16:32:20
346
原创 【算法设计技巧】动态规划
任何数学递推公式都可以直接翻译成递归算法,但基本实现是:编译器常常不能正确对待递归算法,结果导致低效的程序。当怀疑很可能是这种情况时,我们必须再给编译器提供一些帮助,将递归算法重新写成非递归算法,让后者把那些子问题的答案系统地记录在一个表内。一种利用这种方法的技巧叫作动态规划(dynamic programming)。...
2023-02-27 08:00:00
164
原创 【算法设计技巧】分治算法
用于设计算法的另一种常用技巧为分治算法。传统上,在其代码中至少含有两个递归调用的例程叫作分治算法,且一般认为子问题是不相交的(即基本上不重叠)。例如,问题的一个O(NlogN)和,它们分别有O(NlogN)的最坏情形以及平均时间的时间界。......
2023-02-25 19:33:29
1502
原创 windows11 安装gcc g++ gdb
想使用VScode编辑调试C++代码,但之前装的gcc版本是12.2,gdb版本却是7.6,无法调试,于是重新安装一遍。安装完成后并不能在cmd下使用,需添加路径至环境变量,完成后即可使用。安装完成后关闭控制台,打开MSYS2-MinGW 64-bit程序,上面有很多,我们安装时只需指定64位即可,输入命令。命令搜索64位系统的源码包,有很多。打开MSYS控制台,执行命令。来搜索所有的gdb包,使用。安装完成后打开,使用。来测试是否安装成功。
2023-02-20 22:45:14
4052
原创 操作系统综合实验
内核利用文件描述符(file descriptor)来访问文件,在形式上它是一个非负整数,代表一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。产生当前进程的拷贝,该函数“调用一次,返回两次”,即在父进程中调用一次,在父进程和子进程中各返回一次。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象关联,这些信息被称作文件的上下文。
2023-02-14 09:00:00
869
原创 实验名称:动态分区分配方式模拟
编写C语言程序,模拟实现首次/最佳/最坏适应算法的内存块分配和回收,要求每次分配和回收后显示出空闲分区和已分配分区的情况。假设初始状态下,可用的内存空间为640K。进一步加深对动态分区分配管理方式的理解;掌握动态分区分配方式使用的数据结构、分配算法和回收算法。根据选择的分配算法决定空闲分区表的排序方式。
2023-02-12 06:00:00
3652
2
【C++课程设计论文】期末大作业 - 基于Qt开发的中国象棋软件开发详细文档
2022-12-15
【C++课程设计】期末大作业 - 基于Qt开发的中国象棋软件
2022-12-15
我这选择排序哪里出问题了
2021-05-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人