前端工程师 Tech Q&A
前端工程师 Tech Q&A
级别标准
- P3:实习开发、功能开发
- P4:主要开发、功能模块独立开发
- P5:项目负责人、核心开发、技术问题总结者、技术分享、人员培养
- P6:团队负责人、问题终结者、跨组沟通&协调资源、团队培养提升
References
如下所列前端工程师所涉及领域;
领域(子领域)设置题目若干;
题中包含标签(涉及深度、提问触发词)& 答题点(必知 Must know、应知 Should to know、可知 Posibility)
- 语言:JavaScript、ECMAScript、TypeScript、HTML、CSS
- 框架&环境:浏览器、研发工具、容器、框架通识
- 类库&库生态:React、Libs Ecosystem、数据流、SSR & SSG、BFF
- 跨端技术:微信小程序、多端统一、Node、Electron、Native、Hybrid
- 研发链路:初始化、包管理、规范标准、调试、编译、构建、测试、发布、监控
- 性能&安全:性能指标、性能评估、性能优化、源码安全、Web 安全
- 工程化:工程体系、微前端、低代码、Bundleless、CI\CD、综合能力
语言(Lang & DSL)
JavaScript
- 简单聊聊 JavaScript 这门语言?
#了解#
- 「M」在实现层面:分为语言标准(ECMAScript 是语言标准,JavaScript 只是标准的实现)+ 语言宿主环境(对象模型、WebAPI、Node Api、WX);
- 「S」语言标准提供语法、词法、基本类型、表达式、语句等;宿主环境提供内置对象、标准模块;
- 「P」语法借鉴 C & Java、数据结构借鉴 Java、原型借鉴 Self、函数用法借鉴 Schema、正则借鉴 Perl ;
- JavaScript 中有那些常见的内置对象,由谁提供?
#了解#
- 「M」值:NaN、undefined、null、Infinity;函数:eval、parseInt、parseFloat;对象:Object、Function、Boolean、Symbol、Error;数字和日期:Math、Date、Number;字符串:String、RegExp;集合:Array、Map、WeakMap、Set、WeakSet;控制对象:Promise、Generator;反射:Proxy、Reflect;
- [S] 内置对象是在程序执行时存在全局作用域的一些 JS 定义的值、函数、对象;
- JavaScript 代码在运行时,有那些常见的执行上下文?
#熟练#
- 「M」函数执行上下文;
- [S] 全局执行上下文、eval 执行上下文;
- JavaScript 通用模块规范,并描述其基本的区别?
#熟练#
#模块化#
- 「M」CommonJS、AMD、CMD、UMD、ESM;
- 「M」CommonJS 通过 require 引入模块、module.export 输出对象和接口。运行时加载,输出值的拷贝;
- 「M」ESM 通过 import 引入模块,export 输出模块;编译期输出接口,输出值的引用;浏览器支持原生 ESM ,但只能在
<script type="module" />
内使用; - [S] AMD 和 CMD 均为异步加载模块,分别由 require.js 和 sea.js 提供实现;AMD 依赖前置,CMD 就近依赖;
- [S] UMD 是对 CommonJS、AMD 的整合;
- JavaScript 这门语言是否有反射能力?ES6 为了增强这种能力又推出那些新特性?
#精通#
#编程范式#
#元编程#
#反射#
#Proxy#
#Reflect#
#数据劫持#
- [S] 反射是实现元编程的一种方式;JS 诞生之初就有反射能力;eval、Object.{create|defineProperties|defineProperty}、Function.{apply|bind} 均属于反射的一些实现;
- [S] ES6 Proxy & Reflect 作为反射的两个分支(Self-Modification & Intercession)实现;defineProperty 数据劫持有缺陷;规范语言,对之前 Object & Function 原型链上的方法进行规范化;
- [S] 为 JS 之后更多的反射行为提供良好支撑;
- [P] ES7 推出了 Reflect MetaData 提案,增强了反射覆盖场景;
- 简单描述闭包及其使用场景?
#熟练#
#语言特性#
#模块化#
- [M] 指有权限访问另外一个函数作用域中变量的函数;其本质是作用域链的特殊应用;
- [S] 创建私有变量;通过闭包对上下文中变量的引用,防止其被 GC 回收(易引发内存溢出);
ECMAScript
- ECMAScript2017(ES8) 中新增的 Symbol 有何用处?
#熟练#
- [M] 用来表示一个独一无二的变量防止命名冲突
- ECMAScript2015(ES6) 之后的版本有那些新特性?
#熟练#
#语言特性#
#ESNext#
- [S] ES7:Reflect MetaData(提案)、Array includes、
**
运算符; - [S] ES8:async&await、Object values|entries、String padding、Object.getOwnPropertyDescriptors、SharedArrayBuffer;
- [S] ES9:异步迭代、Promise.finally、正则;
- [S] ES10:Array flat、String trim 函数、Symbol Description、catch 绑定、Function toString 支撑转注释、BigInt;
- [M] ES11:Option Chaining(
?.
)、Nullish Coalescing(??
)、Private Fields(#
)、Top Level Await、Dynamic Import、globalThis; - [S] ES12:String replaceAll、Promise.any、
??= ||= &&=
、WeakRefs、123_456_789
数字分隔符;
- ECMAScript Next(ESNext)中的新特性?
#精通#
#ECMA#
#ESNext#
#前沿#
#语言新特性#
- [S] Class instance fields、Static class fields、Private instance methods、Private instance fields、Private static methods、Private static fields、Ergonomic brand checks、Import assertions、Class static blocks
- [P] Hashbang grammar、Top-level await、Arbitrary module namespace identifiers、
- 简单列出目前 ECMAScript 处于 Stage(4 & 3 & 2) 阶段的提案?
#精通#
#ECMA#
- [P] Error Cause(首个由中国团队”阿里淘宝”提出并进入 state-4 阶段的提案)
- [P] ESNext:Record、Tuple
TypeScript
- 简单描述下 TypeScript 在项目中的作用?
#了解#
- [M] 是 JS 的超集,可以提前体验 ES Next 提案中的语法糖和特性
- [M] 为 JS 添加类型支撑、JS 的语言超集、利于团队协作;极其强大的类型系统
- 简单描述下 TypeScript 中常用的工具类型?
#了解#
- [S]
Partial<T>
Required<T>
Readonly<T>
Pick<T, K>
Omit<T, K>
- 简单描述下 tsconfig.json 中常用的配置项?
#熟练#
- [M]
compilerOptions.targer
module
lib
outDir
types
paths
sourceMap
include
exclude
- TypeScript 是名义类型还是结构类型?
#熟练#
- [S] 结构类型
- 简单描述下 TypeScript 中 Interface 和 Type 的区别?
#熟练#
- [M] 均支持拓展(extends),interface 使用
extends
而 type 使用&
类型合并;支持互相拓展; - [S] type 支持类型别名,联合类型,元组;interface 支持声明合并;在使用过程中尽可能先使用 interface;
HTML
- 简单列出项目中 HTML 常用的 Meta 标签?
#了解#
#浏览器#
#HTML#
- [M]
<meta charset="utf-8" />
- [S] SEO 优化
<meta name=“description" contents=“xx,xx”/>
- [S] SEO 优化
<meta name=“keywords" contents=“xx,xx”/>
- 简单列出项目中 HTML 常用的 Link 标签?
#了解#
#浏览器#
#HTML#
- [M]
<link rel="shortcut icon" type="image/x-icon" href="..">
- [M] CSS 外链
<link rel="stylesheet" href="...">
- [S] 域名 DNS 预请求
<link rel="dns-prefetch" href="..." />
- 简单描述下 DOM 和 BOM 对象?
#了解#
#浏览器#
#宿主对象#
- [M] DOM 是文档对象模型,把文档当做为一个对象,定义和处理文档内容的方法和接口;比如
document
- [M] BOM 对浏览器对象模型,将浏览器作为一个对象,定义和处理与浏览器交互的方法和接口;比如
window
location
navigator
screen
- 简单描述下事件委托,及其优势和运用场景?
#熟练#
#浏览器原理#
#事件#
- [M] 利用浏览器事件冒泡机制;在父节点定义监听事件,由父节点监听函数统一处理多个子元素冒泡传过来的事件;
- [S] 减少内存消耗,实现事件的动态绑定;常常运用在各种 UI 事件绑定类库和数据埋点;
CSS
常用单位以及其区别?
#了解#
[M] px、em、rem、%、vw、vh
- [M] px 为屏幕的像素点,em 是父元素的 font-size(默认 16px),vw 为视窗宽度的 1%,vh 为视窗高度的 1%;
- 常用的 CSS 预处理库?
#了解#
- [M] Less、Sass
- [P] PostCSS、Stylus
- Less & Sass(SCSS) 的区别和各自的优缺点?
#了解#
- [M] 区别:在与变量的声明、实现方式(语言不同,Less 基于 JS,Sass 基于 Ruby,当然也有 node-sass 的实现)
- [S] Less 兼容性好,但是不支持循环判断等;Sass 用户基础大,支持函数对象循环判断等,但是依赖于 Ruby 安装容易报错;
- 常用的 CSS 架构、规范?
#熟练#
- [S] BEM、CSS Modules
- 常用的 CSS in JS?
#熟练#
- [S] styled-components、TailwindCSS
- 通用的浏览器 CSS 差异标准化方案?
#熟练#
#兼容性#
#初始化#
- [S] 引入 normalize.css 或者 reset.css
框架&环境(Frame & VM)
浏览器
- 浏览器事件触发时,其传播的阶段?
#了解#
- [M] Capturing(捕获) > Target(目标触发) > Bubbling(冒泡)
- Cookie、localStorage 以及 sessionStorage 之间的区别?
#了解#
- [M] Cookie:保存在客户端的数据,记录你在网页的一些行为数据。 sessionStorage:保存在客户端的数据,生命周期是同源同窗口,只要该窗口没有关闭就一直可用共享。 localStorage:保存在客户端的数据,一直有效;
- [S] Cookie size <= 4Kb;Storage size <= 5Mb;
- 浏览器出于安全提出了同源策略,何种情况下会引发跨域以及通用解决办法?
#了解#
- [M] 域名、子域名、端口号、协议不同均不属于一个域;
- [S] jsonp、documents.domain + iframe、CORS、iframe + postMessage、websocket;
- [S] 处于一级域名下的应用可以设置 document.domain 在相同父域,可以获取 cookie;
- 简单说明 JSONP 的原理,及其局限性?
#了解#
- [M] 利用了
<script>
标签没有跨域限制,可以发起 get 请求; - [S] 兼容性较好,但仅限于 Get 请求;
- 简单描述下浏览器的渲染机制?
#熟练#
- [S] 处理 HTML 文档构建 DOM 树、处理 CSS 文档构建 CSSOM 树、DOM 与 CSSOM 合并为渲染树;
- 简单描述下浏览器的缓存机制?
#熟练#
- [S] 浏览器缓存分为强缓存和协商缓存;
- [P] 强缓存直接从浏览器中获取资源,通过请求头
Cache-Control
控制;协商缓存先访问服务缓存是否过期,在决定是否使用本地资源,通过请求头控制;
研发工具
- 如何将项目的格式化进行统一?
#熟练#
- [S] 使用 .editorconfig 定义代码格式化风格;或者提交 .vscode settings.json 约束项目;
- 常用的 VS Code Editor 配置?
#熟练#
- [S] .vscode 文件下通常使用 extensions.json 声明项目依赖插件;launch.json 配置 Debug 相关的配置;settings.json 用来覆盖本地用户的基本配置(文件隐藏、文件编码、格式化风格)
容器
类库&生态(Libs & Ecosystem)
React
- React 在 16.x 具体推出那些新特性?
#熟练#
- [M] (16.1) render 返回新增支持字符串和数组类型、Error Boundaries、React Dom Portal、Fiber、React.Fragment
- [M] (16.3) createContext、createRef、forwardRef、生命周期函数更新
- [M] (16.6) React.memo、React.lazy、React.Suspense、static getDerivedStateFromError、
- [M] (16.7) React Hooks(useState、useEffect、useMemo、useCallBack、useContext)
- [M] (16.8) React Concurrent Rendering
- React 在 17.x 推出的新特性?
#熟练#
- React 在目前的 18.x 推出的新特性?
#熟练#
- 简单说明下为何两个不同版本的 React 不能运行在一个全局上下文?
#熟练#
Ecosystem
- React 运行时生态类库?
#熟练#
#Ecosystem#
#初始化#
- [M] Official:react、react-dom、react-update、react-refresh、react-reconciler
- [M] State & Flow:@reduxjs/toolkit、redux、redux-saga、mobx、iflux2 & plume2、dva
- [M] Hooks:ahooks、react-use、react-query
- [M] UI:antd、rc-*(antd core)、antd-mobile、antd-pro
- [M] Styles:styled-components、classnames
- [M] Router:react-router、react-router-dom、redux-router
- [S] Framework:umi
- [S] CLI & Layer:vite、create-react-app
- [S] Analytics:react-ga、@sentry/react
- [S] Draggable:react-dnd、react-draggable
- [S] Charts:echarts、AntV
- [P] SSR & SSG:next.js、gatsby
- [P] I18n:react-intl
- [P] Async Load:react-loadable、react-script
- [P] Long List:react-virtualized、react-windows、react-scroll、react-infinite-scroller
- [P] Docs:storybook、huge
- Taro 生态类库?
- Official:@tarojs/ taro、@tarojs/ runtime、@tarojs/ react、@tarojs/ components
- [M] Tracing:umtrack-alipay、umtrack-wx
- [M] CLI:@tarojs/ cli、@tarojs/ mini-runner、@tarojs/ plugin-inject、@tarojs/ webpack-runner
- Electron 生态类库?
- [M] Official:electron、electron-log
- [M] Release & Deploy:electron-builder、electron-packager、electron-updater、electron-reload、electron-notarize
- [M] Development:electron-debug
- [S] Compiler:electron-rebuild、node-gyp
- [M] System:getmac、systeminformation、ip
- [S] Devices:usb、escpos
- [S] Version Manage:semver
- React Native 生态类库?
- [M] Official:react、react-native
- [M] Navigator:react-navigation、native-navigation
- [M] Data Storage:realm、sqlite3、react-native-storage
- [M] Scrollable:react-native-scrollable-tab-view、
- [M] Devices:react-native-camera
- [M] Logs:
- [M] UI:ant-design-mobile
- [M] Performance:sentry、
- [M] Debugging:chrome-dev-tools、flipper
- [M] Testing:enzyme、detox、jest
- [S] Notification:jpush
- CSS 类库(CSS Tools)?
- [S] Resets:normalize.css、reset.css、reset-css
- [S] Animate:animate.css
- [S] Charts:charts.css
- [S] Productor:ant.design、semi.design
- 前端项目运行时生态类库?
- [S] Validator:joi、async-validator、yup
- [S] Testing:mocha、jest、cypress、enzyme
- [S] Assertion:chai
- 前端项目开发时生态类库?
- [M] Request:axios、isomorphic-fetch
- [M] Polyfill:core-js
- [S] Data:immutable、immer、deepmerge
- [M] Date:moment、day.js
- [S] Testing:jest、mocha、jasmine
- [S] Assertion:chai、assert
- [S] Utils:lodash、underscore
- [S] E2E:cypress、enzyme
- [S] Command:commander
- 前端项目编译时生态类库?
- [S] Compiler:babel、tsc、esbuild
- [S] Bundled:webpack、rollup、parser
- [S] Unbundled:snowpack、vite
- [S] Mangler & Compressor:terser、javascript-obfuscator、uglify-js、babel-minify
- [S] CLI & Boilerplate:create-react-app、vite
数据流
- 简单描述下单向数据流(flux)?
#熟练#
- 如何简单实现一个不可变数据类型?
#熟练#
- [M] 采用 ES6 Proxy & Reflect 代理 get | set | apply 行为,以及 DeepCopy
SSR & SSG
- CSR、SSR、BSR 以及 SSG 之间的区别与优劣?
#了解#
#SEO#
#前后端同构#
#白屏#
#性能优化#
- [M] CSR(Client Side Rendering)客户端渲染;
- [M] SSR(Server Side Rendering)服务端渲染;
- [M] SSG(Static Site Generation)静态站点生成;
- 有那些常用的 SSR & SSG 框架,如何简单实现 SSR?
#熟练#
- [S] Next.js、Gatsby
Node BFF
- 简单描述下对 Egg 的理解?
#了解#
- [M] Egg 是已 Koa 为内核,遵循约定大于配置的 Web 框架;所有功能基于插件形式完成拓展;
- 简单描述下 Koa 洋葱模型的实现原理?
#熟练#
- 简单描述下 Egg Loader 的加载顺序?
#熟练#
- [M] framework > middleware > plugin > app(router > service > controller)
- NestJS 中 IoC 的实现机制?
#熟练#
- [M] 基于 reflect-metadata 的提供的 definedMetadata | getMetadata & Decorator 的能力对类、类的成员、类的方法、类方法参数进行的注释;并在编译器提取了对应 meta 信息并实例化 ;
跨端技术
微信小程序
- 简述一下常用的生命周期
#了解#
- [M] onLoad:页面加载,调一次;onShow:页面显示,每次打开页面都调用;onReady:初次渲染完成,调一次;onHide:页面隐藏,当 navigateTo 或底部 tab 切换时调用;onUnload:页面卸载,当 redirectTo 或 navigateBack 时调用;
- 简单描述下小程序的工作原理?
#熟练#
- [S] 小程序分为两个部分 webview 和 appService,webview 用来展现 UI,appService 用来处理业务逻辑、数据及接口调用,它们在两个进程中运行,通过系统层 JSBridge 实现通信,完成 UI 渲染、事件处理。
- 小程序双线程架构原理?
#精通#
- [S] 小程序应用是基于双线程模型的,渲染层通过 Webview 作为渲染载体;逻辑层则通过 JsCore 来作为 JS 运行时;
多端统一
- 简单描述下 Taro3.0 原理?
#熟练#
- [S] Taro3.0 从编译型转向了运行时架构
- [S] 在运行时模拟实现了 DOM、BOM API,使得前端架构可以运行在小程序运行时环境中
Node
- require 的模块加载机制?
#熟练#
- [M] 先计算模块路径;如果模块在缓存里面,取出缓存;加载模块的输出模块的 exports 属性即可
- 线上如何排查问题?
#熟练#
- [M] Sentry 监控;
- [S] 全链路式日志,需要借助 apm 工具,opentracing,zipkin 等;
- [S] 阿里云 alinode;
Electron
- 简单描述下对 Electron 的理解?
#了解#
- [S] Electron 是一个可以使用 Web 技术(JS、HTML、CSS)来创建跨平台原生桌面应用的框架。借助 Node API 可以使用纯 JS 来调用丰富的原生 API。
- 简单描述下 Electron 的进程模型和以及各自的职责?
#了解#
- [S] Main Process 主进程:进程间通信(IpcMain、webContent)、窗口管理、Node Add-on 暴露、全局事务(应用生命周期、session);
- [S] Renderer Process 渲染进程:负责 web 页面容器构建渲染、业务处理;
- 解释下 Electron 构建时为何需要 Rebuild?
#熟练#
- [P] Electron 内置了 V8 和 Node,而部分 Node 能力是通过 C++ Add-on 实现的;在构建 Electron 应用时,需要针对这些 Add-on 按 Node 版本、Electron 版本、OS Platform、CPU Arch 重新进行编译;
Native
Hybrid Web APP
- 如何解决移动端 Web 点击时间的延迟?
#了解#
- [M]
<meta />
标签禁用网页缩放、FastClick
研发链路(Lint & Compile & Builder & Package)
初始化
- 如何重装 Node 环境(以 Mac 环境为例)?
- [P] 借助 npkill 对本地 node_modules 进行清理
包管理
- 简单列出一些常用的 CLI 工具或者 Boilerplate?
#熟练#
- [S] create-react-app、vite
- 简单列出常用的包管理工具?
#熟练#
- [M] npm(.npmrc、.npmignore、package.json、package-lock.json)、yarn(.yarnrc、yarn.lock)、pnpm(pnpm-lock.yaml)、tnpm;
- [S] nvm、npx(npm 5.2+ 内置;相当于提供两个 bin)
- 简单列出常用的 NPM 命令?
#熟练#
#工程化#
#脚手架#
#命令行#
- [M]
npm i|install|uninstall
npm run
npm help
npm init
npm publish|unpublish
npm start|restart
npm info
npm list
npm view|version
- [S]
npx
npm config
npm link
npm rebuild
npm clean
npm run-script
npm whoami
npm login|logout
npm docs
npm adduser
- [S] run-scripts hook
pre & post
- 简单描述下 NPM 安装依赖的大致过程?
#熟练#
- [S] 检查配置(项目 .npmrc、全局用户 .npmrc);
- [S] 确定依赖版本,构建依赖树;package.json 优先 package-lock.json;
- [S] 下载包资源;首先查询本地是否存在缓存版本,如没有则下载并添加本地缓存,并将包解压到项目 node_modules 下;
- [S] 生成 lockfile 文件(npm 5.x+);
- 简单描述下 NPX 的大致流程?
#熟练#
#脚手架#
#命令行#
- [M]
npx
命令是npm i xx --global & .bin/xx
的快捷方式
- NPM Package Version 遵循了什么协议,并简单说明该协议?
#熟练#
- [M] 遵循了 SemVer2.0 协议规范;x.y.z-{pre-release};
- [S]
{major}.{minor}.{patch}
Major 表示不兼容的修改,Minor 表示向下兼容的新增特性,Patch 表示向下兼容的问题修复; - [P] NPM 命令在不满足 SemVer2.0 规范的 Package.json 下无法执行;
- 公共类库如何处理即将弃用的功能(API、组件、模块、依赖)?
#熟练#
#组件化#
#开源项目#
- [M] 更新说明文档以及类型描述文件让使用者知道这个 Break Change;
- [S] 在某个阶段的 Minor 版本持续进行 Warning 级别提示(一般跨域一整个 Major),然后在下个 Major 版本移除;
- 封装一个类库时应该遵循哪条基本原则?
#熟练#
#开源项目#
- DRY
规范标准
- JavaScript 基本编码规范
#熟练#
#代码洁癖#
#强迫症#
- [M]
=== !==
代替== !=
;不要在对象原型(Array.prototype|Date.prototype
)上添加自定义方法;for | if 语句使用大括号;代码中的地址时间等使用常量替代;不使用var
声明变量; - [M] 使用大驼峰法对组件&类命名,使用小驼峰法来对变量&函数名命名
调试
- H5 页面的调试手段?
#了解#
- [M] 微信开发者工具
- [S] vsconsole
编译&构建
- 前端项目常用构建工具
#了解#
- [M] Webpack、Babel;
- [S] Vite、Parcel、Rollup、TSC;
- [P] EsBuild、Snowpack;
- Webpack 基本原理以及构建流程
#熟练#
#实现原理#
- [M] Webpack 是一个静态模块打包工具;讲所需要的模块组合成一个或多个 bundles 用与浏览器、Node 或者 Electron 使用;
- [S] 代码字符串 > AST > Transform > AST(Low) > 代码字符串;
- 简单描述下 Vite 的特性原理,为何快?
#熟练#
#实现原理#
- [S] Vite 在开发时采用 Esbuild 作为 模块构建器
测试
- 常用的测试框架?
#了解#
- [M] UT:Jest、Mocha
- [S] E2E:Selenium、Cypress、Puppeteer
发布
- 前端项目如何构建一个标准包?
#了解#
- [S] 在配置的依赖均倒置,运行时通过宿主来提供环境注入(global 对象、script 提供 config);
监控
- 简单列出常用的前端数据监控的类库?
#了解#
- [S] @sentry/react、fundebug、ARMS、umeng
- 简单描述下前端数据采集及其基本原理?
#了解#
- [S] 数据采集通常分为:环境信息、性能信息、异常信息、业务信息(交互数据、业务异常)
- [S] 事件委托
性能&安全(Performance & Security)
性能指标
- 简单列出常用的前端 Web 应用的性能指标?
#熟练#
- [S] First Contentful Paint(FCP) 首次内容绘制、Largest Contentful Paint (LCP) 最大内容绘制、First Input Delay(FID) 首次输入延迟;
- [P] First Paint(FP) 首次绘制、First Meaningful Paint(FMP) 首次有效绘制、Cumulative Layout Shift(CLS) 累积布局偏移、Time to Interactive(TTI) 可交互时间、DOMContentLoaded(DCL)、Load(L);
- 简单描述下性能指标的采集原理(exp. FCP、LCP、FID)?
#精通#
#性能优化#
#实现原理#
- [S] 通过 Performance Observer API 采集;
- [S] 性能监测相关 API:Paint Timing、Event Timing、Navigation Timing、Paint Timing;
性能评估
- 简单列出常用的 Web 应用性能评估(采集)工具?
#了解#
- [M] Chrome DevTools、React DevTools
- [P] Lighthouse、WebPageTest、Relyzer
- 如果使用 React 开发的页面响应慢,有那些检测手段?
#了解#
- [M] console.time、timeEnd 埋点
- [M] 借助 React DevTools 可以查看每个组件的渲染和重绘耗时
性能优化
- 常用的性能优化手段?
#熟练#
- [M] 代码压缩:Code Splitting、Tree-Shaking、Gzip
- [M] 修改加载策略
- [M] 执行自定义渲染
- [S] 体验优化(加载动画、骨架图)
- [S] DNS 预获取
- 常见的 JS 代码压缩工具及其简单原理?
#熟练#
#性能优化#
#页面优化#
#构建优化#
- [M] uglifyjs、terser
- 简单描述下 Tree-Shaking 及其原理和使用建议?
#熟练#
#性能优化#
#页面优化#
- 常见的 JS 延迟加载方式?
#熟练#
- [M]
<script defer/>
defer 属性、<script async />
async 属性、动态创建 DOM、使用 setTimeout 延迟、JS 写在 DOM 文档底部
- 微信小程序常用的优化手段?
#熟练#
- [M] 代码包大小优化分包,独立包,分包预下载;
- [M] 首页渲染优化,预加载,骨架图避免白屏;
- [M] 渲染优化,setData 增量更新,延迟加载,避免一个原子操作大量计算阻塞 ui;
- 如何优化一个前端巨石应用();
#熟练#
#前端架构#
#性能优化#
- [M] Code Splitting、Lazy Loader;
- [S] 微前端架构;
源码安全
- 保护前端 JS 的源码的常见手段?
#熟练#
- [M] 代码压缩(uglifyjs);
- [M] 生产环境不得上传 SourceMap;
- [S] 代码混淆 (Terser);
- CSRF / XSRF(跨站请求伪造)
#熟练#
- [S] HTTP 协议中使用 Referer 属性来确定请求来源进行过滤(禁止外域)
- [S] 请求地址添加 token ,使黑客无法伪造用户请求
- [S] HTTP 头自定义属性验证(类似上一条)
- [S] 敏感操作显示验证方式:添加验证码、密码等
Web 安全
工程化
工程体系
- 前后端分离的本质?
#熟练#
- [M] 职责分明,将服务端业务逻辑和前端视觉进行分离,互设边界;
- [M] 前端项目越来越复杂,需要规范流程和引入标准的工程体系。
微前端
- 业界常用的微前端框架?
#了解#
#前端框架#
- [M] single-spa、蚂蚁 qiankun.js
- [S] 京东 micro-app、字节 garfish
- [P] modern.js、magix、飞冰 icestark、WidgetJS、ara framework、luigi、emp
- 简单描述下 Qiankun 的工作原理?
#熟练#
- [M] single-spa、蚂蚁的 qiankun.js
- Qiankun 的子应用配置,为何需要构建 UMD 包?
#熟练#
- [M] 子应用 webpack entry 提供
target:umd
以及 - [S] 子应用
- 微前端框架常用的 CSS 隔离方式?
#熟练#
- [P] 自定义标签,以及标签 name 配合选择器
低代码
- 简单描述下对 JSON-Schema 协议的理解?
- 如何处理表单的关联逻辑?
Bundleless
CI\CD
- 简单列出前端常用的构建平台?
#了解#
- [M] Jenkins、Travis CI