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

前端node.js

一.什么是node.js

官网解释:Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。

二.初步使用node.js

需要区分开的是node.js和javascript互通的只有console和定时器两个API.

三.Buffer

Buffer 是一个类似于数组的 对象,用于表示固定长度的字节序列。
Buffer 本质是一段内存空间,专门用来处理 二进制数据

特点:

  1. Buffer 大小固定且无法调整
  2. Buffer 性能较好,可以直接对计算机内存进行操作
  3. 每个元素的大小为 1 字节(byte)

①Node.js中创建 buffer 的方式主要如下几种:

②Buffer与字符串转换

Number类型的toString()方法比较特殊,有默认模式和基模式两种。

四.fs模块

文件操作

1.文件写入

 writeFile                            异步写入 
 writeFileSync                    同步写入 
 appendFile / appendFileSync  追加写入
 createWriteStream           流式写入 

①writeFile(异步写入)

语法: fs.writeFile(file, data[, options], callback)

② writeFileSync(同步写入)

语法:   fs.writeFileSync(file, data[, options])

  • 同步处理   JavaScript 主线程`会等待`其他线程的执行结果,然后再继续执行主线程的代码,效率较低
  • 异步处理   JavaScript 主线程`不会等待`其他线程的执行结果,直接执行后续的主线程代码,效率较好
③ appendFile / appendFileSync (追加写入)

语法: 

  • fs.appendFile(file, data[, options], callback)
  • fs.appendFileSync(file, data[, options])

 

④ createWriteStream    ( 流式写入 )    

程序打开一个文件是需要消耗资源的`,流式写入可以减少打开关闭文件的次数。
流式写入方式适用于`大文件写入或者频繁写入`的场景, writeFile 适合于`写入频率较低的场景

语法:fs.createWriteStream(path[, options])

 

2.文件读取 
  • readFile         异步读取 
  • readFileSync     同步读取
  • createReadStream  流式读取 
①readFile         (异步读取)

  

②readFileSync     (同步读取) 

 

③createReadStream  (流式读取) 

3.文件复制
①method1

②method2 流式复制

还有一种方式

crf.pipe(cwf) 

 4.文件重命名和移动

语法:

fs.rename(oldPath, newPath, callback)

fs.renameSync(oldPath, newPath)

参数说明: 

* oldPath   文件当前的路径
* newPath  文件新的路径
* callback   操作后的回调

①重命名

②移动

fs.renameSync(oldPath, newPath)操作 略

5.文件删除
①method1

②method2 nodejs 14.4版本引入

文件夹操作

1.创建文件夹

fs.mkdir(path [, options], callback)

fs.mkdirSync(path [, options])

递归创建:

2.读取文件夹

fs.readdir(path [, options], callback)

fs.readdirSync(path [, options])

3.删除文件夹

fs.rmdir(path [, options], callback):删除一个空的文件夹。

如果删除不为空的文件夹:

可以同样使用递归删除,但是不推荐利用fs.rmdir()进行递归删除,官方说将会弃用,推荐fs.rm()

fs.rm(path [, options], callback):删除一个文件夹或者文件。

查看资源信息

fs.stat(path [, options], callback)

 __dirname

因为相对路径的参照物为命令行的工作目录,所以有不确定性:

__dirname与 require 类似,都是 Node.js 环境中的'全局'变量

__dirname 保存着当前文件所在目录的绝对路径,可以使用 __dirname 与文件名拼接成绝对路径

let data = fs.readFileSync(__dirname + '/data.txt');
console.log(data);

练习:批量重命名文件 

const fs=require('fs')
// for(let i=1;i<=10;i++){
//     fs.writeFileSync(`./test/${i}-test.js`,'hello')
// }
//批量重命名
const files=fs.readdirSync('./test')
files.forEach(item=>{let splitname=item.split('-')let[num,name]=splitnameif(Number(num)<10){num='0'+num}let newname=num+'-'+namefs.renameSync(`./test/${item}`,`./test/${newname}`)
})

五.path模块

1.path.resolve([...paths])

该方法将一系列路径或路径段解析为 绝对路径.

①没有传递任何值的话,返回当前工具目录

②给定的路径序列从右到左处理,直到构造绝对路径。

③参数'/tmp/file/',如以斜杠开头,被视为绝对路径。此时,路径解析就从这个绝对路径开始,完全忽略剩余的路径参数

④如果只有一个相对路径,返回当前工作的绝对路径

⑤经典用法是传入绝对路径 + 相对路径

2.path.sep

提供特定于平台的 path segment separator(路径分隔符):

  • \在 Windows 上
  • /在 POSIX 上

官方文档给出的用例:

3.path.parse(path)

  • path <字符串>
  • 返回: <Object>

该方法返回一个对象,其属性表示 的重要元素 

4.获取路径/文件名/扩展名

  • 获取路径:path.dirname(path)
  • 获取文件名:path.basename(path[, suffix])
  • 获取扩展名:path.extname(path)
 ①path.dirname(path)
② path.basename(path[, suffix])

path <字符串>

  • suffix <字符串>要删除的可选后缀
  • 返回: <string>

官方文档解释:模块的默认操作因操作而异 运行 Node.js 应用程序的系统。具体来说,在 Windows 操作系统,则模块将假定 正在使用 Windows 样式的路径。

因此,在 POSIX 和 Windows 上使用可能会产生不同的结果:path.basename()

要在任何 操作系统中,请使用 path.win32:

在任何 POSIX 文件路径上使用 POSIX 文件路径时获得一致的结果 操作系统中,请使用 path.posix:

③path.extname(path)

该方法返回 , 最后一部分出现 字符串末尾的'.'的字符 

如果没有则返回空

5.path.isAbsolute(path)

该方法确定 是否为绝对路径

六.HTTP(Hypertext Transfer Protocol)协议

客户端和服务器的传输协议

请求报文:从客户端发往服务器的报文。
响应报文:服务器收到请求报文后,作为响应发往客户端的报文文。

①请求报文:

请求行举例:(http:80 https:443)

②响应报文 

响应报文中:

七.IP

ip也称为ip地址,本身就是一个数字标识。用来标识网络中的设备,实现设备间通信。

本质是一串32bit的二进制数字->分隔成每8bit即1byte为一组就形成了ip地址。

IP地址由两部分组成,即网络地址主机地址,二者是主从关系:

1. 网络号 net-id,它标志主机(或路由器)所连接到的网络,网络地址表示其属于互联网的哪一个网络

2.主机号 host-id,它标志该主机(或路由器),主机地址表示其属于该网络中的哪一台主机。

两级的 IP 地址可以记为:   IP 地址 ::= { <网络号>, <主机号>}   

 简而言之就是:IP地址 = 网络号+主机号

 分为A、B、C三类及特殊地址D、E。   

  全0和全1的都保留不用。

八.HTTP模块

1.启动http服务 

(require->request)

2.http与https

协议端口区别:http默认端口为80(http协议服务开发常用端口为3000,8080,8090,9000等) https默认端口为443

3.获取请求报文内容

①请求路径 URL路径以及URL查询字符串
 直接获取请求路径:

会获取路径和查询字符串  有时候需要拆分这个两个模块,此时借助url模块

如果想直接获取参数值而不是字符串
方法①

 

方法②(建议使用)
 练习:

const http = require('http')

const server = http.createServer((request, response) => {

    let url = new URL(request.url, 'http://127.0.0.1')

    let { method } = request

    let { pathname } = url

    response.setHeader('content-type', 'text/html;charset=utf-8')

    if (method == 'GET' && pathname == '/login') {

        response.end('登陆页面')

    } else if (method == 'GET' && pathname == '/reg') {

        response.end('注册页面')

    }else{

        response.end('failure')

    }

})

server.listen(9000, () => {

    console.log('success')

})

 4.获取响应报文内容

如果要使用res.write()最后必须要有res.end,两者是成对出现的,缺一不可,也就是说使用res.write方法向前端返回数据,必须调用res.end方法结束请求。否则浏览器会一直处于处于请求状态

常见响应状态码:

常见的十种:

200 : 成功,表示访问成功,正常状态。

301 : 永久移动,表示本网页已经永久性的移动到一个新的地址,在客户端自动将请求地址改为服务器返回的新地址。

302 : 临时重定向,表示网页暂时性的转移到一的新的地址,客户端在以后可以继续向本地址发起请求。

303 : 表示必须临时重定向,并且必须使用GET方式请求。

304 : 重定向至浏览器本身,当浏览器多次发起同一请求,且内容未更改时,使用浏览器缓存,这样可以减少网络开销。

401 : 表示用户没有访问权限,需要进行身份认证。

403 : 表示没有权限,服务器拒绝访问请求。

404 : 这是最常见的错误,(请求的资源或者网页不存在)表示找不到系统资源,但是只是暂时性地。

500 : 表示服务器程序错误,一个通用的错误信息。

503 : 表示服务器繁忙,或者服务器负载,通常这只是一个临时状态

练习:

//fight.js
const http = require('http')
const fs = require('fs')
const server = http.createServer((request, response) => {let html = fs.readFileSync(__dirname + '/highlight.html')response.end(html)//响应体可以执行多次})
server.listen(9000, () => {console.log('success')
})
//highlight.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body>
<table border="1"><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr>
</table>
</body>
<script>let highlight=document.querySelectorAll('td')
highlight.forEach(item=>{item.onclick=()=>{item.style.background='#fff'}
})
</script>
<style>
td{padding: 20px 40px;
}
table tr:nth-child(odd){background: aqua;
}
table tr:nth-child(even){background: rgb(96, 238, 143);
}table,td{border-collapse: collapse;
}</style></html>

5.资源服务

静态资源是指内容长时间不发生改变的资源

动态资源是指内容经常更新的资源

静态资源搭建:

const http = require('http')

const fs = require('fs')

const server = http.createServer((request, response) => {

    let {pathname}=new URL(request.url,'http://127.0.0.1')

    //根目录

    let root=__dirname+'/page'

    let filePath=root + pathname

    fs.readFile(filePath,(err,data)=>{

        if(err){

            response.statusCode=500

            response.end('error')

            return

        }

        response.end(data)

    })

})

server.listen(9000, () => {

    console.log('success')

})

6.绝对路径和相对路径

绝对路径在实际用的比较多

绝对路径(框内部分为常用)

相对路径:

7.mime类型

动态设置subType

处理乱码:

8.get和post请求的区别 

get请求通常用于从服务器获取资源,参数暴露在URL中,存在安全隐患,并且传输长度受URL限制,一般为2k。

情况例举:在地址栏输入url访问;点击a链接;link标签引入css;;img标签引入图片;script标签引入js;video与audio引入多媒体;form标签的method为get;ajax的get请求。

post请求通常用于向服务器提交数据或者创建新的资源。数据放在请求体中,而不是暴露在URL中,理论上来说没有传输长度限制。

情况举例:;form标签的method为post;ajax的post请求。

九.模块化

将一个复杂的程序文件依据一定的规则拆分为多个文件的过程称之为模块化

其中拆分出的每个文件就是一个模块,模块的内容数据是私有的,不过模块可以暴露内部数据以使其他模块使用。

1.模块暴露数据

注意:自己写的导入模块当中./和../是不可以省略的,导入nodejs内置模块才可以。

十.express框架 

1.基本路由 

路由用于确定应用程序如何响应对特定端点的客户机请求,包含一个 URI(或路径)和一个特定的 HTTP 请求方法(GET、POST 等)。

每个路由可以具有一个或多个处理程序函数,这些函数在路由匹配时执行。

路由定义采用以下结构:


app.METHOD(PATH, HANDLER)

其中:

  • app 是 express 的实例。
  • METHOD 是 HTTP 请求方法。
  • PATH 是服务器上的路径。
  • HANDLER 是在路由匹配时执行的函数。

有一种特殊路由方法:app.all(),它并非派生自 HTTP 方法。该方法用于在所有请求方法的路径中装入中间件函数。

2.express中的API操作报文数据

请求报文:

原生

express API:

响应报文:

注意:

1. res.send()响应的数据是经过处理的

res.send()会自动发送更多的响应报文头,其中就有Content-Type:text/html;charset=utf-8,所以没有乱码。

即res.send返回的数据是被处理过的,打开浏览器控制台,在响应头中被自动添加了context-type,也就是说,res.send()方法响应返回给页面数据时,在响应头信息里会被自动添加设置返回数据类型的context-type属性

2. res.send()只能被调用一次,因为它等同于res.write+res.end()

多个send输出只执行第一个send语句,后续send语句将不被执行

 重定向:

响应json:

响应文件内容:

3.获取路由参数 

练习:根据路由参数响应歌手的信息
const express=require('express')
const {singers}=require('./singers.json')
const app=express();
app.get('/singer/:id.html',(req,res)=>{let {id}=req.paramslet result=singers.find(item=>{return(item.id==Number(id))})if(result==undefined){res.end('not found')}else{res.end(`<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>${result.singer_name}</h1><img src='${result.singer_pic}' alt=""><h2>${result.singer_id}</h2><h2>${result.id}</h2></body></html>`)}})
app.listen(3000,()=>{console.log('3000 start')
}
)

4.中间件

中间件(Middleware)本质是一个回调函数

中间件函数可以像路由回调一样访问 请求对象(request) ,响应对象(response)

中间件的作用就是 使用函数封装公共操作,简化代码 

①全局中间件

②路由中间件

③静态资源中间件

一个API解决了之前需要利用URL多次拼接才能达成的效果。

注意事项:

①如果有index.html文件,则为默认打开的资源

②如果静态资源和路由同时匹配,谁先匹配响应谁(单线程从上到下)

③路由响应动态资源,静态资源中间件响应静态资源

练习:

将手机和电脑置于同局域网下‘

将一个静态页面资源放置根目录下:

电脑:

手机:

5.获取请求体信息

获取请求体内容需要利用中间件:

两种方式:全局中间件和路由中间件

这里使用路由中间件:

6.防盗链

防盗链的作用:防止外部网站盗用本网站资源。(别人的域名没办法访问服务资源)

app.use((req, res, next) => {
    //检测请求头中的referer是否为127.0.0.1
    //获取referer
    let referer = req.get('referer')
    if (referer) {
        let url = new URL(referer)
        let hostname = url.hostname;
        console.log(hostname)
        if(hostname !== '127.0.0.1') {
            res.status(404).send('<h1>404 not find</h1>');
        }
    }
    next()
})

referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。在本机上就是:127.0.0.1:3000; localhost:3000。

当我们获取referer后,我们可以获取域名。hostname用于获取域名。获取域名后,可以写一个简单的判断,如果域名是127.0.0.1就可以显示资源否则图片请求不到。

这里要说一个细节,细节就是,只有静态资源里面 有图片才可以正常获取referer。

7.路由模块化

8.ejs模板引擎

9.express-generator

Express 应用程序生成器 - Express中文文档 | Express中文网

文件上传也是发送http报文

①处理文件上传

利用工具包:formidable - npm然后配置post请求

保存:

var express = require('express');
var router = express.Router();
const formidable = require('formidable')
/* GET home page. */
router.get('/', function (req, res, next) {res.render('index', { title: 'Express' });
});
router.get('/protrait', (req, res) => {res.render('portrait')
})
router.post('/protrait', (req, res, next) => {const form = formidable({multiples: true,uploadDir: __dirname + '/../public/images',//保持文件后缀keepExtensions: true,});form.parse(req, (err, fields, files) => {if (err) {next(err);return;}console.log(fields)console.log(files)//服务器保存该图片的访问URLlet url='/images/'+files.protrait.newFilename//该数据以后需要存在数据库res.send(url)// res.json({ fields, files });});
});
module.exports = router;

十一、mongoDB 

Mongodb 中有三个重要概念需要掌握

数据库(database) 数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存 放很多集合

集合(collection) 集合类似于 JS 中的数组,在集合中可以存放很多文档 文档(document)

文档是数据库中的最小单位,类似于 JS 中的对象.

可以通过 JSON 文件来理解 Mongodb 中的概念

一个 JSON 文件好比是一个 数据库,

一个 Mongodb 服务下可以有 N 个数据库

JSON 文件中的 一级属性的数组值好比是集合

数组中的对象好比是文档

对象中的属性有时也称之为字段

一般情况下:

一个项目使用一个数据库 一个集合会存储同一种类型的数据

安装方法:MongoDB新版本安装配置教程(7.0.15版本-zip下载)-CSDN博客

1.Mongoose

Mongoose是一个对象文档模型库,方便使用代码操作mongodb数据库

npm i mongoose

 

①模型

Mongoose 中的一切都以 Schema 开头。每个 schema 都映射到一个 MongoDB 集合中定义 Shape 的 Shape 并定义该集合中文档的形状。

模型的实例称为文档。模型负责创建和 从底层 MongoDB 数据库中读取文档。

②字段类型

 字段值校验:
必须:

默认: 

枚举:

唯一(需要重建集合生效):

③文档操作
删除文档

删除多条则使用deleteMany

更新文档

更新多条则使用updateMany

读取文档:

读取单条还可以使用findById

读取多条则使用find(有条件读取满足条件的所有,没有则查询文档下所有)

④条件控制
运算符

在 mongodb 不能 > < >= <= !== 等运算符,需要使用替代符号

>使用 $gt

< 使用 $lt

>= 使用 $gte

<= 使用 $lte

!== 使用 $ne

    let BookModel = mongoose.model('books', BookSchema)

    BookModel.find({price:{$lt:20}}).then(data=>{

        console.log(data)

      }).catch(err=>{

        console.log('err')

      })

})

逻辑运算

$or 逻辑或的情况  

 let BookModel = mongoose.model('books', BookSchema)

    BookModel.find({$or:[{author:'吴承恩'},{author:'余华'}]}).then(data=>{

        console.log(data)

      }).catch(err=>{

        console.log('err')

      })

})

 $and 逻辑与的情况同样的用法

 let BookModel = mongoose.model('books', BookSchema)

    BookModel.find({$and:[{price:{$gt:10}},{price:{$lt:18}}]}).then(data=>{

        console.log(data)

      }).catch(err=>{

        console.log('err')

      })

})

正则匹配

条件中可以直接使用 JS 的正则语法,通过正则可以进行模糊查询

    let BookModel = mongoose.model('books', BookSchema)

    BookModel.find({name:new RegExp('红')}).then(data=>{

        console.log(data)

      }).catch(err=>{

        console.log('err')

      })

})

 

⑤个性化读取

十二.接口

接口是前后端通信的桥梁

简单理解:一个接口就是服务器中的一个路由规则,根据请求响应结果

接口->API(Application Program interface),所以有时称之为API接口

这里的接口是数据接口 以其他部分编程语言中的接口语法不同。

接口一般组成部分:

  • 请求方法
  • 接口地址(URL)
  • 请求参数
  • 响应结果

例如:身份证查询-免费API,收集所有免费的API

1.RESTful API

RESTful API是一种特殊风格的接口,主要特点有如下几个

  • URL中的路径表示资源,路径中不能有动词,例如create等
  • 操作资源要与HTTP 请求方法对应
  • 操作结果要与HTTP 响应状态码对应

json-server

一个JS编写的工具包,可以快速搭建RESTful API服务

2.接口测试工具

apipost:

相关文章:

前端node.js

一.什么是node.js 官网解释:Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 二.初步使用node.js 需要区分开的是node.js和javascript互通的只有console和定时器两个API. 三.Buffer Buffer 是一个类似于数组的 对象&#xff0c;用于表示固定长度的字节序列。Buffer…...

深度学习:GPT-2的MindSpore实践

GPT-2简介 GPT-2是一个由OpenAI于2019年提出的自回归语言模型。与GPT-1相比&#xff0c;仍基于Transformer Decoder架构&#xff0c;但是做出了一定改进。 模型规格上&#xff1a; GPT-1有117M参数&#xff0c;为下游微调任务提供预训练模型。 GPT-2显著增加了模型规模&…...

Java线程池详解:从基础到实践

Java线程池详解&#xff1a;从基础到实践 在现代多线程编程中&#xff0c;线程池是一个非常重要的工具。它能帮助开发者更高效地管理线程资源&#xff0c;避免频繁创建和销毁线程导致的性能损耗&#xff0c;并提供更灵活的任务调度机制。本文将详细讲解线程池相关知识&#xf…...

A*(A-star)算法

概述 A*&#xff08;A-star&#xff09;算法是一种在图中寻找从初始节点到目标节点最短路径的启发式搜索算法。它结合了Dijkstra算法的确保性&#xff08;保证找到一条最短路径&#xff09;和贪心算法的高效性&#xff08;快速找到目标&#xff09;。A*算法通过评估函数f(n) …...

计算机类大厂实习春招秋招开发算法面试问答练习题

计算机类大厂实习春招秋招开发算法面试问答练习题 下面有十个非常重要且常问,面试者却注意不到的问题,我们一个个来看,一个个来学。 线程创建到删除过程中,底层是怎么实现的 1.线程创建 线程创建是线程生命周期的起点。在操作系统中,线程可以通过多种方式创建,但无论哪…...

C++ 11重点总结1

智能指针 智能指针: C11引入了四种智能指针: auto_ptr(已弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针可以更有效地管理堆内存,并避免常见的内存泄漏问题。 shared_ptr: 自定义删除器。 shared_ptr使用引用计数来管理它指向的对象的生命周期。多个shared_ptr实例可以指向…...

Java异常

目录 一、异常的层次结构 1.1、Throwable 1.2、Error&#xff08;错误&#xff09; 1.3、Exception&#xff08;异常&#xff09; 运行时异常 非运行时异常 &#xff08;编译异常&#xff09; 1.4、可查的异常&#xff08;checked exceptions&#xff09;和不可查的异常…...

《热带气象学报》

《热带气象学报》创刊于1984年&#xff0c;前身为《热带气象》&#xff0c;1993年更名为《热带气象学报》&#xff0c;是广东省气象局主管&#xff0c;中国气象局广州热带海洋气象研究所主办的中文学术期刊。 本刊坚持“热带气象”的办刊特色&#xff0c;主要刊登&#xff1a;…...

解决docker不加载 /etc/docker/daemon.json文件的问题

文章目录 问题起源解决方案问题反思 问题起源 如题&#xff0c;最近在ubuntu24.04-LTS-server安装docker时&#xff0c;安装成功后设置源来设置镜像。 设置完成功拉取镜像&#xff0c;我就关机下次使用。 但是当我重启发现呢&#xff0c;镜像都不在了&#xff0c;但是由于网络…...

数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)

排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序&#xff0c;排序是一项极其重要的技能 接下…...

题解 洛谷 Luogu P1182 数列分段 Section II 二分答案 C/C++

题目传送门&#xff1a; P1182 数列分段 Section II - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1182思路&#xff1a; 二分答案&#xff0c;每次以区间 [l, r] 中点 m 为每段和的阈值 判断在此前提下&#xff0c;划分段数是否不大于 M 是就记录答案…...

鸿蒙心路旅程:从实践到创新——开发者的深度技术分享

目录 1. 引言&#xff1a;成为HarmonyOS NEXT开发者的动机 2. 项目初始化与架构设计&#xff1a;从零开始的技术规划 2.1 DevEco Studio的配置与项目初始化 2.2 分层架构设计 3. 分布式应用设计&#xff1a;挑战与解决方案 3.1 分布式架构设计&#xff1a;分布式软总线 …...

elementUI非常规数据格式渲染复杂表格(副表头、合并单元格)

效果 数据源 前端代码 (展示以及表格处理/数据处理) 标签 <el-table :data"dataList" style"width: 100%" :span-method"objectSpanMethod"><template v-for"(item, index) in headers"><el-table-column prop"…...

mysl数据库(八)事务、三种读现象

事务、三种读现象 文章目录 事务、三种读现象一、事务介绍二、事务的使用三、三种读现象 一、事务介绍 事务是mysql的一种机制&#xff0c;一个事务里可以包含多条sql语句。执行事务相当于拍了一张快照&#xff0c;在事务执行完提交以前可以回滚至最初的状态&#xff0c;当然事…...

【DVWA】File Inclusion文件包含实战

安能有术无道有道无心&#xff0c;乐得仁心仁义正心行道。 1.File Inclusion(Low) 相关代码分析 <?php// The page we wish to display $file $_GET[ page ];?>可以看到&#xff0c;服务器端对page参数没有做任何的过滤跟检查。 服务器期望用户的操作是点击下面的…...

(免费送源码)计算机毕业设计原创定制:Java+ssm+JSP+Ajax SSM棕榈校园论坛的开发

摘要 随着计算机科学技术的高速发展,计算机成了人们日常生活的必需品&#xff0c;从而也带动了一系列与此相关产业&#xff0c;是人们的生活发生了翻天覆地的变化&#xff0c;而网络化的出现也在改变着人们传统的生活方式&#xff0c;包括工作&#xff0c;学习&#xff0c;社交…...

异常处理(4)throws

异常处理&#xff08;4&#xff09; throws 前言&#xff1a;运行时异常&#xff08;RuntimeException&#xff09;或它的子类可以不做处理&#xff0c;因为这类异常很普遍&#xff0c;若全部处理&#xff0c;可能会对程序的可读性和运行效率产生影响。此外&#xff0c;即使不使…...

点云欧式聚类,条件欧式聚类算法原理及推导

点云欧式聚类算法数学推导 点云欧式聚类&#xff08;Euclidean Clustering for Point Clouds&#xff09;是点云处理中常用的一种无监督聚类方法。它基于欧式距离将点云中的点划分为多个簇&#xff0c;常用于分割、目标检测等任务。以下是算法的数学推导和实现原理。 问题定义…...

每日十题八股-2024年11月27日

1.类型互转会出现什么问题吗&#xff1f; 2.为什么用bigDecimal 不用double &#xff1f; 3.装箱和拆箱是什么&#xff1f; 4.Java为什么要有Integer&#xff1f; 5.Integer相比int有什么优点&#xff1f; 6.那为什么还要保留int类型&#xff1f; 7.说一下 integer的缓存 8.怎么…...

C++虚函数面试题及参考答案

什么是虚函数&#xff1f;它的作用是什么&#xff1f; 虚函数是在基类中使用关键字 virtual 声明的成员函数。当在派生类中重写&#xff08;override&#xff09;这个函数时&#xff0c;会根据对象的实际类型来调用相应的函数版本&#xff0c;而不是仅仅根据指针或引用的类型来…...

如何搭建C++环境--1.下载安装并调试Microsoft Visual Studio Previerw(Windows)

1.首先&#xff0c;打开浏览器 首先&#xff0c;搜索“Microsoft Visual Studio Previerw” 安装 1.运行VisualStudioSetup (1).exe 无脑一直点继续 然后就到 选择需要的语言 我一般python用pycharm Java&#xff0c;HTML用vscode&#xff08;Microsoft Visual Studio cod…...

大数据新视界 -- Hive 函数应用:复杂数据转换的实战案例(下)(12/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

深入理解 TypeScript:联合类型与交叉类型的应用

在 TypeScript 的世界里&#xff0c;类型系统是核心特性之一&#xff0c;它提供了强大的工具来帮助开发者编写更安全、更可靠的代码。今天&#xff0c;我们将深入探讨 TypeScript 中的两个高级类型特性&#xff1a;联合类型&#xff08;Union Types&#xff09;和交叉类型&…...

fiddler抓包工具与requests库构建自动化报告

一. Fiddler 抓包工具 1.1 Fiddler 工具介绍和安装 Fiddler 是一款功能强大的 HTTP 调试代理工具&#xff0c;能够全面记录并深入检查您的计算机与互联网之间的 HTTP 和 HTTPS 通信数据。其主界面布局清晰&#xff0c;主要包含菜单栏、工具栏、树形标签栏和内容栏。 1.2 Fid…...

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!

文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...

Vue-常用指令

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-常用指令 目录 1.1 v-cloak 1.2 双向数据绑定指令 v-model 1.3 v-once 1.4 绑定属性 v-bind…...

守护进程

目录 守护进程 前台进程 后台进程 session&#xff08;进程会话&#xff09; 前台任务和后台任务比较好 本质 绘画和终端都关掉了&#xff0c;那些任务仍然在 bash也退了&#xff0c;然后就托孤了 ​编辑 守护进程化---不想受到任何用户登陆和注销的影响​编辑 如何…...

GPON原理

GPON网络架构 对于OLT来说&#xff0c;它就相当于一个指挥官&#xff0c;它指挥PON口下的ONU在指定的时间段内发送数据以及发起测距过程等 而ONU则是一个士兵&#xff0c;按照OLT的指挥做出相应 而ODN它主要就是提供一个传输通道&#xff0c;主要包括分光器和光纤组成 对于PO…...

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述&#xff0c;解决同一台PC上同时部署华三(HCL)和华为(eNSP&#xff09;模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本&#xff0c;可以直接和eNSP兼容Oracle VirtualBox&#xff0c;而其他版本均使用Oracle VirtualBox v6以上的版本&#xff0c;…...

类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数

1.初始化列表 1.1作用&#xff1a; 通过特定的值&#xff0c;来初始化对象。 1.2定义&#xff1a; 初始化列表&#xff0c;就相当于定义对象&#xff08;开空间&#xff09;。不管写不写初始化列表&#xff0c;每个成员变量都会走一遍初始化列表&#xff08;开出对应的空间…...

clickhouse 使用global in 优化 in查询

文章目录 in例子使用global in in例子 SELECT uniq(UserID) FROM distributed_table WHERE CounterID 101500 AND UserID IN (SELECT UserID FROM distributed_table WHERE CounterID 34)对于in 查询来说&#xff0c;本来查询的就是分布式表&#xff0c;假设这个表有100 个…...

macos 14.0 Monoma 修改顶部菜单栏颜色

macos 14.0 设置暗色后顶部菜单栏还维持浅色&#xff0c;与整体不协调。 修改方式如下&#xff1a;...

鸿蒙动画开发07——粒子动画

1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子&#xff0c;这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画&#xff0c;来营造一种氛围感&#xff0c;比如下…...

Matlab 2016b安装教程附安装包下载

软件介绍 MATLAB&#xff08;矩阵实验室&#xff09;是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。MATLAB具有数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理、数字信…...

Container image .... already present on machine 故障排除

故障现象&#xff1a; Normal Pulled 12s (x2 over 15s) kubelet Container image “registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1” already present on machine kubectl get pods NAME READY STATUS RESTARTS AGE two-pod 1/2 Error …...

力扣 二叉树的层序遍历-102

二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…...

Java 平衡二叉树 判断 详解

判断平衡二叉树的详解&#xff08;Java 实现&#xff09; 平衡二叉树的定义&#xff1a; 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;是指一棵二叉树中任意节点的左右子树高度差不超过 1。即&#xff1a; ∣ h e i g h t ( l e f t ) − h e i g h t ( r i g h …...

Java设计模式笔记(一)

Java设计模式笔记&#xff08;一&#xff09; &#xff08;23种设计模式由于篇幅较大分为两篇展示&#xff09; 一、设计模式介绍 1、设计模式的目的 让程序具有更好的&#xff1a; 代码重用性可读性可扩展性可靠性高内聚&#xff0c;低耦合 2、设计模式的七大原则 单一职…...

【人工智能学习之yolov8改进的网络怎么指定规模】

yolov8改进的网络怎么指定规模 在你更换主干网络或者做了其他修改之后&#xff0c;发现模型总是默认使用的n规模&#xff0c;而n规模有可能无法完成任务&#xff0c;怎么办呢&#xff0c;有什么办法指定规模大小呢&#xff1f; WARNING ⚠️ no model scale passed. Assuming …...

网络安全概述

网络安全 物理安全 网络的物理安全是整个网络系统安全的前提。在 校园网工程建设中&#xff0c;由于网络系统属于 弱电工程&#xff0c;耐压值很低。因此&#xff0c;在 网络工程的设计和施工中&#xff0c;必须优先考虑保护人和 网络设备不受电、火灾和雷击的侵害&#xff1…...

[MySQL#2] 库 | 表 | 详解CRUD命令 | 字符集 | 校验规则

目录 一. 库操作 1. 创建数据库 2. 字符集和校验规则 校验规则对数据库的影响 显示创建数据库时对应的命令 3. 修改数据库 4. 数据库删除 备份和恢复 还原 查看连接情况 二. 表操作 1. 创建表&#xff08;定义实例化格式 2. 创建表案例 &#xff08;实例化数据类型…...

【Unity基础】如何查看当前项目使用的渲染管线?

在 Unity 中&#xff0c;你可以通过以下几种方式查看当前项目使用的是哪个渲染管线&#xff1a; 1. 检查 Graphics Settings 打开 Unity 编辑器&#xff0c;进入顶部菜单&#xff1a;Edit → Project Settings → Graphics。在 Graphics Settings 窗口中&#xff0c;找到 Scr…...

什么是域名监控?

域名监控是持续跟踪全球域名系统&#xff08;DNS&#xff09;中变化以发现恶意活动迹象的过程。组织可以对其拥有的域名进行监控&#xff0c;以判断是否有威胁行为者试图入侵其网络。他们还可以对客户的域名使用这种技术以执行类似的检查。 你可以将域名监控比作跟踪与自己实物…...

apache中的Worker 和 Prefork 之间的区别是什么?

文章目录 内存使用稳定性兼容性适用场景 Apache中的Worker和Prefork两种工作模式在内存使用、稳定性以及兼容性等方面存在区别 内存使用 Worker&#xff1a;由于使用线程&#xff0c;内存占用较少。Prefork&#xff1a;每个进程独立运行&#xff0c;内存消耗较大。 稳定性 W…...

解决SSL VPN客户端一直提示无法连接服务器的问题

近期服务器更新VPN后&#xff0c;我的win10电脑一致无法连接到VPN服务器&#xff0c; SSL VPN客户端总是提示无法连接到服务端。网上百度尝试了各种方法后&#xff0c;终于通过以下设置方式解决了问题&#xff1a; 1、首先&#xff0c;在控制面板中打开“网络和共享中心”窗口&…...

网络基础概念

1.网络协议 网络协议是一组标准和规则&#xff0c;用于定义电子设备如何在网络上通信。这些规则涵盖了数据如何格式化&#xff0c;传输&#xff0c;路由以及接收。网络协议确保了不同制造商的设备能够相互理解和交换数据 协议分层 协议也是软件&#xff0c;在设计上为了更好…...

sunshine和moonlight串流网络丢失帧高的问题(局域网)

注&#xff1a;此贴结果仅供参考 场景环境&#xff1a;单身公寓 路由器&#xff1a;2016年的路由器 开始&#xff1a;电脑安装sunshine软件&#xff0c;手机安装moonlight软件开始串流发现网络丢失帧发现巨高 一开始怀疑就是路由器问题&#xff0c;因为是局域网&#xff0c;而…...

远程视频验证如何改变商业安全

如今&#xff0c;商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力&#xff0c;但…...

CTO 实际上是做什么的?

https://vadimkravcenko.com/shorts/what-cto-does/ 有刪節 本文旨在为软件工程师解密CTO的角色&#xff0c;并为那些渴望担任这一职位的人提供路线图。 “他们是技术团队与公司其他部门之间的桥梁&#xff0c;确保技术支持并推动业务发展。” CTO的角色经常被误解。CTO有时是…...

【软考速通笔记】系统架构设计师④——系统工程基础知识

文章目录 一、前言二、系统工程方法2.1 霍尔的三维结构2.2 切克兰德法2.3 并行工程2.4 综合集成法 三、系统工程生命周期四、系统生命周期方法五、系统性能5.1 计算机的性能指标5.2 路由器的性能指标5.3 交换机的性能指标5.4 网络的性能资料5.5 操作系统的性能指标5.6 数据库的…...