CentOS 7 安装部署Cassandra4.1.5

一、Cassandra的介绍

        Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存收件箱等简单格式数据,集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源,此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为了一种流行的分布式结构化数据存储方案。

        Cassandra的官网:Apache Cassandra | Apache Cassandra Documentation

Cassandra特点

  • 弹性可扩展性 - Cassandra是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。

  • 始终基于架构 - Cassandra没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。
  • 快速线性性能 - Cassandra是线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间。
  • 灵活的数据存储 - Cassandra适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。
  • 便捷的数据分发 - Cassandra通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。
  • 事务支持 - Cassandra支持属性,如原子性,一致性,隔离和持久性(ACID)。
  • 快速写入 - Cassandra被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。

二、Cassandra下载、安装、访问

进入下载页后,选择最新稳定版本4.1.5

三、Cassandra 安装部署

1、安装准备

注意:Cassandra 使用 JAVA 语言开发,首先保证当前机器中已经安装 JDK 11 or JDK 8

# 安装JDK 11 # yum install java-11-openjdk -y# java -version

注意:Cassandra的客户端的使用需要用的Python3版本。需要先安装Python3

# 安装python3 # yum install python3 -y# python3 -V

2、部署Cassandra

# 解压
# tar -zxvf apache-cassandra-4.1.5-bin.tar.gz# 重命名
# mv apache-cassandra-4.1.5 apache-cassandra

配置 Cassandra

进入解压后的目录,创建3个 Cassandra 的数据文件夹

# mkdir data
# mkdir commitlog
# mkdir saved-caches

修改配置文件

在 conf 目录中找到 cassandra.yaml 配置文件,配置上面创建的3个数据目录

  • 配置 data_file_directories
data_file_directories:- /home/Cassandra/apache-cassandra/data
  • 配置 commitlog_directory
commitlog_directory: /home/Cassandra/apache-cassandra/commitlog
  • 配置 saved_caches_directory
saved_caches_directory: /home/Cassandra/apache-cassandra/saved_caches
  • 配置 RPC,用于客户端连接
rpc_address: 192.168.204.131

 3、启动 Cassandra

[root@localhost apache-cassandra]# pwd
/home/Cassandra/apache-cassandra
[root@localhost apache-cassandra]# ./bin/cassandra -R

输入命令来查看正在运行的cassandra的 pid

ps -ef|grep cassandra

显示如图,pid 是 11733: 

4、关闭Cassandra

刚才已经查到了 pid,现在可以使用命令杀掉这个pid对应的进程

kill -9 11733

5、查看状态

[root@localhost apache-cassandra]# ./bin/nodetool status

如果cassandra启动出错,可以在bin目录下 使用 journalctl -u cassandra 命令查看

[root@localhost apache-cassandra]# cd bin
[root@localhost bin]# journalctl -u cassandra
# 问题
[root@localhost bin]# ./nodetool status
nodetool: Failed to connect to '127.0.0.1:7199' - URISyntaxException: 'Malformed IPv6 address at index 7: rmi://[127.0.0.1]:7199'.# 解决办法
[root@localhost bin]# ./nodetool -Dcom.sun.jndi.rmiURLParsing=legacy status
[root@localhost bin]# ./nodetool -h ::FFFF:127.0.0.1 status

6、客户端连接服务器

进入Cassandra的目录,输入

[root@localhost apache-cassandra]# ./bin/cqlsh 192.168.204.131 9042
Connected to Test Cluster at 192.168.204.131:9042
[cqlsh 6.1.0 | Cassandra 4.1.5 | CQL spec 3.4.6 | Native protocol v5]
Use HELP for help.
cqlsh>

上面的操作在启动cqlsh的时候并没有指定需要连接的节点以及端口,默认 cqlsh 会自动探测本机及端口。上面的操作时已经启动了 Cassandra 服务并绑定相关端口,注:【 端口列表】,cqlsh默认就会连接本机的9042端口。

从上面的命令可以看出 cqlsh 连接到名为 Test Cluster 的集群,这个名字是默认值,可以自定义,配置在 conf/cassandra.yaml 文件的 cluster_name 参数,注:【yaml全内容】

输入quit退出客户端

Cassandra的端口

7199 - JMX
7000 - 节点间通信(如果启用了TLS,则不使用)
7001 - TLS节点间通信(使用TLS时使用)
9160 - Thrift客户端API
9042 - CQL本地传输端口

7、服务运行脚本

为了方便管理,可以编写脚本来管理,在 /home/Cassandra/apache-cassandra 下创建一个 startme.sh,输入一下内容:

#!/bin/sh
CASSANDRA_DIR="/home/Cassandra/apache-cassandra"echo "************cassandra***************"
case "$1" instart)echo "*                                  *"echo "*            starting              *"nohup $CASSANDRA_DIR/bin/cassandra -R >> $CASSANDRA_DIR/logs/system.log 2>&1 &echo "*            started               *"echo "*                                  *"echo "************************************";;stop)echo "*                                  *"echo "*           stopping               *"PID_COUNT=`ps aux |grep CassandraDaemon |grep -v grep | wc -l`PID=`ps aux |grep CassandraDaemon |grep -v grep | awk {'print $2'}`if [ $PID_COUNT -gt 0 ];thenecho "*           try stop               *"kill -9 $PIDecho "*          kill  SUCCESS!          *"elseecho "*          there is no !           *"echo "*                                  *"echo "************************************"fi;;restart)echo "*                                  *"echo "*********     restarting      ******"$0 stop$0 startecho "*                                  *"echo "************************************";;status)$CASSANDRA_DIR/bin/nodetool status;;*)echo "Usage:$0 {start|stop|restart|status}"exit 1
esac

接下来就可以使用这个脚本进行 启动,重启,关闭 的操作

[root@localhost apache-cassandra]# sh startme.sh start
[root@localhost apache-cassandra]# sh startme.sh restart
[root@localhost apache-cassandra]# sh startme.sh stop

四、Cassandra根据用户名密码登录cqlsh

修改conf目录下cassandra.yaml文件

authenticator: PasswordAuthenticator  //将authenticator修改为PasswordAuthenticator  

重新启动cassandra并且根据默认用户登录cqlsh,用户名密码都是cassandra

[root@localhost apache-cassandra]# ./bin/cqlsh 192.168.204.131 9042 -ucassandra -pcassandraWarning: Using a password on the command line interface can be insecure.
Recommendation: use the credentials file to securely provide the password.Connected to Test Cluster at 192.168.204.131:9042
[cqlsh 6.1.0 | Cassandra 4.1.5 | CQL spec 3.4.6 | Native protocol v5]
Use HELP for help.
cassandra@cqlsh> 

如果要修改默认用户,进入cqlsh后

#超级用户可以更改用户的密码或超级用户身份。为了防止禁用所有超级,超级用户不能改变自己的超级用户身份。普通用户只能改变自己的密码。附上用户名在单引号如果它包含非字母数字字符。附上密码在单引号。
CREATE USER test WITH PASSWORD '123456' SUPERUSER;  //创建一个超级用户
CREATE USER test1 WITH PASSWORD '123456' NOSUPERUSER;  //创建一个普通用户
ALTER USER test WITH PASSWORD '654321' ( NOSUPERUSER | SUPERUSER ) //修改用户
DROP USER cassandra //删除默认用户

五、Cassandra的基本概念

1、数据模型

1.1列(Column)

列是Cassandra的基本数据结构单元,具有三个值:名称,值、时间戳

在Cassandra中不需要预先定义列(Column),只需要在KeySpace里定义列族,然后就可以开始写数据了。

1.2列族( Column Family)

列族相当于关系数据库的表(Table),是包含了多行(Row)的容器。

1.3建空间 (KeySpace)

Cassandra的键空间(KeySpace)相当于数据库,我们创建一个键空间就是创建了一个数据库。

2、数据类型

2.1数值类型

2.2文本类型

CQL提供2种类型存放文本类型,text和varchar基本一致

2.3时间类型

2.4标识符类型

2.5集合类型

set

集合数据类型,set 里面的元素存储是无序的。

set 里面可以存储前面介绍的数据类型,也可以是用户自定义数据类型,甚至是其他集合类型。

list

list 包含了有序的列表数据,默认情况下,数据是按照插入顺序保存的。

map

map 数据类型包含了 key/value 键值对。key 和 value 可以是任何类型,除了 counter 类型

使用集合类型要注意: 1、集合的每一项最大是64K。 2、保持集合内的数据不要太大,免得Cassandra 查询延时过长,Cassandra 查询时会读出整个集合内的数据,集合在内部不会进行分页,集合的目的是存储小量数据。 3、不要向集合插入大于64K的数据,否则只有查询到前64K数据,其它部分会丢失。

2.6其他基本类型 

3、数据定义命令

4、数据操作指令

5、查询指令

六、Cassandra的基本操作

1、操作键空间

1.1创建Keyspace

语法
CREATE KEYSPACE <identifier> WITH <properties>;更具体的语法:
Create keyspace KeyspaceName with replicaton={'class':strategy name,   
'replication_factor': No of replications on different nodes};

要填写的内容:

KeyspaceName 代表键空间的名字

strategy name 代表副本放置策略,内容包括:简单策略、网络拓扑策略,选择其中的一个。

No of replications on different nodes 代表 复制因子,放置在不同节点上的数据的副本数。

编写完成的创建语句 创建一个键空间名字为:school,副本策略选择:简单策略 SimpleStrategy,副本因子:3

CREATE KEYSPACE school WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

1.2连接Keyspace

语法
USE <identifier>;

1.3修改键空间

语法
ALTER KEYSPACE <identifier> WITH <properties>

1.4删除键空间

语法
DROP KEYSPACE <identifier>

2、操作表、索引

2.1查看键空间下所有表 代码

DESCRIBE TABLES;

2.2创建表

语法
CREATE (TABLE | COLUMNFAMILY) <tablename> ('<column-definition>' , '<column-definition>')
(WITH <option> AND <option>)

完整创建表语句,创建student 表,student包含属性如下: 学生编号(id), 姓名(name),年龄(age),性别(gender),家庭地址(address),interest(兴趣),phone(电话号码),education(教育经历) id 为主键,并且为每个Column选择对应的数据类型。 注意:interest 的数据类型是set ,phone的数据类型是list,education 的数据类型是map

CREATE TABLE student(id int PRIMARY KEY,  name text,  age int,  gender tinyint,  address text ,interest set<text>,phone list<text>,education map<text, text>
);

2.3cassandra的索引(KEY)

Cassandra的5种Key
  1. Primary Key
  2. Partition Key
  3. Composite Key
  4. Compound Key
  5. Clustering Key

1)Primary Key

是用来获取某一行的数据, 可以是单一列(Single column Primary Key)或者多列(Composite Primary Key)。

在 Single column Primary Key 决定这一条记录放在哪个节点。create table testTab (
id int PRIMARY KEY,
name text
);

2)Composite Primary Key

如果 Primary Key 由多列组成,那么这种情况称为 Compound Primary Key 或 Composite Primary Key。

create table testTab (
key_one int,
key_two int,
name text,
PRIMARY KEY(key_one, key_two)
);

3)Partition Key

在组合主键的情况下(上面的例子),第一部分称作Partition Key(key_one就是partition key),第二部分是CLUSTERING KEY(key_two)

Cassandra会对Partition key 做一个hash计算,并自己决定将这一条记录放在哪个节点。

如果 Partition key 由多个字段组成,称之为 Composite Partition key

create table testTab (
key_part_one int,
key_part_two int,
key_clust_one int,
key_clust_two int,
key_clust_three uuid,
name text,
PRIMARY KEY((key_part_one,key_part_two), key_clust_one, key_clust_two, key_clust_three)
);

4)Clustering Key

决定同一个分区内相同 Partition Key 数据的排序,默认为升序,可以在建表语句里面手动设置排序的方式

2.4修改表结构

添加列,语法
ALTER TABLE table name ADD  new column datatype;删除列,语法
ALTER table name DROP columnname;

2.5删除表

语法
DROP TABLE <tablename>

2.6清空表

语法
TRUNCATE <tablename>

2.7创建索引

普通列创建索引
CREATE INDEX <identifier> ON <tablename>集合列创建索引
CREATE INDEX ON student(interest);                 -- set集合添加索引
CREATE INDEX mymap ON student(KEYS(education));          -- map结合添加索引效果:

2.8 删除索引

语法
DROP INDEX <identifier>

3、查询数据

使用 SELECT 、WHERE、LIKE、GROUP BY 、ORDER BY等关键词
SELECT FROM <tablename>
SELECT FROM <table name> WHERE <condition>;

查询时使用索引

  • Primary Key 只能用 = 号查询
  • 第二主键 支持= > < >= <=
  • 索引列 只支持 = 号
  • 非索引非主键字段过滤可以使用ALLOW FILTERING

ALLOW FILTERING是一种非常消耗计算机资源的查询方式。 如果表包含例如100万行,并且其中95%具有满足查询条件的值,则查询仍然相对有效,这时应该使用ALLOW FILTERING。

如果表包含100万行,并且只有2行包含满足查询条件值,则查询效率极低。Cassandra将无需加载999,998行。如果经常使用查询,则最好在列上添加索引。

ALLOW FILTERING在表数据量小的时候没有什么问题,但是数据量过大就会使查询变得缓慢。

查询时排序

cassandra也是支持排序的,order by。 排序也是有条件的

  • 必须有第一主键的=号查询,cassandra的第一主键是决定记录分布在哪台机器上,cassandra只支持单台机器上的记录排序。
  • 只能根据第二、三、四…主键进行有序的,相同的排序。
  • 不能有索引查询,cassandra的任何查询,最后的结果都是有序的,内部就是这样存储的。

分页查询 

使用limit 关键字来限制查询结果的条数 进行分页

4、添加数据

语法
INSERT INTO <tablename>(<column1 name>, <column2 name>....) VALUES (<value1>, <value2>....) USING <option>

5、更新列数据

更新表中的数据,可用关键字:

  • Where - 选择要更新的行
  • Set - 设置要更新的值
  • Must - 包括组成主键的所有列

在更新行时,如果给定行不可用,则UPDATE创建一个新行

语法
UPDATE <tablename>
SET <column name> = <new value>
<column name> = <value>....
WHERE <condition>
更新简单数据
把id = 1012 的数据的gender列 的值改为1,代码:UPDATE student set gender = 1 where id= 1012;
更新set类型数据
在student中interest列是set类型1)添加一个元素
使用UPDATE命令 和 ‘+’ 操作符代码:
UPDATE student SET interest = interest + {'游戏'} WHERE id = 1012;2)删除一个元素
使用UPDATE命令 和 ‘-’ 操作符代码:
UPDATE student SET interest = interest - {'电影'} WHERE id = 1012;3)删除所有元素
可以使用UPDATA或DELETE命令,效果一样代码:
UPDATE student SET interest = {} WHERE id = 1012;
或
DELETE interest FROM student WHERE id = 1012;
更新list类型数据
使用UPDATA命令向list插入值
代码:
UPDATE student SET phone = ['020-66666666', '13666666666'] WHERE id = 1012;在list前面插入值
代码:
UPDATE student SET phone = [ '030-55555555' ] + phone WHERE id = 1012;在list后面插入值
代码:
UPDATE student SET phone = phone + [ '040-33333333' ]  WHERE id = 1012;使用列表索引设置值,覆盖已经存在的值
这种操作会读入整个list,效率比上面2种方式差现在把phone中下标为2的数据,也就是 “13666666666”替换,代码:
UPDATE student SET phone[2] = '050-22222222' WHERE id = 1012;【不推荐】使用DELETE命令和索引删除某个特定位置的值
非线程安全的,如果在操作时其它线程在前面添加了一个元素,会导致移除错误的元素代码:
DELETE phone[2] FROM student WHERE id = 1012;【推荐】使用UPDATE命令和‘-’移除list中所有的特定值
代码:
UPDATE student SET phone = phone - ['020-66666666'] WHERE id = 1012;
更新map类型数据
map输出顺序取决于map类型。1)使用Insert或Update命令
UPDATE student SET education={'中学': '城市第五中学', '小学': '城市第五小学'} WHERE id = 1012;2)使用UPDATE命令设置指定元素的value
UPDATE student SET education['中学'] = '爱民中学' WHERE id = 1012;3)可以使用如下语法增加map元素。如果key已存在,value会被覆盖,不存在则插入
UPDATE student SET education = education + { '幼儿园' : '大海幼儿园', '中学': '科技路中学'} WHERE id = 1012;4)删除元素
可以用DELETE 和 UPDATE 删除Map类型中的数据使用DELETE删除数据
DELETE education['幼儿园'] FROM student WHERE id = 1012;使用UPDATE删除数据
UPDATE student SET education=education - {'中学','小学'} WHERE id = 1012;

6、删除行

语法
DELETE FROM <identifier> WHERE <condition>;

7、批量操作

把多次更新操作合并为一次请求,减少客户端和服务端的网络交互。 batch中同一个partition key的操作具有隔离性

SQL语法使用BATCH,您可以同时执行多个修改语句(插入,更新,删除)BEGIN BATCH
<insert-stmt>/ <update-stmt>/ <delete-stmt>
APPLY BATCHJAVA语法@Resource
private CassandraTemplate cassandraTemplate;// 批量插入
public void insert(){CassandraBatchOperations batchOps = cassandraTemplate.batchOps();batchOps.insert(List<entity>);batchOps.execute();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法设计与分析:分治法求最近点对问题

目录 一、实验目的 二、实验内容 三、算法思想 四、实验步骤 1、蛮力法 2、分治法 2.1 先用快速排序SortX(A,1,n)将所有点按x坐标升序排序 2.2 点数n<3时直接计算&#xff0c;时间复杂度为O(1) 2.3 点数n>3时 五、实验结果和分析 一、实验目的 1. 掌握分治法思…

ArkUI部分案例笔记——padding,space

基础的构建 组件分类&#xff1a; 容器组件&#xff1a;像Column&#xff0c;Row这种组件就是容器组件一般就来控制行和列的就是容器组件 基础组件&#xff1a;Text(文本组件)&#xff0c;像这种用来有一定功能的就是基础组件 注意&#xff1a;一个build只能有一个根容器组件…

苹果智能和人工智能最大化

苹果智能和人工智能最大化 除了苹果公司&#xff0c;还没有人真正使用过苹果的智能功能。它要到秋天才会分阶段发布&#xff0c;即使到那时&#xff0c;它也无法在80%或90%的iPhone安装基础上运行&#xff0c;因为它需要只有iPhone 15 Pro才能使用的设备上处理功能。没有什么能…

海南聚广众达电子商务咨询有限公司抖音电商新标杆

在数字经济的浪潮中&#xff0c;抖音电商正成为一股不可忽视的力量。海南聚广众达电子商务咨询有限公司&#xff0c;作为专注于抖音电商服务的领军企业&#xff0c;凭借其专业的团队和创新的思维&#xff0c;不断助力商家在抖音平台上实现商业价值的最大化。 海南聚广众达电子…

Github上传大于100M的文件(ubuntu教程)

安装Git-lfs Git Large File Storage (LFS) 使用 Git 内部的文本指针替换音频样本、视频、数据集和图形等大文件&#xff0c;同时将文件内容存储在 GitHub.com 或 GitHub Enterprise 等远程服务器上。官网下载&#xff1a;https://git-lfs.github.com/ ./install.sh上传 比如…

基于SpringBoot+Vue大学生网络教学平台设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

LLC开关电源开发:第四节,LLC软件设计报告

LLC源代码链接 数控全桥LLC开发板软件设计报告  1. LLC硬件及软件框架2. LLC软件设计2.1 工程文件说明2.2 LLC中断设计2.2.1 20us中断2.2.2 5ms中断 2.3 LLC状态机设计2.3.1 初始化状态2.3.2 空闲状态2.3.3 软启动状态2.3.4 正常运行状态2.3.5 故障状态 2.4 环路设计2.4.1 环路…

机器学习课程复习——逻辑回归

1. 激活函数 Q:激活函数有哪些? SigmoidS型函数Tanh 双曲正切函数

Nature Climate Change | 气候变暖会造成未来全球干旱区面积扩张?

在气候变暖的情况下&#xff0c;旱地通常被预测将在全球范围内扩大&#xff0c;旱地包括以水资源有限、植被稀疏为特征的土地区域。然而&#xff0c;这种预测依赖于旱地的大气代用物&#xff0c;即干旱指数。最近的研究表明&#xff0c;干旱指数对陆地水循环的各种组成部分的预…

设计模式1-简介

设计模式简介 专栏的目的什么是设计模式设计模式要学什么软件开发原则主流设计模式 学习建议经典面试题 资源 专栏的目的 1.理解松耦合的设计思想 2.掌握面向对象设计原则 3.掌握重构技法改善设计 4.掌握GOF核心设计模式 什么是设计模式 每一个模式描述了一个在我们周围不…

公共 IP 地址和私有 IP 地址的区别总结

什么是IP地址&#xff1f; IP 地址&#xff0c;即互联网协议地址&#xff08;Internet Protocol Address&#xff09;&#xff0c;是网络设备在网络中进行通信的标识。IP 地址可以看作是设备在网络中的“地址”&#xff0c;有助于数据包在网络中找到正确的接收端。IP 地址主要…

基于大型语言模型的全双工语音对话方案

摘要解读 我们提出了一种能够以全双工方式运行的生成性对话系统&#xff0c;实现了无缝互动。该系统基于一个精心调整的大型语言模型&#xff08;LLM&#xff09;&#xff0c;使其能够感知模块、运动功能模块以及一个具有两种状态&#xff08;称为神经有限状态机&#xff0c;n…

Vue: Module “vue“ has no exported member xxx

这个问题让我困扰了好一会儿&#xff0c;我询问了 chatgpt 和各种网站社区&#xff0c;尝试了切换依赖的版本&#xff0c;清除缓存等等&#xff0c;依然没有解决 不过算是有心栽花花不开&#xff0c;无心插柳柳成荫&#xff0c;碰巧解决了&#xff0c;也不知道是不是这个原因&a…

Win11下安装VS2022失败的解决办法

前几天我把我的HP Z840的操作系统换成了Win11&#xff0c;在重装VS2022时遇到了麻烦&#xff0c;提示无法安装 Microsoft.VisualStudio.Devenv.Msi。 查看安装日志提示&#xff1a;Could not write value devenv.exe to key \SOFTWARE\Microsoft\Internet Explorer\Main\Featur…

轻松获取指定日期所在周的周一和周日

哈喽&#xff0c;大家好呀&#xff0c;好久不见&#xff01;今天是一篇浅记。根据传入日期自动获取所在周一和周日… 正常基操方法&#xff0c;根据传入日期自动获取所在周一和周日。注意传入日期是周日的情况哈&#xff0c;需要往前推7天才是周一。 楼主方法中已处理&#xf…

57.SAP MII产品介绍(07)功能详解(06)Workbench-SQLQuery

1.SQLQuery概念 您可以使用SAP Manufacturing Integration and Intelligence&#xff08;SAP MII&#xff09;Workbench中的SQLQuery来创建访问面向SQL的连接器&#xff08;如IDBC连接器&#xff09;的模板。此查询的扩展名为tqsq。 简而言之&#xff0c;SQLQuery就是一段…

计算机系统基础实训七-MallocLab实验

实验目的与要求 1、让学生理解动态内存分配的工作原理&#xff1b; 2、让学生应用指针、系统级编程的相关知识&#xff1b; 3、让学生应用各种动态内存分配器的实现方法&#xff1b; 实验原理与内容 &#xff08;1&#xff09;动态内存分配器基本原理 动态内存分配器维护…

细说MCU的ADC模块单通道单次采样的实现方法

目录 一、工程依赖的硬件 二、设计目的 三、建立工程 1、配置GPIO 2、配置中断 3、配置串口 4、配置ADC 5、选择时钟源和Debug 6、配置系统时钟和ADC时钟 四、设置采样频率 五、代码修改 1、重定义外部中断回调函数 2、启动ADC 3、配置printf函数 六、运行并…

mysql5.7windows安装修改密码

mysql5.7windows安装修改密码 1.首先下载Windows 64位安装包2.安装服务3.my.ini4.初始化4.做成Windows服务5.重置密码 1.首先下载Windows 64位安装包 2.安装服务 双击运行安装服务&#xff0c;一直next&#xff1b; 在Choose Setup Type界面中 选择Custom选项&#xff0c;意思…

头歌资源库(14)残缺棋盘

一、 问题描述 二、算法思想 首先&#xff0c;将2^k 2^k的棋盘划分为四个相等大小的子棋盘&#xff0c;定义为左上、左下、右上和右下四个子棋盘。 然后&#xff0c;根据残缺格的坐标&#xff0c;确定其中一个子棋盘是不完整的&#xff0c;即残缺子棋盘。假设残缺子棋盘是左…