[字节]一面凉经
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"
#面经##字节跳动##前端工程师##校招#