前端学习文章总结
收录在此的一定都是我看过的,并且认为还不错的。赠人玫瑰而已。
JS基础
冴羽大大的博客 - JavaScript深入系列、JavaScript专题系列、ES6系列
属于比较成系统的js进阶博客,建议细读。
原型和原型链图片记录
面试官:说说执行上下文吧
这个系列算是对冴羽大大文章的一次重构,更偏面试向,可以看看。
这一次,彻底弄懂 JavaScript 执行机制
有很多Event Loop相关文章,但是这篇是相关译文之中比较优秀的。
做完这48道题彻底弄懂JS继承(1.7w字含辛整理-返璞归真)
js 深浅拷贝
函数柯里化
迭代器和生成器
# js基础题
函数声明和函数表达式有什么区别与联系,应该怎样选择和使用?
# 变量提升、闭包等题
let深入理解---let存在变量提升吗?
ES6相关
关于 ES6 中 Promise 的面试题
文章题型比较全,但是有一些题目的答案不一定准确。
BAT前端经典面试问题:史上最最最详细的手写Promise教程
手写promise的常规教程,值得多读几遍。
Promise 必知必会(十道题)
一些promise 的细节把握,建议配合event loop的微任务和宏任务一起食用。
因为 Promise.prototype.then和Promise.prototype.catch 方法返回promise 对象, 所以它们可以被链式调用。
箭头函数和普通函数的区别
ESM CommonJs
# Symbol 及其 Polyfill
ES6 Symbol之浅入解读
Symbol Polyfill 填坑之旅
指的一说的是 babel默认不自带symbol的polyfill,需要引入例如core.js之类的第三方库;
Vue
# 响应式、双向绑定
50行代码的MVVM,感受闭包的艺术
简单的demo之中感受Object.defineProperty劫持get/set的过程,以及为变量注册观察者来实现响应式的过程;可以使用Proxy来替换Object.defineProperty 来做延伸学习。
不好意思!耽误你的十分钟,让MVVM原理还给你
原理解释上更接近vue源码,启发computed和mounted如何实现。
面试官: 实现双向绑定Proxy比defineproperty优劣如何?
为什么Vue3.0不再使用defineProperty实现数据监听?
Object.defineProperty 并非不能监控数组下标的变化,Vue2.x 中无法通过数组索引来实现响应式数据的自动更新是 Vue 本身的设计导致的,不是 defineProperty 的锅。
Object.defineProperty 和 Proxy 本质差别是,defineProperty 只能对属性进行劫持,所以出现了需要递归遍历,新增属性需要手动 Observe 的问题。
Proxy 作为新标准,浏览器厂商势必会对其进行持续优化,但它的兼容性也是块硬伤,并且目前还没有完整的 polyfill 方案。
深入剖析Vue源码 - 揭秘Vue的事件机制
# 生命周期
Vue 生命周期源码剖析
你真的理解$nextTick么
# 数据状态 - 这一部分每台看懂,需要找时间看明白
Vuex、Flux、Redux、Redux-saga、Dva、MobX
文章整体写的很好,从多个角度对比里现在流行的数据管理机制,但是对只比较熟悉vue的朋友不太友好,做了解项。着重看实现原理与比较。
[译] 使用原生 JavaScript 构建状态管理系统
Vuex 源码解析
被问到了一个vuex源码如何注入的问题,有点束手无策;
# 组件通信
vue中8种组件通信方式, 值得收藏!
# 虚拟dom和diff算法
面试官: 你对虚拟DOM原理的理解?
让虚拟DOM和DOM-diff不再成为你的绊脚石
虚拟 DOM 到底是什么?(长文建议收藏)
前两篇主要侧重于对某个diff算法的理解; 相比来说第三篇更加学院派也更加全面。每次看diff算法都看不太明白,TODO。一般diff算法会单独拿出来说,比较react 和 vue 的演进过程,相比来说virutal-dom更容易懂一些。
# computed 和 watch
Vue.js的computed和watch是如何工作的?
借鉴:计算属性本质上是一个computed watch,侦听属性本质上是一个user watch。且它们其实都是vue对监听器的实现,只不过computed主要用于对同步数据的处理,watch则主要用于观测某个值的变化去完成一段开销较大的复杂业务逻辑。。能用computed的时候优先用computed,避免了多个数据影响其中某个数据时多次调用watch的尴尬情况。
css基础
本着css是硬桥硬马的功夫,还是多实践方能大成。
position-sticky 奇淫巧技,目前这种的话还是考虑如何实现一个sticky-footer吧。
Retina屏的移动设备如何实现真正1px的线?
文章有点古老,又看了下m.taobao已经不是用修改viewport来实现的了。算是一个小tips
回流与重绘:CSS性能让JavaScript变慢?
前端工程化
# Webpack
Webpack源码解读:理清编译主流程
简单总结一下 webpack 编译模块的基本流程:
调用webpack函数接收config配置信息,并初始化compiler,在此期间会apply所有 webpack 内置的插件;
调用compiler.run进入模块编译阶段;
每一次新的编译都会实例化一个compilation对象,记录本次编译的基本信息;
进入make阶段,即触发compilation.hooks.make钩子,从entry为入口: a. 调用合适的loader对模块源码预处理,转换为标准的JS模块; b. 调用第三方插件acorn对标准JS模块进行分析,收集模块依赖项。同时也会继续递归每个依赖项,收集依赖项的依赖项信息,不断递归下去;最终会得到一颗依赖树;
最后调用compilation.seal render 模块,整合各个依赖项,最后输出一个或多个chunk;
以上为简单的时序图
该作者的编译主流程以及后续文章读完让我对webpack有了新的认识,并且去学习了webpack源码,受益匪浅。
# HMR
轻松理解webpack热更新原理
Webpack HMR 原理解析
第 70 题: 介绍下 webpack 热更新原理,是如何做到在不刷新浏览器的前提下更新页面
# babel
babel 怎么把字符串解析成 AST,是怎么进行词法/语法分析的
babel 7 简单升级指南
了解babel7相比babel6都有哪些提升;
Node
Nodejs 进阶:解答 Cluster 模块的几个疑问
node中Cluster是如何开启多进程的?一个端口是否可以被多个进程监听? 可以
操作系统及网络
前端入门操作系统知识,这一篇就够啦!
这一篇我是没看完的,找时间回来补,希望不会打脸;
什么是进程?什么是线程?两者的关系?
简单好记的理解
JavaScript 单线程机制面试题
通杀 Event Loop 面试题
从 8 道面试题看浏览器渲染过程与性能优化
进程、线程 => 到浏览器的多进程,多线程 => 再到js执行的单线程,其中涉及到event loop,render tree, 渲染的过程中会涉及到的重绘与回流。能聊明白就算是ok;
Cookie 相关问题
发生跨域xhr请求时,即使请求URL的域名和路径都满足 cookie 的 Domain和Path,默认情况下cookie也不会自动被添加到请求头部中。
把图片变为base64的利与弊
Service Worker相关
浏览器缓存
浏览器缓存 - 2 了解下 Memory cache 和 Disk Cache 的区别
四种缓存机制 - Service Worker / Memory Cache / Disk Cache / Push Cache
一个 TCP 连接上面能发多少个 HTTP 请求
复习导图
2020年前端面试复习必读文章【超百篇文章/赠复习导图】
这篇文章很细致的归纳了前端复习思路,以导图的形式展现出来。
写给初中级前端的高级进阶指南
2万字 | 前端基础拾遗90问
面经
字节跳动面试官:请你实现一个大文件上传和断点续传
这道题对于没有了解过视频上传原理的同学还是比较有难度的,是其中可以演化为一下几种问法:
实现一个大文件的上传切片;
手写一个基于XMLHttpRequest的request请求;
promise.all并发限制;
23行代码实现一个带并发数限制的fetch请求函数;
有一说一,第二个链接评论中的方式更为简单;
用node接收多个文件进行拼接;
如何实现断点续传、暂停、进度条、秒传等等,是一个很综合的面试题;
实现cacheRequest(),相同资源ajax只发一次请求
考虑pending过程中如何处理cache的过程值得学习;
JSBridge的原理
发表评论 (审核通过后显示评论):