微服务MongoDB解析部署使用全流程
目录
1、什么是MongoDB
1、非关系型数据库
2、非关系型数据库分类
3、MongoDB?bson格式什么样?
2、MongoDB的优势
3、MongoDB应用场景
4、术语
5、操作
1、安装MongoDB
1、查询镜像文件【不操作】
2、拉取镜像文件
3、创建数据挂载目录
4、启动容器
2、验证安装成功
1、命令及说明
3、删除用户【不操作】
1、命令及说明
5、insert
6、find
7、delete
8、update
9、其他操作【了解】
6、SpringBoot整合
1.添加依赖
2.添加配置
3.编写Entry
4.编写DAO
5.编写DAOImpl
6.编写测试类Test
7.编写启动类
1、什么是MongoDB
1、非关系型数据库
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
2、非关系型数据库分类
键值(Key-Value)存储数据库
类似于HashMap的方式,例如redis
列存储数据库
以列为概念的,用于处理大数据量的数据,例如HBase
文档型数据库
是应用比较广泛的,以文档形式处理数据的,文档不是硬盘上直接对应的文件,是个概念,例如MongoDB
图形(Graph)数据库
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
3、MongoDB?bson格式什么样?
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
JSON的BSON格式是一种二进制表示的数据交换格式,它是“Binary JSON”的缩写。
2、MongoDB的优势
-
简单性,应用起来比较容易,易上手
-
扩展性,指的是mango本身的拓展,比如说可以做分片模式集群等等
-
高性能,在Wiretiger存储引擎的加持下,数据的读写可以做到更大的吞吐量
-
高可用,自身出现故障的情况很少,也可以通过集群的方式再提供高可用性,还支持故障转移
-
存文件,mongo天然支持文件存储,以桶的形式,用的对象是GridFS,文件会被切割成多个16M大小存储
3、MongoDB应用场景
它的应用场景非常广泛,存储数据、读写网站数据、文件存储、日志存储、缓存等。
从数据角度说,mongo关注是未来数据量。
从需求角度说,mongo关注是未来的拓展和维护。
4、术语
mongo从5版本对事务的支持更好,以后工作用的一定是5版本及以上的。
我们学习用4版本,是因为很多电脑安装不了5版本,受硬件影响。4版本和5版本在操作上没有什么大区别,学习不影响。
5、操作
1、安装MongoDB
基于docker的安装,版本号4.4.18
1、查询镜像文件【不操作】
docker search mongo
2、拉取镜像文件
docker pull mongo:4.4.18
3、创建数据挂载目录
mkdir -p /usr/local/docker/mongodb/datacd /usr/local/docker/mongodbchmod 777 data
4、启动容器
docker run -d \--name mongodb \--privileged \-p 27017:27017 \-v /usr/local/docker/mongodb/data:/data/db \-e MONGO_INITDB_ROOT_USERNAME=root \-e MONGO_INITDB_ROOT_PASSWORD=123456 \mongo:4.4.18 mongod --auth
看到此基就启动成功了
--privileged:以真正的有权限方式启动
MONGO_INITDB_ROOT_USERNAME:设置账户
MONGO_INITDB_ROOT_PASSWORD:设置密码
2、验证安装成功
1、命令及说明
# 1.进入容器
docker exec -it mongodb /bin/bash
# 2.查看版本
mongo --version
# 3.以root用户登录mongo,-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"
# 4.展示所有的数据库
show dbs
# 5.切换到dz14b数据库use dz14b
# 6.创建一个用户,用户名是user01,密码是123456,角色是读写角色,作用在dz14b数据库上db.createUser({user:"user01", pwd:"123456",roles: [{role:"readWrite", db:"dz14b"}]})
# 7.查看所有的用户数据show users
# 8.退出mongodb数据库exit
# 9.退出mongodb容器
exit
# 10.再次进入容器,以mongo命令进入,进入到dz14b数据库中docker exec -it mongodb mongo dz14b
# 11.查看当前在那个数据库db
# 12.查看数据库,发现没有其他数据库,我们已经再dz14b了,所以查询不到其他数据库
show dbs
# 13.授权db.auth("user01", "123456")
# 14.查看数据库,发现没有,授权影响不到用户的作用范围
show dbs
# 15.因为没有权限报错了
show users
# 16.向dz(dz自定义的名字)集合插入了一个文档,数据是inser方法的参数。对照sql理解:向dz表插入一条记录db.dz.insert({name:"zhangsan"})
# 17.查询dz集合下所有的数据
db.dz.find()
【第1,2,3步骤】
【第4-9步骤】
【第10-17步骤】
3、删除用户【不操作】
1、命令及说明
# 进入docker容器
docker exec -it mongodb /bin/bash
# 以root用户登录mongo,-p是密码,--port是端口号,--authenticationDatabase是验证权限的数据库
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"
# 切换到dz12b数据库
use dz12b
# 查看所有的用户数据
show users
# 切换到admin数据库
user admin
# 授权
db.auth("root", "123456")
# 删除用户,用户信息再system.users下,remove是一个命令
db.system.users.remove({user:"user01"})
# 重新进入mongo,验证删除成功
exit
mongo --port 27017 -u "root" -p "123456" --authenticationDatabase "admin"
use dz7b
show users
4、Navicat连接
5、insert
db.dz.insert({name:"菲菲", age:20,sex:"女"});
db.dz.insert({name:"张三",sex:"男"});
db.dz.insert({name:"王五",sex:"男",hiredate:"2024-12-14"});
db.dz.save({name:"菲菲", age:20,sex:"女"});
db.dz.save({name:"张三",sex:"男"});
db.dz.save({name:"王五",sex:"男",hiredate:"2024-12-14"});
insert和save的区别:
如果设置了id字段,id不重复二者没有区别,都是新增一条数据,如果id重复,insert会报错,save执行修改操作。
【执行insert语句同时 创建集合“表”】
db.dz.insert({_id:ObjectId("66f4b95c904baf343400254d"),name:"高波",age:20})
db.dz.save({_id:ObjectId("66f4b95c904baf343400254d"),name:"高波",age:20})
6、find
db.dz.find({age : 20} )
db.dz.find({age : {$gt : 21}})
db.dz.find({age:{$gt : 21},name:'张三'})
7、delete
db.dz.deleteOne({age:20})
db.dz.deleteMany({age:20})
deleteOne是删除按照条件查询到的第一条数据
deleteMany是删除所有符合条件的记录
8、update
db.dz.updateOne({age:25},{$set:{age:20}}
)db.dz.updateMany({age:25},{$set:{age:20}}
)
updateOne是修改按照条件查询到的第一条数据
updateMany是修改所有符合条件的记录
9、其他操作【了解】
# 查看所有数据库
show dbs
# 应用到指定数据库
use databasename
# 查看数据库下的集合
show collections
# 创建集合
db.createCollection("test_collection")
# 删除集合,test_collection是集合的名字
db.test_collection.drop()
6、SpringBoot整合
1.添加依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.13</version></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><jwt.version>0.7.0</jwt.version><fastjson.version>1.2.60</fastjson.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>compile</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--json--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version><scope>compile</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins></build>
2.添加配置
#username: user01 虚拟机数据库名
#database: 自己数据库的名字
#port: 27017 虚拟机中自己定义的
#host: 192.168.146.128 虚拟机ip
spring:data:mongodb:username: user01password: '123456'port: 27017host: 192.168.146.128database: dz14b
mongodb配置有两种方式,如果第一种不生效,可以用第二种尝试一下
spring:data:mongodb:uri: mongodb://user01:123456@192.168.1.101:27017/dz12b
3.编写Entry
package com.jr.entry;import lombok.Data;
import org.springframework.data.annotation.Id;@Data
public class User {@Idprivate String id;private String name;private String password;
}
4.编写DAO
package com.jr.dao;import com.jr.entry.User;import java.util.List;public interface UserDao {/*** 新增** @param user 目标对象*/void insert(User user);/*** 删除** @param id 对象主键*/void delete(String id);/*** 修改** @param user 目标对象*/void update(User user);/*** 通过主键查询** @param id 主键* @return user对象*/User findById(String id);/*** 查询** @param user 条件对象* @return user集合*/List<User> query(User user);}
5.编写DAOImpl
MongoTemplate常用方法:
mongoTemplate.insert(user); //添加user对象
mongoTemplate.findById(id, User.class); //根据主键id,查询单个user对象。
mongoTemplate.remove(user); //删除指定user对象
mongoTemplate.remove(条件对象Query, User.class); // 删除符合条件的user对象
mongoTemplate.updateMulti(条件对象query, 修改对象update, User.class); //修改符合条件的user对象
mongoTemplate.find(条件对象query, User.class); //查询符合条件的user对象
条件对象Query常用方法:
#将构建好的查询条件添加到查询对象中
query.addCriteria(Criteria.where("_id").is(id));
Criteria常用方法:
#用于定义查询条件的接口,它提供了一系列的方法来构建复杂的查询条件。
Criteria.where("_id").is(id);
修改对象Update常用方法:
update.set("password", user.getPassword());
测试代码:
package com.jr.dao.impl;
import com.jr.dao.UserDao;
import com.jr.entry.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.List;@Repository
public class UserDaoImpl implements UserDao {@Autowiredprivate MongoTemplate mongoTemplate;@Overridepublic void insert(User user) {mongoTemplate.insert(user);}@Overridepublic User findById(String id) {return mongoTemplate.findById(id, User.class);}// @Overridepublic void delete1(String id) {User user = findById(id);if (user != null) {mongoTemplate.remove(user);} else {System.out.println("没有找到要删除的数据!");}}@Overridepublic void delete(String id) {Query query = new Query();query.addCriteria(Criteria.where("_id").is(id));mongoTemplate.remove(query, User.class);}@Overridepublic void update(User user) {Query query = new Query();query.addCriteria(Criteria.where("_id").is(user.getId()));Update update = new Update();update.set("name", user.getName());update.set("password", user.getPassword());mongoTemplate.updateMulti(query, update, User.class);}@Overridepublic List<User> query(User user) {Query query = new Query();if(user.getId() != null){query.addCriteria(Criteria.where("_id").is(user.getId()));}if(user.getName() != null){query.addCriteria(Criteria.where("name").is(user.getName()));}if(user.getPassword() != null){query.addCriteria(Criteria.where("password").is(user.getPassword()));}return mongoTemplate.find(query, User.class);}
}
6.编写测试类Test
package com.jr;
import com.SpringBootMain;
import com.jr.dao.UserDao;
import com.jr.entry.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@Slf4j
@SpringBootTest(classes = SpringBootMain.class)
@SuppressWarnings("all")
public class MongoDbTest {@Autowiredprivate UserDao userDao;@Testpublic void testInsert() {User user = new User();user.setPassword("123");user.setName("zhangsan");userDao.insert(user);}@Testpublic void testFindById() {User byId = userDao.findById("661794efd775ee4bd7a6d069");System.out.println(byId);}@Testpublic void testDelete() {userDao.delete("6617970547fbc57ef66a962f");}@Testpublic void testUpdate() {User user = new User();user.setId("661797ee479a0c02f0dd9212");user.setPassword("123456");user.setName("lisi");userDao.update(user);}@Testpublic void testQuery() {User user = new User();
// user.setId("661797ee479a0c02f0dd9212");user.setPassword("123");
// user.setName("lisi");System.out.println(userDao.query(user));}}
7.编写启动类
package com;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringBootMain {public static void main(String[] args) {SpringApplication.run(SpringBootMain.class);}
}
相关文章:
微服务MongoDB解析部署使用全流程
目录 1、什么是MongoDB 1、非关系型数据库 2、非关系型数据库分类 3、MongoDB?bson格式什么样? 2、MongoDB的优势 3、MongoDB应用场景 4、术语 5、操作 1、安装MongoDB 1、查询镜像文件【不操作】 2、拉取镜像文件 3、创建数据挂载目录 4、启…...
string为什么存储在堆里
在 Java 中,字符串对象存储在堆内存中而不是栈内存中,这是由于 Java 的内存管理和对象生命周期的特性决定的。以下是详细解释: 1. Java 内存模型 Java 的内存模型主要分为以下几个部分: 堆(Heap)&#x…...
Python和C++及MATLAB距离相关性生物医学样本统计量算法及数据科学
🎯要点 统计观测值之间距离计算代谢组学和脂质组学分析相关距离矩阵计算卡方检验偏差校正快速计算距离协方差算法大规模生物系统分析距离矩阵相关性测试石油勘探统计学关系 Python距离矩阵 在数学、计算机科学,尤其是图论中,距离矩阵是一…...
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数?1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例:静态数组的实现 第二章: 模板的特化2.1 什么是模板特化?2.1.1 模板…...
golang学习笔记20-面向对象(二):方法与结构体【重要】
本节内容是面向对象的核心与基础,很重要。 注意:由于导包语句已经在19讲(笔记19:面向对象的引入)展示过了,所以这里就不展示了。 一、方法的定义与细节 方法是与特定类型(通常是结构体&#x…...
广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
【题目描述】 已知nn个整数x1,x2,……xn 以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别 得到一系列的和。例如当n4, k3 4个整数分别为3,7,12,19 3, 7,12,19时,可得全部的组合与它们的和为: 371222 371929 7121938 3121934 现在,要求你计算出和为…...
cas5.3统一登录前后端分离改造方案(源码)
cas5.3 为什么选择cas5.3 版本 5.3 版本是最新的支持jdk8 的版本,并且项目架构基于maven ,商业项目中jdk8 仍是主流,在考虑商业收益的情况下,如果客户不要求,不会升级jdk, 基于Maven的项目比gradle 简单,…...
【ComfyUI】控制光照节点——ComfyUI-IC-Light-Native
原始代码(非comfyui):https://github.com/lllyasviel/IC-Light comfyui实现1(600星):https://github.com/kijai/ComfyUI-IC-Light comfyui实现2(500星):https://github.c…...
LVS+keepalived整合负载均衡配置
准备三台服务器;负载均衡服务器192.168.45.136,后端机器1,92.168.45.135,后端机器2,192.168.45.138 在两台后端机器上安装nginx服务,yum install -y nginx,并且启动nginx服务,systemctl start …...
Goland无法使用debug的修复
现象goland在debug的时候,一直卡在打的断点处,释放断点程序就执行结束。 查看其他博客说是当使用老版本的goland,golang版本为高版本时就会出现debug问题,需要手动更换dlv。 接下来以window为例子: 第一步࿱…...
MySQL和Doris开窗函数LAG执行时的区别
目标表的表结构 CREATE TABLE point_value_status_color_tmp ( id bigint NOT NULL, org_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, device_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, origin_ti…...
都是小憨憨!
周五晚上约了俩哥们儿吃饭,天南海北地聊着。其中一个哥们儿 L 讲,他在外面如何辛苦跑业务,维系客户,拿单子……但却被合伙人说是合伙人拉了 L 一把,而且可以分分钟灭了 L。所以 L 感觉到很委屈。然后我们俩就劝说趁早决…...
高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
如果有遗漏,评论区告诉我进行补充 面试官: Redis持久化有几种方式? 我回答: Redis 是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis 提供了两种主要的持久化方式:RDB(Redi…...
ICML 2024 论文分享┆一个简单且通用的交通预测提示调优框架
论文简介 本推文介绍了2024 ICML的优秀论文之一《FlashST: A Simple and Universal Prompt-Tuning Framework for Traffic Prediction》。论文的核心目标是通过整合空间和时间因素,精准地预测和分析交通流量的动态变化。然而,在交通预测领域,…...
【C++打怪之路Lv4】-- 类和对象(中)
🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…...
滚雪球学MySQL[1.1讲]:MySQL简介与环境配置
全文目录: 前言1. MySQL简介与环境配置1.1 MySQL简介什么是MySQLMySQL的历史和版本MySQL的应用场景 1.2 安装与配置安装MySQL(Windows、Linux、macOS)配置文件解析(my.cnf)启动与停止MySQL服务 1.3 MySQL客户端工具MyS…...
Llama微调以及Ollama部署
1 Llama微调 在基础模型的基础上,通过一些特定的数据集,将具有特定功能加在原有的模型上。 1.1 效果对比 特定数据集 未使用微调的基础模型的回答 使用微调后的回答 1.2 基础模型 基础大模型我选择Mistral-7B-v0.3-Chinese-Chat-uncensored&#x…...
中关村环球时尚产业联盟 东晟时尚产业创新中心成立
2024年9月6日,中关村环球时尚产业联盟与东晟时尚创新科技(北京)有限公司于中关村科技园东城园举行了隆重的战略合作签约仪式。 中关村科技园东城园领导发表了致辞,并表示东城区作为首都北京的核心区域,拥有深厚的历史…...
基于SSM的宠物领养管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的宠物领养管理系统2拥有两种角色 管理员:宠物分类管理、领养管理、宠物商品管理、用户管理、寄存管理、丢失信息管理、订单管理等 用户:登录注册、收藏评…...
为什么要配置环境变量?
在 Windows 操作系统中配置环境变量有多个重要的原因,这些原因与软件开发、系统管理和日常使用密切相关。以下是一些主要的原因: 1. 系统路径(PATH) 可执行文件的位置:PATH 环境变量用于指定操作系统在何处查找可执行…...
条件熵公式详细解释、举例说明计算步骤
公式 7-4 是条件熵的表达式: E ( Y ∣ X ) ∑ i 1 m p ( X x i ) E ( Y ∣ X x i ) E(Y|X) \sum_{i1}^m p(X x_i) E(Y | X x_i) E(Y∣X)i1∑mp(Xxi)E(Y∣Xxi) 这个公式表示的是条件熵,它是衡量在已知某一特征 X X X 的情况下,…...
颍川陈氏始祖陈寔逆势崛起的原由(一)不屈的努力
园子说颍川 按陈寔的出身,与当官是风马牛不相及的。 东汉末年的社会,朝中外戚、宦官当道,地方则由世家大族把持,郡县的政治经济资源都由他们掌控分配,平民以及中小地主很难有出头之日,弄不好就被兼并了。…...
golang小项目1-家庭收支记账系统
项目地址:golang小项目 参考资料:尚硅谷golang教程P229 家庭收支记账系统 1. 系统简介 1.1 项目背景 在现代社会中,家庭的财务管理显得尤为重要。随着生活成本的不断上升,家庭需要有效地记录和分析收支情况,以确保…...
Visual Studio Code下载安装及汉化
官网:https://code.visualstudio.com/ 按照指示一步步操作即可: 汉化:...
MySQL—触发器详解
基本介绍 触发器是与表有关的数据库对象,在 INSERT、UPDATE、DELETE 操作之前或之后触发并执行触发器中定义的 SQL 语句。 触发器的这种特性可以协助应用在数据库端确保数据的完整性、日志记录、数据校验等操作。 使用别名 NEW 和 OLD 来引用触发器中发生变化的记…...
钉钉H5微应用Springboot+Vue开发分享
文章目录 说明技术路线注意操作步骤思路图 一、创建钉钉应用二、创建java项目三、创建vue项目(或uniapp项目),npm引入sdk的依赖四、拥有公网域名端口。开发环境可以使用(贝锐花生壳等工具)五、打开钉钉开发者平台&…...
项目:微服务即时通讯系统客户端(基于C++QT)]四,中间界面搭建和逻辑准备
四,中间界面搭建 前言:当项目越来越复杂的时候,或许画草图是非常好的选择 一,初始化中间窗口initMidWindow void mainWidget::initMidWindow() {//使用网格布局进行管理QGridLayout* layout new QGridLayout();//距离上方 20px 的距离&…...
【C语言】指针详解(一)
个人主页 : zxctscl 如有转载请先通知 文章目录 1.内存与地址2.指针变量与地址2.1 取地址操作符&2.2 指针变量2.3 指针类型2.4 解引用操作符2.5 指针变量的大小 3. 指针变量类型的意义3.1 指针的解引用 4. const修饰指针4.1 const修饰变量4.2 const修饰指针变量…...
unity3D雨雪等粒子特效不穿透房屋效果实现(粒子不穿透模型)
做项目有时候会做天气模拟,模拟雨雪天气等等。但是容易忽略一个问题,就是房屋内不应该下雨或者下雪,这样不就穿帮了嘛。 下面就粒子穿透物体问题做一个demo。 正常下雨下雪在室内的话,你可以看到,粒子是穿透建筑的。 那要怎么模拟真实的雨雪天气,不让粒子穿透房屋建筑呢…...
ROS2安装cartographer
2. 安装Cartographer和Cartographer ROS 使用apt安装(推荐): bash sudo apt install ros-humble-cartographer-ros或者,从源代码安装: bash sudo apt-get update sudo apt-get install -y python3-wstool python3…...
免费做调查的网站/培训机构退费法律规定
事件广播 简介 Laravel 5.1 之中新加入了事件广播的功能,作用是把服务器中触发的事件通过websocket服务通知客户端,也就是浏览器,客户端js根据接受到的事件,做出相应动作。本文会用简单的代码展示一个事件广播的过程。 依赖 redis…...
如何做网站服务器映射/bt磁力搜索
什么是WinRT? 首先WinRT是微软为了方便开发者编写Metro风格的程序而提供的一个开发平台。对于广大普通开发者而言,WinRT就是一堆Storage, Pickers, Controls,network,Media等组件的可供调用的API函数。开发者可以调用微软通过W…...
企业网站改版建议/广东seo推广
目标:提高结构化思维,书面表达,公文写作,口头(说话、演讲、讲课)表达能力 谁是我的听众?他们想听什么?他们想怎么听?金字塔原理的基本结构是:结论先行,以上统下ÿ…...
wordpress卸载多说/国外免费域名
1.df 列出文件系统的整体磁盘使用量(7.2.1)参数:-m 以MB容量显示-k 以KB容量显示-h 以人们交易阅读的GB,MB,KB等格式显示-H 以M1000K 取代M1024K的方式显示2.du 列出当前目录下的所有目录的容量(不显示文件,只显示目录,要显式文件夹-a)参数&a…...
十年前网站开发语言/安卓内核级优化神器
1 静态方法加载几次? 2 类内方法需要加static吗?类外方法呢? 3 class aa{} BOO xx(){} bb.x() cc.row上方代码分别是什么含义? 4 判断返回值类型应看哪里? 5 定义成员变量的方式有几种?可以直接在成员变量下…...
帮朋友做网站的坑/网页搜索快捷键是什么
开启自启自定义服务: 1、拷贝一份服务配置文件 cp /etc/systemd/system/aliyun.service /etc/systemd/system/zhangkai.service 2内容自定义:如下示例: [Unit] Descriptionzhangkai test Afternetwork-online.target Wantsnetwork-onl…...