1.three.js有了解吗,着色器有了解吗
答: 着色器是一种使用GLSL(OpenGL Shading Language)编写并在GPU上运行的程序。它们被用于定位几何体的每个顶点,并为该几何体的每个可见像素着色。使用“像素Pixel”来描述其实并不准确,因为渲染的每个点不一定与屏幕上的每个像素相匹配,因此我们更倾向于使用术语“片元fragment”。
2.js判断数据类型
3.js事件循环逻辑
4.箭头函数和function函数有什么区别,function函数什么时候确定this
答: 用function定义的函数里面的this指向是不明确的,只有在调用(解释)的时候才会确定this指向,即谁调用this就是谁
5.js闭包,内部引用外部变量为什么不会被垃圾回收,闭包使用情况
答:因为他本身就是建立在一个函数的内部作用域的子函数,由于可访问上级作用域的原因,即使上级函数执行完,作用域也不会被清除,这时子函数,就是闭包,就拥有了访问上级作用域中变量的权限,即使上级函数执行完,作用域内的值也不会被销毁
6.垃圾回收机制
答:引用计数法和标记清除法
标记清除法:就是从根部(在js中就是全局对象)出发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的。
7.Promise和async/await 区别
答:对比promise不需要执行then()处理响应,只需要将结果赋给一个值即可
8.手写Promise
9.vue2和vue3响应式区别,vue2.0对数组方法做了什么处理
10.diff算法了解。双向指向什么情况下会终止比对
11.长列表优化,不固定高度虚拟列表
答:使用预估高度。在更新页面时,记录每个列表项的真实高度以及位置信息。
a.计算占位层高度
b.渲染完成后,在update获取每项列表的高度以及位置信息,存储到positions里面
c.滚动后获取开始索引,因为缓存数据是有顺序的,通过二分法获取,找到最逼近scrollTop的列表项。计算是参考每个列表项位置信息中的Bottom;
d.滚动后将偏移量的获取方式变更
12.electron原理,不同窗口怎么通信,预渲染函数有什么作用
13.微前端qiankun,不同项目如何进行通信
答:使用qiankun提供的api-initGlobalState进行通信;
14.vue3组件之间传递方式,如何调用子组件方法,vue3可以通过ref去调用子组件方法
答:a.通过props传递 /defineProps
b.通过emit触发自定义事件/defineEmit
c.使用ref
d.事件总线EventBus
e.attrs使用时需要引入useContext
f.依赖注入: Provide与Inject
g.双向绑定:v-model
h.全局状态管理: vuex
15.ref,reactive有什么区别
原理: ref通过Object.defineProperty()的get和set实现数据代理。
reactive使用Proxy实现数据代理
16.keep-alive怎么管理,哪些可以存储,关闭标签下次打开刷新如何处理
17.数据存储之间区别,indexdDB,localStroge,sessionStorage,Cookie
18.ts中type,interface区别
答: interface只能定义对象类型,而type声明可以声明任何类型,包括基础类型、联合类型或交叉类型。
接口可以extends、implements,从而扩展多个接口或类。类型没有扩展功能。type可以使用交叉类型&,来使成员类型合并
定义两个相同名称的接口会合并声明。定义两个同名的type会出现异常。
19.泛型什么情况下会用到
20.webpack4.0和webpack5.0区别
答:webpack5自带js压缩功能,只需配置即可,而webpack4需要下载terser-webpack-plugin 插件
缓存区别,webpack4需要下载缓存插件,而webpack5自带,只需配置即可
webpack4通过webpack-dev-server启动服务,webpack5通过webpack serve启动
21.webpack热更新原理
答:a.使用webpack-dev-server托管静态资源,同时以runtime方式注入HMR客户端代码
b.浏览器加载页面后与WDS建立websocket连接
c.webpack监听到文件变化后,增量构建发生变更的模块,通过webSocket发送hash事件
d.浏览器接收到hash事件后,请求manifest资源文件,确认增量变更范围
e.浏览器加载发生变更的增量模块
f.webpack运行时触发变更模块的回调执行代码变更逻辑
22.webpack常用配置项
答:入口文件,打包目录文件,module(配置Loader),plugins(配置插件)
23.vite和webpack区别,vite用了什么技术,ESmodule怎么去执行
答:webpack是先打包再启动开发服务器,vite是直接启动开发服务器,然后按需编译依赖文件。
由于现代浏览器本身就支持ES Modules,会主动发起请求去获取所需文件。vite充分利用这点,将开发环境下的模块文件,就作为浏览器要执行的文件,而不是像webpack先打包,交给浏览器执行的文件是打包后的;
24.开发过程中遇到什么头痛问题,比较有成就感的工具
25.3D仓库有什么功能,点击有物品有对应的信息,怎么去实现的
26.webpack核心概念,webpack对前端性能优化
27.按需引入如何实现的
答:babel-plugin-import插件使用的
28.封装过哪些公共组件,插槽组件怎么拿到表格里面的数据
29.qiankun和iframe区别
答:a.路由状态丢失
b.dom割裂严重
c.通信困难
d.白屏时间长