深信服 星耀前端一面面经+二面凉了

5.30 下午5.30的场子 一面的小姐姐人真的很好,而且会引导和疏导,刚开始还挺紧张的后面就还好,虽然很多东西都记不太好,不过还是希望有二面吧
面试官小姐姐说2技术面+1hr面,第二面可能偏重原理、数据结构、算法了

姓名拼音转驼峰  replace正则
数组去重 set和遍历
冒泡排序
取整 parseint  第二个参数默认值为十进制
es6的解构 三等号和两等号  reduce的用法
预加载和懒加载
react的生命周期
react的refs 虚拟dom获取
react的其他情况
call和apply的区别 传参方法
虚拟dom的优势和diff
float的值 none left right inherit
各种水平垂直居中,捎带兼容性理解
跨域的实现方法
http状态码 1 2 3 4 5 404 304
缓存头 协商缓存 ETag和if-modified-since ETag优先级高

二面 6.7下午2.30 约40分钟

先问我项目
直接切入到跨域和seo的底层原理,很深
已经发布的项目想获取b域名(不是自家的)的数据,怎么post跨域,我说不知道(网上只找到了cors解决)
怎么get? 我说jsonp 说说jsonp的实现和回调
img可以吗?我说可以,img怎么回调判断状态,我不知道。
img元素能添加onError onLoad 属性,用于监听加载失败或者加载成功。
seo, 单页面应用reactapp,多页面应用nextapp,以及自己写的多入口项目 针对seo他们有啥区别,我说了半天可能没说到他想听的,况且我也没深入了解(没查到合适的解释)
最近在学什么,我说markdown解析的一个案例,怎么实现的?我说他是用的一个插件。你怎么实现?我说匹配啊加标签啊高亮啊什么的巴拉巴拉
最后是一个匹配n叉树路径的算法

题目:实现一个对树型结构进行过滤的函数,其中树形结构的格式如下:

tree = [
{name: 'A'},
{name: 'B', children: [
{name: 'A'},
{name: 'AA', children: [...]}
]},
{name: 'C'}
]

1. 假设我输入的 str 为 A 则过滤后返回的结果为
[
{name: 'A'},
{name: 'B', children: [
{name: 'A'}
]}
]

2. 假设我输入的 str 为 AA 则过滤后返回的结果为
[
{name: 'B', children: [
{name: 'AA', children: [...]}
]}
]

3. 假设我输入的 str 为 B 则过滤后返回的结果为
[
{name: 'B', children: [
{name: 'A'},
{name: 'AA', children: [...]}
]}
]


// 实现该函数,要求不允许对原有的tree做任何修改,最终返回结果是一棵新结构出来的树
function filter (tree, str) {



}
我递归实在不行 写了好久没写出来 大致思路也只能停留于我能找到那个子节点,路径怎么存下来我觉得要写一个顶层的tmp,但是我现撕肯定是写不出来的。。。这种难度我刷力扣都是看答案的。。
(等我看看写出来的话挂上来)
面试之后,大概用了一个小时的时间才写出,一个用队列的方式层序便利同时保存路径,然后浅拷贝穿单链表
const tree = [
  { name: "A" },
  { name: "B", children: [{ name: "A" }] },
  {
    name: "AA",
    children: [
      { name: "BB" },
      { name: "C" },
      { name: "D", children: [{ name: "A" }] },
    ],
  },
  { name: "D", children: [{ name: "C", children: [{ name: "AA" }] }] },
];
function filter(tree, str) {
  let arr = [...tree];
  arr = arr.map((a) => [a, []]); //给一个二维环境,这里用数组,用Map也可以
  let tmp = [];
  while (arr.length > 0) {
    let a = arr.shift();
    if (a[0].name == str) {
      tmp.push(a);
      continue;
    } //匹配就放进去
    if (a[0].children) {
      a[0].children.map((b) => {
        arr.push([b, a[1].concat(a[0])]);
      });
    } //如果有孩子就把孩子放入待检测队列,同时把父亲按照层顺序存到father数组中
  }
  //console.log(tmp)//tmp数组每一项都是[节点,路径[]]
  let res = [];
  for (let i = 0; i < tmp.length; i++) {
    if (tmp[i][1].length == 0) {
      res.push(tmp[i][0]);
      continue;
    } //如果恰好是第一层,路径就是空的

    //正常情况下我们新建一个对象,采用单链表的方式创建浅拷贝路径
    let o = {};
    let p = o;
    while (tmp[i][1].length > 0) {
      //console.log(tmp[i],i)
      let m = tmp[i][1].shift();
      o.children = { name: m.name };//浅拷贝name属性到children上
      o = o.children;
    }
    //得到路径串联为p.children,但是此时还没把这个节点本身穿进来
    o.children = tmp[i][0];
    res.push(p.children); //push形成的新的单链拷贝
  }
  //console.log(res)
  return res;
}
console.log(tree);
let tf = filter(tree, "AA");
console.log(tf)
所有的判断操作都是通过 [节点,路径[]]这种模拟Map来判断的,然后后面连接的操作是浅拷贝实现的
没有改变原tree


仍然还有一点bug没解决,由于是单链表搞定的,所以如果有公用的父级路径,也会单独开辟新的完整路径
感觉如果想解决得换其他算法。。
找同学一个大佬写的递归,我先贴上来回去再慢慢研究
function clear(tree, str) {
  let result = [];
  tree.forEach((item) => {
    if (item.name == str) {
      result.push(item);
    } else {
      if (item.children) {
        let obj = clear(item.children, str);
        if (obj.length > 0) {
          item.children = obj;
          result.push(item);
        }
      }
    }
  });
  return result;
}


反问环节:我学的时间比较短,您觉得应该侧重什么。
他说:基础、原理、算法
okfine。。我可能就是kpi本k
#深信服实习##深信服##实习##前端工程师##面经#
全部评论
我也来一个递归的 function filter (tree, str) {       let res=[]       let flag=false        for(let key of tree){         if(key.name===str){           flag=true           res.push(key)         }else{           if(key.children){             let obj=filter(key.children,str)             flag=obj[1]             if(flag){               res.push(key)             }           }         }       }       return [res,flag] }
1 回复
分享
发布于 2021-10-10 17:00
有提问环节吗
点赞 回复
分享
发布于 2020-05-31 08:40
联想
校招火热招聘中
官网直投
楼主,我刚刚面试了,你收到二面通知一声呀
点赞 回复
分享
发布于 2020-05-31 15:56
我5点半要面试了,好紧张😑
点赞 回复
分享
发布于 2020-05-31 16:56
群主收到二面没
点赞 回复
分享
发布于 2020-06-03 18:06
收到感谢信了  但是我觉得自己一面表现挺好的 很奇怪😂
点赞 回复
分享
发布于 2020-06-03 18:45
长沙的岗位吗?
点赞 回复
分享
发布于 2020-06-04 10:09
二面链接下来了
点赞 回复
分享
发布于 2020-06-04 19:58
我已经收到二面通知了,30号下午一面
点赞 回复
分享
发布于 2020-06-05 00:16
dbq我凉了 你们加油
点赞 回复
分享
发布于 2020-06-07 15:42
二面的答案麻烦有大佬知道的跟我讲一下😷 我基本没百度出来准确的
点赞 回复
分享
发布于 2020-06-07 15:43
下午看见挂了的通知了
点赞 回复
分享
发布于 2020-06-09 19:15

相关推荐

2 36 评论
分享
牛客网
牛客企业服务