centos7部署智能dns实战应用

主DNS:192.168.101.129

备DNS:192.168.101.128

原理:

一、下载软件

  1. bind-9.17.9.tar.xz的下载地址:https://ftp.isc.org/isc/bind9/9.17.9/bind-9.17.9.tar.xz。
  2. 更多的bind版本可以从https://ftp.isc.org/isc/bind9/下载。

二:安装bind软件

1:安装bind

yum install libuv*  openssl openssl-devel libcap libcap-devel 

 cd /opt/
wget https://ftp.isc.org/isc/bind9/9.17.9/bind-9.17.9.tar.xz
tar -xvf bind-9.17.9.tar.xz
cd bind-9.17.9
./configure --prefix=/usr/local/named --enable-threads && make && make install
chown -R bind:bind /usr/local/named
 mkdir /var/named
chown -R bind:bind /var/named/
chmod 700 /usr/local/named/etc/

2:生成named.root文件

 cd /var/named/
 wget https://ftp.internic.net/domain/named.root
 

3:生成的rndc.conf

# /usr/local/named/sbin/rndc-confgen >/usr/local/named/etc/rndc.conf

[root@localhost named]# /usr/local/named/sbin/rndc-confgen >/usr/local/named/etc/rndc.conf[root@localhost named]# cat /usr/local/named/etc/rndc.conf 
# Start of rndc.conf
key "rndc-key" {algorithm hmac-sha256;secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};options {default-key "rndc-key";default-server 127.0.0.1;default-port 953;
};
# End of rndc.conf# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#       algorithm hmac-sha256;
#       secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
# };
# 
# controls {
#       inet 127.0.0.1 port 953
#               allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

 4:将生成的rndc.conf写入到named.conf文件中

[root@localhost named]# tail -10 /usr/local/named/etc/rndc.conf |head -9|sed 's/#\ //g' > /usr/local/named/etc/named.conf[root@localhost named]# 
[root@localhost named]# cat /usr/local/named/etc/named.conf 
key "rndc-key" {algorithm hmac-sha256;secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};controls {inet 127.0.0.1 port 953allow { 127.0.0.1; } keys { "rndc-key"; };
};

三:bind路径与chroot

1:配置详解

配置文件:/usr/local/named/etc/named.conf,设定zone file的目录/var/named,权限等。

zone file: 记录主机名与ip地址对应

named.conf: 是bind的主配置文件

/var/named:  zone 文件默认放置目录

/var/run/named: named程序执行时默认放置的pid文件

2:cache-only 与 forwardding DNS

      A:   cache-only 服务器:仅有 “.” 这个zone file的简单DNS,没有自己的DNS服务器,只有缓存查询结果功能

     B:   forwarding服务器: 指定一台上层DNS服务器作为forwarding的目录。

如何设定cache-only 与 forwardding?

很简单,因为不需要设定正反解析的zone文件,所以只需要设定一下named.conf配置文件即可

3:named.conf配置文件,添加options相关参数

[root@localhost etc]# cat named.conf
options {listen-on port 53 { any; };     //any  监听本地所有地址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; };/* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.- If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so willcause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatlyreduce such attack surface */recursion yes;dnssec-enable yes;dnssec-validation yes;forward only;forwarders {114.114.114.114;8.8.8.8;8.8.4.4;};pid-file "/run/named/named.pid";
};key "rndc-key" {algorithm hmac-sha256;secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};controls {inet 127.0.0.1 port 953allow { 127.0.0.1; } keys { "rndc-key"; };
};

option选项解析:

    DNS的options部分包含了多种配置选项,‌用于控制DNS服务器的行为和安全性。‌ 这些选项包括但不限于监听端口、‌允许查询的客户端、‌转发服务器设置、‌缓存设置、‌递归查询数量等。‌以下是具体的选项说明:‌

  1. 监听设置:‌

    • listen-on port 指定DNS服务器监听的IP地址和端口号,‌例如 listen-on port 53 { 192.168.0.78 }; 表示服务器在IP地址192.168.0.78的53端口上监听DNS查询请求。‌如果不指定IP地址,‌则默认监听所有IP地址收到的请求。‌
    • listen-on-v6 用于监听IPv6的DNS查询请求。‌
  2. 区域设置:‌

    • directory 指定区域zone配置文件所在的目录,‌例如 directory "/var/named"; 指定配置文件存储在/var/named目录下。‌
  3. 安全与访问控制:‌

    • allow-query 和 allow-recursion 用于控制哪些客户端可以查询DNS服务器以及是否允许这些客户端提交递归查询。‌例如,‌allow-query { 192.168.0.101;192.168.1.1; } 只允许这两个IP地址的客户端查询。‌
    • allow-transfer 控制区域传输的辅助区域,‌即哪些服务器可以请求区域传输。‌
  4. 转发设置:‌

    • forwarders 指定当本地DNS服务器无法解析某个域名时,‌将查询转发到的上游DNS服务器。‌例如,‌forwarders { 1.1.1.1; } 表示当本地DNS服务器无法解析时,‌将查询转发到IP地址为1.1.1.1的DNS服务器。‌如果担心配置的上层DNS服务器可能会挂掉,可以配置多个上层DNS服务器地址。
    • forward only; 这个设定可以让DNS服务器仅进行forward转发,即使有zone file的设定,也不生效使用,只会将查询权交给配置DNS服务器而已,是cache only DNS最常见的设定。
  5. 性能与缓存设置:‌

    • max-cache-size 设置DNS缓存的最大尺寸,‌例如 max-cache-size 10M 表示缓存的最大尺寸为10MB。‌
    • recursive-clients 和 tcp-clients 分别控制同时进行的递归查询和TCP连接的最大数量。‌
  6. dump-file

          dump-file通常是指配置DNS服务器时,设置或指定一个文件用于记录或转储DNS查询的详细信息。这通常用于调试目的。

       注意,过度使用dump-file可能会导致磁盘空间快速被占用,因此应该谨慎使用,并确保指定的转储文件路径有足够的磁盘空间。

   7. statistics-file

        是一个配置选项,用于指定保存DNS查询统计信息的文件。这个文件可以帮助我们了解DNS服务器的工作状态,分析DNS性能,调优DNS配置等。

在BIND(Berkeley Internet Name Domain)这个广泛使用的DNS软件中,可以在named.conf配置文件中使用statistics-file选项。

以下是一个配置示例:

options {

   statistics-file "/var/log/named/data";

   statistics-cumulative yes;

};

在这个例子中,所有的统计数据将会被保存在"/var/log/named/data"文件中。"statistics-cumulative yes"表示统计数据会累计到文件中,而不是每次服务器重启时都重置。

注意,这个文件的路径必须是DNS服务器可以访问的,并且服务器必须有权限写入这个文件。如果你不想使用统计文件,可以将这个选项设置为"no"或者完全删除这个选项。

8. memstatistics-file 

   memstatistics-file 是 DNS 服务器软件(例如 BIND)中的一个选项,用于指定存储 DNS 查询统计信息的内存文件的路径。这个功能可以帮助诊断 DNS 服务器性能问题。

当你在 DNS 服务器的配置文件中看到 options { memstatistics-file "/var/log/named/data/named_mem_stats.txt"; }; 这样的行时,这意味着 DNS 服务器会在指定的文件 /var/log/named/data/named_mem_stats.txt 中记录内存统计信息。

这个功能在调试内存问题时非常有用,可以帮助了解 DNS 服务器如何使用内存资源,包括何时何地分配了多少内存,以及何时发生了内存泄漏。

请注意,这个选项可能需要特定的权限才能写入指定的文件,服务器可能需要以 root 用户或其他具有适当权限的用户身份运行,才能正确写入文件。

9. RECURSING-FILE

    DNS的OPTIONS中的RECURSING-FILE是一个配置选项,用于指定存储DNS递归查询结果的文件。递归查询是DNS服务器在无法直接解析查询时,代表客户端向上级服务器查询的行为。递归查询结果的缓存可以提高查询效率,减少网络负载。

在配置DNS服务器时,可以通过编辑配置文件来设置RECURSING-FILE选项。例如,在BIND(Berkeley Internet Name Domain)中,可以在named.conf中添加类似以下的配置:

options {

...

  recursing-file "named.recursing";

  recursion yes;

...

};

在上述配置中,named.recursing是存储递归查询结果的文件。

需要注意的是,RECURSING-FILE选项通常需要配合其他选项,如recurse(允许服务器进行递归查询),trust-anchor(指定可信的根区域)等,并且要确保配置了正确的文件权限和路径,以便DNS服务器能够正确地读写这个文件。

通过这些选项,‌管理员可以精细地控制DNS服务器的行为,‌包括监听的网络接口、‌允许的查询类型、‌缓存策略等,‌以满足特定的网络需求和安全要求。‌

10. secroots-file

options { secroots-file; 是一个配置指令,用于指定存储安全根证书的文件的位置。这通常用在DNS服务器中,以确保DNS服务器从可信的来源获取其数据。

这个指令通常在BIND(Berkeley Internet Name Domain)的配置文件中出现,如named.conf。例如:

options {

secroots-file "/path/to/secroots.db";

...

};

在这个例子中,/path/to/secroots.db 是存储安全根证书的文件的路径。这个文件通常是一个数据库文件,可以是text或SQLite格式。

请注意,这个指令可能需要特定的BIND版本才能正常工作,且具体的配置可能会根据你的操作系统和安全策略有所不同。

3.根据当前的需求修改配置文件named.conf

# mkdir -p /var/named/data
# chown -R bind.bind /usr/local/named/
# chown -R bind.bind /var/named/

1:启动DNS服务
# /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind2:查看日志
# tailf -200 /var/log/messages3:查看监听端口
# netstat -anpt|grep 53
tcp        0      0 192.168.101.129:53      0.0.0.0:*               LISTEN      35583/named         
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      35583/named         
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      35583/named         
tcp6       0      0 ::1:53                  :::*                    LISTEN      35583/named         
# cat /usr/local/named/etc/named.conf
options {listen-on port 53 { any; };     //any  监听本地所有地址listen-on-v6 port 53 { ::1; };directory       "/var/named";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";recursing-file  "/var/named/data/named.recursing";allow-query     { any; };forward only;forwarders {114.114.114.114;8.8.8.8;8.8.4.4;};recursion yes;pid-file "/run/named/named.pid";
};key "rndc-key" {algorithm hmac-sha256;secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};controls {inet 127.0.0.1 port 953allow { 127.0.0.1; } keys { "rndc-key"; };
};

4:上面配置是没有配置zone区域,只是配置了DNS转发功能。测试

bind9配置zone详解

// 定义一个DNS区域(zone)

zone "example.com" {

type master; // 指定区域类型为主DNS区域

file "example.com.zone"; // 指定区域文件路径

allow-update { none; }; // 允许更新的客户端列表,这里设置为无客户端可以更新

};

// 定义一个区域文件的例子

$TTL 86400

@ IN SOA ns1.example.com. admin.example.com. (

               2013042201 ; Serial

               3600 ; Refresh

               1800 ; Retry

               604800 ; Expire

               86400 ; Minimum TTL

)

IN NS ns1.example.com.

IN MX 10 mail.example.com.

ns1 IN A 192.0.2.1

mail IN A 192.0.2.2

www IN CNAME webserver.example.com.

webserver IN A 192.0.2.3

这个配置文件定义了一个名为"example.com"的DNS区域,并指定了一个区域文件"example.com.zone"。SOA记录定义了区域的授权开始,并设置了更新策略。NS记录指定了区域的名称服务器。MX记录定义了邮件交换记录。其他记录定义了该区域内的具体名称和对应的IP地址。

SOA后面7个参数的详解:

查询某个baidu.com的SOA记录:

# dig -t SOA baidu.com; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16 <<>> -t SOA baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58071
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; QUESTION SECTION:
;baidu.com.                     IN      SOA;; ANSWER SECTION:
baidu.com.              3600    IN      SOA     dns.baidu.com. sa.baidu.com. 2012148485 300 300 2592000 7200;; Query time: 90 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: 六 8月 03 23:14:10 CST 2024
;; MSG SIZE  rcvd: 70

DNS的SOA记录(‌Start of Authority record)‌是DNS区域文件中的关键记录,‌它提供了关于该区域的重要管理信息。‌

其中称为起始授权机构(SOA, Start Of Authority)的资源记录,描述了域名的管理员、电子邮件地址,和一些时间参数。

2312148485 300 300 2592000 7200

  • 区域名称:‌dns.baidu.com. :这是SOA记录所在区域的名称,‌该域名解析使用的服务器。‌
  • 管理员电子邮件地址:‌通常以 sa.baidu.com. 的形式表示,‌虽然在实际应用中可能缺少“@”符号,‌以.代替@,但这在SOA记录中是等效于电子邮件地址的。‌
  • 序列号:‌2312148485:可以看出是23年12日14日,8485表示更新一次,增加一个数,一个递增的数字,‌用于标识区域信息的版本。‌当区域文件发生更改时,‌序列号会增加,‌这有助于DNS服务器确定何时需要从主服务器获取最新的区域数据。‌
  • 刷新间隔:‌300 :从服务器应该多久向主服务器请求区域数据的更新。‌这个值以秒为单位,‌通常设置为86400秒(‌即一天)‌。‌
  • 重试间隔:‌300:如果在刷新间隔期间无法从主服务器获取数据,‌从服务器将等待这个间隔后再试。‌这有助于在主服务器暂时不可用时保持一定的灵活性。‌单位为秒。通常小于刷新时间。
  • 过期时间:‌2592000:如果主服务器持续不可用,‌从服务器在经过这个时间后将停止提供服务。‌这是一个安全机制,‌以防主服务器长时间无法访问。‌当备用DNS服务器无法联系上主DNS服务器时,备用DNS服务器可以在多长时间内认为其缓存是有效的,并供用户查询。
  • 默认TTL值:‌7200:缓存DNS服务器可以缓存记录多长时间,单位为秒。这个时间比较重要,太短会增加主DNS服务器负载。如果太长,在域名信息改变时,需要更长的时间才能各地的缓存DNS服务器才能得到变化信息。

SOA记录是每个DNS区域都必须有的记录,‌它定义了区域的权威性和管理信息。‌通过SOA记录,‌DNS服务器能够知道如何正确地维护和更新区域数据,‌确保DNS查询的准确性和效率。‌

注意事项:

     除了Serial不超过2的32次方之外,针对这几个数值什么限制,参考如下

Refresh >=Retry * 2

Refresh + Retry < Expire

Expire >= Retry * 10

Expire >= 7Days

也可以参考各大网站的这个数值。如上面的baidu.com

四:配置zone

1:named.conf配置

# cat /usr/local/named/etc/named.confoptions {listen-on port 53 { any; };     //any  监听本地所有地址listen-on-v6 port 53 { ::1; };directory       "/var/named";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";recursing-file  "/var/named/data/named.recursing";allow-query     { any; };recursion yes;pid-file "/run/named/named.pid";
};zone "." IN {type hint;file "named.root";
};zone "etiantian.org" IN {type master;file "etiantian.org.zone";allow-update {none;};allow-transfer {192.168.101.128;};notify yes;also-notify {192.168.101.128;};
};zone "101.168.192.in-addr.arpa" IN {type master;file "192.168.101.zone";allow-transfer {192.128.101.128;};
};key "rndc-key" {algorithm hmac-sha256;secret "RzUDTXQtn0qs6Gdfal5AXUZpOng0LmIrRef/a7sJ5Vg=";
};controls {inet 127.0.0.1 port 953allow { 127.0.0.1; } keys { "rndc-key"; };
};

2:创建zone文件

# cat /var/named/etiantian.org.zone 
$TTL 1D
@       IN SOA  etiantian.org. admin.etiantian.org. (2024080400       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      dns.etiantian.org.
dns          A       192.168.101.129
www          A       192.168.101.120
test2        A       192.168.8.202
test1      CNAME     www----------------------------------------------------------------------------- 
# cat /var/named/192.168.101.zone 
$TTL 3H
@    IN SOA  etiantian.org. admin.etiantian.org. (2024080400       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS     dns.etiantian.org.
120     PTR     www.etiantian.org.-------------------------------------------------------------------------------# 配置文件检查,没有输出报错信息,# /usr/local/named/bin/named-checkconf -c /usr/local/named/etc/named.conf

3:重启named服务

1:找出named服务的pid
# ps -ef |grep named|grep -v grep
bind      36351      1  0 03:35 ?        00:00:00 /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind2: kill掉named的pid
# kill -9  363513:启动named服务
# /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind

4:测试,在客户端机器上添加dns地址192.128.101.129

1:客户端机器上添加DNs的地址:nameserver 192.168.101.129# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 192.168.101.1292:测试是否解析。如果解析失败了,那是指向了114.114.114.114的地址,可以/etc/resolv.conf配置文件注释掉。再测试。# nslookup test1.etiantian.org
Server:         192.168.101.129
Address:        192.168.101.129#53test1.etiantian.org     canonical name = www.etiantian.org.
Name:   www.etiantian.org
Address: 192.168.101.120

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

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

相关文章

【深入探秘Hadoop生态系统】全面解析各组件及其实际应用

深入探秘Hadoop生态系统&#xff1a;全面解析各组件及其实际应用 引言 在大数据时代&#xff0c;如何高效处理和存储海量数据成为企业面临的重大挑战。根据Gartner的统计&#xff0c;到2025年&#xff0c;全球数据量将达到175泽字节&#xff08;ZB&#xff09;&#xff0c;传…

学习安卓开发遇到的问题

问题1&#xff1a;学习禁用与恢复按钮中&#xff1a; java代码报错&#xff1a;报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下&#xff1a;&#xff08;实现功能在代码后面&#xff09; package com.example.apptest;import static java.…

【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)

1&#xff0c;关于 unity test 测试框架的介绍 unity test 是 ThrowTheSwitch.org 的一个主要工程。它是专注于为嵌入式工具链而生的C语言单元测试框架。它可以适用于大工程或者小工程都可以。它的核心文件是一个.c文件和两个头文件。 备注&#xff1a; 下载源码地址&#xff…

应急响应-Web3

打开虚拟机之后&#xff0c;运行解题系统&#xff1a; 共有三个问题&#xff01; 攻击者的两个IP地址 首先我们看到机器的桌面上还是存在phpstudy&#xff0c;那就还是先去看看是不是从web层面进行的攻击&#xff0c;上传webshell从而getshell。 利用D盾尝试对phpstudy目录进…

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想&#xff01;我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等&#xff0c;Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载&#xff1a;ceomax-pro7.6.zip…

【系统架构设计师】二十四、安全架构设计理论与实践②

目录 三、系统安全体系架构规划框架 3.1 信息系统安全体系规划 3.2 信息系统安全规划框架 3.2.1 信息系统安全规划依托企业信息化战略规划 3.2.2 信息系统安全规划需要围绕技术安全、管理安全、组织安全考虑 3.2.3 信息系统安全规划以信息系统与信息资源的安全保护为核心…

[环境配置]Pycharm:Failed to start [PowerShell.exe]

解决方法&#xff0c;点Local旁边的 号&#xff0c;点击Command Prompt&#xff0c;即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径&#xff0c;可以去Settings→Tools→Terminal中&#xff0c;修改Shell Path实现&#xff0c;改为cmd.exe…

AWS开发人工智能:如何基于云进行开发人工智能AI

随着人工智能技术的飞速发展&#xff0c;企业对高效、易用的AI服务需求日益增长。Amazon Bedrock是AWS推出的一项创新服务&#xff0c;旨在为企业提供一个简单、安全的平台&#xff0c;以访问和集成先进的基础模型。本文中九河云将详细介绍Amazon Bedrock的功能特点以及其收费方…

117页PPT埃森哲-物流行业信息化整体规划方案

一、埃森哲-物流行业信息化整体规划方案 资料下载方式&#xff0c;请看每张图片右下角信息 埃森哲在物流行业信息化整体规划项目中的核心内容&#xff0c;旨在帮助物流企业通过信息技术的应用实现业务流程的优化、运营效率的提升以及市场竞争力的增强。以下是埃森哲在此类项目…

C语言指针(1)

目录 一、内存和地址 1、生活中的例子 2、内存的关系 二、指针变量和地址 1、&符号&#xff0c;%p占位符 2、一个简单的指针代码。 3、理解指针 4、解引用操作符 5、指针变量的大小。 三、指针变量类型的意义 1、指针解引用的作用 2、指针指针 3、指针-指针 4…

Python初学者必须掌握的基础知识点

Python初学者必须掌握的基础知识点包括数据类型与变量、控制结构&#xff08;条件语句和循环语句&#xff09;、基本数据结构&#xff08;列表、元组、字典、集合&#xff09;、函数与模块、以及字符串处理等。以下是对这些基础知识点及其对应代码的详细介绍&#xff1a; 1. …

利用Llama 3 API实现盈利:细节解析

随着人工智能技术的快速发展,基于大模型的服务成为了众多初创企业关注的焦点。Llama 3 API作为一种强大的语言模型接口,为小型公司提供了利用先进AI技术的机会。本文将探讨这些小公司如何通过Llama 3 API实现盈利,并分析其中的关键因素。 一、Llama 3 API性能概览 批处理输…

Golang | Leetcode Golang题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; func maxProduct(words []string) (ans int) {masks : map[int]int{}for _, word : range words {mask : 0for _, ch : range word {mask | 1 << (ch - a)}if len(word) > masks[mask] {masks[mask] len(word)}}for x, lenX : ra…

设计模式 - Singleton pattern 单例模式

文章目录 定义单例模式的实现构成构成UML图 单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现 总结其他设计模式文章&#xff1a;最后 定义 单例模式是一种创建型设计模式&#xff0c;它用来保证一个类只有一个实…

Candance Allegro 入门教程笔记:PCB封装库的组成元素

文章目录 一、PCB封装库的组成元素二、使用Padstack Edictor制作封装焊盘引脚三、PCB Editor软件创建贴片封装&#xff08;STM32F103T8U6 QFN36 为例&#xff09;1.引入库2.读入数据 一、PCB封装库的组成元素 一般来说&#xff0c;针对于Allegro软件&#xff0c;完整的封装是由…

数据结构之《二叉树》(中)

在数据结构之《二叉树》(上)中学习了树的相关概念&#xff0c;还了解的树中的二叉树的顺序结构和链式结构&#xff0c;在本篇中我们将重点学习二叉树中的堆的相关概念与性质&#xff0c;同时试着实现堆中的相关方法&#xff0c;一起加油吧&#xff01; 1.实现顺序结构二叉树 在…

数据结构:带索引的双链表IDL

IDLindexed double list 如图&#xff0c;下方是一个双链表&#xff0c;上方是索引。索引储存为结构体数组&#xff0c;结构体内包括一个指针&#xff0c;和长度。 假设索引只有一个&#xff0c;这时&#xff0c;它应该指向双链表的中间&#xff0c;这样才能提高搜索效率。称…

MyBatis 框架的两大缺点及解决方案

MyBatis 框架的两大缺点及解决方案 1. SQL 编写负担重1.1 缺点概述1.2 解决方案 2. 数据库移植性差2.1 缺点概述2.2 解决方案 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; MyBatis 作为一款广受欢迎的 Java 持久层框架&#xff0c;尽管其…

吴恩达机器学习作业-ex7(主成分分析)

data1 导入库&#xff0c;读取数据&#xff0c;并进行可视化数据 import numpy as np import scipy.io as sio import matplotlib.pyplot as plt#读取数据 path "./ex7data1.mat" data sio.loadmat(path) # print(data.keys()) X data.get("X") # pri…

『C++实战项目 负载均衡式在线OJ』一、项目介绍与效果展示(持续更新)

文章目录 一、项目介绍二、开发环境三、第三方库四、相关技术五、项目整体框架代码目录框架 代码仓库连接 点击这里✈ 一、项目介绍 本项目是实现一个仿 leetcode 的 OJ (Online-Judge&#xff09;系统。更准确的说应该称之为leetcode 的裁剪版。因为本项目只实现了leetcode中…