开年第二份面经:前端开发实习生

391 阅读4分钟

前端开发实习生面经2

  • 面试时间:90分钟

今天是2023/02/03,开年的第二场面试,大致做一个记录。

  1. 保留节目:自我介绍
  2. 刚刚你提到的比赛获奖的那个项目,有几个前端?你负责的部分有哪些?

那个项目是有两位前端,静态页面我们大致是五五开,我还负责小部分的动画效果,大部分的AJAX交互,页面渲染,还有一些性能优化。

  1. 你说你这个项目是单页面应用,为什么要用单页面应用?有什么好处吗?

我说了:切换页面不用刷新会更加流畅,用户体验良好。 同时后端不用返回成形的HTML片段。(实际上现在的项目也不用后端拼接了,但是突然想不出来说啥,随便说了这个)

  1. 低代码项目的撤销重做是如何实现的?

用一个数组,这个数组是一个记录操作历史的栈,使用watch监听画板中的组件数据,组件数据发生改变时触发watch,将新数据装入操作历史栈中,同时要注意几个问题:

  1. 使用watch监听要注意防抖;
  2. 当触发撤消重做时,页面内容也会发生改变,也会触发watch,但这不是用户要添加的记录,因此要加锁判断。当用户点击了撤销重做按钮或用键盘快捷键触发撤销重做时,不能将该记录添加进操作历史栈;
  3. 如果用户在撤销重做的过程当中,又对页面的组件进行了修改,那么要清除操作历史栈指针当前位置往后的数据。
  1. Hr 说你只能实习三个月,为什么实习时间这么短,是有什么其他的安排吗?

我希望在金九银十前,争取有2份实习,但是如果能在一家公司实习,并且能持续学习到新的技术,那么我觉得比2份浑浑噩噩的实习经历要好得多。

  1. 讲一下垃圾回收机制

(说起这个那我可就不困了啊)讲了12分钟

  1. HTTP 四次挥手中第二次和第三次由相同方发起,为什么不能合并成一次?

(虎躯一震)不会,查了一下。
参考链接:cloud.tencent.com/developer/a…
服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给服务端应用程序
所以是否要发送第三次挥手的控制权在被动关闭方的应用程序,因为应用程序可能还有数据要发送,由应用程序决定什么时候调用关闭连接的函数,当调用了关闭连接的函数,内核就会发送 FIN 报文了。

  • 如果服务端应用程序有数据要发送的话,就发完数据后,才调用关闭连接的函数;第二三次挥手就没有合并(大多数情况下也是这样的)。
  • 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数,此时第二三次挥手可以合并。
  1. const声明的对象可以修改吗?

可以,const声明的引用数据类型不变的是地址,只要地址不被修改,可以对该引用类型做任何操作。

  1. 给了一道宏任务,微任务的题,问1-6的输出顺序如何。

比较简单,并且也解析了原因,说了一下事件循环机制。

  1. 说一下 Promise.all Promise.race

之前我刚好写过文章:juejin.cn/post/719476…

  1. 浅拷贝的方法有哪些?

扩展运算符,Object.assign() contact()等。并说了一下赋值,浅拷贝,深拷贝的区别。

  1. 使用过模板字符串吗,写一段给我看看。

送分题,并说了说使用模板字符串往页面中添加内容会比直接操作DOM,在性能上更加友好。

  1. 二叉树的前序中序后序遍历?

这里面试官想让我写后续遍历,我正准备开始写,他又说不用了

  1. 果然是给了另外一道算法题,让我做。

给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。你可以按任意顺序返回答案。

  • 反思
  1. 说着说着总是很激动,不知道为啥,特别是解释一些理论的时候;
  2. 今天的面试难度偏低,不过是第一次现场使用牛客的在线考试系统,体验了一把,真不错;
  3. 面试官很温柔。