目录

前端代码题

闭包

  1. 输出什么? 如果想输出0、1、2、3、4、5怎么解决,至少两种方案
    for(var i=0; i<6; i++) {
      setTimeout(() => {
     console.log(i)
      })
    }

异步、Promise输出

  1. 输出什么

    async function async1 (){
    console.log("async1")
    await async2()
    console.log("async1 end")
    }
    console.log("scripts start")
    async1()
    async function async2() {
     await console.log("async2")
    }
    new Promise((resolve,reject)=>{
      console.log("promise1")
      resolve()
    }).then(()=>{
      console.log("promise2")
    })
    setTimeout(()=>{
      console.log("setTimeout")
    })
  2. 输出什么

    setTimeout(()=> console.log(1))
    new Promise(resolve => {
      resolve()
      console.log(2)
    }).then(_ => {
      console.log(3)
      Promise.resolve().then(_ => {
     console.log(4)
      }).then(_ => {
     Promise.resolve().then(_ => {
       console.log(5)
     })
      })
    })
    console.log(6)

this、作用域、声明前置、隐式转换

  1. 以下代码输出

    var a = function(){ this.b = 3 }
    var c = new a()
    a.prototype.b = 10
    var b = 7
    a()
    console.log(b)//3
    console.log(c.b)//3
  2. 代码输出什么

    function Foo() {
      getName = function () {
     console.log(1);
      }
    }
    var getName = function () {
      console.log(4);
    };
    function getName() {
      console.log(5);
    }
    Foo.getName = function () {
      console.log(2)
    }
    Foo.prototype.getName = function () {
      console.log(3);
    }
    Foo.getName()     
    getName()  	    
    new Foo.getName()    
  3. 隐式转换
    if ([]) console.log(1);
    if ([].length) console.log(2);
    if ([] == 0) console.log(3);
    if ({} === {}) console.log(4);

算法

  1. 给两个数组[1,2,3],[2,1,3,4],如果A包含于B返回1,B含于A返回2,其他返回0
  2. 无重复的字符串字串
  3. 合并两个有序链表
  4. 最长回文子串
  5. 最长无重复字符子串
  6. 搜索二叉树,找出第k大
  7. 很长的字符串返回出现次数最多的字母以及相应次数
  8. 多叉树的最大深度
  9. js实现树的深度优先搜索、广度优先搜索
  10. 返回前k个最小的数字组成的数组,保持相对顺序
  11. 给定一棵二元查找树,实现左右子树反转 用栈怎么实现
  12. 找出数组中第k大和第m大的数字相加之和 findTopSum(arr, k, m)【阿里前端实习2021/7】
  13. 给定一个带嵌套的数组,实现一个方法可获取嵌套数组的最大深度

手写

  1. 手写一个Promise.all (3)
  2. 手写Promise,包含简单的逻辑即可
  3. 用reduce实现map
  4. 手写一个repeat函数,要求每隔3秒alert一次helloWorld,总共输出4次
    function repeat(func, times, wait){
      ...
    }
    var rp = repeat(alert, 4, 3)
    rp('helloWorld')
  5. 字符串转化为数字
    // 'A' => 1
    // 'B' => 2
    // 'AA' => 27
  6. 手写观察者(3), 带once
  7. 代码题:写一个函数打印杨辉三角前n行
    [
     [1],
     [1,1],
     [1,2,1],
     [1,3,3,1],
     [1,4,6,4,1]
    ]
  8. 用call/apply实现bind
  9. 实现大数相加
  10. 手写防抖和节流 throttle/debounce = (fn, wait) => {}
  11. 实现并发控制
  12. 写一个instanceof的实现
  13. 字符串 转换为对象。 比如 a.b.c,
    {
    a: {
        b: {
            c: null
        }
    }
    }