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

【前端】Node.js一本通

近两天更新完毕,建议关注收藏点赞。

目录

  • 复习
  • Node.js概述
  • 使用
    • fs文件系统模块
    • path路径模块
    • http模块
    • 模块化

复习

  1. 为什么JS可以在浏览器中执行
    原理:待执行的JS代码->JS解析引擎
    不同的浏览器使用不同的 JavaScript 解析引擎:其中,Chrome 浏览器的 V8 解析引擎性能最好!
    Chrome 浏览器 => V8
    Firefox 浏览器 => OdinMonkey(奥丁猴)
    Safari 浏览器 => JSCore
    IE 浏览器 => Chakra(查克拉)
  2. 为什么 JavaScript 可以操作 DOM 和 BOM
    每个浏览器都内置了 DOM、BOM 这样的 API 函数,因此,浏览器中的 JavaScript 才可以调用它们。
    在这里插入图片描述
  3. 浏览器中JS运行环境
    总结:V8 引擎负责解析和执行 JavaScript 代码。内置 API 是由运行环境提供的特殊接口,只能在所属的运行环境中被调用。
    在这里插入图片描述
  4. 学习路径总结
  • 浏览器中的 JavaScript 学习路径:
    JavaScript 基础语法 + 浏览器内置 API(DOM + BOM) + 第三方库(jQuery、art-template 等)
  • Node.js 的学习路径:
    JavaScript 基础语法 + Node.js 内置 API 模块(fs、path、http等)+ 第三方 API 模块(express、mysql 等)

Node.js概述

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。nodejs官网
  • 运行环境
    浏览器是 JavaScript 的前端运行环境。
    Node.js 是 JavaScript 的后端运行环境。
    Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API。
  • 功能
    Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的功能和 API。在此基础上,运用很多强大的工具和框架。
    基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
    基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
    基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
    读写和操作数据库、创建实用的命令行工具辅助前端开发…
工具/框架简介特点
Express.js用于构建Web应用和API的轻量级框架简洁、快速、支持RESTful API、强大的路由功能
NestJS基于TypeScript的现代化Node.js框架,适用于企业级应用支持TypeScript、模块化架构、易于集成各种库
Koa.js由Express原班人马开发的框架,目标是更小更强大支持async/await、灵活的中间件机制
Hapi.js强大的Web框架,注重可扩展性和灵活性强大的插件系统、内置验证、路由和错误处理功能
Sails.js基于Express的MVC框架,适合数据驱动的API应用支持WebSockets、ORM、MVC结构
Socket.io实现实时、双向通信的JavaScript库支持WebSocket、易于集成、支持广播和房间功能
Electron.js使用Web技术构建跨平台桌面应用跨平台、支持丰富的原生API
Gulp.js基于流的JavaScript任务运行器,用于自动化前端任务流式任务系统、插件丰富、易于配置
Grunt.jsJavaScript任务运行器,自动化前端开发流程配置简洁、插件支持广泛
PM2Node.js进程管理工具,支持生产环境的应用管理进程管理、负载均衡、日志管理、性能监控
MongooseMongoDB的ODM库,简化与MongoDB的交互Schema支持、数据验证、查询构建、模型功能强大
  • 安装
    LTS是长期稳定版 企业项目推荐安装
node -v #查看版本

使用

  • 在 Node.js 环境中执行 JavaScript 代码
node js_path

补充终端快捷键
tab快速补全路径
esc快速清空当前已输入命令
cls清空终端

  • 实例:将html文件中的js css部分拆出来成一单独文件
[\s\S] 只匹配 一个字符;
[\s\S]* 才是匹配 任意数量的字符(包括 0 个);
[\s\S]*? 是非贪婪地匹配任意数量字符,直到匹配到后续的模式。
const fs=require('fs')
const path=require('path')
const regStyle=/<style>[\s\S]*<\/style>/
const regScript=/<script>[\s\S]*<\/script>/
fs.readFile(path.join(__dirname,'index.html'),'utf8',(err,datastr)=>{if(err)return console.log('文件读取失败'+err.message)resolveCSS(datastr)resolveJS(datastr)resolveHTML(datastr)
})function resolveCSS(htmlstr){const r1=regStyle.exec(htmlstr)const newcss=r1[0].replace('<style>','').replace('</style>','')fs.writeFile(path.join(__dirname,'index.css'),newcss,err=>{if(err)return console.log('文件写入失败'+err.message)console.log('css写入成功')})
}function resolveJS(htmlstr){const r2=regScript.exec(htmlstr)const newjs=r2[0].replace('<script>','').replace('</script>','')fs.writeFile(path.join(__dirname,'./index.js'),newjs,err=>{if(err)return console.log('文件写入失败'+err.message)console.log('js写入成功')})
}function resolveHTML(htmlstr){const newhtml=htmlstr.replace(regStyle,'<link rel="stylesheet" href="./index.css"/>').replace(regScript,'<script src="./index.js"></script>')fs.writeFile(path.join(__dirname,'./index.html'),newhtml,err=>{if(err)return console.log('文件写入失败'+err.message)console.log('html写入成功')})
}
  • 实例:实现clock时钟的web服务器
    把文件的实际存放路径,作为每个资源的请求 url 地址。
    在这里插入图片描述
const http=require('http')
const fs=require('fs')
const path=require('path')
const server=http.createServer()
server.on('request',function(req,res){const url=req.urllet fpath=''//const fpath=path.join(__dirname,url)if(url==='/'){fpath=path.join(__dirname,'./clock/index.html')}else{fpath=path.join(__dirname,'./clock',url)}fs.readFile(fpath,'utf8',(err,datastr)=>{if(err)return res.end('404 not found')res.end(datastr)})
})
server.listen(80,function(){console.log('listening')
})

fs文件系统模块

fs模块是nodejs提供的用来操作文件的模块。
fs.writeFile() 方法只能用来创建文件,不能用来创建路径
重复调用 fs.writeFile() 写入同一个文件,新写入的内容会覆盖之前的旧内容

//js中用fs模块操作文件
const fs=require('fs')//导入fs.readFile(path,[options],callback)
//参数2 可选 编码格式
//参数3 文件读取完成,通过回调函数拿到读取结果fs.readFile('./path.txt','utf8',function(err,datastr){if(err)return console.log('文件读取失败'+err.message)//err=null时读取成功,反之读取失败,datastr=undefinedconsole.log(datastr)
})fs.writeFile(file_path,data.[options],callback)
//data 要写入file的内容
//callback 文件写入完成后的回调函数
//是否写入成功也是判断err
  • 路径动态拼接的问题
    在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 …/ 开头的相对路径时,很容易出现路径动态拼接错误的问题。
    原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。
    解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。
    __dirname 是 Node.js 中的一个全局变量,它表示当前模块(文件)所在的目录的绝对路径。它在所有模块中都可用,并且通常用于拼接路径,方便访问文件系统中的其他文件。
//__dirname: /Users/yourname/projectfs.readFile(__dirname+'/path.txt','utf8',function(err,datastr){if(err)return console.log('文件读取失败'+err.message)//err=null时读取成功,反之读取失败console.log(datastr)
})

path路径模块

path 模块是 Node.js 官方提供的、用来处理路径的模块。凡是后端(不是前端)涉及路径拼接的操作,用这个模块,不要用+进行字符串拼接。

const path=require('path') //导入path.join([...paths])//多个路径片段连接const filePath = path.join(__dirname, 'data', 'file.txt');
console.log(filePath);
// 输出:/Users/yourname/project/data/file.txtpath.basename(path,[ext])
//获取路径的最后一部分,用于获取路径中的文件名
//ext 可选,文件扩展名const fpath='/a/b/c/index.html'
var filename=path.basename(fpath)
var name_without_ext=path.basename(fpath,'.html')path.extname(path)//获取扩展名部分
const fext=path.extname(fpath)

http模块

http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法,就能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务。
在 Node.js 中,我们不需要使用 IIS、Apache 等这些第三方 web 服务器软件。因为我们可以基于 Node.js 提供的 http 模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供 web 服务。

  • 创建 web 服务器的基本步骤
    导入 http 模块
    创建 web 服务器实例
    为服务器实例绑定 request 事件,监听客户端的请求
    启动服务器
const http=require('http')//导入
const server=http.createServer()//web服务器实例//为服务器实例绑定request事件 监听客户端发送过来的网络请求
server.on('request',(req,res)=>{//只要有客户端请求服务器,就会触发request事件,调用这个事件处理函数const str=`req url is ${req.url},req method is ${req.method}`console.log('welcome',str)//防止中文乱码res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()向客户端发送内容,并结束这次请求处理过程res.end(str)
})//根据不同url相应不同html内容
server.on('request',(req,res)=>{//只要有客户端请求服务器,就会触发request事件,调用这个事件处理函数const url=req.urllet content='<h1>404 not found</h1>'if(url==='/' || url==='/index.html'){content='<h1>welcome欢迎</h1>'}else if(url==='/about.html'){content='<h1>it\'s me这是我 </h1>'}//防止中文乱码res.setHeader('Content-Type','text/html;charset=utf-8')//res.end()向客户端发送内容,并结束这次请求处理过程res.end(content)
})//启动服务器
server.listen(80,()=>{console.log('running')
})

模块化

Node.js 中根据模块来源的不同,将模块分为了 3 大类,分别是:
内置模块(内置模块是由 Node.js 官方提供的,例如 fs、path、http 等)
自定义模块(用户创建的每个 .js 文件,都是自定义模块)
第三方模块(由第三方开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载)

  • 加载模块
    require方法的使用会加载执行这个模块中的代码。
  • 模块有模块作用域,防止全局变量污染。
    每个.js自定义模块都有一个module对象,里面存储和当前模块有关信息。在 Node.js 中,每个模块内部都有一个 module 对象,它包含了当前模块的元信息。
  • module.exports 对象
    在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象。使用 require() 方法导入模块时,导入的结果,永远以 module.exports 指向的对象为准。
  • exports 对象
    由于 module.exports 单词写起来比较复杂,为了简化向外共享成员的代码,Node 提供了 exports 对象。默认情况下,exports 和 module.exports 指向同一个对象。最终共享的结果,还是以 module.exports 指向的对象为准。
  • exports 和 module.exports 的使用误区
    require() 模块时,得到的永远是 module.exports 指向的对象
    注意:为了防止混乱,建议大家不要在同一个模块中同时使用 exports 和 module.exports
    在这里插入图片描述
  • Node.js 中的模块化规范
    Node.js 遵循了 CommonJS 模块化规范,CommonJS 规定了模块的特性和各模块之间如何相互依赖。
    CommonJS 规定:
    每个模块内部,module 变量代表当前模块。
    module 变量是一个对象,它的 exports 属性(即 module.exports)是对外的接口。
    加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块。
const http=require('http')//导入内置模块const custom=require('./custom.js')//导入用户自定义模块const moment=require('moment')//导入第三方模块require('./modA');
require('./modB');
console.log('main module:', module);
//module 不会 直接包含 require('./modA') 和 require('./modB') 的详细信息
//但它间接包含子模块的信息 —— 体现在 module.children 属性里。//modA.js
module.exports = { myModule: module };
//modB.js
module.exports = { myModule: module };
//main.js
const modA = require('./modA');
const modB = require('./modB');
console.log('modA module:', modA.myModule);
console.log('modB module:', modB.myModule);
console.log('main module:', module);//使用moment包
//npm安装moment
const moment=require('moment')//导入第三方模块
const dt=moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt)

相关文章:

【前端】Node.js一本通

近两天更新完毕&#xff0c;建议关注收藏点赞。 目录 复习Node.js概述使用fs文件系统模块path路径模块http模块模块化 复习 为什么JS可以在浏览器中执行 原理&#xff1a;待执行的JS代码->JS解析引擎 不同的浏览器使用不同的 JavaScript 解析引擎&#xff1a;其中&#xf…...

Groovy

一&#xff1a;了解 1:groovy保留字 2: 标识符 二&#xff1a;数据类型 1:字符串(1) 1: java.lang.string 定义的字符串是不能改变的 2: groovy.lang.GString 定义的字符串的值是不能改变的 2: 总结 三&#xff1a;数值类型 1: Groovy的数值型包括整数型&#xff08;integer)…...

【并发编程 | 第七篇】深入学习线程池(一)

什么是线程池&#xff1f; 线程池是用来管理和复用线程的⼯具&#xff0c;它可以减少线程的创建和销毁开销。 在 Java 中&#xff0c;ThreadPoolExecutor 是线程池的核⼼实现&#xff0c;它通过核⼼线程数、最⼤线程数、任务队列和拒绝策略来 控制线程的创建和执⾏。 举个栗…...

C++ 获取一整行(一行)字符串并转换为数字

代码很简单&#xff0c;主要是自己总是忘记&#xff0c;记录一下&#xff1a; #include <iostream> #include <cstdlib> #include <cstring>#include <string> #include <vector> #include <sstream>using namespace std;void print_int_…...

初探:简道云平台架构及原理

一、系统架构概述 简道云作为一款低代码开发平台&#xff0c;其架构设计以模块化和云端协同为核心&#xff0c;主要分为以下层次&#xff1a; 1. 前端层 可视化界面&#xff1a;基于Web的拖拽式表单设计器&#xff0c;支持动态渲染&#xff08;React/Vue框架&#xff09;。多…...

鸿蒙Arkts开发飞机大战小游戏,包含无敌模式,自动射弹,暂停和继续

飞机大战可以把飞机改成图片&#xff0c;目前包含无敌模式&#xff0c;自动射弹&#xff0c;暂停和继续的功能 代码如下&#xff1a; // 定义位置类 class GamePosition {x: numbery: numberconstructor(x: number, y: number) {this.x xthis.y y} }Entry Component struct…...

使用`sklearn`中的逻辑回归模型进行股票的情感分析,以及按日期统计积极和消极评论数量的功能

以下是完成上述任务的Python代码&#xff0c;可在Jupyter Notebook中运行。此代码包含了使用sklearn中的逻辑回归模型进行情感分析&#xff0c;以及按日期统计积极和消极评论数量的功能。 import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer f…...

简洁的 PlantUML 入门教程

评论中太多朋友在问&#xff0c;我的文章中图例如何完成的。 我一直用plantUML,也推荐大家用&#xff0c;下面给出一个简洁的PlantUML教程。 &#x1f331; 什么是 PlantUML&#xff1f; PlantUML 是一个用纯文本语言画图的工具&#xff0c;支持流程图、时序图、用例图、类图、…...

Python 面向对象 - 依赖倒置原则 (DIP)

1. 核心概念 依赖倒置原则(Dependency Inversion Principle, DIP) 是SOLID原则中的"D"&#xff0c;包含两个关键点&#xff1a; 高层模块不应依赖低层模块&#xff0c;二者都应依赖抽象抽象不应依赖细节&#xff0c;细节应依赖抽象 2. 使用场景 典型应用场景 系…...

自动化框架及其设计搭建浅谈(二)--分层自动化测试

目录 测试金字塔模型 分层自动化测试的模型 分层自动化测试的最佳实践 自动化分层测试的误区 自动化框架的设计与自动化分层 自动化测试的设计建议 分层自动化测试&#xff0c;顾名思义&#xff0c;就是分层的自动化测试&#xff0c;那么自动化测试为什么要分层呢&#x…...

ResNet改进(19):基于PyTorch的ResNet改进方案详解:Mish激活+SPP模块+MixUp数据增强

1. 前言 ResNet作为深度学习领域里程碑式的网络架构,在图像分类等计算机视觉任务中表现出色。然而,随着研究的深入和技术的发展,原始的ResNet架构仍有改进空间。本文将详细介绍一种基于PyTorch的ResNet改进方案,该方案融合了Mish激活函数、SPP模块和MixUp数据增强等先进技…...

设计模式简述(九)命令模式

命令模式 描述基本使用使用 描述 命令模式是一种体现高内聚的行为模式。 将整个请求封装成一个命令对象&#xff0c;由这个命令对象完成所需业务调用。 命令对象封装了该命令需要的所有逻辑&#xff0c;不需要调用方关注内部细节。 基本使用 定义抽象命令&#xff08;所有命…...

Codecademy—— 交互式编程学习的乐园

一、网站概述 Codecademy 是一家美国在线学习编程知识的网站&#xff0c;它为编程学习者提供了一种全新的学习方式。在如今众多的编程学习平台中&#xff0c;Codecademy 凭借其独特的优势脱颖而出&#xff0c;吸引了全球数百万用户。其目标是帮助更多人轻松学习编程&#xff0…...

分布式数据库HBase

1.概述 1.1从BigTable 说起 BigTable是一个分布式存储系统&#xff0c;BigTable起初用于解决典型的互联网搜索问题。 BigTable是一个分布式存储系统利用谷歌提出的MapReduce分布式并行计算模型来处理海量数据使用谷歌分布式文件系统GFS作为底层数据存储采用Chubby提供协同服…...

Linux进程地址空间(12)

文章目录 前言一、进程空间地址基本概念代码分析 二、如何理解地址空间三、进一步理解页表和写实拷贝对虚拟地址的进一步深入fork() 的两个返回值&#xff1f; 总结 前言 融会贯通&#xff01;   本篇会让你再次对计算机世界里面的大智慧感到汗颜&#xff01; 本篇研究环境基…...

鸿蒙开发04界面渲染

文章目录 前言一、条件渲染1.1 if/else1.2 属性控制1.3 可见性 二、循环渲染三、滚动渲染3.1 下拉刷新3.2 上拉加载 前言 在声明式描述语句中开发者除了使用系统组件外&#xff0c;还可以使用渲染控制语句来辅助UI的构建&#xff0c;这些渲染控制语句包括控制组件是否显示的条…...

CANoe CAPL——Ethernet CAPL函数

CANoe CAPL——CAN CAPL函数 事件过程&#xff08;Event Procedures&#xff09; 函数名简要描述on ethernetErrorPacket收到错误的以太网数据包时调用。on ethernetMacsecStatus当物理端口的以太网 MACsec 连接状态变化时调用。on ethernetPacket接收到以太网数据包后调用。…...

语法: setup_lcd (mode, prescale, [segments]);

SETUP_LCD( ) 语法: setup_lcd (mode, prescale, [segments]); 参数: mode可能是来自devices.h头文件如下常数: LCD_DISABLED, LCD_STATIC, LCD_MUX12, LCD_MUX13, LCD_MUX14 下面的参数:STOP_ON_SLEEP, USE_TIMER_1可同上面的LCD_DISABLED, LCD_STATIC, LCD_MUX12, LCD…...

微前端随笔

✨ single-spa&#xff1a; js-entry 通过es-module 或 umd 动态插入 js 脚本 &#xff0c;在主应用中发送请求&#xff0c;来获取子应用的包&#xff0c; 该子应用的包 singleSpa.registerApplication({name: app1,app: () > import(http://localhost:8080/app1.js),active…...

实操(不可重入函数、volatile、SIGCHLD、线程)Linux

1 不可重入函数 为什么会导致节点丢失内存泄露&#xff1f;main函数在执行insert&#xff0c;但是没执行完就被信号中断了&#xff0c;又进了这个函数里&#xff0c;所以这个insert函数在不同的执行流中&#xff0c;同一个函数被重复进入&#xff0c;如果没有问题&#xff0c;…...

如何在Linux系统上通过命令调用AI大模型?

如何在Linux系统上通过命令调用AI大模型&#xff1f; 文章目录 如何在Linux系统上通过命令调用AI大模型&#xff1f;一、准备工作二、编写API调用脚本三、配置命令行工具 使用AI命令帮我做一个文档总结提问技术问题编写简单的shell脚本帮我写一个docker-compose 在这个AI技术飞…...

数据分析-Excel-学习笔记Day1

Day1 复现报表聚合函数&#xff1a;日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格&#xff0c;首先要看这个表格的构成&#xff08;包含了哪些数据&#xff09;&#xff0c;几行几列&#xff0c;每一列的名称…...

负载均衡是什么,Kubernetes如何自动实现负载均衡

负载均衡是什么&#xff1f; 负载均衡&#xff08;Load Balancing&#xff09; 是一种网络技术&#xff0c;用于将网络流量&#xff08;如 HTTP 请求、TCP 连接等&#xff09;分发到多个服务器或服务实例上&#xff0c;以避免单个服务器过载&#xff0c;提高系统的可用性、可扩…...

洞察 Linux 进程管理

一、进程和线程的概念 1.进程 &#xff08;1&#xff09;概念 进程是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位。进程是程序的执行实例&#xff0c;拥有独立的资源&#xff08;如内存、文件描述符等&#xff09;。每个进程在创建时会被…...

http协议版本的区别 -- 2和3

目录 http2和http3的区别 传输层协议 QUIC协议 介绍 连接建立与握手 建立安全连接的过程 RTT 建连为什么需要两个过程 原因 解决 QUIC协议的1-RTT 建连 必要性 连接过程 第一次握手(Client Hello) 版本号 key_share 其他 第二次握手 介绍 Server Hello 身…...

Vue2-实现elementUI的select全选功能

文章目录 使用 Element UI 的全选功能自定义选项来模拟全选 在使用 Element UI 的 el-select组件时&#xff0c;实现“全选”功能&#xff0c;通常有两种方式&#xff1a;一种是使用内置的全选功能&#xff0c;另一种是通过自定义选项来模拟全选。 使用 Element UI 的全选功能…...

Spring Boot 与 TDengine 的深度集成实践(四)

优化与扩展 批量插入数据 在实际应用中&#xff0c;当需要插入大量数据时&#xff0c;逐条插入会导致性能低下&#xff0c;因为每次插入都需要建立数据库连接、解析 SQL 语句等操作&#xff0c;这些操作会带来额外的开销 。为了提高数据插入效率&#xff0c;我们可以采用批量…...

2025年【山东省安全员C证】考试题及山东省安全员C证考试内容

在当今建筑行业蓬勃发展的背景下&#xff0c;安全生产已成为企业生存与发展的基石。安全员作为施工现场安全管理的直接责任人&#xff0c;其专业能力和资质认证显得尤为重要。山东省安全员C证作为衡量安全员专业水平的重要标准&#xff0c;不仅关乎个人职业发展&#xff0c;更直…...

提升Spring Boot开发效率的Idea插件:Spring Boot Helper

一、Spring Boot Helper插件介绍 Spring Boot Helper是一款专为Spring Boot开发者设计的IntelliJ IDEA插件&#xff0c;它提供了丰富的功能来简化和加速Spring Boot应用程序的开发过程。 该插件能够智能识别Spring Boot项目结构&#xff0c;提供专属的代码生成、配置辅助和运…...

【USTC 计算机网络】第三章:传输层 - 面向连接的传输:TCP

本文介绍了面向连接的传输协议&#xff1a;TCP&#xff0c;首先介绍 TCP 报文段的结构以及如何设置超时定时器&#xff0c;接着介绍 TCP 如何实现可靠数据传输以及流量控制&#xff0c;最后介绍 TCP 中最重要的三次握手与四次挥手的连接建立与关闭过程。 1. TCP 概述与段结构 …...

Linux主要开发工具之gcc、gdb与make

此系列还有两篇&#xff0c;大家想完整掌握可以阅读另外两篇 Linux文本编辑与shell程序设计-CSDN博客 Linux基础知识详解与命令大全&#xff08;超详细&#xff09;-CSDN博客 1.gcc编译系统 1.1 文件名后缀 文件名后缀 文 件 类 型 文件名后缀 文 件 类 型 .c C源…...

23种设计模式-行为型模式-观察者

文章目录 简介问题解决代码关键实现说明 总结 简介 观察者是一种行为设计模式&#xff0c; 允许你定义一种订阅通知机制&#xff0c; 可在事件发生时通知多个“观察/订阅”该对象的其他对象。 问题 假如你有两种类型的对象: 顾客和商店。顾客对某个新品非常感兴趣&#xff0…...

去中心化预测市场

去中心化预测市场 核心概念 预测市场类型&#xff1a; 类别型市场&#xff1a;二元结果&#xff08;YES/NO&#xff09;&#xff0c;例如“BTC在2024年突破10万美元&#xff1f;” 多选型市场&#xff1a;多个选项&#xff08;如总统候选人&#xff09;&#xff0c;赔付基于…...

springboot-ai接入DeepSeek

1、引入pom依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency><dependencyManagement><dependencies><dependency><groupId>o…...

【C语言】数据在内存中的储存(整形)

目录 前言&#xff1a; 预备知识 整数在内存中的储存 原码 反码 补码 总结&#xff1a; 前言&#xff1a; 在上两章中讲解了五大内存函数&#xff0c;其中memchr函数&#xff0c;这个函数考察到数据内存的存储。 接下来为大家讲解整数在内存中的储存。 预备知识 认识…...

PCL 树木树干粗提取(地基数据,TLS)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 主要的思路如下: 1、首先,使用之前的CSF算法提取点云的地面点,在提取的过程中我们可以得到一个布料结构(地面模型)。 2、在得到这个布料结构之后,我们也就可以得到整个地面模型的高度了,之后我们只需要遍历每…...

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定义&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09; 是一种设计思想&#xff1a;对象不再由你自己创建和管理&#xff0c;而是交给 Spring 容器…...

尚硅谷2019版Java集合和泛型

第十一章 Java集合框架 集合框架全景图 mindmaproot((Java集合))Collection单列List有序可重复ArrayListLinkedListVectorSet无序唯一HashSetLinkedHashSetTreeSetMap双列HashMapLinkedHashMapTreeMapHashtablePropertiesToolsCollectionsArrays三大核心接口对比 特性ListSe…...

车载诊断架构 --- 整车重启先后顺序带来的思考

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...

华为eNSP:实验 配置单区域集成ISIS

单区域集成ISIS是一种基于中间系统到中间系统&#xff08;IS-IS&#xff09;协议的网络架构优化方案&#xff0c;主要用于简化网络设计并提升数据传输效率。其核心特点包括&#xff1a; ‌单一区域部署‌ ISIS协议在单一逻辑区域内运行&#xff0c;消除多区域间的分层复杂性&am…...

常见框架漏洞(五)----中间件IIS6

一、【PUT漏洞】 漏洞描述&#xff1a;IIS Server 在 Web 服务扩展中开启了 WebDAV &#xff0c;配置了可以写⼊的权限&#xff0c;造成任意⽂件上传。 版本&#xff1a;IIS 6.0 1. 环境 fofa搜素环境&#xff1a;"IIS-6.0" 或者环境搭建&#xff1a;本地搭建2003…...

leetcode221.最大正方形

class Solution {public int maximalSquare(char[][] matrix) {int result 0; // 记录正方形边长int m matrix.length, n matrix[0].length;int[][] dp new int[m 1][n 1];// 动态规划for (int i 1; i < m; i) {for (int j 1; j < n; j) {if (matrix[i - 1][j - …...

C++实现AVL树

一 AVL树的概念 上上节我们学习了二叉搜索树&#xff0c;他的理想查找的时间复杂度是o(log n)&#xff0c;但是如果是下面这种情况&#xff0c;那么它的时间复杂度就会变成o(n). 这种情况就是出现一边高的那种&#xff0c;它的个数和它的高度相差不大。 那么这样就会把二叉搜索…...

Linux系统安全及应用

目录 一.账号安全措施 1.1系统账号清理 1.1.1将非登录用户的shell设为无法登录 1.1.2删除无用用户 userdel 1.1.3锁定账号文件 1.1.4锁定长期不使用的账号 1.2密码安全控制 1.2.1 对新建用户 1.2.2对已有用户 1.3命令历史限制 1.3.1临时清除历史命令 1.3.2限制命令…...

JAVA反序列化深入学习(十三):Spring2

让我们回到Spring Spring2 在 Spring1 的触发链上有所变换&#xff1a; 替换了 spring-beans 的 ObjectFactoryDelegatingInvocationHandler使用了 spring-aop 的 JdkDynamicAopProxy &#xff0c;并完成了后续触发 TemplatesImpl 的流程 简而言之&#xff0c;换了一个chain&am…...

迭代器运算详解(四十二)

1. 迭代器的随机访问运算 对于 vector 和 string 这样的容器&#xff0c;它们的迭代器支持以下随机访问运算符&#xff1a; 运算符说明iter n返回一个新的迭代器&#xff0c;该迭代器比原来的迭代器 iter 向前移动了 n 个位置&#xff08;即指向后面的第 n 个元素&#xff0…...

Linux中Squid服务常用操作

在 Linux 中 Squid 服务常用操作介绍 1. Squid 基础操作 启动 Squid # 前台启动&#xff08;调试用&#xff09; squid -N -d 1# 后台启动&#xff08;-s 表示将日志输出到 syslog&#xff09; squid -s停止 Squid # 安全停止&#xff08;需配置 pid_file&#xff09; squid…...

Linux操作系统--进程的概念

目录 1.了解进程前的前景知识 冯诺依曼体系结构 操作系统(OS) 2.进程 2.1进程的概念 2.2描述进程-PCB 2.2.1task_struct 2.3查看进程 2.4通过系统调用获取进程的标识符 2.5认识fork()--创建进程 该专栏会持续更新 更新时间一周一更。下周更新内容进程状态 1.了解进程前…...

C++假期练习

思维导图 牛客练习...

HTML零基础入门笔记:狂神版

前言 本笔记是学习狂神的java教程&#xff0c;建议配合视频&#xff0c;学习体验更佳。 【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 第1-2章&#xff1a;Java零基础入门笔记&#xff1a;(1-2)入门&#xff08;简介、基础知识&#xff09;-CSDN博客 第3章&…...