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

【Koa】[NoSQL] Koa中相关介绍和使用Redis MongoDB增删改查

目录

  • NoSQL
  • 非关系型数据库
    • 关系型数据库(RMDB)介绍
    • 非关系型数据库(NoSQL)介绍
    • Redis & MongoDB
  • 在 Koa 中使用 Redis (了解)
    • Redis 的安装和使用
    • 在 Koa 中连接 和 调用 Redis
  • 在 Koa 中使用 MongoDB
    • MongoDB 的安装
    • MongoShell 操作数据库
    • MongoDB 基础概念
      • 数据库相关
      • 集合相关
      • 文档相关
    • MongoDB - 增删改查
      • 创建文档 (增)
      • 查询文档 (查)
      • 更新文档 (改)
      • 删除文档 (删)
    • 在 Koa 中连接和调用 MongoDB
      • 构建基本架子
      • 执行添加操作
    • 在 Koa 中对 MongoDB 数据进行增删改查
    • MongoDB配置用户名和密码进行认证登录
      • 创建管理员用户

NoSQL

非关系型数据库

关系型数据库(RMDB)介绍

目标: 了解什么是关系型数据库

关系型数据库,是指采用了 关系模型 来组织数据的数据库。

关系模型,指的就是 二维表格模型,而一个关系型数据库就是由 二维表及其之间的联系 所组成的一个数据组织。

关系型数据库一般都支持数据库事务,必须具备 ACID 特性。ACID分别是指:

  • Atomic 原子性 (事务操作要么全做完,要么都不做)
  • Consistency 一致性 (数据库要一直处于一致的状态 => 完整性约束: a + b = 10)
  • Isolation 隔离性 (并发的事务之间不会互相影响)
  • Durability 持久性 (一旦事务提交, 修改将永久保存)

优点

  1. 容易理解:二维表结构贴近逻辑,关系模型容易理解
  2. 使用方便:通用的SQL语言操作方便
  3. 易于维护:数据冗余和数据不一致的概率较低

缺点

  1. IO瓶颈 :

    网站并发性通常非常高(每秒上万次读写),硬盘I/O是一个很大的瓶颈

  2. 效率低下:

    网站数据量是巨大,关系型数据库,查询效率是非常低的

  3. 难以横向扩展:

    没有办法像web serverapp server 那样通过添加硬件和服务节点来扩展性能和负载能力。

    当需要进行升级和扩展时,往往需要停机维护和数据迁移。

关系型数据库, 比较适合存储持久化的一些数据, 关系复杂的结构数据. 数据量特别大, 实时性要求高 =>非关系型

流行的关系型数据库

  • MySQL(开源)
  • PostgreSQL(开源)
  • Oracle(商业)
  • SQL Server(商业)
  • DB2(商业)

非关系型数据库(NoSQL)介绍

了解什么是非关系型数据库

非关系型数据库,是指非关系型的、分布式的、且一般不保证遵循 ACID 原则的数据存储系统。

非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。

优点

  1. 格式灵活:可以是:key-value 形式、文档形式、图片形式等,灵活, 应用场景广泛

  2. 用户可以根据需要去添加自己需要的字段,为了获取用户的不同信息,无需多表进行关联查询。

    仅需要根据 id 取出相应的 value 就可以完成查询

  3. 适用于SNS社交网络服务中,例如 Facebook、微博等。

    系统升级、功能增加等场景,往往意味着需要对数据结构的巨大变动,关系型数据库难以应付这一点

  4. 速度快:NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘

  5. 高扩展性

  6. 成本低:NoSQL 数据库部署简单,且基本都是开源免费软件

缺点

  1. 不提供 SQL 支持,学习和使用成本较高
  2. 无事务处理
  3. 只适合存储一些较为简单结构的数据,对于需要进行较复杂查询的数据,关系型数据库显的更为合适
  4. 不适合 持久 存储海量数据

流行的非关系型数据库

  • MongoDB
  • Redis
  • Cassandra
  • CouchDB
  • HBase
  • Neo4J

Redis & MongoDB

非关系型数据库的分类

虽然 NoSQL 数据库有很多,但是它们的功能也是有所差异的,在解决问题方面有所侧重。

因此 NoSQL 一般分为以下几类:

  1. 文档型
  • 采用的数据模型是 key-value 键值对形式,且 value 是结构化的数据
  • 强项:它对数据结构的要求不严格,结构化数据的结构可变,非常灵活,不需要像关系型数据库一样需要预定义数据的结构
  • 弱项:查询性能不高,且缺乏统一的查询语法
  • 应用场景:用来存储 Web 应用中数据结构可能经常变化的数据 (新闻, 热点, 用户喜好)
  • 典型数据库:MongoDB、CouchDB
  1. key-value型
  • 采用的数据模型是 key-value 键值对形式,且 value 可以是字符串、二进制类型、或是键值对类型(通常使用Hash Table 实现)
  • 强项:查找速度非常快
  • 弱项:数据无结构化,通常只能存储字符串或二进制数据
  • 应用场景:通常可作为缓存来使用,用于处理大量数据的高访问负载
  • 典型数据库:Redis
  1. 列式数据库(了解)
  • 以列簇式存储,将同一列数据存储在一起
  • 强项:查找速度快,可扩展性强,且更容易进行分布式扩展
  • 弱项:功能相对比较局限
  • 应用场景:作为分布式文件系统
  • 典型数据库:Cassandra、HBase
  1. 图形数据库(了解)
  • 数据模型采用“图”结构
  • 强项:利用图结构相关算法,可以实现如最短路径寻径、N度关系查找等功能
  • 弱项:很多时候需要对整个图做计算才能得到需要的数据;而且图结构不方便做分布式的集群方案
  • 应用场景:社交网络、推荐系统,主要专注于构建关系图谱
  • 典型数据库:Neo4J

Redis 介绍 (缓存)

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。

Redis 的优势:

  • 性能极高 – Redis 能读的速度是110000次/s,写的速度是81000次/s
  • 丰富的数据类型 – Redis 支持二进制案例的 Strings、Lists、Hashes、Sets 及 Ordered Sets 数据类型操作
  • 原子 – Redis 的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过 MULTI 和 EXEC 指令包起来
  • 丰富的特性 – Redis 还支持 publish/subscribe,通知,key 过期等等特性

MongoDB 介绍 (可扩展高性能, 结构可变的数据存储方案)

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。


在 Koa 中使用 Redis (了解)

Redis 的安装和使用

安装 Redis,以及对 Redis 的基本功能的使用

安装

Redis 的安装文件下载地址:https://github.com/tporadowski/redis/releases

安装完成后,可以运行 redis-server.exe 启动 Redis 服务器。 (安装, 一直下一步即可)

数据操作

运行 redis-cli.exe,打开 Redis 的命令行客户端。

操作一:向 Redis 中存储一个字符串键值对

set key1 hello   # 存入一个键值对,键为 key,值为字符串 hello

操作二:从 Redis 中获取某个键值对值

get key1     		# 得到字符串 hello

操作三:查看 Redis 中所有的键值对 key

keys *          

操作四:向 Redis 中设置一个数字并自增

incr mynum        # mynum 为 1
incr mynum        # mynum 为 2get mynum         # 查看 mynum 结果为 2

【更多操作参考操作命令手册】


在 Koa 中连接 和 调用 Redis

掌握从 Koa 代码中连接 Redis 服务器并操作 Redis 中的数据

使用步骤

  1. 安装 Redis 驱动包

目前主流的 Node.js 的 Redis 驱动包有两个:node-redis 和 ioredis,这两个包都有性能非常高、使用方便的特点。而后者的性能更好、功能更强大。

npm i ioredis
  1. 在 koa 中使用 ioredis 连接 Redis 服务器,并发送数据操作命令
const Koa = require('koa')// 1. 引入 ioredis
const Redis = require('ioredis')// 2. 创建 Redis 客户端实例,指定要连接的 Redis 服务器
const redis = new Redis({port: 6379,         // redis 服务器的默认端口host: '127.0.0.1'   // redis 服务器的 IP 地址
})const app = new Koa()app.use(async ctx => {// 通过客户端实例,向 Redis 服务器发送数据操作命令,进行相关操作//(这等价于在命令行窗口中输入命令进行操作)// 1) 设置数据await redis.set('my_key1', 'hello,world')await redis.set('my_key2', 'foo,bar')await redis.incr('my_num')// 2) 获取数据const myKey1Value = await redis.get('my_key1')console.log(myKey1Value)ctx.body = '完成'
})app.listen(3000)

在 Koa 中使用 MongoDB

MongoDB 的安装

掌握 MongoDB 服务器软件的安装和启动

安装

MongoDB下载地址:https://www.mongodb.com/try/download/community

下载安装好以后,启动 MongoDB 服务器:

  1. 新建一个数据文件目录,比如 C:\data\db
  2. 执行命令进行启动 (先配环境变量 => 让系统知道有这么个目录)
mongod --dbpath=C:\data\db# mongod 为 MongoDB 的服务器程序
# 数据文件目录默认为 /data/db

验证

MongoDB 服务器启动后,访问 http://localhost:27017,如果出现这样的结果则表示已经成功:


MongoShell 操作数据库

  • mongo Shell 是 MongoDB 官方提供的一个在命令行中用来连接操作 MongoDB 服务的客户端工具
  • 使用 mongo Shell 可以对 MongoDB 数据库进行数据的管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0vAfE1xX-1690188660535)(assets/image-20211123183102675.png)]

命令演示:

  • show dbs 查看数据库

  • db 查看当前数据库

  • use database 切换数据库

  • show collections 查看集合列表

插入数据演示:db.users.insert({ name: 'Jack', age: 18 })检索查看数据:db.users.find()

MongoDB 基础概念

MongoDB中的数据存储结构:

  • 数据库 database
  • 集合 collection (一个集合存一类数据)
  • 文档 document (集合中的一项)
  • 数据字段 field

MongoDB是文档型数据库, 存储的都是一些 JSON 格式数据

{// 数据库 database"test1": {// 集合 collection"users": [// 文档 document{// 数据字段 field"id": 1,"username": "小明","password": "123456"},{"id": 2,"username": "小王","password": "123456","desc": "不错"}// ...],"teachers": [{"id": 1,"name": "李老师"},{"id": 2,"name": "王老师",}]},// 数据库"test2": {}// ...
}

数据库相关

  • 查看数据库列表:
show dbs
  • 查看当前数据库:
db
  • 创建/切换数据库: (数据库只有真正的有了数据才会被创建出来)
use 数据库名
  • 删除当前数据库:
db.dropDatabase()

集合相关

  • 创建集合: 只需要往集合中插入数据, 集合会自动创建
db.集合名.insert({ name: 'zs', age: 18 })
  • 查看集合
show collections
  • 删除集合
db.集合名称.drop()

文档相关

  • MongoDB 将数据记录存储为 BSON 文档

  • BSON(Binary JSON)是 JSON 文档的二进制表示形式,它比 JSON 包含更多的数据类型

  • BSON 规范

  • 字段名称 _id 保留用作主键;它的值在集合中必须是唯一的,不可变的,并且可以是数组以外的任何类型。

> db.users.find()
{ "_id" : ObjectId("619cc474cc1980baa07f2c24"), "name" : "Jack", "age" : 18 }

MongoDB - 增删改查

可视化操作工具:

  • MongoDB Compass 官网地址 : https://www.mongodb.com/zh-cn/products/compass
  • navicat 官网地址: http://www.navicat.com.cn/

创建文档 (增)

db.集合名.insertOne({ ... }) 插入一个db.集合名.insertMany([{ ... }, { ... }]) 插入多个db.集合名.insert({ ... }) 插入一个或多个

查询文档 (查)

db.集合名.find()  查询所有db.集合名.find().pretty()  查询并格式化db.集合名.find(查询条件, { 键: 0/1 })   0表示排除, 1表示包含  

相等条件

db.集合名.find({键: 值
})

AND 条件

其他查询运算符: https://docs.mongodb.com/manual/reference/operator/query-comparison/

db.集合名.find({键: 值,键: 值,键: {$lt: 值},键: /\d/
})

OR 条件

db.集合名.find({$or: [{ 键: 值 },{ 键: 值 }]
})

更新文档 (改)

// 更新第一个满足条件的项
db.集合名.updateOne(查询条件, {$set: {键: 值,键: 值}
})// 更新所有满足条件的项
db.集合名.updateMany(查询条件, {$set: {键: 值,键: 值}
})

删除文档 (删)

db.collection.deleteMany(查询条件)db.collection.deleteOne(查询条件)

在 Koa 中连接和调用 MongoDB

掌握从 Koa 代码中连接 MongoDB 服务器,并简单往 MongoDB 中插入一条数据

构建基本架子

  1. 安装 mongodb 驱动包

mongodb 是官方提供的 Node.js 驱动包,可以连接 MongoDB 服务器,并通过发送命令来实现对 MongoDB 服务器的各种操作。

yarn add mongodb koa @koa/router
  1. 创建 db 模块, 使用 mongodb 驱动包连接 MongoDB 服务器
// 1. 引入 mongodb 驱动包
const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient// 2. 创建 MongoDB 客户端实例
// MongoDB 服务器的连接地址,其中可包含用户名、密码、域名、端口、数据库名等信息
const mongoClient = new MongoClient('mongodb://127.0.0.1:27017')// 3. 建立连接
mongoClient.connect()// 4. 连接关联哪个数据库
const db = mongoClient.db('classroom')module.exports = db
  1. 创建路由模块
const Router = require('@koa/router')const router = new Router()router.get('/', async ctx => {ctx.body = '这是首页'
})
router.get('/list', async ctx => {ctx.body = '这是列表'
})module.exports = router
  1. 挂载路由
const Koa = require('koa')
const router = require('./router')
const app = new Koa()
app.use(router.routes())
app.listen(8888, () => console.log('服务器启动成功...'))

执行添加操作

const Router = require('@koa/router')
const db = require('./db')
const router = new Router()router.get('/', async ctx => {ctx.body = '这是首页'
})
router.get('/list', async ctx => {ctx.body = '这是列表'
})
router.get('/add', async ctx => {const collection = db.collection('students')const info = await collection.insertOne({ name: 'Tom', age: 18 })console.log(info)collection.find().forEach(item => {console.log(item)})ctx.body = '操作完成'
})module.exports = router

在 Koa 中对 MongoDB 数据进行增删改查

掌握从 Koa 代码中对 MongoDB 的数据做增、删、改、查操作

新增数据

向 MongoDB 中的某个 collection 内新增一条或多条数据,可以使用以下方法:

// 新增一条
await collection.insertOne({ name: 'Tom', age: 18 })// 新增多条
await collection.insertMany([{ name: 'Jack', age: '28' },{ name: 'Marray', age: '21' },
])

默认情况下,新增后的每条数据都会自动被添加上一个:类型为 ObjectID、字段名为 _id 的唯一标识。

删除数据

要删除某个 collection 中的指定 _id 数据,可以使用:

const mongodb = require('mongodb')
const ObjectID = mongodb.ObjectIDcollection.deleteOne(// 查询条件{_id: ObjectID('....ID的值.....')}
)

修改数据

如果要对某个 collection 中的某些数据进行更新,可以使用 updateOneupdateMany 方法:

await collection.updateOne(// 查询条件{_id: ObjectID('60bc8eb33e941a0a20875e0d')}, // 更新表达式选项{$set: { name: '张三' }}
)

查询数据

将某些符合查询条件的数据从 collection 中查找出来,可以使用 find 方法:

const users = await collection.find(// 查询条件{// age 字段值 大于 15age: {$gt: 15}}
)

查询结果为游标类型(Cursor),不能直接用 for 循环等遍历,可以使用它的 forEach 方法遍历,或先将它转为数组:

// 用 forEach 方法遍历
users.forEach(user => {console.log(user);
})// 先转为数组后再用 for 循环遍历
const arr = await users.toArray()
for (const item of arr) {console.log(item)
}

MongoDB配置用户名和密码进行认证登录

查看目前MongoDB中的所有用户

use adminshow users

创建管理员用户

db.createUser({ user: 'root', pwd: '123456', roles: ["root"]})

重新打开cmd,在mongodb路径的bin目录下,执行

mongod --dbpath=C:\data\db  --auth  (data是安装mongodb创建的数据库文件夹)

相关文章:

【Koa】[NoSQL] Koa中相关介绍和使用Redis MongoDB增删改查

目录 NoSQL非关系型数据库关系型数据库(RMDB)介绍非关系型数据库(NoSQL)介绍Redis & MongoDB 在 Koa 中使用 Redis (了解)Redis 的安装和使用在 Koa 中连接 和 调用 Redis 在 Koa 中使用 MongoDBMongoDB 的安装MongoShell 操作…...

【JS 阻止滑动穿透】

在实现阻止滑动穿透时,可以使用以下方法之一: 使用 CSS 属性 overflow: hidden 来禁止页面滚动。 body {overflow: hidden; }使用 JavaScript 监听滚动事件并阻止默认行为。 document.addEventListener(touchmove, function(e) {e.preventDefault(); …...

编译原理

目录 一,基本概念 二,词法分析 三,自上而下推导 一,基本概念 二,词法分析 三,自上而下推导...

项目播报 | 新基德携手璞华易研PLM,打造企业新一代研发管理平台

近日,“新基德PLM(Product Lifecycle Management,产品生命周期管理)项目”在新基德(深圳)电子有限公司(以下简称:新基德)正式启动。新基德是一家集手机研发、生产、销售、…...

elementui el-table 封装表格

ps: 1.3版本 案例&#xff1a; 完整代码&#xff1a; 可直接复制粘贴&#xff0c;但一定要全看完&#xff01; v-slot"scopeRows" 是vue3的写法&#xff1b; vue2是 slot-scope"scope" <template><!-- 简单表格、多层表头、页码、没有合并列行…...

集合--collections

一、collections概述 Collections和Arrays、Objects-一样&#xff0c;都是一种针对性的工具类, Arrays是针对数组&#xff0c;Objects是针对Object, 而Colections则是针对集合的一种工具类&#xff0c;里面提供了大量的方便我们操作集合的方法: //往集合中添加一些元素。 p…...

go使用gin结合jwt做登录功能

1、安装gin go get -u github.com/gin-gonic/gin 2、安装session go get github.com/gin-contrib/sessions 3、安装JWT鉴权 go get "github.com/golang-jwt/jwt/v4" 4、创建一个jwt的工具文件 package utilsimport ("errors""github.com/golan…...

【C++】开源:Boost网络库Asio配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…...

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…...

【每日一题】2569. 更新数组后处理求和查询

【每日一题】2569. 更新数组后处理求和查询 2569. 更新数组后处理求和查询题目描述解题思路 2569. 更新数组后处理求和查询 题目描述 给你两个下标从 0 开始的数组 nums1 和 nums2 &#xff0c;和一个二维数组 queries 表示一些操作。总共有 3 种类型的操作&#xff1a; 操作…...

PLC的高端版本通常具有以下特点:

高速处理能力&#xff1a;高端PLC通常具有更快的处理速度和更高的运行频率&#xff0c;可以处理更复杂的控制逻辑和更多的输入/输出信号。 大容量存储&#xff1a;高端PLC通常具有更大的存储容量&#xff0c;可以保存更多的程序和数据&#xff0c;以满足更复杂的应用需求。 多种…...

Scrum敏捷开发项目管理和产品研发管理培训- Leangoo领歌

Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程&#xff0c;面向研发管理者、项目经理、产品经理、研发团队等&#xff0c;旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏捷实施。 …...

爬虫小白-如何辨别是否有cookie反爬案例

目录 一、Cookie介绍二、cookie生成来源区分查找三、如何判断是否有cookie反爬四、来自服务器生成的cookie反爬解决方法五、来自js生成的cookie反爬解决方法一、Cookie介绍 先推荐该篇文章简单了解Cookie、Session、Token、JWT1、cookie的类型:会话cookie和持久cookie;其唯一…...

机器人状态估计:robot_localization 功能包简介与安装

机器人状态估计&#xff1a;robot_localization 功能包简介与参数配置 前言功能包简介安装使用ubuntu软件源安装使用源码安装 前言 移动机器人的状态估计需要用到很多传感器&#xff0c;因为对单一的传感器来讲&#xff0c;都存在各自的优缺点&#xff0c;所以需要一种多传感器…...

RNN架构解析——GRU模型

目录 GRU模型实现优点和缺点 GRU模型 实现 优点和缺点...

【LeetCode】141.环形链表

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…...

nodejs+vue+elementui汽车销售网站

前端技术&#xff1a;nodejsvueelementui,视图层其实质就是vue页面&#xff0c;通过编写vue页面从而展示在浏览器中&#xff0c;编写完成的vue页面要能够和控制器类进行交互&#xff0c;从而使得用户在点击网页进行操作时能够正常。 可以设置中间件来响应 HTTP 请求。 Express …...

spring boot整合kaptcha验证码

引入依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version> </dependency>创建验证码生成配置类 KaptchaConfig.java Configuration public class KaptchaConf…...

【Linux下6818开发板(ARM)】在液晶屏上显示RGB颜色和BMP图片

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…...

React的hooks---useLayoutEffect

useLayoutEffect 与 useEffect 类似&#xff0c;与 useEffect 在浏览器 layout 和 painting 完成后异步执行 effect 不同的是&#xff0c;它会在浏览器布局 layout 之后&#xff0c;painting 之前同步执行 effect useLayoutEffect 的执行时机对比如下&#xff1a; import Rea…...

北京创业孵化器汇总

北京创业孵化器汇总 1 创客总部实验室技术孵化平台 人工智能 海淀区中关村大街18号B座0909室 2 中孵高科 医药健康 经济技术开发区科创十四街99号D座9层 3 九州众创孵化器 医药健康 大兴区广平大街9号6幢等2幢 4 北京大学人工智能产业化孵化平台 国家级/市级 人工智能 中关村…...

电信软件的过去、现在和未来:推动核心网发展的关键力量

目录 导语&#xff1a;过去&#xff1a;从基础功能到增强服务现在&#xff1a;软件定义网络和智能化运营SDNNFV 未来&#xff1a;5G和物联网的挑战与机遇结束语 导语&#xff1a; 电信软件是支撑电信核心网运营的重要组成部分&#xff0c;它们在过去几十年中经历了巨大的变革。…...

2023年全国程序员薪酬排行天梯榜

文章目录 ⭐️ 2023年全国程序员薪酬排行天梯榜 在过去很长的一段时间内&#xff0c;网上总有一个声音&#xff1a;“大厂裁员”、“程序员内卷严重”、“程序员人员过盛”、“35岁中年危机”、“码农吃的青春饭”、“互联网寒冬” 等等等等。 讲道理&#xff0c;我对这种人为的…...

设计模式-工厂模式

定义 工厂模式是用来创建对象的一种最常用的设计模式&#xff0c;不暴露创建对象的具体逻辑&#xff0c;而是将将逻辑封装在一个函数中&#xff0c;那么这个函数就可以被视为一个工厂 其就像工厂一样重复的产生类似的产品&#xff0c;工厂模式只需要我们传入正确的参数&#…...

HummerRisk V1.3.0 发布

HummerRisk V1.3.0发布&#xff1a; 大家好&#xff0c;HummerRisk 1.3.0和大家见面了&#xff0c;在这个版本中我们继续在多云接入管理、多云检测方式、云资源态势方面提供新的能力&#xff0c;并增加了新的镜像仓库支持类型&#xff0c;并优化了云的区域选择、优化规则组内容…...

SkyWalking链路追踪中Trace概念以及Trace与span的关系

基本概念 在SkyWalking链路追踪中&#xff0c;Trace&#xff08;追踪&#xff09;是指一个请求或者一个操作从开始到结束的完整路径。它涵盖了分布式系统中所有相关组件的调用关系和性能信息。 具体来说&#xff0c;Trace包含了一系列的span&#xff08;跨度&#xff09;&…...

美容店预约小程序制作教程详解

现在&#xff0c;制作一个专属于美容店的预约小程序不再需要编程经验&#xff0c;通过乔拓云网提供的后台管理系统&#xff0c;你可以轻松地完成整个制作过程。下面&#xff0c;我将为你详细介绍如何DIY一个美容店预约小程序。 首先&#xff0c;登录乔拓云网的后台管理系统&…...

什么是内存泄漏及如何防护内存泄漏

目录 前言 什么是内存泄漏示例一示例二特殊版本 总结/结尾 前言 最近阅读量很低啊(⁠ ⁠≧⁠Д⁠≦⁠) 什么是内存泄漏 内存泄漏&#xff08;Memory Leak&#xff09;指在程序运行过程中&#xff0c;分配的内存空间在不再使用后未被正确释放或回收&#xff0c;导致这部分内存…...

【libuv】httpserver启用ssl 及 播放的日志打印

VLC vlc 第一次 接收不安全的证书黑屏。重启服务,再次vlc这次次好像就可以了。main debug: processing request item: zhangbin.flv, node: 播放列表, skip: 0 main debug: rebuilding array of current - root 播放列表 main debug: rebuild done - 2 items, index 1 main de…...

13、ffmpeg使用nvidia显卡对OAK深度相机进行解码和编码

基本思想&#xff1a;简单使用nvidia的硬件解码进行oak相机的编码和解码学习 一、在本机rtx3060配置好显卡驱动和cuda之后进行下面操作50、ubuntu18.04&20.04CUDA11.1cudnn11.3TensorRT7.2/8.6Deepsteam5.1vulkan环境搭建和YOLO5部署_ubuntu18.04安装vulkan_sxj731533730的…...