当前位置: 首页 > news >正文

C语言文件操作入门

本节重点

  • 理解文件的形式与基本概念
  • 二进制文件与文本文件
  • 文件的打开与关闭
  • 文件读写函数、
  • 文件缓冲区

正文开始---------------------------------------------------------------------------------------------------------------------

一、为什么使用文件

程序运行时数据存储在内存中(如变量、数组),但程序结束后内存会被操作系统回收,数据随之丢失,用户配置、日志记录、程序状态等数据需跨会话保存,文件是操作系统提供的标准持久化方案,通过文件存储,C 程序能够突破内存限制,实现数据的长期保存和跨会话共享,是构建健壮应用程序的基础能力。

也就是说数据保存在内存之中容易丢失,我们可以通过文件操作将数据保存在文件也就是磁盘或硬盘之中。

二、什么是文件

在计算机领域,文件是存储数据的核心单位,用于将信息以特定格式保存在物理存储设备(如硬盘、SSD)中。

在Windows中通过可视化操作界面,文件的存在形式是这样的:

而在Linux操作系统中,通过命令行操作文件的存在形式是这样的:

2.1 程序文件

程序文件是包含机器语言指令(二进制代码)或解释型语言代码的文件,可被操作系统识别并执行从而实现特定的功能。

程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行文件(Windows环境后缀为.exe)。

2.2 数据文件

文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。

在这里,我们主要讨论的是数据文件。

在之前我们所处理的数据的输入输出都是以终端为对象,即从终端的键盘输入数据(主要通过scanf 函数),运行结果显示到显示器上(主要通过 printf 函数)。

其实有时候我们可以把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,这里处理的就是磁盘上的文件。

2.3、文件名

文件名要有一个唯一的文件标识,以便用户识别和引用。

文件名包含3部分:文件路径+文件主干+文件后缀,例如:

D:\code\new_code\code.exe

为了方便起见,文件标识符常被称为文件名

四、二进制文件与文本文件

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

数据在内存中以二进制的形式存储,如果不加转换就输出到外存的文件中,就是二进制文件。如果要求在外存上以ASCLL码的形式存储,则需要在存储前转换,以ASCLL码的形式存储的文件就是文本文件。

一个数据在文件中是怎么存储的呢?

字符一律按ASCLL码的形式存储,数值型数据既可以用ASCLL码形式存储也可以以二进制形式存储。

例如,一个数值型数据10000以ASCLL码存储时一共有5个字符分别为1、0、0、0、0共占用5个字节,而以二进制形式存储时占4个字节。

四、文件的打开与关闭

4.1 流和标准流

4.1.1 流

在编程中,“流”(Stream)是一种抽象的数据处理模型,用于逐步传输或处理数据,而无需一次性将整个数据加载到内存中。它类似于现实世界中的“水流”,数据像水流一样按顺序流动,程序可以按需读取或写入数据片段。

C程序针对文件、画面、键盘等的数据的输入输出操作都是通过流实现的。

4.1.2 标准流

在编程中,“标准流”(Standard Streams)是操作系统或运行时环境预定义的三个默认数据流,用于程序与外界(如终端、文件或其他程序)进行交互。它们是:

  1. stdin  -标准输入流,在大多数情况下从键盘输入,scanf函数就是从标准输入流中读取数据
  2. stdout-标准输出流,大多数环境中输出到显示器界面,printf函数就是将信息输出到标准输出流中
  3. stderror-标准错误流,大多数环境中输出到显示器界面。

当我们的程序启动,或者说进程创建时,操作系统会为我们的程序自动分配三个标准流并默认连接到终端设备(显示器、键盘)。

stdin、stdout、stderror三个流的类型都是FILE*,通常称为文件指针,在C语言中就是通过文件指针来维护流的各种操作的

4.2 文件指针

当我们打开一个文件时,为了方便我们对被打开文件的进一步管理和维护,内存中就会开辟一个相应的“文件信息区”用来存放被打开文件的相关信息(如文件的名字,状态以及文件当前的位置等等文件属性)。这些信息是保存在一个结构体变量中的,也就是说这个“文件信息区”就是一个结构体,该结构体的类型是由系统声明的,取名为FILE。

例如,vs2013编译环境提供的stdio.h头文件中有以下的文件类型声明:

struct _iobuf {char *_ptr;int _cnt;char *_base;int _flag;int file;int _charbuf;int bufsiz;char *_tmpfname;};
typedef struct _iobuf FILE;

每当打开一个文件时,系统就会开辟内存空间创建一个FILE结构体来管理该文件的相关属性和信息,使用者不必关心其细节。

为了将每个文件与所对应的“文件休信息区”(FILE)关联起来,就引出了文件指针(FILE*)的概念。通过使文件指针指向某个文件的“文件信息区”(本质是一个结构体变量),通过该文件信息区中的信息就能找到并管理该文件。

也就是说,通过文件指针变量就能间接找到与它关联的文件。

4.3 文件的打开与关闭

文件在读写之前首先应该打开文件,在使用结束后关闭文件。本质上就是保证打开文件后系统就会创建对应的“文件信息区”来方便用户对文件进行管理与维护,关闭文件目的是释放相应的内存空间,不然过多无效的“文件信息区”会占用内存,严重时会导致内存泄漏。

在编写程序的时候,在打开文件的同时,都会返回一个FILE* 类型的指针变量指向该文件,也相当于建立了指针与文件的关系。

ANSIC规定使用fopen函数来打开文件,fclose来关闭文件:

//打开文件
FILE* fopen(const char* filename,const char* mode);//关闭文件
int fclose(FILE* stream);

mode参数表示文件的打开方式,下面都是文件的打开模式:

模式描述读权限写权限追加模式文件不存在时文件存在时初始位置
r只读模式(文本文件)✔️失败(返回 NULL保留内容,从文件开头读取文件开头
w只写模式(文本文件,覆盖原有内容✔️创建新文件清空文件内容文件开头
a追加模式(文本文件,写入内容到文件末尾)✔️✔️创建新文件保留内容,写入位置在文件末尾文件末尾
r+读写模式(文本文件,不截断文件✔️✔️失败保留内容,从文件开头读写文件开头
w+读写模式(文本文件,覆盖原有内容✔️✔️创建新文件清空文件内容文件开头
a+读写追加模式(文本文件,写入到文件末尾,可读取整个文件)✔️✔️✔️创建新文件保留内容,写入位置在文件末尾文件末尾(读从开头)
rb只读模式(二进制文件)✔️失败保留内容,从文件开头读取文件开头
wb只写模式(二进制文件,覆盖原有内容✔️创建新文件清空文件内容文件开头
ab追加模式(二进制文件,写入内容到文件末尾)✔️✔️创建新文件保留内容,写入位置在文件末尾文件末尾
r+b读写模式(二进制文件,不截断文件✔️✔️失败保留内容,从文件开头读写文件开头
w+b读写模式(二进制文件,覆盖原有内容✔️✔️创建新文件清空文件内容文件开头
a+b读写追加模式(二进制文件,写入到文件末尾,可读取整个文件)✔️✔️✔️创建新文件保留内容,写入位置在文件末尾文件末尾(读从开头)
x独占创建模式(仅当文件不存在时创建,失败返回 NULL✔️/❌✔️创建新文件失败(文件已存在)文件开头

实例代码:

#include<stdio.h>int main()
{FILE* pf=fopen("text.txt","w");if(pf==NULL){//文件打卡失败perror("fopen");return 0;}const char* txt="hello world!!";fputs(txt,pf);fclose(pf);return 0;
}

五、文件的顺序读写

5.1  字符读写

fgetc 

  • 功能:从文件中读取单个字符
  • 参数:FILE* stream(文件指针)
  • 返回值:成功返回字符的int值,失败或文件结束返回EOF

fputc

  • 功能:向文件中写入单个字符
  • 参数:int c(字符),FILE* stream(文件指针)
  • 返回值: 成功返回写入的字符,失败返回EOF

5.2  字符串读写

fgets

  • 功能:从文件中读取一行字符串(直到遇到换行符或指定长度)
  • 参数:char* s(自定义缓冲区),int size(最大长度),FILE* stream(文件指针)
  • 返回值:成功返回缓冲区的指针,失败或文件结束返回NULL

fputs

  • 功能:向指定文件中写入一行字符串
  • 参数:const char* s(字符串),FILE* stream
  • 返回值:成功返回非负值,失败返回EOF

5.3  格式化读写

fscanf

  • 功能:按指定格式从文件中读取数据
  • 参数:FILE* stream,格式化字符串,变量地址列表
  • 返回值:成功匹配并赋值的参数个数,失败返回EOF

fprintf

  • 功能:按指定格式向文件中写入数据
  • 参数:FILE* stream,格式化字符串,变量列表
  • 返回值:成功返回写入的字符数,失败返回负数

5.4  块读写(二进制模式)

fread

  • 功能:从文件中读取二进制数据块
  • 参数:void* ptr(缓冲区),size_t size(每个元素大小),size_t nmemb(要读取的元素数量),FILE* stream。

  • 返回值:成功读取的元素数量。

fwrite

  • 功能:向文件写入二进制数据块。
  • 参数:void* ptr(要写入的数据的指针),size_t size(每个元素大小)size_t nmemb(要写入的元素的数量)FILE *stream

  • 返回值:成功写入的元素数量

六、文件的随机读写 

文件的随机读写允许程序直接跳转到文件的任意位置进行读写操作,无需按顺序访问。

fseek

  • 功能:移动文件指针到指定位置
  • 参数:FILE* stream(文件指针),long offset(偏移量字节) ,int origin(基准位置)
  • 返回值:成功返回0,失败返回非0值

ftell

  • 功能:返回文件指针相对于起始位置的偏移量
  • 参数:FILE* stream
  • 返回值: 成功返回long类型的偏移量

rewind

  • 功能:将文件指针重置到文件开头
  • 参数:FILE* stream
  • 返回值: 无

七、文件缓冲区

在之后的学习中我们会了解到,其实C语言中文件的各类读写函数其实底层都封装了系统调用接口read,write来向操作系统发出各类操作指令,而系统调用是一个复杂的概念它涉及到操作系统对内存空间的各类调度与管理,如果C语言中的文件函数直接访问文件或磁盘中的数据,频繁地进行读取和写入操作,就意味着系统调用接口的频繁调用加重CPU的负担,减低I/O的效率

为了避免这个问题,我们引入了文件缓冲区的概念,它通过先将程序数据先放入缓冲区中,通过刷新机制将多次小数据量的读写合并为少量大块操作,减少直接访问磁盘的次数,显著提升I/O效率,避免频繁的系统调用。

 写个代码验证一下:

#include<stdio.h>
#include<windows.h>
int main()
{FILE*pf = fopen("test.txt", "w");fputs("abcdef", pf);//先将代码放在输出缓冲区printf("睡眠10秒已经写数据了,打开test.txt⽂件,发现⽂件没有内容\n");Sleep(10000);printf("刷新缓冲区\n");fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到⽂件(磁盘)//注:fflush 在⾼版本的VS上不能使⽤了printf("再睡眠10秒-此时,再次打开test.txt⽂件,⽂件有内容了\n");Sleep(10000);fclose(pf);//注:fclose在关闭⽂件的时候,也会刷新缓冲区pf = NULL;return 0
}

相关文章:

C语言文件操作入门

本节重点 理解文件的形式与基本概念二进制文件与文本文件文件的打开与关闭文件读写函数、文件缓冲区 正文开始--------------------------------------------------------------------------------------------------------------------- 一、为什么使用文件 程序运行时数据存…...

Java返回多个参数的方法

背景 在写代码的过程中&#xff0c;因有一些复杂的业务逻辑&#xff0c;需要返回多个结果。比如&#xff1a;需要增加一个true或者false&#xff0c;另外在加一个真正的结果值这样的类型。可能会有人用到数组以及Map等作为结果返回&#xff0c;当然这样确实是可以完成这样的功…...

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具&#xff0c;旨在将用户界面&#xff08;UI&#xff09;截图转换为结构化数据&#xff0c;从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…...

Java基础关键_023_IO流(一)

目 录 一、概述 二、分类 1.根据数据流向 2.根据读写数据形式 3.根据流在 IO 操作中的作用和实现方式 三、FileInputStream 1.说明 2.常用方法 &#xff08;1&#xff09;read() &#xff08;2&#xff09;read(byte[] b) &#xff08;3&#xff09;read(byte[] b, …...

Lora 中 怎么 实现 矩阵压缩

Lora 中 怎么 实现 矩阵压缩 1. 导入必要的库 import torch import re from datasets import Dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, \get_cosine_schedule_with_warmup, EarlyStoppingCallback from peft...

lombok不起作用

xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> <scope>provided</scope> </dependency> - **作用**&#xff1a;引入 L…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-1-常用命令速查表-集群健康检查、索引生命周期管理、故障诊断命令

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 附录-常用命令速查表 1-Elasticsearch 运维命令速查表&#xff08;集群健康检查、ILM管理、故障诊断&#xff09;一、集群健康检查与监控1.1 集群健康状态核心命令1.2 节点级健康诊断…...

探讨Deveco Studio常见问题及解决方案,分享快速排障方法

以下是针对 DevEco Studio 开发工具的常见问题、解决方案及快速排障方法&#xff0c;覆盖环境配置、编译运行、调试等多个环节&#xff0c;助您高效解决开发中的“拦路虎”。 一、环境配置问题 1. 安装失败或卡顿 现象&#xff1a; 安装时进度条卡住&#xff0c;或提示“Faile…...

Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则

目录 高层模块底层模块 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 依赖倒置原则 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 自己理解 开闭原则 …...

RISCV虚拟化环境搭建

概要 本文记搭建 RISCV 虚拟化环境的流程。 整体架构 我们使用 QEMU 来模拟 RISCV 的各种硬件扩展环境&#xff0c;通过 QEMU 启动 Ubuntu 作为我们的 Host 来在 Host 之中通过 KVMTOOL 来运行 Guest&#xff0c;学习 RISCV 的虚拟化。 目前我的 X86_64 主机使用的是 Ubunt…...

数据结构——串、数组和广义表

串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1​a2​...an​(n≥0) 其中&#xff0c;S是串名&#xff0c;单引号括起来的字符序列是串的值&#xff0c; a i a_i a…...

vue3 elementUi table自由渲染组件

文章目录 前言CustomTable如何使用tableColumn 属性h函数创建原生元素创建组件动态生成 前言 elementui中的table组件&#xff0c;表格中想要自由地渲染内容&#xff0c;是一种比较麻烦的事情&#xff0c;比如你表格中想要某一列插入一个button按钮&#xff0c;是不是要用插槽…...

Centos离线安装gcc

文章目录 Centos离线安装gcc1. gcc是什么&#xff1f;2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 项目下的开源编译器套件&#xff0c;主要用于将 C、C 等编程语言的源…...

odbus TCP转Modbus RTU网关快速配置案例

Modbus TCP 转Modbus RTU网关快速配置案例 在工业自动化领域&#xff0c;Modbus 协议以其简洁和高效而著称&#xff0c;成为众多设备通信的首选。 随着技术的发展和应用场景的变化&#xff0c;Modbus 协议也发展出了不同的版本&#xff0c;其中 Modbus TCP 和 Modbus RTU 是两种…...

Unity3D开发AI桌面精灵/宠物系列 【一】 窗口透明化 背景剔除 、去边框、去Logo动画UI正常显示

Unity3D 交互式AI桌面宠物开发系列【一】 文章主要介绍怎么制作AI桌面宠物的流程&#xff0c;我会从项目开始创建初期到最终可以和AI宠物进行交互为止&#xff0c;项目已经开发完成&#xff0c;我会仔细梳理一下流程&#xff0c;分步讲解。 这篇文章主要讲初期一些设置和部署。…...

Vue 自定义指令深度解析与应用实践

文章目录 1. 自定义指令概述1.1 核心概念1.2 指令生命周期 2. 自定义指令基础2.1 指令注册2.2 指令使用 3. 指令钩子函数详解3.1 钩子函数参数3.2 钩子函数示例 4. 自定义指令应用场景4.1 表单自动聚焦4.2 权限控制4.3 图片懒加载 5. 高级应用技巧5.1 动态指令参数5.2 指令修饰…...

基于SpringBoot+Vue的幼儿园管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、教师、普通用户功能模块&#xff1a;用户管理、教师管理、班级管理、幼儿信息管理、会议记录管理、待办事项、职工考核、请假信息、缴费信息、体检管理、资源管理、原料管理、菜品信息管理等技术选型&#xff1a;SpringBoot&#xff0…...

超级课程表项目结尾

L3-17-05-main.py def __init__(self):app QApplication([])self.window QMainWindow()self.window.setWindowTitle("超级课程表")cusWidget CourseWidget()self.window.setCentralWidget(cusWidget)self.showCourse()self.showNotes()# 1. 创建菜单栏self.menuba…...

Spring Retry

1. Spring Retry 的工作原理 内部机制 Spring Retry 主要通过 AOP&#xff08;面向切面编程&#xff09;实现重试逻辑。以下是 Spring Retry 的内部工作流程&#xff1a; AOP 拦截器&#xff1a;当一个方法被标记为需要重试&#xff0c;并且该方法抛出了指定类型的异常时&am…...

16.使用读写包操作Excel文件:XlsxWriter 包

一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…...

【最新版】智慧小区物业管理小程序源码+uniapp全开源

一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…...

音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)

由于本文篇幅较长&#xff0c;分为上、下两篇。 一、引言 通过FFmpeg命令可以获取到SDP描述的RTP流的的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数信息&#xff1a; ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 而由《音视频入门…...

基于SpringBoot+Vue的驾校预约管理系统+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户、教练功能模块&#xff1a;用户管理、管理员管理、教练管理、教练预约管理、车辆管理、车辆预约管理、论坛管理、基础数据管理等技术选型&#xff1a;SpringBoot&#xff0c;Vue等测试环境&#xff1a;idea2024&#xff0c;j…...

基于k3s部署Nginx、MySQL、PHP和Redis的详细教程

先决条件 一台Linux服务器&#xff08;或本地虚拟机&#xff09;&#xff0c;建议Ubuntu/CentOS基础命令行操作能力确保服务器有至少2GB内存和10GB磁盘空间 1. 安装k3s&#xff08;极简Kubernetes&#xff09; 1.1 一键安装 # 用root用户或sudo权限执行以下命令 curl -sfL h…...

21.多态

一、多态概念 多种形态。 静态多态&#xff1a;编译时多态。&#xff08;函数重载&#xff09; 动态多态&#xff1a;运行时多态。&#xff08;继承关系下&#xff0c;调用父类指针或引用&#xff0c;对于不同的对象有不同的行为&#xff09; 二、多态的定义及实现 1&#xff…...

无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战

一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏&#xff1a; 流量入口层&#xff1a;用户访问域名解析至高防CNAME节点&#xff08;如ai-protect.example.com&#xff09;智能调度层&#xff1a;基于AI模型动态分配清洗节点&#xff0c;实时更新节点IP池回…...

新版AndroidStudio / IDEA上传项目到Gitee

目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…...

学习threejs,使用MeshFaceMaterial面材质容器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshFaceMaterial 二…...

python微分方程求解,分别用显式欧拉方法、梯形法、改进欧拉方法、二阶龙格库塔方法、四阶龙格库塔方法求解微分方程

微分方程在自然科学、工程技术、社会科学等多个领域都有着广泛而重要的应用。而求解微分方程是数学与应用数据领域一大难题&#xff0c;对于一些复杂的微分方程无法通过计算推导计算其精确的方程表达式与 结果&#xff0c;因此&#xff0c;我们通过数学理论。迭代&#xff0c;微…...

【ubuntu】——wsl中使用windows中的adb

一、引言 在 Windows Subsystem for Linux&#xff08;WSL&#xff09;环境下工作时&#xff0c;有时需要使用 Android Debug Bridge&#xff08;ADB&#xff09;工具与 Android 设备进行交互。通过特定设置&#xff0c;能够在 WSL 中便捷地调用 Windows 系统中已安装的 ADB&a…...

Git 常用命令完全指南:从入门到高效协作

文章需要结构清晰&#xff0c;涵盖从入门到进阶的常用命令&#xff0c;结合实例和注意事项&#xff0c;帮助用户快速掌握Git的核心功能&#xff0c;并应用到实际项目中 一、仓库初始化与基础操作 1. 创建与克隆仓库 # 初始化本地仓库 git init# 克隆远程仓库&#xff08;SSH方…...

学习单片机需要多长时间才能进行简单的项目开发?

之前有老铁问我&#xff0c;学单片机到底要多久&#xff0c;才能进行简单的项目开发&#xff1f;是三个月速成&#xff0c;还是三年磨一剑&#xff1f; 今天咱们就来聊聊这个话题&#xff0c;我不是什么高高在上的专家&#xff0c;就是个踩过无数坑、烧过几块板子的“技术老友”…...

面试系列|蚂蚁金服技术面【3】

今天继续分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经&#xff0c;复盘面试过程中踩过的坑&#xff0c;整理面试过程中提到的知识点&#xff0c;希望能给正在准备面试的你一些参考和启发&#xff0c;希望对你有帮助&#xff0c;愿你能够获得心仪的 offer ! 第二轮面试之…...

Spring Boot项目中成功集成了JWT

JWT 原理解释 什么是 JWT&#xff1f; JSON Web Token&#xff08;JWT&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用环境间安全地将信息作为JSON对象传输。JWT通常用于身份验证和信息交换。 JWT 的结构 JWT由三部分组成&#xff…...

《Java SQL 操作指南:深入理解 Statement 用法与优化》

在 Java 数据库编程中&#xff0c;Statement 是用于执行 SQL 语句的接口&#xff0c;允许程序与数据库进行交互。本文将详细介绍 Statement 的基本概念、常见用法以及 PreparedStatement 和 CallableStatement 等相关接口。 1. Statement 基本介绍 Statement 接口继承了 AutoC…...

element ui设置结束时间为23:59:59

开始时间为00:00:00结束时间为23:59:59 在请求接口前&#xff0c;用substring取结束时间的年月日&#xff0c;并替换时间值即可 <el-formref"searchForm":model"searchForm":inline"true"size"mini"keyup.enter.native"getDa…...

Matlab 舰载机自动着舰控制系统研究

1、内容简介 Matlab 188-舰载机自动着舰控制系统研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

数据集格式转换——json2txt、xml2txt、txt2json【复制就能用】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏地址:YOLO11入门 + 改进涨点——点击即可跳转 欢迎订阅 目录 json2txt脚本 xml2txt txt2json...

MySQL 横向衍生表(Lateral Derived Tables)

前面我们介绍过MySQL中的衍生表&#xff08;From子句中的子查询&#xff09;和它的局限性&#xff0c;MySQL8.0.14引入了横向衍生表&#xff0c;可以在子查询中引用前面出现的表&#xff0c;即根据外部查询的每一行动态生成数据&#xff0c;这个特性在衍生表非常大而最终结果集…...

基于llama.cpp的QwQ32B模型推理

基于llama.cpp的QwQ32B模型推理 llama.cpp项目主页&#xff1a; https://github.com/ggml-org/llama.cpp# llama.cpp源码下载 cd /root/lanyun-tmpgit clone https://github.com/ggml-org/llama.cpp#llama.cpp编译 llama.cpp是个C语言项目&#xff0c;实际调用过程需要先构建项…...

【Jmeter】使用教程

下载及安装 参考链接: JMeter下载及安装&#xff08;附插件及中文包超详细&#xff09; 参考链接: 【Jmeter】win 10 / win 11&#xff1a;Jmeter 下载、安装、汉化、新机迁移、版本更新&#xff08;Jmeter 4 以上版本均适用&#xff09; 分辨率的调整 参考链接: Jmeter5.3字…...

黑马商城完成随笔

完结撒花 &#x1f389; &#x1f389; &#x1f389; 差不多用了两三个星期&#xff1f;终于是完成了。 黑马商城体量应该是全部黑马项目中体量最多&#xff0c;技术栈最复杂的了。 可是仍然存在之前黑马项目的问题&#xff1a;不细致&#xff0c;不完整 很多技术栈的使用仅…...

【Python 算法零基础 1.线性枚举】

我装作漠视一切&#xff0c;以为这样就可以不在乎 —— 25.3.17 一、线性枚举的基本概念 1.时间复杂度 线性枚举的时间复杂度为 O(nm)&#xff0c;其中 n是线性表的长度。m 是每次操作的量级&#xff0c;对于求最大值和求和来说&#xff0c;因为操作比较简单&#xff0c;所以 …...

涨薪技术|Kubernetes(k8s)之Pod端口设置及资源配额

01端口设置 使用以下命令可以可以查看到到ports的子选项 [rootk8s-master01 ~]# kubectl explain pod.spec.containers.portsKIND: PodVERSION: v1RESOURCE: ports <[]Object>FIELDS:name <string> # 端口名称&#xff0c;如果指定&#xff0c;必须保证name在pod…...

七大常用智能家居协议对比

如果您不知道在项目中使用哪种智能家居通信协议&#xff0c;那么进入智能家居行业可能会很困难。如果没有合适的协议将其集成到智能家居生态系统中&#xff0c;智能家居设备将无法正常工作。否则&#xff0c;您将面临硬件和软件无法满足最终用户期望的风险。协议选择不当可能会…...

K8S快速部署

前置虚拟机环境正式部署BUG解决 前置虚拟机环境 每个虚拟机配置一次就好 #关闭防火墙 systemctl stop firewalld systemctl disable firewalld #关闭 selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 #关闭 swap swapoff -a # 临时 vi…...

TCP 三次握手四次挥手过程详解

注&#xff1a;本文为 “TCP 的三次握手与四次挥手” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;未整理去重。 英文引文第二篇&#xff0c;实为国内《稀土掘金技术社区》文章&#xff0c;没检索到原文&#xff0c;此处 “出口转内销” 。 如有内…...

如何利用 Zeabur 实现 OceanBase 的一键部署

引言 Zeabur 是一个功能强大且即开即用的自动化部署平台&#xff0c;它不仅能迅速部署多种应用&#xff0c;还支持一键安装 MySQL、PostgreSQL 等数据库服务。 Zeabur 拥有众多国内外用户&#xff0c;如 AFFiNE、Bytebase 等企业客户&#xff0c;以及大量全栈和独立开发者。将…...

基于Springboot+服务器磁盘的本地文件存储方案

[local-file-system]基于服务器磁盘的本地文件存储方案 仅提供后端方案 github 环境 JDK11linux/windows/mac 应用场景 适用于ToB业务&#xff0c;中小企业的单体服务&#xff0c;仅使用磁盘存储文件的解决方案 仅使用服务器磁盘存储 与业务实体相结合的文件存储方案&…...

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介&#xff1a; 本板为模拟量高速采样板&#xff08;ADI&#xff09;&#xff0c;主要用于电机转速和相电流检测&#xff0c;以实现电机闭环控制。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff0c;DC3.3V&#xff0c;DC15V&#xff0c;DC24V FPGA&#xff1a;…...