@Secretmm
2020-10-29T07:36:24.000000Z
字数 4166
阅读 494
p6必备
下面的题全部理解,30k稳了
基础问题永远绕不开,前端技术面的考点无外乎:事件原理,闭包,调用栈,Promise
,ES6
, 工程化,webpack
, 性能优化,跨域,安全问题, React
、Redux
思想,Virtual DOM
,Diff
算法, 移动端布局,浏览器渲染原理,Event Loop
等还有手写代码,主要考察一些基本 API 和 ES6 的使用。最常见是在 Array
、String prototype
上写一个函数。比如 'abcd'.f() => 'd-c-b-a'
还有一些常用的函数,比如 bind
(好多家都考……),throttle
, debounce
等总之,这些都是前端绕不开的概念,也建议可以真正的夯实基础,多看书,多总结。 对于前端同学来说 leetcode
上的 medium
题目应该就可以了。
1.优化性能的点:
1.首屏白屏【骨架屏解决,动画代替,ssr服务端渲染】;
2.打包出来的js
压缩,服务端gzip
,webpack
本身的压缩插件webpack.optimize.UglifyJsPlugin
;
3.图片webp
, 图标用iconfont
,小图片用base64
【webpack
设置limit
】
4.pwa
5.使用缓存
6.异步加载css
【js
动态插入,media
替换,refer="preload"
】
6.按需加载js
2.vue@2
的实现,你起码要说出依赖是如何被收集的,Watcher
是如何被触发,AST
是如何构建的(用的哪个库,基本原理),Virtual DOM
的更新策略
3.技术上的难点,table
组件
4.slug-ui
按需引入
100 * 100
的 Canvas
占内存多大?DOM
事件的绑定的几种方式webpack
的入口文件怎么配置,多个入口怎么分割啥的,我也没太听清楚。Babel
的一个插件:transform-runtime
以及stage-2
,你说一下他们的作用。webpack
配置用到webpack.optimize.UglifyJsPlugin
这个插件,有没有觉得压缩速度很慢,有什么办法提升速度。DOM
事件中target
和currentTarget
的区别JSONP
的原理和实现以及cors
怎么设置。webpack
的loader
,他的原理以及啥的,记得也不太清楚。webpack
的一些原理和机制,怎么实现的。babel
把ES6
转成ES5
或者ES3
之类的原理是什么,有没有去研究。git
大型项目的团队合作,以及持续集成啥的。JS
的API
有哪些应用到了函数柯里化的实现?Commonjs
,UMD
,CMD
规范的了解,以及ES6
的模块化跟其他几种的区别,以及出现的意义。实现一个eventEmit
, addEventListener
, removeEventListener
,once
, emit
算法中时间复杂度和空间复杂度,分别对应计算机什么硬件资源的使用?
0.1+0.2 ?= 0.3
HTTP
vs HTTPS
的区别?HTTPS
加密连接建立的过程?Flexbox
弹性盒模型是什么?CSS
画个扇形?画个三角形?deepCopy
接收任意类型的值。实现一个Promise
进程线程之间的区别,进程之间怎么通信,线程之间怎么通信
localStorage
sessionStorage
的区别 requestAnimationFrame
的polyfillrequestAnimationFrame
和requestIdleCallback
的区别XSS
,CSRF
攻击promise list
,一次最多只能执行n
个,当全部执行完成之后,调用callback send(list, n, callback)
css
两边定宽,中间自适应[圣杯布局]splice
会不会改变原数组React Context
和 reduxmobx
的区别JS
是面向对象还是基于对象JS
实现继承的多种方式HTTP
和 WebSocket
的区别TCP
和 UDP
的区别TCP
的三次握手四次挥手React
实现显示当前时间的公用组件,时间随着当前时间实时变化,并有哪些优化方式useEffect
的使用及优化canvas
如何实现按比例占满全屏JS
实现数据结构双向循环列表,并实现添加节点方法webpack
工程化可以有哪些优化的方法
[
[1, 2, 3, 4, 5, 6],
[11,23,35,345],
[34, 4,65]
]
// 1,
// 2,11,
// 3,23,34
// 4,35,4
// 5, 345, 65
// 6
for( var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 1000);
}
再一问:如何改造成可以打印出 1,2,3,4,5
1)第一种方式,利用const 的特性
for( var i = 0; i < 5; i++) {
const j = i;
setTimeout(() => {
console.log(j);
}, 1000);
}
2)第二种方式, 利用promise
for( var i = 0; i < 5; i++) {
new Promise((resolve, reject) => {
console.log(i);
resolve();
});
}
console.log('script start');
async function async1() {
console.log('async1');
await async2();
console.log('end');
}
async function async2() {
console.log('async2');
}
setTimeout(function() {
console.log('setTimeout');
}, 0);
async1();
new Promise(function(resolve) {
console.log('promise1');
resolve();
}).then(function() {
console.log('promise2');
});
console.log('script end');
function Foo() {
var i = 0;
return function() {
console.log(i++);
}
}
var f1 = Foo(),
f2 = Foo();
f1();
f1();
f2();
解释:
function Foo() {
var i = 0;
return function() {
console.log(i++);
//上面那句打印,拆分为两句:console.log(i); i = i + 1;
//假如是 console.log(++i);
//则顺序为: i = i + 1; console.log(i);
}
}
var f1 = Foo(),
f2 = Foo();
f1();
// 第一次执行f1()时,按照上面拆分的顺序,先打印出0,i变为1;
f1();
// 第二次执行f1()时,一般来说函数执行完后它的局部变量就会随着函数调用结束被销毁,但是此题Foo函数返回了一个匿名函数的引用(即一个闭包),它可以访问到foo()被调用产生的环境,而局部变量i一直处在这个环境中,只要一个环境有可能被访问到,它就不会被销毁,所以说闭包有延续变量作用域的功能。所以打印出1。
f2();
//这里考引用地址,两个变量f1、f2是调用foo()函数之后的结果,foo()函数返回的是创建的一个匿名函数,因此f1 f2应该是两个不同的函数对象。所以打印出 0
var bb = 1;
function aa(bb) {
bb = 2;
console.log(bb);
};
aa(bb);
console.log(bb);
// 2
// 1
var bb = 1;
function aa(cc) {
bb = 2;
console.log(bb);
};
aa(bb);
console.log(bb);
// 2
// 2
var bb = 1;
function aa() {
bb = 2;
console.log(bb);
};
aa(bb);
console.log(bb);
// 2
// 2
1.请实现一个函数,将一个字符串中的每个空格替换成%20
。例如,当字符串为We Are Happy
.则经过替换之后的字符串为We%20Are%20Happy
。
function replaceSpace(str)
{
return str.replace(/\s/g, '%20');
}
2.取到一个url
的参数值
1、用闭包
2、用symbol类型做属性名
async () => {
var p1 = genP1();
// genP1,genP2各返回一个Promise实例,返回后内部同步代码已经执行,
// p1,p2同时处于等待状态
var p2 = genP2();
await p1;
await p2;
}
el.scrollIntoView()将input滚动到可视区域
Content-Type
实体头部用于指示资源的MIME
类型media type
。
MIME
由类型与子类型两个字符串中间用'/'分隔而组成。不允许空格存在。type/subtype
, type 表示可以被分多个子类的独立类别。subtype 表示细分后的每个类型。
详见 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types