[关闭]
@Secretmm 2020-10-29T07:36:24.000000Z 字数 4166 阅读 494

题汇总

p6必备


加油加油加油

下面的题全部理解,30k稳了

重点

基础问题永远绕不开,前端技术面的考点无外乎:事件原理,闭包,调用栈,PromiseES6, 工程化,webpack, 性能优化,跨域,安全问题, ReactRedux 思想,Virtual DOMDiff 算法, 移动端布局,浏览器渲染原理,Event Loop 等还有手写代码,主要考察一些基本 API 和 ES6 的使用。最常见是在 ArrayString prototype 上写一个函数。比如 'abcd'.f() => 'd-c-b-a'还有一些常用的函数,比如 bind (好多家都考……),throttle, debounce 等总之,这些都是前端绕不开的概念,也建议可以真正的夯实基础,多看书,多总结。 对于前端同学来说 leetcode 上的 medium 题目应该就可以了。

关于自身项目

1.优化性能的点:
1.首屏白屏【骨架屏解决,动画代替,ssr服务端渲染】;
2.打包出来的js压缩,服务端gzipwebpack本身的压缩插件webpack.optimize.UglifyJsPlugin
3.图片webp, 图标用iconfont,小图片用base64webpack设置limit
4.pwa
5.使用缓存
6.异步加载cssjs动态插入,media替换,refer="preload"
6.按需加载js

2.vue@2的实现,你起码要说出依赖是如何被收集的,Watcher是如何被触发,AST是如何构建的(用的哪个库,基本原理),Virtual DOM的更新策略
3.技术上的难点,table组件
4.slug-ui按需引入

100 * 100Canvas 占内存多大?

参考链接:https://juejin.im/post/5bdeb357e51d4536140fc7df

没有答案

斜对角线打印

  1. [
  2. [1, 2, 3, 4, 5, 6],
  3. [11,23,35,345],
  4. [34, 4,65]
  5. ]
  6. // 1,
  7. // 2,11,
  8. // 3,23,34
  9. // 4,35,4
  10. // 5, 345, 65
  11. // 6

原型相关题目

函数执行顺序、作用域

setTimeOut

  1. for( var i = 0; i < 5; i++) {
  2. setTimeout(() => {
  3. console.log(i);
  4. }, 1000);
  5. }

再一问:如何改造成可以打印出 1,2,3,4,5
1)第一种方式,利用const 的特性

  1. for( var i = 0; i < 5; i++) {
  2. const j = i;
  3. setTimeout(() => {
  4. console.log(j);
  5. }, 1000);
  6. }

2)第二种方式, 利用promise

  1. for( var i = 0; i < 5; i++) {
  2. new Promise((resolve, reject) => {
  3. console.log(i);
  4. resolve();
  5. });
  6. }
  1. console.log('script start');
  2. async function async1() {
  3. console.log('async1');
  4. await async2();
  5. console.log('end');
  6. }
  7. async function async2() {
  8. console.log('async2');
  9. }
  10. setTimeout(function() {
  11. console.log('setTimeout');
  12. }, 0);
  13. async1();
  14. new Promise(function(resolve) {
  15. console.log('promise1');
  16. resolve();
  17. }).then(function() {
  18. console.log('promise2');
  19. });
  20. console.log('script end');

闭包

  1. function Foo() {
  2. var i = 0;
  3. return function() {
  4. console.log(i++);
  5. }
  6. }
  7. var f1 = Foo(),
  8. f2 = Foo();
  9. f1();
  10. f1();
  11. f2();

解释:

  1. function Foo() {
  2. var i = 0;
  3. return function() {
  4. console.log(i++);
  5. //上面那句打印,拆分为两句:console.log(i); i = i + 1;
  6. //假如是 console.log(++i);
  7. //则顺序为: i = i + 1; console.log(i);
  8. }
  9. }
  10. var f1 = Foo(),
  11. f2 = Foo();
  12. f1();
  13. // 第一次执行f1()时,按照上面拆分的顺序,先打印出0,i变为1;
  14. f1();
  15. // 第二次执行f1()时,一般来说函数执行完后它的局部变量就会随着函数调用结束被销毁,但是此题Foo函数返回了一个匿名函数的引用(即一个闭包),它可以访问到foo()被调用产生的环境,而局部变量i一直处在这个环境中,只要一个环境有可能被访问到,它就不会被销毁,所以说闭包有延续变量作用域的功能。所以打印出1。
  16. f2();
  17. //这里考引用地址,两个变量f1、f2是调用foo()函数之后的结果,foo()函数返回的是创建的一个匿名函数,因此f1 f2应该是两个不同的函数对象。所以打印出 0

作用域

  1. var bb = 1;
  2. function aa(bb) {
  3. bb = 2;
  4. console.log(bb);
  5. };
  6. aa(bb);
  7. console.log(bb);
  8. // 2
  9. // 1
  1. var bb = 1;
  2. function aa(cc) {
  3. bb = 2;
  4. console.log(bb);
  5. };
  6. aa(bb);
  7. console.log(bb);
  8. // 2
  9. // 2
  1. var bb = 1;
  2. function aa() {
  3. bb = 2;
  4. console.log(bb);
  5. };
  6. aa(bb);
  7. console.log(bb);
  8. // 2
  9. // 2

正则

1.请实现一个函数,将一个字符串中的每个空格替换成%20。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy

  1. function replaceSpace(str)
  2. {
  3. return str.replace(/\s/g, '%20');
  4. }

2.取到一个url的参数值

privat关键字实现

1、用闭包
2、用symbol类型做属性名

async/await实现多个异步Promise并发执行

  1. async () => {
  2. var p1 = genP1();
  3. // genP1,genP2各返回一个Promise实例,返回后内部同步代码已经执行,
  4. // p1,p2同时处于等待状态
  5. var p2 = genP2();
  6. await p1;
  7. await p2;
  8. }

实现一个Promise

富文本编辑的实现思路

移动端虚拟键盘遮挡页面问题

el.scrollIntoView()将input滚动到可视区域

http协议中content-type字段有哪些值?json和form有什么区别?

Content-Type实体头部用于指示资源的MIME类型media type
MIME由类型与子类型两个字符串中间用'/'分隔而组成。不允许空格存在。type/subtype, type 表示可以被分多个子类的独立类别。subtype 表示细分后的每个类型。
详见 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注