前端工作常见题

第一道:有3个div,呈竖向排列,第一个div贴顶,第三个div贴底,中间的div填满剩余空间。该怎么做?
(flex,grid,js动态计算)
第二道:我要写一个弹窗,需要水平竖直居中,同时它不能被其他元素遮掩。该怎么做?
(居中,zindex,zindex的从父原则)

第三道:你的移动端的自适应是怎么做的?
(rem,vwvh。其实这两个等比放大缩小的自适应单位解决方案是不够完美的。内容用px + 排版用自适应单位 + 布局采用flex/grid才是解决移动端自适应的最优解)

第四道:如何减少重排。

js会出现不精确的问题
javascript的number最大9007199254740992,是2的53次方。如果超过这个值,那么js会出现不精确的问题
如何解决数字精度丢失的问题?理论上用有限的空间来存储无限的小数是不可能保证精确的,但我们可以处理一下得到我们期望的结果当你拿到 1.4000000000000001 这样的数据要展示时,建议使用 toPrecision 凑整并 parseFloat 转成数字后再显示,如下:parseFloat(1.4000000000000001.toPrecision(12)) === 1.4 // True
封装成方法就是:function strip(num, precision = 12) {
return +parseFloat(num.toPrecision(precision));
}
最后还可以使用第三方库,如Math.js、BigDecimal.js

什么是递归,
http的Content-Type

权限组件
node node中间件

1、promiseApiPromise构建出来的实例存在以下方法:
then() 是实例状态发生改变时的回调函数,第一个参数是resolved状态的回调函数,
第二个参数是rejected状态的回调函数catch()
用于指定发生错误时的回调函数finally() 用于指定不管 Promise 对象最后状态如何,都会执行的操作

Promise构造函数存在以下方法:
all() 用于将多个 Promise实例,包装成一个新的 Promise实例
race() 同样是将多个 Promise 实例,包装成一个新的 Promise 实例
allSettled() allSettled() 将返回一个对象数组,而不是一个数组,它包含 {status, value, reason} 描述每个承诺是被履行还是被拒绝

resolve()reject()try()

var、let、const三者区别

可以围绕下面五点展开:
1.变量提升var声明的变量存在变量提升,
即变量可以在声明之前调用,
值为undefinedlet和const不存在变量提升,
即它们所声明的变量一定要在声明后使用,否则报错

2.暂时性死区
var不存在暂时性死区let和const存在暂时性死区,
只有等到声明变量的那一行代码出现,
才可以获取和使用该变量

3.块级作用域var不存在块级作用域let和const存在块级作用域

4.重复声明var允许重复声明变量let和const在同一作用域不允许重复声明

5.变量修改 声明的变量var和let可以const声明一个只读的常量。一旦声明,常量的值就不能改变使用能用const的情况尽量使用const,其他情况下大多数使用let,避免使用var

bind、call、apply 区别
1.call和apply会调用函数,且会改变函数内部的this指向
2.call和apply传递的参数不一样,call传递参数aru1,aru2.形式 而apply必须是数组形式[arg]
3.bind 不会调用函数,可以改变函数内部指向

应用场景:
1.call经常做继承
2.apply经常和数组有关系,比如借助于数学对象实现数组的max、min
3.bind不调用函数,但改变this指向,比如改变定时器内部的this指向apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即 A 对象应用 B 对象的方法。 call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2); 即 A 对象调用 B 对象的方法。 bind 除了返回是函数以外,它的参数和 call 一样。

vue3 相比较于 vue2 在编译阶段有哪些改进
静态模板提升(Static Template Hoisting):Vue 3 引入了静态模板提升技术,通过对模板进行分
析和优化,将模板编译为更简洁、更高效的渲染函数。这种优化可以减少不必要的运行时开销,并
提高组件的渲染性能。
Fragments 片段支持:Vue 3 支持使用 Fragments 片段来包裹多个根级元素,而不需要额外的父
元素。这样可以避免在编译阶段为每个组件生成额外的包裹元素,减少了虚拟 DOM 树的层级,提
高了渲染性能。
静态属性提升(Static Props Hoisting):Vue 3 在编译阶段对静态属性进行了优化,将静态属性
从渲染函数中提取出来,只在组件初始化时计算一次,并在后续的渲染中重用。这样可以减少不必
要的属性计算和传递,提高了组件的渲染性能。
事件处理函数的内联化:Vue 3 在编译阶段对事件处理函数进行了内联化,将事件处理函数直接写
入模板中,而不是在运行时动态生成。这样可以减少运行时的事件绑定和查找开销,提高了事件处
理的性能。
静态节点提升(Static Node Hoisting):Vue 3 通过静态节点提升技术,将静态的节点在编译阶
段进行处理,避免了在每次渲染时对静态节点的比对和更新操作,提高了渲染性能。
缓存事件处理器(Cached Event Handlers):Vue 3 在编译阶段对事件处理器进行了缓存,避免
了重复创建事件处理函数的开销。对于相同的事件处理器,只会创建一次,并在组件的生命周期中
重复使用,减少了内存占用和运行时开销。
更细粒度的组件分割(Fine-Grained Component Splitting):Vue 3 支持更细粒度的组件分割,
可以将组件的模板、脚本和样式进行独立的编译和加载,以实现更好的代码拆分和按需加载,提高
了应用的加载速度和性能。
这些改进使得 Vue 3 在编译阶段能够生成更优化的代码,减少了不必要的运行时开销,并提高了组件的渲
染性能和整体的运行效率。

你可能感兴趣的:(前端)