Linux——DNS的配置和使用

一、DNS

域名服务器,实现IP和域名的转换

DNS 协议运行在 UDP 协议之上,使用端口号 53

2.结构

DNS 的命名空间的结构如下:
1. 根域名( Root Domain ): 根域名位于 DNS 命名空间的顶部,它表示空字符串( "" ),通常以
一个点号( . )表示。根域名下面直接连接着顶级域名( TLD )。
2. 顶级域名( Top-Level Domain TLD ): 顶级域名是根域名的直接子节点,例如
".com" ".net" ".org" ".gov" ".edu" 等。顶级域名用于表示域名的类型或所属组织类型。
3. 二级域名( Second-Level Domain SLD ): 二级域名是位于顶级域名之下的域名部分,例如
".example" 。二级域名通常用于表示特定的组织、公司或网站。
4. 子域名( Subdomain ): 子域名是位于二级域名之下的域名部分,例如 " www.example.com "
中的 "www" 就是一个子域名。子域名通常用于区分不同的服务、部门或功能。
example是权威域名,权威域名是递归访问

二、DNS报文结构

有任何网络通信协议一样, DNS 请求报文和应答报文均需要满足一定的格式,才能被通信双方所理解。这就是 DNS 协议负责的范畴,它位于传输层之上,属于 应用层 协议。
DNS 报文分为 请求 应答 两种,结构是类似的,大致分为五部分:
头部( header ),描述报文类型,以及其下 4 个小节的情况;
问题节( question ),保存查询问题;
答案节( answer ),保存问题答案,也就是查询结果;
授权信息节( authority ),保存授权信息;
附加信息节( additional ),保存附加信息;

问题记录

一个问题记录由 3 个字段组成:
  • 待查询域名 Name ),这个字段长度不固定,由具体域名决定;
  • 查询类型 :
        ( Type ),域名除了关联 IP 地址,还可以关联其他信息,常见类型包括(下节详细介                       绍):

            1 表示 A 记录,即 IP 地址;

              28 表示 AAAA 记录,即 IPv6 地址;

                etc

  • Class )通常为 1 ,表示互联网地址;
域名字段,它的长度是不固定的。域名按 . 切分成若干部分,再依次保存。每个部分由一个前导计数字节开头,记录当前部分的字符数。
 常用DNS解析的类型

资源记录

服务端处理查询请求后,需要向客户端发送应答报文; 域名查询结果 作为 资源记录 ,保存在答案以及其后两节中。
答案节、授权信息节和附加信息节均由一条或多条资源记录组成,记录数目保存在头部中的对应字段,不再赘述。
答应报文

解析类型

当我们查询一个域名时,首先查找本地域名\rightarrow本地的缓存\rightarrow根域名服务器
\rightarrow顶级域名服务器\rightarrow权威域名服务器

DNS记录类型

实际上,域名和与之关联的信息,就构成了一条 DNS 记录 DNS record )。 DNS 记录可以理解成一个 键值对:
  • 键:域名;
  • 值:与域名关联的值
除了 IP 地址, DNS 记录值还可以是 IPv6 地址、别名、文本等等。据此, DNS 记录可分为若干不同类型,包括:
  • A ,主机 IP 地址;
  • AAAA ,主机 IPv6 地址;
  • ALIAS ,自动解析的别名( alias );
  • CNAME ,别名的权威名称( canonical name );
  • MX ,邮件交换服务器( Mail eXchange );
  • NS ,域名服务器( name server );
  • TXT ,描述文本;

A记录

[root@netbox ~]# dig test.fasionchan.com
; <<>> DiG 9.16.1-Ubuntu <<>> test.fasionchan.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49579
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;test.fasionchan.com. IN A
;; ANSWER SECTION:
test.fasionchan.com. 752 IN A 10.0.0.1
;; Query time: 71 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Mon Apr 26 17:22:16 CST 2021
;; MSG SIZE rcvd: 53

CNAME记录

CNAME 记录,表示别名的 权威名称 canonical name )。
域名可以取别名,以 webserver.fasionchan.com 为例,它可以取一个别名,比如:
network.fasionchan.com 。如此一来称前者是后者的 权威名称 CNAME 记录则保存权威名称。

MX记录

MX 记录,表示 邮件交换 mail exchange )服务,即邮件服务器。其中, MX Mail eXchange 的缩写。
电子邮件可以是说是互联网中发展最早,应用最为广泛的应用。我们发送邮件时,客户端需要根据自己的邮箱账号找到邮件服务器的地址,并通过 SMTP 协议和它进行通信。
每个邮件厂商都有一个自己的域名,查询该域名的 MX 记录,即可找到邮件服务器的地址。以 QQ 邮箱为例,它的域名是 qq.com

NS记录

NS 记录,保存着负责该域解析的权威 DNS 服务器,记录值为 DNS 服务器的域名。
以我的域名 fasionchan.com 为例,它在腾讯云 dnspod 上解析。我注册域名后,需要配置 NS
录,指向 dnspod 服务器。这个 NS 记录,最终会被同步到 .com 顶级域名服务器。

TXT记录

TXT 记录用来保存一些文本信息,这些信息可以用作配置,但不太常见。
很多地方使用 TXT 记录来验证域名所有权:先让域名所有人配置一条特殊的 TXT 记录,然后查询该记 录看结果是否匹配。

三、DNS安全和防护

劫持原理

由于家用路由器质量参差不齐,存在不少潜在安全漏洞。一旦家里的路由器被黑客攻破,黑客可以在DNS 代理上做手脚,将域名指到钓鱼站点进行欺诈。
如上图,路由器被黑客攻破,它的 DNS 代理服务被黑客控制。黑客在 DNS 代理上做手脚,将某个网站的域名,指向自己精心布置的钓鱼站点。这样的话,依靠 DNS 代理查询域名的终端,将被强制劫持到 钓鱼站点。
这就是所谓的 DNS 劫持 DNS Hijacking ): DNS 服务器受到攻击导致域名指向被黑客篡改。一旦域名被劫持到钓鱼网站,结果可能是灾难性的。

防御措施

证书认证
启用 HTTPS 协议
公共 DNS 服务
很多 互联网大厂都提供了公共 DNS 服务,这些服务器由背后的公司背书,值得信任。这个表格列举了
一些常见的公共 DNS 服务:

四、实验,DNS服务部署

 安装并启动服务

[root@dnsserver ~]# yum -y install unbound
[root@dnsserver ~]# rpm -qa | grep unbound
python3-unbound-1.7.3-14.el8.x86_64
unbound-libs-1.7.3-14.el8.x86_64
unbound-1.7.3-14.el8.x86_64
[root@dnsserver ~]# systemctl enable --now unbound
Created symlink /etc/systemd/system/multi-user.target.wants/unbound.service
→ /usr/lib/systemd/system/unbound.service.
[root@dnsserver ~]# systemctl status unbound
[root@dnsserver ~]# ss -anput | grep 53
# 注意防火墙以及SELinux
[root@dnsserver ~]# firewall-cmd --add-service=dns --permanent
[root@dnsserver ~]# firewall-cmd --reload
此时,修改 /etc/resolv.conf nameserver 的值为 127.0.0.1 则可以使用 127.0.01 来进行域名解析,下面是一个简单的验证
[root@dnsserver ~]# dig www.baidu.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45619
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1126 IN CNAME www.a.shifen.com.
www.a.shifen.com. 226 IN A 110.242.68.3
www.a.shifen.com. 226 IN A 110.242.68.4
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)   #注意这里是修改后的服务器IP
;; WHEN: Tue Apr 23 09:23:30 PDT 2024
;; MSG SIZE rcvd: 101

配置缓存

现在尝试让 dnsserver 以外的主机,可以使用 dnsserver 上面的的 unbound 进行域名解析。
修改配置文件:
[root@dnsserver ~]# vim /etc/unbound/unbound.conf
修改内容如下:
默认情况下,unbound 服务只监听 127.0.0.1 ,修改为 0.0.0.0 之后,会监听服务器上面所有 IPv4 地址的53 号端口,以实现与其他主机之间使用 53 号端口通信。
这里规定了监听端口
仅对于内网地址提供服务,其实就是访问控制ACL 规则,只有使用 allow 结尾的地址段中的主机可以与目前的服务器交互,并使用它提供的 DNS 缓存服务。这里实例的写法是所有的 IPv4 地址,建议还是使用自 己试验环境的网段。

dnssec - lame - check 是一个用于检查 DNS 服务器是否缺乏 DNSSEC 权威性的工具或命令。在 DNSSEC中,权威性是指一个 DNS 服务器是否有权提供特定域名的验证结果。如果一个 DNS 服务器在 DNSSEC 上缺乏权威性,那么它无法提供对于该域名的 DNSSEC 记录的验证。

 

这里的配置,将使用一个知名的公共DNS服务器来进行域名解析,此时,在进行DNS解析时,会先转发 给指定8.8.8.8,进行一次递归,由8.8.8.8进行必要的迭代查询。

因为上面配置了使用8.8.8.8 进行迭代,所以就不再需要指定根服务器的了。

 重启验证

[root@dnsserver ~]# systemctl restart unbound.service
[root@dnsclient ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.110.131
[root@dnsclient ~]# dig www.baidu.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30307
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 708 IN CNAME www.a.shifen.com.
www.a.shifen.com. 0 IN A 110.242.68.3
www.a.shifen.com. 0 IN A 110.242.68.4
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 09:51:11 PDT 2024
;; MSG SIZE rcvd: 101

实验二:自定义域名解析

 [root@dnsserver ~]# vim /etc/unbound/unbound.conf

[root@dnsserver ~]# unbound-checkconf #检查配置文件语法,未指定路径就是默认配置文件
unbound-checkconf: no errors in /etc/unbound/unbound.conf
[root@dnsserver ~]# systemctl restart unbound

测试

[root@dnsclient ~]# dig -t a dnsserver.test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t a dnsserver.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dnsserver.test.com. IN A
;; ANSWER SECTION: ##这一行
dnsserver.test.com. 3600 IN A 192.168.110.131
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:23 PDT 2024
;; MSG SIZE rcvd: 63
[root@dnsclient ~]# dig -t a dnsclient.test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t a dnsclient.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57939
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dnsclient.test.com. IN A
;; ANSWER SECTION: ##这一行
dnsclient.test.com. 3600 IN A 192.168.110.133
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:26 PDT 2024
;; MSG SIZE rcvd: 63
[root@dnsclient ~]# dig -t ns test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t ns test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57087
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.com. IN NS
;; ANSWER SECTION: ##这一行
test.com. 3600 IN NS 192.168.110.131.
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:43 PDT 2024
;; MSG SIZE rcvd: 66
[root@dnsclient ~]# dig -t mx test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t mx test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53725
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.com. IN MX
;; ANSWER SECTION: ##这一行
test.com. 3600 IN MX 10 dnsclient.test.com.
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:55 PDT 2024
;; MSG SIZE rcvd: 63
[root@dnsclient ~]# dig -x 192.168.110.131
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -x 192.168.110.131
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5464
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;131.110.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION: ##这一行
131.110.168.192.in-addr.arpa. 3600 IN PTR dnsserver.test.com.
;; Query time: 2 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:04:11 PDT 2024
;; MSG SIZE rcvd: 89
[root@dnsclient ~]# dig -x 192.168.110.133
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -x 192.168.110.133
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52023
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;133.110.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION: ##这一行
133.110.168.192.in-addr.arpa. 3600 IN PTR dnsclient.test.com.
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:04:14 PDT 2024
;; MSG SIZE rcvd: 89

维护命令简介

unbound-control dump-cache # 导出unbound缓存服务
unbound-control dump_cache > unbound.cache # 导出的数据保存到指定文件
unbound-control flush dnsserver.test.com # 刷新dnserver.test.com的缓存
unbound-control flush_zone test.com # 刷新test.com 域的缓存
unbound-control load_cache < unbound.cache # 从指定文件导入缓存

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

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

相关文章

【继承和多态】

闭上眼睛&#xff0c;什么都不听.............................................................................................................. 文章目录 前言 一、【继承】 1.1【继承的概念】 1.2【 继承的定义】 1.2.1【定义格式】 1.2.2【继承关系和访问限定符】 1.2…

浏览器的同源策略与解决跨域

同源策略&#xff08;协议、域名、端口&#xff09; 同源策略&#xff08;Same-Origin Policy&#xff09;是一个在浏览器安全模型中被实施的重要安全机制。它是基于域名、协议和端口号的限制&#xff0c;用于防止不同源的网页间的恶意行为和信息泄露。 根据同源策略&#xf…

探秘Java线程:从概念到实践

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

Unity Timeline学习笔记(4) - 自定义轨道OnCreateClip和CreateTrackMixer用法上的区分

前面我们第二篇文章Unity Timeline学习笔记(2) - PlayableTrack是一个初步的PlayableTrack使用方法&#xff0c;有时候可能会个性化定制专属轨道。 OnCreateClip的例子 下面我们做一个例子&#xff1a; 首先是轨道 //FeatureTrack.cs using System.ComponentModel; using U…

以太网口硬件知识分享

一、了解网口通信基本原理 实现网络通信实质上是PHY与MAC及RJ45接口实现信号传输。MAC 就是以太网控制器&#xff0c;MAC属于数据链路层&#xff0c;主要负责把数据封装成帧&#xff0c;对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。PHY…

JavaScript-3(内置对象+数组对象+字符串对象)

目录 1.预解析 2.对象 什么是对象 创建对象的三种方法 利用字面量创建方法 利用new Object创建对象 构造函数创建对象 new关键字 遍历对象 3.内置对象 Math对象 Math概述 Math随机数 Date日期对象 格式化日期 Date总的时间毫秒 4.数组对象 创建数组的两种方式…

进销存单机版和excel进销存那个好用

进销存单机版和EXCEL进销存哪个好用&#xff1f;单机版是安装在单台电脑上使用的&#xff0c;它不能像网络版一样可以多台电脑同时共享数据&#xff0c;所以进销存单机版有一个优势就是不需要连接网络也可以使用。 进销存单机版 进销存软件单机版是经过开发人员设计好的一种信…

网页提示语闪太快的定位问题(selenium)

selenium UI自动化时&#xff0c;提示语闪太快&#xff0c;导致无法获取元素的问题 解决办法 步骤一&#xff1a; F12---》控制台输入debugger 步骤二&#xff1a;对于需要定位的部分&#xff0c;在控制台的debugger处回车&#xff0c;可以定住页面 步骤三&#xff1a;正常定…

生成式AI原理技术详解(一)——神经网络与深度学习

本文主要介绍了生成式AI的最新发展&#xff0c;提到了GPT-5和AI软件工程师在行业中的影响&#xff0c;指出AI技术进步对国家竞争和个人职业发展的潜在影响。 未来已来 最近有两则新闻&#xff1a; sam altman自曝GPT-5细节&#xff0c;公开宣称GPT-5提升将非常大&#xff0c;任…

62、回溯-N皇后

思路&#xff1a; N皇后问题要求在一个nn的棋盘上放置n个皇后&#xff0c;使得它们不能相互攻击。皇后可以攻击同一行、同一列&#xff0c;以及两个对角线方向上的其他皇后。解决这个问题意味着找到所有可能的棋盘配置&#xff0c;每个配置都符合上述条件。 1、初始化数据结构…

Docker 入门篇(二)-- Linux 环境离线安装

引言 docker 系列文章&#xff1a; Docker 入门篇&#xff08;一&#xff09;-- 简介与安装教程&#xff08;Windows和Linux&#xff09; 一、安装环境准备 centos &#xff1a;CentOS Linux release 7.6.1810 (Core)docker 版本&#xff1a;docker-26.1.0.tgz 官网下载地址…

Linux驱动开发——(七)Linux阻塞和非阻塞IO

目录 一、阻塞和非阻塞IO简介 二、等待队列 2.1 等待队列头 2.2 等待队列项 2.3 将队列项添加/移除等待队列头 2.4 等待唤醒 2.5 等待事件 三、轮询 四、驱动代码 4.1 阻塞IO 4.2 非阻塞IO 一、阻塞和非阻塞IO简介 IO指的是Input/Output&#xff0c;也就是输入/输…

十个案例学习Flume

在上一篇文章中&#xff0c;已经知道了Flume的架构、概述、与安装&#xff0c;现在我们来用十个案例去学习flume的使用。 在使用之前&#xff0c;提供一个大致思想&#xff0c;使用Flume的过程是确定scource类型&#xff0c;channel类型和sink类型&#xff0c;编写conf文件并开…

零基础HTML教程(30)--迈入HTML5新时代

文章目录 1. 从H4时代到H5时代2. 属性值可以不用引号3. 标签使用大小写均可4. 部分属性值可以省略5. 浏览器支持情况6. 小结 1. 从H4时代到H5时代 之前讲的29篇HTML教程&#xff0c;内容基本都是H4时代就有的。 随着时代的发展&#xff0c;H4多少有点不够用&#xff0c;所以H…

Kotlin基础​​

数据类型 定义变量 var表示定义变量&#xff0c;可以自动推导变量类型&#xff0c;所以Int可以不用写。 定义常量 条件语句 if表达式可以返回值&#xff0c;该值一般写在if里的最后一行 类似switch的用法 区间 循环 a是标签&#xff0c;可以直接break到标签的位置&#xf…

【八大排序(二)】选择排序与堆排序

❣博主主页: 33的博客❣ ▶️文章专栏分类:八大排序◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多排序知识 目录 1.前言2.选择排序2.1基本思想2.2画图理解2.3单向选择排序代码实现2.4双向选择排序代码…

从零入门区块链和比特币(第一期)

欢迎来到我的区块链与比特币入门指南&#xff01;如果你对区块链和比特币感兴趣&#xff0c;但不知道从何开始&#xff0c;那么你来对地方了。本博客将为你提供一个简明扼要的介绍&#xff0c;帮助你了解这个领域的基础知识&#xff0c;并引导你进一步探索这个激动人心的领域。…

swagger xss漏洞复现

swagger xss漏洞复现 文章目录 swagger xss漏洞复现漏洞介绍影响版本实现原理漏洞复现修复建议: 漏洞介绍 Swagger UI 有一个有趣的功能&#xff0c;允许您提供 API 规范的 URL - 一个 yaml 或 json 文件&#xff0c;将被获取并显示给用户 根本原因非常简单 - 一个过时的库Dom…

预见预判|AIRIOT智慧交通管理解决方案

随着机动车保有量的逐步增加&#xff0c;城市交通压力日益增大。同时&#xff0c;新能源车辆的快速发展虽然带来了环保效益&#xff0c;但也因不限号政策而进一步加剧了道路拥堵问题。此外&#xff0c;各类赛事和重大活动的交通管制措施也时常导致交通状况复杂多变。面对这些挑…

Java 基础常见面试题整理

目录 1、java的基本数据类型有哪些&#xff1f;2、java为什么要有包装类型&#xff1f;3、String a "123" 和 String a new String("123") 区别&#xff1f;4、String、StringBuilder和StringBuffer的区别&#xff1f;5、如何理解面向对象和面向过程&…