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

初识Node.js

文章目录

  • 初识Node.js
          • Node.js简介
    • fs模块
          • 演示路径问题
    • path路径模块
    • http模块
            • 创建web服务器得基本步骤
            • req请求对象
            • res响应对象
            • 解决中文乱码问题
    • 模块化的基本慨念
          • 1、模块化
          • 2、Node.js中模块的分类
          • 3、Node.js中的模块作用域
            • 3.1什么是模块作用域
          • 4、向外共享模块作用域中的成员
            • 4.1module对象
            • 4.2向外共享模块作用域中的成员module.exports对象
            • 4.3共享成员时的注意点
            • 4.4exports对象
            • 4.5Node.js中的模块化规范
    • npm与包
          • 项目中如何下载包
          • 安装指定版本的包
          • 包管理配置文件
            • 快速创建package.json
          • 卸载包
          • 解决下包速度慢的问题
          • 包的分类
          • 规范的包结构
    • 模块的加载机制
          • 1.优先从缓存中加载
          • 2.内置模块的加载机制
          • 3.自定义模块的加载机制
          • 4.第三方模块的加载机制

初识Node.js

Node.js简介

(1) 什么是Node.js

Node.js 是一个基于Chrome V8引擎的JavaScript运行环境

Node.js的官网地址:https://nodejs.org/zh-cn/

注意:

  • 浏览器是JavaScript的前端运行环境
  • Node.js是JavaScript的后端运行环境
  • Node.js无法调用DOM和BOM等浏览器内置API

(2) node.js可以做什么

  • 基于Express框架(http://www.expressjs.com.cn/),可以快速构建Web应用
  • 基于Electron框架(https://electronjs.org/),可以构建跨平台的桌面应用
  • 基于restify框架(http://restify.com/),可以快速构建API接口项目
  • 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…

(3) node.js的学习路径

Node.js内置API模块(fs,path,http)+第三方模块(express,mysql等)

fs模块

fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求

  • fs.readFile()方法,用来读取指定文件中的内容

    • 参数1:读取文件的存放路径

    • 参数2:读取文件时采用的编码格式,一般默认指定 utf8

    • 参数3:回调函数,拿到读取失败和成功的结果 err dataStr

      //如果要在JavaScript代码在使用fs模块来操作文件,则需要使用如下的方式先导入它
      const fs =require('fs')
      fs.readFile('./files/11.txt','utf8',function(err,dataStr){console.log(err)console.log('---------')console.log(dataStr)
      })

      如果读取成功 则err的值为null

      如果读取失败 则err的值为错误对象, dataStr的值为undefined

  • fs.writeFile()方法,用来向指定的文件在写入内容

    • 参数1:文件的存放路径

    • 参数2:表示要写入的内容

    • 参数3:回调函数

      fs.writeFile('./files/2.txt','abcd',function(err){console.log(err)
      })
      

      如果写入成功,则err的值等于null
      如果写入失败,则err的值等于一个 错误对象

案例:将txt文本中的内容 等号变成冒号,并且每个item独占一行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJj3L5aF-1678089313538)(C:\Users\22519\AppData\Roaming\Typora\typora-user-images\image-20230304141255253.png)]

等号变成冒号,并且每个item独占一行 如图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xcm3o9fw-1678089313539)(C:\Users\22519\AppData\Roaming\Typora\typora-user-images\image-20230304142510663.png)]

// 导入fs模块
const fs = require("fs");
fs.readFile("F:/web开发/JavaScript学习/js/11.txt","utf8",function (err, dataStr) {if (err) {return console.log("读取失败" + err);}console.log("读取成功" + dataStr);// 1.先把成绩的数据按照空格进行分割const arrOld = dataStr.split(" ");// 2.循环分割后的数组,对每一项数据进行字符串的替换操作const arrNew = [];arrOld.forEach((item) => {arrNew.push(item.replace("=", ":"));});// 3.把新数组中的每一项,进行合并,得到一个新的字符串const newStr = arrNew.join("\r\n");//4.调用fs.writeFile()方法,把处理完毕后的成绩,写入到新文件中fs.writeFile('F:/web开发/JavaScript学习/js/11.txt',newStr,function(err){if(err){return console.log('写入文件失败!'+err.message);}console.log('写入成绩成功');})}
);
演示路径问题

在使用fs模块操作文件的时,如果提供的操作路径是以./或…/开头的相对路径时,容易出现路径动态破解错误的问题

原因:代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径

最佳解决方法:__dirname 表示当前文件所处的目录 在后面拼接上自己的路径

fs.readFile(__dirname+'/files/11.txt','utf8',function(err,dataStr){console.log(err)console.log('---------')console.log(dataStr)
})

path路径模块

path模块是Node,js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。路径模块是Node,js官方提供的、用来处理路径的模块.它提供了一系列的方法和属性,用来满足用户对路径的处理需求.
例如:例如:

  • path.join()方法,用来将多个路径片段拼接成一个完整的路径字符串

    注意:涉及到路径拼接得操作,都要使用path.join() 方法进行处理。不要直接使用+进行字符串得拼接

    fs.readFile(path.join(__dirname,'/files/1.txt'),'utf8',function(err,dataStr){if(err){return console.log(err.message);}console.log(dataStr);
    })
    
  • path.basename()方法,用来从路径字符串中,将文件名解析出来方法

    • path 必选参数 ,表示一个路径得字符串
    • ext可选参数 ,表示文件扩展名
    • 返回: 表示路径中得最后一部分
    const path=requestIdleCallback('path')
    const fpath='/a/b/c/index.html'
    const fullName=path.basename(fpath)      
    console.log(fullName); // index.htmlconst fullName=path.basename(fpath,'html')      
    console.log(fullName); // index 
    
  • path.extname()方法 ,可以获取路径中得扩展名部分,语法格式如下

    • path 必选参数 ,表示一个路径得字符串
    • 返回: 返回得到得扩展名字符串
    const path=requestIdleCallback('path')
    const fpath='/a/b/c/index.html'
    const fullName=path.extname(fpath)
    console.log(fullName); // .html
    

http模块

http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer0 方法就能方便的把一台普通的电脑,变成一台Web 服务器,从而对外提供Web 资源服务。

创建web服务器得基本步骤
//导入http模块
const http=require('http')
//创建web服务器实例
const server=http.createServer()
//为服务器实例绑定request事件,监听客户端得请求
server.on('request',function(req,res){console.log('Someone visit our web server');
})
//启动服务器
server.listen(8080,function(){console.log('server running at http://127.0.0.1:8080');
})
req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定得request事件处理函数

如果想在事件处理函数在,访问与客户端相关得数据和属性,可以使用以下方式

const http=require('http')
const server=http.createServer()
//req是请求对象,包含了与客户端相关得数据和属性
server.on('request',req=>{//req.url是客户端请求的URL地址const url=req.url//req.method是客户端请求得method类型const method=req.methodconst str=`Your request url is${url},and request method is ${method}`console.log(str);
})
server.listen(80,()=>{console.log('server running at http://127.0.0.1');
})
res响应对象

在服务器的resquest事件处理函数在,如果想访问与服务器相关的数据或属性,可以使用以下方式

const http=require('http')
const server=http.createServer()
//req是请求对象,包含了与客户端相关得数据和属性
//res是响应对象,它包含了与服务器相关的数据和属性
server.on('request',(req,res)=>{//req.url是客户端请求的URL地址const url=req.url//req.method是客户端请求得method类型const method=req.methodconst str=`Your request url is${url},and request method is ${method}`console.log(str);//调用res.end()方法,向客户端响应一些内容//向客户端发送指定的内容,并结束这次请求的处理过程res.end(str)
})
server.listen(80,()=>{console.log('server running at http://127.0.0.1');
})
解决中文乱码问题

当调用res.end ()方法,向客户端发送中文内容的时候,会出现乱码问题,此时需要手动设置内容的编码格式:

  res.setHeader('Content-Type','text/html;charset=utf-8')
const http=require('http')
const server=http.createServer()
server.on('request',(req,res)=>{//定义一个包含文字的字符串const str=`您请求的URL地址是${req.url},请求的method;类型为${req.method}`//调用res.setHeader()方法,设置Content-Type响应头,解决中文乱码的问题res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()将内容响应给客户端res.end(str)})
server.listen(80,()=>{console.log('server running at http://127.0.0.1');
})

根据不同的url响应不同的html内容

const http=require('http')
const { isAbsolute } = require('path')
const server=http.createServer()
server.on('request',(req,res)=>{
// 1.获取请求的url内容
const url=req.url
// 2.设置默认的响应内容为404 Not found 
let content='404 Not found'
// 3.判断用户请求是否为/ 或 /indexedDB.html首页
// 4.设置判断用户请求是否为 /about.html
if(url==='/'||url==='/index.html'){content='<h1>首页</h1>'
}
else if(url==='/about.html'){ content ='<h1>关于页面</h1>'
}
// 5.设置Content-Type响应头,防止中文乱码
res.setHeader('Content-Type','text/html;charset=utf-8')
// 6.使用res.end()把内容响应给客户端
res.end(content)
})
server.listen(80,()=>{console.log('server running at http://127.0.0.1');
})

模块化的基本慨念

1、模块化

编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并且互相依赖的多个小模块

​ 把代码进行模块化拆分的好处

  1. 提高了代码的复用性
  2. 提高了代码的可维护性
  3. 可以实现按需加载
2、Node.js中模块的分类

Node.js 中根据模块来源的不同,将模块分为了3大类,分别是:

  • 内置模块(内置模块是由Node.js 官方提供的,例如fs、path、http等)
  • 自定义模块(用户创建的每个.js 文件,都是自定义模块)
  • 第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,=使用前需要先下载=)

使用强大的require()方法,可以加载需要的内置模块,加载需要的内置模块,用户自定义模块,第三方模块等

//1.加载内置的fs模块
const fd=require('fs')
//2.加载用户自定义模块 
const custon=require('./custom.js')
//3.加载第三方模块
const moment =require('momemt')

注意:使用require()方法加载其他模块时,会被加载模块中的代码

3、Node.js中的模块作用域
3.1什么是模块作用域

和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域(所定义的变量,只可以在当前模块下谁用)

3.2 模块作用域的好处

防止了全局变量污染的问题

4、向外共享模块作用域中的成员
4.1module对象

在每个.js自定义模块在都有一个module对象,它里面存储了和当前模块有关的信息

4.2向外共享模块作用域中的成员module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用

01自定义模块.js

//在一个自定义模块中,默认情况下,modle.exports={}
const age=20
//向moudle.exports.username对象上挂载username属性
module.exports.username='zs'
//向module.exports对象上挂载sayHellow方法
module.exports.sayHellow=function(){console.log('helllow')
}
module.exports.age=age

02test.js

const =require('./01自定义模块')
console.log(m)        //{username:'zs',sayHello:[function],age:20}
4.3共享成员时的注意点

使用require()方法导入,导入的结果,永远以module.exports指向的对象为准

01自定义模块.js

const age=20
module.exports.username='zs'
module.exports.sayHellow=function(){console.log('helllow')
}
module.exports.age=age//让modlue.export指向一个全新的对象
modlue.export={
nickname='小黑'
sayHai(){console.log('Hi')}
}

02test.js

const =require('./01自定义模块')
console.log(m)        //{username:'小黑',sayHi:[function:sayHi]}
4.4exports对象

由于module.exports单词写起来比较复杂,为了简化向外共享成员的代码,Node提供了exports对象。默认情况下,=exports和module.exports指向同一个对象=。最终共享的结果,还是以module.exports指向的对象为准

exports和module.exports的使用误区

  • 时刻记住 require()模块时,得到的永远是module.exports指向的对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlJxZfk8-1678089313540)(C:\Users\22519\AppData\Roaming\Typora\typora-user-images\image-20230306135605718.png)]

注意:为了防止混乱,建议不要在同一个模块中同时使用exports和module.exporets

4.5Node.js中的模块化规范

Node.js遵循了CommonJS模块化规范 ,CommonJS规定了模块的特征和各模块之间如何互相依赖

CommonJS规定

  • 每个模块内部,module变量代表当前模块。
  • module变量是一个对象,它的exports属性(即module.exports)是对外的接口。
  • 加载某个模块,其实是加载该模块的module.exports属性。require()方法用于加载模块。

npm与包

Node中的第三方模块(别人写好的模块) 又叫做包

由于Node.js的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发的时,效率很低。包是基于内置模块封装出来的,提供了更高级、更方便的API,极大的提高了开发效率。

国外的一家IT公司,叫做npm 这家公司的著名的网址https://www.npmjs.com/是全球最大的包共享平台

https://registry.npmjs.org/对外共享所有的包。我们可以从这个服务器下载自己所需要的包

https://www.npmjs.com/  网站上搜索自己所需要的包
https://registry.npmjs.org/  服务器上下载自己需要的包

案例:

//1.导入moment包
const moment=require('moment')//.2.参考moment官方API文档,调用相对应的方法,对时间进行格式化
//2.1调用moment()方法,得到当前的时间
//2.2针对当前的时间,调用format()方法 ,按照指定的格式进行时间的格式化
const dt=moment().format('YYYY-MM-DD HH:mm:ss')console.log(dt) 
项目中如何下载包
npm install 包的完整名称
简写
npm  i 包的完整名称

初次安装包完成,项目文件下多了一个叫做node_modules文件夹 和package-lock.json

  • node modules文件夹用来存放所有已安装到项目中的包。require()导入第三方包时,就是从这个目录中查找并加载包。

  • package-lockjson配置文件用来记录node modules目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。

安装指定版本的包

默认情况下,使用npm install 命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过@符号指定具体的版本,例如:

npm i moment@2.22.2
包管理配置文件

npm规定,在项目根目录中,必须提供一个叫做package.json的包管理配置文件。用来记录与项目有关的一 些配置信息。例如:

  • 项目的名称、版本号、描述等
  • 项目中都用到了哪些包
  • 哪些包只在开发期间会用到
  • 那些包在开发和部署时都需要用到
快速创建package.json

npm包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建package.json这个包管理配置文件:

npm init -y 

注意:

  • 上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
  • 运行npm install 命令安装包的时候,npm包管理工具会自动把包的名称和版本号,记录到package.json中。

package.json中有一个dependencies 节点,专门用来记录你使用npm install 命令安装了那些包

卸载包

可以运行npm uninstall命令,来卸载指定的包:

npm uninstall moment

注意: npm uninstall 命令执行成功后,会把卸载的包,自动从package.json的dependencies 中移除掉。

解决下包速度慢的问题

切换npm的下包镜像源
下包的镜像源,指的就是下包的服务器地址。

npm config get registry   //查看当前下包的镜像源
npm config set registry=https://registry.npm.taobao.org/   //将下包的镜像源切换为淘宝镜像源
npm config get registry     //检查镜像源是否下载成功
包的分类

使用npm包管理工具下载的包,共分为两大类,分别是项目包和全局包

项目包又分为两类,分别是:

  • 开发依赖包(被记录到devDependencies节点中的包,只在开发期间会用到)
  • 核心依赖包(被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到)

全局包

在执行npm install命令时,如果提供了==-g==参数,则会把包安装为全局包。

注意:

  • 只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令。
  • 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可。
规范的包结构

在清楚了包的概念、以及如何下载和使用包之后,接下来,我们深入了解一下包的内部结构。
一个规范的包,它的组成结构,必须符合以下3点要求:

  • 包必须以单独的目录而存在
  • 包的顶级目录下要必须包含package.json这个包管理配置文件
  • package.,json 中必须包含name,version,main这三个属性,分别代表包的名字、版本号、包的入口。

模块的加载机制

1.优先从缓存中加载

模块在第一次加载后会被缓存。这也意味着多次调用require()不会导致模块的代码被执行多次。
注意:不论是内置模块、用户自定义模块、还是第三方模块,它们都会优先从缓存中加载,从而提高模块的加载效率。

2.内置模块的加载机制

内置模块是由Node.js 官方提供的模块,内置模块的加载优先级最高。
例如,require(fs’)始终返回内置的fs模块,即使在node_modules目录下有名字相同的包也叫做fs。

3.自定义模块的加载机制

使用require()加载自定义模块时,必须指定以==./…/==开头的路径标识符。在加载自定义模块时,如果没有指定/或…/这样的路径标识符,则node 会把它当作内置模块或第三方模块进行加载。

在使用require()导入自定义模块时,若省略了文件的扩展名,则 Node.js 会按顺序分别尝试加载以下的文件:

  • 按照确切的文件名进行加载

  • 补全.js扩展名进行加载

  • 补全.json扩展名进行加载

  • 补全.node扩展名进行加载

  • 加载失败,终端报错

4.第三方模块的加载机制

如果传递给require()的模块标识符不是一个内置模块,也没有以‘./”或‘…/”开头,则 Node.js会从当前模块的父目录开始,尝试从/node_modules文件夹中加载第三方模块。
如果没有找到对应的第三方模块,则移动到再上一层父目录中,进行加载,直到文件系统的根目录。

相关文章:

初识Node.js

文章目录初识Node.jsNode.js简介fs模块演示路径问题path路径模块http模块创建web服务器得基本步骤req请求对象res响应对象解决中文乱码问题模块化的基本慨念1、模块化2、Node.js中模块的分类3、Node.js中的模块作用域3.1什么是模块作用域4、向外共享模块作用域中的成员4.1modul…...

C51---软件消抖

1.example #include "reg52.h" #include "intrins.h" //main.c(11): error C264: intrinsic _nop_: declaration/activation error,添加这个头文件就可了 sbit led1 P3^7;//引脚位置&#xff0c;根据原理图可知 sbit key1 P2^1; sbit key2 P2^0; void …...

redis数据持久化

redis备份概念 Redis所有数据都是保存在内存中&#xff0c;Redis数据备份可以定期的通过异步方式保存到磁盘上&#xff0c;该方式称为半持久化模式&#xff0c;如果每一次数据变化都写入aof文件里面&#xff0c;则称为全持久化模式。同时还可以基于Redis主从复制实现Redis备份…...

Java StringBuffer类

Java StringBuffer类是Java语言中一个非常重要的类&#xff0c;它提供了丰富的方法&#xff0c;可以方便地进行字符串操作。本文将详细介绍Java StringBuffer类的作用以及在实际工作中的用途。 StringBuffer类的作用 Java StringBuffer类是一个可变的字符串缓冲区&#xff0c…...

电路模型和电路定律(2)——“电路分析”

各位CSDN的uu们你们好呀&#xff0c;好久没有更新电路分析的文章啦&#xff0c;今天来小小复习一波&#xff0c;之前那篇博客&#xff0c;小雅兰更新了电路的历史以及电压电流的参考方向&#xff0c;这篇博客小雅兰继续&#xff01;&#xff01;&#xff01; 电阻元件 电压源和…...

天琊超级进程监视器的应用试验(19)

实验目的 1、了解进程概念及其基本原理&#xff1b; 2、掌握天琊超级进程监视器的安装与使用。预备知识 本实验要求实验者具备如下的相关知识。 操作系统的安全配置是整个系统安全审计策略核心&#xff0c;其目的就是从系统根源构筑安全防护体系&#xff0c;通过用户的一…...

使用 Pulumi 打造自己的多云管理平台

前言在公有云技术与产品飞速发展的时代&#xff0c;业务对于其自身的可用性提出了越来越高的要求&#xff0c;当跨区域容灾已经无法满足业务需求的情况下&#xff0c;我们通常会考虑多云部署我们的业务平台&#xff0c;以规避更大规模的风险。但在多云平台部署的架构下&#xf…...

什么是MyBatis?无论是基础教学还是技术精进,你都应该看这篇MyBatis

文章目录学习之前&#xff0c;跟你们说点事情&#xff0c;有助于你能快速看完文章一、先应用再学习&#xff0c;代码示例1. 第一个MyBatis程序2. MyBatis整合Spring3. SpringBoot整合MyBatis二、MyBatis整体流程&#xff0c;各组件的作用域和生命周期三、说说MyBatis-config.xm…...

【编程基础之Python】10、Python中的运算符

【编程基础之Python】10、Python中的运算符Python中的运算符算术运算符赋值运算符比较运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级运算符总结Python中的运算符 Python是一门非常流行的编程语言&#xff0c;它支持各种运算符来执行各种操作。这篇文章将详细介绍…...

Android的基础介绍

一、Android介绍 Android是一种基于Linux的自由及开放源代码的操作系统,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。 Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序——…...

用户登录请求100w/每天, JVM如何调优

用户登录请求100w/每天, JVM如何调优 大概可以分为以下8个步骤。 Step1&#xff1a;新系统上线如何规划容量&#xff1f; 1.套路总结 任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数&#xff0c;这个容量与资源规划并不仅仅是系统架构师的随意估算的&am…...

C/C++每日一练(20230306)

目录 1. 判断素数的个数 ☆ 2. 分隔链表 ★★ 3. 数据流的中位数 ★★ 1. 判断素数的个数 在一个数组A中存放100个数据&#xff0c;用子函数判断该数组中哪些是素数&#xff0c;并统计该素数的个数&#xff0c;在主函数中输出该素数的个数。 代码&#xff1a; #includ…...

多线程的创建、Thread类、线程安全、同步、通信

目录 多线程的创建 方式一&#xff1a;继承Thread类 方式二&#xff1a;实现Runnable接口 方式三&#xff1a;JDK 5.0新增&#xff1a;实现Callable接口 Thread的常用方法 线程安全 线程安全问题是什么、发生的原因 线程安全问题案例模拟 线程同步 同步思想概述 方式…...

GraphPad Prism v9.5.1.733 科研绘图软件多语言

GraphPad Prism集生物统计、曲线拟合和科技绘图于一体,其所具有的功能均非常实用和精炼,包括了一些特色的功能,如ROC曲线分析、Bland-Altman分析等;曲线拟合功能是GraphPad Prism8 汉化版超越其他统计软体的制胜法宝,GraphPad Prism8 汉化版的线性/非线性拟合功能使用操作…...

基于intel soc+fpga智能驾驶舱和高级驾驶辅助系统软件设计(三)

虚拟化操作系统介绍 车载平台有逐渐融合的趋势&#xff0c;车载 SoC 的计算性能和应用快速增长&#xff0c;面临着多种应用在 多个显示子系统融合在一起的问题&#xff0c;这就要求平台运行多个操作系统。虚拟化&#xff08;Virtualization&#xff09; 技术飞速发展&#xff0…...

什么?年终奖多发1块钱竟要多缴9.6W的税

对于大多数的工薪阶级来说&#xff0c;目前现行的个人所得税适用于全年累计收入一次性税收优惠。 有可能有的人不理解一次性税收优惠是什么意思&#xff0c;所以这里我首先解释下什么是一次性税收优惠&#xff0c;然后在讲一下为什么明明公司多发了钱&#xff0c;到手反而会更…...

动态绑定右键菜单控件

一、动态绑定右键菜单控件 /// <summary> /// 通过递归获取执行控件 /// </summary> /// <typeparam name"T"></typeparam> /// <param name"c"></param> /// <pa…...

JavaScript基础三、数据类型

零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#xff1a;https:…...

Python 随机漫步

目录 1. 创建 RandomWalk 类 2. 选择方向 3. 绘制随机漫步图 4. 总结 本篇博客将使用 Python 来 生成随机漫步数据&#xff0c;再使用 Matplotlib 库&#xff0c;将以引人注目的方式将这些数据呈现出来。 随机漫步 顾名思义就是随机走出的步伐&#xff0c;它是这样行…...

Spark SQL优化机制

Spark SQL优化机制Spark SQLCatalyst 优化器逻辑优化物理优化TungstenUnsafe RowWSCGRDD 缺点 : RDD的算子都是高阶函数 &#xff0c;Spark Core 不知函数内的操作&#xff0c;只能闭包形式发给 Executors&#xff0c; 无法优化 DataFrame 不同点&#xff1a; 数据的表示形式…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...