前端面试题(九)
45. Web 安全
-
常见的 Web 安全问题有哪些?
-
跨站脚本攻击 (XSS):通过在网页中注入恶意脚本,攻击者可以窃取用户的敏感信息,劫持用户会话等。
- 防御措施:对用户输入进行严格的校验和过滤,使用
Content Security Policy (CSP)
,避免直接渲染不可信的 HTML。
- 防御措施:对用户输入进行严格的校验和过滤,使用
-
跨站请求伪造 (CSRF):攻击者通过伪造请求,诱导用户在不知情的情况下执行未授权操作。
- 防御措施:使用
CSRF Token
,验证请求的来源,设置SameSite
Cookie 属性。
- 防御措施:使用
-
SQL 注入:攻击者通过向 SQL 查询中注入恶意代码来访问或篡改数据库中的数据。
- 防御措施:使用预编译语句或 ORM,避免拼接 SQL 查询,严格验证输入。
-
-
如何防止用户输入的 XSS 攻击?
- 编码输出:对所有的用户输入进行 HTML 编码,避免直接插入到 DOM 中。
- 使用安全的库:例如使用 React 和 Vue 这样的框架,它们默认会对动态插入的内容进行编码,减少 XSS 攻击的风险。
46. Babel
-
Babel 是什么?
- Babel 是一个 JavaScript 编译器,用于将现代 JavaScript 代码(ES6+)转换为向后兼容的代码,以便在较老的浏览器中运行。
-
Babel 是如何工作的?
Babel 的工作流程包括三个主要阶段:- 解析 (Parse):将源代码转换为抽象语法树 (AST)。
- 转换 (Transform):遍历 AST 并应用各种转换规则(例如将 ES6 语法转换为 ES5)。
- 生成 (Generate):将经过转换的 AST 重新生成代码。
-
如何配置 Babel?
Babel 的配置文件通常是.babelrc
,里面可以配置不同的插件和预设。例如,@babel/preset-env
是一个非常常用的预设,用于根据目标浏览器环境转换 JavaScript 代码。{ "presets": ["@babel/preset-env"] }
47. 代码规范
-
为什么前端开发中需要遵循代码规范?
- 提高代码可读性:统一的代码风格使得团队中的所有成员能够轻松阅读和理解代码。
- 减少代码错误:规范的代码结构可以避免常见的编程错误,提高代码的质量。
- 便于维护:良好的代码规范使得代码在以后维护时更容易理解和修改。
-
常用的代码规范工具有哪些?
- ESLint:JavaScript 代码的静态分析工具,帮助开发者找到代码中的潜在问题。
- 可以通过
.eslintrc
文件来配置 ESLint 规则,或者使用社区提供的预设(例如eslint:recommended
)。
- 可以通过
- Prettier:一个自动格式化代码的工具,保证代码风格一致,尤其适合在团队协作中使用。
- Stylelint:用于检查 CSS 代码规范的工具,可以帮助开发者确保样式表的书写符合团队要求。
- ESLint:JavaScript 代码的静态分析工具,帮助开发者找到代码中的潜在问题。
-
如何在项目中集成 ESLint 和 Prettier?
- 安装依赖:
npm install --save-dev eslint prettier
- 配置 ESLint 和 Prettier,确保两个工具可以无冲突地协同工作。可以使用
eslint-plugin-prettier
将 Prettier 规则集成到 ESLint 中,保证代码在格式化时符合 lint 规则。
- 安装依赖:
48. 服务端渲染 (SSR)
-
什么是服务端渲染 (SSR)?
- 服务端渲染 (Server-Side Rendering) 是指在服务器端生成完整的 HTML 页面并发送到客户端,而不是让浏览器在客户端通过 JavaScript 动态生成页面内容。SSR 可以显著提升页面首次加载的速度和 SEO 友好性。
-
服务端渲染的优势是什么?
- SEO 友好:SSR 页面在服务端就生成了完整的 HTML 文档,因此搜索引擎爬虫可以更好地抓取页面内容。
- 首次加载速度更快:SSR 在服务端生成了完整的 HTML 文件,可以减少浏览器渲染和加载的时间。
- 提升用户体验:由于页面内容在服务端生成,用户可以更快地看到页面内容,尤其适合内容密集型的网站。
-
SSR 和客户端渲染 (CSR) 的区别?
- SSR:服务器生成 HTML 页面,浏览器直接展示。
- CSR:浏览器下载 HTML 和 JavaScript 文件,然后由 JavaScript 动态生成页面内容。
-
如何在 React 中实现服务端渲染?
使用 Next.js 这样的框架可以帮助开发者快速实现 SSR。Next.js 默认支持服务端渲染,开发者只需配置页面和 API 路由即可。
49. 单页应用 (SPA) 与多页应用 (MPA)
-
什么是单页应用 (SPA)?
- 单页应用 (Single Page Application, SPA) 是一种网页应用,它只有一个 HTML 页面,所有的内容和功能通过 JavaScript 动态加载并更新,用户在使用过程中不会刷新整个页面。
-
SPA 的优点和缺点是什么?
-
优点:
- 用户体验流畅:由于页面不需要刷新,用户的交互体验更加顺畅。
- 前后端分离:前后端开发可以独立进行,提升开发效率。
-
缺点:
- SEO 差:由于内容是动态加载的,搜索引擎爬虫难以抓取页面内容。
- 首次加载慢:因为需要加载大量的 JavaScript 代码,SPA 的首次加载时间可能较长。
-
-
什么是多页应用 (MPA)?
- 多页应用 (Multi-Page Application, MPA) 是一种传统的网页应用架构,每次用户请求都会加载一个新的页面,页面之间的跳转需要重新向服务器请求完整的 HTML 文档。
-
MPA 的优点和缺点是什么?
-
优点:
- SEO 友好:每个页面都是独立的,搜索引擎可以很容易地抓取和索引内容。
- 加载速度快:每个页面都只加载与当前页面相关的资源,减少了首次加载时间。
-
缺点:
- 用户体验不如 SPA 流畅:页面跳转时会有明显的加载和刷新过程。
- 开发复杂:每个页面都需要独立开发和维护,前后端耦合较高。
-
50. 模块化开发
-
什么是模块化开发?
- 模块化开发 是将代码拆分为独立的、可复用的模块,每个模块专注于实现一个功能或业务逻辑,模块之间通过定义的接口进行通信。
-
模块化开发的优势是什么?
- 代码复用:模块化使得功能可以在不同的项目或页面中重复使用,减少代码冗余。
- 便于维护:将代码分离成小模块后,便于进行维护和调试,当某个模块出现问题时,能够快速定位并修复。
- 提升开发效率:模块化允许开发者同时开发多个模块,提升团队协作的效率。
-
如何在 JavaScript 中实现模块化?
- ES6 模块:使用
import
和export
关键字实现模块之间的引入和导出。// module.js export const greeting = "Hello, World!"; // main.js import { greeting } from './module.js'; console.log(greeting); // 输出 "Hello, World!"
- CommonJS 模块:在 Node.js 环境中使用的模块系统,使用
require
和module.exports
。// module.js module.exports = { greeting: "Hello, World!" }; // main.js const { greeting } = require('./module.js'); console.log(greeting); // 输出 "Hello, World!"
- ES6 模块:使用