问答

103 阅读5分钟

1.闭包是什么? 闭包的用途? 闭包,通过返回一个函数来保持对父作用域的参数的使用。 用途: 说不出来,父子组件中使用

2.简述事件循环原理 不清楚 事件循环原理: 事件循环是js运行环境为了避免js单线程运行阻塞的机制 两个队列,一个是同步执行机制,一个是回调机制,当同步执行队列空了 之后,js引擎会拿回调里面的内容塞到执行里面, 微任务: Promise相关及由js自身发起的一些api 红任务: 宿主发起的,script部分和定时器计时器,io操作等 先执行红任务,在执行微任务。 注意: settimeout的红任务,因为不是马上放入回调队列中, 而是到了时间之后再放入回调队列,所以,在一个事件循环的 task中,promise的then会比settimeout早执行 注意:执行到await的时候,如果await 等到的是一个promise的对象 那他就会阻塞后面的代码。 如果async没有return,那么默认async返回一个promise

3.虚拟dom是什么? 原理? 优缺点? 除了没有挂载在真实dom上,其他dom的属性都有 其他不清楚 虚拟dom就是js对象,把dom上的属性等记录在对象中,并且维护dom 结构,当属性变更时,改变对象,多个属性变更,会一起更新dom 可以减少重绘dom的次数,也可以针对性的渲染dom

4.vue 和 react 在虚拟dom的diff上,做了哪些改进使得速度很快? 局部改变, vue和react都是同级比较,vue是从两边到中间,react是从左到右。 patch函数,比较是否是相同节点。

5.vue 和 react 里的key的作用是什么? 为什么不能用Index?用了会怎样? 如果不加key会怎样? dom更新的依据 用index的话每次更新的代价会比较高,比如添加删除之类的操作 不加key的话可能不会触发更新

6.vue 双向绑定的原理是什么? 通过value和onchange事件的内嵌。通过代理劫持get和set方法, 监听这两个方法做到双向绑定 defineProperty

7.vue 的keep-alive的作用是什么?怎么实现的?如何刷新的? 切换页面时,保留一些参数 切换前存储,切换后重置。 如何刷新是指什么? 8.vue 是怎么解析template的? template会变成什么? 不会变成真实dom,主要是解析template上的参数 1.生成render函数,2.通过执行render函数,生成vnode, 3.patch(new,old)来处理更新渲染 template会编译成render函数 9.如何解析指令? 模板变量? html标签 还需深入了解 通过判断遍历attr每个属性是否有v-,:,@等特殊字符来判断是什么指令

10.用过vue 的render吗? render和template有什么关系 一般用template,template最后会被编译成render函数

1.对前端工程化的理解 模块化,组件化,规范化,自动化 2.前端性能优化都做了哪些工作 不太清楚 很多方面都有优化 主要分为:网络优化,页面渲染优化,js性能优化,图片优化,webpack打包优化

3.Nodejs 异步IO模型 不太清楚 发起请求-》创建请求对象-》请求对象放入线程池排队-》执行io -》执行完成之后,更新请求对象-》通知观察者,调用完成-》归还线程 观察者是观察是否完成io,可以执行请求回调 但是如果遇到高密集型调用线程的,会导致事件循环发生阻塞。

4.libuv不太清楚 跨平台的基于时间的异步io库,我没用过 5.设计模式 不太清楚 6.微前端 多个子应用结合到一起 彼此独立,有个主应用来作为桥梁沟通

7.节流和防抖 节流是一次执行之后等待一段时间才能执行下一次 防抖是一段时间内只允许执行一次, 通常是用在防止相同的接口请求多次 8.react有自己封装一些自定义hooks吗? vue有自己封装一些指令吗 ==需去看一下旧监控的代码 9.vue 向 react迁移是怎么做的? 怎么保证兼容的 这个没有做过,但是之前有看到,webpack可以配置转化的插件 10.vue的双向绑定原理 通过劫持get和set方法来做到的 11.Node的日志和负载均衡怎么做的 这个不太清楚 12.那前后端的分工是怎样的?哪些后端做哪些前端做

1.了解过vue3吗? 在用,因为本身用vue2的时候比较久远,所以之前换框架的时候,就是 直接用的vue3,所以不太清楚和vue2的区别 vue和react的比较:vue是自动挡,react是手动挡。

2.webscoket的连接原理 在tcp的基础上,借用http的某些功能和服务器建立长连接 3.react生命周期

不太了解,因为我用的更多是react的hook,但是我记得vue的生命周期,从create,mounted,unmounted,destory

4.redux原理

5.vue 父子组件的通信方式

父向子

prop传递属性,emit传递方法

inject/provide,注入属性或方法

子向父:

ref和defineExpose结合,

emit是可以通过传参方式也向父组件传递内容,

6.async await的原理是什么?

通过生成器和协程的配合使用,通过同步的方式来实现异步,使代码可读性提升

生成器关键:yield和next()

7.async/await, generator, promise这三者的关联和区别是什么?

promise是解决回调地狱,并发请求和异步方案的优化,

async/await是promise在多个then的时候,代码可读性变差,可以通过同步的方式来实现异步,

generator则是async实现利用的方式,

更正:

promise的缺点: promise的错误只能通过catch钩子或者第二个then捕获,不能通过trycatch捕获(因为trycatch只能捕获同步函数的以场)

主要区别:primise和async的异常捕获,promise一旦新建就会立即执行,不会阻塞后面的代码,但是async后面是promise对象会阻塞后面的代码。

async会隐式返回一个promise,