2 年前端面试心路历程(字节跳动、YY、虎牙、BIGO)(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

    • fiber 诞生的背景,为何 react 有时间切片而 vue 不需要
  • 能简单介绍一下 react 执行过程吗

    • performUnitOfWork
  • beginWork

  • completeUnitOfWork

  1. jsx 经过 babel 转变成 render 函数

  2. create update

  3. enqueueUpdate

  4. scheduleWork 更新 expiration time

  5. requestWork

  6. workLoop大循环

  7. Effect List

  8. commit

  • 能介绍一下 hook 吗

    • 比起 hoc,hook 的复用性高
  • useState、useEffect、useRef 用法

  • 优化 usecallback、useMemo

  • 情景题,做一个直播弹幕

    • 字幕的速度,大小
  • requestAnimationFarme 和 setTimeout 区别

  • 弹幕节流问题

  • socket 和轮询优缺点,弹幕池的设计

  • 如何避免弹幕碰撞(这个我答得不好,后来搜索一下有一个飞机场算法)

4 面

这一面就是聊人生,扯得比较远。讲了一下产品一般盈利套路,如何拉新、留存、激活、转换和收益。以前在网易 CC 电竞做的事情。对中国电竞前景的看法。

Bigo

1 面

由于是年前面的,所以在会议室面

  • 自我介绍

  • 介绍项目

  • 你项目用到线形代数,我来考考你记不记得可逆矩阵的逆矩阵求法。

    • 当场白板可逆矩阵的逆矩阵求法
  • 求一下三个三元一次方程

    • 当场白板用克拉默法则求出方程 x,y,z 的解
  • 然后写一下 matrix.js 里面的优化方程(虽然我也不知道他是什么原理)

  • 如何使用尽可能少的空间做矩阵的转置

    • 本质上就是867. 转置矩阵

技术征文图

然后有白板写了一下

  • 能讲讲欧拉角和旋转矩阵吗,还有他们的相互转换

    • 我:???不过之前做项目有 AR 集成,调用接口时候用到,所以勉强讲了一点,但是转换公式我就不会写了

做到上面,我就十分懵逼,我是不是面错岗位了。

技术征文图

然后是情景题,当场设计系统。

情景以下:

  • 这是一个多人在线协同网页

  • 主要做的是视频标识系统,用来训练 AR 用的模型

  • 并且同一时间,用一视频帧可以有多个人标识

emm。。。。那我大概知道为何之前问我这么多数学问题

这个项目的难点有以下

  • 视频的时间帧的确定

    • 由于视频中会存在 I 帧、P 帧、B 帧作为干扰,所以一个视频 25 帧的话,但是实际上不是每一秒都是 25 帧的,每秒帧的数目是动态的
  • 但是视频信息又对应地方 DTS 即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据,和 PTS 即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。我们只需要拿到 PTS 就可以了

  • 绘画过程中 canvas 的优化

    • canvas 应该分两层,一层是没有选择的图形,一层是选中的图形,当图形选中时候会提升到编辑区域的 canvas
  • 对于不规则图形,选择判断方法使用射线法思路,带入公式就可以知道图形是否被选择

  • 多人协同问题,他们之间如何互相通知

    • 使用信令服务器,用 websocket 连接
  • 如果两个人以上同时对一个标签做处理,这种冲突如何处理

    • 其实这个在我做在线白板时候会遇到的问题,这种问题可以类比成游戏中的状态同步和帧同步这两种解决办法,就和面试官扯了一下。

面完情景题,就做算法题,题目也是很奇怪的。

  • 第一题:洗牌算法,这个可以

  • 第二题:假设有偶数位的整数,将整数分开两边,然后对每边的每个数组的每一位求总和,当两边的总和相对就认为这组数符合要求,求2n位数的符合要求数占总数的多少。。。。。有点晕

  • 例子:287962 可以分成 287 962,其中 2 + 8 + 7 = 9 + 6 + 2,那么他就是符合要求的。

2 面

可能一面比较难,二面就比较随便:

  • 浏览器缓存策略

  • 跨域处理

  • https 握手

  • http2 特性

  • tcp 三次握手

  • 从 url 到页面显示

  • redux 和 mobx 的差异

  • tree-shaking

  • 项目的性能优化

  • css 的 BEM 规范

  • 当场设计一个 toast

  • LRU 实现

  • DNS 的路径选择用了啥算法

3 面

聊得比较广,没啥重点

YY

1 面
  • mvvm 和 mvc 模型区别

  • mvvm 的实现

  • 了解 fiber 吗

    • 答案之前有
  • 了解 hook 吗

    • 答案之前有
  • 为何 react 点击事件放在 settimeout 会拿不到 event 对象

    • react 的事件合成
  • setState 是异步还是同步

    • 本质上都是同步,只不过改变 state 的时机不同
  • 由一个是是否批量更新变量来决定

  • 放在 setTimeout 就能实时改变

  • 有用过 node 吗,讲讲流

  • koa2 和 express 区别

    • express 是大而全有路由等,koa2 小而精通过中间件
  • koa2 能使用 async await,express 不能

  • koa2 有洋葱模型和 ctx 上下文,express 没有

  • 讲讲洋葱模型

  • 实现一个函数 compose([fn1,fn2,fn3…]) 转成 fn3(fn2(fn1()))

    • 这个本质上就是中间件实现逻辑,之前看了 Koa2 一点源码,还好记得
  • koa2 和 egg 的区别

    • egg 是在 koa2 上的封装
  • egg 有 controller,service,router

  • 约定了文件目录结构

  • 鉴权有了解过了

    • Seesion/cookie
  • Token

  • OAuth

  • SSO

  • 还好项目都涉及过,虽然不是我用node写的,是后端写的,但是那时候好奇问了一下,并且查了一些资料,勉强答出来

2 面
  • 浏览器缓存策略

  • 跨域处理

  • https 握手

  • xss 和 csrf 攻击

  • Typscript 有了解吗,能讲讲吗

    • 接口
  • 枚举

  • 泛型

  • webpack 优化

  • tree-shaking

  • HMR 实现原理

  • nginx 有了解吗

    • 扯了一下跨域如何配置/转发
  • 缓存策略配置

  • 地址重定向配置

  • 场景题,做一个页面下雪

    • 写一个粒子 Class,里面有粒子、大小、图片,每秒移动的距离
  • 一个粒子控制器 Class,包含粒子数量、分布情况,粒子的下落速度

  • 用 requestanimationframe 绘画动画

  • 用 css3 开启硬件 GPU 加速

3 面

三面也是聊得很广,基本木有前端。

学习过程


其实也没有太过特意去准备面试,其实都是靠平时积累的,在 2019 年开始我就制定了自己的学习计划了,并且每天都坚持学习。可参考 lien的每日学习

以下会分为:

  1. 计算机基础

  2. 前端专业知识

  3. 学习心得

顺序有优先度之分,之所以把计算机基础放在第一位,是因为经过这些面试发现计算机基础考察还有比前端还要多,甚至有些公司面试都不怎么问我前端了。

计算机基础

tip:里面涉及很多都是极客时间的课程,然而我并没有打广告。推荐是因为我看完后真心觉得讲的好,当然好是指容易让初学者了解和上手,深度还是去看专门的权威书做普通吧。

数据结构和算法

学习办法不是一开始就刷题,要先学点入门。

  1. 入门方式有很多种看书看视频,边看边敲。

  2. 然后就可以上网看别人面经和一些 leetcode 大神总结的经典题目,按照分类开始刷了。

  3. 每道题至少做 3 次,第一次时候遇到不会就不要想很久,8 分钟没有思路就看答案。因为大家一开始都是没啥思路,只有做多多总结才会慢慢有思路。做完后一周后再做第二次。准备跳槽时候再做第三次。

  4. 算题顺序为算法面试通关 40 讲、剑指 offer、字节跳动专栏、自己总结的高频题。

我刷的题目也不多,就 100 来道,和别人比起就差远了。

技术征文图

但是我做的题目范围比较广,而且都是自己总结高频再去做,命中的几率比较大。

基本数据结构

  • 数组

  • 队列和栈

  • 链表

  • 二叉树

  • hash

常见的算法

  • DFS

  • BFS

  • 滑动窗口(双指针)

  • 回溯

  • 动态规划

  • 贪心(其实动态规划可以解决)

  • 排序

  • 二分查找

参考资料:

  • JavaScript版 数据结构与算法,这个适合新人学习,入门基本。

  • 极客时间- 数据结构与算法之美 在有基础上看这个会更好,里面github有js实现方式,自己动手敲一遍

  • 极客时间- 算法面试通关 40 讲这门课真的是好,里面都是高频经典的题目。

  • leetcode 字节跳动专栏

  • leetcode 剑指 offer

blog:

  • awesome-coding-js用 JavaScript 实现的算法和数据结构

  • labuladong这个动态规范讲得真的好

  • YaxeZhang/Just-Code针对面试训练算法题, 目前包括字节跳动面试题、 LeetCode 和剑指 offer

网络

网络是前端重要中的重要,也是面试高频的范围。很多人都是一开始就去看计算机网络、TCP/IP 协议、这些书入门,也不是说不好,但是对于新手入门门槛可能太高,还没看几页就放弃了。可以一开始看点视频跟着作者一起来抓包,慢慢熟悉。

观看顺序:

  • 极客时间-透视 HTTP 协议HTTP 作为前端最经常接触而且相对独立,可以先学习这个,再学期其他层。

  • 极客时间-趣谈网络协议作者生动用例子解释网络各层的作用和他们之间的关系,在此形成一个整体的架空,方便后面细节的学习

  • 极客时间 - Web 协议详解与抓包实战。这门课从高层到底层,讲解每一层的细节,由于里面讲解很详细也有很多理论知识,如 RSA 算法、基于椭圆曲线的 ECDH 算法等等可以考虑跳过

最后补充的书籍

  • 图解 http 协议

  • 图解 tcp 协议

  • TCP/IP 详解(第一卷)

tips:

对于前端来说,http,http2,https 的握手是高频题,要主要复习。

其他

本来想聊聊计算机组成原理、操作系统和编译原理,但是一个我学得不精,第二面试也没有怎么问,操作系统就问 linux 的一些简单指令和写一下 Jenkins 的脚本而已。或者后端对这方面会问得比较多。

前端专业知识

前端基础-JS

以下必须要十分熟悉:

  • 类型,涉及以下:

    • 类型种类
  • 判断

  • 转换

  • 深度拷贝

  • 闭包,涉及以下:

    • 作用域
  • v8 垃圾回收

  • 变量提升

  • 异步,涉及以下:

    • Promsie 的历史,用法,简单手写 Promsie 实现
  • async await 原理,generator

  • 宏任务与微任务区别

  • 原型链,涉及以下

    • prototype和 __proto__
  • 继承

  • oop 编程思想

  • 模块化

    • CommonJS 和 ES6 module
  • AMD 与 CMD 区别(比较旧可以忽略)

  • ES6 特性

    • let const
  • 箭头函数

  • Set、Map、WeakSet 和 WeakMap

  • 之前提及的 Promsie,async,Class,Es6 module

参考资料:

先做一份自我检测,一名【合格】前端工程师的自检清单。然后根据自己薄弱点去看相关资料。

书籍:

入门

  • 《JavaScript高级程序(第三版)》

  • 《你不知道的JavaScript(上)》

  • 《JavaScript 忍者秘籍》(一定要买第二版)

  • 《阮一峰 ES6入门》

BLOG:

  • 前端进阶之道

  • 前端面试与进阶指南

  • ConardLi 的 blog

  • 木易杨前端进阶

  • FE-Interview

  • 冴羽的博客

掘金好文章:

  • (1.6w字)浏览器与前端性能灵魂之问,请问你能接得住几个?(上)

  • (建议收藏)原生JS灵魂之问, 请问你能接得住几个?(上)

  • (建议精读)原生JS灵魂之问(中),检验自己是否真的熟悉JavaScript?

  • (2.4w字,建议收藏)???原生JS灵魂之问(下), 冲刺???进阶最后一公里(附个人成长经验分享)

  • 中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂(上)

  • (中篇)中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂

  • (下篇)中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂

付费好东西:

对知识付费其实是好事情,站在巨人的肩膀上看东西才会远。

  • 前端面试之道|比较基础的前端知识,适合新人

  • 前端开发核心知识进阶| 从基础出发,由浅入深,还有关于很多工程方面的文章,十分推荐。

前端基础-浏览器

有以下比较经典的问题:

  • 缓存策略:协商缓存和强缓存

  • 页面的渲染过程

  • 页面性能优化

参考资料:

  • 浏览器工作原理与实践。这个也是个人十分推荐,因为本人看过《webkit技术揭秘》,发现书上很多东西都是讲浏览器一些实现方式,一堆 C++ 十分难受,但是这个专栏却用十分简单生动的方式来讲述浏览器本质,个人收获很多。

  • 《webkit技术揭秘》

前端基础-css
  • css 选择器优先度

  • rem、em、vh、vw 和 px 的关系,以及移动端适配方式

  • 清除浮动

  • 盒子模型

  • flex

  • 层级上下文

  • 各种布局

前端框架-vue
  1. 第一个层次:使用
  • provide / inject

  • pros emit

  • listen

  • event bus

  • 自行实现 dispatch 和 broadcast 方法

  • vue 的生命周期

  • vue 全家桶使用,vuex,vue-router

  • data,computer,watcher使用

  • 组件通信

  • 第二层:原理

    • 如何简单实现一个mvvm模型
  • new vue 时候发生什么,每个生命周期对应的源码做了什么

  • data,watcher,computer的源码实现

  • nextTick 的原理

  • 指令的本质

  • vue 的性能优化

  • Diff 本质

  • 第三层:组件的实现

  • 参考资料:

  1. 基础使用:
  • jspang的vue教程

  • Vue2.0开发企业级移动端音乐Web App

  • 前端成长必经之路 组件化思维与技巧

  • 源码:

技术征文图

技术征文图

    • Vue.js源码全方位深入解析做补充。电子书:《Vue.js 源码揭秘》对于router,vuex,slot,keep-alive有详细解释。
  • 尤雨溪教你写vue 高级vue教程 源码分析!!!这个我特意去fronted master冲了几百元,没想到居然有搬运。

  • 最后看完就做一下题目,看看自己能达到那种水平吧。12道vue高频原理面试题,你能答出几道?

  • 《深入浅出Vue.js》, 这本书真的好,作者每单介绍一个部分的时候,都会由最简单抽象的一个demo,一步一步变成框架实际的样子,最后拿你写的demo和框架实际的对比,分析双方优缺点。

  • 要先看剖析 Vue.js 内部运行机制把手教你如何写一个最小mvvm模式,mvvm是最核心的思想。当你能懂下面的图时候,那么可以进入下一步了

  • 组件

    • vant
  • View

  • 先看一下别人的写组件的经验 Vue.js 组件精讲。看完之后就开始动手自己模仿别人的组件了。

  • 推荐模仿对象:

前端框架-react

使用:- Class 的生命周期 - Hooc 高阶组件 - Hook 的使用 - react-router 的使用 - Context - redux(包括mobx或saga)

参考资料:

  • jspang的react教程

  • Hooks 重构旅游电商网站火车票

  • React.js 小书先来简单实现一个mvc模型的react吧。

然后 react 最难就是 fiber,fiber 的代码实现十分复杂,这时候无需太过关注代码,只需要知道,fiber 是解决什么问题而诞生,以及相关的概念就好。

推荐按以下顺序阅读文章

  1. 这可能是最通俗的 React Fiber(时间分片) 打开方式这文章如标题,真是最通俗易懂。

  2. Deep In React之浅谈 React Fiber 架构

  3. Fiber 内部: 深入理解 React 的新 reconciliation 算法

  4. 如何以及为什么 React Fiber 使用链表遍历组件树

有能力者,可以直接科学上网看原文吧

  1. Lin Clark - A Cartoon Intro to Fiber - React Conf 2017

  2. Inside Fiber: in-depth overview of the new reconciliation algorithm in React

  3. In-depth explanation of state and props update in React

  4. The how and why on React’s usage of linked list in Fiber to walk the component’s tree

  5. Practical application of reverse-engineering guidelines and principles

以下按自己喜欢挑选吧:

  • react 的事件机制
  1. 【React深入】React事件机制

  2. 谈谈React事件机制和未来(react-events)

  • react 调度机制
  1. 【React深入】setState的执行机制

  2. 再谈react setState-setState如何处理更新?

  • Hook
  1. react hooks的诞生

  2. react hooks进阶与原理

  • yck 系列
  1. 剖析 React 源码:先热个身

  2. 剖析 React 源码:render 流程(一)

  3. 剖析 React 源码:render 流程(二)

  4. 剖析 React 源码:调度原理

  5. 剖析 React 源码:组件更新流程(一)

热身做完,直接上战场吧:

视频:React源码深度解析 高级前端工程师必备技能

电子书:React 源码解析

惭愧,我到现在还没看完。

看得差不多就做点题目吧:

  • 中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂

学习笔记

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue等等

HTML/CSS

**HTML:**HTML基本结构,标签属性,事件属性,文本标签,多媒体标签,列表 / 表格 / 表单标签,其他语义化标签,网页结构,模块划分

**CSS:**CSS代码语法,CSS 放置位置,CSS的继承,选择器的种类/优先级,背景样式,字体样式,文本属性,基本样式,样式重置,盒模型样式,浮动float,定位position,浏览器默认样式

HTML5 /CSS3

**HTML5:**HTML5 的优势,HTML5 废弃元素,HTML5 新增元素,HTML5 表单相关元素和属性

**CSS3:**CSS3 新增选择器,CSS3 新增属性,新增变形动画属性,3D变形属性,CSS3 的过渡属性,CSS3 的动画属性,CSS3 新增多列属性,CSS3新增单位,弹性盒模型

JavaScript

**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
react 调度机制

  1. 【React深入】setState的执行机制

  2. 再谈react setState-setState如何处理更新?

  • Hook
  1. react hooks的诞生

  2. react hooks进阶与原理

  • yck 系列
  1. 剖析 React 源码:先热个身

  2. 剖析 React 源码:render 流程(一)

  3. 剖析 React 源码:render 流程(二)

  4. 剖析 React 源码:调度原理

  5. 剖析 React 源码:组件更新流程(一)

热身做完,直接上战场吧:

视频:React源码深度解析 高级前端工程师必备技能

电子书:React 源码解析

惭愧,我到现在还没看完。

看得差不多就做点题目吧:

  • 中高级前端大厂面试秘籍,寒冬中为您保驾护航,直通大厂

学习笔记

主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue等等

HTML/CSS

**HTML:**HTML基本结构,标签属性,事件属性,文本标签,多媒体标签,列表 / 表格 / 表单标签,其他语义化标签,网页结构,模块划分

**CSS:**CSS代码语法,CSS 放置位置,CSS的继承,选择器的种类/优先级,背景样式,字体样式,文本属性,基本样式,样式重置,盒模型样式,浮动float,定位position,浏览器默认样式

[外链图片转存中…(img-UbcJ054Z-1713018061542)]

HTML5 /CSS3

**HTML5:**HTML5 的优势,HTML5 废弃元素,HTML5 新增元素,HTML5 表单相关元素和属性

**CSS3:**CSS3 新增选择器,CSS3 新增属性,新增变形动画属性,3D变形属性,CSS3 的过渡属性,CSS3 的动画属性,CSS3 新增多列属性,CSS3新增单位,弹性盒模型

[外链图片转存中…(img-W2PuRfBa-1713018061543)]

JavaScript

**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串

[外链图片转存中…(img-imxRXx7q-1713018061543)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-OMXXoJo2-1713018061543)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值