Linux 操作二:文件映射与文件状态
Linux 操作二:文件映射与文件状态查询
文件映射
mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写数据到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。
mmap函数:
-
头文件
#include <sys/mman.h>
-
函数原型
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); //解除映射 int munmap(void *addr, size_t length);
-
参数说明
-
addr:映射的地址空间首地址,NULL 表示让系统决定;
-
length:地址空间大小
-
prot:映射的地址空间访问方式,必须和文件打开方式匹配
-
flags: 映射的地址空间的访问标记常见的标志位:
MAP_SHARED
这个选项表示映射的内存区域与文件共享,即对映射内存区域的修改会直接反映到原始文件中。通常用于多个进程共享同一文件的情况。- 例如:进程 A 和进程 B 都映射了同一个文件,进程 A 修改了映射区域中的内容,进程 B 可以立即看到这些修改。
MAP_PRIVATE
这个选项表示映射的内存区域与文件私有,修改映射区域的内容不会写回到原文件。此类修改仅在当前进程的内存中有效,其他进程不可见。- 例如:进程 A 映射了一个文件并修改了映射区域的内容,但文件本身保持不变。
MAP_ANONYMOUS
这个选项表示创建一个匿名内存映射,即该映射不与任何文件相关联。fd
参数通常为-1
。它用于分配一块内存,而不是映射一个文件。对于不需要读取或写入文件的场景,匿名映射特别有用。- 例如:创建一个内存区域供程序使用(如内存池、数据结构等),而不需要任何文件作为后端。
MAP_FIXED
这个选项表示指定的addr
地址是映射区域的起始地址。它要求映射区域严格地在该地址上开始。如果该地址已有其他映射或冲突,则会直接替换现有的映射区域。- 注意:如果指定的地址无法映射(例如,无法与当前地址空间兼容),
mmap
将返回MAP_FAILED
。
- 注意:如果指定的地址无法映射(例如,无法与当前地址空间兼容),
MAP_FILE
这个选项指定映射的是文件,通常默认情况下,mmap
会将文件映射到内存。该选项几乎与MAP_SHARED
等价,但出于兼容性考虑,MAP_FILE
仍然可以使用。MAP_HUGETLB
这个选项表示使用大页面(huge pages)。它要求映射使用大页内存,而不是系统默认的标准页面。这个选项通常需要超级用户权限,并且在支持大页的操作系统中才有效。- 例如:在内存密集型应用(如数据库、虚拟机管理程序)中,使用大页面可以提高内存管理的效率。
MAP_LOCKED
这个选项表示映射的内存区域在物理内存中将被锁定,操作系统不会将其交换到交换空间(swap)中。这对于实时应用或对内存访问有严格要求的应用非常有用。MAP_NORESERVE
这个选项表示在创建映射时不保留交换空间(swap),即使映射的内存区域并没有实际分配内存。这通常用于创建一个大区域的虚拟内存映射,期望它不会被使用。- 该选项一般在大数据结构的内存分配中使用,以避免过多的交换空间消耗。
MAP_POPULATE
这个选项会在映射时立即预取(prefetch)所有的页面,即使这些页面还没有被访问过。它可以减少后续对内存的访问延迟,适用于希望提前加载数据的应用。MAP_STACK
这个选项用来为程序的线程栈创建映射,表示该映射是为了线程的栈而创建的。通常由系统自动处理。
-
fd: 需映射的文件描述符
-
offset: 文件存储空间的偏移量
-
-
返回值
- 成功:munmap返回 0 ,mmap 返回映射后的地址;
- 出错:返回 MMAP_FAILED,并将错误码存入 errno 中
-
案例
#include <stdio.h> #include <stdlib.h> #include <sys/mman.h> #include <fcntl.h> #include <unistd.h>int main() {const char *filename = "testfile.txt";int fd = open(filename, O_RDWR); // 打开文件,读取/写入权限if (fd == -1) {perror("open");return 1;}// 获取文件的大小off_t file_size = lseek(fd, 0, SEEK_END);// 使用 mmap 映射文件到内存char *mapped = (char *)mmap(NULL, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);if (mapped == MAP_FAILED) {perror("mmap");close(fd);return 1;}// 修改文件内容mapped[0] = 'H'; // 将文件的第一个字符改为 'H'// 同步映射区的内容到文件if (msync(mapped, file_size, MS_SYNC) == -1) {perror("msync");}// 解除映射if (munmap(mapped, file_size) == -1) {perror("munmap");}close(fd);return 0; }
-
文件映射与系统i/o的区别
-
抽象层次
-
文件映射(Memory-Mapped Files):文件映射是一种将文件内容映射到进程的虚拟内存中的技术。通过文件映射,程序可以像访问内存一样访问文件的内容,而不需要显式地进行文件读取或写入操作。文件映射通过操作系统的虚拟内存管理机制来管理文件的加载和访问。
-
系统I/O(System I/O):系统I/O是通过操作系统提供的系统调用(如
read
,write
,open
,close
等)直接进行文件操作。程序需要显式地读取或写入数据到文件中,通常依赖于内存缓冲区。
-
-
性能和效率
-
文件映射:文件映射能够提供更高效的文件操作,尤其是在处理大文件或频繁访问文件的场景下。操作系统会自动将文件的数据加载到内存中,并根据需要进行页面交换。文件映射的优势在于它通过内存管理机制减少了多次I/O操作,提高了性能。内存映射文件可以直接在内存中访问,从而避免了频繁的磁盘I/O。
-
系统I/O:系统I/O操作通常需要显式地读取或写入文件,每次操作都可能涉及磁盘I/O,尤其是在没有有效缓存时。系统I/O的性能受到磁盘I/O和缓冲策略的影响,通常比文件映射较慢,特别是在频繁读取大文件时。
-
-
访问方式
-
文件映射:文件映射将文件的一部分或整个文件映射到进程的虚拟地址空间,使程序可以通过指针直接访问文件内容。这种访问方式类似于访问普通内存,程序员可以像操作内存一样对文件进行读写。
-
系统I/O:系统I/O需要使用操作系统提供的接口(如
read
,write
等)来显式地读取或写入文件内容,数据需要先从文件中读取到内存中的缓冲区,然后进行处理。文件的访问方式是通过系统调用来完成的。
-
-
数据同步
-
文件映射:文件映射的更大优点之一是,操作系统负责管理数据的同步。数据可以在内存中直接操作,操作系统会定期将内存中更改的数据写回磁盘。为了保证数据一致性,通常会使用
msync
或munmap
等函数来手动同步数据。 -
系统I/O:系统I/O通常依赖于缓冲区来处理数据,程序员需要显式地调用
flush
等函数来确保缓冲区的内容被写回磁盘,或者使用文件关闭操作来触发数据的同步。
-
-
内存使用
-
文件映射:文件映射会直接将文件的一部分或整个文件映射到进程的虚拟内存空间。操作系统会为映射区域分配虚拟内存,并在实际访问时将数据从磁盘加载到内存中。对于大型文件,文件映射只会在需要时加载文件的部分数据,而不是将整个文件加载到内存中。
-
系统I/O:系统I/O操作通常需要将文件的数据读入到应用程序提供的缓冲区中。缓冲区的大小由程序员控制,且每次I/O操作都可能导致较高的内存使用,尤其是在读取大型文件时。
-
-
总结:
- 文件映射:通过将文件映射到内存中,提供了一种高效的方式来处理文件,可以像操作内存一样访问文件内容,适用于需要频繁或大规模访问文件的场景。
- 系统I/O:是传统的文件操作方式,需要显式进行文件读取或写入操作,适用于一般的文件访问,但性能和灵活性相对较低。
文件状态查询
-
头文件
#include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h>
-
函数原型:
int stat(const char *path, struct stat* buf) int fstat(int fd, struct stat *buf);
-
参数说明
-
path:要操作的文件名或路径;
-
buf:指向stat 结构体的指针,用来获取文件状态信息:
struct stat {dev_t st_dev; //文件设备编号ino_t st_ino; //文件inode节点号mode_t st_mode; //文件类型,访问权限等nlink_t st_nlink; //文件的连接数uid_t st_uid; //文件所有者的用户IDgid_t st_gid; //文件所有者对应的组IDdev_t st_rdev; //若文件为设备文件,则表示设备编号off_t st_size; //文件大小,对应的文件字节数blksize_t st_blksize; //文件系统的 I/O 缓冲区大小blkcnt_t st_blocks; //占用文件区块数量,每一区块512 字节time_t st_atime; //文件最后一次被访问的时间time_t st_mtime; //文件内容最后一次被修改的时间time_t st_ctime; //最后一次改变时间(属性改变) };
-
fd:文件描述符
-
st_mode
st_mode 常见取值: (八进制,文件类型主要取决第3字节)
S_IFSOCK 0140000 socket 套接字文件 S_IFLNK 0120000 链接文件 S_IFREG 0100000 一般文件 S_IFBLK 0060000 块设备文件 S_IFDIR 0040000 目录 S_IFCHR 0020000 字符设备文件 S_IFIFO 0010000 管道文件 上述的文件类型在POSIX中定义了检查这些类型的宏定义:
S_ISLNK (st_mode) 判断是否为链接文件 S_ISREG (st_mode) 是否为一般文件 S_ISDIR (st_mode) 是否为目录 S_ISCHR (st_mode) 是否为字符设备文件 S_ISBLK (st_mode) 是否为块设备文件 S_ISSOCK (st_mode) 是否为socket套接字文件 S_ISFIFO (st_mode) 是否为管道文件 st_mode 其他常见取值:
S_IRWXU 00700 自己拥有所有权限 S_IRUSR 00400 自己拥有读权限 S_IWUSR 00200 自己拥有写权限 S_IXUSR 00100 自己拥有执行权限 S_IRWXG 00070 自己组拥有所有权限 S_IRGRP 00040 自己组拥有写权限 S_IWGRP 00020 自己组拥有执行权限 S_IXGRP 00010 自己组拥有执行权限 S_IRWXO 00007 其他组用户拥有所有权限 S_IROTH 00004 其他组用户拥有读权限 S_IWOTH 00002 其他组用户拥有写权限 S_IXOTH 00001 其他组用户拥有执行权限
-
利用用户ID获取用户信息,
-
头文件
#include <sys/types.h> #include <pwd.h>
-
函数原型
struct passwd* getpwuid(uid_t uid);
-
参数说明
uid:用户id;
利用用户组ID获取用户组信息
-
头文件
#include <sys/types.h> #include <grp.h>
-
函数原型
struct group *getgrgid(gid_t gid)
-
参数说明
gid:用户组id;
-
返回值
成功后返回下列结构体:
struct passwd {char* pw_name; /* user name */char* pw_passwd; /* user password */uid_t pw_uid; /* user ID */gid_t pw_gid; /* group ID */char* pw_gecos; /* user information */char* pw_dir; /* home directory */char* pw_shell; /* shell program */};struct group {char* gr_name; /* group name */char* gr_passwd; /* group password */gid_t gr_gid; /* group ID */char** gr_mem; /* group members */};
-
案例:
#include <stdio.h> #include <stdlib.h> #include <grp.h> #include <sys/types.h>int main() {gid_t gid = 1000; // 替换为一个有效的组 IDstruct group *grp = getgrgid(gid);if (grp != NULL) {printf("组名: %s\n", grp->gr_name);printf("组 ID: %d\n", grp->gr_gid);printf("组成员: ");for (char **member = grp->gr_mem; *member != NULL; member++) {printf("%s ", *member);}printf("\n");} else {perror("getgrgid");}struct passwd *pw = getpwuid(uid);if (pw != NULL) {printf("用户名: %s\n", pw->pw_name);printf("用户 ID: %d\n", pw->pw_uid);printf("主组 ID: %d\n", pw->pw_gid);printf("主目录: %s\n", pw->pw_dir);printf("登录 Shell: %s\n", pw->pw_shell);} else {perror("getpwnam");}return 0; }
相关文章:
Linux 操作二:文件映射与文件状态
Linux 操作二:文件映射与文件状态查询 文件映射 mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程…...
ASP .NET Core 学习 (.NET 9)- 创建 API项目,并配置Swagger及API 分组或版本
本系列为个人学习 ASP .NET Core学习全过程记录,基于.NET 9 和 VS2022 ,实现前后端分离项目基础框架搭建和部署,以简单、易理解为主,注重页面美观度和后台代码简洁明了,可能不会使用过多的高级语法和扩展,后…...
电脑换固态硬盘
参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin
Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…...
MySQL8数据库全攻略:版本特性、下载、安装、卸载与管理工具详解
大家好,我是袁庭新。 MySQL作为企业项目中的主流数据库,其5.x和8.x版本尤为常用。本文将详细介绍MySQL 8.x的特性、下载、安装、服务管理、卸载及管理工具,旨在帮助用户更好地掌握和使用MySQL数据库。 1.MySQL版本及下载 企业项目中使用的…...
机器学习之决策树(DecisionTree)
决策树中选择哪一个特征进行分裂,称之为特征选择。 特征选择是找出某一个特征使得分裂后两边的样本都有最好的“归宿”,即左边分支的样本属于一个类别、右边分支的样本属于另外一个类别,左边和右边分支包含的样本尽可能分属同一类别ÿ…...
Qt Desiogn生成的ui文件转化为h文件
1.找到这个工具 2.查找到ui文件以及要转化为的h文件的路径。 3.在1中的工具输入uic /xx/xxx.ui -o /xx/xxx.h即可得到结果。...
python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测
OpenCV中边缘检测四种常用算子: (1)Sobel算子 Sobel算子是一种基于梯度的边缘检测算法。它通过对图像进行卷积操作来计算图像的梯度,并将梯度的大小作为边缘的强度。它使用两个3x3的卷积核,分别用于计…...
【论文阅读】VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning
VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning -- VCD-FL:可验证可抵抗共谋攻击的动态联邦学习 来源背景介绍相关工作本文贡献预备知识 系统模型威胁模型具体实现初始化本地训练梯度加密承诺生成插值优化 密文聚合聚合结果验证梯度解密结果验证恶意…...
浙江安吉成新照明电器:Acrel-1000DP 分布式光伏监控系统应用探索
安科瑞吕梦怡 18706162527 摘 要:分布式光伏发电站是指将光伏发电组件安装在用户的建筑物屋顶、空地或其他适合的场地上,利用太阳能进行发电的一种可再生能源利用方式,与传统的大型集中式光伏电站相比,分布式光伏发电具有更灵活…...
记一次数据库连接 bug
整个的报错如下: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Metho…...
STM32 FreeRTOS 信号量
信号量的简介 reeRTOS中的信号量是一种用于任务间同步和资源管理的机制。信号量可以是二进制的(只能取0或1)也可以是计数型的(可以是任意正整数)。信号量的基本操作包括“获取”和“释放”。 比如动车上的卫生间,一个…...
计算机网络 | 什么是公网、私网、NAT?
关注:CodingTechWork 引言 计算机网络是现代信息社会的基石,而网络通信的顺畅性和安全性依赖于有效的IP地址管理和网络转换机制。在网络中,IP地址起到了标识设备和进行数据传输的核心作用。本文将详细讨论公网IP、私网IP以及NAT转换等网络技…...
学技术学英文:通过jmeter命令行工具生成聚合报告文件到csv文件
单词 汉语意思 音标 aggregate 聚合 /ˈɡrɪɡeɪt/ command-line 命令行 /kəˈmnd laɪn/ distribution 分布 /ˌdɪstrɪˈbjuːʃn/ extractor 提取器 /ɪkˈstrktər/ granulation 细分 /ˌɡrnjuˈleɪʃn/ jmeter JMeter(软件࿰…...
数据库开发支持服务
文章目录 前言适用产品服务范围前提条件责任矩阵交互项目 服务流程交付件项目完成标志 前言 数据库开发支持服务是为了达成客户业务系统开发、测试、上线运行提供的具体技术支撑,内容包括数据库开发指导、性能调优、第三方平台对接支持、应用对接与上线支持等。数据…...
【SQL 中的分组查询与联合查询详解】
文章目录 SQL 中的分组查询与联合查询详解1. GROUP BY分组查询1.1 语句格式1.2 示例说明1.2.1 分别查询哥哥组和弟弟组的英语成绩总和1.2.2 查询哥哥组的所有成绩总和 2. 联合查询2.1 内连接2.1.1 语法格式2.1.2 执行过程 2.2 外连接2.2.1 左外连接2.2.2 右外连接 2.3 自连接2.…...
如何提高自动化测试覆盖率和效率
用ChatGPT做软件测试 在现代软件开发中,自动化测试已经成为保证软件质量的重要手段。然而,在实践中,自动化测试的覆盖率和效率常常受到限制,导致潜在缺陷未能及时发现或测试资源浪费。因此,提升自动化测试的覆盖率和效…...
Vue3 nginx 打包后遇到的问题
前端vite文件配置 export default defineConfig({plugins: [vue(),DefineOptions()],base:./,resolve:{alias:{:/src, //配置指向src目录components:/src/components,views:/src/views}},server:{// host:0.0.0.0,// port:7000,proxy:{/api:{target:xxx, // 目标服务器地址 &am…...
【PCIe 总线及设备入门学习专栏 5.3.2 -- PCIe 枚举与 PCIe PHY firmware 的区别与联系】
文章目录 OverviewPCIe 枚举与PCIe PHY固件的区别与联系1. PCIe 枚举2. PCIe PHY固件3. 区别4. 联系 举例说明实例场景 1:服务器启动 PCIe 网卡的过程实例场景 2:PCIe 热插拔设备的调试 Overview 本文将详细介绍 PCIe 枚举与 PCIe PHY firmware 的区别与…...
电动汽车超级充电设备与车辆之间的通讯协议对27930-2015国标的修改记录
左侧为团体标准 右侧为国标 1.CHM SPN 2600 数据修改为 团标数据: 0x534331 ,国标数据:0x000101 2.BRM SPN 2565 数据修改为 团标数据: 0x53…...
案例分析一
张某(10多年IT工作经验)应聘一家国企单位,面试官(技术副主管)面试时问了些无关痛痒的问题,谈到薪资时强调我权限范围内的数额就那么多,再多就需要走申请流程进行操作了。 没几天入职后…...
2.5G PoE交换机 TL-SE2109P 简单开箱评测,8个2.5G电口+1个10G光口(SFP+)
TPLINK(普联)的万兆上联的2.5G网管交换机TL-SE2109P简单开箱测评。8个PoE 2.5G电口,1个万兆SFP上联口。 2.5G交换机 TL-SE2420 简单开箱评测,16个2.5G电口4个10G光口(SFP):https://blog.zeruns.com/archives/837.html…...
mysql存电话号码应该用int还是string类型
在MySQL中,存储电话号码一般建议使用**STRING 类型**(通常是 VARCHAR),而不是 INT 类型,原因如下: 1. 电话号码不是数字用于计算的值 电话号码本质上是一个标识符,不需要进行数学运算。如果用…...
解决本地运行MR程序访问权限问题
文章目录 1. 提出问题2. 解决问题2.1 临时解决方案2.2 永久解决方案 3. 小结 1. 提出问题 运行DeduplicateIPsDriver类,抛出如下异常: 该错误信息表明在尝试运行 DeduplicateIPsDriver 类时,遇到了 HDFS(Hadoop 分布式文件系统&a…...
Codeforces Round 997 (Div. 2) A~C
今天的封面是水母猫猫和佩佩,原图在这里,记得关注画师夏狩大大 至此,天鹅完成了连续四场比赛在四个不同比赛上四次分的壮举!(ABC388,CodeChef169,牛客月赛109,CF997) 这场…...
3. Go函数概念
在 Go 语言中,函数被称为一等公民(First-Class Citizens),意味着函数可以像其他数据类型(如整数、字符串、结构体等)一样作为变量传递、返回、赋值等。这使得 Go 在编程时具备了极大的灵活性。 1、函数概念…...
python-44-嵌入式数据库SQLite和DuckDB
文章目录 1 SQLite1.1 世界上最流行的数据库1.1 SQLite简介1.2 插入语句1.3 查询数据1.4 更新数据1.5 删除数据2 DuckDB2.1 DuckDB简介2.2 DuckDB与Python结合使用2.2.1 创建表2.2.2 分析语句2.2.3 导出为parquet文件2.3 Windows中使用DuckDB3 参考附录1 SQLite Python的一个特…...
使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出,详见以下博客: Spring Boot Apache POI 实现 Exc()el 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并&#…...
R语言的并发编程
R语言的并发编程 引言 在现代计算中,如何有效地利用计算资源进行数据处理和分析已成为一个重要的研究方向。尤其在大数据时代,数据量的急剧增加让单线程处理方式显得力不从心。为了解决这一问题,各种编程语言都开展了并发编程的研究和应用。…...
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目
音乐播放器实现:前端HTML,CSS,JavaScript综合大项目 项目概述项目视图效果一、侧边栏相关代码(一)HTML代码(二)css代码 二、登录页面(一)HTML代码(二)css代码…...
PixArt--alpha笔记
PixArt-α 是华为发布的文生图模型。 训练策略分解:设计三个不同训练步骤,分别优化像素依赖、文本图像对齐和图像审美质量。高效T2I transformer:将 cross-attention融入 Diffusion Transformer (DiT)注入文本条件,简化计算密集的…...
内网渗透测试工具及渗透测试安全审计方法总结
1. 内网安全检查/渗透介绍 1.1 攻击思路 有2种思路: 攻击外网服务器,获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板,攻击内网其他服务器,最后获得敏感数据,并将数据传递到攻击者࿰…...
java工程学习步骤
1、安装idea,安装maven,mysql数据库 2、创建一个多maven的springboot的项目,可以正常启动以及可以访问web页面 3、引入日志使用slflogbck进行日志打印,同时封装统一的日志打印工具,idea安装maven analyzer工具&#…...
使用Flask和Pydantic实现参数验证
使用Flask和Pydantic实现参数验证 1 简介 Pydantic是一个用于数据验证和解析的 Python 库,版本2的性能有较大提升,很多框架使用Pydantic做数据校验。 # 官方参考文档 https://docs.pydantic.dev/latest/# Github地址 https://github.com/pydantic/pyd…...
LabVIEW 蔬菜精密播种监测系统
在当前蔬菜播种工作中,存在着诸多问题。一方面,播种精度难以达到现代农业的高标准要求,导致种子分布不均,影响作物的生长发育和最终产量;另一方面,对于小粒径种子,传统的监测手段难以实现有效监…...
统信UOS系统安装redis
1、yum引入redis yum install redis2、创建日志文件夹 mkdir -p /var/log/redis mkdir -p /var/lib/redis3、添加用户 useradd redis -s /usr/sbin/nologin4、文件夹赋权限 chown -R redis:root /var/log/redis chown redis:root /etc/redis.conf chown -R redis:root /var…...
课程如何抵御脑腐的冲击
课程需要引导学生逐步形成深度思考的能力,才有可能抵御‘Brain Rot’,否则都不会取得任何改善。 一步步失去的思维力,需要一步步引导恢复,类似康复训练。这是一个非常长期而艰辛但又十分有意义和有价值的工作。 这是一篇类似工作转…...
2.4 如何学习表示学习(Representation Learning)
如何学习表示学习(Representation Learning) 学习表示学习(Representation Learning)是理解和掌握机器学习、深度学习以及人工智能的关键一步。表示学习主要关注从原始数据中提取有效的特征或表示,使得模型能够高效处理和理解复杂的数据。以下是一些系统的方法,帮助你一…...
介绍下常用的前端框架及时优缺点
以下是一些常用的前端框架及其优缺点介绍: React • 优点 • 组件化架构:可构建可复用的UI组件,提高开发效率和组件可维护性。 • 虚拟DOM:高效更新页面,减少直接操作DOM的性能开销。 • 灵活性和可扩展性…...
Rust 猜数字游戏:从 0 到 1 的完整实现与深入解析
一、项目概述 1.1 为什么选择“猜数字”? “猜数字”是编程入门中非常经典的一个项目。它看似简单,却能很好地展示: 输入输出 (I/O):提示用户输入并读取内容。随机数:每次运行生成一个随机值,保证游戏的…...
使用C语言实现栈的插入、删除和排序操作
栈是一种后进先出(LIFO, Last In First Out)的数据结构,这意味着最后插入的元素最先被删除。在C语言中,我们可以通过数组或链表来实现栈。本文将使用数组来实现一个简单的栈,并提供插入(push)、删除(pop)以及排序(这里采用一种简单的排序方法,例如冒泡排序)的操作示…...
职场的三个阶段及其应对规划:以前端开发工程师为例
作为职场人士,特别是 IT 开发工程师,职业生涯的发展路径往往伴随着不同的挑战与机遇。一般而言,职场生涯可以划分为三个阶段:找工作阶段、有工作阶段以及职业转型阶段。每个阶段都有其特定的特征和应对策略,下面我将从…...
【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
前言 随着自然语言处理(NLP)技术的快速发展,越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型(LLM),以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架,支持多种先…...
蓝桥杯训练—斐波那契数列
文章目录 一、题目二、解析三、代码 一、题目 求100以内的斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列 ,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入&…...
TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)
TensorFlow 作为深度学习框架,当然是为了帮助我们更便捷地构建神经网络。所以,本次实验将会了解如何使用 TensorFlow 来构建神经网络,并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…...
复健第二天之[MoeCTF 2022]baby_file
打开题目在线环境可以看到: 感觉要用伪协议去求,但是我们并不知道flag的位置,这里我选择用dirsearch去扫一下: 最像的应该就是flag.php了 于是就构建payload: **?filephp://filter/convert.base64-encode/resource…...
【QT用户登录与界面跳转】
【QT用户登录与界面跳转】 1.前言2. 项目设置3.设计登录界面3.1 login.pro参数3.2 界面设置3.2.1 登录界面3.2.2 串口主界面 4. 实现登录逻辑5.串口界面6.测试功能7.总结 1.前言 在Qt应用程序开发中,实现用户登录及界面跳转功能是构建交互式应用的重要步骤之一。下…...
【docker踩坑记录】
docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…...
【Azure 架构师学习笔记】- Azure Function (2) --实操1
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...
豆包MarsCode:构造特定数组的逆序拼接
问题描述 思路分析 1. 数组的组成: 我们要根据 i 的不同值拼接出不同长度的子数组。对于每个 i 从 1 到 n,我们要把数字从 n 逆序到 i 拼接成一个子数组。 例如,当 i 1 时,拼接 [n, n-1, ..., 1]。当 i 2 时,拼接 …...