面试题(五)
40、. 给定01字符串如01010011110,找出0和1个数相等的最长子串
要找出一个给定的 01 字符串中,0 和 1 个数相等的最长子串,可以使用以下算法:
方法
使用哈希表:我们可以使用哈希表来记录每个前缀和出现的位置,利用前缀和的差值来判断子串中 0 和 1 的数量是否相等。
前缀和定义:将字符串中的 ‘0’ 视为 -1,‘1’ 视为 +1。这样,如果某个子串的前缀和为 0,说明该子串中 0 和 1 的数量相等。
具体步骤
初始化一个哈希表 map,用于存储前缀和和其出现的最小索引。
遍历字符串,计算前缀和:
遇到 ‘0’,前缀和减 1。
遇到 ‘1’,前缀和加 1。
在遍历过程中:
如果当前前缀和为 0,更新最长子串的长度。
如果前缀和已经存在于哈希表中,计算当前索引和该前缀和的最小索引之间的距离,并更新最长子串的长度。
如果前缀和不在哈希表中,将其和当前索引存入哈希表。
41、https握手过程
42、https能否防住DNS攻击
HTTPS(超文本传输安全协议)主要用于加密数据传输,确保数据在客户端和服务器之间的安全性,但它并不能直接防御所有类型的 DNS 攻击。以下是 HTTPS 和 DNS 攻击之间的关系以及 HTTPS 能够提供的保护:
1. DNS 攻击类型
- DNS 欺骗(DNS Spoofing):攻击者伪造 DNS 响应,将用户导向恶意网站。
- DNS 劫持:攻击者劫持 DNS 查询,改变用户请求的目标地址。
- 分布式拒绝服务攻击(DDoS):通过大量请求淹没 DNS 服务器,使其无法正常工作。
2. HTTPS 的保护
- 数据加密:HTTPS 加密了传输的数据,保护了数据在传输过程中的机密性和完整性。即使用户被导向了恶意网站,HTTPS 也会加密与该网站的通信。
- 服务器身份验证:HTTPS 使用 SSL/TLS 证书来验证服务器的身份,确保用户连接的是合法的服务器。这可以防止某些类型的钓鱼攻击。
3. HTTPS 的局限性
- 无法防止 DNS 攻击:HTTPS 本身无法防止 DNS 欺骗或劫持攻击,因为这些攻击发生在用户解析域名到 IP 地址的过程中。用户仍然可能被引导到恶意网站。
- 信任问题:如果攻击者能够成功实施 DNS 欺骗,用户可能仍然连接到一个看似合法的服务器,即使该服务器使用 HTTPS。攻击者可以使用合法的证书(通过某些手段)来伪装成合法网站。
4. 防御措施
为了增强对 DNS 攻击的防护,可以采取以下措施:
- 使用 DNSSEC:DNS 安全扩展(DNSSEC)可以防止 DNS 欺骗,通过数字签名验证 DNS 响应的真实性。
- 使用安全 DNS 服务:使用支持 DNSSEC 的公共 DNS 服务器(如 Google DNS 或 Cloudflare DNS)。
- 实现 HSTS(HTTP Strict Transport Security):强制客户端仅通过 HTTPS 访问网站,减少通过 HTTP 访问的风险。
- 启用 DoH 或 DoT:DNS over HTTPS(DoH)和 DNS over TLS(DoT)可以加密 DNS 查询,防止中间人攻击和监听。
总结
虽然 HTTPS 在数据加密和身份验证方面提供了重要的保护,但它并不能直接防止 DNS 攻击。为了全面防护,结合 DNSSEC 和安全 DNS 服务等措施可以有效提高安全性。