HDFS最基础使用

文章目录

    • 一、简介
      • 1、定义
      • 2、HDFS优缺点
      • 3、HDFS组成架构
      • 4、HDFS文件块大小
    • 二、HDFS的读写流程
      • 1、HDFS写数据流程
      • 2、HDFS读数据流程
      • 3、网络拓扑-节点距离计算
      • 4、机架感知(副本存储节点选择)
    • 三、NameNode和SecondaryNameNode
      • 1、NN和2NN工作机制
      • 2、Fsimage和Edits解析
      • 3、CheckPoint时间设置
    • 四、DataNode
      • 1、DataNode工作机制
      • 2、数据完整性
      • 3、掉线时参数设置
    • 五、HDFS的Shell操作
      • 1、基本操作
      • 2、文件上传
      • 3、文件下载
    • 六、HDFS的API操作
      • 1、客户端环境准备
      • 2、HDFS的API操作
        • 2.1 获取链接
        • 2.2 上传文件
        • 2.3 下载文件
      • 3、参数配置
      • 3.1 代码配置
        • 3.2 配置文件配置


一、简介

1、定义

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS的使用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

2、HDFS优缺点

在这里插入图片描述

  • 缺点:
    • 不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
    • 2)无法高效的对大量小文件进行存储。
      • 存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的;
      • 小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
    • 不支持并发写入、文件随机修改。
      • 一个文件只能有一个写,不允许多个线程同时写;
      • 仅支持数据append(追加),不支持文件的随机修改。

3、HDFS组成架构

在这里插入图片描述

  • NameNode(nn):就是Master,它是一个主管、管理者。

(1)管理HDFS的名称空间;

(2)配置副本策略;

(3)管理数据块(Block)映射信息;

(4)处理客户端读写请求。

  • 2)DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。

(1)存储实际的数据块;

(2)执行数据块的读/写操作。

  • 3)Client:就是客户端。

(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传;

(2)与NameNode交互,获取文件的位置信息;

(3)与DataNode交互,读取或者写入数据;

(4)Client提供一些命令来管理HDFS,比如NameNode格式化;

(5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作;

  • 4)Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。

(1)辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode ;

(2)在紧急情况下,可辅助恢复NameNode。

4、HDFS文件块大小

在这里插入图片描述

  • 为什么块的大小不能设置太小,也不能设置太大?

(1)HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;

(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。

总结:HDFS块的大小设置主要取决于磁盘传输速率。

二、HDFS的读写流程

1、HDFS写数据流程

  1. 客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
  2. NameNode返回是否可以上传。
  3. 客户端请求第一个 Block上传到哪几个DataNode服务器上。
  4. NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
  5. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
  6. dn1、dn2、dn3逐级应答客户端。
  7. 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
  8. 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

在这里插入图片描述

2、HDFS读数据流程

  • 1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
  • 2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
  • 3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
  • 4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

在这里插入图片描述

3、网络拓扑-节点距离计算

  • 在HDFS写数据的过程中,NameNode会选择距离待上传数据最近距离的DataNode接收数据。
  • 节点距离:两个节点到达最近的共同祖先的距离总和。

在这里插入图片描述

4、机架感知(副本存储节点选择)

官方文档:http://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

源码说明:Crtl + n 查找BlockPlacementPolicyDefault,在该类中查找chooseTargetInOrder方法。

在这里插入图片描述

三、NameNode和SecondaryNameNode

1、NN和2NN工作机制

FsImage:产生在磁盘中备份元数据的文件。

Edits:只进行追加操作,效率很高。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。

如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。

在这里插入图片描述

  • NameNode启动

(1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode记录操作日志,更新滚动日志。
(4)NameNode在内存中对元数据进行增删改。

  • Secondary NameNode工作

(1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
(2)Secondary NameNode请求执行CheckPoint。
(3)NameNode滚动正在写的Edits日志。
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.chkpoint。
(7)拷贝fsimage.chkpoint到NameNode。
(8)NameNode将fsimage.chkpoint重新命名成fsimage。

2、Fsimage和Edits解析

NameNode被格式化之后,将在/opt/module/hadoop-3.1.3/data/tmp/dfs/name/current目录中产生如下文件:

fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION
  • Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。
  • Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中。
  • seen_txid文件保存的是一个数字,就是最后一个edits_的数字。
  • 每次NameNode启动的时候都会将Fsimage文件读入内存,加载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

oiv查看Fsimage文件

fsimage文件位置

cd /opt/module/hadoop-3.1.3/data/dfs/name/current/

在这里插入图片描述

解析fsimage,生成XML文件

#	语法
hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径
hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml

文件部分内容

<inode><id>16386</id><type>DIRECTORY</type><name>user</name><mtime>1512722284477</mtime><permission>atguigu:supergroup:rwxr-xr-x</permission><nsquota>-1</nsquota><dsquota>-1</dsquota>
</inode>
<inode><id>16387</id><type>DIRECTORY</type><name>atguigu</name><mtime>1512790549080</mtime><permission>atguigu:supergroup:rwxr-xr-x</permission><nsquota>-1</nsquota><dsquota>-1</dsquota>
</inode>
<inode><id>16389</id><type>FILE</type><name>wc.input</name><replication>3</replication><mtime>1512722322219</mtime><atime>1512722321610</atime><perferredBlockSize>134217728</perferredBlockSize><permission>atguigu:supergroup:rw-r--r--</permission><blocks><block><id>1073741825</id><genstamp>1001</genstamp><numBytes>59</numBytes></block></blocks>
</inode >

oev查看Edits文件

cd /opt/module/hadoop-3.1.3/data/dfs/name/current/
#	基本语法
hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
hdfs oev -p XML -i edits_0000000000000000363-0000000000000000363 -o /opt/module/hadoop-3.1.3/edits.xml

3、CheckPoint时间设置

配置文件:hdfs-default.xml

  • 通常情况下,SecondaryNameNode每隔一小时执行一次。
<!--  单位:秒 -->
<property><name>dfs.namenode.checkpoint.period</name><value>3600</value>
</property>
  • 一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。
<property><name>dfs.namenode.checkpoint.txns</name><value>1000000</value>
<description>操作动作次数</description>
</property><property><name>dfs.namenode.checkpoint.check.period</name><value>60</value>
<description> 1分钟检查一次操作次数</description>
</property>

四、DataNode

1、DataNode工作机制

  1. 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
  2. DataNode启动后向NameNode注册,通过后,周期性(6小时)的向NameNode上报所有的块信息。
  3. 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟+30秒没有收到某个DataNode的心跳,则认为该节点不可用。
  4. 集群运行中可以安全加入和退出一些机器。

在这里插入图片描述

DN向NN汇报当前解读信息的时间间隔,默认6小时

<property><name>dfs.blockreport.intervalMsec</name><value>21600000</value><description>Determines block reporting interval in milliseconds.</description>
</property>

DN扫描自己节点块信息列表的时间,默认6小时

<!--  单位:秒 -->
<property><name>dfs.datanode.directoryscan.interval</name><value>21600</value><description>Interval in seconds for Datanode to scan data directories and reconcile the difference between blocks in memory and on the disk.Support multiple time unit suffix(case insensitive), as describedin dfs.heartbeat.interval.</description>
</property>

2、数据完整性

DataNode节点保证数据完整性的方法。

  • (1)当DataNode读取Block的时候,它会计算CheckSum。
  • (2)如果计算后的CheckSum,与Block创建时值不一样,说明Block已经损坏。
  • (3)Client读取其他DataNode上的Block。
  • (4)常见的校验算法crc(32),md5(128),sha1(160)。
  • (5)DataNode在其文件创建后周期验证CheckSum。

在这里插入图片描述

3、掉线时参数设置

在这里插入图片描述

hdfs-site.xml:配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。

<property><name>dfs.namenode.heartbeat.recheck-interval</name><value>300000</value>
</property><property><name>dfs.heartbeat.interval</name><value>3</value>
</property>

五、HDFS的Shell操作

1、基本操作

  • fs:查看所有命令
hadoop fs
  • -help :查看rm帮助内容
hadoop fs -help rm
  • -ls: 显示目录信息
hadoop fs -ls /test01
  • -cat:显示文件内容
hadoop fs -cat /test01/test01.txt
  • -chgrp-chmod-chown:Linux文件系统中的用法一样,修改文件所属权限
hadoop fs -chmod 777 /test01/test01.txt
hadoop fs -chown lydms:lydms /test01/test01.txt

在这里插入图片描述

  • -mkdir:创建路径
hadoop fs -mkdir /test02
  • -cp:从HDFS的一个路径拷贝到HDFS的另一个路径
hadoop fs -cp /test01/test01.txt /test02
  • -mv:在HDFS目录中移动文件
hadoop fs -mv /test01/test.txt /test02
  • -tail:显示一个文件的末尾1kb的数据
hadoop fs -tail /test01/test01.txt
  • -rm:删除文件或文件夹
hadoop fs -rm /test01/test02.txt
  • -rm -r:递归删除目录及目录里面内容
hadoop fs -rm -r -f /test02

在这里插入图片描述

  • -du:统计文件夹的大小信息
hadoop fs -du /test01

在这里插入图片描述

  • -setrep:设置HDFS中文件的副本数量
hadoop fs -setrep 10 /test01/test01.txt

在这里插入图片描述

2、文件上传

-moveFromLocal:将本地文件test.txt剪切到Hadoop中test01目录下

hadoop fs -moveFromLocal ./test.txt /test01

-copyFromLocal:将本地文件test01复制到Hadoop中test01目录下

hadoop fs -copyFromLocal ./test01.txt /test01

-put:等同于-copyFromLocal。将本地文件test02复制到Hadoop中test01目录下

hadoop fs -put ./test02.txt /test01

-appendToFile:追加一个文件到已经存在的文件末尾

hadoop fs -appendToFile ./test03.txt /test1/test01.txt

3、文件下载

-copyToLocal:从HDFS拷贝到本地

hadoop fs -copyToLocal /test01/test01.txt /home/lydms/

在这里插入图片描述

-get:等同于copyToLocal,生产环境更习惯用get

hadoop fs -get /test01/test02.txt ./

六、HDFS的API操作

1、客户端环境准备

下载软件到本地

wget https://gitcode.net/weixin_44624117/software/-/blob/master/software/Linux/Hadoop/hadoop-3.1.3.tar.gz

添加环境变量:

vim /etc/profile
#	添加内容
#HADOOP_HOME
export HADOOP_HOME=/Users/liyangda/file/linux/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin

执行检测

source /etc/profile
#	查看是否添加成功
hadoop

2、HDFS的API操作

2.1 获取链接
  • 方式一:
/*** 创建连接:方式一*/
@Test
public void getConn01() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();// 配置在集群上运行FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:8020"),configuration,"lydms");
}
  • 方式二(没用过):
/*** 创建连接:方式二*/
@Test
public void getConn02() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();// 配置在集群上运行configuration.set("fs.defaultFS", "hdfs://hadoop101:8020");FileSystem fs = FileSystem.get(configuration);
}

运行时需要配置用户名称(默认是使用windows用户名操作HDFS)

客户端去操作HDFS时,是有一个用户身份的。默认情况下,HDFS客户端API会从JVM中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=lydms

在这里插入图片描述

2.2 上传文件
/*** 上传文件*/
@Test
public void testCopyFromLocalFile() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:8020"), configuration, "lydms");// 2 上传文件fs.copyFromLocalFile(new Path("/Users/liyangda/Code/DemoProject/first-scala/src/main/resources/test03.txt"), new Path("/test01"));// 3 关闭资源fs.close();
}
2.3 下载文件
/*** 下载文件*/
@Test
public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:8020"), configuration, "lydms");// 2 执行下载操作// boolean delSrc 指是否将原文件删除// Path src 指要下载的文件路径// Path dst 指将文件下载到的路径// boolean useRawLocalFileSystem 是否开启文件校验fs.copyToLocalFile(false, new Path("/test01/test01.txt"), new Path("/Users/liyangda/Code/DemoProject/first-scala/src/main/resources"), true);// 3 关闭资源fs.close();
}

3、参数配置

3.1 代码配置

@Test
public void test01() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();//  配置副本数configuration.set("dfs.replication", "2");FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:8020"), configuration, "lydms");// 2 上传文件fs.copyFromLocalFile(new Path("src/main/resources/test05.txt"), new Path("/test01"));// 3 关闭资源fs.close();
}
3.2 配置文件配置

配置文件:Resource目录下hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><property><name>dfs.replication</name><value>10</value></property>
</configuration>

代码

@Test
public void test01() throws IOException, InterruptedException, URISyntaxException {// 1 获取文件系统Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://hadoop101:8020"), configuration, "lydms");// 2 上传文件fs.copyFromLocalFile(new Path("src/main/resources/test05.txt"), new Path("/test01"));// 3 关闭资源fs.close();
}

结果

在这里插入图片描述

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

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

相关文章

Linux关于gittee的远端仓库的连接和git三板斧

目录 1.网页操作 2.Linux操作 查看Linux系统中是否安装git指令 安装git指令 链接远端仓库 设置 .gitignore文件 3.git三板斧 1.网页操作 首先我们要在gittee建立一个仓库 这是我自己的勾选方案&#xff0c;大家可以参考一下。 这个方案勾选最下面的三个选项才有&#x…

java图书管理系统

一、 引言 图书管理系统是一个用于图书馆或书店管理图书信息、借阅记录和读者信息的应用程序。本系统使用Java Swing框架进行开发&#xff0c;提供直观的用户界面&#xff0c;方便图书馆管理员或书店工作人员对图书信息进行管理。以下是系统的设计、功能和实现的详细报告。 二…

最新整理源码面试题

经典框架源码面试题 Lecture&#xff1a;波哥 1.谈谈你对框架的理解 1.1 框架的作用 JavaWeb中的框架是一种开发工具或者平台&#xff0c;它提供了一系列的功能和组件&#xff0c;用于简化和加速Web应用的开发过程。框架可以提供一些基础设施&#xff0c;如数据库访问、用户认…

ISP图像信号处理——白平衡校正和标定介绍以及C++实现

从数码相机直接输出的未经过处理过的RAW图到平常看到的JEPG图有一系列复杂的图像信号处理过程&#xff0c;称作ISP&#xff08;Image Signal Processing&#xff09;。这个过程会经过图像处理和压缩。 参考文章1&#xff1a;http://t.csdn.cn/LvHH5 参考文章2&#xff1a;htt…

基于蜉蝣优化的BP神经网络(分类应用) - 附代码

基于蜉蝣优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蜉蝣优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果&#xff1a;5.M…

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案&#xff0c;通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID&#xff0c;官网&#xff1a;https://www.microsoft.com/zh-cn/security/b…

【多任务案例:猫狗脸部定位与分类】

【猫狗脸部定位与识别】 1 引言2 损失函数3 The Oxford-IIIT Pet Dataset数据集4 数据预处理4 创建模型输入5 自定义数据集加载方式6 显示一批次数据7 创建定位模型8 模型训练9 绘制损失曲线10 模型保存与预测 1 引言 猫狗脸部定位与识别分为定位和识别&#xff0c;即定位猫狗…

通过 HelpLook ChatBot AI自动问答机器人降低客户服务成本

在当今竞争激烈的商业环境中&#xff0c;提供卓越的客户服务对于维持忠诚的客户群和推动业务增长至关重要。客户服务涵盖了公司与其客户之间的所有互动&#xff0c;包括解答问题、解决问题和提供支持。它在塑造客户对品牌的看法方面起着关键作用&#xff0c;并且可以显著影响他…

C语言判断语句

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 下面…

react create-react-app v5 从零搭建(使用 npm run eject)

前言&#xff1a; 好久没用 create-react-app做项目了&#xff0c;这次为了个h5项目&#xff0c;就几个页面&#xff0c;决定自己搭建一个&#xff08;ps:mmp 好久没用&#xff0c;搭建的时候遇到一堆问题&#xff09;。 我之前都是使用 umi 。后台管理系统的项目 使用 antd-…

DevExpress ChartControl 画间断线

效果如下&#xff1a; 解决办法&#xff1a;数据源间断位置加入double.NaN demo下载

动态链接那些事

1、为什么要动态链接 1.1 空间浪费 对于静态链接来说&#xff0c;在程序运行之前&#xff0c;会将程序所需的所有模块编译、链接成一个可执行文件。这种情况下&#xff0c;如果 Program1 和 Program2 都需要用到 Lib.o 模块&#xff0c;那么&#xff0c;内存中和磁盘中实际上就…

Sui第五轮资助: 17个项目共获105万美元资助金

近日&#xff0c;Sui基金会宣布17个项目获得了105万美元的资助&#xff0c;用于建设项目以推动Sui的采用和发展。要获得资助&#xff0c;项目必须提交详细的提案&#xff0c;说明构建的项目、预算明细、关键里程碑、团队经验&#xff0c;以及对Sui社区的预期贡献。了解更多Sui资…

Azure Arc 概要:功能、管理和应用场景详解,AZ900 考点示例

文章目录 本文大纲一、什么是 Azure Arc二、使用 Azure Arc 可以做什么操作三、使用 Azure Arc 可以管理什么资源3.1 如何使用Azure Arc与服务器? 四、Azure Arc 支持的主要场景五、在 AZ900 中的考点示例5.1 示例题 15.2 示例题 2 本文大纲 本文思维导图概述的主要内容&…

已解决 Bug——IndexError: index 3 is out of bounds for axis 0 with size 3问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

软件工程与计算总结(二)软件工程的发展

本章开始介绍第二节内容&#xff0c;主要是一些历史性的东西~ 一.软件工程的发展脉络 1.基础环境因素的变化及其对软件工程的推动 抽象软件实体和虚拟计算机都是软件工程的基础环境因素&#xff0c;它们能从根本上影响软件工程的生产能力&#xff0c;而且是软件工程无法反向…

十四天学会C++之第三天(数组和字符串)

1. 数组的定义和初始化 数组是一种由相同数据类型的元素组成的集合&#xff0c;这些元素按照一定的顺序存储在连续的内存位置上。数组的大小在创建时是固定的&#xff0c;无法在运行时改变。 在C中&#xff0c;数组的定义和声明非常简单。定义一个数组&#xff1a; 数据类型…

vtk 动画入门 1 代码

实现效果如图&#xff1a; #include <vtkAutoInit.h> //VTK_MODULE_INIT(vtkRenderingOpenGL2); //VTK_MODULE_INIT(vtkInteractionStyle); VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); //VTK_MODULE_INIT(vtkRenderingFreeType); #in…

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…

YTM32的电源管理与低功耗系统详解

YTM32的电源管理与低功耗系统详解 苏勇&#xff0c;2023年10月 文章目录 YTM32的电源管理与低功耗系统详解缘起原理与机制电源管理模型的功耗模式正常模式&#xff08;Normal&#xff09;休眠模式&#xff08;Sleep&#xff09;深度休眠模式&#xff08;DeepSleep&#xff09;…