其他分享
首页 > 其他分享> > 『前端面试题纪实』2021年春招面经(美团offer)

『前端面试题纪实』2021年春招面经(美团offer)

作者:互联网

文章目录

声明

个人背景

准备手稿

见我的另一Blog: 『前端面试资料』 个人面试准备手稿 2021/4

2021年春招笔试题&面试题

百度(一面后无消息)

笔试(2021.3.25)

  1. 给定一个数字字符串序列,只有0-9
    让你从第一位开始往后走,可以一次走一步,也可以一次走到后面一个和当前数字相同的位置,问最少需要多少步
    PS:秒了
  2. 2n个数字,分成n组,每组2个
    扔硬币,对于每组,都有概率p扔出正面,扔出正面就取两数较大值,否则去小值
    给定这2n个数字和p,问如何将他们分配成n组,可以得到最大数学期望,并输出
    PS:我人没了
  3. 虚拟DOM
    给定一个DOM树,一个div,一个ul(包含两个li和文本),(两个li中也包含文本),和普通文本
    将其转化为JSON结构,包含每个DOM的标签类型,属性,以及子DOM
    格式大概如下,具体名字不太记得了
    而且文本也要算一种类型
    PS:因为允许用本地编辑器,所以我console.log一直在查DOM节点对象的属性,nodeType啊之类的,后来做对了也是0分,不知道,机器判的
{
	nodeType: 'div',
	nodeAttribute: {
		id: "div1",
	},
	children: [
		{ /* 递归,格式和这个整体一样 */ },
	],
}

意外发现了自己保存了当时提交的代码,就写一下吧,虽然没卵用

<html>
  <head>
    <title>hello</title>
    <style type="text/css">
      body{
        margin: 0;
        font-size: 14px;
      }
    </style>
  </head>

  <body>
    <div id="jsContainer">
        <ul class="js-test" id="jsParent">
            <li data-index="0">1</li>
            <li data-index="1">2</li>
        </ul>
        <span style="font-weight: bold;">3</span>
        4
    </div>

    <script>
function getDom(dom) {
  if (dom.nodeType !== 1 || dom.nodeType !== 3) {
    return false;
  }
  const tag = dom.tagName?.toLowerCase() ?? 'text';
  if (tag === 'text') { // text就有可能是假元素
    const trimValue = dom.nodeValue?.trim(); // 正则 or trim算长度
    if (trimValue?.length > 0) {
      return {
        tag,
        content: trimValue,
      };
    } else { // 是假的元素,换行,跳过
      return false;
    }
  } else { // 标准dom
    const ans = {};
    ans.tag = tag; // tag
    ans.attributes = {}; // 需要空
    if (dom.attributes) {
      Array.from(dom.attributes).forEach((val) => {
        ans.attributes[val['nodeName']] = val['nodeValue'];
      });
    }
    ans.children = []; // 需要初始化
    if (dom.childNodes) {
      dom.childNodes.forEach((val) => {
        const value = getDom(val);
        if (value) {
          ans.children.push(value); // recursion
        }
      });
    }
    return ans;
  };
}

function dom2json() {
    const container = document.getElementById('jsContainer');
    const val = getDom(container);
    if (val) {
      return getDom(container);
    }
}

console.log(dom2json());
    </script>
  </body>
</html>

一面(2021.4.8)

字节(准备三面)

笔试(2021.3.21)

    <div id="div1">
      <div id="div2">
        <div id="div3">hello</div>
      </div>
    </div>

    <script>
      function log() {
        return console.log(this.id);
      }

      document.getElementById("div1").addEventListener("click", log, false);
      document.getElementById("div2").addEventListener("click", log, true);
      document.getElementById("div3").addEventListener("click", log, false);
    </script>

问:输出结果
答:div2 div3 div1
解释:
第三个参数是是否使用事件捕获,true捕获,false冒泡。
最简单记法,false和不写是冒泡,从内向外;否则是捕获,从外向内。

一面(2021.4.1)

const arr = [1, 2, 3, 4, 5, 6, 7, 8];
arr.random();
console.log(arr); // 数组乱序

二面(2021.4.15)

三面(2021.4.20)

等待中

携程(二面后无消息)

笔试(2021.3.24)

行测

一面(2021.4.8)

  1. 对象a赋值给b,b赋值给c,b修改属性,c指向新对象,问输出
    如何在不改变a的情况下赋值,答了浅拷贝
  2. for循环var i,setTimeout输出,问结果
    这里有个坑就是setTimeout里用了this,面试官指点我才发现,直接会报错
    为什么var换let就可以工作了
  3. 给数字,3位分隔,转化为字符串,小数部分四舍五入
  4. 给定输入串,筛出数字部分作为数组输出
    用了把非数字正则替换为其他东西,然后问我不能直接用正则筛数字吗
    正则加g和不加g的区别,讲一讲贪婪匹配和非贪婪匹配,有系统学习过正则吗
  1. 数组去重
    引用类型怎么办,说了weekSet,又问(引用类型Set不可以去重吗)?引用类型和对象的区别
    const的数组可以变化吗(如何让const的数组不可变)说了Object.freeze
  1. node了解吗 react呢
    说只知道做项目用了些请求处理
  2. cookie与安全
    cookie和localStorage区别
    问了cookie在请求中携带是本身还是js操作的
    cookie和CSRF的关系,说了设置为httponly就行,被问为什么
    攻击者为什么不受跨域限制?说了可能服务端做了反代
    Https下有没有必要对敏感信息加密,为什么,给一个理由,说了非对称加密
  3. 循环引用
    报错吗 怎么做,我瞎说的报错
    import和require的区别

二面(2021.4.14)

网易(一面挂了)

笔试(2021.3.25)

行测

一面(2021.4.9)

美团(已签offer)

笔试(2021.3.27)

  1. 给定一个数字序列,得出以下操作可能得出结果的字典序最小值:可以改变一个数把它变成回文序列,可以随便改变一个数

  2. 给定一个字符串只有T和F,问改变多少个F可以不出现连续的>=3个F
    题目略坑,结果要乘m或n,还问最小值,m和n都是正数,有一个数字完全浪费掉不知道意义何在

  3. 给定一个数字序列,然后执行多次询问,问某个数字最早和最晚的出现位置

  4. 没看,反正涉及dp和异或

  5. 没看,不想做了

一面(2021.4.2)

二面(2021.4.7)

hr面(2021.4.13)

offer(2021.4.17)

给了48小时期限,如果不签就不会再发了,反正我是签了
问了确定不来提前实习是吧,我说是,问了会不会有影响,hr说不会
估计就是确认一下选择而已,反而给我吓一跳

360(准备二面)

笔试(2021.3.28)

一面(2021.4.9)

var a = 10
function b() {
  a = 100
}
b()
console.log(a) // 100


var a = 10
function b() {
  a = 100
  return;
  function a() {}
}
b()
console.log(a) // 10 function被变量提升了


var a = 10
if (true) {
  var a = 100
}
console.log(a) // 100 var没有块级作用域


var name = 'map';
function func() {
   console.log(this.name);
}

var object = {
   name: 'object',
   getNameFunc: function(fn) {
      fn && fn(); // map 返回匿名函数被window调用
      return () => {
       	return this.name; // object 作用域是在obj之内
      }
   }
};

console.log(object.getNameFunc(func)()); 

牢记一下,面试肯定考特殊情况,普通不变的怎么可能拿来考
而且一般答案都不一样,不会两个都指向同一个,而且另一个没用

二面(2021.4.19)

等待中

其他投递公司

投递后石沉大海

投递后挂了

标签:面试题,面经,2021.4,offer,笔试,面试,数组,dom,log
来源: https://blog.csdn.net/GLZX_HM/article/details/115839015