智现未来20250224一面

秦篆原创面试vue3大约 2 分钟

  1. 算法 其实就是一个二叉树生成,印象中力扣或者牛客做过这道题,太久了还想了一会,一开始都没想起来怎么写,直接尬住
/*
使用 TypeScript 语法将没有层级的扁平数据转换成树形结构的数据
// 扁平数据 
[
    {   name: '文本1',   parent: null,   id: 1 }, 
    {   name: '文本2',   parent: 1,      id: 2 }, 
    {   name: '文本3',   parent: 2,      id: 3 },
    {   name: '文本4',   parent: null,   id: 4 },
    {   name: '文本5',   parent: 4,      id: 5 }
] 
// 树状数据 
[
    {   
        name: '文本1',   
        id: 1,   
        children: [
            {     
                name: '文本2',     
                id: 2,     
                children: [
                    {       
                        name: '文本3',       
                        id: 3,
                        children: [],   
                    }
                ]   
            }
        ] 
    }, {
        name: "文本4",
        id: 4,
        children: [
            {
                name: '文本5',
                id: 5,
                children: [],
            }
        ]
    }
] 
*/

// 反正力扣或者牛客上都有

interface TreeNode {
    name: string,
    parent?: number | null,
    id: number,
}

function convert2Tree(arr: TreeNode[]) {
    const map: Map<number, TreeNode> = new Map()
    const rootNode: TreeNode[] = [];

    // 遍历
    arr.forEach(item => {
        const node = {
            name: item.name,
            id: item.id,
            children: []
        }
        map.set(item.id, node)
        if (item.parent === null) {
            rootNode.push(node)
        } else {
            const parent = map.get(item.parent)
            if (parent) {
                parent.children.push(node)
            }
        }
    })
    return rootNode
}
  1. 作用域查找(完全答错) 一开始的直觉是没什么问题的,被问了两下有点不确定了,唉
function a(){
    let test;
  /* 作用域a */ 
  return function b(){  
    let test;
    /* 作用域链 b -> ? */ 
  }
}
function c(){
    let test;
  /* 作用域c */
  const fn = a();
  fn();
}
c()

如上的代码,假设test都有可能不存在的话,查找test的顺序是什么样子的?

变量 test 的查找顺序:

当 b() 被调用时,它会按照以下顺序查找 test:

b() 自己的作用域:首先在 b() 内部查找 let test;。如果存在,则使用这个 test

a() 的作用域:如果 b() 内部没有 test,则会沿着作用域链向上查找 a() 的作用域,查找 a() 中的 let test;

全局作用域:如果 a() 中也没有 test,则会继续向上查找全局作用域

具体执行过程: c() 被调用,创建 c() 的作用域,其中包含 let test;

c() 调用 a(),a() 创建自己的作用域,其中包含 let test;

a() 返回 b(),c() 将 b() 赋值给 fn

c() 调用 fn(),即 b() D b() 开始执行,首先在自己的作用域内查找 test:

如果 b() 内部有 let test;,则使用这个 test

如果 b() 内部没有 test,则向上查找 a() 的作用域,查找 a() 中的 let test;

如果 a() 中也没有 test,则继续向上查找全局作用域

  1. computed中,是怎么收集副作用函数的 首先明确是运行时收集,大致流程如下: 1.

  2. spa应用中,是怎么做到路由变化而页面不刷新的 使用了windows.history.pushState()或者window.history.replaceState()修改地址,并不会触发页面更新. 使用哈希方法,不会导致页面更新

  3. 问项目,最多后天,把所有项目整理一下,搞得自己项目都记不清

上次编辑于:
贡献者: lljl500220