前几天学写了KVM中qume-info命令的使用,今天学学在虚拟化里面用处广泛的快照和克隆功能,snapshot和virt-clone。对于snapshot命令的使用其实很简单。进入virsh界面以后可以查看对对应的命令查看详细的参数使用介绍。

virsh # snapshot-                        #snapshot命令主要是这10个命令
snapshot-create snapshot-dumpxml snapshot-parent
snapshot-create-as snapshot-edit snapshot-revert
snapshot-current snapshot-info
snapshot-delete snapshot-list
virsh # snapshot-
#snapshot-create - Create a snapshot from XML #从XML文件里面创建一个快照
#snapshot-create-as - Create a snapshot from a set of args;Create a snapshot (disk and RAM) from arguments;#从一个argument(内容提要)里面创建一个快照
#snapshot-current - Get or set the current snapshot        #获取当前快照
#snapshot-delete - Delete a domain snapshot                #删除快照
#snapshot-dumpxml - Dump XML for a domain snapshot                #备份某一实例的快照当前的xml文件
#snapshot-edit - edit XML for a snapshot,Returns basic information about a snapshot.#编辑某个快照的xml文件
#snapshot-list - List snapshots for a domain              #快照列表
#snapshot-parent - Get the name of the parent of a snapshot;Extract the snapshot's parent, if any #提取某个快照的跟
#snapshot-revert - Revert a domain to a snapshot;Revert domain to snapshot; #将实例恢复到快照的某一状态

下面简单看看常见的命令使用吧

virsh # list --all
Id Name State
----------------------------------------------------
1 test-kvm running virsh # snapshot-create test-kvm
Domain snapshot 1603521065 created          #为什么这里创建的快照的名字时这一串数值呢?
virsh # snapshot-list test-kvm
Name Creation Time State
------------------------------------------------------------
1603521065 2020-10-24 14:31:05 +0800 running #快照的名称其实是与我创建的快照时的北京时间相关的。这个数字的叫做格林威治时间,也叫作Unix时间戳,说明1970.1.1到现在过了1603521065秒
virsh #

[root@KVM03-10 opt]# ll -h
total 6.7G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-r--r--. 1 qemu qemu 1.5G Oct 24 14:40 centos2.1.raw.qcow2
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 193K Oct 11 11:55 raw-to-qcow2.qcow2
-rw-r--r--. 1 root root 1.0G Oct 11 11:35 resize.raw
-rw-r--r--. 1 root root 5.4K Oct 11 12:38 test-kvm.xml
-rw-r--r--. 1 root root 257K Oct 11 11:36 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw [root@KVM03-10 opt]# virsh snapshot-list test-kvm
Name Creation Time State
------------------------------------------------------------
1603521065 2020-10-24 14:31:05 +0800 running
1603521844 2020-10-24 14:44:04 +0800 running [root@KVM03-10 opt]# ll -h
total 7.7G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-r--r--. 1 qemu qemu 1.7G Oct 24 14:44 centos2.1.raw.qcow2 #发现做一次快照,虚机使用的磁盘就会增加一部分,说明其实我的快照文件是放在这个虚机的磁盘文件中的。
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 193K Oct 11 11:55 raw-to-qcow2.qcow2
-rw-r--r--. 1 root root 1.0G Oct 11 11:35 resize.raw
-rw-r--r--. 1 root root 5.4K Oct 11 12:38 test-kvm.xml
-rw-r--r--. 1 root root 257K Oct 11 11:36 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw
[root@KVM03-10 opt]#
virsh # snapshot-delete test-kvm --current        #删除虚机当前快照,发现虚机的磁盘文件并未缩小。
Domain snapshot 1603521844 deleted
root@KVM03-10 opt]# ll -h
total 6.7G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-r--r--. 1 qemu qemu 1.7G Oct 24 15:00 centos2.1.raw.qcow2 #这是因为当前虚机所有磁盘格式为写时复制,也就是说虚机的磁盘会越来越大
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 193K Oct 11 11:55 raw-to-qcow2.qcow2
-rw-r--r--. 1 root root 1.0G Oct 11 11:35 resize.raw
-rw-r--r--. 1 root root 5.4K Oct 11 12:38 test-kvm.xml
-rw-r--r--. 1 root root 257K Oct 11 11:36 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw
[root@KVM03-10 opt]#

下面再来试一下依照快照恢复,做这个操作前,首先确认虚机是否已经在宿主机上上做了快照。然后进入虚机内部,删系统文件rm -rf /*

virsh # snapshot-revert test-kvm --current      #通过快照恢复系统

virsh # reboot --domain test-kvm           #重启虚机后,虚机正常
Domain test-kvm is being rebooted

快照功能就这么多,其实在生产中很少会到命令行的形式去做快照,一般是在前台界面操作。下面在学习一下虚机的克隆命令哈。

[root@KVM03-10 opt]# virt-clone --help
usage: virt-clone --original [NAME] ...
Duplicate a virtual machine, changing all the unique host side configuration like MAC address, name, etc.
The VM contents are NOT altered: virt-clone does not change anything _inside_ the guest OS, it only duplicates disks and does host side changes. So things like changing passwords, changing static IP address, etc are outside the scope of this tool. For these types of changes, please see virt-sysprep(1).

简单介绍一下virt-clone的命令描述吧。virt-clone是用来复制一台虚拟机并改变所有主机侧唯一的信息,包括Mac地址、主机名(这个主机名应该是KVM平台看到的主机名,而不是虚机系统内部的主机名)等

虚机内容并不会被改变,virt-clone命令不会改变用户操作系统内的任何信息,它仅仅是拷贝磁盘和完成主机名的修改。所以像修改用户名(local-host),修改静态IP地址等不属于该命令的范围,如果要做此类修改,请参加virt-sysprep。

常用的命令

General Options:
-o ORIGINAL_GUEST, --original ORIGINAL_GUEST Name of the original guest; The status must be shut off or paused.    #被克隆的虚机
--original-xml ORIGINAL_XML    XML file to use as the original guest.
--auto-clone Auto generate clone name and storage paths from the original guest configuration.
-n NEW_NAME, --name NEW_NAME Name for the new guest          #克隆后的名字
--reflink use btrfs COW lightweight copy
[root@KVM03-10 opt]# virt-clone -o test-kvm -n test-kvm-clone --auto-clone
WARNING Setting the graphics device port to autoport, in order to avoid conflicting. #提示,为了避免冲突,把克隆出来的虚机的VNC端口设置设置为了自动
WARNING The requested volume capacity will exceed the available pool space when the volume is fully allocated. (10240 M requested capacity > 8768 M available)
Allocating 'centos2.1.raw-clone.qcow2' | 10 GB 00:00:09 Clone 'test-kvm-clone' created successfully.

查看虚机的xml文件如下:

  <devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>            #该虚机磁盘文件类型为QCOW2,因为克隆前的磁盘文件也是,所以不会修改
<source file='/opt/centos2.1.raw-clone.qcow2'/>    #该虚机使用的磁盘文件路径在此,因为克隆命令的选项为auto-clone。此时虚机的磁盘文件路径与原机器一样
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>

再冲突的对比一下克隆前后的两台机器之间xml文件的区别,检查发现和virt-clone解释内容一致。对比虚机系统内部的用户名是没有修改的,因为IP地址为DHCP,所以会有变化

[root@KVM03-10 qemu]# diff test-kvm.xml test-kvm-clone.xml
4c4
< virsh edit test-kvm
---
> virsh edit test-kvm-clone
9,10c9,10
< <name>test-kvm</name>
< <uuid>a9c5fb0f-9f5f-4f0b-87ca-06f4b6dfc62d</uuid> #克隆前虚机的名字和UUID
---
> <name>test-kvm-clone</name>
> <uuid>e6598719-4944-49cd-83f6-85cfe431883f</uuid>    #克隆后虚机的名字和UUID
52c52
< <source file='/opt/centos2.1.raw.qcow2'/>        #磁盘文件路径
---
> <source file='/opt/centos2.1.raw-clone.qcow2'/>
76a77
> <controller type='pci' index='0' model='pci-root'/>
83d83
< <controller type='pci' index='0' model='pci-root'/>
85c85
< <mac address='52:54:00:db:81:f8'/>          #克隆前虚机的Mac地址
---
> <mac address='52:54:00:c3:44:a1'/>          #克隆后虚机的Mac地址
122a123
> <seclabel type='dynamic' model='dac' relabel='yes'/>
[root@KVM03-10 qemu]#

宿主机的VNC端口多了5901,因为VNC自动分配

[root@KVM03-10 opt]# netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 2123/qemu-kvm
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 4434/qemu-kvm

被克隆虚机的快照在克隆过程中不会被一并克隆

[root@KVM03-10 opt]# ll -h
total 7.9G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-------. 1 qemu qemu 1.2G Oct 24 16:05 centos2.1.raw-clone.qcow2 #克隆后的虚机磁盘文件不会包含克隆前虚机的快照
-rw-r--r--. 1 qemu qemu 1.7G Oct 24 16:05 centos2.1.raw.qcow2
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 193K Oct 11 11:55 raw-to-qcow2.qcow2
-rw-r--r--. 1 root root 1.0G Oct 11 11:35 resize.raw
-rw-r--r--. 1 root root 5.4K Oct 11 12:38 test-kvm.xml
-rw-r--r--. 1 root root 257K Oct 11 11:36 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw
[root@KVM03-10 opt]#

刚才操作的过程叫做完全克隆,是把虚机的磁盘文件完完整整的复制一份,对于生产中大磁盘虚机,速度可能比较慢,另外还有一种克隆方式叫连接克隆。其实对于这一区别,vmware workstations对这个做出了很好的解释:

下面就创建一个链接克隆玩一把。

[root@KVM03-10 opt]# qemu-img create -f qcow2 -b centos2.1.raw.qcow2 centos2.1.raw-clone-link.qcow2    
#-b选项可参见“rebase [-q] [-f fmt] [-t cache] [-T src_cache] [-p] [-u] -b backing_file [-F backing_fmt] filename”

#其实这条命令中也可以通过“-o”实现,具体可看一下
Formatting 'centos2.1.raw-clone-link.qcow2', fmt=qcow2 size=10737418240 backing_file='centos2.1.raw.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
[root@KVM03-10 opt]#

[root@KVM03-10 opt]# qemu-img create -f qcow2 -o ? centos2.1.raw-clone-link.qcow2
Supported options:

  1. size Virtual disk size
  2. compat Compatibility level (0.10 or 1.1)
  3. backing_file File name of a base image
  4. backing_fmt Image format of the base image
  5. encryption Encrypt the image
  6. cluster_size qcow2 cluster size
  7. preallocation Preallocation mode (allowed values: off, metadata, falloc, full)
  8. lazy_refcounts Postpone refcount updates

[root@KVM03-10 opt]#

[root@KVM03-10 opt]# qemu-img create -f qcow2 -o backing_file=centos2.1.raw.qcow2 centos2.1.raw-clone-link-o.qcow2
Formatting 'centos2.1.raw-clone-link-o.qcow2', fmt=qcow2 size=10737418240 backing_file='centos2.1.raw.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
[root@KVM03-10 opt]#

[root@KVM03-10 opt]# ll -h
total 7.9G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-r--r--. 1 root root 193K Oct 24 16:42 centos2.1.raw-clone-link-o.qcow2
-rw-r--r--. 1 root root 193K Oct 24 16:34 centos2.1.raw-clone-link.qcow2    #通过链接克隆做到的很小
-rw-------. 1 qemu qemu 1.2G Oct 24 16:31 centos2.1.raw-clone.qcow2

查看磁盘信息

[root@KVM03-10 opt]# qemu-img info centos2.1.raw-clone-link-o.qcow2
image: centos2.1.raw-clone-link-o.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: centos2.1.raw.qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
[root@KVM03-10 opt]# qemu-img info centos2.1.raw-clone-link.qcow2
image: centos2.1.raw-clone-link.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: centos2.1.raw.qcow2 #该磁盘文件的后置配磁盘文件,所以的读写都是基于centos2.1.raw.qcow2进行。换句话说比如在centos2.1.raw.qcow2上安装了某软件,centos2.1.raw-clone-link.qcow2大小也不会发送变化
Format specific information:
compat: 1.1
lazy refcounts: false
[root@KVM03-10 opt]#

准备好虚机的磁盘文件以后,需要再搞一个虚机的配置文件,直接复制即可,不过需要修改一下配置文件中所使用到的磁盘文件目录和名字

[root@KVM03-10 qemu]# cp test-kvm.xml test-kvm-clone-link.xml
[root@KVM03-10 qemu]# ll
total 24
drwxr-xr-x. 2 root root 26 Oct 11 10:11 autostart
drwx------. 3 root root 42 Aug 26 09:58 networks
-rw-------. 1 root root 4577 Oct 24 16:57 test-kvm-clone-link.xml
-rw-------. 1 root root 4650 Oct 24 15:43 test-kvm-clone.xml
-rw-------. 1 root root 4577 Oct 24 15:12 test-kvm.xml

<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/opt/centos2.1.raw-clone-link.qcow2'/>

<interface type='network'>


<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

[root@KVM03-10 qemu]# virsh define test-kvm-clone-link.xml    #导入成功
Domain test-kvm-clone-link defined from test-kvm-clone-link.xml

[root@KVM03-10 qemu]# virsh start test-kvm-clone-link
Domain test-kvm-clone-link started

[root@KVM03-10 qemu]# virsh list --all              #启动成功
Id Name State
----------------------------------------------------
1 test-kvm running
2 test-kvm-clone running
3 test-kvm-clone-link running

[root@KVM03-10 qemu]#

[root@KVM03-10 qemu]# virsh console test-kvm-clone-link
Connected to domain test-kvm-clone-link
Escape character is ^]

CentOS Linux 7 (Core)
Kernel 3.10.0-514.el7.x86_64 on an x86_64

localhost login: root
Password:
Last login: Sat Oct 24 15:14:11 on tty1
[root@localhost ~]#                    #系统正常

进入到虚机内部创建一个文件

[root@localhost ~]# dd if=/dev/zero of=/home/test-liuhuan.raw bs=200M count=4  #创建了一个800Mb的文件
4+0 records in
4+0 records out
838860800 bytes (839 MB) copied, 10.4435 s, 80.3 MB/s
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 10G 1.8G 8.3G 18% /
devtmpfs 487M 0 487M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/0
[root@localhost ~]# cd /home/
[root@localhost home]# ll -h
total 801M
-rw-r--r--. 1 root root 4.0K Aug 31 22:28 grub2.cfg.bak
-rw-r--r--. 1 root root 4.0K Aug 31 22:30 grub.cfg.bak
-rw-r--r--. 1 root root 800M Oct 24 17:21 test-liuhuan.raw
[root@localhost home]#

[root@KVM03-10 opt]# ll -h
total 8.9G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-r--r--. 1 root root 193K Oct 24 16:42 centos2.1.raw-clone-link-o.qcow2
-rw-r--r--. 1 qemu qemu 807M Oct 24 17:23 centos2.1.raw-clone-link.qcow2   #通过链接创建出来的虚机的磁盘文件增加了800M,但是后置备的磁盘文件的目录并未增加
-rw-------. 1 qemu qemu 1.2G Oct 24 17:18 centos2.1.raw-clone.qcow2
-rw-r--r--. 1 qemu qemu 1.7G Oct 24 17:03 centos2.1.raw.qcow2
[root@KVM03-10 opt]#

[root@localhost ~]# dd if=/dev/zero of=/home/test-liuhuan.raw bs=300M count=2 #在test-kvm,即通过链接方式被克隆的虚机,创建一个600M的文件
2+0 records in
2+0 records out
629145600 bytes (629 MB) copied, 9.02812 s, 69.7 MB/s
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 10G 1.6G 8.5G 16% /
devtmpfs 487M 0 487M 0% /dev
tmpfs 497M 0 497M 0% /dev/shm
tmpfs 497M 6.6M 490M 2% /run
tmpfs 497M 0 497M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/0
[root@localhost ~]#

[root@KVM03-10 opt]# ll -h
total 9.4G
-rw-------. 1 root root 10G Oct 11 12:14 centos2.1.raw
-rw-r--r--. 1 root root 193K Oct 24 16:42 centos2.1.raw-clone-link-o.qcow2
-rw-r--r--. 1 qemu qemu 807M Oct 24 17:37 centos2.1.raw-clone-link.qcow2
-rw-------. 1 qemu qemu 1.2G Oct 24 17:39 centos2.1.raw-clone.qcow2
-rw-r--r--. 1 qemu qemu 2.0G Oct 24 17:39 centos2.1.raw.qcow2        #test-kvm的虚机磁盘文件也随之增加,但链接克隆出来的虚机的磁盘文件不会增加
-rw-r--r--. 1 qemu qemu 4.1G Apr 27 20:56 CentOS-7.3-x86_64-DVD-1611.iso
-rw-r--r--. 1 root root 193K Oct 11 11:55 raw-to-qcow2.qcow2
-rw-r--r--. 1 root root 1.0G Oct 11 11:35 resize.raw
-rw-r--r--. 1 root root 257K Oct 11 11:36 test.qcow2
-rw-r--r--. 1 root root 5.0G Oct 11 10:50 test.raw

#也就是可以这样理解,因为qcow2文件类型的特点为写时复制,通过链接方式克隆出来的虚机运行过程使用的系统与被克隆虚机为同一个。但是后面再次增加其他文件则写到自己虚机的磁盘文件中。但是如果删除了原虚机的磁盘文件,链接克隆出来的虚机将无法正常运行。

抽空学学KVM(七):虚拟机快照和克隆的更多相关文章

  1. VMware对虚拟机快照进行克隆

    1.在关机状态下做一个快照 2.把快照管理器打开 3.右键快照,选择“克隆此快照” 4.选择要克隆的快照 5.选择克隆的方式 6.设置名称及保存的位置 注:虚拟机的快照是开机状态,不能对快照进行克隆

  2. kvm+libvirt虚拟机快照浅析[转]

    浅析snapshots, blockcommit,blockpull 作者:Kashyap Chamarthy <kchamart#redhat.com> Date: Tue, 23 Oc ...

  3. 虚拟机快照,克隆,静态ip地址的设置(centos 6.5)

    一.快照 例如,当我们在虚拟机上做实验或是作测试时,难免碰到一些不熟悉的地方,此时做个快照,备份一下当前的系统状态,一旦操作错误,可以很快还原到出错前的状态,完成实验,最终避免一步的失误导致重新开始整 ...

  4. Linux day01(二)虚拟机快照和克隆的用法介绍

    一:快照 优点:运行虚拟机后不用担心系统会被弄崩溃了,点击快照会立即恢复到初始状态 缺点:回滚会带来数据的丢失,所以要考虑数据恢复的成本和找回数据时进行操作的成本 1. 在导航栏中找虚拟机快照的小图标 ...

  5. 抽空学学KVM(六)qemu-img命令使用

    通过KVM创建虚拟机,用到的命令不多,而且可以通过qemu-img -help查看到非常详细的解释,常用的主要有以下几种: 1.qemu-img info  查看磁盘信息     #info [-f ...

  6. VMware 虚拟机快照、克隆、磁盘扩容

    1. 快照 快照是虚拟机某个时间点上完整系统的镜像,可以在虚拟机内部通过快照文件恢复系统到之前的节点. 拍摄快照: 恢复快照: 2. 克隆 克隆是原始虚拟机全部状态的一个拷贝,是脱离原始虚拟机独立存在 ...

  7. 烂泥:KVM利用LVM快照快速部署虚拟机

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了有关KVM利用LVM快照备份和恢复虚拟机的功能,这篇文章我们来介绍,如何利用LVM快照功能为KVM快速部署虚拟机. 部署虚拟机需要以下几 ...

  8. kvm虚拟化之kvm虚拟机快照备份

    kvm虚拟机默认使用raw格式的镜像格式,性能最好,速度最快,它的缺点就是不支持一些新的功能,如支持镜像,zlib磁盘压缩,AES加密等.   要使用镜像功能,磁盘格式必须为qcow2.下面开始kvm ...

  9. CentOS 6.9下KVM虚拟机通过virt-clone克隆虚拟机(转)

    一.virt-clone概述 1.virt-clone作用简介 virt-clone主要是用来克隆kvm虚拟机,并且通过Options.General Option.Storage Configura ...

随机推荐

  1. JAVA之代理2CGLib

    对于CGLib的代理目前还是知道如何使用,以及理论上它的原理,到源码上的理解还没到位 https://www.jianshu.com/p/9a61af393e41?from=timeline& ...

  2. Bottleneck靶机渗透

    Bottleneck 端口扫描,主机发现. 敏感目录为:http://192.168.114.165/image_gallery.php 在该目录下发现:http://192.168.114.165/ ...

  3. Istio 运维实战系列(3):让人头大的『无头服务』-下

    本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些经验,以及在使用 Istio 过程中可能遇到的一些常见问题的解决方法. 失败的 Eur ...

  4. Spring Cloud系列(二):Eureka应用详解

    一.注册中心 1.注册中心演变过程 2.注册中心必备功能 ① 服务的上线 ② 服务的下线 ③ 服务的剔除 ④ 服务的查询 ⑤ 注册中心HA ⑥ 注册中心节点数据同步 ⑦ 服务信息的存储,比如mysql ...

  5. 【typedef】Type definitions 自定义类型

  6. c语言的变量,常量及作用域等

    1.const定义常量 在C语言中,const可以用来定义的一个常量,在变量名前加上const即可. int const a: 定义了一个a的整数常量,且a的值不能被修改.如果要修改a的值,有以下两种 ...

  7. 排序算法:归并排序(Merge Sort)

    归并排序 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并排序将排序数组A[1. ...

  8. 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包

    089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  9. 【题解】[CH弱省胡策R2]TATT

    本蒟蒻第一道\(K-D-Tree\)维护\(dp\) Question 题目大意:求一条路径,使得其四个维度单调不降. 先排序消掉一维再说. 对于每一个点,初始的时候绝对长度是1啊.于是,先赋值一个1 ...

  10. ElasticSearch 索引 VS MySQL 索引

    前言 这段时间在维护产品的搜索功能,每次在管理台看到 elasticsearch 这么高效的查询效率我都很好奇他是如何做到的. 这甚至比在我本地使用 MySQL 通过主键的查询速度还快. 为此我搜索了 ...