No145.精选前端面试题,享受每天的挑战和学习

简介: No145.精选前端面试题,享受每天的挑战和学习

输入url后发生了什么

当你在浏览器中输入 URL 后,会发生以下一系列步骤:

  1. URL 解析:浏览器会解析输入的 URL,将其分解为协议(如HTTP、HTTPS)、域名、路径和查询参数等组成部分。
  2. DNS 解析:浏览器需要将域名解析为 IP 地址,以便能够建立与服务器的连接。它会向本地 DNS 缓存或 DNS 服务器发送 DNS 查询请求,以获取域名对应的 IP 地址。
  3. 建立 TCP 连接:浏览器会使用 HTTP 协议和服务器建立 TCP 连接。这个过程通常涉及三次握手,确保浏览器和服务器之间的连接可靠。
  4. 发送 HTTP 请求:浏览器会发送 HTTP 请求,请求中包括请求方法(GET、POST 等)、请求头部(如 User-Agent、Cookie 等)以及请求体(对于 POST 请求)等信息。
  5. 服务器处理请求:服务器接收到浏览器发送的 HTTP 请求后,会根据请求的路径、参数等进行处理。服务器可能会读取文件、查询数据库、执行逻辑代码等,以生成响应。
  6. 接收响应:浏览器接收到服务器返回的响应后,会根据响应头部中的状态码(如 200、404 等)判断请求的成功与否。
  7. 处理响应:浏览器会根据响应的内容类型(如 HTML、CSS、JavaScript、图像等)对响应进行处理。对于 HTML 页面,浏览器会解析 HTML、构建 DOM 树,并根据 CSS 样式对页面进行布局和渲染。
  8. 关闭连接:在所有响应处理完毕后,浏览器会关闭与服务器的 TCP 连接,释放网络资源。
  9. 渲染页面:浏览器会将解析和处理后的页面内容呈现给用户。这包括显示文本、加载和显示图像、执行 JavaScript 代码等,以呈现完整的网页。

需要注意的是,上述步骤是一个简化的描述,实际情况可能更加复杂。例如,在请求过程中可能存在重定向、缓存机制等处理。不同的浏览器和服务器也可能有一些差异。但是,这个简化的步骤序列能够帮助理解当你在浏览器中输入 URL 时会发生的一般流程。

怎么防止中间人

要防止中间人攻击(Man-in-the-Middle Attack),可以采取以下几个措施:

  1. 使用 HTTPS:确保在与网站进行通信时使用安全的 HTTPS 协议。HTTPS 使用 SSL/TLS 加密通信,可以防止中间人窃取或篡改数据。确保网站正确配置 HTTPS 并使用有效的数字证书来保护通信。
  2. 验证数字证书:在与网站建立 HTTPS 连接时,浏览器会验证服务器的数字证书。验证包括检查证书的有效性、域名匹配性和证书链的完整性。如果存在任何问题,浏览器会显示警告或错误信息。确保在与网站通信时,始终验证服务器的数字证书。
  3. 注意警告提示:当浏览器发出与数字证书相关的警告或错误提示时,不要忽视它们。警告可能表明存在中间人攻击或其他安全风险。遵循浏览器提供的安全建议,避免继续与不受信任的网站通信。
  4. 公共 Wi-Fi 使用注意:公共 Wi-Fi 网络存在中间人攻击的风险较高,因为攻击者可以通过欺骗或拦截通信流量来窃取信息。在使用公共 Wi-Fi 时,尽量避免在敏感或重要账户中进行登录,并使用 VPN(虚拟专用网络)来加密通信。
  5. 谨慎点击链接:避免点击来自不明来源或不可信的链接,特别是通过电子邮件、短信或社交媒体等渠道传送的链接。中间人攻击者可能会通过恶意链接诱导用户访问伪造的网站,以获取敏感信息。
  6. 安全软件和防病毒保护:确保计算机或移动设备上安装了最新的安全软件和防病毒程序,并定期更新其定义文件。这些工具可以帮助检测和阻止中间人攻击等恶意行为。
  7. 使用安全网络:尽量连接到受信任和安全的网络,避免使用不受信任的网络或未知来源的 Wi-Fi 热点。自己设置安全的无线网络并加密通信,以降低中间人攻击的风险。

以上是一些常见的防止中间人攻击的措施。然而,要注意中间人攻击是一种复杂的攻击技术,攻击者可能会采用更高级的方法。因此,始终保持警觉并遵循安全最佳实践是保护个人信息和通信安全的关键。

ul的li实现点击哪一个li哪个高亮

要实现点击 ul 元素下的 li 元素后,被点击的 li 高亮显示,可以通过 JavaScript 来实现。下面是一个实现此功能的示例代码:

HTML 代码:

<ul id="myList">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

CSS 代码:

.highlight {
  background-color: yellow;
}

JavaScript 代码:

var listItems = document.querySelectorAll("#myList li");
listItems.forEach(function(item) {
  item.addEventListener("click", function() {
    // 移除其他已经高亮的 li 元素的样式
    listItems.forEach(function(li) {
      li.classList.remove("highlight");
    });
    // 给被点击的 li 添加高亮样式
    item.classList.add("highlight");
  });
});

上述代码中,首先使用 document.querySelectorAll("#myList li") 获取到 ul 元素下的所有 li 元素,并将其存储在 listItems 变量中。

接下来,使用 forEach 方法为每个 li 元素添加点击事件监听器。当某个 li 元素被点击时,先移除其他已经高亮的 li 元素的样式,然后给被点击的 li 元素添加高亮样式。

最后,可以使用 CSS 来定义 .highlight 类的样式,以实现高亮效果,如将背景颜色设置为黄色。

这样,当用户点击任意一个 li 元素时,被点击的 li 元素将会高亮显示,其他 li 元素的高亮样式将被移除。

文件上传的进度前端怎么计算

要在前端计算文件上传的进度,可以使用浏览器提供的 XMLHttpRequestfetch API 来发送文件上传请求,并通过事件来跟踪上传进度。

下面是一个使用 XMLHttpRequest 的示例代码:

var fileInput = document.getElementById("fileInput");
var progressBar = document.getElementById("progressBar");
fileInput.addEventListener("change", function() {
  var file = fileInput.files[0];
  var xhr = new XMLHttpRequest();
  // 上传进度事件监听器
  xhr.upload.addEventListener("progress", function(e) {
    if (e.lengthComputable) {
      var percent = (e.loaded / e.total) * 100;
      progressBar.style.width = percent + "%";
      progressBar.innerHTML = percent.toFixed(2) + "%";
    }
  });
  // 上传完成事件监听器
  xhr.addEventListener("load", function() {
    // 上传完成后的处理
  });
  // 发送文件上传请求
  xhr.open("POST", "/upload", true);
  xhr.send(file);
});

上述代码中,首先获取文件输入框和进度条元素,并给文件输入框添加 change 事件监听器。

在事件监听器中,通过 XMLHttpRequest 创建一个新的请求对象 xhr。然后,添加 xhr.uploadprogress 事件监听器来跟踪上传进度。在事件处理函数中,通过 e.loadede.total 计算上传的百分比,并根据计算结果更新进度条的宽度和显示。

最后,使用 xhr 对象发送文件上传请求。这里的示例代码使用 POST 方法上传文件,上传的 URL 是 /upload。可以根据自己的需求和服务器端配置进行相应的调整。

通过这种方式,你可以实时获取文件上传的进度,并将其反馈给用户显示在界面上的进度条中。请注意,上传进度的可计算性取决于服务器响应的 Content-Length 头字段,因此服务器需要正确配置此字段以实现准确的进度跟踪。

相关文章
|
1月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
180 0
|
1月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
141 1
|
5月前
|
算法 Java 关系型数据库
校招 Java 面试基础题目解析及学习指南含新技术实操要点
本指南聚焦校招Java面试,涵盖Java 8+新特性、多线程与并发、集合与泛型改进及实操项目。内容包括Lambda表达式、Stream API、Optional类、CompletableFuture异步编程、ReentrantLock与Condition、局部变量类型推断(var)、文本块、模块化系统等。通过在线书店系统项目,实践Java核心技术,如书籍管理、用户管理和订单管理,结合Lambda、Stream、CompletableFuture等特性。附带资源链接,助你掌握最新技术,应对面试挑战。
142 2
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
326 0
|
10月前
|
Dart 前端开发 架构师
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
【01】vs-code如何配置flutter环境-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈-供大大的学习提升
533 26
|
前端开发 开发者 C++
独家揭秘:前端大牛们如何高效学习新技术,保持竞争力!
【10月更文挑战第31天】前端技术飞速发展,如何高效学习新技术成为关键。本文通过对比普通开发者与大牛们的策略,揭示了高效学习的秘诀:明确目标、主动探索、系统资源、实践应用和持续学习。通过这些方法,大牛们能更好地掌握新技术,保持竞争力。示例代码展示了如何通过实践加深理解。
264 4
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
247 1
|
Java 应用服务中间件 程序员
JVM知识体系学习八:OOM的案例(承接上篇博文,可以作为面试中的案例)
这篇文章通过多个案例深入探讨了Java虚拟机(JVM)中的内存溢出问题,涵盖了堆内存、方法区、直接内存和栈内存溢出的原因、诊断方法和解决方案,并讨论了不同JDK版本垃圾回收器的变化。
253 4
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
459 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题

热门文章

最新文章