JS基础
- 浅析javascript调用栈:
函数栈、内存、JS执行过程分析、同步执行、异步执行 - 从一道面试题谈谈对EventLoop的理解:
堆、栈、队列、宏任务、微任务。是我看过的对event loop的讲的最清楚的一篇文章。 - 作用域链
- 原型链
- 闭包
- 继承:
原型链继承、class继承 - var、let、const区别:
(1)作用域 (2)var变量定义提升 (3)let、const不能重复定义 (4)const不能重复赋值 - 改变this指针的方法:
call、apply、bind - call、apply、bind的作用、区别、手写实现:
- 相同点:
改变this指针、第一个参数都为this要指向的对象 - 不同点:
(1)传参:apply后只能传数组,call和bind后面可以传多个参数;(2)bind返回函数, call,apply立即执行
- 相同点:
- 防抖与节流的原理与区别:
防抖:setTimeout,节流:规定一段时间内只执行一次。适用于:mouseover|scroll时计算、input联想只提交最后一次输入 - 实现链式调用:
关键点:每次调用都返回自身 - 类数组和数组的区别,类数组如何转换成数组:
- 区别:类数组是长的像数组的普通对象,key数index下标数,value为值;数组是具有length的特殊对象, 有自己特有的方法,改变长度时length会自动更新。
- 转换:
Array.from(类数组)、Array.prototype.slice.call(类数组)
- Promise实现异步的原理、特性、优缺点、手写实现:
返回的是函数,有then、catch、finally、all等方法处理不同的回调,比以前传回调,做判断看上去更直观 - 实现promise.all:
请求结果返回时判断已经返回结果的个数,等于请求总数时触发回调\ - Common.js 和 es6 module 区别
- HTTP2与HTTP1的区别
- Map和Set的理解
- 首屏渲染优化:
(1)加载方面:速度(CDN、(强缓存和协商缓存)服务器缓存、HTTP2代替HTTP1)、减少资源大小(代码压缩、图片压缩、代码拆分) 减少请求数量(http强缓存,缓存重复请求的数据,合并请求如雪碧图)、优化加载时间(预加载、懒加载、按需加载)、优化加载方式(SSR、SSG静态站点生成方案)
(2)渲染方面:骨架屏、HTML(CSS顶部,SCRIPT底部、减少DOM数)、CSS和JS(减少重排重绘、减少CSS选择器的复杂性)、动画效果(CSS3代替GIF图,使用transform, opacity目的也是为了减少重排重绘)
- JavaScript 里的奇葩知识:
看运行结果 - 掌握 JavaScript ES6 中的 Symbol 类型
避免冲突,值是唯一的标识符 - ES6 Class 继承与 super:
子类constructor中使用this前必须使用super - ES6问题集合
手写功能
- 前端面试常见的手写功能:看到最全的一个
- JavaScript手写代码无敌秘籍: 相对上条增加了
JSON.stringify、JSON.parse - JS实现1万的阶乘
- 数组去重:Array.from(new Set([1,2,3,3,4,6,2]))
- 查找数组中的某个元素的方法:
indexOf、includes、new Set(...[1,2,3,4]).has(2)、find - 上列的数组查找的方法哪个效率最高:
数据量<1万时,set.has > includes, >1万条时,includes > set.has, indexOf > find - 求两个数组交集:a.filter(x => bArySet.has(x))
- 求两个数组并集:Array.from(new Set(a.concat(b)))
- 对象deepCopy
Vue
- vue双向绑定原理
- vue更新dom过程:
异步,nextTick - Vue.nextTick 的原理和用途
- vue-cli中都包含什么:
vue-router、vuex、axios、sass/less、element ui/vux - vue中data为什么必须是个函数:
实例独立作用域、引用类型数据会造成组件数据混淆 - vue组件传值方式:
⑴父传子:属性(props)、$refs.child_id.name、⑵子传父:$emit、$parent、依赖注入(provide和inject)查看依赖注入API⑶ vuex
- 父子组件加载顺序、销毁顺序
- mount时:
父beforeCreated、created、beforeMount->子beforeCreated、created、beforeMount、mounted->父mounted - 子组件update时:
父beforeUpdate->子beforeUpdate、updated->父updated - 父组件update时:
父beforeUpdate->子deactived->父updated。deactived指被 keep-alive 缓存的组件停用时调用。 - 销毁时:
父 beforeDestroy->beforeDestroy、destoryed->父destoryed - 加载多个子元素时:
- mount时:
- Vue全局注册组件
- vue组件中style scoped的原理及遇到过的问题
-
作用:组件样式私有化,不影响全局样式
-
原理:vue把含有scoped样式属性的组件,编译DOM时,把DOM中使用到class的元素、CSS属性选择器都加上一个唯一标识(data-v-xxxxxx)。如果组件内部还有组件,只会给外层组件的标签加唯一属性,不影响内部组件。
-
React
- ReactDOM.createPortal与ReactDOM.render的区别
- react的子组件更新时引起父组件渲染,怎么优化:
useMemo、shouldComponentUpdate - React知识点汇总
- 为什么react在16.8的版本里加入了Hooks?(zh-hans.reactjs.org/docs/hooks-…)
- React hooks原理:其中包含以下问题
- 为什么只能在函数最外层调用 Hook?为什么不要在循环、条件判断或者子函数中调用。
- 自定义的 Hook 是如何影响使用它的函数组件的?
- “Capture Value” 特性是如何产生的?
- React's Hooks 的实现原理