【广州凡科互联网科技公司】2020 校招前端笔试/面试

1,129 阅读4分钟

先说结果

结果当天6天就邮件通知了,没有通过,有点遗憾,可能凡科对技术的要求比较高或者我比较水。都是简答题,以下答案都是我后来收集的,当时答的时候,有部分都只是似懂非懂,能写的都写了。以下是回答和混合着我的思考,回答问题时,只需要回答“回答”的部分即可

笔试部分

  1. 什么是BFC,如何形成BFC上下文? 答:BFC全名block format context,也就是块级元素上下文,既然是块级元素了,自然要考虑,会不会有行内元素上下文,所以后来问到我有没有其他的上下文时我回答了IFC,inline format context。我的理解是,没有其他属性的浏览器窗口,本身就是一个独立的容器,按照里面div占一行,inline可以并排的规律,一个个盒子地排列下去。而BFC形成了自己的一块区域,该区域内应用了它自己的规则,等于重开了一份空间可以自由重新安排定位而不被周围元素干扰,例如两个float元素,分别会形成BFC,不会再互相干扰内部的box排列。作用大概是重新让block元素和float元素友好相处。 形成BFC的方式有:
  • float的值不能为none(也就是有float而且float不能为none)
  • overflow不能为visible
  • display的值为table-cell, table-caption, inline-block中的任何一个
  • position为absolute/fixed。 其余请参考网上文章,讲的比我好。
  1. 请说出用CSS让元素隐藏的方式(尽可能多)
  • overflow:hidden;
  • display:none;
  • opacity:0;
  • visibility:hidden;
  • position:hidden;
  • transform:translateY(0)
  1. 请写出下列代码输出结果
function Fanke(){
    print(){
        console.log('价值观')
    }
}
Fanke.print=function(){
    console.log('真诚')
}
Fanke.protoType.print=function(){
    console.log('务实')
}
getValue()

var getValue=function(){
    console.log('持续改进')
}

getValue=function(){
    console.log('专注')
}

getValue()

Fanke.print()
new Fanke().print()
new Fanke.print()
new new Fanke().print()

大概如上,凭记忆写的,考的东西还有点多,我写的不是很好,希望大佬贴出答案。

  1. 输出以下代码运行结果
const promise1=new Promise(((resolve, reject)=>{
  console.log('promise1')
  setTimeout(() => {
    console.log('setTimeout');
  }, 0);
}))

const promise2=new Promise((resolve, reject)=>{
  console.log('promise2')
  resolve()
}).then(
  console.log('promise2 resolved')
)

async function whatever(){
  await Promise.all([promise1, promise2])
  console.log('forgot what it was')
  return "this is a string"
}

console.log(typeof whatever())

记忆如上,我自己跑一遍的结果大概是

5. 写一个find函数 这个网上好多啦,在地铁上看了一下,自大地以为自己会了就没深究,原理是懂,但写不好(我丢人)

Array.prototype.find = function(fn) {
  for (let i = 0; i < this.length; i++) {
      if (fn(this[i])) return this[i]
  }
}

艹,上网查了一下发现我没记错,我写对了。 6. 写一个节流函数 经典面试题,但我特别烦节流,一开始还写成throttle,简直丢人,后面改成debounce了。(cccccccc,我又搜了一下发现throttle是对的,我是菜鸡,各位请不要骂我) 贴一个然后说说我的解释吧

function throttle(fn, delay) {
  let _lastTime = null;

  return function () {
    let _nowTime = + new Date()
    if (_nowTime - _lastTime > delay || !_lastTime) {
      fn();
      _lastTime = _nowTime
    }
  }
}

首先得有一个上次执行的flag,如果上次没执行,就执行第一次,这下子有flag了,然后在flag和设置的delay中,每次触发,给它一个new Date()如果还在锁定时间区域内就不执行了,否则就执行,然后更新flag。 7. 跨页面通讯的方式都有哪些?

  • 同源跨页面BroadCast Channel
  • service worker
  • localStorage
  • indexDB
  • 写累了不想写了,评论谁有空去补充吧。
  1. 给出以下数据(一个对象数),分别用深度和广度算法输出题目要求的数组 数据结构就不给出了,因为现在饿了不想写了,先出去吃饭我哪天想起来了再写。反正就是深度和广度遍历,我用的是stack和queue的方法实现的,应该还算写的可以吧不知道。

面试部分

先不写了吧饿了

总结

总结就是当天就给结果了,没过,可能凡科追求严谨的技术好的,笔试和面试都能拿到不错表现的人,我觉得我按打分来说只能说是50分吧。完全达不到要求,不过凡科的题可以考虑更新了啊,跟去年9月的一毛一样。我这份题后续还会把细节都补充上去的,凡科的人看到了可以把题更新掉了吧,联系我我也不会删除的,当然如果你给我五毛或者威胁我要把我加入黑名单我可能会考虑删帖。(可能是签到协议上面有保密协议?不知道哈哈哈,吃饭去)