⚠️温馨提示: 文档中包含【1个】暂不支持的区域,请通过搜索关键字【暂不支持的文档区域】进行后续处理

react-source-notes.zip

很多同学可能第一次来,我分享了那摩多干货公开课,不允许你不知道!都在这里,需要 文档和配套视频找咨询老师 领取~

【飞书文档】备战金九银十,进阶大前端,涨薪全突破!

【飞书文档】项目没有难点亮点?字节大佬带你前端项目弯道超车

【飞书文档】字节大佬带你弯道超车,深入剖析大厂面试真题~

【飞书文档】面试被算法干吐了?字节大佬带你突破极限,冲击 30K+ 必掌握算法与 WebAssembly 技术

【飞书文档】高级前端专家如何做性能优化?特邀字节大佬细数飞书应用优化细节【超详细内培版】

【飞书文档】高级前端专家如何做项目架构与工程化设计? 特邀字节大佬细数字节开源项目架构细节【超详细内培版】

【飞书文档】小小微前端,轻松拿捏,特邀字节大佬开讲微前端架构与源码剖析【内部培训版】 35K+ 同学必看

【飞书文档】高级前端专家如何做性能优化?特邀字节大佬细数飞书应用优化细节(二)【内部培训版】

【飞书文档】前端破局 AI 应用开发,特邀字节大佬分享字节系 AI 场景落地应用与 AI 引擎编排流程

  1. 自顶向下粗略了解思想:整体项目架构
  2. 关键包与职责:react、react-dom、react-reconciler、scheduler
  3. 演进过程:expirationTime -> lanes,stack reconciler -> fiber
  4. 数据结构与算法: 小根堆 、链表、栈、树,调和算法、位运算、dfs

还是要从 DOM 事件驱动讲起

早期没有诸如 React、Vue 这类库时,我们都采用事件驱动的实现方式开发功能,即:用户触发事件,修改变量,而后操作 dom 将变量值反映到页面上。

事件驱动

假设我们有一个按钮,点击按钮后会在页面上添加一个新的段落。

HTML:

<!DOCTYPE html>
<html>
<head>
  <title>DOM 操作示例</title>
</head>
<body>
  <button id="add-paragraph">添加段落</button>
  <div id="content"></div>

  <script src="script.js"></script>
</body>
</html>

JavaScript (script.js):

document.getElementById('add-paragraph').addEventListener('click', function() {
  const newParagraph = document.createElement('p');
  newParagraph.textContent = '这是一个新段落。';
  document.getElementById('content').appendChild(newParagraph);
});

在这个例子中,我们直接通过 DOM API 操作页面元素。这种方式在项目规模较小、页面逻辑较简单时比较方便,但当页面变得复杂时,手动管理 DOM 会变得繁琐且容易出错。

状态驱动

同样的功能,我们使用 React 来实现。

import React, { useState } from 'react';
import ReactDOM from 'react-dom';

function App() {
  const [paragraphs, setParagraphs] = useState([]);

  const addParagraph = () => {
    setParagraphs([...paragraphs, '这是一个新段落。']);
  };

  return (
    <div>
      <button onClick={addParagraph}>添加段落</button>
      <div id="content">
        {paragraphs.map((text, index) => (
          <p key={index}>{text}</p>
        ))}
      </div>
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById('root'));

在这个例子中,我们使用 React 来构建 UI。React 使用组件来管理页面的状态和渲染逻辑。

区别与优势对比

  1. 代码结构和可维护性

    • 事件驱动操作 DOM :代码直接操作 DOM,逻辑和视图混杂在一起,随着功能增加,代码容易变得混乱,难以维护。
    • React :通过组件化的方式将逻辑和视图分离,代码结构清晰,易于维护和扩展。
  2. 状态管理

    • 事件驱动操作 DOM :状态管理是手动的,需要跟踪 DOM 元素的状态变化,容易出错。
    • React :React 的状态管理和虚拟 DOM 机制使得状态管理更加简单和可靠,React 会自动处理 DOM 的更新。
  3. 性能

    • 事件驱动操作 DOM :频繁操作实际 DOM 会导致性能问题,尤其是在复杂的应用中。
    • React :React 使用虚拟 DOM 优化性能,减少实际 DOM 操作的次数,提高应用性能。
  4. 开发效率

    • 事件驱动操作 DOM :开发效率较低,特别是在处理复杂交互时。
    • React :提供了大量开箱即用的工具和生态系统(如 hooks、context 等),提高开发效率。

手写类 React 框架

从操作 dom 我们发现,开发过程最需要关注的有以下几点:数值、事件、dom 操作,并且 dom 操作的写法耦合性极高,我们要尝试将模块分离,从而提高代码可读性与团队协作开发效率。

定义状态值与操作方法

let count = 0;
let prevCount = 0;

const setCount = (c) => {
  count = c;
};

diff

const reconcile = () => {
  if (count !== prevCount) {
    prevCount = count;

    commitWork();
  }
};

优先级调度(scheduler workLoop)

const workLoop = () => {
  requestIdleCallback(() => {
    workLoop();
  });
};

workLoop();

循环调和(reconciler workLoop)


const workLoop = () => {
  requestIdleCallback(() => {
    reconcile();
    workLoop();
  });
};

workLoop();

提交 dom 更改

const rootDom = document.querySelector("#root");

const commitWork = () => {
  rootDom.innerHTML = count;
};

commitWork();

事件监听,更改状态值

window.addEventListener(
  "click",
  () => {
    setCount(count + 1);
  },
  false
);

我作为 React 作者,会考虑哪些核心设计要素

React 框架通过引入一系列核心概念和机制,将开发从传统的事件驱动模式转变为状态驱动模式。这些核心概念和机制包括:

React 的设计

组件化开发

React 推崇组件化开发,将UI分解成独立、可重用的组件,每个组件负责管理自己的状态和渲染逻辑。组件化开发使得代码更易于维护、测试和复用。

状态管理

React 引入了 stateprops 的概念来管理组件的状态和数据流。

  • State :是组件内部的状态,通过 useState 钩子(在函数组件中)或 this.state (在类组件中)来定义。状态的变化会触发组件重新渲染。
  • Props :是从父组件传递到子组件的数据,子组件通过 props 来接收和使用这些数据。 props 是只读的,不能在子组件内部修改。

虚拟 DOM (Virtual DOM)

React 使用虚拟 DOM 来提高性能。虚拟 DOM 是 React 的一种抽象表示,它在内存中维护一个虚拟树结构,与实际的 DOM 进行对比。当状态变化时,React 会计算出最小的变更集,并只对需要更新的部分进行实际的 DOM 操作,从而减少了频繁的 DOM 操作,提升了性能。

声明式编程

React 提倡声明式编程,开发者只需声明组件的最终状态,React 会根据状态的变化自动更新 UI。这与传统的命令式编程不同,命令式编程需要开发者明确地指定每一步操作过程。

Hooks

React 在 16.8 版本引入了 Hooks,提供了一种在函数组件中使用状态和其他 React 特性的方式。常用的 Hooks 包括:

  • useState :管理组件的状态。
  • useEffect :处理副作用,如数据获取、订阅、手动 DOM 操作等。
  • useContext :共享组件树中的全局数据。

调和算法 (Reconciliation)

React 的调和算法负责计算出组件树中的差异,并根据差异更新 DOM。这个过程称为调和。React 会使用一种高效的算法来比较虚拟 DOM 树的前后变化,并应用最小的操作来更新实际 DOM。

JSX

JSX 是一种语法扩展,允许开发者在 JavaScript 中直接编写类似 HTML 的代码,便于描述组件的结构和内容。JSX 最终会被编译成 React 的 createElement 调用,创建虚拟 DOM 元素。

源码实现

了解 React 从事件驱动到状态驱动转变的核心源码,可以从几个关键部分进行探讨:组件化开发、状态管理、虚拟 DOM、单向数据流、声明式编程、Hooks、调和算法和 JSX。以下是这些设计对应的核心源码及其详细解释。

组件化开发

源码位置: **React.Component** ** 和 ** React.PureComponent

  • React.Component
class Component {
  constructor(props, context, updater) {
    this.props = props;
    this.context = context;
    this.refs = emptyObject;
    this.updater = updater || ReactNoopUpdateQueue;
    this.state = null;
    // Initialize the state
    const initialState = this.state;
    this.state = initialState !== null && initialState !== undefined ? initialState : null;
  }

  // Method to update state
  setState(partialState, callback) {
    this.updater.enqueueSetState(this, partialState, callback, 'setState');
  }

  // Force update
  forceUpdate(callback) {
    this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
  }
}

状态管理

源码位置: **React.useState** ** 和 ** this.setState

  • useState
function useState(initialState) {
  return ReactCurrentDispatcher.current.useState(initialState);
}
  • setState
setState(partialState, callback) {
  this.updater.enqueueSetState(this, partialState, callback, 'setState');
}

虚拟 DOM (Virtual DOM)

源码位置: **React.createElement** ** 和 ** ReactDOM.render

  • createElement
function createElement(type, config, children) {
  const props = {};
  // Handle props
  for (const propName in config) {
    props[propName] = config[propName];
  }
  // Handle children
  props.children = children;
  return {
    type,
    props,
  };
}
  • render
function render(element, container) {
  const root = createContainer(container, false);
  updateContainer(element, root, null, null);
}

声明式编程

源码位置:React 的声明式编程体现在组件的渲染逻辑中

  • 声明式渲染
function App() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

Hooks

源码位置: **React.useState** **, ** **React.useEffect** , 等

  • useState
function useState(initialState) {
  return ReactCurrentDispatcher.current.useState(initialState);
}
  • useEffect
function useEffect(create, deps) {
  return ReactCurrentDispatcher.current.useEffect(create, deps);
}

调和算法 (Reconciliation)

源码位置: ReactFiberReconciler

  • 调和算法
function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {
  // Core reconciliation logic
}

JSX

源码位置:JSX 编译为 React.createElement 调用

  • JSX 编译
const element = <div className="app">Hello World</div>;
// 编译后
const element = React.createElement('div', { className: 'app' }, 'Hello World');

一般需要 babel、esbuild 等编译工具,实现 jsx 的编译工作。

始终抓住一个要点,react 代码运行时只存在 函数对象 !不是函数和对象的内容,都是需要在编译时转换掉的。

详细解释

  1. 组件化开发

React.ComponentReact.PureComponent 是所有 React 组件的基类。通过 class 关键字继承这些基类,可以创建有状态的组件。 Component 类中定义了 propscontextrefsstate 等属性,以及 setStateforceUpdate 方法,用于管理组件的状态和强制更新。

  1. 状态管理

useState 是 React 的一个 Hook,用于在函数组件中添加状态。 setState 方法在类组件中使用,用于更新组件的状态。这些方法的实现依赖于内部的 ReactCurrentDispatcher ,它负责在组件渲染期间调度和管理状态。

  1. 虚拟 DOM

React.createElement 是创建虚拟 DOM 元素的核心函数。每次调用 createElement 都会返回一个包含 typeprops 的对象,代表一个虚拟 DOM 节点。 ReactDOM.render 将虚拟 DOM 渲染到实际 DOM 中,利用调和算法高效更新页面。

  1. 单向数据流

React 的单向数据流通过 props 在组件之间传递数据。父组件通过 props 将数据传递给子组件,子组件通过回调函数将事件传递回父组件。这种方式使得数据流向清晰、易于调试。

  1. 声明式编程

React 通过组件的 render 方法或函数组件的返回值来描述 UI 应该呈现的状态。开发者只需声明组件在不同状态下应该渲染的 UI,React 会自动管理 DOM 更新。

  1. Hooks

Hooks 是函数组件中使用状态和其他 React 特性的机制。 useState 用于添加状态, useEffect 用于处理副作用。Hooks 依赖于内部的 ReactCurrentDispatcher 来管理状态和副作用。

  1. 调和算法

调和算法是 React 更新虚拟 DOM 的核心逻辑,负责比较新旧虚拟 DOM 树的差异,并计算最小的变更集来更新实际 DOM。 reconcileChildFibers 是调和算法的关键函数。

  1. JSX

JSX 是一种语法扩展,允许在 JavaScript 中编写类似 HTML 的代码。JSX 会被编译成 React.createElement 调用,从而创建虚拟 DOM 元素。

通过这些设计和对应的源码,React 实现了从事件驱动到状态驱动的转变,使开发者能够更高效地管理组件状态、优化性能、提高开发效率。

React18 核心源码剖析

React 执行流程我们拆解为两部分,分别为:创建与更新。

创建阶段,主要完成的工作包含:容器创建、元素对应 Fiber 创建、更新队列初始化等操作。

更新阶段,主要包含:状态更新触发任务入队、scheduler 调度、重新构建 fiber、完成 fiber 到元素映射更新视图

工程架构

React 采用 monorepo 架构,几个核心包如下:

  • react
  • react-dom
  • react-reconciler
  • scheduler
  • react-noop-renderer

创建

完整执行顺序(方法名)及核心文件:

  1. react-dom

    1. ReactDOM.createRoot
    2. createRootImpl
  2. react-reconciler

    1. createContainer
    2. createFiberRoot
    3. createHostRootFiber
    4. createFiber
    5. initializeUpdateQueue
  3. react-dom

    1. ReactDOMRoot.prototype.render
    2. markContainerAsRoot
    3. updateContainer
    4. ... 此处省略,我们在更新处探讨

更新

上文提到,react 应用创建会先初始化所需数据,包含 fiberRoot、rootFiber、updateQueue 等,然后调用 render 方法,我们可以看到在 render 时,却是调用了与状态更新时所调用的同一方法——updateContainer,这正是其设计的精妙之处。

ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = function(
  children: ReactNodeList,
): void {
  const root = this._internalRoot;
  if (root === null) {
    throw new Error('Cannot update an unmounted root.');
  }

  // ...
  updateContainer(children, root, null, null);
};

完整执行顺序(方法名)及核心文件:

  • react-reconciler

    • updateContainer
    • requestUpdateLane
    • enqueueUpdate
    • scheduleUpdateOnFiber
  • scheduler

    • unstable_scheduleCallback
    • workloop
  • react-reconciler

    • performConcurrentWorkOnRoot

    • renderRootConcurrent

    • workLoop

    • performUnitOfWork

      • beginWork
      • completeWork
    • commitRoot

妙码学院全网独家项目实战矩阵

所有项目实战,均完全 从零到一手写纯原创 ,项目架构与编码规范真一线大厂级。

  • 微前端在分拆原子应用场景下的落地与实践

  • 协同编辑器从零到一架构实现

  • 推动团队基建落地

  • 数字孪生平台整体架构设计

  • 低代码平台设计与实现

    • 编排引擎
    • 流程引擎
    • 编辑器
    • 代码执行器与 JavaScript 沙箱
  • 用户行为分析 SDK 及监控可视化整体实现

  • 可视化渲染引擎设计与实现

  • 基于 RAG / Agent 前端 AI 应用流程编排平台

简历优化(30K+ 简历样板)

技能描述

  • 熟练掌握 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+ 薪资长线规划

核心要素

  1. 全面的技术储备

    1. Vue 经验、React 经验,Vue3 + Typescript,React18(Hooks、Concurrent)【框架基础】
    2. 框架原理,React 生态库原理(React-Router、Redux)、Vue 生态库原理
    3. 工程化(构建工具:Webpack、Vite、Rspack、ESBuild、swc)
    4. CI/CD 自动化,自动化构建、自动化部署
    5. 基建能力(Node、命令行工具开发 Cli),UI 库、图表库、工具库
    6. 业务方面(管理系统、图表类),衍生 -> 可视化、编辑器、云表格、低代码、SaaS 产品、数字孪生、三维可视化
  2. 至少参加过两个以上大型项目,并主导过一个复杂项目

    1. 管理系统,(项目搭建、方案、技术栈、CI/CD 等等)
    2. 可视化、编辑器、云表格、低代码、SaaS 产品、数字孪生、三维可视化
  3. 面试表现好

    1. 个人介绍【 打个草稿 】,基本信息、技术栈、项目重难点

    2. STAR:

      • 遇到了什么问题 question,需求
      • 怎么评估解决方案,方案对比,方案落地 react 状态管理(redux、mobx、jotai、recoil)Vue3 -> Pinia
      • 方案落地
      • 反思,优化
    • 面试过程中,重点去复习只是重难点(v8 内存管理、Promise A+ 规范、事件循环、this、面向对象编程原型)
    • 技术储备,由你的项目经验体验,技术怎样在你的项目中落地的
  4. 学历

    1. 大专,尽快考一个本科证(年限去掉)
    2. 民办
    3. 内推,学历问题、工作经历的问题

补足短板

  • 项目简单,管理后台一做就是大半年,天天 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
  • 协同编辑器(文档类、画板类)wangEditor、CKEditor
  • 团队基建工程(UI 库、图表库、Cli -> 产生产物 npm 包)
  • 3D 可视化数字孪生 bigdata
  • 低代码平台

课程体系 2.0 升级,除了基础知识夯实,融入了更多项目实战内容,包含:

  • 企业级脚手架工具开发实践

  • 企业级文档编辑器飞书文档开发实践

  • 大厂 UI 组件库(Vue3)整体设计与开发实践

  • 大厂业务 Hooks 库(React 18)整体设计与开发实践

  • 埋点与数据监控平台实战

  • 3D 可视化数字孪生实战 💥

    • 基于 cesium 方案的 WebGIS 开发实践
    • 基于 WebGL 3D 可视化开发实践

不同阶段对前端人的硬性要求

以下是对您提供的内容进行权威和专业化改写的建议:

1~3年

在此阶段,重点在于评估个人的基础知识和热情。对前端基础、计算机原理、网络通信和算法等领域的要求较高。由于在此阶段难以评估业务深度,因此更多关注基础知识的掌握程度。

  • 关键在于通过学术教育或网络资源加强基础知识;
  • 在简历中以多种方式展示对前端的热情,展现个人潜力;
  • 积极探索前沿技术,关注国内外技术动态;
  • 尝试开发小型项目或参与社区开源项目;
  • 建立技术博客,以输出促进知识吸收。

3~5年

此阶段通常是向成为独立工程师发展的关键时期,避免重复使用有限的经验。

  • 关注社区中关于进阶的资料和路线,强化基础知识;

  • 深入掌握常用框架的高级用法,探索其原理;

  • 在业务开发中不仅完成功能,还需考虑项目结构设计、封装基础工具、设计和开发基础组件;

  • 思考提高团队效率的方法,例如:

    • 集成代码检验和风格统一插件(如 eslint、stylelint、prettier、spellcheck);
    • 从工程化角度提高本地开发效率,优化webpack构建,探索esbuild、vite等工具;
    • 对于多项目开发,整理差异和统一部分,建立内部脚手架以减少重复工作;
    • 尝试搭建CI/CD平台,维护公司内部的通用npm包;
    • 培养软技能,如沟通协作,协调各角色共同推进目标。

5年以上

进入此阶段,可能朝技术专家或管理方向发展。期望您能够独立负责高复杂度项目,突破关键技术难题。

  • 负责技术调研,关注行业趋势,选择最优技术方案,具备决策能力;
  • 拥有丰富的技术经验和技术储备,能够解决遇到的困难,并有自己的方法论;
  • 协助或主导业务目标制定,合理推动项目达成预期效果;
  • 是否具有团队领导经验,能够协调跨团队项目,处理团队成员情绪问题,解决技能分布不平衡等问题;
  • 打造技术氛围,促进团队共同成长。

职业规划指导

评论区选取三位同学互动,其他同学也可以联系咨询老师,文字方式提供辅导解答。

【未知组件reminder】