DNS(5) -- 主从dns
1. DNS主从服务器
1.1 主从服务器概述
辅助DNS是DNS容灾备份服务:在主DNS和辅DNS之间建立区域数据传输机制,当主DNS遇到故障或者服务中断时,辅DNS仍可以继续提供解析服务,因此保障业务稳定运行。例如阿里云提供的主从服务器223.5.5.5和223.6.6.6
辅助DNS的优势:
容灾备份,降低业务中断风险:主DNS系统故障,辅助DNS可继续提供域名解析服务,保障业务可用性。
负责均衡,流量均摊降低负载:当辅助DNS与主DNS同时对外提供解析服务时,可以达到流量负载均衡的效果。
主从服务器实现原理如下:

注意:从服务器是区域级别的概念;
1.2 主从DNS实现
1.2.1 主从DNS实现要点
DNS主从服务器实现的注意事项如下:
- 确保防火墙规则开放(建议关闭)
- 保持主从服务器时钟一致;
- bind程序的版本应该保持一致;否则,应该从高,主低;
主从DNS服务器的配置要点如下:
- 主 DNS 的 named.conf 里配置 allow-transfer 和 also-notify 选项;
- 辅助 DNS 主配置文件 option 段添加 masterfile-format text ,否则同步的文件为 data 类型;
- 辅助 DNS 添加区域配置文件,类型为 slave ,同时指向 masters 参数指向master 地址;
- 辅助 DNS 不可主动修改 DNS 数据库文件;
- 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
- 主服务器的区域解析库文件中必须有一条NS记录指向从服务器;
- 搭建完主从后,若修改主服务器域配置, Serail Number 必须递增,否则不会立即同步;
实验环境介绍:
- 主DNS服务器:地址:192.168.20.70,主机名:dns01;
- 从DNS服务器:地址:192.168.20.71,主机名:dns02;
1.2.2 主DNS服务器配置
主DNS服务器的配置文件如下:
[root@dns01 named]# cat /etc/named.conf
options {
listen-on port 53 { localhost; };
listen-on-v6 port 53 { localhost; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
recursion yes;
allow-recursion { 192.168.20.0/24; 192.168.50.0/24; }; allow-transfer {192.168.20.71;}; <==指定允许哪些主机来同步自己的数据库解析文件;
also-notify {192.168.20.71;}; <==指定允许把自己的数据库解析文件同步给哪些主机; dnssec-enable yes;
dnssec-validation yes;
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
}; logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
}; zone "." IN {
type hint;
file "named.ca";
}; include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named.xuzhichao.com.zone"; #区域配置文件
[root@dns01 named]# cat /etc/named.xuzhichao.com.zone
zone "xuzhichao.com" IN {
type master;
file "xuzhichao.com.zone";
notify yes; <==允许本区域数据解析文件进行通告
}; zone "20.168.192.in-addr.arpa" IN {
type master;
file "20.168.192.in-addr.arpa.zone";
notify yes; <==允许本区域数据解析文件进行通告
};
主dns的区域解析文件如下:
#1.正向解析文件:
[root@dns01 named]# cat /var/named/xuzhichao.com.zone
$TTL 86400 xuzhichao.com. IN SOA ns1.xuzhichao.com. mail.xuzhichao.com. (
2021071601
10800
900
604800
86400
) xuzhichao.com. IN NS ns1.xuzhichao.com.
xuzhichao.com. IN NS ns2.xuzhichao.com. <==注意:需要添加从服务器的NS记录和对应的A记录 ns1 IN A 192.168.20.70
ns2 IN A 192.168.20.71 ;业务域 xuzhichao.com. IN MX 10 mx1.xuzhichao.com.
mx1 IN A 192.168.20.11 www.xuzhichao.com. IN A 192.168.20.31
www.xuzhichao.com. IN A 192.168.20.32 web.xuzhichao.com. IN CNAME www.xuzhichao.com. ;主机域 nginx02.xuzhichao.com. IN A 192.168.20.22
ngxin03.xuzhichao.com. IN A 192.168.20.23 nginx-lb01.xuzhichao.com. IN A 192.168.20.19
nginx-lb02.xuzhichao.com. IN A 192.168.20.20 apache01.xuzhichao.com. IN A 192.168.20.21 lvs01.xuzhichao.com. IN A 192.168.20.31
lvs02.xuzhichao.com. IN A 192.168.20.32 mysql01.xuzhichao.com. IN A 192.168.20.50 redis01.xuzhichao.com. IN A 192.168.20.61 nfs01.xuzhichao.com. IN A 192.168.20.30 dns01.xuzhichao.com. IN A 192.168.20.70 #2.反向解析文件:
[root@dns01 named]# cat /var/named/20.168.192.in-addr.arpa.zone
$TTL 86400 @ IN SOA ns1.xuzhichao.com. mail.xuzhichao.com. (
2021071601
10800
900
604800
86400
) @ IN NS ns1.xuzhichao.com.
@ IN NS ns2.xuzhichao.com. <==注意:需要添加从服务器的NS记录和对应的PTR记录 70 IN PTR ns1.xuzhichao.com.
71 IN PTR ns2.xuzhichao.com. ;业务域
31 IN PTR www.xuzhichao.com.
32 IN PTR www.xuzhichao.com. ;主机域 22 IN PTR nginx02.xuzhichao.com.
23 IN PTR ngxin03.xuzhichao.com. 19 IN PTR nginx-lb01.xuzhichao.com.
20 IN PTR nginx-lb02.xuzhichao.com. 21 IN PTR apache01.xuzhichao.com. 31 IN PTR lvs01.xuzhichao.com.
32 IN PTR lvs02.xuzhichao.com. 50 IN PTR mysql01.xuzhichao.com. 61 IN PTR redis01.xuzhichao.com. 30 IN PTR nfs01.xuzhichao.com. 70 IN PTR dns01.xuzhichao.com.
1.2.3 从DNS服务器配置
从服务器的配置文件如下:
[root@dns02 ~]# cat /etc/named.conf
options {
listen-on port 53 { localhost; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
recursion yes;
allow-recursion { 192.168.20.0/24; 192.168.50.0/24; }; masterfile-format text; <==从DNS需要增加此配置,指定同步的格式为text;
allow-transfer {192.168.20.70;}; <==指定允许哪些主机来同步自己的数据库解析文件;
also-notify {192.168.20.70;}; <==指定允许把自己的数据库解析文件同步给哪些主机; dnssec-enable yes;
dnssec-validation yes; /* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
}; logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
}; zone "." IN {
type hint;
file "named.ca";
}; include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/etc/named.xuzhichao.com.zone"; #区域配置文件:
[root@dns02 ~]# cat /etc/named.xuzhichao.com.zone
zone "xuzhichao.com" IN {
type slave;
file "slaves/xuzhichao.com.zone";
masters {192.168.20.70;};
}; zone "20.168.192.in-addr.arpa" IN {
type slave;
file "slaves/20.168.192.in-addr.arpa.zone";
masters {192.168.20.70;};
}; #修改区域配置文件属性
[root@dns02 ~]# chgrp named /etc/named.xuzhichao.com.zone
[root@dns02 ~]# chmod 640 /etc/named.xuzhichao.com.zone
检测配置文件语法,启动DNS服务
[root@dns02 ~]# named-checkconf
[root@dns02 ~]# systemctl start named.service #查看日志,发现主从解析数据库文件自动完成同步
[root@dns02 ~]# systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2021-07-17 11:09:06 CST; 39s ago
Process: 1835 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 1833 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 1837 (named)
CGroup: /system.slice/named.service
└─1837 /usr/sbin/named -u named -c /etc/named.conf Jul 17 11:09:06 dns02 named[1837]: transfer of '20.168.192.in-addr.arpa/IN' from 192.168.20.70#53: Transfer completed: 1 messages, 19 records, 504 bytes, 0.001 secs (504000 bytes/sec)
Jul 17 11:09:06 dns02 named[1837]: zone 20.168.192.in-addr.arpa/IN: sending notifies (serial 2021071601)
Jul 17 11:09:06 dns02 named[1837]: zone xuzhichao.com/IN: Transfer started.
Jul 17 11:09:06 dns02 named[1837]: transfer of 'xuzhichao.com/IN' from 192.168.20.70#53: connected using 192.168.20.71#47495
Jul 17 11:09:06 dns02 named[1837]: zone xuzhichao.com/IN: transferred serial 2021071601
Jul 17 11:09:06 dns02 named[1837]: transfer of 'xuzhichao.com/IN' from 192.168.20.70#53: Transfer status: success
Jul 17 11:09:06 dns02 named[1837]: transfer of 'xuzhichao.com/IN' from 192.168.20.70#53: Transfer completed: 1 messages, 22 records, 529 bytes, 0.001 secs (529000 bytes/sec)
Jul 17 11:09:06 dns02 named[1837]: zone xuzhichao.com/IN: sending notifies (serial 2021071601)
Jul 17 11:09:06 dns02 named[1837]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
Jul 17 11:09:06 dns02 named[1837]: resolver priming query complete
同步主DNS解析数据库文件:
[root@dns02 ~]# ll /var/named/slaves/
total 8
-rw-r--r-- 1 named named 808 Jul 17 11:09 20.168.192.in-addr.arpa.zone
-rw-r--r-- 1 named named 765 Jul 17 11:09 xuzhichao.com.zone
测试客户端通过从DNS服务器解析:
#测试正向解析:
[root@xuzhichao ~]# dig nginx02.xuzhichao.com @192.168.20.71 +short
192.168.20.22
[root@xuzhichao ~]# dig web.xuzhichao.com @192.168.20.71 +short
www.xuzhichao.com.
192.168.20.32
192.168.20.31 #测试方向解析:
[root@xuzhichao ~]# dig -x 192.168.20.21 @192.168.20.71 +short
apache01.xuzhichao.com.
1.2.4 测试主从同步
在主DNS上增加一条记录,并修改序列号,测试从DNS是否会进行同步。
主DNS增加A记录,并修改序列号:
#修改正向解析文件:
[root@dns01 named]# cat /var/named/xuzhichao.com.zone
$TTL 86400 xuzhichao.com. IN SOA ns1.xuzhichao.com. mail.xuzhichao.com. (
2021071602 <==增加序列号
10800
900
604800
86400
) xuzhichao.com. IN NS ns1.xuzhichao.com.
xuzhichao.com. IN NS ns2.xuzhichao.com. ns1 IN A 192.168.20.70
ns2 IN A 192.168.20.71 ;业务域 xuzhichao.com. IN MX 10 mx1.xuzhichao.com.
mx1 IN A 192.168.20.11 www.xuzhichao.com. IN A 192.168.20.31
www.xuzhichao.com. IN A 192.168.20.32 web.xuzhichao.com. IN CNAME www.xuzhichao.com. ;主机域 nginx02.xuzhichao.com. IN A 192.168.20.22
ngxin03.xuzhichao.com. IN A 192.168.20.23 nginx-lb01.xuzhichao.com. IN A 192.168.20.19
nginx-lb02.xuzhichao.com. IN A 192.168.20.20 apache01.xuzhichao.com. IN A 192.168.20.21 lvs01.xuzhichao.com. IN A 192.168.20.31
lvs02.xuzhichao.com. IN A 192.168.20.32 mysql01.xuzhichao.com. IN A 192.168.20.50 redis01.xuzhichao.com. IN A 192.168.20.61 nfs01.xuzhichao.com. IN A 192.168.20.30 dns01.xuzhichao.com. IN A 192.168.20.70
dns02.xuzhichao.com. IN A 192.168.20.71 <==增加A记录 #修改反向解析文件:
[root@dns01 named]# cat /var/named/20.168.192.in-addr.arpa.zone
$TTL 86400 @ IN SOA ns1.xuzhichao.com. mail.xuzhichao.com. (
2021071602 <==增加序列号
10800
900
604800
86400
) @ IN NS ns1.xuzhichao.com.
@ IN NS ns2.xuzhichao.com. 70 IN PTR ns1.xuzhichao.com.
71 IN PTR ns2.xuzhichao.com. ;@ IN MX 10 mx1.xuzhichao.com.
;11 IN PTR mx1.xuzhichao.com.
;mx1.xuzhichao.com. IN A 192.168.20.11
;业务域
31 IN PTR www.xuzhichao.com.
32 IN PTR www.xuzhichao.com. ;主机域 22 IN PTR nginx02.xuzhichao.com.
23 IN PTR ngxin03.xuzhichao.com. 19 IN PTR nginx-lb01.xuzhichao.com.
20 IN PTR nginx-lb02.xuzhichao.com. 21 IN PTR apache01.xuzhichao.com. 31 IN PTR lvs01.xuzhichao.com.
32 IN PTR lvs02.xuzhichao.com. 50 IN PTR mysql01.xuzhichao.com. 61 IN PTR redis01.xuzhichao.com. 30 IN PTR nfs01.xuzhichao.com. 70 IN PTR dns01.xuzhichao.com.
71 IN PTR dns02.xuzhichao.com. <==增加PTR记录 #重启dns服务:
[root@dns01 named]# rndc reload
server reload successful
查看从DNS同步情况
#通过日志查看,已经完成同步:
[root@dns02 ~]# systemctl status named.service
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2021-07-17 11:09:06 CST; 13min ago
Process: 1835 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 1833 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 1837 (named)
CGroup: /system.slice/named.service
└─1837 /usr/sbin/named -u named -c /etc/named.conf Jul 17 11:19:43 dns02 named[1837]: transfer of 'xuzhichao.com/IN' from 192.168.20.70#53: Transfer completed: 1 messages, 23 records, 551 bytes, 0.001 secs (551000 bytes/sec)
Jul 17 11:19:43 dns02 named[1837]: zone xuzhichao.com/IN: sending notifies (serial 2021071602)
Jul 17 11:19:44 dns02 named[1837]: client @0x7f5cd40c6790 192.168.20.70#52480: received notify for zone '20.168.192.in-addr.arpa'
Jul 17 11:19:44 dns02 named[1837]: zone 20.168.192.in-addr.arpa/IN: notify from 192.168.20.70#52480: serial 2021071602
Jul 17 11:19:44 dns02 named[1837]: zone 20.168.192.in-addr.arpa/IN: Transfer started.
Jul 17 11:19:44 dns02 named[1837]: transfer of '20.168.192.in-addr.arpa/IN' from 192.168.20.70#53: connected using 192.168.20.71#58675
Jul 17 11:19:44 dns02 named[1837]: zone 20.168.192.in-addr.arpa/IN: transferred serial 2021071602
Jul 17 11:19:44 dns02 named[1837]: transfer of '20.168.192.in-addr.arpa/IN' from 192.168.20.70#53: Transfer status: success
Jul 17 11:19:44 dns02 named[1837]: transfer of '20.168.192.in-addr.arpa/IN' from 192.168.20.70#53: Transfer completed: 1 messages, 20 records, 524 bytes, 0.001 secs (524000 bytes/sec)
Jul 17 11:19:44 dns02 named[1837]: zone 20.168.192.in-addr.arpa/IN: sending notifies (serial 2021071602)
从客户端测试能否解析成功:
#测试从主DNS解析:
[root@xuzhichao ~]# dig dns02.xuzhichao.com @192.168.20.70 +short
192.168.20.71
[root@xuzhichao ~]# dig -x 192.168.20.71 @192.168.20.70 +short
ns2.xuzhichao.com.
dns02.xuzhichao.com. #测试从从DNS解析:
[root@xuzhichao ~]# dig dns02.xuzhichao.com @192.168.20.71 +short
192.168.20.71
[root@xuzhichao ~]# dig -x 192.168.20.71 @192.168.20.71 +short
dns02.xuzhichao.com.
ns2.xuzhichao.com.
1.2.5 客户端配置DNS高可用
在客户端上需要实现DNS的高可用,就要配置两个DNS的地址:
[root@xuzhichao ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search lan
nameserver 192.168.20.70
nameserver 192.168.20.71
1.2.6 手动同步区域解析文件
在从DNS上使用dig命令可以手动同步主DNS的配置文件:
在从DNS上同步主DNS的xuzhichao.com域的区域解析文件:
[root@dns02 ~]# dig -t axfr xuzhichao.com @192.168.20.70
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> -t axfr xuzhichao.com @192.168.20.70
;; global options: +cmd
xuzhichao.com. 86400 IN SOA ns1.xuzhichao.com. mail.xuzhichao.com. 2021071602 10800 900 604800 86400
xuzhichao.com. 86400 IN NS ns1.xuzhichao.com.
xuzhichao.com. 86400 IN NS ns2.xuzhichao.com.
xuzhichao.com. 86400 IN MX 10 mx1.xuzhichao.com.
apache01.xuzhichao.com. 86400 IN A 192.168.20.21
dns01.xuzhichao.com. 86400 IN A 192.168.20.70
dns02.xuzhichao.com. 86400 IN A 192.168.20.71
lvs01.xuzhichao.com. 86400 IN A 192.168.20.31
lvs02.xuzhichao.com. 86400 IN A 192.168.20.32
mx1.xuzhichao.com. 86400 IN A 192.168.20.11
mysql01.xuzhichao.com. 86400 IN A 192.168.20.50
nfs01.xuzhichao.com. 86400 IN A 192.168.20.30
nginx-lb01.xuzhichao.com. 86400 IN A 192.168.20.19
nginx-lb02.xuzhichao.com. 86400 IN A 192.168.20.20
nginx02.xuzhichao.com. 86400 IN A 192.168.20.22
ngxin03.xuzhichao.com. 86400 IN A 192.168.20.23
ns1.xuzhichao.com. 86400 IN A 192.168.20.70
ns2.xuzhichao.com. 86400 IN A 192.168.20.71
redis01.xuzhichao.com. 86400 IN A 192.168.20.61
web.xuzhichao.com. 86400 IN CNAME www.xuzhichao.com.
www.xuzhichao.com. 86400 IN A 192.168.20.31
www.xuzhichao.com. 86400 IN A 192.168.20.32
xuzhichao.com. 86400 IN SOA ns1.xuzhichao.com. mail.xuzhichao.com. 2021071602 10800 900 604800 86400
;; Query time: 0 msec
;; SERVER: 192.168.20.70#53(192.168.20.70)
;; WHEN: Sat Jul 17 11:26:59 CST 2021
;; XFR size: 23 records (messages 1, bytes 562)
这样我们就需要在主从DNS中明确指明允许哪台主机进行DNS同步,否则会存在安全隐患,配置指令为:
allow-transfer {192.168.20.71;}; <==指定允许哪些主机来同步自己的数据库解析文件;
also-notify {192.168.20.71;}; <==指定允许把自己的数据库解析文件同步给哪些主机;
此时从其他主机进行同步主DNS的文件就无法同步:
[root@xuzhichao ~]# dig -t axfr xuzhichao.com @192.168.20.70
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7 <<>> -t axfr xuzhichao.com @192.168.20.70
;; global options: +cmd
; Transfer failed.
DNS(5) -- 主从dns的更多相关文章
- 使用bind实现主从DNS服务器数据同步
一.bind简介 Linux中通常使用bind来实现DNS服务器的架设,bind软件由isc(www.isc.org)维护.在yum仓库中可以找到软件,配置好yum源,直接使用命令yum instal ...
- 架构师成长之路6.4 DNS服务器搭建(部署主从DNS)
点击返回架构师成长之路 架构师成长之路6.3 DNS服务器搭建(部署主从DNS) 部署主DNS : 点击 部署从DNS : 如下步骤 1.与主DNS一样,安装bind yum -y install ...
- centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更新 第三十节课
centos DNS服务搭建 DNS原理 使用bind搭建DNS服务器 配置DNS转发 配置主从 安装dig工具 DHCP dhclient 各种域名解析记录 mydns DNS动态更 ...
- 基于Bind实现的DNS正反向解析及主从DNS的配置
一.什么是DNS? 1.1 简单的理解,Domain Name System,是互联网一项核心的服务,他作为一个桥梁可以将域名和IP地址相互因素的一个分布式数据库,能够使人更加方便的访问互联网,而不用 ...
- DNS的主从,转发与负载功能
接着原来<DNS原理与应用>的文章,本章内容主要通过实现DNS的主从,转发,及基于域名解析不同的ip实现后端服务负载均衡的效果.最后再实现DNS的高级功能:类似CDN原理实现基于IP实现区 ...
- 使用BIND安装智能DNS服务器(一)---基本的主从DNS服务器搭建
参考网址:http://www.unixmen.com/dns-server-installation-step-by-step-using-centos-6-3/ DNS(Domain Name S ...
- DNS的主从、子域授权和转发服务器
DNS的主从.子域授权和转发服务器 主从DNS 注意: 1.全局配置options{} 里面的内容,其中 listen-on port 53 {any or local:}:或者直接注释掉,或删掉 a ...
- Centos7搭建主从DNS服务器
1.准备 例:两台192.168.11.10(主),192.168.11.11(从),域名www.test1.com # 主从DNS服务器均需要安装bind.bind-chroot.bind-util ...
- centos7 主从dns配置 bind服务
一,配置前请先关闭防火墙selinux 防火墙关闭方法,参见上一篇文章. setenforce 0 #临时关闭 修改/etc/selinux/config 文件 将SELINUX=enforc ...
- DNS劫持和DNS污染的区别
我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.常用的手段有:DNS劫持和DNS污染. 什么是DNS劫持 DNS劫持就是通过劫 ...
随机推荐
- CSP 2021 入门级
CSP 2021 入门级(DONE) 1.C 语言不支持面向对象. 2.计算机界的最高奖项"图灵奖"以英国的阿兰·艾伦·图灵命名,被称为"计算机界的诺贝尔奖". ...
- #分治NTT,容斥定理,排列组合#LOJ 6503 「雅礼集训 2018 Day4」Magic
题目 桌面上摆放着 \(m\) 种魔术卡,共 \(n\) 张,第 \(i\) 种魔术卡数量为 \(a_i\),魔术卡顺次摆放,形成一个长度为 \(n\) 的魔术序列, 在魔术序列中,若两张相邻魔术卡的 ...
- #zkw线段树#洛谷 3792 由乃与大母神原型和偶像崇拜
题目 给你一个长为 \(n\) 的序列 \(a\) 每次两个操作: 修改 \(x\) 位置的值为 \(y\) 查询区间 \([l,r]\) 是否可以重排为值域上连续的一段 分析 直接维护区间最大值和最 ...
- #Multi-SG#Poj 3537 Crosses and Crosses
题目 有\(n\)个格子,可以在上面涂黑,连续三个黑色获胜,问先手是否必胜 分析 如果先手选择第\(i\)个格子涂黑,那么后手对于\(i-1,i+1,i-2,i+2\)一旦涂黑必败, 所以如果第\(i ...
- #单调队列#JZOJ 1753 锻炼身体
题目 一个\(n*m\)的矩阵,有些格子不能经过,有\(k\)个时段, 要么停留某个格子,要么沿时段规定的方向移动,问最多能够移动多少次 \(n,m,k\leq 200\) 分析 题目已经提示了\(O ...
- 基于ArkUI框架开发-ImageKnife渲染层重构
ImageKnife是一款图像加载缓存库,主要功能特性如下: ●支持内存缓存,使用LRUCache算法,对图片数据进行内存缓存. ●支持磁盘缓存,对于下载图片会保存一份至磁盘当中. ●支持进行图片 ...
- 【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器
[中秋国庆不断更]OpenHarmony组件内状态变量使用:@State装饰器 @State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来.当状态改变时,UI会发生对 ...
- Git 教程:解密 .gitignore 文件、合并分支、解决冲突、及 Git 帮助
Git 帮助 如果你忘记了命令或命令的选项,你可以使用 Git 帮助. 在命令行中,有几种不同的使用帮助命令的方式: git command -help - 查看特定命令的所有可用选项 git hel ...
- 6. Eigenvalues and Eigenvectors
Keys: What are Eigenvalues and Eigenvectors? How to find Eigenvalues and Eigenvectors? Applications ...
- HarmonyOS线上Codelabs系列挑战赛第二期:调用三方库,制作酷炫的视觉效果
HarmonyOS线上Codelabs系列挑战赛正如火如荼进行中,开发者们可以通过体验基于HarmonyOS特性和能力的应用开发,快速构建有趣.有用的应用程序.火速加入,与众多开发者一起碰撞想法, ...