MongoDB(介紹,安裝,操作,Springboot整合MonggoDB)

目錄

MongoDB

1 MongoDB介紹

MongoDB簡介

MongoDB的特點

MongoDB使用場景

小結

2 MongoDB安裝

安裝MongoDB

連接MongoDB

MongoDB邏輯結構

MongoDB數據類型

小結

3 MongoDB操作

操作庫和集合

操作文檔-增刪改

操作文檔-查詢

MongoDB索引

小結

4 SpringBoot整合MongoDB

介紹

使用入門

API詳解

小結


MongoDB

從原型圖不難看出,這部分功能主要涉及兩個實體:問題 和 回答/評論

因此核心要設計的就是這兩類數據的存儲。但是問答相關的數據量比較大,且隨著時間的推移會越來越大。如果使用MySQL存儲海量數據,成本會比較高。因為這里使用MongoDB存儲問答相關的數據

1 MongoDB介紹

MongoDB簡介

MongoDB官網地址:MongoDB: The Developer Data Platform | MongoDB

MongoDB中文網:MongoDB中文網

MongoDB是一個基于分布式文檔型存儲的NoSQL數據庫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB由C++語言編寫,是非關系數據庫當中功能最豐富,最像關系數據庫的,它支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。

MongoDB的特點

MongoDB 最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。

MongoDB像豬八戒:

  • 不挑食:存儲數據松散,對存儲的數據沒有要求。每一條數據都可以有完全不同的結構

  • 干活快:性能強,對數據沒有過多的校驗,也支持索引,也支持熱點數據的內存映射。性能比MySQL強

  • 吃的多:存儲容量大,天生是為了分布式環境設計的,非常適合搭建集群存儲海量數據

MongoDB特點:

  1. 面向集合存儲,易于存儲對象類型的數據。“集合”相當于“表”,集合里存儲的是一個個的json對象

  2. 模式自由:每個json對象的數據都可以完全不同,結構松散

  3. 支持動態查詢

  4. 支持完全索引,包含內部對象

  5. 支持復制和故障恢復

  6. 使用高效的二進制數據存儲,包括大型對象(如視頻等)

  7. 自動處理碎片,以支持云計算層次的擴展性

  8. 支持 Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++語言的驅動程 序, 社區中也提供了對Erlang及.NET 等平臺的驅動程序

  9. 文件存儲格式為 BSON(一種 JSON 的擴展)

MongoDB使用場景

適用于

  • 存儲網站數據:

    Mongo 非常適合實時的插入,更新與查詢,并具備網站實時數據存儲所需的復制及高度伸縮性。

  • 作為緩存:

    由于性能很高,Mongo 也適合作為信息基礎設施的緩存層。在系統重啟之后,由Mongo 搭建的持久化緩存層可以避免下層的數據源過載。

  • 存儲大尺寸、低價值的數據:

    使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。

  • 高伸縮性的場景:

    Mongo 非常適合由數十或數百臺服務器組成的數據庫,Mongo 的路線圖中已經包含對MapReduce引擎的內置支持。

  • 業務變化頻繁的場景:

    頻繁的修改字段、增加字段等等場景,使用MongoDB的結構松散的特性,可以很方便的適應需求

  • 用于對象及JSON 數據的存儲:

    Mongo 的BSON 數據格式非常適合文檔化格式的存儲及查詢。

    比如:行動軌跡的存儲,例如 快遞物流的信息,可以存儲

{
?? ?"id": "物流單號",
?? ?"userId": 所屬用戶,
?? ?"orderId": "關聯的訂單id",
?? ?"track":[
?? ??? ?{ "地點":"xxx", "坐標":"緯度,經度", "時間":"",... },
?? ??? ?{ "地點":"xxx", "坐標":"緯度,經度", "時間":"",... },
?? ??? ?...
?? ??? ?{ "地點":"xxx", "坐標":"緯度,經度", "時間":"",... }
?? ?]
}

不適用

  • 高度事務性的系統:

    例如,銀行或會計系統。傳統的關系型數據庫目前還是更適用于需要大量原子性復雜事務的應用程序。

  • 傳統的商業智能應用:

    針對特定問題的BI 數據庫會產生高度優化的查詢方式。對于此類應用,數據倉庫可能是更合適的選擇。

  • 復雜的跨文檔(表)級聯查詢。

    MongoDB不支持多表查詢

小結

MongoDB是個什么樣的數據庫?
?? ?分布式的文檔型NoSQL,存儲的是類似json的bson格式,是所有NoSQL里功能最豐富的一個
MongoDB的特點有哪些?
?? ?存儲數據的結構松散,每一條數據都可以有不同的結構
?? ?性能強
?? ?適合海量數據的存儲
什么場景不適合MongoDB?
?? ?對事務要求比較高的場景
?? ?不支持多表查詢(跨集合的查詢)
?? ?不適合商業BI應用

2 MongoDB安裝

我們使用的MongoDB版本是5.0.9

安裝MongoDB

在Linux里執行以下命令,創建MongoDB容器。注意MongoDB的登錄帳號:tjxt,密碼123

#1. 停止并刪除Linux里舊的容器
docker stop mongo
docker rm mongo

#2. 重新創建MongoDB容器
docker run -id --name=mongo --network heima-net \
? -e MONGO_INITDB_ROOT_USERNAME=tjxt \
? -e MONGO_INITDB_ROOT_PASSWORD=123 \
? -p 27017:27017 \
? -v /usr/local/src/mongo:/data/db \
? --restart=always \
? mongo

連接MongoDB

使用MongoDB官方提供的studio3t, 或者 idea、DataGrip、Navicat Premium都可以連接MongoDB。我們這里仍然使用idea連接,步驟如下圖。

MongoDB邏輯結構

MongoDB 的邏輯結構是一種層次結構。主要由: 文檔(document)、集合(collection)、數據庫(database)這三部分組成的。邏輯結構是面 向用戶的,用戶使用 MongoDB 開發應用程序使用的就是邏輯結構。

  1. MongoDB 的文檔(document),相當于關系數據庫中的一行記錄。

  2. 多個文檔組成一個集合(collection),相當于關系數據庫的表。

  3. 多個集合(collection),邏輯上組織在一起,就是數據庫(database)。

  4. 一個 MongoDB 實例支持多個數據庫(database)。

為了更好的理解,下面與SQL中的概念進行對比:

MongoDB數據類型

常用的數據類型有:

小結

MongoDB的結構:

DataBase:數據庫
Collection:集合。一個DataBase里可以有多個Collection
?? ?一個集合相當于一張表,但是理解為 是一個List<Object>
Document:文檔。一個Collection里可以有多個Document
?? ?一個文檔相當于一條數據,但是更甚為 是List<Object>里的一個Object對應的json
?? ?

Field:字段
Index:索引。提升查詢數據的速度,但是影響增刪改

MongoDB支持數據類型:

  • 整數,小數,String,Boolean, 數組,嵌套json對象,……

3 MongoDB操作

操作庫和集合

語法

注意:并不需要提前創建集合,在向集合里插入文檔數據時,如果集合不存在,會自動創建的

示例

//1. 創建庫,名稱為heima416。
// ? 如果庫里沒有任何內容,庫僅僅是在內存里,沒有落盤,所以查看庫是看不到的。
use heima416
//2. 查看當前庫
db
show dbs
//3. 刪除庫
db.dropDatabase()

//4. 創建集合:users。不需要顯式的創建庫,只要向集合里插入文檔,如果集合不存在會自動創建再插入
// db.createCollection("users")
db.users.insertOne({ name:"王叢叢", age:21, sex:"男"})
//5. 查看集合
show collections
//6. 刪除集合
db.users.drop()

操作文檔-增刪改

語法

其中的update要注意,默認情況下update操作會對原始文檔進行覆蓋。如果不想覆蓋,而是僅僅做增量更新的話,要使用相應的操作符:

  • $set:設置字段的值。

    例如db.表名/集合名.updateMany({}, { $set:{money:1000, status: 1} })

    表示修改集合里所有的數據,把money設置為1000,把status設置為1

  • $inc:字段的值自增

    例如db.表名/集合名.updateMany({}, {$inc: {money:1000} })

    表示修改集合里所有的數據,給money值自增1000

示例

//1. 插入文檔
db.users.insertOne({ name:"王叢叢", age:21, sex:"男"})
db.users.insertMany( [
? ? {name:"齊天澤", age:22, sex:"男"},
? ? {name:"吳磊", age:24, sex:"男"}
] )
// ?使用js的語法操作MongoDB
var arr = [
? ? {name:"齊天澤1", age:23, sex:"男"},
? ? {name:"吳磊1", age:25, sex:"男"}
];
db.users.insertMany(arr)
//?? ?利用js的fori循環定義數組,再批量插入
var arr1 = [];
for (let i = 0; i < 10; i++) {
? ? arr1.push( {name:"王叢叢"+i, age: 20+i} )
}
db.users.insertMany(arr1)

//2. 修改文檔。
//2.1 修改要使用操作符$set
// 只修改匹配到的第一條數據
db.users.updateOne( { age:21 }, { $set:{sex:"女"} } )
// 修改匹配到的所有數據
db.users.updateMany( { age:21 }, { $set:{sex:"男"} } )
// 修改所有數據,設置sex=男,address=北京昌平金燕龍
db.users.updateMany( { }, { $set:{sex:"男",address:"北京昌平金燕龍"} } )
//2.2 字段值自增使用$inc
db.users.updateMany( {}, { $inc:{age:1} } )

//3. 刪除文檔
// 刪除age=21的第1條
db.users.deleteOne( {age:21} )
// 刪除所有age=22的
db.users.deleteMany( { age:22 } )
// 刪除所有文檔數據
db.users.deleteMany( {} )

操作文檔-查詢

語法

其中:

  • query:表示查詢條件,寫成json形式,例如 {status:1}表示 查詢status=1的文檔。如果需要其它條件,參考下一小節

  • fields:表示要查詢哪些字段,寫成json形式,例如 {name:1, age:1} 只查詢name和age字段

  • 排序條件:寫成json形式,例如{age:1, money:-1} 表示 按age升序排序,如果年齡相同則按money降序

  • skip(m):表示跳過前m個,從索引m開始查找

  • limit(n):表示只要前n個

條件操作符

查詢條件操作符

多條件連接

示例

準備數據

db.users.remove({})?
db.users.insert({username:'zhangsan', sex:'男', age:20, salary:8000})
db.users.insert({username:'lisi', sex:'女',age:21, salary:9000})
db.users.insert({username:'wangwu', sex:'男',age:22, salary:12000})
db.users.insert({username:'zhaoliu', sex:'男',age:22, salary:9500})
db.users.insert({username:'qianqi', sex:'女',age:25, salary:7500})
db.users.insert({username:'tom', sex:'男',age:19, salary:6500})
db.users.insert({username:'jerry', sex:'女',age:23, salary:8500})
db.users.insert({username:'jack', sex:'男',age:22, salary:4500})
db.users.insert({username:'rose', sex:'女',age:20, salary:14500})

使用示例

//1. 單字段的條件查詢
// ?= 查詢性別為男的 select * from users where sex = '男'
db.users.find( { sex:"男"} )
// ?> 查詢年齡大于20歲的 select * from users where age > 20
db.users.find( { age:{$gt:20} } )
db.users.find( { age:{$gt:20, $lt:23} } )
// ?like 查詢username以j開頭的 select * from users where username like 'j%'
db.users.find( { username:{$regex:'^j.*$'} } )

// 查詢符合條件的數據,只要name和salary列
db.users.find( {},{username:1, salary:1} )

//2. 多字段的條件查詢
// 查詢工資8000以上,年齡23歲以下的用戶:salary,age
db.users.find( { salary:{$gt:8000}, age:{$lt:23} } )
// 查詢工資8000以上,或者 年齡23歲以下的用戶:salary,age
db.users.find( { $or:[ {salary:{$gt:8000}},{age:{$lt:23}} ] } )

//3. 排序
db.users.find().sort({ salary:-1 })
db.users.find().sort({age:1})
db.users.find().sort({age:1, salary:-1})

//4. 分頁
db.users.find().skip(3)
db.users.find().skip(3).limit(2)

MongoDB索引

MongoDB的索引底層使用的是B樹。

mongoDB中常用的索引類型

  • 單字段索引:在單字段上創建索引

  • 復合索引:在多字段上創建索引

  • 多鍵索引:在數組字段上創建索引

  • 哈希索引:給指定字段建立hash索引,有強大的查找能力,但是不能排序及范圍查詢

mongoDB中常用的索引屬性

  • 唯一索引:添加唯一性約束

  • 局部索引:只對集合里符合條件的一部分文檔創建索引

  • 稀疏索引:在有索引字段的文檔上創建索引。例如給email字段加稀疏索引,只有文檔里包含email字段才會加索引

  • TTL索引:一種特殊的單字段索引,只能用于date類型的字段,給文檔添加過期時間,過期后文檔會被刪除掉

語法

示例

//查詢集合里的索引
db.users.getIndexes();
//增加索引
db.users.createIndex( { username:1, age:1 } )
//查詢數據時,驗證索引是否會生效
db.users.find( {username:"tom"} ).explain(true);
//刪除索引
db.users.dropIndex("username_1_age_1")

小結

查詢所有庫:show dbs
創建庫/切換庫:use 庫名稱
查詢當前庫:db
刪除當前庫:db.dropDatabase()

查看當前庫里所有集合:show collections
在當前庫里創建集合:
* 方式1:向集合里插入文檔,如果集合不存在,就怎么創建。db.集合名.insertOne(json對象)
* 方式2:顯式創建集合:db.createCollection("集合名")
刪除當前庫里某集合:db.集合名.drop()

操作文檔增刪改

//3.新增文檔
db.users.insertOne({name:"李四",age:24,gender:"女"});
db.users.insertMany([
? ? {name:"王五",age:25, gender:"男"},
? ? {name:"趙六",age:26, email: "zl@163.com"},
? ? {name:"錢七",age:27, gender:"女"}
]);

//var arr = [
// ? ?{name:"王五5",age:25, gender:"男"},
// ? ?{name:"趙六6",age:26, gender:"女"}
//];
//db.users.insertMany(arr);
//for(var i = 0; i<arr.length; i++){
// ? ?db.users.insertOne(arr[i]);
//}

//4. 修改文檔:$set修改字段值,$inc字段值自增
db.users.updateOne( {gender:"男"}, { $set: {age:30, salary:10000} } );
db.users.updateMany( {gender:"男"}, { $set: {age:30, salary:10000} } );
db.users.updateMany( {gender:"男"}, { $inc: {salary:-5000} } );

//5. 刪除文檔
db.users.deleteOne( {gender:"男"} );
db.users.deleteMany( {gender:"男"} );

操作文檔查詢

整體的語法:
db.集合名.find( query,fields ).sort({排序字段:1或-1, 排序字段:1或-1}).skip(起始索引).limit(查詢數量)
db.users.find().sort({age:-1, salary:1}).skip(5).limit(5)

查詢條件:
?? ?* 以字段為單位 寫條件的 { 字段1:{}, 字段2:{} }
?? ?* 條件運算符:$gt, $gte, $lt, $lte, $ne, $in, $nin, $regex等等


1. 單字段的條件查詢
// ?查詢性別為男的 select * from users where sex = '男'
db.users.find( {sex:"男"})

// ?查詢年齡大于20歲的 select * from users where age > 20
db.users.find( { age:{$gt:20} } )
// ?查詢年齡大于20,并且小于25的
db.users.find( { age:{ $gt:20, $lt:25} } )
// ?查詢年齡大于20,并且小于25的 ?性別為男的
db.users.find( { age:{$gt:20, $lt:25}, sex:"男" } )

// ?like 查詢username以j開頭的 select * from users where username like 'j%'
db.users.find( { username:{ $regex: /^j.*$/ } } )

4 SpringBoot整合MongoDB

介紹

SpringBoot提供了操作MongoDB的起步依賴:spring-boot-starter-data-mongodb,已經幫我們提供了操作MongoDB的一些API,包括兩種形式:

  • JPA形式的操作:實現了JPA規范的操作方式,簡單的CURD操作更方便,但是復雜操作不夠靈活

    UserRepository, findByUsernameAndSex, findById

  • MongoTemplate形式的操作:更靈活的操作MongoDB的方式,我們使用這種方式

使用入門

使用步驟如下:

  1. 準備工作

    添加起步依賴spring-boot-starter-data-mongodb

    配置MongoDB的連接信息

  2. 使用入門

    準備實體類

    操作MongoDB

準備工作

起步依賴

<!-- MongoDB起步依賴 -->
<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
? ? <groupId>org.projectlombok</groupId>
? ? <artifactId>lombok</artifactId>
</dependency>

<!-- 為方便測試,再添加單元測試起步依賴 -->
<dependency>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-test</artifactId>
</dependency>

配置文件

spring:
? data:
? ? mongodb:
? ? ? #uri的格式: ?mongodb://帳號:密碼@ip:端口/庫名稱?authSource=admin
? ? ? uri: mongodb://tjxt:123@192.168.150.101:27017/demo416?authSource=admin

使用入門

準備實體類

package com.itheima.com.itheima;import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;@Data
@Document("course")
public class Course {@Idprivate String id;private String name;private Integer price;private Integer status;
}

新增一條文檔

?

package com.itheima;import com.itheima.com.itheima.Course;
import com.mongodb.client.MongoIterable;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;@SpringBootTest
public class MongoTest {@Autowiredprivate MongoTemplate mongoTemplate;@Testpublic void testInsert(){Course course = new Course();course.setName("Java基礎");course.setPrice(1);course.setStatus(1);mongoTemplate.insert(course);}
}

API詳解

常用方法

mongoTemplate提供了一系列操作MongoDB的常用方法:

注意其中的queryupdate

  • query:用于設置查詢條件

  • update:用于設置要修改的數據

使用示例

package com.itheima;import com.itheima.com.itheima.Course;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
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 java.util.ArrayList;
import java.util.List;@SpringBootTest
public class MongoTest {@Autowiredprivate MongoTemplate mongoTemplate;@Testpublic void testInsert() {Course course = new Course();course.setName("Java基礎");course.setPrice(1);mongoTemplate.insert(course);}@Testpublic void testInsertAll() {List<Course> list = new ArrayList<>();for (int i = 0; i < 100; i++) {Course course = new Course();course.setName("Java基礎" + i);course.setPrice(100 + i);list.add(course);}mongoTemplate.insertAll(list);}@Testpublic void testUpdateFirst() {Query query = Query.query(Criteria.where("name").is("Java基礎"));Update update = Update.update("status", 0);mongoTemplate.updateFirst(query, update, Course.class);}@Testpublic void testUpdateMulti() {Query query = Query.query(Criteria.where("price").gt(150));Update update = Update.update("status", 0);mongoTemplate.updateMulti(query, update, Course.class);}@Testpublic void testRemove() {Query query = Query.query(Criteria.where("name").is("Java基礎"));mongoTemplate.remove(query, Course.class);}@Testpublic void testFindById() {mongoTemplate.findById("6588372d561ff41f2377fc4e", Course.class);}@Testpublic void testFindOne() {Query query = Query.query(Criteria.where("name").is("Java基礎1"));Course course = mongoTemplate.findOne(query, Course.class);System.out.println("course = " + course);}@Testpublic void testFindAndCount() {//1. 統計符合條件的文檔數量Query query = Query//設置查詢條件:where price > 120 and status is null.query(Criteria.where("price").gt(120).and("status").is(null));long count = mongoTemplate.count(query, Course.class);System.out.println("count = " + count);//2. 分頁查詢符合條件的文檔列表query//設置排序條件:order by name desc.with(Sort.by(Sort.Order.desc("name")))//設置分頁條件:查詢第1頁的10條。 注意:這里的頁碼從0開始.with(PageRequest.of(0, 10));List<Course> list = mongoTemplate.find(query, Course.class);list.forEach(System.out::println);}
}

小結

SpringDataMongo操作MongoDB

準備工作:
?? ?1. 先導入依賴spring-boot-starter-data-mongodb
?? ?2. 修改配置文件,配置MongoDB的連接地址?
?? ??? ?spring.data.mongodb.uri=地址
?? ??? ?地址寫法:
?? ??? ??? ?mongodb://帳號:密碼@服務器ip:端口/庫名稱?authSource=admin
?? ??? ??? ?mongodb://tjxt:123@192.168.150.101:27017/demo418?authSource=admin
使用方式:
?? ?1. 需要注入MongoTemplate對象
?? ?2. 使用MongoTemplate操作MongoDB??

操作方法的小結

//構造查詢條件
//	1. 創建一個Query對象,設置where條件
//	2. 設置排序條件
//	3. 設置分頁條件。頁碼是從0開始的
//方式1
Query query = new Query().addCretiria(Criteria.where("字段名").is(值).and("字段名").gt(值)...).with(Sort.by(Sort.Order.desc("字段名"), Sort.Order.asc("字段名"), ...)).with(PageRequest.of(頁碼, 每頁幾條));
//方式2
Query query = Query.query(Criteria.where("字段名").is(值).and("字段名").gt(值)...).with(Sort.by(Sort.Order.desc("字段名"), Sort.Order.asc("字段名"), ...)).with(PageRequest.of(頁碼, 每頁幾條))//查詢
Course course = mongoTemplate.findById(id值, Course.class);
Course course = mongoTemplate.findOne(query, Course.class);
List<Course> list = mongoTemplate.find(query, Course.class);
long count = mongoTemplate.count(query, Course.class);//構造update對象
//方式1
Update update = new Update().set("字段名", 值).inc("字段名", 值)...;
//方式2
Update update = Update.update("字段名", 值).inc("字段名", 值)...;//修改
mongoTemplate.updateFirst(query, update, Course.class);
mongoTemplate.updateMulti(query, update, Course.class);//刪除
mongoTemplate.remove(query, Course.class);//新增
mongoTemplate.insert(對象);
mongoTemplate.insertAll(集合);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/15757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/15757.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/15757.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c# sqlite使用

安裝包 使用 const string strconn "Data Sourcedata.db"; using (SQLiteConnection conn new SQLiteConnection(strconn)) {conn.Open();var cmd conn.CreateCommand();cmd.CommandText "select 1";var obj cmd.ExecuteScalar();MessageBox.Show(ob…

ES 查詢踩坑-全字段匹配

需求&#xff1a;name字段需要全匹配查詢 name的映射 普通的must查詢 GET power_engin/_search {"from": 0,"size": 10,"query": {"bool": {"must": [{"term": {"name": {"value": "尼…

刷題之路徑總和Ⅲ(leetcode)

路徑總和Ⅲ 這題和和《為K的數組》思路一致&#xff0c;也是用前綴表。 代碼調試過&#xff0c;所以還加一部分用前序遍歷數組和中序遍歷數組構造二叉樹的代碼。 #include<vector> #include<unordered_map> #include<iostream> using namespace std; //Def…

python從入門到精通01

一、程序員計算器 number int(input("請輸入一個數字&#xff1a;")) print("二進制",bin(number)) print("八進制",oct(number)) print("十六進制",hex(number))二、給電影打分 score int(input("請給電影《肖申克的救贖》打…

計算機畢業設計Hadoop+Hive地震預測系統 地震數據分析可視化 地震爬蟲 大數據畢業設計 Spark 機器學習 深度學習 Flink 大數據

2024 屆本科畢業論文&#xff08;設計&#xff09; 基于Hadoop的地震預測的 分析與可視化研究 姓 名&#xff1a;____田偉情_________ 系 別&#xff1a;____信息技術學院___ 專 業&#xff1a;數據科學與大數據技術 學 號&#xff1a;__2011103094________ 指導…

【大數據面試題】33 Flink SQL做過哪些優化?

一步一個腳印&#xff0c;一天一道面試題 簡單寫幾個 Flink SQL 的優化 1.優化狀態管理 Flink 的狀態管理對整個程序的性能有較大影響。所以優化效果比較好。 設置空閑狀態自動清理&#xff08;TTL Time-to-Live&#xff09;數據量大時選擇 RocksDBStateBackend // 設置狀…

《圖解支付系統設計與實現》電子書_V20240525

相較于上次公開發布的V20240503版本&#xff0c;變更內容如下&#xff1a; 根據掘金網友zz67373&#xff08;李浩銘&#xff09;的勘誤建議&#xff0c;優化了部分描述。增加&#xff1a;金額處理規范&#xff0c;低代碼報文網關實現完整代碼&#xff0c;分布式流控等內容。擴…

Java虛擬機原理(下)-Dalvik vs ART-探秘Android虛擬機內在機制

Android系統作為移動端主流平臺&#xff0c;其高效的虛擬機無疑是其核心競爭力之一。今天&#xff0c;就讓我們一起剝開Dalvik和ART虛擬機的外衣&#xff0c;深入解析它們的工作原理和優缺點&#xff0c;幫助你全面把握Android系統的運行機制。 正文導覽 Dalvik和ART虛擬機的發…

Openstack all-in-one_ironic 部署測試

1. 基礎環境 apt update apt install git python3-dev libffi-dev gcc libssl-dev apt install python3-venv 2. 設置虛擬環境變量 root@controller01:~# python3 -m venv /deploy/venv root@controller01:~# source /deploy/venv/bin/activate (venv) root@controller01:~#…

Nginx - 安全基線配置與操作指南

文章目錄 概述中間件安全基線配置手冊1. 概述1.1 目的1.2 適用范圍 2. Nginx基線配置2.1 版本說明2.2 安裝目錄2.3 用戶創建2.4 二進制文件權限2.5 關閉服務器標記2.6 設置 timeout2.7 設置 NGINX 緩沖區2.8 日志配置2.9 日志切割2.10 限制訪問 IP2.11 限制僅允許域名訪問2.12 …

debugger(一):打斷點的實現以及案例分析

〇、前言 最近在學習 debugger 的實現原理&#xff0c;并按照博客實現&#xff0c;是一個很不錯的小項目&#xff0c;這是地址。由于 macOS 的問題&#xff0c;系統調用并不完全相同&#xff0c;因此實現了兩個版本分支&#xff0c;一個是 main 版本分支&#xff08;macOS M1 …

【一站式學會Kotlin】第八節:kotlin== 和 === 的差別和含義

作者介紹&#xff1a; 百度資深Android工程師T6&#xff0c;在百度任職7年半。 目前&#xff1a;成立趙小灰代碼工作室&#xff0c;歡迎大家找我交流Android、微信小程序、鴻蒙項目。 一&#xff1a;通俗易懂的人工智能教程&#xff1a;https://www.captainbed.cn/nefu/ 點一下…

Altium Designer 中鍵拖動,滾輪縮放,并修改縮放速度

我的版本是AD19&#xff0c;其他版本應該都一樣。 滾輪縮放 首先&#xff0c;要用滾輪縮放&#xff0c;先要調整一下AD 設置&#xff0c;打開Preferences&#xff0c;在Mouse Wheel Configuration 里&#xff0c;把Zoom Main Window 后面Ctrl 上的對勾取消掉&#xff0c;再把…

C++中的懸掛指針和野指針

懸掛指針&#xff08;dangling pointer&#xff09;和野指針&#xff08;wild pointer&#xff09;是兩種常見的指針錯誤&#xff0c;雖然它們都可能導致未定義行為&#xff0c;但它們產生的原因和表現有所不同。 1.懸掛指針&#xff08;Dangling Pointer&#xff09; 懸掛指…

2024 ISCC pwn wp

iscc 練武pwn 總結第一周chaosISCC_easyFlagshopping 第二周ISCC_easyISCC_Uheapheap 第三周miaoYour_programeazy_heap 總結 總體感覺iscc考察的題目都挺基礎的&#xff0c;在目前這種比賽的大環境下&#xff0c;仍然出這種&#xff0c;比較基礎的題目&#xff0c;實在是難得…

智馭未來:探究AIGC行業的戰略入局時機與前景展望

當前時點涉足人工智能生成內容&#xff08;AIGC&#xff09;行業&#xff0c;是一個策略性抉擇&#xff0c;基于對該行業現狀的深度剖析及對未來趨勢的前瞻性預判&#xff0c;其可行性與吸引力顯著。 行業發展階段分析&#xff1a; 技術迭代加速&#xff1a;近年來&#xff0c…

力扣刷題---2283. 判斷一個數的數字計數是否等于數位的值【簡單】

題目描述 給你一個下標從 0 開始長度為 n 的字符串 num &#xff0c;它只包含數字。 如果對于 每個 0 < i < n 的下標 i &#xff0c;都滿足數位 i 在 num 中出現了 num[i]次&#xff0c;那么請你返回 true &#xff0c;否則返回 false 。 示例 1&#xff1a; 輸入&a…

SpringCloud系列(31)--使用Hystrix進行服務降級

前言&#xff1a;在上一章節中我們創建了服務消費者模塊&#xff0c;而本節內容則是使用Hystrix對服務進行服務降級處理。 1、首先我們先對服務提供者的服務進行服務降級處理 (1)修改cloud-provider-hystrix-payment8001子模塊的PaymentServiceImpl類 注&#xff1a;HystrixP…

學習elixir(1)

突然發現elixir很有趣&#xff0c;所以想記錄以下學習內容 # .ex .exs file elixir simple.exs # mix new <app_name> # mix deps.get; mix deps.update; mix deps.compile # 怎么使用mix escript.build # eg. 在mix.exs添加escript: [main_module: IntentionCLI, name:…

Window在VScode運行C/C++程序

首先說明&#xff1a;不同運行環境&#xff08;Linux/Window&#xff09;下的頭文件會有差異&#xff0c;要注意變換&#xff01;生成可執行文件 Window默認生成a.exe&#xff0c;Linux默認生成a.out # C源代碼 g test.cpp # C語言源代碼 g test.c 或 gcc test.c直接輸入a.ex…