当前位置: 首页 > 面试经验 >

中科院信工所 前端 校招 一面 2023-07-22

优质
小牛编辑
80浏览
2023-07-24

中科院信工所 前端 校招 一面 2023-07-22

  1. 自我介绍
  2. 怎么封装脚手架和构建工具的?
  3. js闭包怎么理解
  4. *闭包会导致内存泄漏为什么还要使用?
  5. es6新语法用过哪些
  6. let const var区别

数一数啊,这都是第十几次问到了

(1)块级作用域: 块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:内层变量可能覆盖外层变量;用来计数的循环变量泄露为全局变量

(2)变量提升: var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。

(3)给全局添加属性: 浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。

(4)*重复声明: var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。

(5)暂时性死区: 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。

(6)初始值设置: 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。

(7)指针指向: let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。

  1. 什么是Promise,为什么会出现Promise
  2. 前端怎么向后端发送数据
  3. 拦截接口状态码是用的http code还是业务状态码
  4. HTTP code常用状态码有哪些
  5. 反问,结束,机试?什么操作二面是机试,而且还是在腾讯会议上。拜拜了您嘞,boss上12-15*14

#我的实习求职记录# #我的实习日记# #中科院信工所# #面经#

转录: 2023年7月22日 下午 6:27|25分钟54秒

关键词: 作用域、函数、闭包、变量、前端、指针、状态码、插件、代码块、技术栈、任务队列、事件循环、漏洞挖掘、内存泄漏、代码项目、定义状态码、实验室云计算、指向错误

文字记录: Curtis 09:52 你好。你好,听得到吗?

信工所 09:55 现在可以听到。好,拜拜。好,你共享一下你屏幕,你的。

Curtis 10:04 简历。好好,可以看到。

信工所 10:15 吗?可以看到,然后你简单的自我介绍。

Curtis 10:19 一下。好的,你好,我叫陈克宇,是 2025 届软件公司的大哥学生。然后在校经历方面,三大家在校团建会的网络技术部故障,负责学院和实验室云计算环境的部署和维护工作,以及学员的官网建设。目前也是软件工程创意实验室的负责人,协调学校与合作企业对接,统筹安排 11 名同学的学习进度和技术培训。然后在学术经历方面,曾经发表过一篇关于机器学习的论文,被遗爱等技术工具检索。然后在获奖经历方面,获得过第十四届篮球杯的全国外部主一等奖、全国第四名,湖南省特等奖也就一等奖的第一名。

Curtis 10:57 曾经在广州亚信科技实习过,负责区块链 ToB 端的部分页面研发,有过第四届字节跳动的千训营经理,以第二名的成绩完成前端低代码项目,然后目前的主要技术在是 view 2 三全家桶,注重前端标准化和Devops,参与过 element plus 是 tddevview 的开源建设,了解 Web pack、 wait 打包工具的配置和优化,对单元测试是全端工程化有过了解以及实践。谢谢。

信工所 11:27 好,我看到你写了在技术建设里面写了通过脚手架和封装方法库优化打包构建流程,为团队提效。这个可以简单的就是具体的说一下。

Curtis 11:46 吗?这个可以的,这个的话就是说之前有个字节那边的一个青训营,然后做的是这一块的这个低代码宣布,然后在这一块的话就是才里面用到了一些其他的库,就是用到了在线编辑的一些代码,那些库就使用了莫拉科那个库来作为这个在线编辑这个代码,然后当时这个摩拉口它默认的话是英文状态的。然后我去找了一下这一块的一个汉化插件,然后这一块的话发现 wait 这一边这个汉化插件只对老版本适用,所以说我就对这个插件进行了一个改造,然后就封装成了自己的一个库,在这个构建这一块对使用的这个 weight 和 planning 去进行这一个汉化。 I 是。

信工所 12:33 在好的,我看你正面之前写的是小程序和用的是 view 3,用过 view 2。0。

Curtis 12:41 吗?没用过的。

信工所 12:44 好的,这个 view 3 搭配的是 g s 还是TS?

Curtis 12:49 view 3 是搭配 TS 一起用的,就是在这个低代码项目这一块,当时我们采用的是 view 3 加 TS 去 allow 加 element plus 去编写的。嗯,好。

信工所 13:03 的。嗯,好,我们接下来问一点,就是技术相关的哈。好的,嗯,你可以先简单的解释一下 GS 的闭包吗?

Curtis 13:15 JS 的 b 包,实际上 JS 的 b 包很简单,就只要用到了回调函数,其实它基本上都是用到了 b 包。那 b 包的这一个定义是什么?就是说如果一个函数作为一个值传出去了,那么这个就是产生了一个闭包,那么 b 包最典型的一个表现的话,就比如说我 set time out 就相当于是第一个参数就要传一个函数进去,这个函数在其他地方被调用了,没有在它当前定义的这个作用域里面被调用,这个时候就产生了 b 包。

Curtis 13:44 那么 b 包有几个特点的话,就是说 b 包的一个特点,就是说它可以保护内部的一个变样,然后第二个特点的话,它就容易造成内存泄露,因为外部一直持有对这个函数的一个引用,那么这个函数它也会有其对其他那个作用域上面的一些变量也有产生一个引用的效果,所以说就导致那个变量就可能不能够被释放,所以说就容易造成一个内存泄漏。那么再举一个例子的话就是说,嗯,像高阶函数或者函数的一个颗粒化,实际上都是闭包的一个体现。

信工所 14:19 那我想问一下,就是既然它闭包会造成内存泄漏,那我们为什么还是要继续使用。

Curtis 14:25 它?因为闭包它它是有很多好处,而且有些地方的话就是说如果不使用闭包的话,那么这个代码就可读性就没有那么好。像 set time out 如果不使用 b 包,那要怎么做?那就做不到了,因为他 set time out 他需要去执行一个函数,所以说必须要把那个函数的一个handle,那个函数的一个指针去传给他,然后才能用得到。

信工所 14:52 啊,好的,了解了。嗯,你可以再简单地讲一下,就是你在日常工作就是之前的这些项目经历当中使用了哪些 ES6 的新语法?

Curtis 15:05 使用到过最常用的话就是其实就是定义变量的那两个,就是使用 net 和 const 去定义一个变量,然后的话还会采用到结构和set,然后还会采用到promise,大概就是这。

信工所 15:20 一些。那那个 let 和 count 它和原来的 where 有什么区别?

Curtis 15:28 这个的话其实我们可以一个来说,就是我们先从 net 控制的它们一起这个新的一个语法跟那个老式这个 y 有什么区别?对,这个 y 的话它是没有这个会计作用域的概念,但是它有全局作用域和函数作用域的一个概念就是它定义的话,它会去寻找当前这个作用域,如果在函数里面的话,它就不会去超出这个函数的作用域,如果是在,比如说直接在此刻一个代码块里面去定义的话,那么它当前作用域就是一个全局作用域。

Curtis 16:01 那么这个有什么影响?它就是有一个对全局会造成一个污染,然后它还存在一个变量提升的一个问题。然后其次的话就是 one 去定义的话,就是它在它定义之前就可以拿到这一个变量,但是undefined,那么这个的话就是叫做一个,他这个就是没有,那个叫什么来着?暂时性,对,他是没有暂时性时序的,就是说一定要的话,他在当前这个作文域下都是可以拿到的,就是在他定义之前,定义之后都可以拿到,在定义之后的话拿到就是他的一个值,在他定义之前的话就拿到undefined,然后 net 和空池就解决了。

Curtis 16:39 why?它没有这个快作用域的一个概念。快作用域?什么快作用域?就是一个发货号码,它就是一个快捷作用域。然后, net 控制就解决这个问题,但是的话。 net 和控制的他们就是有一个暂时性时序的。这个问题就是在。 net 和控制的定义之前,你是不能拿到这个变量的,如果你去调用这个变量的话,它会抛出 reference error,就是一个指向错误,或者这个指针错误。然后, net 和 cos 的一个区别是什么呢?就是。 net 的话,定义的那个变量是可以改变的,但是空时的定义的变量是不能够改变的。就空时的定义了之后,它当前的这个指向是不能改变的,但是它这个值指向那个东西是可以改变的,就是像 CI 加的一个指针一样的,就是那个指针不能够变,但指针指向的东西它是可以变的。

信工所 17:24 好的了解,那你再简单的讲就是讲一下promise,你刚才也提到了,就是使用到了promise。

Curtis 17:34 promise 的话实际上为什么会出来这个?就最开始的浏览器,不是说最开始就往前没有出现 promise 的时候,那有一些什么东西,它实际上就是一个任务,然后 promise 的话它是属于一个 v 任务,那么为什么会出现 v 任务?那就要追溯到之前那个任务了,任务之前的话是只有任务这么一个概念的,然后后面的话除了 promise 才区分出来宏任务和微任务,那么宏任务的话就要 set time out, set immediate,然后 set interval 就是定时器,然后还有思考这个代码块和 IO 流 IO 这一块都属于一个宏任务,但是这一块都是属于叫task,都是叫任务。

Curtis 18:11 那么这个 v 任务的出现就是为了解决一个问题,就是说我在执行时刻率的代码块的时候,如果我出现了 CSR time out 里面我就添加一个新的什么 set time out,那这个时候新添加什么 auto 会不会继续执行呢?这个时候其实是不会的,它要等到下一次事件循环才会去执行,那么这个时候如果我需要对待下一次,在 time out 或者说下一次事件循环之前,我要进行一个插队,那要怎么做?那这个时候就这个红任务他是做不到的,因为他执行的时候,他会相当于是对这个红任务的队列打一个快照,新添加的他都不会执行,他会留到下一次事件循环,那么 v 任务的出现就解决这个问题。

Curtis 18:49 那 v 任务队列中产生的 v 任务,或者红任务队列中产生的 v 任务,他都会去从那个 v 任务队列里面去寻找,看还有不有。如果有的话,只要微任务队列没有空,那他就会一直执行新这个微任务队列。就算微任务队列这个微任务中又产生新的微任务,他还是会去执行这个新的微任务,就做到了一个两个 set time auto 之间进行一个插队的一个效果。然后还有的话就是说这个 promise 的一个出现,就是去解决一个回调地域的一个问题,就是不需要在回调里面再嵌一个回调,它可以链式调用点这样的方法去定链式调用,同时它也出现了一些语法弹,就把一个异步的一个代码就不需要回调,就改成一个同步的代码,就是 async 和wait。

信工所 19:35 好的了解。嗯,你在之前就是项目里面有涉及到,就是前后台传数据。

Curtis 19:45 是的。

信工所 19:47 那你这面前端用到了什么方法向后台去发送请求?

Curtis 19:54 一般的话就是如果是纯粹的这个三件套的一个项目的话,一般都是使用结构要去发送请求,其实它底层的话就是XHR,然后在 view 里面的话,一般都是采用 access 去发起请求,然后 access 它是用什么去发请求的?其实它是有一个选项可以去改的,就说那个叫做Adapter,是一个适配器,它默认的话是使用XHR,然后也可以选择使用 fetch 去发起这个请求。

信工所 20:22 那你在前端的时候肯定会涉及到多个接口的调用,怎么去封装?这一层。

Curtis 20:30 的话就是可以去抽象出来,就放在 API 里面可以去作为一个函数,就是说比如我要请求 ABC 这个接口,那么我可以分封装一个 ABC 的这个方法,然后在这个方法里面去定义好一个入参,然后初参的话就是返回这个 access 的一个promise,然后的话在这个里面去处理好这一些参数的一个传递,就设置好 access 的这些config,这些参数一般是这样子做的。然后的话因为可能还会有登录这一些,所以说可能在 anxious 那边会做一个拦截器,然后在这一块进行一个拦截的封装。如果说服务端那边返回是一个没有登录的一个状态,那么填到这一边的话就会立马跳到一个登录页面,就其他请求也其实是发不了的,那就可能说是会做一层这么一个拦截。

信工所 21:19 好,那你们之前就是拦截的接口状态码是自己定义的,还是说用网上一些,就是用一些官方的?

Curtis 21:31 然后这个话其实不同的项目其实也都有,就是有的项目的话用的是就是那个 HCP 那个状态,但是有一些的话就是说企业那边的,就之前我是有这个作为劳力工程实验室负责人,当时是负责学校那个合作企业的这个项目,然后当时的话那边采用的是阿里巴巴规范里面的就是使用业务状态,不管那个请求的结果是什么,全部都返回200,然后再返回的结果里面去定一个业务的这个状态就是根据阿里的那个规范来的。

信工所 22:08 好,你可以简单就是讲几个常用的官方定义的状态码。

Curtis 22:13 吗?官方定义状态码就是比如说 200 就是正常的一个结果,然后 304 的话就是有缓存,然后 301 和 302 都跳转, 301 就是永久重临下载, 302 就是临时性的一个重连项,然后还有 500 这一系列的话,都是一个服务端的一个错误, 400 这一个系列的话基本上就是客户端没有授权这样一个错误。

信工所 22:37 嗯,好的,了解,我这边没有什么问题了,其他的老师有问题吗?

信工所 22:51 好,那陈科宇你这面对我们有什么想问的。

Curtis 22:54 吗?我想了解的话,其实就是咱们的一个业务上的发现,还有一个技术上的发现就是我已经有,其实在基地上我已经有所了解,就是说咱们在这个招聘岗位的这个描述中就是有提到咱们是一个安全这个方向的,所以说其实对安全这一块其实我也是有所了解的,就是之前在 4S 去知道过同学去,有些同学是云计算的,有些同学做安全的。

Curtis 23:23 其实这一方面我也是去搭建过这个超融合的一个环境,然后预计搭建这个环境的话,他就要去对外提供一个服务,其实这一块也接触到一些等保清创这一方面的一个支持,也是有亲自调研过部署和使用这个下一代防火墙服,然后比如一些堡垒机上网行为管理这些东西的。然后我主要是想可能再细致一点问一下,就是说咱们这个业务的一个方向和一个技术栈的一个方向大概是一个怎样?

信工所 23:50 我们这边业务主要是针对网络安全领域的方向的漏洞挖掘,然后我们会有一个漏洞挖掘的团队,然后我们这个项目组主要是针对各个团队的成果去进,将进行成果进行平台化,也就是说我们会封装一个漏洞挖掘的平台,这就是我们如果你入职的话,就是以后的那个工作方向,然后在前端的技术栈的话,目前使用的是 Vue 二点零加GS。

Curtis 24:26 那其实这个还是啊,作为晚安这方面其实还是挺有意思。然后还有一个问题的话,就是说咱们就是这个组的话,就做前端这一块大概是有多少个人?

信工所 24:39 因为目前我们这面前端涉及的业务不是很多,所以目前是只有一个人在做,然后再加再有几个其他单位的兼职人员,也就是我们之前外聘的一些技术专家,有一到两个人,对。

Curtis 24:59 所以了解就应该还是一个比较新的一个项目,或者说是要进行一个价格改进的一个项目,是吧?对。

信工所 25:10 他们我们这边就是其实项目还蛮多的,所以会针对不同的项目去进行一些定制化的开发。

Curtis 25:24 好的,那我这边的话没有其他的问题。

信工所 25:28 好的,那如果有,好,那今天的面试到此结束,然后如果有消息的话,我会在一两天之内给你发邮件。

Curtis 25:40 好的,好的,谢谢。

信工所 25:42 嗯,好,再见。好,你可以退出会议了。好的。

#我的实习求职记录##我的实习日记##面经##中科院信工所#
 类似资料: