【利用AI刷面试题】50道前端基础面试题(二)

简介: 【利用AI刷面试题】50道前端基础面试题

【利用AI刷面试题】50道前端基础面试题(一)https://developer.aliyun.com/article/1426058


21. 什么是 Webpack?如何使用 Webpack 打包前端项目?

Webpack是一个常用的前端打包工具,它可以将多个模块打包成一个或多个文件,从而构建出符合要求的静态资源

使用Webpack通常需要以下步骤:

1. 安装Webpack

可以通过npm命令进行安装:

npm install webpack webpack-cli --save-dev

2. 配置webpack

在项目根目录下创建一个webpack.config.js文件,配置以下选项:

entry(入口文件)

output(输出路径及文件名)

module(模块配置,例如loader等)

plugins(插件配置)

3. 使用webpack

使用webpack命令进行打包:

webpack --config webpack.config.js

以上是Webpack的基本使用,当然Webpack还有很多功能和选项,例如热更新、优化等,需要根据实际需要进行使用和配置。

22. 如何使用 React 创建组件?

React中创建组件需要使用React库提供的Component类,以下是具体步骤:

1. 引入React库

在需要创建组件的文件中,必须首先引入React库,例如:

import React from 'react';

2. 创建组件类

定义一个继承自React.Component的类,该类代表着一个组件,并且需要实现必要的渲染方法render(),例如:

class MyComponent extends React.Component {
  render() {
    return <div>Hello, world!</div>;
  }
}

3. 渲染组件

将组件渲染到页面上,例如:

import React from 'react';
import ReactDOM from 'react-dom';
class MyComponent extends React.Component {
  render() {
    return <div>Hello, world!</div>;
  }
}
ReactDOM.render(<MyComponent />, document.getElementById('root'));

以上就是使用React创建组件的基本步骤,当然React还有很多其他操作或特性,需要根据实际需要进行学习和使用。

23. 在 React 中,什么是 state 和 props,二者有什么区别?

在React中,组件的数据来源主要由两种

  • props(外部传入的属性)
  • state(组件内部定义的状态)。

区别如下:

  1. props是组件接收外部的数据来源,而state是组件自身管理的数据。props通常用于父组件向子组件传递数据,而state通常用于组件自身的业务逻辑。
  2. 改变props的方式为父组件通过传递新的props来改变子组件的渲染结果,而改变state的方式为调用setState()方法,配合React自动更新视图。
  3. props只读的,不能在组件内部修改,只能在组件外部进行修改。而state是可读写的,组件内部可以通过setState()方法触发组件重新渲染。

总之,props代表了组件外部传入的数据,一经传入组件就不能再被修改;而state代表组件内部的状态,一般用于组件自身的业务处理,并且可以随着组件内部状态的变化而动态更新组件的渲染结果。

24. 什么是 Virtual DOM?

Virtual DOM是React所使用的一种概念,顾名思义,这是一个虚拟的DOM,是用JavaScript对象来表示DOM,与真实的DOM相对应,称其为“Virtual DOM”。

在React中,每当数据发生改变时,它会重新渲染整个组件,然后通过对比前后两个Virtual DOM的差异(Diff算法),最终只更新改变的部分到真实DOM中。

Virtual DOM的作用在于:

  1. 提高渲染效率:原本只要更改渲染内容的部分,现在通过Virtual DOM的Diff算法,实现只更新更改了的状态或视图,从而提高渲染效率。
  2. 更加方便的操作DOM:在React中,设计重渲染整个组件,让Virtual DOM来与真实的DOM进行对比,然后仅操作有差异的部分;这样一来,开发者就无需操作真实的DOM了,从而减少手动耗费精力。
  3. 统一API:对于不同的浏览器,其操作DOM的API存在一定的差异,使用Virtual DOM可以将操作DOM的代码放在React的底层代码中,提供了一套统一的API,避免了跨浏览器API带来的繁琐问题。

总之,Virtual DOM在React中扮演着重要的角色,有效提高了渲染效率,减少DOM操作繁琐,以及提供统一API等好处。

25. React 中如何实现父子组件的通信?

在 React 中,父子组件的通信可以通过 props回调函数两种方式实现。

1. 通过 props 实现父组件向子组件传递数据:

父组件可以将数据通过 props 传递给子组件,子组件可以通过 this.props 访问传递过来的数据。

示例代码:

// 父组件
function ParentComponent() {
  const data = "Hello World";
  return <ChildComponent data={data} />;
}
// 子组件
function ChildComponent(props) {
  return <div>{props.data}</div>;
}

2. 通过回调函数实现子组件向父组件传递数据:

父组件可以将一个函数通过 props 传递给子组件,子组件可以在需要的时候调用这个函数,并将数据作为函数的参数传递给父组件。

示例代码:

// 父组件
function ParentComponent() {
  function handleData(data) {
    console.log(data);
  }
  return <ChildComponent onData={handleData} />;
}
// 子组件
function ChildComponent(props) {
  function handleClick() {
    props.onData("Hello World");
  }
  return <div onClick={handleClick}>Click Me</div>;
}

在这个示例中,当子组件被点击时,它会调用父组件传递过来的 handleData 函数,并将 “Hello World” 作为参数传递给它。父组件可以在 handleData 函数中对这个数据进行处理。

26. 请解释一下 React 中的生命周期函数。

React 生命周期指组件从实例化创建、渲染、更新到最终从页面卸载的过程中所经历的阶段。在这个过程中,React 会自动调用一些特定的函数,我们称之为生命周期函数(Lifecycle Methods)。

生命周期函数可以让开发者在特定的时刻做出响应和处理,比如在组件挂载完成后发起 Ajax 请求,或者在组件销毁前进行一些清理工作。

以下是 React 生命周期中常见的生命周期函数:

1. constructor(props):

React 组件的构造函数,在组件初始化时被调用。使用 constructor 函数可以进行一些初始化设置,比如在组件上添加属性、绑定事件监听器等。如果组件没有用到 state 或者不需要绑定事件等,则 constructor 可以省略。

2. render():

React 组件必须实现的唯一一个生命周期函数,用于渲染组件的 UI。在每次组件更新时,React 会重新调用 render 函数,然后根据 render 函数的返回值更新组件的显示内容。

3. componentDidMount():

该函数在组件首次渲染完成后调用,通常用于初始化一些数据或者发起 Ajax 请求等异步操作。注意,只有在客户端渲染(即非 SSR)时才会调用该函数。

4. componentDidUpdate():

该函数在组件的 state 或者 props 发生变化后被调用,并且在 render 函数重新渲染组件后被调用。通常用于更新组件的状态、进行网络请求等操作。

5. componentWillUnmount():

该函数在组件被销毁之前被调用,通常用于进行一些资源的清理,比如取消网络请求、取消事件监听等。

27. 请解释一下 React 中的 key 属性。

在 React 中,当在渲染列表时,需要给列表中的每一项添加一个唯一的 key 属性,以便 React 在进行更新时可以快速地找到变化的元素

key 属性的作用是帮助 React 识别每个列表项的唯一性,并且在更新列表时减少渲染次数,提高性能。如果在列表中没有设置 key 属性,React 将会给出一个警告并使用默认的方式来处理。

key 属性的值应该是每个列表项独特的标识符,可以是每个列表项的 ID、索引值或者其他唯一标识符。

下面是一个例子,展示了如何在组件中使用 key 属性:

function List(props) {
  const items = props.items.map(item => (
    <li key={item.id}>
      {item.text}
    </li>
  ));
  return (
    <ul>
      {items}
    </ul>
  );
}

在这个例子中,我们将列表项的 ID 用作 key 属性的值,以确保每个列表项的唯一性。当列表中的项发生变化时,React 可以根据 key 属性快速地确定哪些列表项需要重新渲染,从而提高性能。

28. 什么是中间件?在 Express 中如何使用中间件?

中间件(Middleware)是指在请求和响应的处理过程中,对请求和响应进行处理的函数。在 Express 中,中间件是一种非常强大的机制,可以用于对请求进行处理、处理请求过程中的错误、进行身份验证等。

在 Express 中,使用中间件是通过调用 app.use() 方法来实现的。app.use() 方法允许我们在某个路由中使用指定的中间件函数。

比如,我们可以通过下面的代码来创建一个简单的 Express 应用,并使用 morgan 中间件来记录请求日志:

const express = require('express');
const app = express();
const morgan = require('morgan');
app.use(morgan('dev'));
app.get('/', function (req, res) {
  res.send('Hello World!');
});
app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

在这个例子中,我们通过调用 app.use() 方法来注册 morgan 中间件。morgan 中间件会记录所有的 HTTP 请求和响应的相关信息,包括请求 URL、请求方法、响应状态码、响应时间等信息。当我们在浏览器中访问 http://localhost:3000/ 时,我们可以在控制台中看到类似如下的请求日志:

GET / 304 4.135 ms - -
GET /favicon.ico 404 1.401 ms - 149

除了使用第三方中间件外,我们也可以自定义中间件函数,例如,下面的例子创建了一个用于进行身份验证的自定义中间件:

function authMiddleware(req, res, next) {
  // 检查用户是否已登录
  if (req.session.user) {
    // 用户已登录,继续执行下一个中间件或路由处理函数
    next();
  } else {
    // 用户未登录,返回 401 错误
    res.status(401).send('Unauthorized');
  }
}

通过调用 app.use() 方法来注册自定义中间件:

app.use(authMiddleware);

注册的顺序非常重要,Express 会按照注册的顺序执行中间件函数。在处理请求时,如果某个中间件函数中未调用 next() 方法,则不会继续执行后续的中间件函数及路由处理函数。

29. 什么是 RESTful API?

REST(Representational State Transfer)是一种规范性的软件架构风格,是在互联网中基于 HTTP 协议进行分布式系统的设计和开发的一种方式。而 RESTful API 就是基于 REST 设计理念而实现的 Web API 接口。

RESTful API 可以对资源(Resource)进行 CRUD 操作。资源可以是任何类型的实体,比如用户、文章、商品等。每个资源都有一个唯一的 URL(URI),可以通过 HTTP 的 GET、POST、PUT、DELETE 等方法来实现对这个资源的操作。

以下是 RESTful API 的设计原则:

  1. 每个资源都有一个唯一的 URI,用于定位该资源
  2. 客户端与服务器之间使用无状态的请求(Stateless Request)协议,服务器不必维护客户端请求的状态,每个请求都包含完整的信息。
  3. 请求和响应的数据是通过标准的数据格式(比如 JSON、XML 等)进行传输的,这样可以使客户端和服务器之间的通信更为通用和互操作。
  4. 对资源的操作都是基于 HTTP 的标准方法(GET、POST、PUT、DELETE 等)实现的,从而使资源的运作更为灵活和可定制。

RESTful API 充分利用了 HTTP 协议的优势,使得客户端与服务端之间的数据交互更为简单、高效和可扩展,是一个非常优秀的开发风格。

30. 请解释一下 Ajax。

Ajax(Asynchronous JavaScript and XML)是一种利用 JavaScript 和 XML(现在也可以使用 JSON)以异步方式进行网页开发的技术Ajax 的主要特点是实现在不刷新整个页面的情况下与服务器进行数据交互和更新页面内容

在 Ajax 中,JavaScript 通过 XMLHttpRequest 对象向服务器发送异步请求。通过异步请求,客户端可以在不刷新页面的情况下与服务器进行交互,这样就可以大大提高用户的交互体验。在接收到服务器响应后,JavaScript 可以对页面内容进行更新,使得用户在页面上看到最新的数据。

Ajax 技术的好处:

  1. 页面无需刷新,响应更快,提高了整体用户体验。
  2. 用户输入数据可以立即反馈,提高了交互性
  3. 可以在不影响用户的情况下,向服务器发送部分请求,可以减少请求数据的大小和网络带宽的消耗。
  4. 可以使用现有的 Web 技术,比如 HTML、CSS、JavaScript 等等,无需安装插件或者额外的软件。

下面是一段使用原生 JavaScript 实现简单 Ajax 请求的示例代码:

const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
  if (this.readyState === 4 && this.status === 200) {
    console.log(xhr.responseText);
  }
};
xhr.open("GET", "/api/data")
xhr.send();

在这个例子中,我们创建了一个 XMLHttpRequest 对象,并监听了它的 readyStatestatus 属性的变化。当 readyState 为 4(请求完成)并且 status 为 200(服务器成功响应)时,我们打印出响应的文本内容(通过 responseText 属性获取)。向服务器发送请求通过 open、send 方法。在这个例子中,我们向名为 “/api/data” 的 URL 发送了一个 GET 请求。

31. 什么是 Cookie?

Cookie 是一种存储在客户端浏览器中的小文本数据,用于存储有关客户端和服务器之间交互的信息。服务器可以使用 Set-Cookie 头部将 Cookie 传送给浏览器,浏览器在接收到 Cookie 后将它存储在本地,并在后续的请求中将它发送给服务器。

Cookie 通常用于实现以下功能:

  1. 会话管理:当用户登录后,服务器可以使用 Cookie 存储会话信息,用于验证用户身份,并在会话期间跟踪用户的状态。
  2. 个性化信息:网站可以使用 Cookie 存储用户的偏好设置、历史浏览记录等信息,以便为用户提供更加个性化的服务。
  3. 跟踪和广告:广告商可以使用 Cookie 跟踪用户的浏览习惯,以便投放更加精准的广告。

在 JavaScript 中,可以使用 document.cookie 属性来读取和设置 Cookie。例如,下面的代码向客户端浏览器中设置了一个名为 username,值为 johnCookie

document.cookie = "username=john";

可以使用 document.cookie 属性来读取该 Cookie

console.log(document.cookie); // "username=john"

在服务器端,可以使用 Set-Cookie 头部来设置一个 Cookie,例如:

HTTP/1.1 200 OK
Set-Cookie: username=john

在客户端接收到此响应后,会将该 Cookie 存储在本地,并在以后向该服务器发送请求时自动将此 Cookie 包含在请求中。

32. 请解释一下 Session。

Session(会话)是指客户端与服务器之间建立的一种持续性的交互状态

在一个会话中,客户端和服务器可以持续性地交换信息并且共享数据

通常情况下,会话由服务器端创建,并且在服务器端存储一些关于用户的信息,例如用户的身份认证、访问权限等。

Session 可以在不同的应用场景中被使用,例如购物车中存储用户选购的商品、用户登陆后在应用中的会话状态等。

在 Web 应用开发中,Session 是一种常见的状态管理方式,它可以通过浏览器的 Cookie 或者 URL 中的一些参数来实现。

33. 什么是 JWT?如何使用 JWT 实现身份验证?

JWT(JSON Web Token)是一种用于在客户端和服务器之间传递信息的安全方式

它由三部分构成:头部(Header)、有效载荷(Payload)、签名(Signature)组成。

其中,头部和有效载荷是使用 Base64URL 编码的 JSON 字符串,签名是通过将头部、有效载荷和秘钥进行哈希生成的。

JWT 可以用于身份验证和授权,主要思想是,通过服务器对 JWT 进行签名的方式,对用户进行身份认证,之后将 JWT 发送给客户端,客户端在每次访问时将此 Token 发送到服务器,用于验证身份和授权。

下面是使用 JWT 实现身份验证的流程:

  1. 客户端发送登录请求,服务器对用户信息进行验证,如果验证通过则生成 JWT,并将 JWT 发送给客户端。
  2. 客户端在每次访问时都将 JWT 发送到服务器,服务器对 JWT 进行验证,如果 JWT 验证通过,则说明用户已经登录,可以访问受保护的资源和数据。
  3. 为了保证 JWT 的安全性,需要对 JWT 进行签名。服务器端使用私钥对 JWT 进行签名,客户端在每次发送 JWT 时都需要对 JWT 进行验证,以确认其是否被篡改。

需要注意的是,JWT 中仅包含对用户身份验证和授权所必需的信息,因此不应该将敏感信息存储在 JWT 中,以避免安全风险。

34. 什么是 Promise?

在 JavaScript 编程中,Promise 指的是一种处理异步操作的方法,它可以让异步操作更加易于管理和控制

Promise 是一个对象,它是异步操作的代表,可以允许我们对异步操作进行一些处理,并等待异步操作完成后执行一些动作。

Promise 函数有三种状态:

  • pending(等待状态)
  • resolved(成功状态)
  • rejected(失败状态)。

当异步操作完成后,Promise 对象的状态会从 pending 转变为 resolved 或 rejected 状态,表示异步操作完成。

Promise 对象可以通过 then 方法进行链式调用,每个 then 方法返回一个新的 Promise 对象,因此可以在同一个 Promise 对象上执行多个处理方法。then 方法可以接收两个参数,分别是成功回调和失败回调函数,表示 Promise 对象的两种状态。

Promise 对象可以方便地解决回调地狱(callback hell)问题,即多个异步操作之间出现多层嵌套的问题。使用 Promise 可以将异步操作分离出来,使代码更加简洁易读。

下面是使用 Promise 实现一个简单的异步操作:

// 定义一个 Promise 对象
const p = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('成功');
    // reject('失败');
  }, 1000);
});
// 使用 then 方法处理异步操作
p.then((data) => {
  console.log(data);
}).catch((error) => {
  console.error(error);
});

在上面的代码中,该 Promise 对象需要等待 1 秒钟后才会 resolve(成功)。在 Promise 对象中,我们使用 setTimout 模拟了一个异步操作,然后使用 resolvereject 方法来改变 Promise 对象的状态。最后,使用 thencatch 方法来处理成功或失败状态。


【利用AI刷面试题】50道前端基础面试题(三)https://developer.aliyun.com/article/1426060

相关文章
|
人工智能 自然语言处理 前端开发
面向六个月后的 AI Code,也许影响的不只是前端
本文探讨了AI在编程领域的快速发展及其对程序员职业的影响。随着AI技术的不断进步,特别是Codebase Indexing和MCP(Model Context Protocol)等技术的应用,AI已能够更好地理解企业内部知识并生成符合项目规范的代码。文章指出,未来六个月AI代码生成将形成“规范驱动→知识沉淀→协议贯通→智能执行”的闭环架构,大幅提升开发效率。同时, Anthropic CEO Dario Amodei预测,初级程序员可能在18个月内被AI取代,强调了职业规划更新的重要性。文章还对比了Function Call与MCP的技术路线,并提供了相关参考链接。
1075 72
面向六个月后的 AI Code,也许影响的不只是前端
|
8月前
|
人工智能 前端开发 JavaScript
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
956 18
前端工程化演进之路:从手工作坊到AI驱动的智能化开发
|
人工智能 自然语言处理 前端开发
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
DeepSite是基于DeepSeek-V3模型的在线开发工具,无需配置环境即可通过自然语言描述快速生成游戏、网页和应用代码,并支持实时预览效果,显著降低开发门槛。
1928 93
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
|
10月前
|
人工智能 前端开发 测试技术
如何让AI帮你做前端自动化测试?我们这样落地了
本文介绍了一个基于AI的UI自动化测试框架在专有云质量保障中的工程化实践。
4117 24
如何让AI帮你做前端自动化测试?我们这样落地了
|
机器学习/深度学习 人工智能 自然语言处理
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
DeepSeek Artifacts是Hugging Face推出的免费AI编程工具,基于DeepSeek V3,支持快速生成React和Tailwind CSS代码,适合快速原型开发和前端组件构建。
2821 39
DeepSeek Artifacts:在线实时预览的前端 AI 编程工具,基于DeepSeek V3快速生成React App
|
11月前
|
人工智能 监控 前端开发
AI工具:前端与后端的终极对决?谁将成为新时代的宠儿?
深入探讨AI工具对前端和后端开发的具体影响、各自的机遇与挑战,并分析未来开发者如何驾驭AI,实现能力跃迁。
677 0
|
人工智能 前端开发 JavaScript
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
AI程序员:通义灵码 2.0应用VScode前端开发深度体验,在软件开发领域,人工智能技术的融入正深刻改变着程序员的工作方式。通义灵码 2.0 作为一款先进的 AI 编程助手,与广受欢迎的代码编辑器 Visual Studio Code(VScode)相结合,为前端开发带来了全新的可能性。本文将详细分享通义灵码 2.0 在 VScode 前端开发环境中的深度使用体验。
2361 2
AI程序员:通义灵码 2.0应用VScode前端开发深度体验
|
11月前
|
人工智能 前端开发 数据可视化
天都塌了,17K+ Star 的AI开源神器!Onlook 如何颠覆前端开发与设计协作?怎么办
Onlook是一款开源的视觉优先代码编辑器,结合Figma直观操作与VS Code强大功能,支持浏览器中实时构建、编辑和部署React应用。项目已获17K+Star,提供快速创建Next.js应用、所见即所得的可视化编辑、AI驱动开发工具及一键部署协作等功能,是前端开发与设计协作的理想选择。
1325 0
|
人工智能 前端开发 小程序
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
613 31
2024年12月30日蜻蜓蜻蜓AI工具系统v1.0.0发布-优雅草科技本产品前端源代码已对外开源可免费商用-优雅草老八
|
人工智能 搜索推荐 数据处理
简历诊断与面试指导:学校用AI开出“数字处方”,生成式人工智能(GAI)认证助力学生求职
本文探讨了人工智能(AI)技术在教育领域的应用,特别是学校如何利用AI进行简历诊断与面试指导,帮助学生提升求职竞争力。同时,生成式人工智能(GAI)认证的引入填补了技能认证空白,为学生职业发展提供权威背书。AI的个性化服务与GAI认证的权威性相辅相成,助力学生在数字化时代更好地应对求职挑战,实现职业目标。文章还展望了AI技术与GAI认证在未来持续推动学生成长的重要作用。

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1080
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    473
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    363
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    350
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    469
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    636
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1022
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    250
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    867
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    435