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

nodejs入门(1):nodejs的前后端分离

一、引言

我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的,当然,我肯定是很多年的计算机基础的,万变不离其宗。

现在web网站都流行所谓的前后端结构,不知不觉我也开始受到这个影响,以前都是前端直接操作ODBC、ADO等链接到数据库,不分什么前端后端的。现在大家都讲究了,一个后端web服务器来处理后台的数据库,格式化输出前端请求的数据;浏览器和前端web服务器交互,前端web服务器和后端web服务器进行交互,前端web服务器向后端的web服务器请求数据,对后端服务器得到请求后将数据传递给前端web服务器,格式化后由浏览器展示。

当然,这里是将前后端严格分离的一种状态。

二、案例 

我们将按照前后端分离的要求,将项目分为两个目录:`server` 和 `client`。`server` 目录将包含后端代码,使用端口3000;`client` 目录将包含前端代码,使用端口80。以下是案例:

1、项目结构

my-web-app/
|-- server/
|   |-- node_modules/
|   |-- package.json
|   `-- app.js
`-- client/|-- node_modules/|-- package.json|-- public/|   |-- index.html|   `-- script.js`-- server.js

2、 后端 (server/app.js)

1).初始化后端项目:
   在 `server` 目录中运行以下命令来初始化项目:
     npm init -y
   npm install express body-parser
  2)创建后端服务器:
   在 `server` 目录中创建 `app.js` 文件,并添加以下代码:

   const express = require('express');const bodyParser = require('body-parser');const app = express();const port = 3000;// 用于解析JSON格式的请求体app.use(bodyParser.json());// 用于解析application/x-www-form-urlencoded格式的请求体app.use(bodyParser.urlencoded({ extended: true }));// API路由app.get('/api/data', (req, res) => {res.json({ message: 'Hello from the server!' });});// 启动服务器app.listen(port, () => {console.log(`Server running on port ${port}`);});

3、 前端 (client)

1).初始化前端项目:
   在 `client` 目录中运行以下命令来初始化项目:
     npm init -y
    npm install express
  2).创建前端服务器:
   在 `client` 目录中创建 `server.js` 文件,并添加以下代码:
 

 const express = require('express');const app = express();const port = 80;// 静态文件服务app.use(express.static('public'));// 启动服务器app.listen(port, () => {console.log(`Client server running on port ${port}`);});

3)创建静态文件:
   在 `client` 目录中创建 `public` 文件夹,并在其中创建 `index.html` 和 `script.js` 文件。   - public/index.html:
  

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Simple Web App</title></head><body><h1>Simple Web App</h1><button id="fetchData">Fetch Data from Server</button><p id="data"></p><script src="script.js"></script></body></html>

 public/script.js:

  • document.getElementById('fetchData').addEventListener('click', function() {fetch('http://localhost:3000/api/data').then(response => response.json()).then(data => {document.getElementById('data').textContent = data.message;}).catch(error => console.error('Error:', error));
    });

4、运行项目

1)启动后端服务器: 在 server 目录下运行以下命令来启动后端服务器:

node app.js

2)启动前端服务器:

client 目录下运行以下命令来启动前端服务器:

npm run client

3)访问应用:

打开浏览器并访问 http://localhost,你将看到“Simple Web App”的标题和一个按钮。点击按钮,页面将通过JavaScript从后端API获取数据,并在页面上显示。

这样,我们就创建了一个简单的前后端分离的Web应用,其中后端使用Node.js和Express框架提供API,前端使用HTML和JavaScript来请求数据并显示在页面上。

三、nodejs简介

Node.js是一个开源且跨平台的JavaScript运行时环境,它几乎适用于任何类型的项目!

Node.js运行V8 JavaScript引擎,这是Google Chrome的核心,但脱离了浏览器环境。这使得Node.js性能非常出色。

Node.js应用在一个单一进程中运行,不会为每个请求创建新线程。Node.js在其标准库中提供了一组异步I/O原语,这些原语阻止了JavaScript代码的阻塞行为,通常,Node.js中的库都是使用非阻塞范式编写的,使得阻塞行为成为例外而非常态。

当Node.js执行I/O操作时,比如从网络读取、访问数据库或文件系统,它不会阻塞线程并浪费CPU周期等待,而是在响应回来时恢复操作。

这使得Node.js能够用单个服务器处理成千上万的并发连接,而不需要引入管理线程并发的负担,这可能是产生错误的一个重要源头。

Node.js有一个独特的优势,因为数百万为浏览器编写JavaScript的前端开发者现在也能够编写服务器端代码,而不需要学习完全不同的语言。

在Node.js中,可以无障碍地使用新的ECMAScript标准,因为你不需要等待所有用户更新他们的浏览器——你可以通过更改Node.js版本来决定使用哪个ECMAScript版本,也可以通过运行带有标志的Node.js来启用特定的实验性功能。

一个Node.js应用示例
Node.js最常见的示例“Hello World”是一个Web服务器:

const { createServer } = require('node:http');
const hostname = '127.0.0.1';
const port = 3000;
const server = createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Hello World');
});
server.listen(port, hostname, () => {console.log(`Server running at http://${hostname}:${port}/`);
});

要运行这段代码,请将其保存为server.js文件,并在终端中运行node server.js。

  • 这段代码首先引入了Node.js的http模块。
  • Node.js拥有一个出色的标准库,包括对网络的一级支持。
  • http的createServer()方法创建了一个新的HTTP服务器并返回它。
  • 服务器被设置为监听指定的端口和主机名。当服务器准备好时,回调函数被调用,在这种情况下是通知我们服务器正在运行。
  • 每当收到新的请求时,会触发请求事件,提供两个对象:一个请求(一个http.IncomingMessage对象)和一个响应(一个http.ServerResponse对象)。
  • 这两个对象对于处理HTTP调用至关重要。
  • 第一个对象提供了请求详情。在这个简单的例子中,这个对象没有被使用,但你可以通过它访问请求头和请求数据。
  • 第二个对象用于向调用者返回数据。

在这个例子中:

res.statusCode = 200;
我们将statusCode属性设置为200,表示成功响应。

我们设置Content-Type头部:

res.setHeader('Content-Type', 'text/plain');
然后我们结束响应,在end()方法的参数中添加内容:

res.end('Hello World\n');
 

四、几个常见的概念

在基于Node.js的应用中,前端、后端、router(路由器)、API接口、AJAX各自扮演着不同的角色,并且它们之间有着紧密的联系。下面我将解释每个概念的作用,并举例说明它们是如何相互联系的。

1. 前端(Frontend)

作用:前端指的是用户直接与之交互的应用程序部分,通常是通过Web浏览器访问的。它负责展示用户界面(UI)和用户体验(UX)。

在Node.js中:虽然Node.js主要用于后端开发,但你可以利用Node.js的http模块或express框架来提供前端资源(如HTML、CSS、JavaScript文件),或者作为前端构建工具(如Webpack)的服务器。

举例:在一个基于Node.js的电商网站中,前端页面会展示商品列表、购物车、用户登录界面等。

2. 后端(Backend)

作用:后端是指服务器端的应用程序,处理业务逻辑、数据库交互、身份验证等。它为前端提供API接口,处理前端发送的请求,并返回数据。

在Node.js中:Node.js作为后端平台,使用JavaScript来编写服务器端代码。你可以使用Express框架来简化HTTP请求的处理。

举例:在上述电商网站中,后端会处理用户登录、商品信息的检索、订单处理等。

3. Router(路由器)

  • 定义:在Web开发中,router通常指的是一个组件或服务,它负责根据请求的URL和HTTP方法(如GET、POST等)将请求路由到相应的处理函数或控制器。
  • 作用router的主要作用是决定如何处理进入应用的请求,并将其分发到正确的处理逻辑。
  • 位置:在前端框架中(如React Router、Vue Router),router用于控制页面路由和导航。在后端框架中(如Express中的路由器),它用于处理服务器端的请求路由。
  • 举例:在Express中,你可能会有如下的路由定义:
    app.get('/api/users', function(req, res) {res.send('用户列表');
    });

4. API接口

  • 定义:API接口(Application Programming Interface)是指一组预定义的函数、协议和工具,用于构建软件应用。在Web开发中,API接口通常指的是后端系统对外提供服务的端点(Endpoint)。
  • 作用:API接口允许不同的软件应用之间进行交互,它定义了请求的格式、预期的响应以及可能的错误代码。它使得前端应用能够与后端服务进行通信。
  • 位置:API接口是后端系统的一部分,它们定义了后端服务的功能和数据交换的规则。
  • 举例:一个RESTful API接口可能看起来像这样:
    GET /api/users => 获取用户列表
    POST /api/users => 创建新用户
    PUT /api/users/:id => 更新指定ID的用户
    DELETE /api/users/:id => 删除指定ID的用户

5. Router和API接口的关系

  • 联系:在后端应用中,router用于定义API接口的路由规则,即哪个URL对应哪个API接口。router处理的是HTTP请求的分发,而API接口定义了请求和响应的具体格式。
  • 区别router关注的是请求如何被分配到不同的处理函数,而API接口关注的是如何处理这些请求以及如何响应。
  • 协同工作:在实际应用中,router和API接口是协同工作的。router根据请求的URL和方法将请求路由到对应的API接口处理函数,然后API接口执行具体的业务逻辑,并返回相应的数据。

6. AJAX

作用:AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术。

在Node.js中:虽然AJAX主要在客户端使用,但在基于Node.js的应用中,AJAX请求会被后端的Express应用接收和处理。Node.js后端可以响应这些异步请求,并返回JSON或XML数据。

举例:在电商网站的购物车页面,用户可以点击一个按钮来更新购物车中的商品数量。这个按钮的点击事件会触发一个AJAX请求到后端的/api/cart/update路由,后端处理这个请求并更新数据库中的购物车信息,然后返回更新后的结果。

7. 相互联系

在一个基于Node.js的Web应用中,前端通过AJAX与后端通信,后端使用router来处理这些AJAX请求。以下是它们的工作流程:

  1. 用户交互:用户在前端页面上进行操作,如点击按钮或提交表单。
  2. AJAX请求:前端JavaScript捕获这些操作并发起AJAX请求到后端。
  3. 路由处理:后端的Express应用使用router来接收AJAX请求,并根据请求的URL和方法将请求路由到相应的处理函数。
  4. 业务逻辑:后端处理函数执行业务逻辑,如查询数据库或执行计算。
  5. 响应返回:后端将处理结果以JSON或XML的形式返回给前端。
  6. 页面更新:前端接收到后端的响应后,使用JavaScript更新页面的相应部分,而不需要重新加载整个页面。

这个流程展示了前端、后端、router和AJAX如何在基于Node.js的应用中协同工作,以提供流畅的用户体验。

五、练习

1.下载nodejs:Node.js — 在任何地方运行 JavaScript

2. 安装完毕后,在终端中输入:node -v, 能显示正确的版本,表示安装成功。

3. 安装npm中文镜像cnpm: npm install -g cnpm --registry=https://registry.npm.taobao.org

 4. 如果更新或者安装包出现证书失效,可以临时绕过 SSL 验证

npm config set strict-ssl false

5. 在一个新的目录下新建一个nodejs项目,使用: npm  init。并创建一个package.json文件。这个文件记录了项目的元数据和配置信息,包括项目的依赖关系、脚本、版本号等。 npm init 会提示你输入一些信息,包括项目名称、版本、描述、入口点、测试命令等。对于一个名为 "test" 的项目,你可能需要回答以下问题:

  • name: (默认是当前目录的名字)test
  • version: (默认是 1.0.0
  • description: 你的项目描述
  • entry point: (默认是 index.js
  • test command: 测试脚本命令
  • git repository: git 仓库地址
  • keywords: 关键词
  • author: 作者信息
  • license: 许可证类型

你可以按回车键接受默认值,或者输入新的值。

6. 安装一个新矿建express.js:  npm install express。

7.完成第2部分的案例,并执行出来。

相关文章:

nodejs入门(1):nodejs的前后端分离

一、引言 我关注nodejs还是从前几年做了的一个电力大数据展示系统开始的&#xff0c;当然&#xff0c;我肯定是很多年的计算机基础的&#xff0c;万变不离其宗。 现在web网站都流行所谓的前后端结构&#xff0c;不知不觉我也开始受到这个影响&#xff0c;以前都是前端直接操作…...

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因&#xff0c;我的东西最终需要跑在amd64上&#xff0c;但是因为mac的架构师arm64&#xff0c;所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构&#xff1a; docker inspect 8135f475e221 | grep Arc…...

gorm框架

连接 需要下载mysql的驱动 go get gorm.io/driver/mysql go get gorm.io/gorm 约定 主键&#xff1a;GORM 使用一个名为ID 的字段作为每个模型的默认主键。表名&#xff1a;默认情况下&#xff0c;GORM 将结构体名称转换为 snake_case 并为表名加上复数形式。 例如&#xf…...

免费送源码:Java+Springboot+MySQL Springboot多租户博客网站的设计 计算机毕业设计原创定制

Springboot多租户博客网站的设计 摘 要 博客网站是当今网络的热点&#xff0c;博客技术的出现使得每个人可以零成本、零维护地创建自己的网络媒体&#xff0c;Blog站点所形成的网状结构促成了不同于以往社区的Blog文化&#xff0c;Blog技术缔造了“博客”文化。本文课题研究的“…...

【ASR技术】WhisperX安装使用

介绍 WhisperX 是一个开源的自动语音识别&#xff08;ASR&#xff09;项目&#xff0c;由 m-bain 开发。该项目基于 OpenAI 的 Whisper 模型&#xff0c;通过引入批量推理、强制音素对齐和语音活动检测等技术。提供快速自动语音识别&#xff08;large-v2 为 70 倍实时&#xf…...

【计算机网络】协议定制

一、结构化数据传输流程 这里涉及协议定制、序列化/反序列化的知识 对于序列化和反序列化&#xff0c;有现成的解决方案&#xff1a;①json ②probuff ③xml 二、理解发送接收函数 我们调用的所有发送/接收函数&#xff0c;根本就不是把数据发送到网络中&#xff01;本质都是…...

【SQL】mysql常用命令

为方便查询&#xff0c;特整理MySQL常用命令。 约定&#xff1a;$后为Shell环境命令&#xff0c;>后为MySQL命令。 1 常用命令 第一步&#xff0c;连接数据库。 $ mysql -u root -p # 进入MySQL bin目录后执行&#xff0c;回车后输入密码连接。# 常用参数&…...

阿里云引领智算集群网络架构的新一轮变革

阿里云引领智算集群网络架构的新一轮变革 云布道师 11 月 8 日~ 10 日在江苏张家港召开的 CCF ChinaNet&#xff08;即中国网络大会&#xff09;上&#xff0c;众多院士、教授和业界技术领袖齐聚一堂&#xff0c;畅谈网络未来的发展方向&#xff0c;聚焦智算集群网络的创新变…...

几何合理的分片段感知的3D分子生成 FragGen - 评测

FragGen 来源于 2024 年 3 月 25 日 预印本的文章&#xff0c;文章题目是 Deep Geometry Handling and Fragment-wise Molecular 3D Graph Generation&#xff0c; 作者是 Odin Zhang&#xff0c;侯廷军&#xff0c;浙江大学药学院。FragGen 是一个基于分子片段的 3D 分子生成模…...

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻&#xff0c;本篇讲用Flask展现新闻。关于Flask安装网上好多教程&#xff0c;不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图&#xff0c;页面简单&#xff0c;主要显示新闻标题。 分页&#xff0c;使用最简单的分页技术&…...

监控易监测对象及指标之:全面监控华为FusionInsight服务

随着大数据技术的广泛应用&#xff0c;华为FusionInsight以其卓越的性能和稳定性&#xff0c;成为了众多企业处理和分析海量数据的首选平台。然而&#xff0c;为了确保FusionInsight服务的持续稳定运行&#xff0c;对其进行全面监控至关重要。本文基于监控易工具&#xff0c;对…...

SQL面试题——蚂蚁SQL面试题 会话分组问题

会话分组问题 这里的分组不是简单的分组,而是会话的分组。 比如说,进入一个网站以后,可以连续的点击很多个页面,后台会记录用户的行为日志; 如果T日上午连续点击几个页面后退出了网站,直到第二天的下午才再次进入网站,单单从时间线上来看,昨天退出的那条日志跟今天进…...

nfs服务器--RHCE

一&#xff0c;简介 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是FreeBSD支持的文件系统中的一种&#xff0c;它允许网络中的计 算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源&#xff0c;主要在unix系…...

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中&#xff0c;如何让项目在不同环境下表现得更为灵活与高效&#xff0c;是每个开发者必须面对的挑战&#xff0c;从开发阶段的调试到生产环境的优化&#xff0c;环境变量配置无疑是其中的关键。 env配置文件&#xff1a;通常用于管理项目的环境变量&#xff0c;环境…...

Javascript高级—函数柯西化

函数柯西化&#xff08;经典面试题&#xff09; // 实现一个add方法&#xff0c;使计算结果能够满足如下预期&#xff1a; add(1)(2)(3) 6; add(1, 2, 3)(4) 10; add(1)(2)(3)(4)(5) 15;function add() {// 第一次执行时&#xff0c;定义一个数组专门用来存储所有的参数var…...

Sql进阶:字段中包含CSV,如何通过Sql解析CSV成多行多列?

Sql进阶 一、问题描述二、解决思路<一>、拆成多行<二>、拆成多列 三、代码实现 一、问题描述 Oracle数据库中某个字段value是CLOB类型,存的是csv格式的数据,如下所示 classnovalue1name,age,sex,… ‘李世民’,20,‘M’,…’ ‘李治’,18,‘M’,… ‘武则天’,16…...

linux之调度管理(5)-实时调度器

一、概述 在Linux内核中&#xff0c;实时进程总是比普通进程的优先级要高&#xff0c;实时进程的调度是由Real Time Scheduler(RT调度器)来管理&#xff0c;而普通进程由CFS调度器来管理。 实时进程支持的调度策略为&#xff1a;SCHED_FIFO和SCHED_RR。 SCHED_FIFO&#xff…...

mybatis-plus: mapper-locations: “classpath*:/mapper/**/*.xml“配置!!!解释

和mybatis一样的道理&#xff01;&#xff01;&#xff01;&#xff01;如果不指定这个配置&#xff0c;通常要求 XML 映射文件和 Mapper 接口的包名和结构相同&#xff01;&#xff01;&#xff01;&#xff01; 如果没有配置 mapper-locations&#xff0c;通常文件结构应遵循…...

nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录

文章目录 操作步骤1. 拉取仓库代码2. 安装nacos-operator3. 安装nacos-server 坑点一坑点二nacos-ui页面访问同一集群环境下微服务连接nacos地址配置待办参考文档 操作步骤 1. 拉取仓库代码 &#xff08;这一步主要用到代码中的相关yml文件&#xff0c;稍加修改用于部署容器&…...

面试篇-项目管理

⼀、构建管理 项目为什么选择Maven构建? 选择Maven进行项目构建有以下几个主要原因&#xff1a; 1. 依赖管理&#xff1a;Maven 提供了强大的依赖管理功能&#xff0c;可以自动下载项目所需的第三方库和依赖&#xff0c;并且可以管理这些依赖的版本、范围等信息。这简化了项…...

数仓建设之Oracle常见语法学习

1. 字符串截取 select substr(AAA-BBB, 1, instr(AAA-BBB, -, -1) - 1) 值 from dual; --AAA select substr(AAA-BBB, instr(AAA-BBB, -, -1) 1) 值 from dual; --BBB2. 帆软报表有参数SQL select a.agency_code, a.agency_name, a.agency_typefrom dw.dim_ta_subred_agency…...

物联网智能技术的深入探讨与案例分析

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

python语言基础-5 进阶语法-5.2 装饰器-5.2.2 简单装饰器

声明&#xff1a;本内容非盈利性质&#xff0c;也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站&#xff0c;会尽量附上原文链接&#xff0c;并鼓励大家看原文。侵删。 5.2.2 简单装饰器 装饰器的形式就是一个闭包&#xff0c;下面是一个简单的定义并使用…...

TransFormer--解码器:带掩码的多头注意力层

TransFormer--解码器&#xff1a;带掩码的多头注意力层 以英法翻译任务为例&#xff0c;假设训练数据集样本如下表所示。 原句目标翻译I am goodJe vais bienGood morningBonjourThank you very muchMerci beaucoup 上表所示的数据集由两部分组成&#xff1a;原句和目标句。在…...

【ArcGIS微课1000例】0130:图层组详解与使用

文章目录 一、图层组概述二、创建图层组三、在图层组中管理图层四、对话框中图层组的列表一、图层组概述 图层组包含其他图层。图层组有助于对地图中相关类型的图层进行组织,并且可用于定义高级绘制选项。例如,假设在地图上有两个图层分别用于表示铁路和高速公路。您可将这些…...

Linux中配置ntp服务

NTP&#xff1a;是Network Time Protocol的缩写又 称网络时间协议&#xff0c;是用来使计算机时间同步化的一种协议&#xff0c;用来同步网络中各主机的时 间&#xff0c;在linux系统中早期使用ntp来实现&#xff0c;后来使用chrony来实现。Chrony 应用本身已经有 几年了&#…...

微服务day10-Redis面试篇

Redis主从 搭建主从集群 建立集群时主节点会生成同一的replicationID,交给各个从节点。 集群中的缓冲区是一个环型数组&#xff0c;即若从节点宕机时间过长&#xff0c;可能导致命令被覆盖。 主从集群优化 哨兵原理 哨兵是一个集群来确保哨兵不出现问题。 服务状态监控 选举…...

STL序列式容器之list

相较于vector的连续性空间&#xff0c;list相对比较复杂&#xff1b;list内部使用了双向环形链表的方式对数据进行存储&#xff1b;list在增加元素时&#xff0c;采用了精准的方式分配一片空间对数据及附加指针等信息进行存储&#xff1b; list节点定义如下 template<clas…...

docker:基于Dockerfile镜像制作完整案例

目录 摘要目录结构介绍起始目录package目录target目录sh目录init.sh脚本start.sh脚本stop.sh脚本restart.sh脚本 config目录 步骤1、编写dockerfilescript.sh脚本 2、构件镜像查看镜像 3、保存镜像到本地服务器4、复制镜像文件到指定目录&#xff0c;并执行init.sh脚本5、查看挂…...

微信小程序自定义顶部导航栏(适配各种机型)

效果图 1.pages.js&#xff0c;需要自定义导航栏的页面设置"navigationStyle": "custom" 2.App.vue,获取设备高度及胶囊位置 onLaunch: function () {// 系统信息const systemInfo uni.getSystemInfoSync()// 胶囊按钮位置信息const menuButtonInfo uni.…...

日本做暧小视频在线观看网站/爱站网关键词挖掘工具

导读 我附近有一家热闹的大型超市&#xff0c;每次结账队伍都比较长&#xff0c;15人左右&#xff0c;然后你会看到收银台旁立着这么一个牌子&#xff1a; 但是看似人性化的安排&#xff0c;却没有发挥作用&#xff0c;为什么呢&#xff1f; 原因这个牌子的设计者&#xff0c…...

济南网站建设套餐/360竞价推广客服电话

在研究Condition时&#xff0c;发现它的API提供了BoudedBuffer实现&#xff0c;并指出ArrayBlockingQueue就是一个BoudedBuffer的高阶实现。因此深入研究了下BoudedBuffer&#xff0c;其核心思想是&#xff1a;1. 使用一个循环数组2. 定义一个Count&#xff0c;作为put和take的…...

php做网站需要注意什么/今天热搜前十名

原文地址&#xff1a;https://wenku.baidu.com/view/9d4051f4700abb68a982fb4e.html 嵌入式常见英文缩写和英文词汇 ( 搜集中 ) 英文缩写 ARM &#xff1a; Advanced RISC Machine AAPCS &#xff1a; ARM Architecture Process call standard ARM 体系结构过程调用标准 R…...

怎么在电脑上自己做网站/互联网app推广具体怎么做

部署windows服务(1)、建立一个新的windows服务项目Server1 (2)、打开Service1代码视图&#xff0c;找到OnStart部分&#xff0c;加入代码 (3)、切换到设计视图&#xff0c;右键&#xff0d;添加安装程序 (4)、切换到新生成的ProjectInstaller.cs设计视图&#xff0c;找到servic…...

商城版网站制作/万能软文模板

D3DSURFACE_DESC D3DSURFACE_DESC Desc; tex->GetLevelDesc( 0, &Desc ); Width Desc.Width; Height Desc.Height; 转载于:https://www.cnblogs.com/lancidie/archive/2011/03/16/1985788.html...

wordpress 文字省略/百家号关键词排名

1&#xff0c;php截取富文本的内容只显示一部分&#xff0c;去除其他所有的标签 $content_01 $data["content"];//从数据库获取富文本content $content_02 htmlspecialchars_decode($content_01)//把一些预定义的 HTML 实体转换为字符 $content_03 str_replace(&q…...