[字节]一面凉经

1.了解bfc吗?
--说了下了4个能产生bfc的方法,overflow:hidden;position:absolute;float:left/right;display:inline-block。
但是现在想想,没有理解透彻bfc,bfc(块格式化上下),bfc的主要目的就是形成一个独立的空间,让空间中的子元素不会影响到外面的布局。
bfc可以解决几个问题:1)解决浮动元素另父元素高度坍塌的问题;2)解决自适应布局的问题;3)解决外边距垂直方向重合的问题
2.三栏布局,左右不定宽,中间自适应
--方法一,使用flex,中间的元素设置flex:1即可。这个我答到了,但是我当时没自信还以为不对==
--方法二,暂时没想出来,面试官说可以利用bfc,如果你们知道的话评论区里分享下~
3.如何使元素垂直居中,这里我提到了flex,面试官就继续问我
4.了解flex吗?简单说一下flex的三个参数。(flex:flex-grow flex-shrink basis)
5.三道题 二叉树/快排/作用域
--1.二叉树中根节点到叶子节点其中一条路径和为22,就返回true。 二叉树没有好好准备,这道题直接和面试官说了大概思路,没做出来,跳过了。
这是我现在的思路
var binaryTreePaths = function(root) {
    if(!root) return null;
    let ans = 0;
    let flag = false;
    function core(node){
        if(node){
            ans+=node.val;
            if(node.left===null && node.right===null){  //找到叶子节点
                if(ans===22) flag=true;                    
            }
            core(node.left);
            core(node.right);
            ans-=node.val
        }
    }
    core(root);
    return flag
};

--2.写一下快排,快排和归并排序的区别。 只了解到了冒泡,快排和插入排序,区别没答上来。
//快排
function quick(arr){
    //递归结束条件
    let len = arr.length;
    if(len<=1) return arr;
    
    //取出中间元素
    let middleIndex = Math.floor(len/2);
    let middleValue = arr.splice(middleIndex,1);
    
    let left = [];
    let right = [];
    
    arr.map((item,index)=>{
        item>middleValue ? right.push(item) : left.push(item)
    })
    //递归
    return quick(left).concat(middleValue,quick(right))
    
}
快排和归并排序的区别:相同点,两者都是使用了递归和分治的思想,时间复杂度相同;不同点,归并排序不仅使用了分治,还使用了合并,将数组先递归细分再排序
,空间复杂度为O(n),而快排没有合并,空间复杂度为O(1),先排序再递归细分。 --3.下面的代码执行结果。对于this和函数作用域的问题我看过,但是没有理解透彻,导致还是答不上来。
百度后看到这样一个解释,js的作用域是词法作用域,无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。
如果把A定义在B里面,打印出来的就是"B"。
var hello = "global";
function A(){
  console.log(hello);
}
function B(){
  var hello = "B";
  A();
}
B();  //global 
这道题我当时确实是太紧张了,已经丧失了分析能力==
现在的考虑:在看到时候要注意有this和没有this的区别,首先第一个this.name,this指代的是objcet,因此this.name=>object.name。
返回的匿名函数作用域是全局的,但因为是个闭包,因此能够访问getNameFunc对应函数中的name变量,因此name=>"the func"。
由于其作用域是全局的,因此第三个this.name=>window.name。
var name = "the window";
var object = {
    name: "the object",
    getNameFunc: function(){
        var name = "the func";
        console.log(this.name);
        return function(){
            console.log(name);  
            console.log(this.name);
        };
    }
};
object.getNameFunc()();
//"the object" "the func" "the window"










#面经##字节跳动##前端工程师##校招#
全部评论
快排如果面试让我写我会这样。 树是力扣112原题 三栏布局百度很多,比如左右浮动 position 或者使用calc减去旁边的宽度 词法作用域和this的题建议看一下冴羽 大佬的文章
1 回复 分享
发布于 2020-03-15 15:36
二叉树  这样子写ok吗 function isFind(root){ let result = false; let sum = 0 if(root){ sum += root.val; if(sum === 22){ return true; } root.left && isFind(root.left); root.right && isFind(root.right); } return result; }
点赞 回复 分享
发布于 2020-03-17 16:58
是前端吗
点赞 回复 分享
发布于 2020-03-16 00:03
请问是哪个部门呢?
点赞 回复 分享
发布于 2020-03-15 14:49
使用浮动,再通过触发bfc隔离元素之间的影响
点赞 回复 分享
发布于 2020-03-14 15:20

相关推荐

评论
1
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务