前端开发实习生面经2
- 面试时间:90分钟
今天是2023/02/03,开年的第二场面试,大致做一个记录。
- 保留节目:自我介绍
- 刚刚你提到的比赛获奖的那个项目,有几个前端?你负责的部分有哪些?
那个项目是有两位前端,静态页面我们大致是五五开,我还负责小部分的动画效果,大部分的AJAX交互,页面渲染,还有一些性能优化。
- 你说你这个项目是单页面应用,为什么要用单页面应用?有什么好处吗?
我说了:切换页面不用刷新会更加流畅,用户体验良好。 同时后端不用返回成形的HTML片段。(实际上现在的项目也不用后端拼接了,但是突然想不出来说啥,随便说了这个)
- 低代码项目的撤销重做是如何实现的?
用一个数组,这个数组是一个记录操作历史的栈,使用watch监听画板中的组件数据,组件数据发生改变时触发watch,将新数据装入操作历史栈中,同时要注意几个问题:
- 使用watch监听要注意防抖;
- 当触发撤消重做时,页面内容也会发生改变,也会触发watch,但这不是用户要添加的记录,因此要加锁判断。当用户点击了撤销重做按钮或用键盘快捷键触发撤销重做时,不能将该记录添加进操作历史栈;
- 如果用户在撤销重做的过程当中,又对页面的组件进行了修改,那么要清除操作历史栈指针当前位置往后的数据。
- Hr 说你只能实习三个月,为什么实习时间这么短,是有什么其他的安排吗?
我希望在金九银十前,争取有2份实习,但是如果能在一家公司实习,并且能持续学习到新的技术,那么我觉得比2份浑浑噩噩的实习经历要好得多。
- 讲一下垃圾回收机制
(说起这个那我可就不困了啊)讲了12分钟
- HTTP 四次挥手中第二次和第三次由相同方发起,为什么不能合并成一次?
(虎躯一震)不会,查了一下。
参考链接:cloud.tencent.com/developer/a…
服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给服务端应用程序。
所以是否要发送第三次挥手的控制权在被动关闭方的应用程序,因为应用程序可能还有数据要发送,由应用程序决定什么时候调用关闭连接的函数,当调用了关闭连接的函数,内核就会发送 FIN 报文了。
- 如果服务端应用程序有数据要发送的话,就发完数据后,才调用关闭连接的函数;第二三次挥手就没有合并(大多数情况下也是这样的)。
- 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数,此时第二三次挥手可以合并。
- const声明的对象可以修改吗?
可以,const声明的引用数据类型不变的是地址,只要地址不被修改,可以对该引用类型做任何操作。
- 给了一道宏任务,微任务的题,问1-6的输出顺序如何。
比较简单,并且也解析了原因,说了一下事件循环机制。
- 说一下 Promise.all Promise.race
之前我刚好写过文章:juejin.cn/post/719476…
- 浅拷贝的方法有哪些?
扩展运算符,Object.assign() contact()等。并说了一下赋值,浅拷贝,深拷贝的区别。
- 使用过模板字符串吗,写一段给我看看。
送分题,并说了说使用模板字符串往页面中添加内容会比直接操作DOM,在性能上更加友好。
- 二叉树的前序中序后序遍历?
这里面试官想让我写后续遍历,我正准备开始写,他又说不用了
- 果然是给了另外一道算法题,让我做。
给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。你可以按任意顺序返回答案。
- 反思
- 说着说着总是很激动,不知道为啥,特别是解释一些理论的时候;
- 今天的面试难度偏低,不过是第一次现场使用牛客的在线考试系统,体验了一把,真不错;
- 面试官很温柔。