Linux入门攻坚——23、DNS和BIND基础入门1

DNS——Domain Name Service,协议(C/S,53/udp,53/tcp)
BIND——Berkeley Internet Name Domain,ISC(www.isc.org)

互联网络上主机之间的通信依靠的是IP,而人或程序一般使用机器名称,名称转换为地址的过程,解析,计算机名称(域名称)转换为IP地址,域名解析。

本地名称解析配置文件:hosts
    Linux系统:/etc/hosts
    Windows系统:%WINDOWS%/system32/drivers/etc/hosts
    如:1.1.1.1 www.mysitename.com
            2.2.2.2  www.isc.org

当本地主机访问www.mysitename.com时,查询这个名称解析配置文件,找到对应的IP,访问之。当网络上的主机很少时,每台机器维护一个本地的配置文件还比较容易,但随着网络扩展,主机越来越多,这种方式就无法适应。

在网上一台服务器上维护一个hosts,所有主机要访问某个名称时,就到这台机器上查找hosts文件,但是当超过一定规模时,对这个hosts文件的维护和访问查找也变得困难和缓慢。

于是开始划片而治,形成DNS树状结构,namespace,名称空间。
Top Level Domain:tld,顶级域
    com,edu,mil,gov,net,org,int,。。。

顶级域分三类:组织域、国家域(.cn、.jp、...)、反向域。

域是一个范围,域中有很多主机,主机的多少是域大小的根本因素。

一般域名是指的一个范围,而常说的访问某个域名,如www.abc.com,说的是主机的域名,即主机名加上域名,域名最右边是点号,代表根,必须要有的,平时使用没有是因为软件帮我们自动添加。

理论上,客户机访问一个主机域名主机的过程:

上面图示是一个理论上的过程,但是如果这样,客户机会很麻烦,实际中,客户机不会频繁的去访问各个域管理机,而是会直接问询设置中的域服务器,我们的主机IP地址设置中都会设置主DNS服务器地址,备DNS服务器地址等,客户机是访问这个DNS服务器的,由他来完成上面的过程。

DNS查询类型:
    递归查询:发出一次查询,就能得到最终结果的查询,如客户机向其DNS服务器发出的查询。
    迭代查询:客户机的DNS服务器查找到最终IP的过程,是迭代查询,可能需要多次查询。

这里,客户机的DNS服务器只是一个代理,并不是真正的DNS服务器,只是负责帮助迭代查找域名对应IP的,而一个域的域服务器,才是这个域的负责者,负责维护记录本域的所有信息。

名称服务器:域内负责解析本域内的名称的主机;域只是一个概念,落到实处,就是域的名称服务器。
    根服务器:13组服务器,这13组服务器中记录了顶级域的名称服务器与域名的对应信息。

解析类型:
    Name --> IP
    IP --> Name
    注意:正反向解析是两个不同的名称空间,是两颗不同的解析树;
DNS服务器的类型:
    主DNS服务器
    辅助(从或备)DNS服务器
    缓存DNS服务器
    转发器

主DNS服务器:维护所负责解析的域内解析库服务器;解析库由管理员维护;
从DNS服务器:从主DNS服务器或其他的从DNS服务器那里“复制”(区域传递)一份解析库;
    序列号:解析库的版本号,前提:主服务器解析库内容发生变化,其序列号递增;从服务器通过序列号判断是否需要同步解析库;
    刷新时间间隔:从服务器从主服务器请求同步解析库的时间间隔;
    重试时间间隔:从服务器从主服务器请求同步解析库失败时,再次尝试的时间间隔;应小于刷新间隔,否则没有意义了。
    过期时长:从服务器始终联系不到主服务器时,多久之后放弃从服务器角色,停止提供服务; 
    “通知”机制:主服务器内容修改后,主动通知从服务器。   
区域传递:
    全量传递:传递整个解析库;
    增量传递:传递解析库变化的那部分内容;
DNS:
    Domain:
        正向:FQDN --> IP
        反向:IP --> FQDN
        各需要一个解析库来分别负责本地域名的正向和反向解析
        正向区域:
        反向区域:
FQDN:Full Qualified Domain Name,完全合格域名,或完全限定域名,正式域名
    www.mydomain.com.
一次完整的查询请求经过的流程:
    Client --> hosts文件 --> Local Cache DNS --> DNS Server(recursion) --> Server Cache --> iteration(迭代) 
    解析答案:
        肯定答案:
        否定答案:请求的条目不存在等原因导致无法返回结果;

        权威答案:
        非权威答案:

区域解析库:由众多RR组成
资源记录:Resource Record,RR
    有记录类型的概念,记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX

   SOA:Start Of Authority,起始授权记录:一个区域解析库有且仅能有一个SOA记录,而且必须为解析库的第一条记录;
    A:internet Address,作用,FQDN --> IP
    AAAA:FQDN --> IPv6
    PTR:PoinTeR,IP --> FQDN
    NS:Name Server,专用于标明当前区域的DNS服务器
    CNAME:Canonical Name,别名记录
    MX:Mail eXchanger,邮件交换器,一个域接收邮件的主机

资源记录定义的格式:
    语法:name [TTL]  IN   rr_type   value  
    注意:1)TTL可从全局继承;2)@可用于引用当前区域的名字;3)同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应;4)同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同的名字可以找到同一个主机;

    SOA
        name:当前区域的名字,如:"mydomain.com.";
        value:由多部分组成
        1)当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
        2)当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用.替换,如:admin.mydomain.com;
        3)(主从服务协调属性的定义以及否定答案的统一的TTL)

    例如:mydomain.com.  86400 IN SOA  ns.mydomain.com.  admin.mydomain.com.    (
        2024051001;序列号
        2H  ;刷新时间
        10M  ;重试时间
        1W  ;过期时间
        1D  ;否定答案的TTL值
         )

    NS
        name:当前区域的名字
        value:当前区域的某DNS服务器的名字,如ns.mydomain.com.;
            注意:一个区域可以有多个NS记录;

        如:
        mydomain.com.   IN   NS    ns1.mydomain.com.
        mydomain.com.   IN   NS    ns2.mydomain.com.
        注意:
            1)相邻的两个资源记录的name相同时,后续的可省略;
            2)对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

    MX
        name:当前区域的名字
        value:当前区域的某邮件服务器(smtp服务器)的主机名;
            一个区域内,MX记录可有多个,但每个记录的value之前应该有一个数字(0~99),表示此服务器的优先级,数字越小优先级越高;

        如:mydomain.com.   IN    MX    10   mx1.mydomain.com.
                                           IN    MX    20   mx2.mydomain.com.

        注意:对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

    A
        name:某主机的FQDN,如www.mydomain.com.
        value:主机名对应主机的IP地址

        如:
            www.mydomain.com.   IN    A  1.1.1.1
            www.mydomain.com.   IN    A  1.1.1.2

            mx1.mydomian.com.   IN    A   1.1.1.3
            mx2.mydomian.com.   IN    A   1.1.1.3

        注意:为避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址;
            *.mydomain.com.    IN  A  1.1.1.4
            mydomain.com.      IN  A  1.1.1.4

    AAAA
        name:FQDN
        value:IPv6

    PTR
        name:IP,有特定格式,把IP地址反过来写,如:1.2.3.4,要写成:4.3.2.1;而且有特定后缀:in-addr.arpa,所以完整写法为:4.3.2.1.in-addr.arpa.
        value:FQDN

        如:
            4.3.2.1.in-addr.arpa.       IN    PTR    www.mydomain.com.
            简写成:4   IN  PTR   www.mydomain.com.
        注意:网络地址及后缀可省略;主机地址依然需要反着写;

    CNAME
        name:别名的FQDN
        value:正式名字的FQDN

        如:  web.mydomain.com.    IN    CNAME    www.mydomain.com.

DNS and BIND:

子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库中进行授权
    类似根域授权tld:
     com.   IN    NS    ns1.com.
     com.   IN    NS    ns2.com.
     ns1.com.   IN    A      2.2.2.1
     ns2.com.   IN    A      2.2.2.2

    mydomain.com. 在.com.的名称服务器上,解析库中添加资源记录:
    mydomain.com.     IN    NS      ns1.mydomain.com.
    mydomain.com.     IN    NS      ns2.mydomain.com.
    mydomain.com.     IN    NS      ns3.mydomain.com.
    ns1.mydomain.com.   IN   A     3.3.3.1
    ns2.mydomain.com.   IN   A     3.3.3.2
    ns3.mydomain.com.   IN   A     3.3.3.3

    glue record:粘合记录

域名注册:
    代理商:万网,新网;godaddy

    注册完成以后,想自己用专用服务来解析怎么做?
        管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址设为自己的;

BIND的安装配置

dns服务,程序包名bind,程序名named
程序包:
    bind、bind-libs、bind-utils
    bind-chroot:以/var/named/chroot/为根

bind:
    服务脚本:/etc/rc.d/init.d/named
    主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key
    解析库文件:/var/named/ZONE_NAME.ZONE
      注意:
        1)一台物理服务器可以同时为多个区域提供解析
        2)必须要有根区域文件:/var/named/named.ca
        3)应该有两个(如果包括IPv6,应该更多)实现localhost和本地回环地址的解析库;
    rndc:remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程,提供辅助性的管理功能,使用953/tcp端口。

安装:yum install bind -y

安装完毕,查看安装的文件:rpm -ql bind

安装后的文件及目录:

  /var/named/named.ca:是全球的13个根节点服务器;

;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC 
;       under anonymous FTP as
;           file                /domain/named.cache
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    April 11, 2017
;       related version of root zone:   2017041101
;
; formerly NS.INTERNIC.NET
;
.                        3600000      NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:ba3e::2:30
;
; FORMERLY NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:84::b
;
; FORMERLY C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
C.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2::c
;
; FORMERLY TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13
D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2d::d
;
; FORMERLY NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
E.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:a8::e
;
; FORMERLY NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f
;
; FORMERLY NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
G.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:12::d0d
;
; FORMERLY AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     198.97.190.53
H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::53
;
; FORMERLY NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fe::53
;
; OPERATED BY VERISIGN, INC.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:c27::2:30
;
; OPERATED BY RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fd::1
;
; OPERATED BY ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:9f::42
;
; OPERATED BY WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
M.ROOT-SERVERS.NET.      3600000      AAAA  2001:dc3::35
; End of file

  /var/named/named.localhost:本地localhost的解析库

$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1

/var/named/named.loopback::本地回环地址的解析库

$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1
	PTR	localhost.

/etc/named.conf:主配置文件
  全局配置:options{}
  日志子系统配置:logging{}
  区域定义:本机能够为哪些zone进行解析,就定义哪些zone:
    zone “ZONE_NAME” IN  {}
  包含的文件:include “”

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//

options {
        listen-on port 53 { 127.0.0.1; };
        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";
        allow-query     { localhost; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

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";

/etc/named.rfc1912.zones:其他区域的定义

zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};

zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};

在解析库中@代表区域名,就是这里的如localhost.localdomain、localhost

启动:service named start
查看:通过结果,看到服务只是监听在127.0.0.1,不会对外服务。
任何服务程序如果期望其能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上;

修改方法:将/etc/named.conf中options的第一行删除或在地址中增加本机的IP地址,如下:
listen-on port 53 { 192.168.138.139; 127.0.0.1; };
缓存名称服务器的配置:监听外部地址即可,如上配置后,就成为了缓存名称服务器。

dnssec:负责dns安全,一般建议关闭
  关闭dnssec
主配置文件中还需要将allow-query { localhost; } 改为{ any; },recursion yes表示允许递归查找。

至此,一个缓存名称服务器就完成了。

主DNS名称服务器
    (1)在主配置文件/etc/named.rfc1912.zones中定义区域
    zone "ZONE_NAME" IN {
        type master | slave | hint | forward;   
        // master:主区域  slave:从区域;hint:根域;forward:转发
        file "ZONE_NAME.zone";
        };

zone "mytest.com" IN {
        type master;
        file "mytest.com.zone";
};

    (2)定义区域解析库文件
        出现的内容:
          宏定义:$TTL、$ORIGIN
          资源记录:RR
    示例:/var/named/mytest.com.zone

$TTL 86400
$ORIGIN mytest.com.
@       IN      SOA     ns1.mytest.com.  admin.mytest.com. (
                        2024051001
                        1H
                        5M
                        7D
                        1D )
        IN      NS      ns1
        IN      NS      ns2
        IN      MX 10   mx1
        IN      MX 20   mx2
ns1     IN      A       192.168.138.101
ns2     IN      A       192.168.138.102 
mx1     IN      A       192.168.138.103 
mx2     IN      A       192.168.138.104 
www     IN      A       192.168.138.101
ftp     IN      CNAME   www

检查主配置文件是否存在语法错误:named-checkconf,将检测/etc/named.conf及其包含的文件如/etc/named.rfc1912.zones
检查解析库文件语法:named-checkzone “zone_name” zone_name.file
如:named-checkzone "mytest.com" /var/named/mytest.com.zone

    (3)文件权限

名称解析相关的文件属主是root,属组是named,要将自己创建的文件权限修改:

至此,主DNS服务器配置完毕,可以解析相关域的名称了。
使用dig命令测试,我们创建的mytest.com区域中有www主机,就解析这个主机:
dig -t A www.mytest.com @192.168.138.139

修改mytest.com.zone文件,添加几个www.mytest.com的A记录,即同一个域名多个IP,然后重新加载:service named reload,也可以使用rndc reload
不使用restart,是因为restart会导致很多缓存等信息全部丢失,而reload只是重新加载解析库文件,其他信息还在。然后再次测试解析:

如果在dig命令中不加@server,则会使用/etc/resolv.conf配置文件中的dns服务器进行解析:

测试命令dig:
  dig [-t type]  name  [@SERVER]   [query options]
  dig用于测试dns系统,因此,不会查询hosts文件进行解析;
  查询选项:
    +[no]trace:是否跟踪解析过程
    +[no]recurse:是否进行递归解析
对于测试的结果,要注意的是flags标记值:

host命令:
  host [-t type] name [SERVER]

nslookup命令:
  nslookup [-option] [name | -] [server]
  交互式模式:nslookup>
      server IP:指明使用哪个DNS Server进行查询;
      set q=RR_TYPE:指明查询的资源记录类型;
​​​​​​​      NAME:要查询的名称
    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GT2512-STBA 三菱触摸屏12.1寸型

T2512-STBA参数说明&#xff1a;12.1"、SVGA 800*600、65536色、TFT彩色液晶显示屏、AC电源、32MB内存 三菱触摸屏GT2512-STBA性能规格详细说明&#xff1a; [显示部] 显示软元件&#xff1a;TFT彩色液晶显示屏 画面尺寸&#xff1a;12.1寸 分辨率&#xff1a;SVGA 80…

Windows10环境搭建http服务器

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

连锁收银系统的五大功能

连锁收银系统是零售行业中不可或缺的工具&#xff0c;它为连锁店铺提供了必要的管理和运营支持。一个完善的连锁收银系统应当具备以下五大功能&#xff0c;以满足不断发展的零售业务需求。 1. 进销存管理 进销存管理是连锁店铺运营的核心&#xff0c;也是连锁收银系统不可或缺…

每日两题 / 101. 对称二叉树 230. 二叉搜索树中第K小的元素(LeetCode热题100)

101. 对称二叉树 - 力扣&#xff08;LeetCode&#xff09; 用两个指针同时遍历树的左右子树即可 每次遍历时&#xff0c;一个指针向左&#xff0c;另一个就要向右。一个向右&#xff0c;另一个就要向左 /*** Definition for a binary tree node.* struct TreeNode {* in…

生信人写程序1. Perl语言模板及配置

生物信息领域常用语言 个人认为&#xff1a;是否能熟悉使用Shell(项目流程搭建)R(数据统计与可视化)Perl/Python/Java…(胶水语言&#xff0c;数据格式转换&#xff0c;软件间衔接)三门语言是一位合格生物信息工程师的标准。 生物信息常用语言非常广泛&#xff0c;我常用的有…

【C++】学习笔记——模板进阶

文章目录 十一、模板进阶1. 非类型模板参数2. 按需实例化3. 模板的特化类模板的特化 4. 模板的分离编译 未完待续 十一、模板进阶 1. 非类型模板参数 模板参数分为类型形参和非类型形参 。类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的…

经典权限五张表功能实现

文章目录 用户模块(未使用框架)查询功能实现步骤代码 新增功能实现步骤代码 修改功能实现步骤代码实现 删除功能实现步骤代码实现 用户模块会了&#xff0c;其他两个模块与其类似 用户模块(未使用框架) 查询功能 这里将模糊查询和分页查询写在一起 实现步骤 前端&#xff1…

泵站远程监控

在科技日新月异的今天&#xff0c;智能化管理已经成为各行业提升效率、降低成本的关键手段。特别是在水利领域&#xff0c;泵站作为水资源调配的重要节点&#xff0c;其运行效率和安全稳定性直接关系到整个供水系统的稳定。HiWoo Cloud平台凭借其强大的物联网和云计算技术&…

两重惊喜!奥特曼预告GPT-4和ChatGPT重大更新,Open AI要放大招

OpenAI在今天官宣13日&#xff08;下周一10点&#xff09;开启线上直播&#xff0c;将会展示全新的ChatGPT demo的演示以及GPT-4的重大更新&#xff01; OpenAI首席执行官Sam Altman在X上表示&#xff0c;这些的发布会&#xff0c;公司不会宣布下一代对话式人工智能GPT-5或人工…

游戏安全干货报告干货下载 |《2023年度游戏安全观察与实践报告》

AIGC浪潮从大洋彼岸袭来&#xff0c;使得全球资本市场看好AIGC将对游戏行业“成本”与“效率”带来革命性的变化&#xff1b;年末&#xff0c;国家新闻出版署一次性批准了105款国产游戏版号&#xff0c;为历史之最&#xff1b;全年亦有不少“某某大厂裁撤游戏业务”、“某某游戏…

C语言写扫雷游戏(数组和函数实践)

目录 最后是代码啦&#xff01; 手把手教你用C语言写一个扫雷游戏&#xff01; 1.我们搭建一下这个多文件形式的扫雷游戏文件结构 2.在主函数里面设置一个包含游戏框架的菜单 菜单可以方便游戏玩家选择要进行的动作和不断地进行下一局。 3.switch语句连接不同的结果 菜单可…

C++实现一个简单的控制cpu利用率的程序

写一个程序&#xff0c;让控制cpu利用率在20%左右 思路很简单&#xff1a;每个循环控制sleep的时间占比 #include <iostream> #include <chrono> #include <unistd.h>int main() {int ratio 20;int base_time 1000;int sleeptime base_time * (100-ratio…

信息系统架构模型_3.企业数据交换总线

1.企业数据交换总线 实践中&#xff0c;还有一种较常用的架构&#xff0c;即企业数据交换总线&#xff0c;即不同的企业应用之间进行信息交换的公共通道&#xff0c;如图1所示。 图1 企业数据交换总线架构 这种架构在大型企业不同应用系统进行信息交换时使用较普遍&am…

uniapp管理后台编写,基于uniadmin和vue3实现uniapp小程序的管理后台

一&#xff0c;创建uniAdmin项目 打开开发者工具Hbuilder,然后点击左上角的文件&#xff0c;点新建&#xff0c;点项目。如下图。 选择uniadmin&#xff0c;编写项目名&#xff0c;然后使用vue3 记得选用阿里云服务器&#xff0c;因为最便宜 点击创建&#xff0c;等待项目创…

2024年4月12日饿了么春招实习试题【第三题】-题目+题解+在线评测,2024.4.12,饿了么机试【Kruskal 算法, 最小生成树】

2024年4月12日饿了么春招实习试题【第三题】-题目题解在线评测&#xff0c;2024.4.12&#xff0c;饿了么机试 &#x1f3e9;题目一描述&#xff1a;样例1样例2解题思路一&#xff1a;[Kruskal 算法](https://baike.baidu.com/item/%E5%85%8B%E9%B2%81%E6%96%AF%E5%8D%A1%E5%B0%…

牛客网Java实战项目--仿牛客网社区的学习笔记

仿牛客网社区的学习笔记 1. 项目环境搭建1.1 开发社区首页 2.开发社区登录模块2.1 发送邮件2.2 开发注册功能2.3 会话管理2.4 生成验证码2.5 开发登录、退出功能2.6 显示登录信息 4 Redis实现点赞关注4.1 Spring整合Redis访问Redis的方法&#xff1a; 4.2 Redis实现点赞4.2.1 点…

Git系列:git merge 使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Redis基础面试知识点(1)

相比于C字符串&#xff0c;SDS的优势&#xff1a; O(1)获取字符串的长度不会缓冲区溢出减少修改字符串时所需的内存重新分配的次数&#xff08;空间预分配、惰性空间释放&#xff09;二进制API安全&#xff08;通过len获取长度&#xff09;兼容部分C字符串函数 Redis hash策略…

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列&#xff0c;该队列新增了消费者 不再是一个&#xff0c;所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…

机器学习算法应用——CART决策树

CART决策树&#xff08;4-2&#xff09; CART&#xff08;Classification and Regression Trees&#xff09;决策树是一种常用的机器学习算法&#xff0c;它既可以用于分类问题&#xff0c;也可以用于回归问题。CART决策树的主要原理是通过递归地将数据集划分为两个子集来构建决…