第12章 动态内存
对象的生命周期:
全局对象在程序启动时分配,结束时销毁。
局部对象在进入程序块时创建,离开块时销毁。
局部static对象在第一次使用前分配,在程序结束时销毁。
动态分配对象:只能显式地被释放。
对象的内存位置:
静态内存用来保存局部static对象、类static对象、定义在任何函数之外的变量。
栈内存用来保存定义在函数内的非static对象。
堆内存,又称自由空间,用来存储动态分配的对象。
如果忘记释放内存就会产生内存泄漏;如果在尚有指针引用的情况下就释放就会产生引用非法内存的指针。
动态内存与智能指针
动态内存管理:
new:在动态内存中为对象分配空间并返回一个指向该对象的指针。
delete:接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。
智能指针:
管理动态对象。
行为类似常规指针。
负责自动释放所指向的对象。
智能指针也是模板。
定义在memory头文件中。
shared_ptr类
shared_ptr和unique_ptr都支持的操作:
操作
解释
shared_ptr<T> sp uniqu ...
第11章 关联容器
关联容器和顺序容器的不同:关联容器中的元素时按照关键字来保存和访问的。
关联容器支持通过关键字来高效地查找和读取元素,基本的关联容器类型是 map和 set。
关联容器类型:
map和multimap在头文件map中;set和multiset在头文件set中
无序容器分别定义在unordered_map和unordered_set中
当从map中提取一个元素时,会得到一个pair类型的对象
pair是一个模版类型,保存两个名为first和second的(公有)数据成员
set的底层实现是红黑树
容器类型
解释
按顺序存储
map
关键数组:保存关键字-值对
set
关键字即值,即只保存关键字的容器
multimap
支持同一个键多次出现的map
multiset
支持同一个键多次出现的set
无序集合
unordered_map
用哈希函数组织的map
unordered_set
用哈希函数组织的set
unordered_multimap
哈希组织的map,关键字可以重复出现
unordered_multiset
哈希组织 ...
lab2 分布式文件系统
掌握Hadoop DFS常用指令
1. Hadoop 使用方法
在服务器上,我们通过Linux 指令对本地文件系统进行操作,如使用 ls 查看文件/目录信息、使用 cp进行文件复制、使用 cat 查看文件内容。在分布式文件系统中,也有一套相似的指令,接下来我们需要掌握一些基本的指令。(本题 1 分)
1234567891011121314xxxxxxxxxx@thumm01:~$ hadoop fs -ls /Found 2 itemsdrwxr-xr-x - root supergroup 0 2023-10-06 20:48 /dsjxtjcdrwxrwxrwx - jtliu supergroup 0 2020-12-21 23:25 /tmpxxxxxxxxxx@thumm01:~$ hadoop fs -ls /dsjxtjc/xxxxxxxxxxxxxxxxxxxx@thumm01:~$ touch test.txtxxxxxxxxxx@thumm01:~$ echo "Hello Hadoop" > ...
第10章 泛型算法
泛型算法
因为它们实现共同的操作,所以称之为“算法”;而“泛型”指的是它们可以操作在多种容器类型上。
算法通过在迭代器上进行操作来实现类型无关。
泛型算法本身不执行容器操作,只是单独依赖迭代器和迭代器操作实现。
头文件: #include <algorithm>或者 #include <numeric>(算数相关)
大多数算法是通过遍历两个迭代器标记的一段元素来实现其功能。
必要的编程假定:算法永远不会改变底层容器的大小。算法可能改变容器中保存的元素的值,也可能在容器内移动元素,但不能直接添加或者删除元素。
标准库定义了一类特殊的迭代器,称为插入器(inserter)。
当一个算法操作这样一个迭代器时,迭代器可以完成向容器添加元素的操作,但算法自身永远不会做这样的操作。
find
vector<int>::const_iterator result = find(vec.begin(), vec.end(), search_value);
输入:两个标记范围的迭代器和目标查找值。返回:如果找到,返回对应的迭代器,否则返回 ...
lab1 Linux基础实验
任务7. 多节点任务处理
为了充分利用集群的运算性能,我们需要将资源分配至各个节点、协调各个节点的任务、整合多个结果等等。接下来我们来控制命令在多个主机上协同运行。目前集群节点有thumm01, thumm03~thumm05。
集群主机之间免密登录配置
请你用 linux shell 写一个脚本auto_autho.sh,实现各节点之间的免密登录。即实现thumm01分别到thumm03~thumm05的免密登录,使得运行该脚本后,可以通过ssh thumm0X从thumm01免密登录到X号节点。
思路:这个脚本做的事情是在thumm01上生成2个节点的公钥和私钥,然后把所有公钥加入到authorized_keys中,然后把各自的公钥私钥以及authorized_keys分发到各个节点。
auto_autho.sh
方便进行后续实验,在实现thumm01免密登录thumm05和thumm06,同时实现thumm05到thumm06的免密登录。
本脚本在第一次运行时需要确认连接(在查看ECDSA key fingerprint 后输入"yes")并输入口令,实验 ...
6.5840 2023 Lecture 5 Raft (1)
课程网址:https://pdos.csail.mit.edu/6.824/schedule.html
以下内容来自课程课件,由于课件纯文本显示效果不佳,故对其排版整理并添加了部分个人笔记批注。
Raft是分布式复制协议的核心组件之一,实现完全自动化和容错都必须的
前面介绍过的复制系统,都存在单点故障问题(single point of failure)
mapreduce中的cordinator
GFS的master
VM-FT的test-and-set存储服务器storag
诸如Raft一类的协议用于解决单点故障问题,同时也用于解决网络分区问题。这类解决方案的基本思想即:大多数原则(majority rule)
可以据此构建容错服务,也可以处理网络分区,并在服务器故障中表现出很强的一致性
另一个考虑大多数的方式是,即使发生网络分区,也只会有一个拥有多数的分区,只有拥有多数的分区才能继续进行
人们都是用raft来构建一个复制状态机
操作提交对追随者来说是透明的
term id唯一地表示 领导者附加日志条目,一个任期内只有一个领导者
不会有两个日志条目具有相同的idx,相 ...
6.5840 2023 Lecture 3 GFS
课程网址:https://pdos.csail.mit.edu/6.824/schedule.html
以下内容来自课程课件,由于课件纯文本显示效果不佳,故对其排版整理并添加了部分个人笔记批注。
Today’s topic: storage + gfs + consistency
Why hard?
high performance -> shared data across servers
many servers -> constant faults
fault tolerance -> replication
replication -> potential inconsistencies
storge consistencies -> lower performance
Ideal consistency: behave as if single system
有两种风险: concurrency 和 fault
Why storage system is important?
建造fault tolerant存储系统后,应用程序可以是无状 ...
A Tour of Go 笔记与练习答案
本文主要为《A Tour of Go》的笔记和练习题答案
建议读者直接阅读上面网站中的教程,建议阅读英文版(中文版有内容确实)
参考答案可通过导航栏快速跳转查阅
Packages, variables, and functions.
In Go, a name is exported if it begins with a capital letter. For example, Pizza is an exported name, as is Pi, which is exported from the math package.
Go’s return values may be named. If so, they are treated as variables defined at the top of the function.
A return statement without arguments returns the named return values. This is known as a “naked” return.
1234567// Nak ...
6.5840 2023 Lecture 2 Threads and RPC
课程网址:https://pdos.csail.mit.edu/6.824/schedule.html
以下内容来自课程课件,由于课件纯文本显示效果不佳,故对其排版整理并添加了部分个人笔记批注。
Implementing distributed systems
Core infrastructures: threads and RPC (in Go)
Important for the labs
Why Go?
good support for threads
convenient RPC
type- and memory- safe
garbage-collected (no use after freeing problems)
threads + GC is particularly attractive!
not too complex
many recent distributed systems implemented in Go
After the tutorial, use https://golang.org/doc/effective_go.html
T ...
6.5840 2023 Lecture 1 Introduction
课程网址:https://pdos.csail.mit.edu/6.824/schedule.html
以下内容来自课程课件,由于课件纯文本显示效果不佳,故对其排版整理并添加了部分个人笔记批注。
6.5840: Distributed Systems Engineering
What I mean by “distributed system”:
a group of computers cooperating to provide a service
this class is mostly about infrastructure services
e.g. storage for big web sites, MapReduce, peer-to-peer sharing
lots of important infrastructure is distributed
Why do people build distributed systems?
to increase capacity via parallel processing
to tolerate fault ...