字节翻车面试黑匣子

97 阅读1分钟

翻车了当然要总结啊 不然再翻一遍能开走吗?

第一题 (js 算法)二叉树

  • 算法 JS 算法 Tree Traversal

面试官给了 一个二叉树 的定义  写一个 函数 返回 二叉树的 right view,上网去查了查,是leetcode #199 难度:中等 ,被Facebook, tweeter, amazon, mircosoft 问过。 好吧  international 菜 实锤。去网上搜了一下, 这道题有的解法需要queue,但是JavaScript哪有queue,那只能自己定义个queue,但是这样不优雅不是。 最优雅的是recursive !下面的方法来自一位YouTube小哥  reference: KA Education

class Node{
    constructor(data,left,right){
        this.data = data
        this.left = left
        this.right = right
    }
}

// Given the following binary tree, //    1            <---//  /   \// 2     3         <---//  \     \//   5     4       <---// You should return [1, 3, 4].
leetcode example

var RightViewTree = function(root){

    var results = 【】  // <= 将要return 的数组 

    function traversal(node,depth){ //depth 是层深 也是 要返回数组的index

    if(!node) { return } // base condition

    //如果没有 就添加数到 result 
    if(!result[depth]) { result[depth] = node. data}

    traversal(node.right, depth+1);
    traversal(node.left,depth+1);

    return results
}

**好了,那举一反三,left, bottom, top view 应该怎么办呢 **

  • ** left 很简单 就上面 的其中两行代码对换,就好了**

第二题 (JS 算法 + 基础)

  • JS 如何实现深拷贝

回答这个问题首先要分清楚JS 的基本类型和引用类型。就是这题让我凉凉。当时面试官问我如何实现深拷贝我说先要判断这个传过来的参数是什么然后再进行操作然后面试官问我那number要吗? 我说要吧(gg)然后就有了 面试官让我自己开控制台试一试的名场面。平时都是本着能偷懒不学习的态度,能用轮子用轮子hhh 翻车了吧  lodash lodash 哎

平时也遇到了这个问题,但是就用了下面这个投机耍滑的方法,当然这不是面试官想看到的

let results = JSON.parse(JSON.stringtify(target)) //

首先要回答好这个问题就要先弄明白JS 的基本数据类型和引用类型

  • 基本类型  => Number, Boolean, Null, undefined 和 symbol                                                               
  • 引用类型 =>  Object, Array, Function, Date 

首先基本类型是存储在栈(stack)中内存大小固定 复制的时候直接赋值。

//名场面回放

var a = 100
b = a 
b = 1000

console.log(a) ???  a是不会变的

 THE STACK     

// ///before copy// -----------------
// -------|--------|//  a     |   100    <= Number// -------|--------|

// // after the copy// -----------------// b      |  1000  |  <= Number // -------|--------|//  a     |   100  |  <= Number// -------|--------|

!引用类型是存储在堆(heap)中 复制的时候复制的是地址。!

// Recursive Way
var deepCpy = function (obj){
    var results = {}
    for(let key in obj ){
        if(Object.prototype.hasOwnProperty.call(obj,key)){            if(typeof obj[key] === 'object'){                target[key] = deepCpy(obj[key])            }else{                results[key] = obj[key]            }        }
    }    return results}///Test /// Test
var alpha = {a:"200",b:"300"}
var deep_cpy_beta = deepCpy(alpha)
alpha.a = "600"
console.log(deep_cpy_beta)

第三题 (css 基础 )

  • 如何实现一个flex box css, css渲染优先级

弹性盒子可以看这篇:blog.csdn.net/hwhsong/art…

内联样式 > 多级选择符样式 > ID选择符样式 > CLASS选择符样式 > TAG选择符样式

第四题

  • http2.0 协议 

segmentfault.com/a/119000001…

作者:我想要offer
链接:juejin.cn/post/685557…
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。