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

【NODE】01-fs和path常用知识点

前言

最近在使用express-generator知识进行搭建前后端通信,其中有些知识点涉及到nodejs的fs和path核心模块,因此另写一篇文章进行介绍和代码案例练习。

fs(文件系统)和 path 是 Node.js 的核心模块,用于文件操作和路径处理。

一、fs讲解

1. fs.readFile 和 fs.writeFile

  • fs.readFile(path[, options], callback):异步读取文件内容。
  • fs.writeFile(path, data[, options], callback):异步写入文件。

 案例练习

先看目录

static文件夹用于存放内容(此时aa.txt和bb.txt均为空)

fs_demo.js用于代码撰写

//fs_demo.js
const fs = require('fs');// 异步读取文件
fs.readFile('./static/aa.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});// 异步写入文件
fs.writeFile('./static/aa.txt', 'Hello World!', 'utf8', (err) => {if (err) throw err;console.log('写入已被保存!');
});

 打开文件的终端,执行终端

node fs_demo.js

 再打开aa.txt进行检查,此时发现"Hello World!"已被成功写入。


 2. fs.readFileSync 和 fs.writeFileSync

  • fs.readFileSync(path[, options]):同步读取文件内容。
  • fs.writeFileSync(path, data[, options]):同步写入文件。

 仍然是fs_demo.js(只是代码不同)这次操作的是bb.txt。

const fs = require('fs');// 同步读取文件
try {const data = fs.readFileSync('./static/bb.txt', 'utf8');console.log(data);
} catch (err) {console.error(err);
}// 同步写入文件
try {fs.writeFileSync('./static/bb.txt', 'Hello NODEJS!', 'utf8');console.log('内容已写入bb.txt!');
} catch (err) {console.error(err);
}

 执行文件

node fs_demo.js

 执行成功,并打开bb.txt进行检查。

 

3.关于同步和异步的理解

在 Node.js 中,fs 模块提供了同步和异步两种方法来处理文件系统操作。

选择使用同步还是异步方法取决于应用需求、性能考量和错误处理策略。

以下是一些指导原则:

异步方法

何时使用异步方法:

  1. 非阻塞操作:当您不希望文件操作阻塞事件循环时,应使用异步方法。这有助于保持应用程序的响应性,特别是在处理大量文件或大文件时。

  2. I/O 密集型应用:在 I/O 密集型应用中,如文件服务器或数据流处理,异步方法可以提高吞吐量和效率。

  3. 用户界面响应:在需要保持用户界面响应的应用(如命令行工具或图形界面应用)中,异步方法可以避免界面冻结。

  4. 并发操作:当您需要同时执行多个文件操作,并且希望它们并发运行时,异步方法更加合适。

  5. 错误处理:如果您希望在发生错误时立即处理,而不是等待整个操作完成,异步方法允许您在回调函数中立即捕获和处理错误。

同步方法

何时使用同步方法:

  1. 脚本和简单应用:在简单的脚本或小型应用中,同步方法可以简化代码,因为它们不需要回调函数。

  2. 初始化操作:在应用程序启动时进行的文件操作,如配置文件加载,可以使用同步方法,因为这些操作通常需要在程序继续之前完成。

  3. 顺序依赖操作:当一个操作的输出是下一个操作的输入,并且它们之间存在严格的顺序依赖时,同步方法可以确保操作按顺序执行。

  4. 测试和调试:在测试和调试阶段,同步方法可以提供更直观的控制流,使得问题更容易追踪和解决。

  5. 性能要求不高的场景:在文件操作对性能影响不大,或者文件很小的情况下,同步方法可以简化代码实现。

简单记忆和使用

在实际应用中,异步方法通常是首选,因为它们不会阻塞 Node.js 的事件循环,这对于保持高性能和良好的用户体验至关重要。

然而,在某些情况下,同步方法的简单性和直接性可能更适合特定的需求。


4. fs.appendFile 和 fs.appendFileSync

  • fs.appendFile(path, data[, options], callback):异步追加文件。
  • fs.appendFileSync(path, data[, options]):同步追加文件。

 异步追加文件

(在上述演示的异步读取、写入的案例中新增一个异步追加)

为了方便观察,这里我们把aa.txt内容清空。

注意文件路径

//fs_demo.js
const fs = require('fs');// 异步读取文件
fs.readFile('./static/aa.txt', 'utf8', (err, data) => {if (err) throw err;console.log(data);
});// 异步写入文件
fs.writeFile('./static/aa.txt', 'Hello World!\n', 'utf8', (err) => {if (err) throw err;console.log('写入已被保存!');
});// 异步追加文件
fs.appendFile('./static/aa.txt', '这是新追加的内容\n', (err) => {if (err) throw err;console.log('内容已追加到aa.txt中');});

执行文件:node fs_demo.js

 

同步追加文件

//fs_demo.js
const fs = require('fs');// 同步读取文件
try {const data = fs.readFileSync('./static/bb.txt', 'utf8');console.log(data);
} catch (err) {console.error(err);
}// 同步写入文件
try {fs.writeFileSync('./static/bb.txt', 'Hello NODEJS!', 'utf8');console.log('内容已写入bb.txt!');
} catch (err) {console.error(err);
}// 同步追加文件
try {fs.appendFileSync('./static/bb.txt', '\n新增内容Hello BB.TXT');console.log('内容已追加到bb.txt');} catch (err) {console.error(err);}

执行文件

 

5.关于写入和追加的注意点

文件写入(write

  • 行为:文件写入操作会覆盖文件指定位置之后的内容。如果文件不存在,写入操作会创建新文件。如果文件存在,写入操作会从指定的文件位置开始写入数据,覆盖原有数据。
  • 用途:当你需要完全替换文件内容或者从文件的特定位置开始写入新数据时,使用写入操作。
  • 影响:如果写入位置在文件中间,写入的数据会替换掉该位置之后的所有数据,导致原有数据丢失。

文件追加(append

  • 行为:文件追加操作会在文件的末尾添加数据,不会影响文件之前的内容。如果文件不存在,追加操作会创建新文件。
  • 用途:当你需要在文件末尾添加数据,而不需要修改或删除原有数据时,使用追加操作。
  • 影响:追加操作不会影响文件的现有内容,只会增加新数据到文件末尾。

书写位置的先后对文件的影响

书写位置的先后顺序对文件内容有直接影响,尤其是在不使用追加模式的情况下:

  1. 先写入后追加

    • 如果先写入文件,然后再追加文件,追加的数据会被添加到写入数据之后。如果写入操作覆盖了文件的末尾,追加的数据将跟在新写入的数据之后。
    • 例如,如果一个文件包含内容 "Hello",先写入 "World",然后追加 "!",最终文件内容将是 "World!"。
  2. 先追加后写入

    • 如果先追加文件,然后再写入文件,写入操作会覆盖追加的内容,如果写入位置在追加内容之前。
    • 例如,如果一个文件包含内容 "Hello",先追加 "!",然后写入 "World",最终文件内容将是 "World",追加的 "!" 将被覆盖。

6. fs.exists 和 fs.existsSync

  • fs.exists(path, callback):检查文件是否存在(已废弃)。
  • fs.existsSync(path):同步检查文件是否存在(推荐使用 fs.stat 或 fs.access)。

 代码案例(注意文件路径)

//fs_demo.js
const fs = require('fs');// 同步检查文件是否存在
if (fs.existsSync('./static/aa.txt')) {console.log('File exists');
} else {console.log('File does not exist');
}

这里是检查utils/static文件夹下的aa.txt文件是否存在,因为我们在此之前已经创建aa.txt了,所以是存在的。


二、path讲解

1. path.join

  • path.join([...paths]):连接路径片段,自动处理路径分隔符。

2. path.resolve

  • path.resolve([...paths]):解析路径,返回绝对路径。

3. path.basenamepath.dirnamepath.extname

  • path.basename(path[, ext]):获取路径的基本名称(文件名)。
  • path.dirname(path):获取路径的目录名。
  • path.extname(path):获取路径的扩展名。

代码演示

代码写在utils/path_test.js

//path_test.js
const path = require('path');const filePath = path.join(__dirname, '../utils/path_test.js');
console.log("path_test.js的__dirname>>>",__dirname);
console.log("path_test.js的__filename>>>",__filename);
console.log("当前文件path_test.js的绝对地址>>>",filePath);
console.log(__filename==filePath);console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");const absolutePath = path.resolve(__dirname, './utils/static/aa.txt');
console.log("aa.txt的绝对路径>>>",absolutePath); console.log("<<<<<<<<<<<<<<<<<<<<");const filePath3 = path.join(__dirname,'./utils/static/bb.txt');
console.log("bb.txt的文件名",path.basename(filePath3)); 
console.log("bb.txt所在目录",path.dirname(filePath3)); 
console.log("bb.txt的文件扩展",path.extname(filePath3)); 

 


总结 

至此,nodejs的核心模块fs和path已讲解完毕,并给出一些练习案例。大家也可以尝试将知识点综合使用到一起。比如:

用fs进行文件读取、写入、追加的时候,我们可以通过path模块,获取目标文件的路径,和fs结合使用。 


如果你喜欢这篇文章,可以点赞收藏。

关注我,了解更多前端实用知识。

相关文章:

【NODE】01-fs和path常用知识点

前言 最近在使用express-generator知识进行搭建前后端通信&#xff0c;其中有些知识点涉及到nodejs的fs和path核心模块&#xff0c;因此另写一篇文章进行介绍和代码案例练习。 fs&#xff08;文件系统&#xff09;和 path 是 Node.js 的核心模块&#xff0c;用于文件操作和路径…...

矩阵线性方程组

矩阵可以是任何形状 当矩阵的行数等于列数,称之为方阵,那么它就有行列式 矩阵的公式 矩阵分块法 Matrix(母体) 克拉默法则 线性方程组 注意初等列变换不是一个同解变换 初等变换与秩 XAB 可以用初等列变换但是不推荐,还是使用初等行变换.用转置思想求解 ( X A ) T…...

Web API和Web Services的区分

前些年一提及自动化测试&#xff0c;大多是指UI界面层的自动化测试。近几年&#xff0c;随着分层自动化测试概念的兴起&#xff0c;以及自动化测试自身的发展与细分&#xff0c;自动化测试包含了更多的内容。 API(Application ProgrammingInterface&#xff0c;应用程序编程接…...

各种数据库类型介绍

在软件开发和数据处理领域&#xff0c;数据库扮演着至关重要的角色。它们用于存储、检索和管理大量数据&#xff0c;是信息系统不可或缺的基础。以下是几种常用的数据库类型及其简要介绍&#xff1a; 1.关系型数据库&#xff08;Relational Databases&#xff09; 关系型数据库…...

Hive练习题11-15

11、第11题 info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 如果要生成下列结果, 该如何写sql语句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案&#xff1a; (1) …...

【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训

升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…...

学习笔记(C#基础书籍)-- C#高级应用

&#xff08;12.25&#xff0c;12.26&#xff09; I/O数据流技术&#xff1a;《第十二章》 为了能够长时间保存程序中的数据&#xff0c;I/O技术可以将数据保存到文件&#xff08;如文本文件等&#xff09;中。 ⭕文件基本操作 a.File类&#xff1a;支持对文件的基本操作&…...

pytorch将数据与模型都放到GPU上训练

默认是CPU&#xff0c;如果想要用GPU需要&#xff1a; 安装配置cuda&#xff0c;然后更新/下载支持gpu版本的pytorch&#xff0c;可以参考&#xff1a;https://blog.csdn.net/weixin_35757704/article/details/124315569设置device&#xff1a;device torch.device(cuda if t…...

华为 IPD,究竟有什么特点?(二)

关注作者 &#xff08;四&#xff09;华为版 IPD 特点四&#xff1a;一定要把差异化竞争力持 续建立在平台上 平台不仅带来研发效率的提升&#xff0c;更重要的是&#xff0c;它是技术竞争力的载体&#xff0c;是研发质 量的重要保证。 1&#xff09;为什么很多企业摆脱不了同…...

CV(7)--神经网络训练

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 什么是神经网络&#xff1a; 神经网络是一种模拟人脑神经元工作原理的算法&#xff0c;它由多个神经元组成&#xff0c;每个神经元都接受输入&#xff0c;通过计算产生输出&#xff0c;并将输出传递给其他神经元。神经网络的…...

git更改当前项目的远程仓库,保留原始仓库提交记录提交到新仓库

在开发过程中&#xff0c;有时需要将当前项目的远程仓库切换到另一个新的远程仓库&#xff0c;同时保留所有原始的提交记录。以下是详细的步骤和最佳实践&#xff0c;确保你能够顺利完成这一操作。 更改当前项目的远程仓库 1.查看当前的远程仓库 确认当前项目的远程仓库地址。…...

【产品应用】一体化无刷电机在旋转等离子喷枪中的应用

在现代工业制造与加工领域&#xff0c;等离子喷枪凭借其高温、高速的等离子射流&#xff0c;能够实现高效的材料表面处理、切割以及焊接等工艺&#xff0c;在众多行业中发挥着关键作用。而一体化无刷电机的应用&#xff0c;更是为等离子喷枪的性能提升和稳定运行注入了强大动力…...

docker django uwsgi 报错记录

这个配置中是能够正常进行网页访问的&#xff0c;能够查看网页 [uwsgi] chdir /home/luichun/lc/Pyfile/PyCursor/app module app.wsgi:application plugin-dir /usr/lib/uwsgi/plugins plugins python311 env TZAsia/Shanghai socket-timeout 60 websocket-ma…...

【自由能系列(初级),论文解读】神经网络中,熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。

神经网络中的熵、自由能与动力学 核心结论&#xff1a; 神经网络在“学习”和“成长”过程中&#xff0c;熵、自由能以及动力学扮演着关键角色。 熵代表系统的不确定性&#xff0c;自由能则引导系统向更低能量的状态演化&#xff0c;而动力学则描述了系统状态随时间的变化。 这…...

云计算时代携程的网络架构变迁

大家觉得有意义和帮助记得及时关注和点赞!!! 前言0 携程云平台简介 网络演进时间线1 基于 VLAN 的二层网络 1.1 需求1.2 解决方案&#xff1a;OpenStack Provider Network 模型1.3 硬件网络拓扑1.4 宿主机内部网络拓扑1.5 小结 优点缺点2 基于 SDN 的大二层网络 2.1 面临的新问…...

uniapp 微信小程序 数据空白展示组件

效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…...

java 线程池为什么设计成先进队列再创建最大线程为何先入队列再增加线程数?

java 线程池为什么设计成先进队列再创建最大线程为何先入队列再增加线程数&#xff1f; 这个设计与 线程池的性能优化 、资源利用和任务调度策略密切相关。要理解为什么线程池设计成“ 先将任务入队列&#xff0c;再创建最大线程数 ”&#xff0c;可以从以下几个方面进行分析&…...

我的Qt作品(20)使用Qt+OpenCV写一个旋转/抠图/mask生成工具

使用QtOpenCV写一个旋转/抠图/mask生成工具 1、旋转功能 void FormRotate::rotateImage(const cv::Mat &src, cv::Mat &dst, double degree) //旋转 {if (fabs(degree) < 0.001){dst src;return;}//center旋转的中心点坐标//degree旋转的角度,不是弧度,>0逆时针…...

【vue】vite + ts +vue3 安装及使用 pinia

vue3 TS 安装使用pinia状态管理_vue3 ts pinia-CSDN博客 Vue项目进阶&#xff1a;再谈Pinia函数式&#xff08;composition API&#xff09;用法-腾讯云开发者社区-腾讯云...

计算机网络 (10)网络层

前言 计算机网络中的网络层&#xff08;Network Layer&#xff09;是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…...

1085 PAT单位排行

每次 PAT 考试结束后&#xff0c;考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。 输入格式&#xff1a; 输入第一行给出一个正整数 N&#xff08;≤105&#xff09;&#xff0c;即考生人数。随后 N 行&#xff0c;每行按下列格式给出一个考生的信息&#xff…...

知识库1: 什么是知识库?

知识库&#xff08;Knowledge Base, KB&#xff09;是一个存储和组织知识的信息系统或数据集合&#xff0c;用于保存、管理和访问结构化或非结构化的信息。它的目的是帮助人们快速获取所需的知识、解答问题或支持决策。知识库可以被广泛应用于技术支持、教育、研究以及智能系统…...

[SAP ABAP] 程序备份

备份当前程序到本地的方式如下&#xff1a; 1.复制粘贴 Ctrl A 、Ctrl V 2.【实用程序】|【更多实用程序】|【上载/下载】|【下载】 ​ 3.快捷键&#xff0c;支持多种格式导出(.abap .html .pdf 等) 在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图…...

SpringBoot 自动装配原理及源码解析

目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 &#xff08;1&#xff09;SpringBootConfiguration&#xff1a; &#xff08;2&#xff09;EnableAutoConfiguration&#xff1a; &#xff08;3&#xf…...

【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38654 在当今时代背景下&#xff0c;社会发展日新月异&#xff0c;人们的生活方式与消费观念正经历深刻变革。MoonFox 月狐数据的《2024 年悦己生活消费洞察报告》聚焦于这一充满活力与变化的消费领域。随着就业、婚姻等社会压力的…...

empire靶机

打开靶机 我们先查看页面源代码&#xff0c;发现什么也没有 再去用nmap扫描 nmap -sV -p- 192.168.95.144 发现也没什么用 我们在用dirb扫一下 dirb http://192.168.95.144 我们发现了robots.txt并且响应码是200&#xff0c;去访问一下 又得到了一个目录&#xff0c;去访问…...

uniapp 判断多选、选中取消选中的逻辑处理

一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"...

arthas查看拼接好参数的sql, redis, es完整可直接执行的命令

arthas查看拼接好参数的sql, redis, es完整可直接执行的命令 arthas查看sql可执行命令arthas查看redis可执行命令arthas查看es可执行命令相关链接 经常修bug的时候, 拿不到能够执行的命令, 真是太难受了 arthas查看sql可执行命令 # mybatis plus (参数和sql分离了) watch org.…...

Flamingo:少样本多模态大模型

Flamingo&#xff1a;少样本多模态大模型 论文大纲理解1. 确认目标2. 分析过程&#xff08;目标-手段分析&#xff09;3. 实现步骤4. 效果展示5. 金手指 解法拆解全流程核心模式提问Flamingo为什么选择使用"固定数量的64个视觉tokens"这个特定数字?这个数字的选择背…...

nacos-gateway动态路由

在Nacos官网中给出了手动监听Nacos配置变更的SDK&#xff1a; Nacos Java SDK 所需依赖 <!--统一配置管理--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <…...

Kotlin 协程基础知识总结二 —— 启动与取消

协程启动与取消的主要内容&#xff1a; 启动协程&#xff1a;启动构建器、启动模式、作用域构建器、Job 生命周期取消协程&#xff1a;协程的取消、CPU 密集型任务取消、协程取消的副作用、超时任务 1、协程构建器 &#xff08;P20&#xff09;launch 与 aysnc 两种协程构建…...

【漏洞复现】Struts2(CVE-2024-53677)任意文件上传逻辑绕过漏洞

文章目录 前言一、漏洞描述二、漏洞详情三、影响版本四、危害描述五、漏洞分析六、漏洞复现七、修复建议前言 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设…...

使用 IDE生成 Java Doc

使用步骤 Android Studio界面->Tools->Generate JavaDoc zh-CN -encoding UTF-8 -charset UTF-8 -classpath “C:\Users\fangjian\AppData\Local\Android\Sdk\platforms\android-34\android.jar” 报错问题 错误: 目标 17 不允许选项 --boot-class-path 如果你正在使用…...

AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode和 桔子数据 的 价格对比

要对比 AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode 和 桔子数据 的 价格&#xff0c;我们需要先了解每个平台的定价模型、服务类型以及不同服务之间的价格差异。以下是根据各个平台常见服务&#xff08;如计算实例、存储、数据传输等&#xff09;做的一个 简化…...

【C++篇】AVL树的实现

前言 本篇是基于二叉搜索树写的&#xff0c;详情可以去看上篇【二叉搜索树】 一&#xff0c;AVL树的概念 &#xff08;1&#xff09;&#xff0c;AVL树是一颗二叉搜索树&#xff0c;它是一棵空树或者是具备以下性质的二叉搜索树&#xff1a;它的左右子树都是AVL树&#xff…...

VIVO Android面试题及参考答案

请重写算法题:求数组的全排列。 思路: 要获取一个数组的全排列,我们可以利用回溯算法。具体来说,回溯算法通过递归的方式逐步生成排列,在每一步都将一个元素加入排列中,然后在下一步递归中排除已选元素,回溯的时候撤销选择,尝试其他可能。 步骤: 递归生成排列: 使…...

联邦大模型微调

微调&#xff08;Fine-tuning&#xff09;是一种迁移学习的技术&#xff0c;用于在一个已经预训练好的模型基础上&#xff0c;通过进一步训练来适应特定的任务或数据集。微调可以在具有相似特征的任务之间共享知识&#xff0c;从而加快训练速度并提高模型性能。 微调步骤&…...

DigitalOcean Kubernetes现已支持VPC natvie集群

DigitalOcean Kubernetes (DOKS)的VPC natvie集群功能现已正式上线&#xff01;这一新功能实现了DOKS集群与虚拟私有云&#xff08;VPC&#xff09;资源之间的无缝集成&#xff0c;提升了工作负载的网络灵活性和可扩展性。 什么是VPC natvie 集群&#xff1f; VPC natvie 集群支…...

【每日学点鸿蒙知识】H5与C++通讯、动态参数化配置、ArkTS调用JS、Json对象转换、showToast在多次调用问题

1、HarmonyOS h5页面和C如何进行双向通讯&#xff1f; 前的规格是H5只能和ArkTS通讯&#xff0c;ArkTS通过NDK接口与C通讯&#xff0c;只有网络拦截有C接口。参考链接&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/_web-V5 2、HarmonyO…...

ZC706开发板教程:使用SD卡启动工具烧写flash

在使用开发板的过程中&#xff0c;常常需要通过 Flash 模式启动。然而&#xff0c;使用 JTAG 模式在线烧写 flash 的过程既繁琐又耗时&#xff0c;许多用户对此表示困扰。本期将为您提供解决方案&#xff0c;以简化这一流程。 我们分析正常的flash烧写过程&#xff0c;就是通过…...

问题-01

Mybatis比较失效问题 1、问题复现 whetherPromoterNull是字符串类型&#xff0c;0使用单引号包裹&#xff0c;进行比较时发现不起作用 <if test"whetherPromoterNull ! null and whetherPromoterNull.trim() 0"> and sui.share_user_id is not null</if&g…...

内容营销专家刘鑫炜:误区四,目标不明,营销如同“盲头苍蝇”?

我们经常会遇到这样的客户&#xff0c;稿件提交过来后&#xff0c;一会儿说要发这个媒体&#xff0c;不一会儿又要发那个媒体&#xff0c;而且这两个媒体根本没有关联性&#xff0c;这时候&#xff0c;我们都会问客户&#xff0c;你推广这篇稿件的目的是什么&#xff0c;是为了…...

java基础1:处理Map

一、适用场景&#xff1a;相对Map排序&#xff0c;想获取其中最大或最小值。 1、获取map集合里&#xff0c;获取 max(value)对应的key 1)、方式1 Testpublic void MapInnerMaxValue() {HashMap<String, Integer> hashMap new HashMap<>();hashMap.put("a&q…...

企业销售人员培训系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

设计模式-责任链模式

一、简介 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;用于将请求的发送者与接收者解耦&#xff0c;使多个处理对象都有机会处理该请求。这些处理对象通过形成一条链式结构依次处理请求&#xff0c;直到某个对象能够完…...

04、Spring MVC

Spring MVC是Spring的Web模块,用来开发Web应用的,它最终作为B/S、C/S模式下的Server端 Web应用的核心就是处理HTTP请求并响应。 一、关于两种开发模式说明 我们使用Spring MVC有两个开发模式 前后分离(数据与页面分离) @ResponseBody@RestController其涉及的生要机制是:…...

K8S 黑魔法之如何从 Pod 拿到节点的命令行

搞 K8S 运维的时候&#xff0c;偶尔会遇到一个难题&#xff0c;定位到问题出在某个节点上&#xff0c;而由于权限审批&#xff0c;错误配置等等各种原因&#xff0c;没有办法拿到节点的 SSH 权限&#xff0c;无法进入节点命令行进一步排障。 这个时候&#xff0c;就可以用这个…...

谷歌用Anthropic的Claude帮Gemini“打磨”性能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

React性能优化:构建更高效的应用

在现代前端开发中,React已经成为构建复杂、交互频繁应用的首选框架。然而,随着应用规模的扩大和功能的丰富,组件的频繁重渲染可能会成为性能瓶颈,影响用户体验。为了提升React应用的性能,开发者需要掌握一系列性能优化技巧和工具。本文将详细介绍React性能优化的各个方面,…...

Linux从0到1——线程同步和互斥【互斥量/条件变量/信号量/PC模型】

Linux从0到1——线程同步和互斥 1. Linux线程互斥1.1 问题引入1.2 互斥相关概念1.3 多执行流并发访问公共资源的数据不一致问题1.4 互斥量&#xff08;锁&#xff09;1.5 改进抢票系统1.6 锁的简单封装1.7 锁的实现原理1.8 可重入VS线程安全1.9 死锁 2. Linux线程同步2.1 理解同…...