tags
type
date
status
slug
category
summary
password
icon
- 先整体→后分块:先搞清它分几块,每块大概做什么;然后一次只读一块。
- 加注释/做笔记:给每个选择器写一句“注释性说明”,自己方便回头。
- 动手实践:改属性、开/闭注释、自己从 0 重写,边做边看效果。
- 画思维导图:把页面结构 + 样式大要点画出来,视觉化记忆。
- 口诀/问答式:把关键点提炼成一句话、做问答,提高记忆效率。
- 分散练习:每天练一个小模块,最后整合,这样不会一次记太多。
- 允许“暂时忘记”并反复回顾:做好笔记和注释,定期回头看,才不会完全遗忘。
字节

VV 哥
基本功:HTML + CSS + JavaScript + Mvvm框架
React 和 vue 二选一
nvm → node → yarn
速成:b站up主 吴悠讲编程 鱼皮两小时建站 鱼皮的vue文档
MDN: 中文版
Vue:深挖看《vue.js设计与实现》 (走国内开发那套:学vue)
提醒:
- 学完基础语法,力扣启动,从简单开始到两数和,后面边看八股边学 结合项目经验
- 学框架最好是直接上手官方文档,不要上来就搞项目
- 工程化的东西要的是,一些主要的技术栈你要熟练
- 运用重点是这么几个,变量命名,数组,string,set map的用法当然这是写代码需要重点学的,八股准备就更深了
- 刷题重点是 LeetCode hot100
项目:
- llm:可以参考semi的chat组件
- TrackPoint(埋点项目):
- Markdown编辑器: 简易版markdown + 插件机制
- ‣
Github
前端开发学习路线
一、基础阶段
1. HTML + CSS + JavaScript
- 速成推荐:
- B站UP主:吴悠讲编程
- 鱼皮两小时建站教程
2. 开发环境搭建
二、框架学习
选择建议
- 国内开发推荐:Vue
- 二选一:React / Vue
Vue学习路线
- 官方文档(重点:先看文档,不要急着上手项目)
- 进阶学习:《Vue.js设计与实现》
三、算法训练
1. LeetCode刷题路线
- 从简单题目开始
- 先刷 Two Sum(两数之和)
- 重点关注 LeetCode Hot 100
2. 编程重点
- 变量命名规范
- 数组操作
- String 方法
- Set/Map 使用
四、进阶要求
1. 工程化
- 熟练掌握主要技术栈
- 了解前端工程化工具
- 版本控制(Git)
2. 面试准备
- 边学习边准备八股文
- 结合实际项目经验
- 深入理解核心概念
学习资源汇总
文档
- MDN(HTML/CSS/JS基础)
- JavaScript.info(JS进阶)
- Vue官方文档
视频教程
- 吴悠讲编程(B站)
- 鱼皮的前端教程
进阶书籍
- 《Vue.js设计与实现》
算法平台
- LeetCode
- Hot 100题单
- 从简单题目开始
希望这个整理对你的学习有帮助!记住要循序渐进,打好基础再往前进阶。
酥姐特供
大一前端 0 基础上岸大厂学习路线 📚
1. 真 0 基础的话就先学三件套吧,最基础的也是最重要的。html+css+js,在学的过程中也可以看看自己是不是真的喜欢前端,因为我最开始上大一我们第一个学的不是 C 语言是 Java,所以我们班大部分同学都在 JavaEE 实验室🧪我也是 hh 但是我跟着黑马的 Java 学了一学期(摆烂学的其实没咋学应付考试)感觉不是很能学进去 x(就是我没有自驱力去创造一个东西出来)但是我还是推荐大一新同学都学一点,比如我们大一上学期 Java 课是用 Java 写一个小游戏,那个时候我第一次登陆 GitHub,我在上面找了一个蝙蝠🦇大战的游戏 copy 给老师,虽然蝙蝠也没做出来😭改成飞机✈️大战了,我还做了一个小恐龙快跑,素材就是 404 页面那个小恐龙🦕。我们班其他同学技术栈基本都是 Java,我感觉他们也非常厉害。我寒假也在看黑马的课奈何太多了根本看不进去😢初识前端是想做一个 Blog,我最开始是在 b 站上找博客教程,关注了一个非常厉害的 up 主“山羊的前端小窝”,她做的东西都很精美而且视频都很短可以照着敲出来,我的第一个博客主页就是照着她的视频做的(她视频都比较分散吧,比如一个时钟一个轮播图一个 hover 效果之类的,都是很小的东西而且都是原生的 css 和 js,适合初学者学习捏~)当时做完那个博客就觉得蛮喜欢的🥰所见即所得很好看,就把博客发给各种好友看,当然后面这个博客挂了😭就没用这个了。。。但是也开启我学前端的兴趣吧(可能也带点 ui 和 ux)。三件套我最开始看的是 Pink 老师的,前面跟的很完整,在看后面感觉进度太慢了就直接把 ppt 下载下来背。发现太多了根本背不完各种 css 布局属性,初学者推荐课的话我还是推荐 Pink 老师,当然有同学说 duyi 和 coderwhy 讲的更好也可以看,但是我能听懂 coderwhy 的课的时候都能直接看文档了😬当时边看 Pink 的课,带我的学长给我布置两个作业,一周之内原生三件套完成小米和华为的官网。小米的我在 GitHub 找到了就跟着敲,🌸为没找到就一个一个去搜 header 怎么写,怎么实现 hover 效果怎么实现轮播图怎么实现 grid 布局 css 原生实现动画巴拉巴拉。
2. 后面认识了一些小伙伴他们都很厉害👍学的很多也非常努力,一天除了吃饭都在学技术(觉也不睡),点名🔢26届毕业两段大厂实习 小红书-字节tiktok。跟着他们一起打卡学习,每周交一到两份笔记产出复习 css 和 js,跟着官网学框架 React,我的 React 是直接看官网学的没有看网课,不会就问他们,当时 bietiaop 给我讲 React 讲到凌晨三点,感谢他🙏我推荐三件套学完的同学先用原生实现一到两个项目再来学框架。学框架可以直接看官网学,看不懂再去找网课。网课在 ytb 和 b 站上多刷吧,我建议找时间短一点的因为长了不太容易坚持。系统学框架的话也可以看系统网课…感觉随便搜都是一大把。
3. Vue 或 React 先挑一个学就好,把官网的 demo 项目 api 学完之后可以尝试做一个项目,比如 React 实现 todolist (最基础的 useState 和 useEffect,hooks 用法)。网课我推荐在 ytb 上面找,多刷刷就能找到很多很好的教学视频也有 GitHub 源码。尝试着在你的 todo list 功能基础上加功能,把官网的那些 hooks 想办法用进去,我是这么干的,有点久了可能都忘了😭
4. 框架学完的话可以开始着手一些库的学习,比如状态管理库 Redux、Jotai 这些。在 GitHub 找找看有没有自己喜欢的全栈项目,先去看别人写的实现那些功能点分析源码,看跟着敲能不能复现一个出来。项目推荐的话我觉得看自己吧,不同的人有不同的爱好,感觉身边同学项目都不一样。如果非要说功利一点就冲着写简历找实习速成的话,标配是一个全栈项目一个轮子项目,不在于多牛,在于你能不能讲出来讲清楚🐮
5. 我找开发的第一份简历没有项目,贴的都是我之前参加开源活动的 PR,数量多拉(感谢这个学长其实当时学的蛮痛苦的,他一直在鼓励我也很耐心给我讲。)哈项目不在多厉害你能完整讲出来你的开发过程遇到的困难怎么去解决的有没有创新点(也可能是我运气好,也有可能是幸存者偏差因为大部分把我刷掉的 HR 也有可能是因为我没很🐮的项目,能给我机会的面试官基本都是喜欢开源的,才有心情去点开我的 PR 看,不然直接丢垃圾桶了😭其实有些面试官不做开源不看重这个就完全没机会😭)
6. 项目有了基础学完了就可以开始写简历了,简历我之前笔记有讲过怎么写,有需要补充的部分可以留言。
7. 其实边学就可以边多刷各种论坛比如 stack overflow 掘金 b 站等等各种论坛都可以刷,看个人兴趣吧,刷的多算法也会给你推荐一些好项目好教程好的技术分享好的 tips 好的经验帖等等。就是多刷多写多看吧,自己也可以尝试写一些笔记更新学习总结之类的也没有坏处,害怕被人喷就写自己博客里,或者 GitHub 开个仓库记录每天看到的感兴趣的技术文章或者项目记录下来去看源码,兴趣是最好的老师。
8. 简历写完可以开始投入市场试试水啦~然后就可以开始背八股准备算法了:)
(😥初学小白的纯个人经历分享,不喜勿喷,如有不对就是你对你对你对😭现在是凌晨四点我只想到这么多,感觉不是很完善,后续也会继续补充完善,有想看的也可以 dd 我,还有就是不要连着几天熬通宵,真的感觉撑不住了😰)
大一前端 0 基础上岸大厂学习路线 (纯个人经历分享版) 📚
核心理念: 兴趣驱动,实践为主,积极交流,持续学习。
阶段一: 兴趣萌芽与三件套基础 (大一上学期 - 寒假)
- 探索编程兴趣 (Java 初体验):
- 经历: 大一初学 Java,尝试制作小游戏 (蝙蝠大战改飞机大战,小恐龙快跑)。
- 感悟: 对 Java 的自驱力不足,但认识到编程的乐趣。
- 建议: 大一新生可以尝试不同编程语言,找到自己真正感兴趣的方向。
- 初识前端 (HTML+CSS+JS):
- 契机: 想做一个个人博客。
- 入门方式:
- B站关注“山羊的前端小窝”等 Up主,学习原生 CSS 和 JS 实现小效果 (时钟、轮播图、Hover效果)。
- 观看 Pink 老师的 HTML+CSS+JS 基础课程 (前期完整跟学,后期看PPT总结)。
- 感悟: 前端“所见即所得”的特性很有吸引力,能够快速看到成果并分享。
- 遇到的问题: CSS 布局属性繁多,难以完全背诵。
- 建议:
- 初学者课程推荐: Pink 老师 (易懂),也可参考 Duyi、Coderwhy (根据个人接受程度选择)。
- 动手实践:
- 学长布置作业: 一周内用原生三件套完成小米和华为官网首页。
- 小米官网: 参考 GitHub 源码学习。
- 华为官网: 自己搜索 Header 写法、Hover 效果、轮播图、Grid 布局、原生 CSS 动画等。
- 核心: 通过实际项目驱动学习,遇到问题去搜索、去学习。
阶段二: 框架学习与深度实践 (三件套之后)
- 学习氛围与伙伴:
- 经历: 结识努力学习的小伙伴 (如26届已获小红书-字节TikTok实习的同学),一起打卡学习。
- 学习方式: 每周交学习笔记,复习 CSS 和 JS。
- 感悟: 良好的学习氛围和同伴的激励非常重要。
- 框架学习 (React 为例):
- 学习顺序建议: 先用原生三件套实现1-2个项目,再学习框架。
- React 学习方式:
- 首选官网: 直接阅读 React 官方文档学习。
- 遇到问题: 请教有经验的同学 (如
bietiaop
讲 React 到凌晨三点)。 - 网课辅助: 如果官网看不懂,再去B站、YouTube 找时间较短的网课。系统学习也可看系统网课。
- 建议: 优先看官网,官网是第一手资料。
- 框架实践 (React 为例):
- 目标: 学完官网 Demo 项目和 API 后,尝试做一个实际项目。
- 项目示例: React 实现 TodoList。
- 核心 Hooks:
useState
,useEffect
。 - 进阶: 在 TodoList 基础上增加功能,尝试将官网学到的其他 Hooks (如
useContext
,useReducer
,useCallback
,useMemo
等) 应用进去。 - 资源: YouTube 上有很多优质教学视频和 GitHub 源码。
- 库的学习与全栈项目探索:
- 框架生态: 学习状态管理库 (如 Redux, Jotai) 等。
- 全栈项目:
- 在 GitHub 上寻找自己喜欢的全栈项目。
- 学习方法:
- 分析源码,看项目实现了哪些功能点。
- 尝试跟着敲代码,看能否复现出来。
- 项目选择:
- 兴趣导向: 选择自己感兴趣的项目。
- 功利导向 (简历/实习速成): 准备一个全栈项目和一个轮子项目 (自己造轮子,如组件库、工具库等)。
- 核心: 不在于项目多牛,而在于你能否清晰地讲解项目,讲清楚开发过程。
阶段三: 简历准备与求职尝试
- 简历内容 (初期无项目经验):
- 经历: 第一份开发简历没有传统意义上的项目,主要展示参与开源活动的 PR (Pull Request) 记录。
- 感悟:
- 开源贡献可以弥补项目经验的不足,尤其对于喜欢开源的面试官。
- 数量多、有质量的 PR 能体现学习能力和主动性。
- 项目不在于多厉害,关键是能完整讲出开发过程、遇到的困难、解决方案以及创新点。
- 运气和面试官偏好也是因素。
- 建议: 积极参与开源项目,贡献代码。
- 简历撰写: (可参考之前笔记或提问补充)
- 持续学习与信息获取:
- 途径: 多刷各种技术论坛和社区,如 Stack Overflow, 掘金, B站等。
- 好处: 算法会推荐好项目、好教程、技术分享、经验帖等。
- 方法: 多刷、多写、多看。
- 个人输出: 尝试写学习笔记、总结,或在 GitHub 开设仓库记录感兴趣的技术文章和项目源码。
- 核心: 兴趣是最好的老师。
- 投递与面试准备:
- 简历写完后,可以开始投递简历,试试水。
- 同步进行: 开始背八股文,准备算法题。
个人感悟与提醒
- 学习动力: 找到能驱动自己去创造东西的兴趣点非常重要。
- 同伴互助: 和优秀的人一起学习,互相鼓励,共同进步。
- 实践出真知: 多动手敲代码,多做项目。
- 官方文档优先: 遇到问题先查官方文档。
- 持续学习: 技术更新迭代快,保持学习的热情和习惯。
- 身体健康: 不要连续熬夜,注意劳逸结合。
(😥初学小白的纯个人经历分享,不喜勿喷,如有不对就是你对你对你对😭)
希望这个整理能帮助你更好地理解这位同学的学习路径和心得!
下面是基于原笔记内容,为前端零基础小白梳理的 8 步学习路线,完全来源于她的亲身经历与总结:
1. 从“三件套”起步
- 学什么:HTML + CSS + JavaScript
- 怎么学:
- CodePen/JSFiddle 上练习小功能(时钟、轮播、hover 效果)
- 跟着 B 站“山羊的前端小窝”原生示例敲一遍
- 亲身案例:
- 第一个小项目是模仿视频,做了一个时钟、轮播图、hover 效果,结果爱上前端
2. 模仿大厂官网完成作业
- 任务:一周内用原生三件套实现小米、华为官网静态页面
- 学到:
- 查 GitHub 源码、看文档(header、grid 布局、动画…)
- 遇到做不出就一个个去搜实现方法
3. 找小伙伴、打卡复习
- 做法:
- 加入学习群,每天互相打卡、交笔记(CSS、JS)
- 谁不会就问,曾凌晨三点请学长讲 React
- 收获:
- 先用三件套做 1–2 个小项目,再正式学框架
4. 选一个框架:React 或 Vue
- 先学:
- 官网 Demo + API 文档
- YouTube/B 站短视频示例
- 实战:做一个 Todo List,练 useState/useEffect(React)或 ref/computed/watch(Vue)
5. 框架进阶&开源贡献
- 学库:Redux、Jotai(React)或 Vuex、Pinia(Vue)
- 全栈项目:
- 在 GitHub 找全栈示例,读源码、跟着敲一遍
- 做数据列表、登录评论等功能
- 轮子项目:做一个小组件库或工具库,能讲得清即可
6. 简历撰写 & 开源 PR
- 项目少怎么办:
- 简历贴自己做过的开源 PR(数量要多)
- 强调「遇到的困难 & 解决思路」
- 面试官偏好:
- 开源项目更容易被点开阅读,不然可能直接被丢垃圾桶
7. 持续学习 & 写笔记
- 刷论坛:Stack Overflow、掘金、B 站等,根据兴趣挑专题
- 写笔记:
- 博客或 GitHub 仓库记录每天学到的技术点
- 算法、项目思路、框架源码摘抄
8. 投简历 & 算法准备
- 投递前:简历、项目和开源 PR 都完善了,就可以“试水”
- 接下来:开始背八股算法(数组、链表、排序、DP……)
✨ 温馨提示:
- 以上纯属作者凌晨四点的个人经验分享,不完美会持续补充
- 切忌连着几天熬通宵,劳逸结合才能坚持更久
祝你早日上岸大厂!
Codewhy
- 知道某个技术的历史(知道是怎么解决过去某个技术的痛点),本质
- 学习技术是为了解决问题的,不要成为API调用工程师
- 知识分类,常用的知识点刻意练习,熟能生巧(到公司得手撕,不能查资料),不常用知识点(知道有他,知道在哪里)
- 掌握:必须完全掌握,理解:理解过程原理,了解:知道有这么回事
学习方法、建议
一、学习方法、学习建议
1. 如何学习新的知识
1)尼古拉斯·扎卡斯 (Nicholas C. Zakas)
- 英文名与译名: Nicholas C. Zakas (发音 "nicolas"),中文译作 "尼古拉斯"。
- 身份背景: 独立软件开发者,现居美国加利福尼亚州山景城。
- 作品与贡献:
- 经典著作: 《JavaScript高级程序设计》("红宝书"),前端领域经典教材。
- 开源项目: ESLint 创始人,现代前端代码质量检查工具。
- 双重身份: 曾任雅虎(Yahoo)和Box等公司软件架构师,技术作者,演讲者。
- 学习方法与观点:
- 知识传播: 书面知识传递技术深度比口头讲解更具挑战性。
- 教育价值: 优质技术教育能改变学习者职业轨迹。
- 个人经历与现状:
- 职业历程: 雅虎/Box软件架构师 -> 独立开发者、技术作家。
- 健康现状: 近五年因莱姆病(Lyme disease)居家疗养,仍坚持创作。
- 励志启示: 尽管健康受限,仍保持高产,专业精神值得学习。
- 持续贡献: 病休期间仍维护ESLint并完成多本技术著作。
- 学习建议:
- 培养英文阅读能力,获取第一手技术资料。
- 其博客包含有价值的学习方法论。
2)博客观点 (扎卡斯关于学习JavaScript的观点)
- 核心方法: 全面掌握JavaScript的关键在于理解其 历史背景、语言局限性 和 本质特征,而非单纯记忆API。
- 历史重要性: 语言发展存在历史遗留问题,后续特性常为解决早期缺陷而设计。
- 局限性认知: 所有编程语言都有设计缺陷;JavaScript因诞生环境(如10天开发周期)有明显局限性。
- 本质理解: 掌握语言底层原理和适用场景 (如JavaScript最初为浏览器交互设计)。
3)学习新技术
- 技术诞生的本质:
- 根本动机: 所有技术 (编程语言、框架、工具) 都是为了 解决特定领域问题 而存在。
- 典型案例:
- Git: Linus为解决版本控制系统缺陷而开发。
- CSS: 分离文档结构与样式呈现。
- JavaScript模块化: 解决全局变量污染问题。
- 学习误区: 避免陷入API记忆陷阱,应关注技术解决的 原始问题。
- 技术演进规律:
- 迭代逻辑: 新技术通常为弥补旧技术缺陷而产生。
var
→let/const
(解决变量提升和块级作用域)- SPA → SSR (改善SEO和首屏性能)
- Webpack → Vite (解决构建速度瓶颈)
- 历史遗留: HTML保留
<i>
/<strong>
标签与CSS样式并存,反映标准演进。
- 标准组织认知:
- W3C (World Wide Web Consortium): 制定HTML/CSS/DOM等Web标准。
- ECMA International: 制定JavaScript语言规范 (ECMAScript)。
- 官网价值: 权威技术文档应直接查阅
w3.org
和ecma-international.org
,避免二手资料。 - 兼容性问题根源: 不同浏览器厂商对标准实现存在差异。
- 学习方法论 (四维分析法):
- 技术诞生的 历史背景。
- 要解决的 核心痛点。
- 相比前代技术的 改进点。
- 当前存在的 局限性。
- 实践建议:
- 建立 "问题-解决方案" 对应表。
- 绘制技术演进时间轴。
- 定期查阅标准组织最新文档。
- 认知误区:
w3school
并非 W3C 官方站点,仅是第三方学习平台。
4)W3C与W3School的区别
- 常见误解:
- 许多学习者误将
W3School
当作 W3C 的官方网站。 W3School
包含VIP会员、课程收费等商业化内容,与标准组织的非营利性质不符。
- W3School网站分析:
- 内容构成: 提供HTML/CSS、JavaScript及Python、Java等教程,设有VIP会员和付费课程。
- 历史作用: 早期整理了HTML/CSS文档,帮助国内开发者学习。
- 非官方证据: 明显的商业推广、大量广告、课程收费。
- W3C官方特征:
- 组织性质: 国际性标准组织,非营利。
- 识别方法: 官网域名通常为
w3.org
,内容专注技术标准制定,界面简洁无商业元素。
- 其他类似网站 (非官方):
w3school.com.cn
,w3cschool.cn
等。
- 学习建议:
- 资源选择: 初学者可参考
W3School
入门,进阶学习应转向 MDN 等,标准查询访问w3.org
。 - 注意事项: 注意区分商业教程与标准组织,警惕营销,多方验证信息准确性。
5)W3C官网
- 官网地址:
- 正确网址:
w3.org
(注意没有"c") - 常见误区:
w3school
或w3cschool
均为第三方。 - 官网特点: 提供最权威的Web标准一手资料 (HTML, CSS等)。
- 标准文档查询:
- 入口路径:
w3.org/TR/
(技术报告 Technical Reports) - 文档分类 (状态):
- Working Draft (WD, 工作草案)
- Candidate Recommendation (CR, 候选推荐标准)
- Proposed Recommendation (PR, 提议推荐标准)
- W3C Recommendation (REC, 正式推荐标准)
- 使用建议: 优先查看最新状态的文档。
- CSS标准查询:
- 筛选方法: 使用
tag=css
参数过滤。 - 常见标准: CSS Selectors Level 4, CSS Flexible Box Layout, CSS Animations Level 1。
- 版本标识: 注意 Level 标记 (如 Level 3, Level 4)。
- 技术标准的意义 (示例):
- HTML
<i>
/<strong>
(语义) vs CSS (样式)。 - JS
var
(变量提升) vslet/const
(块级作用域)。 - SPA (解决刷新) vs SSR (优化SEO/首屏)。
- 组织分工: W3C (Web标准) vs ECMA (JavaScript规范)。
- 文档阅读技巧:
- 状态解读: WD (可能大改), CR (基本稳定), REC (正式标准)。
- 语言问题: 可用浏览器翻译,关键术语建议保持英文原文理解。
- 替代资源推荐:
- 学习建议: 初学者可先通过 MDN 等中文资源学习,深入理解或解决争议时查阅 W3C 原始文档。
- 注意事项: 第三方网站可能过时,重要规范以 W3C 官网为准,注意发布日期和状态。
6)MDN网站 (Mozilla Developer Network)
- 网站介绍:
- 推荐理由: 老师非常推荐的官方文档网站,权威资料。
- 语言支持: 中文和英文版本。
- 内容范围: HTML, CSS, JavaScript, Web APIs (如微任务 microtasks)。
- 网站特点:
- 开发者友好: 由开发者编写,为开发者服务,自2005年起持续更新。
- 分类清晰: HTML, CSS, Web APIs 等。
- 实用示例: 大量代码片段和案例 (如Canvas教程, 对话框元素)。
- 学习建议 (MDN使用及学习理念):
- 学习目的: 技术为解决问题而存在,非单纯记忆。
- 实用主义: 需要实现特定功能 (如居中布局) 时再去学习相关技术。
- 文档使用: 不必记住所有API,学会查阅文档更重要。
- 技术本质: 理解技术背景和解决的问题比死记硬背更有价值。
- 知识体系 (MDN内容组织):
- 分类学习: 按体系分类,建立结构化认知。
- 重点把握: 区分核心概念和可查阅的细节。
- 实践导向: 通过实际项目需求驱动学习。
7)知识体系的分类
- 技术出现的原因与目的:
- 本质理解: 所有技术为解决特定问题而存在。理解历史局限性和设计初衷是关键。
- 典型示例:
- HTML
<i>
/<strong>
与 CSS 样式共存。 - JavaScript
var
->let/const
演进。 - SPA (Vue/React) 与 SSR 框架共存。
- Webpack vs Vite 优劣及解决痛点。
- 浏览器兼容性问题根源。
- 标准组织: W3C (CSS, DOM), ECMA (JavaScript)。
- 不能在公司边做边学的原因:
- 时间限制: 企业不提供系统学习基础技术的时间,要求入职即具备开发能力。
- 学习效率: 零基础难以快速掌握解决问题所需知识,需前期储备。
- 职场现实: "带薪学习" 前提是已具备核心技能,仅针对新技术提升。
- 知识分类的方法:
- 不常用知识:
- 处理原则: 只需知道存在性和查询渠道。
- 示例: CSS中90%不常用属性,记住MDN等文档平台即可。
- 记忆要求: 明确查询路径,不必死记。
- 常用知识:
- 掌握标准: 达到"条件反射"级的熟练度。
- 训练方法: 反复实践应用,形成肌肉记忆。
- 示例: CSS核心20-30个高频属性必须烂熟于心。
- 职场要求: 避免基础操作频繁查阅影响效率。
- 视频标注的重要性 (三级标注体系):
- 掌握级: 必须完全内化的核心知识 (如CSS布局属性)。
- 理解级: 需要明确原理的中频知识 (如BFC机制)。
- 了解级: 仅需知晓存在的边缘知识 (如冷门API,人物类知识如亚里士多德)。
- 实施建议: 根据标注等级分配不同学习强度和时间。
8)结束
- 核心观点: "优秀不是一种行为,而是一种习惯" (亚里士多德)。
- 英文原文: "We are what we repeatedly do. Excellence, then, is not an act, but a habit."
- 实践指导:
- 建立持续性的学习行为模式。
- 保持技术文档的英文阅读习惯。
- 通过重复训练形成专业本能。
二、知识小结
知识点 | 核心内容 | 学习方法/建议 | 关键人物/作品 |
学习新知识的方法论 | 掌握技术的关键在于理解其历史、局限性和本质,而非单纯记忆API。 | 历史视角:分析技术出现的背景和解决的问题;<br>对比思考:新旧技术差异及演进原因;<br>实践结合:常用知识需熟练,冷门知识知道查询途径 | 引用Nicolas Zakas(《JavaScript高级程序设计》作者)的学习观点 |
技术本质认知 | 所有技术诞生都是为了解决特定问题(如CSS解决HTML样式问题,Git解决版本管理痛点)。 | 问题导向学习:<br>1. 该技术解决了什么痛点?<br>2. 原有方案存在哪些缺陷?<br>3. 新技术如何改进?<br>案例:Vite vs Webpack、ESLint | ㅤ |
工具链知识分类策略 | 常用知识:需烂熟于心(如CSS核心属性);<br>冷门知识:知晓存在和查询方式;<br>扩展知识:了解人物/历史(如Nicolas Zakas生平)。 | 优先级划分:<br>- 掌握→理解→了解三级标注;<br>- 建立知识索引系统 | 《JavaScript高级程序设计》作为经典参考书 |
学习资源推荐 | 权威渠道:<br>- W3C官网(w3.org);<br>- MDN文档(含中文);<br>避坑提示:区分w3schools(非官方)与w3c。 | 标准信息验证:<br>1. 优先查阅一手资料;<br>2. 警惕过时/抄袭内容 | 开源项目ESLint的开发者背景 |
励志案例 | Nicolas Zakas带病坚持技术贡献(ESLint作者、多本书籍撰写)。 | 榜样力量:<br>- 技术输出改变行业;<br>- 克服身体限制持续创造 | 关键作品:<br>- 《JavaScript高级程序设计》;<br>- ESLint工具 |
学习心态 | "优秀不是行为而是习惯"(亚里士多德)。 | 长期主义:<br>- 重复强化行为模式;<br>- 建立系统性思考框架 | 哲学引用:亚里士多德名言 |
双越老师(掘金)
大家好,我是双越,也是 wangEditor 作者。
我联合几位博主搞了一个前端面试网站 面试派 —— 常见面试题 + 大厂面试流程 + 面试技巧。做一个真正专业的前端面试网站,旨在解决前端面试资料碎片化、老旧化、非专业化等一系列问题。网站开源免费!!!
2025 应该思考两个问题:
- 我今年比去年有哪些进步?每年都要成长一点点,技术上、工作上、认知上,不能只在体重上
- 我今年有什么计划?工作上有哪些 KPI,个人需要学习哪些知识,目前还有什么不足
因此,本文我就试图总结一下当前 2025 前端开发比较常用的一些知识和技术,包括基础、语言、协议、工具、框架、服务等。尽量覆盖完整的内容,整理出一个合理的体系。
如发现有未提到的重要技术和知识点,请在评论区补充,
体系化思维的重要性
当我们去思考一个比较系统的、大篇幅的事情时,一定要有体系化思维,要做成一棵树,而不是一盆散沙。所以,相比于本文的内容来说,体系化的思维更加重要,会让你终身受益。
例如一个学校有 2w 学生,如何组织这么多学生?就要分学院、分专业、分班级,班级下面还要再分宿舍。这样才能把这些学生管理起来,哪怕再扩展 5k 学生,也能通过这套管理体系来管理。
这同样适用于我们的前端知识,前端领域知识非常杂乱,需要学习的东西很多,你如何管理它呢?如果让你写一本《前端大全》的书,你如何制定目录呢?—— 你别掰着手指头,想到一个写一个,那就乱了。
红宝书?红宝书是 JS 相关的,而前端可不仅仅是 JS 。而且,从 JS 视角来看红宝书目录是合理的,一旦上升一个视角,从整个前端视角来看,红宝书目录就不一定合理了。
例如从 JS 视角来看网络请求,可能更接近的是 Ajax ,而从前端视角来看网络请求,可能更多是 HTTP 协议 。角度不一样,内容和侧重点就不一样。
新入门的前端同学需要有体系化思维,只有一个系统的体系才能帮助你全面、无死角的掌握所有技能。哪怕你没法近期掌握所有技能,你也知道哪些你会,哪些你不会(重要!!!),因为有一个体系目录给你参考。
前端老司机们更需要掌握体系化思维,系统和体系才能让你的学习和工作更有条理性,才能让你把多年累积的杂乱的技能和工作经验,总结转换为自己的体系知识。否则,没有体系,积累的越多,你就越乱。
计算机基础
本科或考研计算机专业的专业课。其中数据结构和算法下文单独写。
计算机组成原理
主要内容
- 冯诺依曼结构 Von Neumann Architecture 一种计算机体系结构,它将存储程序、数据和指令都存放在同一内存中,通过中央处理器依次读取指令并执行,从而实现计算机的基本操作。
- 二进制 Binary 一种数值表示方式,使用 0 和 1 两个数字,通过不同的组合表示各种数值和信息,是计算机内部数据存储和处理的基本方式。
- 中央处理器 CPU 计算机的核心部件,负责执行指令和控制数据流。包含算术逻辑单元(ALU)、控制单元(CU)、寄存器等部分。
- 指令集架构 ISA 指令集架构定义了计算机能够理解和执行的指令集合,包括指令格式、操作码、寻址模式等。
- 内存 Memory 存储程序和数据,主要包括主存储器(RAM)和外部存储(硬盘、SSD)等,存储层次结构影响计算机的性能
- 缓存 Cache 高速存储器,用于存储常用数据,以减少 CPU 对主存的访问延迟,提高处理效率
- 总线 Bus 计算机内部用于数据传输的通道,分为数据总线、地址总线和控制总线,用于连接 CPU、内存和外部设备。
- 输入输出 I/O 系统负责计算机与外部设备之间的数据交换,通常涉及 I/O 控制器、驱动程序和数据传输机制。
计算机组成原理帮助我们掌握计算机硬件的基本工作原理,为后续的操作系统、计算机网络等高级课程奠定基础。
操作系统
操作系统管理计算机的所有资源,进程控制,内存分配等。重要内容如下:
- 进程 Process 正在执行的程序的实例,包含程序代码、数据、堆栈等执行状态。
- 线程 Thread 线程是进程中的基本执行单元,同一个进程的多个线程共享进程的资源,但每个线程有自己的执行栈。
- 调度 Scheduling 是操作系统管理多个进程或线程执行顺序的过程,常见的调度算法有先来先服务、时间片轮转、优先级调度等。
- 内存管理 Memory Management 负责分配和回收内存资源,常用技术包括分页、分段和虚拟内存。
- 虚拟内存 Virtual Memory 一种扩展内存容量的技术,通过将部分内存数据交换到磁盘,使程序能使用比物理内存更大的地址空间。
- 文件系统 File System 用于管理存储设备上的文件,包括文件的创建、读取、删除及存储结构,如 FAT、NTFS、EXT 等
- 输入输出管理 I/O 负责计算机与外部设备之间的数据传输,涉及设备驱动、缓存管理、中断处理等技术。
操作系统的核心概念(内存、进程、线程、文件等)对于前端开发都非常重要,例如 JS 是单线程的。深入理解基础概念才能让你成为优秀程序员,否则只能浮于表面开发 CRUD 。
编译原理
编译原理,主要讲解一个编译器如何设计和开发。
- 词法分析 lexical Analysis 将源代码分解为基本的语法单元(词法单元,Token),如关键字、标识符、运算符等。
- 语法分析 Syntax Analysis 将词法分析的输出(Token 流)根据语言的语法规则构建成语法树或抽象语法树(AST)。
- 抽象语法树 AST 是对程序结构的抽象表示,去除了具体的语法细节,保留了程序的逻辑结构。
- 语义分析 Semantic Analysis 检查程序的语义是否符合语言的规则,如类型检查、变量是否声明等。
- 中间代码 Intermediate Code 是编译过程中的一种中间表示,它介于源代码和目标代码之间,便于优化和代码生成。
- 优化 Optimization 是对中间代码或目标代码进行改进,以提高程序的运行效率或减少资源消耗,常见的有死代码消除、循环优化等。
- 代码生成 Code Generation 将中间代码转换为目标代码(机器代码或汇编代码),是编译过程的最后阶段。
前端常见的编译器有 babel SWC vue-compiler 等,无论用什么语言,用 JS 还是 Rust,都是按照编译原理的过程开发的。
汇编语言
汇编语言是接近机器语言的低级编程语言,使用助记符表示机器指令,直接控制计算机硬件。
- 指令集 Intruction Set 每种处理器都拥有一组特定的指令集,定义了处理器能执行的基本操作,如数据传输、算术运算等。
- 助记符 Mnemonic 助记符是用来代表机器指令的符号,如
MOV
(数据传输)、ADD
(加法)等,简化了编程工作。
- 寄存器 Register 寄存器是 CPU 内部的高速存储器,用于存储程序执行过程中临时数据或计算结果。
- 机器码 Machine Code 机器码是计算机能够直接执行的二进制指令,每条汇编指令都对应一条机器码。
- 内存寻址 Memory Addressing 内存寻址是指访问计算机内存中数据的位置,汇编语言中常用的寻址模式有直接寻址、间接寻址、基址寻址等。
- 堆栈模型 Stack and Heap 一种数据结构模型,采用后进先出(LIFO)原则,数据项按顺序压入堆栈并从堆栈中弹出,用于存储临时数据、函数调用信息等。
前端开发不会用到,但学习它的指令集和堆栈模型,有助于我们深入理解编程语言的执行过程。
计算机网络
计算机网络讲解计算机之间的通讯原理和技术,有很多前端开发常见的概念。主要内容
- OSI 模型 OSI Model 开放系统互联模型,将计算机网络通信分为七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
- TCP/IP 协议 TCP/IP Protocol TCP/IP协议是互联网的基础协议,主要包括传输控制协议(TCP)和网际协议(IP),定义了数据传输和路由机制。
- IP 地址 IP Address IP地址是计算机网络中用于标识设备的唯一地址,分为IPv4和IPv6两种格式。
- 路由 Routing 路由是数据包在网络中从源设备传输到目的设备的过程,涉及路由协议和路由算法。
- 域名 Domain 互联网中用于标识和定位网站的文字地址,通常由字母、数字和符号组成,并与IP地址一一对应,便于用户访问网站。
- DNS Domain Name System 域名系统将域名,如
www.example.com
转换为IP地址,使用户可以通过易记的域名访问网站。
- UDP User Datagram Protocol 用户数据报协议是一种无连接的传输层协议,适用于对速度要求高而对可靠性要求低的应用。
- TCP Transmission Control Protocol 传输控制协议是一种面向连接的协议,提供可靠的数据传输,保证数据包按顺序到达并且无误。TCP 连接的“三次握手 四次挥手”是面试常考内容。
- 端口号 Port Number 端口号是用于区分同一IP地址上不同服务或应用程序的标识符,通常由操作系统分配。
- HTTP Hypertext Transfer Protocol 超文本传输协议是用于客户端与服务器之间传输网页数据的协议,基于请求-响应模式。下文会再展开讲解。
- FTP File Transfer Protocol 文件传输协议用于在网络上进行文件传输,支持上传和下载文件。
- CDN(内容分发网络) 是通过在全球多个地点部署缓存服务器,将网站或应用的静态资源(如图片、视频、JS文件等)分发到离用户更近的服务器,以提高访问速度和减少延迟。
- 边缘计算 Edge Compute 在离数据源或用户更近的网络边缘设备上进行数据处理和分析,减少数据传输延迟,提高实时响应能力。现在很多云服务商 Vercel 和 Deno 都在推行 Edge 计算。
编码
编码主要讲解信息的表示、转换和传输,即我们所见的任何信息在计算机内部是如何表示的。例如
- ASCII 编码 是一种字符编码标准,用于表示英文字符、数字、标点符号以及一些控制字符。它使用7位二进制数(即0到127之间的整数)来表示各种字符,其中每个字符对应一个唯一的数字编码。例如
- 字符
A
对应的ASCII编码是65
(二进制表示为01000001
) - 字符
a
是97
(二进制01100001
)
- Unicode 编码 是一个字符编码标准,用于统一表示世界上几乎所有的文字和符号。它为每个字符分配一个唯一的数字标识(称为码点),并支持多种语言、符号以及其他字符集,包括汉字、拉丁字母、数学符号、表情符号等。Unicode 包含了超过137,000个字符,覆盖了几乎所有的书写系统。Unicode 的设计目的是让全球的字符集标准统一,从而解决多种字符编码的兼容性问题。
- UTF-8 Unicode 的一种编码方式,使用1到4个字节来表示一个字符,是目前最流行的Unicode实现,兼容ASCII。
- UTF-16 Unicode 的一种编码方式,使用2或4个字节来表示一个字符,适用于东亚语言。
- GBK 编码 是中国国家标准对简体和繁体中文字符集的一种扩展编码,继承了GB2312编码,并加入了更多的字符,广泛用于中文环境中的计算机系统、文本文件以及网络传输。随着 Unicode 的普及,GBK逐渐被Unicode编码(如UTF-8、UTF-16)所替代,但在一些旧系统和遗留应用中,GBK编码仍然被使用。
数据结构和算法
常见数据结构
- 数组 Array 数组是一种数据结构,用于存储具有相同数据类型的元素,元素在内存中是连续存储的。
- 链表 Linked List 链表是一种线性数据结构,其中每个元素(节点)包含数据和指向下一个节点的指针。
- 栈 Stack 栈是一种后进先出(LIFO)的数据结构,元素只能在一端进行插入和删除操作。
- 队列 Queue 队列是一种先进先出(FIFO)的数据结构,元素从队列的一端插入,从另一端删除。
- 哈希表 Hash Table 哈希表是一种通过哈希函数将键映射到对应值的查找结构,具有快速的插入、删除和查找操作。
- 树 Tree 树是一种分层的数据结构,由节点组成,其中每个节点有一个父节点和多个子节点。
- 二叉树 Binary Tree 二叉树是一种树形结构,每个节点最多有两个子节点,分别是左子节点和右子节点。
- 平衡二叉树 AVL Tree 平衡二叉树是一种自平衡的二叉搜索树,保证左右子树的高度差不超过
1
,从而保持操作的时间复杂度为O(logn)
。
- 堆 Heap 堆是一种特殊的完全二叉树,满足堆的性质(如最大堆或最小堆),广泛用于优先队列实现。
- 图 Grahp 图是由节点和边组成的数据结构,可以表示一对多的关系,分为有向图和无向图。
常见算法
- 查找算法 Searching Algorithms 查找算法用于在数据结构中查找特定元素,常见的查找算法包括线性查找、二分查找等。
- 排序算法 Sorting Algorithms 排序算法用于将数据元素按某种顺序排列,常见的排序算法包括冒泡排序、快速排序、归并排序等。
- 深度优先搜索 DFS 深度优先搜索是一种遍历图或树的算法,优先访问每个节点的子节点,直到访问到最深层才回溯。
- 广度优先搜索 BFS 广度优先搜索是一种遍历图或树的算法,优先访问每一层的节点,再逐层向下扩展。
- 分治法 Divide and Conquer 是一种将问题分解为多个子问题并递归解决的算法设计方法,常见于归并排序、快速排序等算法。
- 贪心算法 Greedy Algorithm 是一种通过局部最优解推导全局最优解的算法策略,常见于最短路径、背包问题等。
- 回溯法 Backtracking 是一种系统地寻找所有可能解的算法,通过递归逐步构造解并回退,以找到正确的解。
- 动态规划 Dynamic Programming 是一种优化算法,用于解决具有重叠子问题的最优子结构问题,常见于求解最短路径、背包问题等。
- 最短路径算法 Shortest Path Algorithm 最短路径算法用于在图中找到从一个节点到另一个节点的最短路径,常见的算法有Dijkstra算法、Bellman-Ford算法等。
- KMP 算法 是一种用于字符串匹配的高效算法,通过预处理模式串来提高匹配效率,避免重复匹配。将时间复杂度由
O(m*n)
缩短为O(m+n)
。
- 双指针 Two Pointer 是一种通过使用两个指针在数据结构(如数组或链表)上进行遍历来解决问题的算法技巧,通常用于查找、排序或优化操作,能够有效减少时间复杂度。
算法复杂度
- 时间复杂度 Time Complexity 是衡量算法执行时间随输入规模变化的增长速度的指标,通常用大O符号表示,用来评估算法在最坏情况下的性能表现。
- 空间复杂度 Space Complexity 是衡量算法在执行过程中所需内存空间随输入规模变化的增长速度,通常用大O符号表示,反映了算法对内存资源的需求。
O(1)
无循环
O(n)
一层循环
O(logn)
分治
O(n*logn)
一层循环 + 分治
O(n^2)
两层嵌套循环
编程模式
OOP 面向对象编程
面向对象编程是现代编程开发最重要的编程模式,常见的现代编程语言都支持。
- 类 Class 用于定义对象的蓝图或模板,包含对象的属性和方法。
- 对象 Object 类的实例,通过类创建,具有类定义的属性和方法。
- 继承 Inheritance 通过继承,一个类可以继承另一个类的属性和方法,从而实现代码重用和扩展。
- 封装 Encapsulation 将数据和操作数据的方法封装在一个类中,对外提供接口而隐藏实现细节,提高代码的安全性和可维护性。
- 多态 Polymorphism 允许不同类的对象以相同的接口调用,从而实现不同的行为表现。
- 抽象 Abstraction 是将复杂的现实世界问题简化为重要的特征,隐藏不必要的细节,提供简洁的接口。
- 方法 Mothod 类中的函数,定义了对象能够执行的操作或行为。
- 属性 Attribute 类的成员变量,用于存储对象的状态信息。
- 构造函数 Constructor 用于在创建对象时初始化对象的特殊方法。
- 接口 Interface 定义了类必须实现的方法的集合,用于提供不同类之间的协议或约定。
设计模式
SOLID 5 大设计原则(至少要能深刻理解前两个原则)
- 单一职责原则 每个类应该只有一个职责,意味着一个类应该只有一个原因去改变。类应专注于一个功能,避免承担过多责任。
- 开放封闭原则 软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。即,允许在不修改现有代码的情况下,通过增加新代码来扩展功能。
- 里氏替换原则 子类对象应该能够替换父类对象,并且程序的行为应该保持一致。换句话说,继承关系应该保证子类能够正确地替代父类。
- 接口隔离原则 不应该强迫客户依赖于他们不需要的接口。一个类不应该实现它不使用的接口方法,而是将接口划分为更小、更专注的接口。
- 依赖倒置原则 高层模块不应该依赖低层模块,二者应该依赖抽象;抽象不应该依赖于细节,细节应该依赖于抽象。这样可以减少模块之间的耦合度,提高系统的灵活性和可维护性。
传统设计模式有 23 个,前端最常见的有如下几个:
- 工厂模式 封装实例的创建过程,解放
new Class()
Vue React 内部都在用。
- 单例模式 全局只允许有一个实例,多则出错。用 TS 语法实现更优雅。
- 观察者模式 前端(及其他 UI 编程)最常用的设计模式,工作必用,面试必考。
- 迭代器模式 遍历数据不仅仅是
for
和forEach
,还有更高级的 Iterator ,JS 早已支持了。
- 装饰器模式 Decorator 现已是 JS 的标准语法,装饰器正在前端普及开来。
- 原型模式 原型和原型链是 JS 必备的基础知识,还扩展了 JS 对象属性描述符。
- 代理模式 编程处处有代理,无论开发环境还是线上环境。Vue3 也用
Proxy
实现数据响应式。
FP 函数式编程
随着 React 的发展,函数式编程在前端开发被广泛使用,主要内容是:
- 纯函数 Pure Function 指的是不依赖于外部状态且不修改外部状态的函数,对于相同的输入总是返回相同的输出。
- 不可变性 Immutability 数据一旦创建后不可修改,任何变更都会生成新的数据。
- 副作用 Side Effect 函数外部的状态改变,如修改全局变量、I/O 操作等,函数式编程尽量避免副作用,以保持函数的纯粹性。
- 高阶函数 Higher-Order Function 可以接受一个或多个函数作为输入参数,或者返回一个函数的函数。
- 函数组合 Function Composition 将多个小函数组合成一个新的函数,使得每个函数的输出作为下一个函数的输入
- 函数柯里化 Function Currying 将一个多参数函数转化为一系列单参数函数的技术。将一个接收多个参数的函数,转化为每次只接收一个参数的函数,并返回接收下一个参数的函数,直到所有参数都被提供完毕。
- 惰性求值 Lazy Evaluation 在需要结果时才计算,避免不必要的计算,提升效率。
- 递归 Recursion 函数直接或间接调用自身,常用于替代迭代过程。PS. 递归太多可能会发生 stack overflow 栈溢出,或“爆栈”,常见的解决方式是尾递归,即递归放在函数最后,编译器则会优化这一操作。
- 声明式编程 Declarative Programming 即描述“做什么”而不是“怎么做”,如 React 只需要描述组件的 UI 应该是什么样的,而不需要直接操作 DOM。
AOP 面向切片编程
AOP 最广泛的应用是 Java Spring 框架。在前端最常见的是 Nestjs 框架,因为它就是参考 Spring 设计的。
软件层级设计
- MVC 它将应用程序分为三个主要部分:模型(Model)处理数据和逻辑,视图(View)显示用户界面,控制器(Controller)处理用户输入并更新模型和视图。
- MVP 一种变种的设计模式,其中模型(Model)处理数据,视图(View)负责显示界面,演示者(Presenter)作为中介,接收用户输入并更新视图和模型。
- MVVM 是一种设计模式,它将模型(Model)用于数据和业务逻辑,视图(View)用于显示用户界面,视图模型(ViewModel)通过数据绑定将模型数据转化为视图显示,通常在现代前端框架中使用。Vue 就是典型的 MVVM 设计方式。
前端基础
HTML
- Head 和 Meta title charset link script style keyword description author 等
- 基础标签 div h1 h2 h3 p img ul ol li table 等
- 表单 form input button select 等
- 媒体 video audio 等
- 2D 3D SVG Canvas 等
CSS
- 选择器 标签 class id 属性等
- 图文样式 字号 行高 颜色等
- 布局
- inline block inline-block
- 盒子模型
- margin 相关:纵向合并,负 margin
- flex 布局
- grid 布局
- float 布局
- BFC
- 定位
- relative
- absolute
- fixed
- 定位上下文
- 响应式 viewport rem vw vh
- 渐变和动画 transition animation
- 模块化
- css module
- css-in-js
- BEM
- 第三方库
- NormalizeCSS ResetCSS
- PostCSS
- AnimateCSS HoverCSS
- TailwindCSS BootStrap
- Sass Less Stylus
- caniuse.com 检测浏览器兼容性
JS 和 ES
- 变量和类型
- let const
- undefined string number boolean object functioin symbol bigint
- 字符串
- 数组
- 对象
- 函数
- class 原型,原型链,继承
- 作用域 作用链,自由变量,闭包
- 异步 Promise Async/await 微任务/宏任务 EventLoop
- Map 和 Set
- Proxy 和 Reflect
- Generator yield
- 正则表达式
- 日期和时间
- 模块化 AMD CMD UMD CommonJS ES-Module
- 异常处理
- 第三方库 lodash jQuery Axios day.js ECharts D3 Anime.js jsPDF UUID i18next ...
JSX
- 语法糖 本质是 JS 函数
- 插值和表达式 写法
{xxx}
- 事件 写法
onClick={fn}
- 自定义组件 首字母大写
- 注视
{/* This is a comment */}
TS
- 新增加的类型 any void never
- 类型定义和检查 变量,函数参数,函数返回值,class 等
- 数组和元祖
- Enum 枚举
- 自定义类型 type 交叉类型 联合类型
- 接口 interface 接口的扩展和继承
- 抽象类 Abstract class
- 泛型 Generics
- 装饰器 Decorator
- 类型定义文件
.d.ts
安装第三方的如npm install @types/lodash
tsconfig.json
配置
JS Web API
- DOM API 查询 创建 修改 移动 DOM 节点,DOM 树,DocumentFragment
- DOM 事件 事件绑定,事件冒泡,Event 参数,事件代理
- BOM API window navigator screen location history 等
- 存储 cookie localStorage sessionStorage indexedDB
- Ajax XMLHTTPRequest fetch
- 通讯 postMessage,BroadcastChannel
- WebWorker 线程,sharedWorker,ServericeWorker,通讯
- jsbridge 如微信 jssdk
网络 HTTP 协议
- URL 组成
- Header Content-type, Accept, Authorization, User-Agent, Host, Referer, Cookie, Cache-control, Content-length, Connection ...
- Method GET, POST, PUT, DELETE, PATCH, RestfulAPI
- Request url params body
- Response status body set-cookie ...
- Status code 10x 20x 30x 40x 50x
- cookie 服务端 set-cookie,浏览器禁用第三方 cookie
- Session 服务端存储数据
- JWT 客户端存储数据,替换 token,OAuth 第三方登录,SSO 单点登录 ...
- 跨域 浏览器同源策略,JSONP,CORS,跨域传递 cookie
- 浏览器缓存策略
- 强制缓存 Cache-Control
- 协商缓存 Etag,If-None-Match,Last-Modified, If-Modified-Since
- 缓存位置 Memory Cache, Dist Cache, Service worker Cache
- HTTPS SSL 协议,SSL 证书,加密过程(非对称和对称加密),通讯过程,options 请求
- WebSocket
- GraphQL
- 大文件上传 切片上传,断点续传,秒传
最后
下半部分 2025 前端+大前端+全栈 知识体系(下),包括 vue react node 工程化等等。这部分如有遗漏的请大家留言评论补充。
近期有计划面试的同学,可到 面试派 刷题,学习面试流程和技巧。
书接上回 2025 前端+大前端+全栈 知识体系(上),本文继续写完这个知识体系。
服务端基础
服务端是一个很宽泛的概念,本文只讨论 JS 开发的服务端。
JS 运行时
- Nodejs 生态成熟,应用广泛
- Deno 支持 TS,默认安全性,兼容 WebAPI
- Bun 极致性能,All-in-one
Nodejs API
- 模块 CommonJS, ES-Module
- 命令行
- 网络 HTTP HTTPS 服务
- 文件 fs 读取 写入 创建 删除 文件...
- 流 stream readline
- 进程 process
- 集群 cluster PM2
- 调试 debugger
- 测试
数据库
- MySQL 关系型数据库
- PostgreSQL 关系型数据库
- MongoDB No-SQL 数据库
- Redis 内存数据库,速度快
- 云数据库 Suspabase Cloudflare 等
存储
- 阿里云 OSS
- 腾讯云 COS
- 亚马逊 S3
云服务器
各个云平台都有免费试用,或低价活动,如果是学习用,可以轮流“薅羊毛”。
- Linux 登录 创建账户
- Linux 基础命令
- Vim 命令
- Nginx 配置
- 安全组和防火墙
Docker
- 镜像 Image
- 容器 Container
- DockerFile
- Docker Compose
- DockerHub
Serverless
- 阿里云 FC 函数计算
- 亚马逊 Lambda
- 其他中小型服务商 Vercel Netlify Railway Fly.io 等
微服务
框架/库
React 使用
- JSX 语法 上文有介绍
- 函数组件 Functional Component,纯函数,副作用,生命周期,组件通讯
- 属性 Props
- 状态 State 不可变数据,immer.js,“合并”更新,异步更新,表单受控组件
- Hooks useState, useEffect, useRef, useContext ... 自定义 Hook, react-use
- Context Provider, Consumer
- 性能优化 useMemo, useCallback, React.memo, React compiler ....
- Suspense 和异步组件
- 报错 ErrorBoundary
- 服务端组件 RSC 服务端渲染 SSR
React 原理
- Virtual DOM React 使用的虚拟文档对象模型,通过对比更新来优化性能
- Diff 算法 对比新旧 vdom 并更新真实 DOM
- Reconciliation React 的更新算法,用于高效地比较虚拟 DOM 与旧虚拟 DOM 之间的差异,并决定最小化的更新操作
- React Fiber React 16 引入的重写的渲染引擎,提供更高效的渲染机制
- React 合成事件 React 使用事件代理机制,将事件监听器挂载到根 DOM 节点上,而不是每个组件的 DOM 节点,减少了事件监听器的数量,提高了性能
- React Concurrency 是 React 18 引入的一项重要特性,使用时间分片和任务调度,用于提升应用的响应性和性能
- React Batching Update React 会对多次 state 更新进行批量处理,合并成一次更新,以减少不必要的重渲染和性能开销
React 生态
- 框架 umijs, Next.js, Remix(react-router), Gatsby, React-Native
- UI 组件库 AntD, MUI, ShadcnUI
- 状态管理 Redux, Zustand, MobX, Recoil
- CSS 样式解决方案 TailwindCSS, Styled-components
- 表单和校验 Formik, React hook form
- 数据获取 React Query, SWR, Apollo Client
- i18n react-i18next
- 测试 Jest, Reat testing library, Storybook
Vue 使用
- 脚手架
- 模板语法 类和样式,条件渲染,列表渲染,事件绑定,指令
- 响应式 ref,reactive,reactive 局限性
- Computed
- watch watchEffect
- 表单和 v-model
- 组件 生命周期,组件通讯,属性 props
- 插槽 slot
- 异步组件
- 动态组件
- KeepAlive
- 组合式函数 Composable 自定义 Composable,vue-use
- Setup Script
Vue 原理
- Virtual DOM Vue 使用虚拟 DOM 来优化 DOM 操作,避免直接操作真实 DOM,从而提高性能
- Diff 算法 对比新旧 vdom 并更新真实 DOM
- 响应式原理 Vue 的核心特性之一,通过数据劫持(Object.defineProperty 或 Proxy)实现视图与数据的双向绑定
- 模板编译 Vue 将模板(HTML)编译成渲染函数,并通过虚拟 DOM 渲染 UI。编译过程将模板转换为可执行的 JavaScript 代码
- 异步渲染 NextTick
Vue 生态
- 框架 Nuxt.js, VuePress
- 路由 Vue-router
- UI 组件库 ElementPlus, AntDesignVue, VantUI, Vuetify ...
- 状态管理 Vuex, Pina
- i18n vue-i18n
- 测试 Vitest, Vue-test-utils, StoryBook
其他前端框架/库
- Angular 老牌全能框架
- Selvte 无 vdom,编译时框架,轻量高效
- Solid 无 vdom,响应式编程,高效渲染
Node 服务端
- Express 老牌 Nodejs 服务端框架,简洁易用
- Koa 由 Express 的原班人马开发,Koa 提供了更精简和灵活的 API,利用现代 JavaScript 特性如 async/await,目标是创建更小、更优雅的框架
- Egg 由阿里巴巴开发,基于 Koa 构建的企业级框架,提供了完善的插件机制和企业级功能,适用于构建复杂和大规模的应用
- Nest.js Nodejs 开发的 Spring 框架
Node 服务端生态
- 数据库 ORM Prisma Drizzle
- Auth 校验 NextAuth
- tRPC 通讯
- i18n 多语言
- 队列服务 RabbitMQ, Kafka
- 缓存
- 日志
- AI 服务 ChatGPT (对中国地区停止 API 服务),DeepSeek 等
- 邮件服务 各大邮箱网站都提供免费 SMTP 服务(会有限制), resend 等付费服务商
- 短信服务 腾讯云,阿里云
- 支付 微信支付,支付宝,Stripe
想学习 Node 全栈生态,推荐我带队开发的 Node 全栈 AIGC 知识库项目 划水AI www.huashuiAI.com 包括文档管理、富文本编辑、AI 智能写作、多人协同编辑等功能。复杂业务,真实上线,持续运维。 可免费加群围观,也可加入学习和参与开发。
小程序
- 框架 如 uni-app、Taro、WePY,提供跨平台开发的工具和规范。
- 组件化 小程序开发采用组件化方式,开发者可以创建自定义组件,提高代码的重用性和可维护性。
- WXML 小程序的标记语言,类似 HTML,用于定义页面的结构。
- WXCC 小程序的样式表语言,类似于 CSS,用于为 WXML 页面设置样式。
- API 小程序提供了大量的官方 API,如 微信支付、位置服务、分享功能等,供开发者在小程序中调用。
- 小程序路由 使用
wx.navigateTo
、wx.redirectTo
、wx.switchTab
等 API 进行页面导航,支持页面栈管理。
- 小程序生命周期 小程序的生命周期包括 onLaunch、onShow、onHide 等,开发者可以在不同的生命周期阶段执行相关操作。
- 小程序云开发 提供云函数、云数据库、云存储等后端服务,简化开发者后端处理,提升开发效率。
- 发布和调试 使用 微信开发者工具 进行本地调试和真机调试,确保小程序在各平台上正常运行,最终通过开发者工具上传并发布到微信平台。
移动端
- React Native 基于 React 的移动端框架。
- Weex 阿里巴巴开发,基于 Vue 的移动端框架。不维护了。
- Flutter Google 开发,使用 Dart 语言
PC 客户端
- Electron 使用 HTML、CSS、JavaScript 开发跨平台桌面应用(支持 Windows、macOS 和 Linux)
微前端
- Single-SPA 是一个非常流行的微前端框架,允许多个前端框架(如 React、Vue、Angular 等)在同一个页面中并行运行。
- Qiankun 是阿里巴巴开源的微前端框架,基于 Single-SPA 开发,提供了更多的功能封装和优化。
- Module Federation (webpack5) 允许在运行时动态加载和共享模块。它可以帮助解决微前端中的共享库和组件的问题。
PWA
工程化
代码库管理
- Git Github,Gitlab,git 命令,commits,pre-commit hook, Pull request
- Monorepo 单个仓库中管理多个项目
脚手架
- react vue 等各个框架的 cli 工具
- AI 生成代码工具 v0, bolt.new
打包工具
- Webpack 老牌打包工具,使用广泛
- Vite 使用 ES Module 开发环境启动快
- Parcel 无需配置,开箱即用
- esbuild 使用 Go 语言开发,速度快,综合性编译和打包工具
- Rspack 同样使用 Go 语言开发,速度快,综合性编译和打包工具
- Turbopack Vercel 公司使用 Rust 开发 JS 打包工具,用于 Next.js 项目,也可以独立使用
- Rollup 老牌打包工具,使用 Tree-shaking 优化代码,Vite 内部使用
- Rolldown 新工具,Rust 开发,Vite 内部使用
JS 编译器
babel SWC 等
- Babel 老牌 JS 编译工具,使用广泛
- SWC 使用 Rust 语言开发的 JS 编译器,速度是 Babel 的 20-70 倍(不同 CPU),而且原生支持 TS 和 JSX 语法,旨在替代 Babel 。Vite 内部使用的就是 SWC 。
- Respack 使用 Go 语言开发,速度快,综合性编译和打包工具
- esbuild 同样使用 Go 语言开发,速度快,综合性编译和打包工具
代码压缩
- UglifyJS 老牌 JS 压缩工具
- Terser 基于 UglifyJS 源码开发的,支持 ES6 新语法,对 tree-shaking 也做了优化。
- 很多 JS 编译和打包工具都集成了代码压缩功能,如 SWC esbuild
CSS 处理
- Sass/SCSS 是 CSS 的一种扩展,提供了变量、嵌套规则、混合宏(mixins)、继承等功能。SCSS 是 Sass 的语法扩展,兼容普通的 CSS 语法。
- Less 是一个 CSS 预处理器,与 Sass 类似,提供了变量、函数、嵌套等功能,用来增强 CSS 的功能性。
- PostCSS 是一个 JavaScript 工具,允许开发者使用插件对 CSS 进行处理和转换。PostCSS 本身是一个工具平台,通过插件实现不同的功能。
- Autoprefixer 是 PostCSS 的一个插件,自动为 CSS 属性添加浏览器前缀。它基于 can-i-use 数据库,自动判断哪些属性需要添加前缀,并且在构建时进行处理。
编码规范和格式
- eslint 规范 Recommended Airbnb Google StandardJS
- prettier
CD/CD
- Github Action 是 GitHub 提供的持续集成和持续交付(CI/CD)平台,允许用户在代码仓库中定义自动化工作流,自动化构建、测试和部署过程
- Gitlab CI 是 GitLab 提供的集成式 CI/CD 系统,允许开发者通过
.gitlab-ci.yml
配置文件自动化构建、测试和部署,并与 GitLab 仓库紧密集成。
- Jenkins 持续集成/持续交付工具,用于自动化构建和测试。
开发环境
IED 编辑器
- vscode 可集成 github copilot 智能编码
- webstorm
- Cursor 集成 AI 智能编码,付费
- codepen 在线 IDE
- stackblitz 在线 IDE
调试
- debugger 和断点
- chrome 控制台 Element, Console, Network, Performance, Memory ...
抓包
- chrome 控制台 Network
- charles
- fiddler
mock
- Mock.js
- Mock 在线服务
测试
结合 CI/CD 自动化测试
单元测试
- Jest 是一个广泛使用的 JavaScript 测试框架,提供了丰富的功能,如断言、模拟、快照测试和覆盖率报告,广泛应用于 React 项目的单元测试。
- Vitest 是一个快速、轻量级的测试框架,兼容 Jest API,利用 Vite 构建工具进行高效的测试运行,适合现代前端开发和快速反馈的需求。
- React Testing Library 与 Jest 配合使用,专注于通过用户交互测试组件行为,而不是内部实现,鼓励测试组件的可访问性和用户体验。
- Vue Test Utils Vue 官方提供的测试工具,专门用于编写和运行 Vue 组件的单元测试,提供了诸如挂载组件、触发事件、访问组件实例等功能。
E2E 测试
- Cypress 是一个端到端测试框架,专注于前端应用的自动化测试,提供快速、可靠的测试执行和调试功能。
- Playwright 是一个跨浏览器自动化工具,支持 Chromium、WebKit 和 Firefox,适用于多浏览器端到端测试。
- Puppeteer 是一个基于 Node.js 的库,用于控制 Chromium 浏览器进行自动化测试和网页抓取,适合进行浏览器操作和内容提取。
统计、监控、安全和优化
统计和监控
- 百度统计 PV UV 等
- Sentry 综合性的 APM 监控平台
- 报错监控
- 性能统计和监控
安全
- 跨站脚本攻击 XSS 攻击者通过注入恶意脚本代码到网页中,从而窃取用户信息或执行未授权操作
- 跨站请求伪造 CSRF 攻击者诱使用户在已经认证的站点上执行恶意操作,利用用户的认证信息发送不必要的请求
- SQL 注入 通过将恶意的 SQL 查询代码注入到应用程序的数据库查询中,攻击者能够篡改数据库。
性能优化
- 性能指标 Web vitals TTFB, FCP, LCP, FID, CLS, INP
- 代码分割 常用模块可以缓存
- 懒加载 JS 懒加载,图片懒加载
- 资源压缩 代码,图片
- 渲染优化 减少页面渲染次数,避免不必要的 reflow 和 repaint
- CDN
- Edge 边缘计算
项目管理
项目角色
- Product Owner 产品负责人
- Product Manager 项目经理 负责整体项目的规划、进度管理、资源协调和风险控制
- FrontEnd Developer 前端开发
- BackEnd Developer 后端开发
- FullStack Developer 全栈开发
- UI/UX Designer UI/UX 设计师
- QA 测试工程师
Scrum 敏捷开发
- Sprint Scrum 中的迭代周期,通常持续 1 到 4 周。在每个 Sprint 中,团队会完成一定数量的任务,并交付一个可用的产品增量。
- Backlog 产品待办事项列表,包含所有待开发的功能、修复、改进等项,由产品负责人(Product Owner)管理和优先级排序。
- Daily Standup 团队每天举行的短会议,通常 15 分钟,成员讨论各自的工作进展、遇到的障碍和接下来的工作计划。
- Sprint Review Sprint 结束时,团队展示已完成的工作成果,和产品负责人、相关利益相关者一起评审进展并进行反馈。
- Sprint Retrospective Sprint 结束后,团队反思整个过程,讨论哪些方面做得好、哪些需要改进,以便在下一个 Sprint 中提升团队效率和协作。
kanban 敏捷开发
类似于 Scrum 但更加灵活,没有固定的周期和角色,适合持续快速的交付。
软件研发过程
- 需求评审和 UI 设计
- 技术方案设计
- 开发过程:编码、调试、单元测试、自测、写注释和文档、代码走查等
- 联调
- 提测
- 上线
- 全量
- 小流量(灰度)
- ABTest
项目管理常用工具
- 任务管理 Jira (综合性), Github project
- 问题管理 Github/Gitlab Issues
- 知识库/文档平台 语雀,Notion ...
非技术事项
- 持续学习,及时关注新技术
- 独立思考,凡事考虑本质和价值,多问为什么
- 低头做事,抬头看路,定期放空自己,闲下来
- 时间管理,有目标性和计划性,写出 todos 不要忘了
- 保持形象,可以个性但不能油腻,追求合适的衣服、鞋子和发型
- 定期体检,爱护头发、颈椎、腰椎,健康饮食和作息
玉米圆
0524-27-实习
概述
对于前端在实习校招其实就循序渐进的去学 大方向其实是这几点
- 基础—知道三件套和框架 工程化(打包工具)是啥
- crud项目 能够增删改查
- 背八股手写算法代码输出题
- 复杂一些的项目 如低代码 组件库 监控平台
- 复杂的实习内容 如 复杂性能优化 SSR 微前端 SSO方案 一些SDK 复杂组件 找实习的话就是前4
第1天 (5月25日)
- 学习 HTML 基础语法、结构标签、表单、语义化
- 完成一份结构完整的静态页面(含表单)
第2-4天 (5月26日 - 5月28日)
- 学习 CSS 选择器、盒模型、Flex/Grid 布局、动画过渡
- 熟悉常见布局(双栏、三栏、响应式)
- 完成静态页面样式编写练习
第5–12天 (5月29日 - 6月5日)
- JavaScript 核心语法回顾(数据类型、作用域、函数、数组、对象)
- 深入学习运行机制:事件循环、宏/微任务、内存管理
- 理解闭包、this 指向、原型链、继承模型
- 掌握异步编程:
Promise
、async/await
、Generator
- 熟练掌握模块化规范(
CommonJS
、ESModule
)
- 实现经典手写题:
bind
、call
、new
、promise.all
等
- 补充常见面试高频知识点: 类型判断、深/浅拷贝、节流/防抖等
第13-15天 (6月6日 - 6月8日)
- 了解模块打包原理与工具: Webpack 与 Vite 对比、基本配置
- 掌握 Git 基本命令、分支管理、GitHub PR 流程
- 学习 ESLint、Prettier 配置与使用,了解提交规范 (cz + husky)
第16-20天 (6月9日 - 6月13日)
- 阅读 Vue3 官方文档,掌握 Composition API、生命周期、响应式原理
- 熟悉路由管理 (Vue Router) 与状态管理 (Pinia)
- 编写小型项目练习: TodoList + 路由 + 状态管理 + 表单处理 (基于 ELM 架构)
第21-27天 (6月14日 - 6月20日)
crud怎么做
- 第一个先随便看个烂大街项目
- 找一个烂大街 CRUD 项目 (B站 or GitHub) 快速过一遍结构
- 熟悉业务流转、接口、组件拆分
- 第二个就是对着官方文档写todolist+路由+状态管理+elm表单
第28-38天 (6月21日 - 6月30日)
第三 按照我那个套壳包装 然后背那个点 就是发你的那个pdf
第39-50天 (7月1日 - 7月12日)
- 开始第二个项目 (任选方向)
- 可选方向一: 组件库
- 可选方向二: 低代码平台 (可视化表单/页面生成)
- 可选方向三: LLM 应用 (如 ChatGPT 接入页面) 然后背几天step3写的重点就开始投 后边就是一边投一边继续背
step1-基础学习
基础其实只要学三件套+vue+了解打包工具和git这些
一种可以看文档学比较快 MDN文档 vue文档、搜前端知识去这边——掘金 react文档
或者看这个视频 第一个codewhy的 碰到什么jq这个跳过
这里面也有ppt可以快速过 就是除了js高级别的应该ppt都ok的
通过百度网盘分享的文件: 00000、we...等2个文件
链接:
https://pan.baidu.com/s/1iikDZ6CbDny6UTIgmtaPVw?pwd=E4va
提取码: E4va
复制这段内容打开「百度网盘APP 即可获取」step2-crud项目
你可以参照这个格式包装 就是名字和项目介绍随便换,项目工作按我出的 想加难度可以再找我 项目工作选4-5条即可
就你可以写写你的项目按照这个格式去 然后最后投之前我再review一下 改一下包装一下这样的
这个是一个包装示例
Vue3 通用后台管理系统
项目介绍: 本项目是一款基于 Vue3 技术栈构建的通用后台管理平台,适用于中后台管理系统的快速开发与部署。系统具备基础权限控制、模块化架构、主题切换、性能优化等特性,支持企业级业务场景的灵活拓展与定制化开发。
技术栈: Vue3 + Vite + TypeScript + Pinia + Vue-Router
项目工作:
- 基于 Vue3 + TypeScript 搭建模块化工程结构,通过 vue-router 实现路由懒加载与动态权限拦截,支持页面级和组件级权限控制,提升系统安全性。
- 重构状态管理架构,将 Vuex 迁移至 Pinia,借助其强类型支持和模块化设计,提升代码可维护性并减少模板代码量。
- 使用 Monorepo (pnpm) 管理多包依赖,实现组件库、工具函数、主题配置的跨项目复用,降低维护成本。
- 应用 Vite 分包策略、图片 WebP 格式转换等手段进行性能优化,将首屏渲染时间 (FCP) 从 3.2s 优化至 1.6s。
- 设计并实现主题化方案 (暗黑/亮色模式),基于 CSS 变量与 localStorage 实现持久化配置,支持动态切换与全局响应式更新。
- 基于 TypeScript 对 Axios 进行二次封装,集成请求拦截器实现 Token 自动注入、统一错误处理及接口重试机制,有效提升接口复用率与开发效率。
接下来是熟悉这些描述点 背延申八股和基本的实现 应对面试官可能的提问
比如:
- 先第一层是功能上的,就是每一条描述点都需要知道对应的功能点,其次是相关竟对方案,技术选型调研,比如说你用了pinia做状态管理,那别的方案怎么样,优缺点
- 为什么从Vuex迁移到Pinia,迁移过程中遇到了什么问题。
- Vue3的组合式API有没有用,和选项式API的区别,以及带来的好处。
- 还有monorepo管理,用pnpm或nx的好处,项目结构是怎样的,如何管理多个包之间的依赖。
- 怎么实现权限控制的,路由懒加载的具体方法,怎么拆分代码块。
- 如果有动态路由,如何处理权限变化后的更新,比如用户登出后路由怎么处理。
- 主题切换和持久化,如何实现黑暗模式,CSS变量还是CSS-in-JS,持久化是用localStorage还是其他方式,如何保证刷新后主题不丢失。
- 如果想写图表: 可视化部分用了echarts,如何集成到Vue项目,如何处理大量数据的渲染性能,有没有做优化,比如数据分页或懒加载。图表类型的选择依据,比如为什么用折线图而不是柱状图。
- monorepo是如何提升效率,团队协作中的代码规范怎么保证,有没有用Husky或Git钩子。代码复用和模块共享的具体例子,比如公共组件或工具函数如何管理。性能问题有考虑过吗
- 性能优化的所有指标都要了解如果写上
- 主题切换的其他方案 (CSS-in-JS、UI 框架主题)
- ESLint 的配置与规则 (自定义规则、插件扩展,Prettier 的格式化原理 (AST 解析,CommitLint的提交规范
- 代码分割的策略 (按路由、按组件)
step3–具体八股手写算法代码输出要求
这边写的是高优的部分,就是全量的八股在fe辅导里面的八股文合集和计算机网络这些
html:
你可以瞄一眼fe辅导里面的那个 其实不多
事件冒泡 事件捕获 及其使用场景
css:
flex布局,两栏布局三栏布局,bfc,居中,响应式布局,display, position,css3新特性,伪类与伪元素的区别,画三角形
js:
Promise的理解
、
原型原型链
、
let const var
相关
js有哪些数据类型
判断数据类型的方法
js数组方法,可能会让你尽可能的说名,什么样的数组方法不改变原数组
forEach map push pop shift unshift splice slice concat join sort reverse some every filter
ES6新特性
this的指向
bind apply call 区别
箭头函数
闭包
事件循环机制
宏任务主要包括:setTimeout、setInterval
微任务主要包括:promise、process.nextTick()
执行规则:同步代码直接进入主线程执行,JS引擎判断主线程是否为空,如果为空,则读取 微任务Event Queue 中所有的消息,并依次执行。主线程和微任务 Event Queue 都为空后,读取 宏任务Event Queue 中的第一个消息进入主线程执行,来回微宏。
简历如果要写ts:就准备下泛型,interface和type区别,ts在项目中的好处网络:
GET和POST的请求的区别
http1.1和2区别 优缺点http2解决了什么问题
(次重点—仍然有什么解决不了的问题 http3+udp怎么解决)
https和http的区别, 它用了什么机制去保证安全
http状态码
常见的http请求方法
与缓存相关的HTTP请求头有哪些
强缓存:- Expires 1.0
- Cache-Control 1, 1 协商缓存:
- Etag、If-None-Match 1.1
- Last-Modified、If-Modified-Since (1.0) 输入url会发生什么 跨域—同源策略
框架:
这个我单独发你文件
vue:
- Vue3 使用经验
- 组合式 API 理解
- 数据响应式原理 (数据劫持)
- MVVM 模型
- 懒加载实现、图片比例适配
- 状态管理的各种方案
手写题:
防抖、节流深浅拷贝promise.allnewinstanceofflat
(数组扁平化)
call
函数柯里化
数组api
url解析、千分位隔开
数组转树 暴力递归和哈希解法
算法题:
算法题:
https://codetop.cc/home
切换成前端 然后频度降序 就是时间问题可能没啥时间刷 优先手写题代码输出题:
我单独发文件给你了
可以大概看一下 有时间的话可以去掘金找那种大合集 重点感觉就是
this指向
和事件循环的题
这个大厂问的也比较多 我是百度滴滴美团的日常实习被问这个了 看简单的就好 太复杂的不用管 就是最简单的你不能不会 难的不会是可以理解的浏览器的知识
浏览器渲染的完成流程
简单看一下吧fe辅导里面的 或者去掘金搜一下相关八股
我贴个面筋大概展示一下面试难度
你实习的话应该比这个简单
字节国际电商 base珠海 这个是一面 (校招)
- 自我介绍 (可以说一下你想要介绍的项目和亮点)
- 问介绍内容中项目里为什么要用到这个技术,他有什么优势,为什么要用这个技术栈有了解吗?
- 状态管理的问题,你们用usecontext比rematch好在哪里,可以类比一下他可能会问别的对比你项目里的技术。
- 接下来是基础部分:对计算机网络了解吗?http2的优势是什么,他解决了http的什么问题。服务器推送这个功能在实际实践中会使用,你有了解过有什么页面或者项目有用这个东西做服务器推送。
- http3结合udp比tcp有什么优势,他解决了http2现在的一些什么问题
- tcp的握手挥手分别有几次,大概是什么样的一个过程
- 为什么挥手一定要四次,而握手三次就能
- 接下来问js, js的几个基本数据类型是什么, bigint是什么样的范围
- 你一般用symbol去做什么,你平常怎么判断数据类型
- 你对闭包怎么理解,他有什么作用和缺点
- 那怎么去避免内存泄漏呢。首先你怎么去检测到一个网页可能存在内存泄漏
- 浏览器的缓存有哪些 (背强缓存协商缓存。http1.0靠什么字段,1.1靠什么字段)
- 强缓存一般会用在哪一些资源,我想让他在失效时间还没到就让他失效怎么处理。
- 浏览器的渲染进程有哪些线程
- web server了解吗 和webwork有什么区别 (冷门的)
- 然后是写一个mid算法题和手写一个usestate
- 最后是反问
更难一点的工程相关
- 如何捕获错误
- 如何应对白屏问题
- vite or wbp的构建流程和区别
- Plugin 与 Loader 概念
- 使用过哪些插件
- ESM 和 UMD 区别 (如何同时输出两种格式)
- monorepo 理解 (如果简历写了)
- npm 与 pnpm 区别
场景题
最基础的能力就是要拥有白板写一个vue或者react组件的能力
比如说封装一个input组件等
step4-复杂项目
20天完成吧 感觉选一个就ok另一个项目用前面的那个
组件库
Cream-UI - 技术栈名字可以自己换
项目介绍: 基于Vue3 的现代化组件库,采用monorepo架构开发管理,实现15+ 常用组件,支持按需引入和全量引入,并提供完整的文档和实例。
技术栈: VitePress + Vue3 + TypeScript + Vite
项目工作:
- 基于Monorepo实现多包管理,使用pnpm workspace统一依赖版本,采用ESlint+Husky规范代码质量,实现提交前自动检查
- 封装15+常用组件,包括Message函数组件、Tree递归组件、Dialog/Select传送门等复杂组件,支持按需引入和全局引入
- 设计Preview插件,实现组件源码预览,并集成highlight.js,实现代码高亮
- 使用VitePress搭建组件库文档站点,提供完整的文档和组件实例,并自动化部署到vercel
- 完成npm打包发布,支持ES Module、UMD两种格式输出
如果想看视频 通过百度网盘分享的文件: 进阶必学,202...链接:
https://pan.baidu.com/s/1K4yLU6So_YkPur8SvRvCTQ?pwd=d6U3
提取码: d6U3
复制这段内容打开「百度网盘APP 即可获取」
这种项目无所谓技术栈是vue还是react亮点思路
关于组件库这块 你最好实际的去从0–1构建这个项目 然后完成几个小组件就行 如果你想把复杂组件吃透写到描述点里也是ok的 具体的那个大pdf里面有一些参考 想做高一点难度的可以从这个角度: 任意选一个组件开始琢磨 就你实现一个组件 可以从业界一般是怎么解决的 业界的最佳实践 是用库去解决还是自己写原生代码 如果业界已经有更好的库 那么你是否能自己实现轮子 比他更贴近更适合你的项目 就你完成这个闭环了 因为你的组件库本质上是贴合你团队规范而生的
低代码平台
亮点和代码仓库可参考fe辅导里面的react项目
- 项目介绍:xx活动的xx多人协作项目,可以通过拖拽生成一个宣传活动页,并支持预览的功能。
- 技术栈: React + TypeScript + Ant Design + React DnD
- 项目工作:
- 参与调研行业内低代码平台和引擎,设计低代码物料、搭建数据结构,并产出对应协议文档
- 实现了低代码编辑器相关的逻辑,设计并定义了可拖动的组件类型及其属性并实现对应的渲染组件。
- 基于 React DnD 实现了拖拽相关的自定义 Hook 以及画布上对应活动页的预览功能。
- 基于 Hotkeys 按键响应库实现了拷贝、复制、删除的快捷键功能。
- 通过对画布上撤销、重做功能进行了数据结构的重新设计,避免了重复数据的大量冗余。
- 实现基于画布历史数据的最大条目优化及回滚途中若出现重新编辑情况的处理。
- 设计并实现了keepalive 功能,使得切换路由后在切回时能够恢复编辑的状态。
简历参考的写法
项目经历MyRoom麦荣-低代码线上看房平台 2022.05 - 2022.06
- 项目介绍: 字节跳动2022夏季场镜像计划项目,可以通过拖拽生成一个宣传活动页,并支持预览的功能。
- 技术栈: React + TypeScript + Ant Design + React DnD
- 项目工作:
- 实现了低代码编辑器相关的逻辑,设计并定义了可拖动的组件类型及其属性并实现对应的渲染组件。
- 基于 React DnD 实现了拖拽相关的自定义 Hook 以及画布上对应活动页的预览功能。
- 基于 Hotkeys 按键响应库实现了拷贝、复制、删除的快捷键功能。
- 通过对画布上撤销、重做功能进行了数据结构的重新设计,避免了重复数据的大量冗余。
简历怎么写
项目的我写在step2了 技能就往前端的写比如说下面这个
技能部分
大概简历上就是这么写 写上去的技术栈基本都要了解 实在一点不会的可以去掉
- 熟悉常见的HTML及HTML5元素,CSS/CSS3的基本语法与布局,能够精确还原设计稿
- 熟悉掌握JavaScript及ES6语法特性,理解this指向,作用域,函数原型和对象,原型链,箭头函数,Promise等使用
- 熟悉Vue2/Vue3框架,能够熟练使用Vue配合主流组件库Element Plus、Vant进行开发
- 了解HTTP协议、TCP/IP协议、HTTP状态等计算机网络知识
- 掌握Vite、Webpack等前端工程化工具的使用,了解git代码管理方式
Chatgpt
好的,我将为你制定一个为期两个月、每天8小时投入、以大厂前端实习生为目标的速成学习与实习准备计划,结合实战项目和算法面试准备。
两个月前端实习生速成计划
阶段划分与时间安排
根据您的背景和目标,将两个月(约8周)划分为四个阶段,每个阶段侧重不同重点:
- 阶段一:基础打牢(第1-2周) – 夯实前端基础知识,包括 HTML、CSS 和 JavaScript 基础语法。目标是在此阶段掌握网页结构与样式布局,理解 JS 基本语法和特性,为后续进阶打下牢固基础。
- 阶段二:进阶实战(第3-4周) – 学习前端进阶知识点并开始小型实战。重点掌握 DOM 操作、浏览器事件机制、ES6 新特性、异步编程(如 AJAX、Fetch)等。在本阶段后期进行一个小型项目练手,将所学应用于实践,加深理解。
- 阶段三:项目提升(第5-6周) – 主攻现代前端框架(根据兴趣和求职方向选择 React 或 Vue),并完成一个具有代表性的中型项目。通过项目实战提升技能深度,包括组件开发、状态管理、路由和打包部署等。项目完成后,要能清晰讲述项目架构和技术难点。
- 阶段四:面试冲刺(第7-8周) – 全面准备大厂实习生面试。包括高频算法题刷题冲刺、典型前端面试题复习、模拟面试演练、完善作品集和简历等。此阶段还应同步启动内推或简历投递,安排好笔试和面试节奏。
时间投入建议:每天约8小时学习时间。在阶段一和二,建议每天6小时学习新知识+2小时练习巩固;阶段三每天4-6小时开发项目+2-4小时查漏补缺;阶段四每天3-4小时刷题复习+1-2小时项目完善+1-2小时模拟面试及求职事务。合理安排作息,确保学习效率和身心健康。
技能学习内容
两个月内需要系统掌握的前端核心技术栈包括:**HTML、CSS、JavaScript(含ES6+)、DOM/BOM、事件处理、异步交互(AJAX/Fetch)、构建工具(Webpack、Vite 等)、现代前端框架(React或Vue)**等。以下按主题和时间顺序给出学习内容和进度建议:
- HTML 与 CSS 基础 (第1周):巩固 HTML5 语义化标签、表单、媒体等用法,以及 CSS3 常用属性和布局技巧。重点掌握盒模型、定位(position)、文档流和BFC、Flex 弹性布局等核心概念。可通过实现几个静态页面练习布局和响应式设计。注意理解块级元素和行内元素的区别、CSS 优先级规则等,这些都是面试常见考点。预计用时约5-7天完成基础教程和练习。
- JavaScript 基础语法与ES6 (第2-3周):系统学习 JavaScript 核心语法,包括数据类型、运算符、条件和循环、函数定义与调用、作用域和闭包、原型链与面向对象等。由于您有 Java 基础,学习JS会轻松很多,但仍需注意JS与Java在类型系统和执行机制上的区别。在掌握基础语法后,重点学习 ES6+ 新特性,例如
let/const
、箭头函数、模板字符串、解构赋值、展开运算符、Promise
等异步特性,以及模块化 (import/export
) 等。ES6 是 JS 的重要进阶,掌握这些新语法有助于写出更现代的代码。预计2周时间覆盖JS基础和ES6特性,并辅以小练习(如实现简单算法、DOM 操作)来检验理解。
- DOM 操作与浏览器 API (第3周):学习DOM树模型,掌握使用原生 JavaScript 操作DOM的方法(如
getElementById
、querySelector
、修改节点属性样式、创建/删除节点等)。理解事件机制,包括事件冒泡与捕获、事件委托、常见事件类型及处理方法。学习浏览器相关的 BOM 对象 (如window
、location
、history
、localStorage
等)。通过练习诸如点击按钮操作DOM、表单验证、图片轮播等小功能来巩固。在这一过程中,还应了解浏览器的渲染原理、JS 执行的单线程模型以及为什么需要异步任务(这些概念在大厂面试中经常被问到)。预计用时4-5天深入掌握DOM和事件。
- 异步编程与数据交互 (第4周):学习前端与后端交互的方式和异步编程模型。重点掌握 AJAX 原理以及使用原生XHR和基于Promise的 Fetch API 进行数据请求。理解HTTP请求的基本流程,学会解析JSON数据。在此过程中,掌握Promise的用法,了解事件循环和任务队列等 JavaScript 异步机制(浏览器的Event Loop是高频考点)。可以通过调用公开的REST API编写简单示例(如天气数据获取)练习AJAX/Fetch。与此同时,了解JSONP、CORS等跨域调用的基本知识,理解浏览器安全策略(如同源策略)和跨域解决方案,以应对面试关于跨域的提问。预计用时3-4天练习异步请求和接口数据处理。
- 前端工程化与构建工具 (第4周):了解现代前端开发环境和工具链。学习使用 Webpack 或 Vite 等构建工具来打包和运行项目的基础方法。重点理解模块打包、代码压缩、热更新等概念,以及Webpack与Vite在构建方式上的差异(例如Webpack基于配置打包,而Vite利用原生ES模块实现快速开发,具有“双引擎”架构等)。您可以尝试用 Vite 或 Create-React-App / Vue CLI 初始化项目,体验本地开发服务器、模块热替换等功能。虽不必深入配置细节,但应了解基本原理,因为大厂面试可能会深入询问构建工具相关的问题。预计用时2-3天入门前端工程化。
- 前端框架入门 (第5周):根据求职偏好选择一种主流框架进行深入学习,可选 React 或 Vue。(React 偏组件化思想和函数式编程,Vue 上手相对容易,二者择其一精学即可。)框架学习要点包括:组件的基本用法、组件之间的通信和状态管理、路由管理、与后端数据交互、构建流程等。以 React 为例,学习创建组件、JSX 语法、Props 和 State、组件生命周期和 Hooks(如
useState
,useEffect
),理解单向数据流和虚拟DOM原理;以 Vue3 为例,则学习组件单文件格式、响应式数据、计算属性和监听器、Vue Router 和 Vuex 状态管理等。无论选哪种框架,都需掌握组件通信方式(例如 React 中通过 props/ref/context,Vue 中通过 props/$emit/provide-inject 等),了解它们各自的优缺点和适用场景。另外,要熟悉框架常用的周边生态,如 UI 组件库(Ant Design、Element 等)和框架脚手架的使用。预计用时7-10天完成框架核心概念和简单组件编码练习。
- 框架进阶与项目开发 (第6周):在掌握框架基础后,挑战更深入的主题:比如在 React 中了解 Redux 或 Zustand 进行全局状态管理,在 Vue 中了解 Pinia 或 Vuex;学习路由跳转和懒加载,了解前端性能优化(如如何拆分代码、减少不必要的重新渲染)。动手开发一个完整的小型单页应用项目(见下文项目建议),综合运用所学框架知识。开发过程中实践组件化思想,将页面拆分为合理的组件模块;使用异步请求从后台获取数据,完善交互流程;使用构建工具打包项目并解决可能出现的构建错误。通过项目实践,进一步掌握框架的最佳实践和常见坑(例如路由刷新404问题、状态提升等)。预计用时约4-7天完成主要功能开发,预留1-2天进行项目调试和优化。
- 补充与拓展学习 (穿插进行):在以上主线学习之外,建议抽时间了解以下内容:
- TypeScript:了解 TS 的基本用法(类型声明、接口、泛型等)和在前端项目中的应用。大厂越来越重视 TS,如果时间允许可简单上手,将已有JS代码改写部分为TS体验静态类型的优势。面试中可能被问到一些 TS 基础(例如泛型、interface vs type 区别等),懂一些将是加分项。
- Git 版本控制:在项目实践中使用 Git 做版本管理,并将代码托管到 GitHub。练习基本的 Git 操作(clone/push/pull/branch等),以便团队协作。大厂开发流程普遍使用 Git,面试官可能关注您是否具备协作意识和工具使用能力。
- 计算机基础知识:了解一些计算机网络和浏览器的基础,如HTTP请求响应过程、常见状态码含义、TCP握手挥手流程,Web安全基础(XSS/CSRF 原理)等。这些在前端面试中属于加分项,有余力可以看一些相关资料。
- 前端性能优化:了解如何提升前端性能的常见手段,如减少重绘回流、优化资源加载(按需加载、压缩文件)、利用浏览器缓存等。面试中可能会问到“如何优化首屏加载速度”等问题,可以结合项目实践的心得来回答。
总结来说,通过前4-5周的系统学习,您应当掌握从页面布局、脚本编程到框架应用的一整套技能闭环,对前端开发有全面认识。学习过程中务必要多实践敲代码,不要止步于看教程视频或文章。遇到难点及时查阅资料或文档,培养自主解决问题的能力。
项目实战建议
通过实战项目,能将所学知识串联起来,并产出可展示的成果。在两个月内建议完成1-2个中小型项目来展示能力。下面提供两个项目创意及实现思路:
项目1:Todo待办清单应用
项目定位:经典入门项目,功能适中但涵盖核心CRUD操作。可用于练习基础的组件开发和数据状态管理。
推荐功能模块:
- 待办事项列表:展示所有待办任务条目,每个任务显示标题、状态(未完成/已完成)。
- 添加任务:提供输入框和按钮,新任务输入内容后按下按钮加入列表。实现后清空输入框。
- 标记完成/取消:在每个任务条目前添加勾选框,支持用户勾选以切换任务完成状态(可通过样式变化或将文字划线表示完成)。
- 删除任务:每个任务条目提供删除按钮,可移除该任务。
- 筛选与持久化(可选):增加筛选功能(全部/未完成/已完成),方便查看不同状态的任务列表;使用浏览器本地存储(LocalStorage)保存任务列表,实现刷新页面后数据不丢失。
实现思路:该项目可用原生 JS 实现,也可以使用框架(React/Vue)来练习组件化开发。如果使用 React,可将整个应用拆分为
<App>
、<TodoList>
、<TodoItem>
等组件,使用 React 的状态来管理任务数组,通过props在组件间传递操作回调。若使用 Vue,则利用 Vue的双向绑定将输入框内容绑定到变量,通过方法处理添加/删除逻辑。重点练习 DOM 操作和状态更新:如如何高效地更新列表DOM、如何避免不必要的重绘等。这个项目比较简单,预计3-5天即可完成基础功能。完成后,确保能熟练讲解组件间通信和关键逻辑实现原理,以备面试官提问。项目2:天气预报查询应用
项目定位:综合型小项目,侧重与后端API交互,展示异步编程和界面动态更新。该项目可以体现您调用第三方接口、处理数据和呈现UI的能力,项目效果也比较直观。
推荐功能模块:
- 城市搜索与定位:提供一个输入框让用户输入城市名称,并有一个“查询”按钮触发天气搜索。另外可加入定位功能按钮,获取用户当前位置的天气(可使用浏览器地理定位API加第三方逆地址解析服务,增大实现难度,可选)。
- 天气数据显示:调用公开的天气API(如和风天气、OpenWeatherMap等)获取指定城市的天气数据,并解析后展示在页面上。展示内容包括:城市名称、当前温度、天气状况描述(晴、多云等)以及对应的天气图标。可以进一步展示湿度、风速等扩展信息。
- 未来天气预报:显示未来几天的预测信息(比如未来3天或5天的高低温、天气状况),以列表或卡片形式呈现,让应用更具实用性。
- 界面友好性:根据不同天气状况更改背景或配色,例如晴天显示晴朗背景,雨天显示雨滴背景等,提升用户体验。
实现思路:前端使用框架或原生均可,但用框架能更快搭建UI组件。核心是与第三方API的交互:注册并获取API密钥,研究API文档了解请求URL和返回JSON格式。使用
fetch
发起请求并处理返回的Promise,将获取的JSON数据填充到UI模板上。需处理好异步加载状态(请求数据时显示“加载中”提示)以及错误处理(如城市名无效或网络错误时给出提示)。本项目锻炼您的数据处理和展示能力,也展现对HTTP接口的理解。在实现过程中,注意控制请求频率、防止重复查询等细节,这些也可能成为面试提问点。预计5-7天可以完成主要功能和基本的样式美化。根据经验,一些练手项目主题还包括个人博客系统、简单购物车/订单系统、后台管理面板等。例如,个人博客网站能练习富文本编辑和内容管理,后台管理系统则能体现对表格、表单等企业级组件的运用。如果时间充裕且有兴趣,可以选择这些稍大型的项目进行挑战。但需量力而行,在两个月内确保至少完成两个能拿得出手的项目,并将源码托管到GitHub。项目不在多而在精,每一个都要做到功能可用、代码清晰,并对其技术细节了然于心(切忌在简历中写自己不熟悉的功能点,否则面试深入提问时会很被动)。
完成项目后,建议进行必要的优化和总结:比如代码重构提高可读性,添加简洁的README说明项目功能和启用方法。在项目基础上思考还能怎样改进性能或扩展功能,这些思考过程也可以在面试中与面试官交流,表现出您的主动学习和工程思维。
算法与面试准备
大厂前端实习生面试通常包含算法考察和前端八股文(基础知识问答)两部分。因此在最后一个月中,需要平行准备算法刷题和常见面试题。
算法刷题计划
目标:熟练掌握常见数据结构与算法的思路,用 JavaScript 解题,并提高编程调试速度。前端岗位的算法题一般以简单和中等难度为主,但大厂也可能考察思维技巧题。计划如下:
- 循序渐进,分阶段练习:按照难度和类型逐步提升刷题强度。初级阶段先复习数据结构基础知识,刷简单题热身,题型包括数组、字符串操作等。接着进入中级阶段,按专题各个击破,如数组与哈希、链表、栈队列、树与图遍历、排序与查找、动态规划等,一类一类集中练习,总结每类题目的通解套路。最后临近面试的冲刺阶段,重点练习高频题和模拟面试环境计时做题,确保手感不生疏。
- 每日刷题计划:从第3周或第4周开始,每天拿出至少1-2小时刷题。前期以LeetCode 简单题为主,确保编程基础过关;中期逐渐挑战LeetCode 中等题。两个月下来争取累计刷题 50-100道,覆盖主流题型。可以参考 LeetCode 上的热题列表或《剑指 Offer》题集。
- 重点题型举例:
- 数组与哈希: 两数之和、合并有序数组、删除重复元素等。
- 字符串: 翻转字符串、判断回文、最长公共前缀等。
- 链表: 反转链表、合并两个有序链表,链表环检测等。
- 栈与队列: 有效括号匹配,最小栈,实现队列(用两个栈)等。
- 树与图: 二叉树前中后序遍历、层序遍历,判断对称树,简单的图遍历等。
- 排序与查找: 实现快速排序/归并排序,二分查找变形等。
- 动态规划: 斐波那契数列、爬楼梯、简单背包问题等。
练习时注重理清解题思路,多总结套路。一些题目可以使用多种解法,实现后比较其时间空间复杂度以加深理解。刷题不在于题海战术,而在于典型题型全覆盖和举一反三。
- 实战技巧:除了正常刷题,也要模拟真实面试环境来训练。限定时间完成一道题(如30分钟内解决LeetCode中等题),养成先思考再下笔的习惯。可以借助LeetCode的“模拟面试”功能或定时做周赛题来练时间控制。另外,大厂前端面试中,算法考察往往包括手写代码环节,即现场用笔或白板写出关键代码而非纯LeetCode运行。因此要练习在纸上或不运行环境下写出正确代码的能力,尤其注意代码的鲁棒性和边界情况处理(例如手写深拷贝要考虑循环引用和null等特殊值)。
- 前端特定算法题:有些公司喜欢考察与前端实际应用相关的编程题或小功能实现。常见题目比如:
- 实现
深拷贝
函数(需要考虑各种数据类型及循环引用,用Map
记录已拷贝对象防止死循环)。 - 实现
数组去重
、扁平化
等实用函数。 - 手写
Promise
简易实现或实现 Promise 的all
/race
。 - 实现函数的
call/apply/bind
方法、柯里化函数curry
等。 - 实现防抖
debounce
和节流throttle
。 - 将数字格式化为千位分隔字符串(例如输入1234567输出“1,234,567”)。
这些手写题能考查您对原生JS原理的掌握和代码功底。建议把上述高频手写功能都至少练习实现一遍,并熟记实现思路。列出了很多前端需要掌握的经典手写题目,可作为自测清单。
总之,算法准备重在每天坚持和举一反三。当您用JS顺利写出并调试通过几十道典型问题后,面试中的算法环节就会更加胸有成竹。
前端常见面试题目准备
大厂前端面试离不开对基础知识和原理的考察,即俗称的“八股文”题。根据近期面经,总体趋势是既考经典问题也重视应用场景。准备时请特别关注以下主题:
- JavaScript 核心概念:包括数据类型及类型判断方法(
typeof
、instanceof
、Object.prototype.toString
等优劣)、类型转换规则(== 和 === 区别等)、作用域和闭包、this
指向、原型和原型链继承机制、JS 的内存管理(垃圾回收)等。比如可能会问:“JavaScript有哪几种数据类型,各自如何判断?”、“说说原型链继承的实现原理” 等等。务必理清这些概念,能画图辅助说明更佳。
- DOM 与浏览器:如 DOM 渲染流程、事件机制(捕获/冒泡、事件委托)、浏览器存储(Cookie、LocalStorage、SessionStorage 区别)、浏览器缓存策略、页面性能指标(白屏时间、首字节时间)等。常见问题有:“DOMContentLoaded 和 onload 的区别”、"如何实现图片懒加载"、"解释浏览器从输入URL到页面呈现的过程" 等。
- CSS 和页面布局:重点掌握盒模型(内容盒/边框盒区别)、BFC(Block Formatting Context) 原理、清除浮动方法、定位和层叠上下文、Flexbox弹性布局、Grid网格布局基本用法、CSS选择器优先级计算规则等。也要了解常见CSS问题如:“垂直居中的实现方式”、“inline-block间隙问题”、“CSS预处理器(Sass/Less)的优势”等。实际面试中,CSS部分经常考查盒模型、BFC(例如为什么浮动元素触发BFC可以清除浮动)等基础。
- 异步与浏览器原理:JavaScript 单线程的运行机制,任务队列与事件循环(Event Loop)的执行顺序(宏任务、微任务)是重中之重。要能解释为什么JS是单线程却能处理异步,Promise 和 async/await 的运行顺序,
setTimeout
等的实现原理。另外,了解跨域问题及解决方案,比如同源策略限制、如何通过 CORS 设置、JSONP 的原理、document.domain
和postMessage
跨域通信等。可能的面试题:“请解释JS事件循环机制”、“什么是宏任务和微任务?”、“浏览器有哪些跨域方式?” 等。
- 框架原理与应用:既然您学习了 React 或 Vue,相应原理和常见问题也要准备。比如:
- 对于 React:虚拟DOMdiff算法原理、函数组件 vs 类组件的生命周期对比、state 和 props 的工作机制、父子组件通信方式(props、context、Redux 等)、Hooks 原理(例如 useState 为什么需要闭包捕获旧值)、合成事件模型等。常见手写题有“实现React中的 setState 或 Redux 中的 compose 函数”等。提到的 React 组件通信和生命周期问题在面试中很常见。
- 对于 Vue:响应式原理(数据劫持、依赖收集)、Vue2的双向绑定 vs Vue3的Proxy实现、虚拟DOM与模板编译、组件通信(props/$emit、事件总线、Vuex)等。典型问题如:“Vue的双向绑定原理是什么?”、“Vue组件data为什么是函数而根实例可以是对象?” 等。
- 此外,了解一些框架优化手段,例如 React 中如何避免不必要的重渲染(shouldComponentUpdate/PureComponent 或 Hooks 的
useMemo
/useCallback
);Vue 中如何使用 keep-alive 做缓存等。
- 前端工程化与性能:可能涉及模块化规范(CommonJS vs ESM)、构建工具的工作流程、CI/CD 简单了解等。比如会问Webpack 与 Vite 有何区别(可从打包原理、开发服务器、HMR实现等方面回答)。也可能问前端性能优化方案,如“如何优化首屏加载?”、“如何减少包体积?” 等等。要结合工程实践谈一些,如按需加载、Tree Shaking、利用CDN、缓存策略、减少重排重绘等具体措施。
- 综合与新技术:大厂喜欢跟进新技术,但对于实习生一般不会深究冷门点。不过今年流行的话题可以略了解,如 WebAssembly、微前端架构概念、SSR/同构渲染的优缺点、前端监控与埋点等。如果简历上有相关内容,一定要准备好细节。在没有真实经验时不建议简历编造这方面,但可以通过阅读了解到粗浅认识,以备不时之需。
准备过程中,建议输出学习笔记或博客来加深记忆。可以按照知识模块列出问答提纲,每一道典型题目尝试自己作答,再对照资料完善答案。这样在面试前就等于自己过了一遍问答,有助于理清表述。当下大厂面试中,“八股文”题依然大量存在,只是有时会结合实际场景提问。因此除了记住标准答案,更要理解其背后的原理,尝试用自己的话说明白,并结合项目经验举例说明,这样回答会更有说服力。
举例:如果被问到“JavaScript的深拷贝如何实现?”,你可以先讲浅拷贝和深拷贝区别,然后说明常见方案(JSON.stringify 有局限,递归拷贝可解决大部分情况),再提到需要处理特殊类型和循环引用,可使用WeakMap避免无限循环。最后如能补充自己在项目中处理数据拷贝的经验就更好了。
作品集与简历优化
学习和项目完成后,务必将成果整理包装,以最佳状态呈现给面试官。作品集展示和简历质量对拿到面试机会和给面试官好印象非常关键。这里提供一些优化建议:
GitHub 作品集搭建
- GitHub 代码仓库:将阶段三完成的主要项目源码上传到 GitHub,并整理好项目的 README 文档。在 README 中描述项目的功能亮点、使用的技术栈、如何运行,以及截屏展示核心界面。清晰完善的文档体现您的工程规范意识。GitHub 上的项目仓库相当于您的作品集门户,面试官常会浏览。建议尽量使用内部推荐,也是因为推荐人可以直接看到你的GitHub作品来判断实力。因此保持GitHub活跃、代码质量良好,会给推荐人和面试官留下专业的印象。
- 在线Demo展示:如果项目可以部署成网页,尽量提供一个在线Demo链接。可以使用 GitHub Pages、Vercel 或 Netlify 等免费托管服务部署您的前端项目。这对于展示您的项目非常加分——HR或面试官点开链接即可直观体验成果。例如,将您的天气应用部署在GitHub Pages上,并在简历或邮件中附上链接。
- 持续更新与小项目:除了主要项目,您在学习过程中完成的一些小练习或有意思的功能,也可以放到 GitHub 上,用不同仓库分类。如算法练习题解集、学习笔记仓库、甚至个人博客源码等。这些丰富的仓库体现出您的学习轨迹和积极性。不过要注意质量,高质量的几个仓库胜过数量很多但内容凌乱的仓库。保持代码整洁、命名规范,并多使用 Git 的分支和有意义的 Commit 信息,这些细节在需要时也能向面试官展示您的协作规范意识。
撰写技术博客与学习笔记
- 技术博客:将学习笔记和项目心得整理成博客文章发布在平台上(如知乎、CSDN、掘金、微信公众号等)。写作有助于梳理知识,也向面试官展示您的思考深度。例如,您可以写一篇“React Hooks 入门心得”或“从零开发Todo应用的踩坑记录”。哪怕只是入门总结,也体现了您的总结和表达能力。一些大厂团队喜欢有技术博客习惯的候选人,认为其乐于分享和思路清晰。面试时如果聊到相关话题,提及“我写过一篇博客讨论这个问题”无形中会增加专业度。
- 学习笔记仓库:如果不方便对外发布博客,可以在 GitHub 上维护一个公开的学习笔记仓库。例如用 Markdown 记录每天/每周学了什么、遇到的问题和解决方案。这个仓库既是自我复习资料,也可以让面试官看到您踏实学习的过程。比如在README里按章节整理“HTML/CSS笔记”、“JS高级笔记”、“算法笔记”等目录,并定期提交更新。注意:博客和笔记务必是原创或心得,不要直接照抄官方文档或他人文章,那样没有意义。在有限时间内,哪怕只输出2-3篇优质原创文章,都比大量转载好。
- 突出项目经验:博客或笔记中可以深入一两个项目细节。例如写一篇关于“如何设计一个Todo应用的完成状态过滤功能”,描述您在项目中如何考虑性能和用户体验。这些具体细节日后在面试中刚好可以拿出来讨论,证明您对项目有深度理解。
实习简历撰写要点
您的简历将决定能否通过筛选获得面试机会。一定要打磨好以下几个方面:
- 模板与格式:选择简洁专业的中英双栏简历模板,一页纸为佳。避免花哨设计,确保重点清晰。可以参考知名求职网站提供的前端实习生简历模板或开源的技术简历模板。遵循常规的板块顺序:个人信息(姓名、联系方式、学历)、求职意向、技能清单、项目经历、教育经历、(有的话加上实习/竞赛/奖项)。
- 技能清单:用简洁的词句概括您掌握的技术栈。例如:“熟悉 HTML、CSS、JavaScript,掌握 React 框架及其周边生态(Router、Redux),了解Webpack构建与性能优化,熟悉数据结构与算法,具备良好的编码习惯”等。将与前端直接相关的技能放在最前,如JS/框架/算法。像您这样的新人,学习能力和基础扎实是HR关注点,可以明确写上“有良好的自学能力,热爱前端开发”。上述Liepin模板的“优势亮点”部分就很好地阐述了这些要点。确保列出的每项技能您都较为熟练,因为面试可能针对简历逐项追问。
- 项目经历:这是简历的重中之重。挑选您在两个月内完成的主打项目详细描述,采用 STAR 原则(Situation任务、Task目标、Action行动、Result结果)。描述内容包括:项目名称、开发时间、使用技术栈、项目简介,然后是您在其中完成了哪些功能或解决了哪些问题。要突出个人贡献和技术亮点,例如:“独立开发SPA前端应用,实现了路由按需加载,提升首屏速度30%”、“使用React Hooks重构状态管理,代码量减少20%且提高可读性”。如果有两段项目经验,可都写上;如果只有一个主要项目,也可以加上您练习的次要项目(如Todo应用,但写简要一两行即可)。项目经历部分切忌流水账,一定要突出成果和指标,哪怕是模拟项目也可以编写一些可量化的改进(加载性能、模块复用率等)来体现成效。
- 其他加分项:如在校成绩优秀、参加过相关比赛/训练营、通过英语四六级等也可在教育经历或附加信息中提及,证明综合素质。但篇幅有限,确保把技术能力相关的亮点优先写足写好。
- 避忌与细节:简历中避免出现拼写错误、格式混乱等硬伤,尤其项目名称和技术名务必正确(区分 React 和 react.js 这类大小写)。不要罗列自己不熟悉的流行词以企图蒙混,因为面试官很可能抓住某点深问。相反地,可以藏拙:对尚不精通的领域不必写出,以免被问到陷入尴尬。简历完成后,多请师兄师姐或有经验人士帮忙修改润色,保证清晰易读、亮点突出。
最后,准备一份PDF格式的简历用于网上投递和邮件发送,以确保排版稳定。文件命名规范(“姓名-学校-应聘前端实习生.pdf”),展示您的细心。
模拟面试与投递节奏
技术准备固然重要,但也需要讲究求职策略。以下是在面试安排和简历投递方面的建议:
- 适时开始模拟面试:建议在第6-7周,您完成主要学习和项目之后,就着手进行模拟面试演练。模拟面试可以请学长、朋友担任面试官,按真实流程进行:先让你自我介绍,再问项目、基础知识,最后一两道算法手写或思路讲解。也可以在线上寻找模拟面试服务或求职小组练习。模拟面试的目的在于发现自己的陈述问题、查缺补漏。通过几轮演练,您可以提高面试时的表达流畅度和心理素质。尤其要练习自我介绍和项目讲解部分,可以提前写好提纲背熟,但又不能背稿痕迹太重,力求自然清晰。有条件的话,对着镜子或录音录像自练也是有帮助的。
- 内推与招聘信息:密切关注各大厂实习招聘的时间窗口和渠道。一般每年**春季(三四月)和秋季(九十月)是大厂实习招聘高峰,“日常实习”岗位平时也有但竞争相对更小。尽量通过内部推荐(内推)**渠道投递,因为内推简历反馈更快、通过率更高。可以主动联系在字节、阿里、腾讯等就职的学长学姐,请求内推机会。很多大厂员工在牛客网、LeetCode论坛等会发帖招募实习生内推。积极留意这类信息,及时提交简历。一份被内推的简历往往能跳过海量筛选,直接进入笔试或面试环节。
- 网申与投递节奏:在第7周开始,可以陆续通过公司官网或招聘平台投递简历。如果短时间内需要投多家公司,建议分批进行,不要把所有面试都挤在同一周。可以先投递几家心仪度一般的公司练手,将大厂投递放在稍后,这样早期面试的经验能够帮助改进。此外,也别等所有准备都“完美”再投简历,适当赶早不赶晚——尤其是实习岗位,有的先到先得或者招满即止。第7-8周进入全面求职阶段,每周都安排一定数量的笔试或面试。不妨把周末用于复盘和调整,分析本周面试中暴露的问题,并针对性补强。保持节奏的稳定有助于状态逐渐提升。
- 面试节奏与心态:拿到面试后,提前做好每一轮的计划。通常大厂技术面有2-3轮,最后可能还有HR面。要学会 举一反三:如果某轮被问住的知识点,面试后立刻查清总结,下一轮碰到类似问题就能应对。保持良好心态,面试中如遇不会的问题不要慌张,可冷静分析思路或坦诚表示再学习改进。每一次面试都是学习机会,就算有失误也及时调整,不轻言放弃。面试过程保持谦逊和求知欲,展示出您“可塑性”的一面,即使有不足之处,大厂也愿意培养基础扎实、好学上进的实习生。
- 及时跟进:面试后可以给面试官或HR发送一封简短的感谢邮件,表达对机会的感激和对岗位的热情,并简单重申自己最相关的优势。这虽非必要但体现职业素养。在等待结果的同时,继续准备后续的面试,不要把希望只放在一处。若获得多个offer,可以综合考虑岗位技术栈、团队氛围和转正机会,再做选择。
总之,在这两个月里,按照计划一步步充实技能和项目,同时不忽视求职技巧。从第7周开始进入求职冲刺,手握扎实准备的您应信心倍增。通过高强度的学习实战,再加上合理的面试策略,您将有很大机会在两个月后成功斩获一线互联网大厂的前端实习offer!祝您好运,早日实现实习上岸的目标!
- 作者:瑾墨
- 链接:https://www.gaoqilan.tech/technology/1651a31f-082e-8053-b351-ebad8571cfeb
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。