⚠️温馨提示: 文档中包含【5个】暂不支持的区域,请通过搜索关键字【暂不支持的文档区域】进行后续处理
很多同学可能第一次来,我之前分享了很多公开课,希望对你的技术成长有帮助!
免费分享都在这里,需要 文档和配套视频回放找咨询老师 领取~
【飞书文档】css、cssinjs、tailwindcss 核心用法与进阶,字节系产品样式方案评审与最佳实践
【飞书文档】Typescript 进阶与高分技巧,字节面试官细数常问面试题与优秀开源项目最佳实践
【飞书文档】Docker 入门与服务编排进阶,字节前端专家带你光速掌握 CI/CD 运维技能
【飞书文档】ESLint 前端编码规范化与原理剖析,特邀字节大佬分享团队代码质量把控细节
【飞书文档】Notion 与飞书文档协同方案精析,字节前端专家传授百万年薪架构师级项目重难点 飞书文档编辑器原理续,进阶
【飞书文档】Ant Design 组件库架构设计与开发实践,高级前端专家带你掌握基建面试技巧 组件库与团队基建面试必看
【飞书文档】Taro、Tauri 多端开发实践与原理剖析,《Taro 多端开发权威指南》作者带你悟透多端框架原理 多端开发涨薪必学
【飞书文档】Nest 服务端开发与原理深度剖析,《NestJS 实战》作者带你领略框架设计之美 全栈进阶,企业级框架
【飞书文档】Babel 与编译原理详解,字节高级前端专家带你从零实现飞书表格公式执行器
【飞书文档】服务端渲染(SSR)与前后端同构技术原理揭秘,字节前端专家带你光速进阶全栈 进阶必学
【飞书文档】大数据可视化引擎与数字孪生平台设计浅析,字节架构师:一起来剖析 DataWind 数据洞察平台架构之道
【飞书文档】飞书文档协同编辑器技术揭秘,特邀字节架构师分享富文本编辑器方案细节
【飞书文档】前端性能与异常监控平台全链路设计与实践,字节架构师:掌握这整套拿个 40K+ 不在话下吧
【飞书文档】字节面试专场——中厂在职学员冲击大厂 30K+,看看面试官如何评价 大厂模拟面试,问得很深慎看
【飞书文档】冲击中大厂筹备与涨薪突击最优方案,特邀字节面试官带你体验大厂面试全流程
【飞书文档】Webpack 原理深度解读与面试专项突击,字节面试官带你手撕难缠打包构建面试原理题 工程化与构建原理深入
【飞书文档】脚手架/CLI 工具原理与开发实践,特邀字节前端专家带你体悟大厂团队基建与研发工作流 团队基建必看
【飞书文档】Vite 构建过程与源码深度剖析,你怎么也想不到一线大厂工程化构建面试会问这么深!
【飞书文档】Vue3 源码深度剖析,字节面试官教你轻松拿捏高级前端专家面试框架原理题
【飞书文档】React18 源码深度剖析,字节面试官教你轻松拿捏高级前端专家面试框架原理题
【飞书文档】前端破局 AI 应用开发,特邀字节大佬分享字节系 AI 场景落地应用与 AI 引擎编排流程 探索前端新方向同学福音
【飞书文档】高级前端专家如何做性能优化?特邀字节大佬细数飞书应用优化细节(二)【内部培训版】
【飞书文档】小小微前端,轻松拿捏,特邀字节大佬开讲微前端架构与源码剖析【内部培训版】 35K+ 同学必看
【飞书文档】高级前端专家如何做项目架构与工程化设计? 特邀字节大佬细数字节开源项目架构细节【超详细内培版】
【飞书文档】高级前端专家如何做性能优化?特邀字节大佬细数飞书应用优化细节【超详细内培版】
【飞书文档】面试被算法干吐了?字节大佬带你突破极限,冲击 30K+ 必掌握算法与 WebAssembly 技术 冲刺年包 50W+ 同学必看
【飞书文档】备战金九银十,进阶大前端,涨薪全突破! 跳槽涨薪需求同学必看
- 【 初中级 】在你过往项目中有做过测试吗,请说说单测与集成测试的方案与实践
- 【 中高级 】你了解过 Vitest 和 Playwright 吗,详细说说单测、集成测试体系搭建与测试用例设计编写最佳实践
- 【 专家级 】假如你是 Vitest、Playwright 作者,详细说明单测、集成测试库的架构设计与实现
【 初中级 】在你过往项目中有做过测试吗,请说说单测、集成测试、端到端测试的方案与实践 |
测试的基本概念与意义
目的 :
- 提高软件质量,减少错误。
- 确保系统的功能、性能和安全性满足需求。
测试分类 :
- 静态测试(代码审查、静态分析)。
- 动态测试(单元测试、集成测试、端到端测试)。
测试方案设计与选择
什么时候使用哪种测试?
单元测试 :
- 用于验证单一功能模块。
- 在开发过程中最早介入。
集成测试 :
- 验证模块交互逻辑。
- 在单元测试后实施。
端到端测试 :
- 验证最终用户体验。
- 优先测试关键路径。
测试金字塔模型
- 底层:单元测试(多且快)。
- 中层:集成测试(适中)。
- 顶层:端到端测试(少但全)。
单元测试(Unit Test)
概念与作用
测试代码的最小可测试单元(如函数或模块)。
验证单元逻辑的正确性,确保输入输出符合预期。
特点 :
- 快速、隔离。
- 不依赖外部系统。
常见工具和框架
JavaScript/TypeScript :
- Vitest : 专注于现代开发的快速单元测试工具。
- Jest: 功能丰富、生态完善。
- Mocha + Chai: 可高度自定义的测试框架。
其他语言 :
- Python: unittest、pytest。
- Java: JUnit。
实践与注意事项
- 使用 Mock 模拟外部依赖。
- 避免编写“功能等同于代码逻辑”的无效测试。
- 示例代码(使用 Vitest ):
import { describe, it, expect } from 'vitest';
describe('Math Utils', () => {
it('should add two numbers', () => {
const add = (a: number, b: number) => a + b;
expect(add(1, 2)).toBe(3);
});
});
集成测试(Integration Test)
概念与作用
测试多个模块之间的交互,确保它们协同工作。
覆盖数据库、API等外部依赖。
特点 :
- 涉及部分外部资源。
- 覆盖系统重要的逻辑流。
常见工具和框架
- Supertest(测试 API)。
- Cypress(也支持集成测试)。
- JUnit(集成测试支持)。
实践与注意事项
- 使用 测试数据库 ,避免污染生产数据。
- 优化测试用例以覆盖关键逻辑而非全部细节。
- 示例代码(使用 Supertest 测试 API):
import request from 'supertest';
import app from '../app';
describe('API Integration Test', () => {
it('should fetch user details', async () => {
const response = await request(app).get('/api/users/1');
expect(response.status).toBe(200);
expect(response.body).toHaveProperty('name');
});
});
端到端测试(End-to-End Test)
概念与作用
测试整个应用,从用户界面到后端服务。
模拟真实用户操作场景。
特点 :
- 完整性高。
- 通常耗时较长。
常见工具和框架
- Playwright: 支持多浏览器自动化测试。
- Cypress: 易用性高,具有直观的调试工具。
- Selenium: 历史悠久,跨语言支持广泛。
实践与注意事项
- 减少依赖的环境数量,使用容器或 Mock 服务。
- 将重点放在关键路径和高风险场景。
- 示例代码(使用 Playwright ):
const { test, expect } = require('@playwright/test');
test('User can login', async ({ page }) => {
await page.goto('https://example.com/login');
await page.fill('#username', 'testuser');
await page.fill('#password', 'password');
await page.click('button[type="submit"]');
await expect(page).toHaveURL('https://example.com/dashboard');
});
过往项目最佳实践
我的推荐:
单测、集成测试:Vitest
端到端测试:Playwright
| 名称 | 特点 | 适用场景 | 优势 | 示例代码 |
| Vitest |
|
|
| |
| Playwright |
|
|
| |
【 中高级 】你了解过 Vitest 和 Playwright 吗,详细说说单测、端到端测试体系搭建与测试用例设计编写最佳实践 |
Vitest 对于 ts node 项目的测试环境搭建与用例
环境搭建
安装依赖
在 TypeScript Node 项目中使用 Vitest,可以通过以下命令安装必要的依赖:
npm install vitest @vitest/coverage @types/node -D
配置 Vitest
在 package.json 中添加以下脚本:
"scripts": {
"test": "vitest --run"
}
创建 vitest.config.ts 文件:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globals: true,
environment: 'node',
coverage: {
reporter: ['text', 'json', 'html'],
},
},
});
测试用例设计
单元测试示例
假设我们有一个简单的加法函数:
// src/utils/math.ts
export function add(a: number, b: number): number {
return a + b;
}
编写测试用例:
// tests/math.test.ts
import { describe, it, expect } from 'vitest';
import { add } from '../src/utils/math';
describe('add function', () => {
it('should add two numbers correctly', () => {
expect(add(1, 2)).toBe(3);
});
it('should handle negative numbers', () => {
expect(add(-1, -1)).toBe(-2);
});
});
运行测试与生成覆盖率
运行测试命令:
npm run test
生成覆盖率报告:
npm run test -- --coverage
Vitest 对于 ts react 项目的测试环境搭建与用例
环境搭建
安装依赖
安装 Vitest 和相关依赖:
npm install vitest @vitest/coverage @testing-library/react @testing-library/jest-dom -D
配置 Vitest
在 vitest.config.ts 中添加以下内容:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
globals: true,
environment: 'jsdom',
setupFiles: './tests/setup.ts',
},
});
在 tests/setup.ts 中添加以下内容:
import '@testing-library/jest-dom';
测试用例设计
组件示例
创建一个简单的 React 组件:
// src/components/Hello.tsx
import React from 'react';
export const Hello: React.FC<{ name: string }> = ({ name }) => (
<div>Hello, {name}!</div>
);
测试用例
编写测试用例:
// tests/Hello.test.tsx
import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { Hello } from '../src/components/Hello';
describe('Hello component', () => {
it('renders correctly with name', () => {
render(<Hello name="World" />);
expect(screen.getByText('Hello, World!')).toBeInTheDocument();
});
});
运行测试
运行测试命令:
npm run test
Playwright 对于 ts vue3 项目的测试环境搭建与用例编写
简单可以使用脚手架初始化
npm init playwright@latest
环境搭建
安装依赖
安装 Playwright 和 Vue3 项目相关依赖:
npm install playwright @playwright/test -D
初始化 Playwright
运行以下命令初始化 Playwright:
npx playwright install
配置 Playwright
创建 playwright.config.ts 文件:
import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './tests/e2e',
timeout: 30000,
retries: 2,
use: {
headless: true,
baseURL: 'http://localhost:3000',
},
projects: [
{
name: 'Desktop Chrome',
use: { ...devices['Desktop Chrome'] },
},
],
});
配置开发服务器
在 package.json 中添加脚本:
"scripts": {
"test:e2e": "playwright test",
"serve": "vite"
}
测试用例设计
测试场景示例
假设有一个登录页面:
<!-- src/components/Login.vue -->
<template>
<form @submit.prevent="login">
<input v-model="username" placeholder="Username" />
<input type="password" v-model="password" placeholder="Password" />
<button type="submit">Login</button>
</form>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
data() {
return {
username: '',
password: '',
};
},
methods: {
login() {
if (this.username && this.password) {
alert('Login successful');
} else {
alert('Login failed');
}
},
},
});
</script>
测试用例
编写端到端测试:
// tests/e2e/login.test.ts
import { test, expect } from '@playwright/test';
test('successful login', async ({ page }) => {
await page.goto('/');
await page.fill('input[placeholder="Username"]', 'admin');
await page.fill('input[placeholder="Password"]', '1234');
await page.click('button[type="submit"]');
await expect(page.locator('text=Login successful')).toBeVisible();
});
运行测试
运行开发服务器:
npm run serve
运行端到端测试:
npm run test:e2e
【 专家级 】假如你是 Vitest、Playwright 作者,详细说明单测、端到端测试库的架构设计与实现 |
Vitest 架构设计与实践
Vitest 是一个基于 Vite 构建的现代化测试框架,专注于速度和开发体验,主要用于前端项目的单元测试和集成测试。
Vitest 的核心特性
- 基于 Vite 的速度优势 :利用 Vite 的依赖缓存和模块优化功能。
- 热更新测试 :修改代码时自动触发相关测试。
- 强大的 Mock 功能 :支持函数、模块的全面模拟。
- 多种测试环境 :支持 Node.js 和 Jsdom 环境。
- 扩展性 :通过插件支持自定义的断言库、报告器和工具。
核心模块与流程
⚠️ 暂不支持的文档区域,【文档小组件】
⚠️ 暂不支持的文档区域,【文档小组件】
核心架构
Vitest 基于 Vite,充分利用其高效的构建速度和模块热更新能力。其架构主要分为以下几个模块:
- CLI 层 :处理命令行输入,解析配置并启动测试。
- Test Runner :核心模块,负责加载测试文件、运行测试用例。
- Transform 层 :通过 Vite 的插件机制对文件进行编译和转化(如支持 TypeScript、ESM)。
- Mocking 层 :提供模拟依赖(mock)和全局对象的功能。
- Assertion 层 :使用 Chai 等库提供断言能力。
- Report 层 :生成和输出测试结果。
核心源码流程
Vitest 的核心流程可以分为以下几步:
CLI 初始化
- 使用
commander解析命令行参数。 - 加载用户的配置文件(
vitest.config.ts)。 - 创建 Vitest 的配置对象,包含 Vite 配置和测试相关的扩展配置。
配置解析与合并
Vitest 会读取 vite.config.js 和 vitest.config.ts ,并合并配置。主要的配置字段包括:
test:测试相关配置(如include、exclude、globals等)。resolve:模块解析规则(与 Vite 配置一致)。transform:文件的编译和转换规则。
Vitest 通过 Vite 的 createServer 方法创建开发服务器,复用 Vite 的解析和加载能力。
测试文件的发现
Vitest 使用 Glob 模式(通过 fast-glob 库)查找测试文件。默认会扫描项目中的 *.test.* 和 *.spec.* 文件。
测试文件的加载和编译
Vitest 利用 Vite 的插件机制处理测试文件:
- 解析依赖 :通过 Vite 的模块解析逻辑找到依赖文件。
- 编译代码 :支持 TypeScript、ESM 等现代语法,转换为支持运行时的 JavaScript。
- 注入环境 :为每个测试文件注入全局的测试函数(如
describe、it、expect)和模拟功能。
执行测试
测试文件加载完成后,Vitest 使用一个 Test Runner 执行测试用例:
- 解析测试文件,生成测试用例树。
- 遍历测试用例树,根据
describe和it的结构,依次执行测试。 - 在执行每个测试用例时,捕获其执行结果(通过 try-catch 捕获错误)。
Mock 功能
Vitest 提供 Mock 功能,通过 vi.mock 实现对模块和依赖的模拟:
- 依赖拦截 :在模块加载时拦截目标模块并返回模拟内容。
- 函数 Mock :通过
vi.fn提供函数调用的计数、参数捕获和返回值控制。
断言和错误捕获
Vitest 内置了 Chai 作为断言库,用户可以使用 expect 或其他断言风格(如 assert )。
- 捕获断言失败和未捕获的异常。
- 提供详细的错误信息(包括堆栈跟踪和代码位置)。
报告生成
Vitest 提供多种报告方式:
- 实时控制台输出 :在 CLI 中打印测试结果和错误信息。
- JSON 文件输出 :可以生成机器可读的测试结果文件。
- HTML 报告 :通过插件生成静态的测试报告页面。
热更新与开发体验
Vitest 的一大特色是与 Vite 的无缝集成:
- 利用 Vite 的热模块替换(HMR)功能,在修改测试文件时自动重新运行测试。
- 缓存测试结果,只重新运行受影响的测试用例。
关键模块源码解读
配置管理
// vitest/src/config.ts
import { defineConfig } from 'vite'
export default defineConfig({
test: {
globals: true,
environment: 'node', // or 'jsdom'
include: ['**/*.test.ts'],
}
})
Vitest 会解析上述配置并与默认配置合并,最终生成运行时配置。
测试执行
// vitest/src/runner.ts
async function runTests() {
const files = await findTestFiles(config.include)
for (const file of files) {
await executeFile(file)
}
}
async function executeFile(file) {
const testModule = await import(file)
runTestSuite(testModule)
}
Mock 实现
// vitest/src/mocks.ts
function mock(module, implementation) {
const original = require(module)
mockedModules[module] = { ...original, ...implementation }
}
报告生成
Vitest 提供插件机制,允许自定义报告器:
// vitest-report-json.js
import { createReport } from 'vitest'
createReport('json', {
outputFile: './report.json',
})
Playwright 架构设计与实践
Playwright 是一个强大的自动化测试框架,专注于跨浏览器的 Web 测试。核心是通过 WebSocket 与浏览器进行通信,充分利用现代浏览器的调试协议(如 CDP)实现高效的自动化操作。
Playwright 的核心特性
- 跨浏览器支持 :同时支持 Chromium、Firefox 和 WebKit。
- 多会话隔离 :通过 BrowserContext 实现独立的测试环境。
- 网络拦截与模拟 :支持请求拦截和返回模拟数据。
- 高效的并行执行 :内置 Test Runner 支持并行测试。
- 强大的选择器支持 :包括 CSS、XPath 和自定义选择器
核心模块与流程
⚠️ 暂不支持的文档区域,【文档小组件】
⚠️ 暂不支持的文档区域,【文档小组件】
核心架构
Playwright 的架构基于客户端-服务端模型,主要组件包括:
- Client : 用户的测试脚本运行在这里,调用 Playwright 提供的 API。
- Server : 负责管理浏览器实例及与浏览器通信。
- Browser Driver : 通过特定协议(如 CDP、WebSocket)与浏览器通信。
核心模块
- Browser Context : 支持独立的浏览器环境,用于隔离不同的测试。
- Selectors : 定义和解析复杂的元素选择器。
- Network Interception : 提供请求和响应的拦截、修改能力。
- Test Runner : 负责运行测试用例,并与报告器集成。
核心源码流程
初始化流程
Playwright 的入口是通过 playwright 对象创建浏览器实例。
const { chromium } = require('playwright');
const browser = await chromium.launch();
初始化的主要流程:
- 加载配置并解析测试用例。
- 启动指定浏览器类型(Chromium、Firefox 或 WebKit)。
- 创建独立的 BrowserContext,用于隔离测试环境。
- 初始化 Test Runner,加载并执行测试。
配置管理
Playwright 支持通过 playwright.config.js 管理配置:
module.exports = {
use: {
headless: false,
viewport: { width: 1280, height: 720 },
baseURL: 'http://localhost:3000',
},
};
配置解析流程:
- 合并默认配置和用户配置。
- 验证配置是否合法(如检查浏览器路径、网络代理设置)。
- 将配置传递到 Browser Context。
浏览器启动
通过 BrowserType.launch() 启动浏览器,内部逻辑:
- 根据配置检查浏览器可执行文件路径。
- 通过子进程启动浏览器实例。
- 建立与浏览器的 WebSocket 连接。
- 初始化调试协议(如 Chrome DevTools Protocol,CDP)。
源码示例:
// packages/playwright-core/src/browserType.ts
async launch(options) {
const process = await this._launchProcess(options);
return new Browser(process);
}
Browser Context 管理
Playwright 使用 BrowserContext 实现多会话隔离。每个 Context 相当于一个独立的浏览器实例。
- 默认会创建一个 Context,测试脚本中可以手动创建多个:
const context = await browser.newContext();
const page = await context.newPage();
BrowserContext内部负责:- 管理 Cookie 和本地存储。
- 处理网络代理、设备模拟等配置。
- 提供独立的 Page 对象。
页面操作和元素交互
Page 是测试的核心对象,所有页面操作通过它完成:
- 导航 :
page.goto(url)发送导航命令。 - 交互 :
page.click(selector)通过解析选择器,触发点击事件。 - 等待 :
page.waitForSelector(selector)等待元素出现。
核心流程:
Page调用对应的方法(如goto)。- 将命令封装为消息,通过 WebSocket 发送到服务端。
- 服务端解析消息并调用浏览器原生接口(如 CDP 的
Page.navigate)。 - 浏览器返回结果,客户端处理并返回给用户。
源码示例:
// packages/playwright-core/src/page.ts
async goto(url, options) {
const result = await this._channel.goto({ url, ...options });
return result;
}
选择器引擎
Playwright 内置了多种选择器引擎(如 CSS、XPath),也支持自定义选择器:
- 核心模块解析选择器并绑定到 DOM 节点。
- 通过
evaluate将脚本注入到页面执行选择器逻辑。
await page.locator('text=Submit').click();
自定义选择器源码:
// packages/playwright-core/src/selectors.ts
register(name, script) {
this._customSelectors[name] = script;
}
网络拦截与模拟
Playwright 提供强大的网络拦截功能,通过 route 拦截请求:
page.route注册拦截规则。- 在请求发送前触发拦截回调。
- 用户可以修改请求或返回模拟响应。
源码逻辑:
await page.route('**/api/*', route => {
route.fulfill({ status: 200, body: 'mocked response' });
});
内部实现:
- 拦截规则存储在内存中。
- 每个请求发送时匹配规则并执行拦截回调。
测试运行与报告
Playwright 提供内置的 Test Runner,流程如下:
- 加载测试文件 :通过 Node.js 动态加载测试文件。
- 运行测试用例 :依次执行文件中的
test方法。 - 生成报告 :通过内置或自定义的报告器输出结果。
测试用例示例:
test('basic test', async ({ page }) => {
await page.goto('https://example.com');
const title = await page.title();
expect(title).toBe('Example Domain');
});
源码关键模块解读
Launch 模块
// playwright-core/src/server/browserServer.ts
_launchServer() {
const childProcess = spawn(browserExecutablePath, args, options);
this._process = childProcess;
}
WebSocket 通信
通过 WebSocket 管理与浏览器的通信:
// playwright-core/src/transport/webSocket.ts
class WebSocketTransport {
send(message) {
this._ws.send(JSON.stringify(message));
}
}
Test Runner
// playwright-test/src/runner.ts
async function runTest(test) {
try {
await test.run();
} catch (error) {
console.error('Test failed:', error);
}
}
简历优化(35K+ 简历模板)
技能描述
熟练掌握 HTML、CSS、JavaScript、Typescript 以及 OOP、FP、 AOP 等设计思想
掌握样式体系构建与落地,对 css 预编译、css in js、module css 以及 utility-first CSS 有深入研究,并从零改良过样式体系以支持 SSR、SSG
熟悉 React、Vue 相关技术栈,熟悉 React、Vue 及相关技术框架的实现原理
掌握构建工具 Webpack、Vite 等,掌握编译工具 Babel,并深入理解其原理,并参与 Rspack 构建
丰富的数据可视化经验,熟悉 Canvas、svg 开发范式,理解 Echarts、Antv 原理,能根据业务需求基于 d3、zrender 开发自定义渲染引擎
丰富的跨端开发经验,熟练使用 Taro、Flutter、React-Native 开发跨端应用,对构建 hybird App 有丰富经验,深入理解跨端开发编译原理
基于 Node.js 开发脚手架、打包构建优化工具及中间件服务
掌握常用设计模式、算法与安全知识,追求开发高质量、高可维护性代码,追求极致产品体验
团队管理经验,并在项目架构设计与性能优化方面具有丰富经验
算法与编程技术
- 精通各种算法题的分类及解决方法,包括排序与查找、数据结构、动态规划、贪心算法、回溯算法、分治算法、图论算法、数学算法等。
- 重点掌握动态规划的基本概念、解题步骤和经典题目。
3D 数字孪生平台开发经验
- 熟练使用 WebGL 和 WebAssembly 技术,开发高效的 3D 渲染引擎。
- 精通正射影像和倾斜摄影技术,具备 Tile 和模型(包括白膜和精模)的处理经验,能够使用 Blender 进行模型制作。
- 熟悉材质、光效和粒子系统的实现与优化。
全面性能优化能力
- 具备打包构建优化经验,熟练使用 Webpack 进行模块打包,掌握 chunk、treeshaking、happypack、cache-loader 等优化技巧,并使用 Webpack Module Federation 进行模块联邦管理。
- 精通资源优化,能够有效进行图片、字体压缩,管理请求队列,并通过 OSS 和 CDN 提升资源加载速度。
- 具有应用性能优化经验,包括数据结构优化和应用模块更新。
- 深入了解缓存机制,熟悉强缓存(Expiration、Cache-Control)、协商缓存(Etag)和策略缓存(Service-Worker)的配置与管理。
项目描述
这个环节至关重要,很多同学不重视,简历随便写一写就开始投递了,结果投出去几百份可能一家公司面试都没有,结果就在怀疑前端行情出问题了
STAR 法则:
- 遇到了什么问题 question,需求
- 怎么评估解决方案,方案对比,方案落地 react 状态管理(redux、mobx、jotai、recoil)Vue3 -> Pinia
- 具体方案落地
- 结果反思,细节优化思考
大家先看这段描述:
技术栈:Java、Vue2、echarts、WEui、BaiduMap、JavaScript 、HTTP数据库:MySQL管理工具:SVN
责任描述:
1)产品前端研发负责人,主要负责整体样式沟通,样式调配实现;门户、管理平台、移动端、智端、可视化等前端内容实现;
2)实现组织管理、人员管理、党员关系转接、待办通知、绩效考核(复杂功能算法实现)、发展党员(25个流程)、可视化等主体功能,兼容性优化、适配1920*1080屏幕以及响应式布局实现;
3)相关功能开发,包含前后端、数据库;
4)门户框架搭建、门户整体设计、后端接口、门户前端 UI 实现等;
5)微信小程序框架搭建、小程序页面设计及开发、知识图谱技术预演;
6 )项目经理工作辅助,包含需求沟通、UI设计沟通、交付材料项目经历整理、前端代码质量管理、部分功能设计。
深度优化一下
工作内容和成果
- 【 架构设计 】参与智慧管理平台整体架构设计、技术选型与方案评审,担任全栈开发,完成相关核心模块
- 【 企微开发 】对接企业微信生态,基于企微 SDK 完成平台支付、消息推送、机器人等功能开发
- 【 可视化 】主导完成平台可视化渲染引擎(可视化图表的组件,数据协议)设计与开发,基于 echarts (svgRenderer、canvasRenderer 一千万行数据的表格渲染【不能使用 虚拟滚动 】 canvas table,chunk)封装业务图表库,服务于平台可视化场景
- 【 地图开发 】使用百度地图 SDK,封装业务地图渲染器(MapRenderer),包含:地图撒点、地区数据下钻等功能
- 【 小程序与App 】基于 uniapp 实现智慧党建用户端多端开发落地,产物编译为 H5、微信小程序两端应用
- 【 团队基建 】推进团队业务组件库、图表库与基础库沉淀,完成 10+ 个业务组件沉淀,以此提升了团队协同开发效率
- 【 优化 】设计产品响应式系统,基于 media query 设计响应式端点规则,适配不同端应用的展示
- 【 自研 OA 打通 】...
STAR
【技术栈】
- Java、Vue2、ECharts、WEui、BaiduMap、JavaScript、HTTP
- 数据库 :MySQL
- 管理工具 :SVN
【产品前端研发负责人】
- 情境 (Situation) :担任产品前端研发负责人,负责门户、管理平台、移动端、智端、可视化等前端内容的实现。
- 任务 (Task) :主要任务是与设计团队沟通,调配和实现整体样式,确保产品界面的一致性和用户体验。
- 行动 (Action) :我协调设计与开发团队,定期召开样式沟通会,亲自进行样式的调配与实现,并负责不同平台和设备的前端内容开发。
- 结果 (Result) :成功实现了多个平台的前端开发工作,提升了产品的用户体验和一致性,获得了团队和用户的高度评价。
【实现复杂功能及优化】
- 情境 (Situation) :项目需要实现复杂功能算法和大规模功能模块,包括组织管理、人员管理、党员关系转接、待办通知、绩效考核、发展党员(25个流程)和可视化功能。
- 任务 (Task) :负责上述复杂功能的实现,并优化其兼容性和响应式布局。
- 行动 (Action) :通过设计和实现复杂算法,确保各模块的功能性;进行兼容性优化,使系统适配1920*1080屏幕和响应式布局。
- 结果 (Result) :成功实现并优化了所有复杂功能,系统在不同设备和分辨率下均表现良好,提高了用户操作的流畅度和满意度。
【全面功能开发】
- 情境 (Situation) :需要进行前后端和数据库的全面开发,确保系统各功能模块的无缝集成。
- 任务 (Task) :开发和实现相关功能,包括前端UI、后端接口和数据库交互。
- 行动 (Action) :采用Java、Vue2等技术,开发并调试各功能模块,与后端团队密切合作,确保接口的准确性和数据的一致性。
- 结果 (Result) :成功完成了所有功能模块的开发和集成,系统运行稳定,性能优异,受到了客户的好评。
【微信小程序开发与知识图谱预演】
- 情境 (Situation) :项目需要开发微信小程序,并进行知识图谱技术的预演。
- 任务 (Task) :负责小程序框架的搭建、页面设计及开发,同时进行知识图谱的技术预演。
- 行动 (Action) :使用WEui、JavaScript等技术,设计并开发小程序页面,进行知识图谱的技术预演和验证。
- 结果 (Result) :成功搭建了微信小程序框架,完成了页面设计和开发工作,知识图谱技术预演顺利,通过了技术验证。
【项目经理工作辅助】
- 情境 (Situation) :在项目中辅助项目经理,确保项目需求沟通顺畅,UI设计协调到位,交付材料齐全,前端代码质量高。
- 任务 (Task) :辅助项目经理进行需求沟通、UI设计沟通、交付材料整理、前端代码质量管理以及部分功能设计。
- 行动 (Action) :积极参与需求和UI设计的沟通,整理和管理项目交付材料,进行代码审查和质量管理,并参与功能设计。
- 结果 (Result) :成功辅助项目经理完成了项目的各项工作,提高了项目的开发效率和交付质量,确保了项目的顺利进行。
其实还不够,这些项目才是求职香饽饽
你可能不具备这些项目的实战经验,很多同学写了很多年管理系统,简单增删改查项目,如果不跳出这个圈子,很难在薪资上有非常大的突破!
大厂 UI 组件库(Vue3)整体设计与开发实践(monorepo 架构)
大厂业务 Hooks 库(React 18)整体设计与开发实践(从零到一的架构、规范流程)
企业级脚手架工具开发实践
企业级文档编辑器飞书文档开发实践
前端性能、异常与行为监控
3D 可视化数字孪生低代码实战 💥
- 基于 cesium(arcGis、超图) 方案的 WebGIS 开发实践
- 基于 openlayer、mapbox 开发
- 基于 WebGL 3D 可视化开发实践
年包 50W+ 薪资长线规划
核心要素
全面的技术储备
框架基础
- Vue 和 React 经验:包括 Vue3 + Typescript 和 React18(Hooks、Concurrent)
- 掌握框架原理:React 生态库(React-Router、Redux)和 Vue 生态库原理
工程化能力
- 构建工具:Webpack、Vite、Rspack、ESBuild、swc
- CI/CD 自动化:自动化构建和自动化部署
基建能力
- Node.js、命令行工具开发(Cli)
- UI 库、图表库、工具库开发
业务领域经验
- 管理系统和图表类应用
- 可视化、编辑器、云表格、低代码平台、SaaS 产品、数字孪生、三维可视化
项目经验
- 参与过至少两个大型项目,并主导过一个复杂项目
- 管理系统:包括项目搭建、技术方案选择、技术栈构建、CI/CD 流程
- 其他领域项目:如可视化、编辑器、云表格、低代码平台、SaaS 产品、数字孪生、三维可视化
面试表现
个人介绍
- 准备个人介绍草稿,涵盖基本信息、技术栈和项目重难点
STAR 法则
- 问题描述:阐述遇到的问题或需求
- 解决方案评估:方案对比与选择(如 React 状态管理:redux、mobx、jotai、recoil,Vue3 使用 Pinia)
- 方案实施:具体的实施步骤
- 反思与优化:项目反思及优化建议
面试准备
- 重点复习知识点:如 v8 内存管理、Promise A+ 规范、事件循环、this、面向对象编程原型
- 技术储备:结合项目经验展示技术在项目中的应用
学历提升
- 现有学历:大专
- 未来计划:尽快取得本科证书(不需要注明具体年限)
- 学历背景:民办学校
- 内推建议:应对学历和工作经历问题,通过内推提升机会
补足短板
项目简单,管理后台一做就是大半年,天天 CRUD
- 看开源项目(react-hook-form ts 类型、hook 处理、状态管理、架构 Provider,keyPath)
- 找一些不错的项目练手
- 拿好的项目,学习完放在简历里, 可视化、编辑器、云表格、低代码、SaaS 产品、数字孪生、三维可视化
- 1.自研:15K, 2.外包:20K ,这个火坑, 灰(供需决定)
技术栈掌握不深不广,只会用 Vue2 (Vue3 + Typescript),React18(React stack reconciler)
架构、方案设计没碰过
- React,create-react-app、umi,没有真正从零到一去设计初始化过一个项目
- Vue,Vue CLI,Vite/Webpack。Vue2 CLI 创出来项目 1. webpack、2.vite
没有专精的技能或业务
- 自驱 (假定自己是 Leader),项目的赢利点、商业价值【 可视化、编辑器、白板、团队基建、AI产品 】
- 与生俱来有些东西,好奇心、自驱力、清晰规划
- 我:管理平台,HPE(官网、后台管理),云表格(维格表、飞书云表格)、云编辑器(CKEditor 老【html string】)(语雀、【石墨文档】)
妙码学院——全程陪跑、督学、内推
⚠️ 暂不支持的文档区域,【文档小组件】
- 跨端开发 Taro(Taro 编译器 compiler、运行时 runtime)、uniapp
- 协同编辑器(文档类、画板类)
- 团队基建工程(UI 库、图表库、Cli -> 产生产物 npm 包)
- 3D 可视化数字孪生 bigdata
- 低代码平台
课程体系 2.0 升级,除了基础知识夯实,融入了更多项目实战内容,包含:
企业级脚手架工具开发实践
企业级文档编辑器飞书文档开发实践
大厂 UI 组件库(Vue3)整体设计与开发实践
大厂业务 Hooks 库(React 18)整体设计与开发实践
埋点与数据监控平台实战
3D 可视化数字孪生实战 💥
- 基于 cesium 方案的 WebGIS 开发实践
- 基于 WebGL 3D 可视化开发实践
妙码学院全网独家项目实战矩阵
所有项目实战,均完全 从零到一手写 , 纯原创 ,项目架构与编码规范真一线大厂级。
微前端在分拆原子应用场景下的落地与实践
协同编辑器从零到一架构实现
推动团队基建落地
- React UI 库
- Vue Composition API 库
- 企业级脚手架
数字孪生平台整体架构设计
企业级无代码可视化平台实践(Vue3)
低代码平台设计与实现
- 编排引擎
- 流程引擎
- 编辑器
- 代码执行器与 JavaScript 沙箱
用户行为分析 SDK 及监控可视化整体实现
可视化渲染引擎设计与实现
基于 RAG / Agent 前端 AI 应用流程编排平台
不同阶段对前端人的硬性要求
以下是对您提供的内容进行权威和专业化改写的建议:
1~3年
在此阶段,重点在于评估个人的基础知识和热情。对前端基础、计算机原理、网络通信和算法等领域的要求较高。由于在此阶段难以评估业务深度,因此更多关注基础知识的掌握程度。
- 关键在于通过学术教育或网络资源加强基础知识;
- 在简历中以多种方式展示对前端的热情,展现个人潜力;
- 积极探索前沿技术,关注国内外技术动态;
- 尝试开发小型项目或参与社区开源项目;
- 建立技术博客,以输出促进知识吸收。
3~5年
此阶段通常是向成为独立工程师发展的关键时期,避免重复使用有限的经验。
关注社区中关于进阶的资料和路线,强化基础知识;
深入掌握常用框架的高级用法,探索其原理;
在业务开发中不仅完成功能,还需考虑项目结构设计、封装基础工具、设计和开发基础组件;
思考提高团队效率的方法,例如:
- 集成代码检验和风格统一插件(如 eslint、stylelint、prettier、spellcheck);
- 从工程化角度提高本地开发效率,优化webpack构建,探索esbuild、vite等工具;
- 对于多项目开发,整理差异和统一部分,建立内部脚手架以减少重复工作;
- 尝试搭建CI/CD平台,维护公司内部的通用npm包;
- 培养软技能,如沟通协作,协调各角色共同推进目标。
5年以上
进入此阶段,可能朝技术专家或管理方向发展。期望您能够独立负责高复杂度项目,突破关键技术难题。
- 负责技术调研,关注行业趋势,选择最优技术方案,具备决策能力;
- 拥有丰富的技术经验和技术储备,能够解决遇到的困难,并有自己的方法论;
- 协助或主导业务目标制定,合理推动项目达成预期效果;
- 是否具有团队领导经验,能够协调跨团队项目,处理团队成员情绪问题,解决技能分布不平衡等问题;
- 打造技术氛围,促进团队共同成长。
职业规划指导
评论区选取三位同学互动,其他同学也可以联系咨询老师,文字方式提供辅导解答。
【未知组件reminder】
