MongoDB入门
1.MongoDB 基本概念详解
2.MongoDB 快速实战
3.MongoDB 核心操作与原理详解
Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译
成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。Mongodb是一款非关系型数据库,说
到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类
型,关系数据库的所使用的SQL语句自从 IBM 发明出来以后,已经有 40 多年的历史了,但是时至今
日,开发程序员一般不太喜欢这个东西,因为它的基本理念和程序员编程的想法不一致。后来所谓的
NoSQL 风,指的就是那些不用 SQL 作为查询语言的数据存储系统,而文档数据库 MongoDB 正是
NoSQL 的代表。
看一下当下 数据库的排名就会发现,目前排在Mongodb数据库前面的无一例外是老牌的关系型数据库,而在No SQL序列中,Mongodb排名第一,且有上升的趋势
我们在正式进入Mongodb的学习之前,先来了解一下,MongoDB都有哪些特点,为什么要引入
MongoDB以及MongoDB和关系型数据库的差异?
- MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于
JSON对象。字段的值可以包括其他文档,数组和文档数组。MongoDB数据模型和你的对象在内存中的表现形式一样,一目了然的对象模型。
2.同一个集合中可以包含不同字段(类型)的文档对象:同一个集合的字段可能不同
3.线上修改数据模式,修改时应用与数据库都无须下线
关系型数据库和文档型数据库主要概念对应
MongoDB安装:
1. 获取安装包
1 wget https://fastdl.mongodb.org/linux/mongodb‐linux‐x86_64‐rhel70‐4.4.2.tgz
2. 进行解压
1 tar ‐xvzf mongodb‐linux‐x86_64‐rhel70‐4.4.2.tgz
3. 添加到系统执行路径下面( ~/.bashrc)
1 export PATH=$PATH:<你机器MongoDB bin目录,如:/usr/local/mongodb/mongodb‐linux‐x86_
64‐rhel70‐4.4.2/bin>
执行 source ~/.bashrc
4. 创建数据目录
1 mkdir ‐p /data/db # 这个路径是MongoDB默认的数据存放路径
5. 启动MongoDB服务
1 mongod # 如果你不希望使用的默认数据目录可以通过 添加 ‐‐dbpath 参数指定路径
或者从后台启动
mongod --logpath /data/db/logpath/output --fork
需要指定 --logpath , 或者--syslog
客户端使用( mongo shell, 用来操作MongoDB的javascript客户端界面 ):
1. 连接服务
1 mongo ‐‐host <HOSTNAME> ‐‐port <PORT>
2 # 如果在本机使用的都是默认参数,也可以直接忽略所有参数
2. 设置密码
1 use admin # 设置密码需要切换到admin库
2
3 db.createUser(
4 {
5 user: "gj",
6 pwd: "gj123",
7 roles: [ "root" ]
8 }
9 )
10 show users # 查看所有用户信息
3. 停服务
1 db.shutdownServer() # 停掉服务
4. exit 退出 mongo
5. 以授权模式启动
1 mongod ‐‐auth
6. 授权方式连接
1 mongo ‐u gj
7. 连上之后就可以进行操作:
连上之后先来看看都有哪些操作
安全说明:
MongoDB基于安全性考虑,默认安装后只会绑定本地回环 IP 127.0.0.1, 可以通过启动服务时,指定
绑定的IP 如 只允许通过 IP: 192.168.109.200 访问,
1 mongod ‐‐bind_ip 192.168.109.200
这时登录需要通过
1 mongo ‐host 192.168.109.200 ‐u gj
通过命令访问 MongoDB
1 输入 db # 显示当前所在的数据库
2
3 use example # 切换数据库
4
5
UI客户端访问:
https://docs.mongodb.com/compass/master/install
基本操作:添加数据
1 db.集合.insertOne(<JSON对象>) // 添加单个文档
2 db.集合.insertMany([{<JSON对象1>},{<JSON对象2>}]) // 批量添加文档
3 db.集合.insert() // 添加单个文档
开始创建文档
1 db.collection.insertOne(
2 doc ,
3 {
4 writeConcern: 安全级别 // 可选字段
5 }
6 )
writeConcern 定义了本次文档创建操作的安全写级别简单来说, 安全写级别用来判断一次数据库写
入操作是否成功,安全写级别越高,丢失数据的风险就越低,然而写入操作的延迟也可能更高。
writeConcern 决定一个写操作落到多少个节点上才算成功。 writeConcern的取值包括
0: 发起写操作,不关心是否成功
1- 集群中最大数据节点数: 写操作需要被复制到指定节点数才算成功
majority: 写操作需要被复制到大多数节点上才算成功
发起写操作的程序将阻塞到写操作到达指定的节点数为止
1 db.emp.insertOne(
2 {
3 name:"zhangsan",
4 age:20,
5 sex:"m"}
6 );
插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为_id,ObjectId()
可以快速生成的12字节id 作为主键,ObjectId 前四个字节代表了主键生成的时间,精确到秒。主键
ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性, 可以通过ObjectId("id
值").getTimestamp() 获取创建时间。
创建多个文档
1 db.collection.insertMany(
2 [ {doc } , {doc }, ....],
3 {
4 writeConcern: doc,
5 ordered: true/false
6 }
7 )
ordered: 觉得是否按顺序进行写入
顺序写入时,一旦遇到错误,便会退出,剩余的文档无论正确与否,都不会写入
乱序写入,则只要文档可以正确写入就会正确写入,不管前面的文档是否是错误的文档
MongoDB以集合(collection)的形式组织数据,collection 相当于关系型数据库中的表,如果
collection不存在,当你对不存在的collection进行操作时,将会自动创建一个collection
如下:
将会创建一个 inventory 集合,并且插入 5 个文档
1 db.inventory.insertMany([
2 { item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags:
[ "blank", "red" ] },
3 { item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tag
s: [ "red", "blank" ] },
4 { item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags:
[ "red", "blank", "plain" ] },
5 { item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tag
s: [ "blank", "red" ] },
6 { item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, t
ags: [ "blue" ] }
7 ]);
上述操作返回一个包含确认指示符的文档和一个包含每个成功插入文档的_id的数组
整个文档查询:
db.inventory.find({}) 查询所有的文档
db.inventory.find({}).pretty() 返回格式化后的文档
条件查询:
1. 精准等值查询
db.inventory.find( { status: "D" } );
db.inventory.find( { qty: 0 } );
2. 多条件查询
db.inventory.find( { qty: 0, status: "D" } );
3. 嵌套对象精准查询
db.inventory.find( { "size.uom": "in" } );
4. 返回指定字段
db.inventory.find( { }, { item: 1, status: 1 } );
默认会返回_id 字段, 同样可以通过指定 _id:0 ,不返回_id 字段
5. 条件查询 and
db.inventory.find({$and:[{"qty":"0"},{"status":"A"}]}).pretty();
6. 条件查询 or
db.inventory.find({$or:[{"qty":"0"},{"status":"A"}]}).pretty();
Mongo查询条件和SQL查询对照表
insertOne, inertMany, insert 的区别
insertOne, 和 insertMany命令不支持 explain命令
insert支持 explain命令
复合主键
可以使用文档作为复合主键
1 db.demeDoc.insert(
2 {
3 _id: { product_name: 1, product_type: 2},
4 supplierId:" 001",
5 create_Time: new Date()
6 }
7 )
注意复合主键,字段顺序换了,会当做不同的对象被创建,即使内容完全一致
逻辑操作符匹配
$not : 匹配筛选条件不成立的文档
$and : 匹配多个筛选条件同时满足的文档
$or : 匹配至少一个筛选条件成立的文档
$nor : 匹配多个筛选条件全部不满足的文档
构造一组数据:
db.members.insertMany([
{
nickName:"曹操",
points:1000
},
{
nickName:"刘备",
points:500
}
]);
1 $not
用法:
1 { field: { $not : { operator‐expression} }}
积分不小于100 的
1 db.members.find({points: { $not: { $lt: 100}}} );
$not 也会筛选出并不包含查询字段的文档
1 $and
用法
1 { $and : [ condition expression1 , condition expression2 ..... ]}
昵称等于曹操, 积分大于 1000 的文档
1 db.members.find({$and : [ {nickName:{ $eq : "曹操"}}, {points:{ $gt:1000}}]});
当作用在不同的字段上时 可以省略 $and
1 db.members.find({nickName:{ $eq : "曹操"}, points:{ $gt:1000}});
当作用在同一个字段上面时可以简化为
1 db.members.find({points:{ $gte:1000, $lte:2000}});
1 $or
用法
1 { $or :{ condition1, condition2, condition3,... }}
1 db.members.find(
2 {$or : [
3 {nickName:{ $eq : "刘备"}},
4 {points:{ $gt:1000}}]}
5 );
如果都是等值查询的话, $or 和 $in 结果是一样的
字段匹配
$exists:匹配包含查询字段的文档
1 { field : {$exists: <boolean>} }
文档游标
1 cursor.count( applySkipLimit)
默认情况下 , 这里的count不会考虑 skip 和 limit的效果,如果希望考虑 limit 和 skip ,需要设置
为 true。 分布式环境下,count 不保证数据的绝对正确
1 cursor.sort( <doc>)
这里的<doc> 定义了排序的要求
1 { field: ordering}
1 表示由小到大, -1 表示逆向排序
当同时应用 sort, skip, limit 时 ,应用的顺序为 sort, skip, limit
文档投影: 可以有选择性的返回数据
1 db.collection.find( 查询条件, 投影设置)
投影设置:{ field: < 1 :1 表示需要返回, 0: 表示不需要返回 , 只能为 0,或者1 , 非主键字
段,不能同时混选0 或 1>}
1 db.members.find({},{_id:0 ,nickName:1, points:1})
1 db.members.find({},{_id:0 ,nickName:1, points:0})
可以使用 $slice 返回数组中的部分元素
如, 先添加一个数组元素的文档
1 db.members.insertOne(
2 {
3 _id: {uid:3,accountType: "qq"},
4 nickName:"张飞",
5 points:1200,
6 address:[
7 {address:"xxx",post_no:0000},
8 {address:"yyyyy",post_no:0002}
9 ]}
10 );
返回数组的第一个元素
1 db.members.find(
2 {},
3 {_id:0,
4 nickName:1,
5 points:1,
6 address:
7 {$slice:1}
8 });
返回倒数第一个
1 db.members.find(
2 {},
3 {_id:0,
4 nickName:1,
5 points:1,
6 address:{$slice:‐1}}
7 );
slice: 值
1: 数组第一个元素
-1:最后一个元素
-2:最后两个元素
slice[ 1,2 ] : skip, limit 对应的关系
还可以使用 elementMatch 进行数组元素进行匹配
添加一组数据
1 db.members.insertOne(
2 {
3 _id: {uid:4,accountType: "qq"},
4 nickName:"张三",
5 points:1200,
6 tag:["student","00","IT"]}
7 );
查询tag数组中第一个匹配"00" 的元素
1 db.members.find(
2 {},
3 {_id:0,
4 nickName:1,
5 points:1,
6 tag: { $elemMatch: {$eq: "00" } }
7 });
$elemMatch 和 $ 操作符可以返回数组字段中满足条件的第一个元素
更新操作
updateOne/updateMany 方法要求更新条件部分必须具有以下之一,否则将报错
$set 给符合条件的文档新增一个字段,有该字段则修改其值
$unset 给符合条件的文档,删除一个字段
$push: 增加一个对象到数组底部
$pop:从数组底部删除一个对象
$pull:如果匹配指定的值,从数组中删除相应的对象
$pullAll:如果匹配任意的值,从数据中删除相应的对象
$addToSet:如果不存在则增加一个值到数组
更新文档:
单条插入数据, 插入两跳
1 db.userInfo.insert([
2 { name:"zhansan",
3 tag:["90","Programmer","PhotoGrapher"]
4 },
5 { name:"lisi",
6 tag:["90","Accountant","PhotoGrapher"]
7 }]);
将tag 中有90 的文档,增加一个字段: flag: 1
1 db.userInfo.updateMany(
2 {tag:"90"},
3 {$set:{flag:1}}
4 );
只修改一个则用
1 db.userInfo.updateOne(
2 {tag:"90"},
3 {$set:{flag:2}}
4 );
基于上面这两条数据,可以来查询一下数组中的元素
userInfo 中,会计和程序员的文档
db.userInfo.find(
{$or:
[
{tag:"Accountant"},
{tag:"Programmer"}
]
});
userInfo 中,90后的文档
1 db.userInfo.find({tag:"90"});
更新文档
1 db.collection.update( <query>,<update>,<options>)
<query> 定义了更新时的筛选条件
<update> 文档提供了更新内容
<options> 声明了一些更新操作的参数
更新文档操作只会作用在第一个匹配的文档上
如果<update> 不包含任何更新操作符,则会直接使用update 文档替换集合中符合文档筛选条件的
文档
更新特定字段
db.collection.update( <query>,<update>,<options>)
<query> 定义了更新时的筛选条件
<update> 文档提供了更新内容
<options> 声明了一些更新操作的参数
如果<update>只包含更新操作符,db.collection.update() 将会使用update更新集合中符合
<query>筛选条件的文档中的特定字段。
默认只会更新第一个匹配的值,可以通过设置 options {multi: true} 设置匹配多个文档并更新
1 db.doc.update(
2 {name:"zhangsan"},
3 {$set:{ flag: 1 }},
4 {multi:true}
5 );
更新操作符
$set 更新或新增字段
$unset删除字段
$rename 重命名字段
$inc 加减字段值
$mul 相乘字段值
$min 采用最小值
$max 次用最大值
删除文档
1 db.collection.remove(<query>,<options>)
默认情况下,会删除所有满足条件的文档, 可以设定参数 { justOne:true},只会删除满足添加的第一
条文档
删除集合
1 db.collection.drop( { writeConcern:<doc>})
<doc> 定义了本次删除集合操作的安全写级别
这个指令不但删除集合内的所有文档,且删除集合的索引
db.collection.remove 只会删除所有的文档,直接使用remve删除所有文档效率比较低,可以使用
drop 删除集合,才重新创建集合以及索引。
查询数组中的对象
加两行数据,文档中存在数组,且数组中你的元素为对象
1 db.userInfo.insertMany([
2 { name:"wangwu",
3 tag: ["90","accountant","PhotoGrapher"],
4 address:[{province:"hunan",city:"changsha"},{province:"hubei",city:"wuhan"}]},
5 { name:"zhaoliu",
6 tag: ["90","accountant","PhotoGrapher"],
7 address:[{province:"hunan",city:"changsha"},{province:"hubei",city:"huanggang"}]}
8 ]);
删除文档 remove
1 db.userInfo.remove({ 条件查询});
2
3
相关文章:
MongoDB入门
1.MongoDB 基本概念详解 2.MongoDB 快速实战 3.MongoDB 核心操作与原理详解 Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译 成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。Mongodb是一款非关系型数据库…...
MySQL基础原理
目录 一、MySQL架构 1、四层架构 2、MySQL运行机制 二、MySQL存储引擎 1、不同存储引擎对比 2、InnoDB存储结构 2.1 内存结构 2.2 磁盘结构 3、日志先行策略 3.1 核心思想 3.2 关键组件与流程 3.3 数据安全保证 3.3.1 崩溃恢复 3.3.2 持久性保障 一、MySQL架构 …...
Python刷题练习
文章目录 1.寻找相同字串2.密钥格式化3.五键键盘的输出4.单词重量5.输出指定字母在字符串的中的索引6.污染水域7.九宫格按键输入8.任务最优调度9.高效的任务规划 1.寻找相同字串 题目描述: 给你两个字符串t和p,要求从t中找到一个和p相同的连续子串,并输…...
基于GPUGEEK 平台进行深度学习
一、平台简介 GPUGEEK 是一个专注于提供 GPU 算力租赁服务的平台,在人工智能与深度学习领域为用户搭建起便捷的算力桥梁。它整合了丰富多样的 GPU 资源,涵盖 RTX - 4090、RTX - 3090、A100 - PCIE 等多种型号,满足不同用户在模型训练、数据处…...
基于Matlab的非线性Newmark法用于计算结构动力响应
基于Matlab的非线性Newmark法用于计算结构动力响应,主要针对材料非线性或几何非线性问题。 1. Newmark法基本原理 Newmark法是一种隐式时间积分方法,通过预估-校正步骤更新位移、速度和加速度: 预测步: un1unΔtvn…...
Oracle — PL-SQL
介绍 Oracle PL/SQL是专为Oracle数据库设计的过程化编程语言,深度融合SQL语句与结构化编程逻辑,旨在高效处理复杂数据操作与业务规则。其核心特征为“块结构”,程序由声明、执行、异常处理三部分组成,支持模块化开发,显…...
第七节第二部分:接口的综合案例
案例分析 代码: Student类 package com.Interface_Demo;public class Student {private String name;private char sex;private double score;public Student() {}public Student(String name, char sex, double score) {this.name name;this.sex sex;this.scor…...
【AI古风美学渲染】:淡雅光影中的细腻呈现
“顶作AI”作为国内首个深度融合中文语义的生成式AI平台,以近百亿级参数的Lens跨模态模型为核心,开创了“自然语言即生产力”的创作模式。该平台突破传统工具对专业术语的依赖,用户仅需输入如“水墨风格的山间庭院,晨雾中若隐若现…...
JVM学习专题(二)内存模型深度剖析
目录 1.JVM结构体系 编辑 2.跨平台特性 3.JVM整体结构及内存模型 1.栈内存 1、栈帧: 1.局部变量表 2.操作数栈 3.动态链接 4.方法出口 2、创建对象 2.程序计数器: 3.方法区 4.堆 5.本地方法区 6.总结 1.JVM结构体系 JDK、JRE 和 JVM…...
Prometheus 的介绍与部署(入门)
一、什么是Prometheus; 1.介绍 Prometheus 是一个功能强大的监控工具,适用于各种环境。通过简单的安装和配置,可以快速实现对系统和服务的监控。无论是单机环境、容器化环境还是 Kubernetes 集群,Prometheus 都能提供灵活…...
JavaSwing之-JDialog
JavaSwing之-JDialog JDialog 是 Java Swing 中用于创建对话框窗口的容器类,继承自 Dialog 类(AWT),常用于显示临时信息、获取用户输入或执行模态操作。它是 javax.swing.JDialog 包中的类。 与 JFrame 不同的是,JDia…...
配置Nginx解决http host头攻击漏洞【详细步骤】
前言 大概内容: 安全系统渗透测试出host头攻击漏洞,下面是解决步骤,本人已测过无问题。 server_name aaabbb.com; if ($http_Host !~* ^127.0.0.1|aaabbb.com|localhost$){return 403;}...
如何用Redis实现分布式锁?RedLock算法的核心思想?Redisson的看门狗机制原理?
一、Redis分布式锁基础实现 public class RedisDistributedLock {private JedisPool jedisPool;private String lockKey;private String clientId;private int expireTime 30; // 默认30秒public boolean tryLock() {try (Jedis jedis jedisPool.getResource()) {// NX表示不…...
LeetCode 热题 100 35.搜索插入位置
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: Java代码: 题目: 题目描述: 题目链接: 35. 搜索插入位置 - 力扣&…...
电流检测放大器的优质选择XBLW-INA180/INA181
前言: 在当前复杂的国际贸易环境下,关税的增加使得电子元器件的采购成本不断攀升,电子制造企业面临着巨大的成本压力。为了有效应对这一挑战,实现国产化替代已成为众多企业降低生产成本、保障供应链稳定的关键战略。对此芯伯乐推出…...
序列化和反序列化:从理论到实践的全方位指南
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
Leetcode (力扣)做题记录 hot100(62,64,287,108)
力扣第62题:不同路径 62. 不同路径 - 力扣(LeetCode) class Solution {public int uniquePaths(int m, int n) {int[][] array new int[m][n];for(int i 0;i<n;i){array[0][i] 1;}for(int i 0;i<m;i){array[i][0] 1;}for(int i …...
【Linux】shell内置命令fg,bg和jobs
Shell 内置命令 fg(foreground 的缩写)。它用于将后台挂起的任务恢复到前台运行。 例如: 假设你运行了一个耗时的 SVN 操作(如 svn update 或 svn checkout)。按下 CtrlZ 将该进程挂起到后台。输入 fg…...
鸿蒙OSUniApp 制作动态加载的瀑布流布局#三方框架 #Uniapp
使用 UniApp 制作动态加载的瀑布流布局 前言 最近在开发一个小程序项目时,遇到了需要实现瀑布流布局的需求。众所周知,瀑布流布局在展示不规则尺寸内容(如图片、商品卡片等)时非常美观和实用。但在实际开发过程中,我…...
通用软件项目技术报告 - 导读II
现在,我们正式进入报告的第三个主要领域:3. 领域三:核心业务逻辑与算法实现。 连接: 我们已经讨论了如何存储数据(领域一)和如何设计 API 让外部或内部服务可以访问这些数据或触发操作(领域二)。现在,我们将深入应用程序的“心脏”——实际执行业务规则、进行计算和(…...
新能源汽车三电质量护盾:蓝光三维扫描技术显身手
在绿色低碳的潮流下,新能源汽车行业快速发展,车企们纷纷加速电气化转型。由于电动汽车动力系统构造与内燃机车辆的构造有很大不同,制造商及其供应商必须加快工程研发设计及生产,而这对质量保证过程提出了新的挑战。 对于新能源汽…...
针对已训练好的YOLOv8模型的优化策略
以下是针对已训练好的YOLOv8模型的优化策略,结合模型微调、结构改进、训练策略调整等方法,可进一步提升检测性能或适应特定场景需求: 一、超参数调优 学习率动态调整 初始学习率(lr0):若模型收敛后仍有优化…...
AI 产业化浪潮:从生成智能到星载计算,中国如何重塑全球竞争格局
2025 年的科技版图上,人工智能正经历着从技术奇点到产业爆点的历史性跨越。当生成式 AI 突破实验室围墙走进千行百业,当智能体开始在数字世界自主决策,当卫星搭载的大模型在太空展开计算,一场由技术创新驱动的产业革命正在重塑全球…...
Python如何解决中文乱码
Python文件头部声明 # -*- coding: utf-8 -*- # 必须放在文件第一行或第二行中文字符串定义方式 # Python 3 chinese_str "中文" # 默认就是Unicode# Python 2 chinese_str u"中文" # 必须加u前缀字符串编码转换黄金法则 # 解码:字节串 …...
android studio导入项目
如果 gradle-8.0-bin.zip 没有下载成功 可以点击进入这个网站:https://services.gradle.org/distributions/ 找到和自己本版相同的gradle-8.0-bin.zip文件找到自己版本进行下载; 如果下载依赖失败, 可以手动下载依赖编译过程中的jar https://repo.maven.apache.org/…...
Android Studio Meerkat与Gradle构建工具升级实战指南
简介 Android Studio Meerkat和Gradle构建工具的升级将带来显著的性能提升和开发体验优化。在Android生态快速演进的2025年,开发者亟需掌握这些新特性以提升工作效率。本指南将从零开始,详细讲解如何升级Android Studio和Gradle构建工具,配置新特性,并提供实际应用场景的代…...
TCP/IP参考模型详解:从理论架构到实战应用
一、参考模型基础概念与分类 计算机网络参考模型是为解决网络通信标准化问题而设计的逻辑框架。在众多模型中,TCP/IP参考模型以其高实用性和广泛应用,成为现代网络架构的基石。该模型采用分层设计思想,将复杂的网络通信功能划分为多个层次&am…...
【Linux网络】网络层
网络层 在复杂的网络环境中确定一个合适的路径 IP 协议 IPV4 点分十进制[0,255].[0,255].[0,255].[0,255]IPV6 IP地址目标网格目标主机 基本概念 主机:配有IP地址,但是不进行路由控制的设备;路由器:即配有IP地址,又能进行路由控制;节点:主机和路由器的统称。 两个问题 路…...
FastAPI + OpenAI 模型 的 GitHub 项目结构模板
FastAPI OpenAI 模型 的 GitHub 项目结构模板,适合用作大模型(如 GPT-4) API 服务的基础框架。该模板包括了基本的项目结构、配置、文档以及与 OpenAI API 的交互方式。 项目结构 fastapi-openai-api/ ├── app/ │ ├── __init__.p…...
基于EFISH-SCB-RK3576/SAIL-RK3576的无人快递柜控制器技术方案
国产化替代J1900的智能化升级方案 一、硬件架构设计 多模态感知模块 智能识别单元: 双MIPI-CSI接口接入4K摄像头,NPU加速包裹条码识别(速度>5件/秒,准确率>99.99%),支持破损检测&…...
Centos 上安装Klish(clish)的编译和测试总结
1,介绍 clish是一个类思科命令行补全与执行程序,它可以帮助程序员在nix操作系统上实现功能导引、命令补全、命令执行的程序。支持?,help, Tab按键。本文基于klish-2.2.0介绍编译和测试。 2,klish的编译 需要安装的库&…...
Android学习总结之Glide自定义三级缓存(面试篇)
一、三级缓存核心原理与设计 问题 1:为什么需要三级缓存?各层缓存的核心作用是什么? 回答核心 内存缓存:毫秒级快速响应,存储近期浏览的图片(如滑动列表来回切换的图片),通过 LRU…...
管理Oracle Data Guard的最佳实践
Oracle Data Guard的中文名字叫数据卫士,顾名思义,它是生产库的一道保障。所以管理Data Guard是DBA的一项重要工作之一,管理Data Guard时主要有以下几个注意点需要引起重视。 备份库的归档日志积压 一般情况下,生产库的归档日志是…...
iOS WebView和WKWebView怎么调试?
iOS WebView调试 本教程将指导您如何使用WebDebugX调试iOS应用中的WebView内容,包括WKWebView和UIWebView。通过本教程,您将学习如何检查WebView中的HTML、CSS和JavaScript,以及如何解决常见的WebView调试问题。 准备工作 在开始调试iOS W…...
笔记本电脑打开网页很慢,一查ip地址网段不对怎么处理
我有一个笔记本,在家里连WIFI后获取到的ip地址网段不对,那么常规做法是手动去配置个静态IP和DNS,要知道笔记本IP地址默认采用的是DHCP,也就是动态获取ip地址。如果手动设置静态IP,也就是固定IP的话,你换个场…...
【更新】全国省市县-公开手机基站数据集(2006-2025.3)
手机基站是现代通信网络中的重要组成部分,它们为广泛的通信服务提供基础设施。随着数字化进程的不断推进,手机基站的建设与布局对优化网络质量和提升通信服务水平起着至关重要的作用,本分享数据可帮助分析移动通信网络的发展和优化。本次数据…...
iOS视频编码详细步骤(视频编码器,基于 VideoToolbox,支持硬件编码 H264/H265)
iOS视频编码详细步骤流程 1. 视频采集阶段 视频采集所使用的代码和之前的相同,所以不再过多进行赘述 初始化配置: 通过VideoCaptureConfig设置分辨率1920x1080、帧率30fps、像素格式kCVPixelFormatType_420YpCbCr8BiPlanarFullRange设置摄像头位置&am…...
行项目违反范围截止值
把允许负值打钩就可以,如果没有此字段,按照下面截图把屏幕格式放字段出来;字段放出来以后如果是灰色的话,就用SE16N调试模式修改字段值;...
Linux wlan 单频段 dual wifi创建
环境基础 TP LINK WN722N V1网卡linux 主机 查看设备是否支持双ap managed:客户端模式(连接路由器/AP)AP:接入点模式(创建热点)AP/VLAN:支持带VLAN标签的虚拟AP{ AP, mesh point, P2P-GO } &l…...
STC32G12K12实战:串口通信
STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先,确认芯片的串口1配置。STC32G系列通常使用UART1,相关的寄存器是P_SW1来选择引脚。默认情况下,UART1的TX是P3.1。 接下来是设置定时器作为波特率发生器。通常用定时器2,…...
unity 鼠标更换指定图标
1.准备两张图 要求图片导入设置如下 将 Texture Type 改为 Cursor 确保 Read/Write Enabled 已勾选 取消勾选 Generate Mip Maps 将 Filter Mode 设为 Point (保持清晰边缘) 将 Compression 设为 None (无压缩) 2.创建脚本,把脚本挂到场景中 ,该…...
会话管理中的cookie,以及浏览器操作cookie,在express中设置,删除,和获取cookie
会话管理中的 Cookie以及在浏览器和 Express 中操作 Cookie: 🍪 一、Cookie 在会话管理中的作用 ✅ Cookie 的定义: Cookie 是服务器发送到浏览器并保存在本地的小段文本数据,浏览器会在之后的请求中将这些数据回传给服务器。 …...
Mac的web服务器
最近用了个人觉得比较好用的集成环境。Flyenv - FlyEnv | 一体化全栈环境管理工具. 支持macOS / Windows / Linux 链接放在这了。 mac上安装: brew install flyenv 等着安装成功就好了 给个图。ollama也有...
数据可视化大屏——南方草牧商品交易所
代码综述 整体结构与用途 这是一段用于构建网页的 HTML 代码,结合引入的 JavaScript 和 CSS 文件,初步推测该网页是南方草牧商品交易所的相关页面,主要展示了与草牧商品交易相关的各类数据,包括产品挂牌数、成交量、会员信息等&…...
AIGC与数字媒体实验室解决方案分享
第1部分 概述 1.1 建设目标 1.深度融合AIGC技术,培养能够驾驭新质生产力的数字媒体人才 通过引入前沿的AIGC技术,确保学生能够接触到最先进的人工智能应用。教学内容理论和实践结合,让学生在实际操作中熟练掌握AIGC工具,生成高…...
Qwen3模型架构、训练方法梳理
qwen3炼丹真是全是技巧,下面来看看,仅供参考。 https://huggingface.co/Qwen https://modelscope.cn/organization/qwen https://github.com/QwenLM/Qwen3 模型架构 Dense 模型结构改进: GQA、SwiGLU、RoPE、RMSNorm with pre-normalization…...
MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?
目录 一、bin log 与 redo log 的区别1)实现方式不同:2)日志内容不同:3)记录方式不同:4)使用场合不同: 二、为什么快速恢复使用 redo log 而不用 bin log? 面试题&#x…...
【消息队列】RabbitMQ基本认识
目录 一、基本概念 1. 生产者(Producer) 2. 消费者(Consumer) 3. 队列(Queue) 4. 交换器(Exchange) 5. 绑定(Binding) 6. 路由键(Routing …...
RabbitMQ 快速上手:安装配置与 HelloWorld 实践(二)
四、RabbitMQ 配置 4.1 用户及权限管理 在 RabbitMQ 中,用户管理是保障系统安全和正常运行的重要环节。通过合理的用户及权限设置,可以确保不同的应用或服务在使用 RabbitMQ 时,只能访问其被授权的资源,避免非法操作和数据泄露。…...
蓝桥杯 17. 修改数组
修改数组 原题目链接 题目描述 给定一个长度为 N 的数组 A [A1, A2, …, AN],数组中可能包含重复的整数。 现在小明要按以下方法将其修改为没有重复整数的数组: 小明会依次修改 A2, A3, …, AN。 当修改 Ai 时,小明会检查 Ai 是否在 A…...