首页/前端第一次面试总结/
前端第一次面试总结
2021-11-13 15:04:48 前端 2500

前端面试总结

前段时间去了一家公司进行面试,由于太紧张,很多问题并没有解答出来,之后把这些问题归类总结一下

1、 == 和 === 有什么区别

当进行两等比较时:会先检查两个操作数数据类型,如果相同则进行三等比较,如果不同则愿意为你进行一次类型转换,转换成相同类型后再进行比较,而三等比较时,如果类型不同,直接返回false。
比较过程:
1、 双等==:

  • 如果两个值类型相同,按照 === 比较方法进行比较
  • 如果两个值类型不同,也有可能相等,需根据一下规则进行类型转换再比较,示例:
    1、如果一个是null,一个是undefined,那么相等
    2、如果一个是字符串,一个是数值,会把字符串转换成数值之后再进行比较

2、三等===:

  • 如果类型不同,就一定不相等。
  • 如果两个都是数值,并且是同一个值,那么相等,如果其中至少一个是NaN,那么不相等。(判断一个值是否是NaN,只能使用 isNaN() 来判断)。
  • 如果两个值都是字符串,每个位置的字符都一样,那么相等,否则不相等。
  • 如果两个值都是 true,或是 false,那么相等。
  • 如果两个值都引用同一个对象或函数,那么相等。
  • 如果两个值都是 null,或是 undefined,那么相等。

2、 数组的常用方法

  • 添加:
    1、push(element): 从数组添加,push方法返回数组的长度
    2、unshift(element): 从头部添加

  • 删除:
    1、pop(): 从尾部弹出
    2、shift(): 从头部弹出

  • splice:

    splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。

    1、splice(index,howmany,item1,.....,itemX)

    index: 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
    howmany: 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
    item1, ..., itemX: 可选。向数组添加的新项目。

    2、splice(起点, 长度): 删除

    3、splice(起点, 长度, 添加元素): 插入

    4、splice(起点, 长度, 替换元素): 替换

  • concat: concat(数组),连接数组

  • join: join('分隔符'),生成字符串(字符串split)

  • sort: 排序
    1、sort(): 只认字符串
    2、sort(function() {}): 可对数字排序

3、 有用过promise吗,简单介绍一下

初始化Promise,传入的函数会立即执行。
promise有三个状态,pendingresolvedrejected,promise的状态一旦有等待pedding变为resolved或rejected,那么当前的promise会被标记完成,后面则不会再次改变该状态。promise有 then 和 catch 两个方法, then(res, err) 有两个参数,但第二个参数是不会被用到的。catch(err) 用来处理异常
第一,reject是用来抛出异常的,catch是用来处理异常的;
第二:reject是Promise的方法,而then和catch是Promise实例的方法Promise.prototype.thenPromise.prototype.catch

then 的第二个参数和catch捕获错误信息的时候会就近原则,如果是promise内部报错,reject抛出错误后,then的第二个参数和catch方法都存在的情况下,只有then的第二个参数能捕获到,如果then的第二个参数不存在,则catch方法会捕获到。

4、Async Await

async 是对promise的封装,async返回一个promise函数,await相当于promise的then,await后面报错会终止执行,可以用

try {
  xxx();
} catch (err) {
  console.log(err)
}

来捕获

5、如果想使用await,有什么先行条件

必须先申明Async,不然await是不起作用的

6、有一个登录,生成的token,你会存储到哪

存到localstorage里

7、axios有用过吗,接上个问题,token失效,重新请求

当时这个问题没有回答出来,在工作和个人项目中并没有遇到类似的问题,所以没有学习到拦截器这个知识点,通过这次面试知道可以通过axios的拦截器来判断token。

8、react有用过吗,父子组件传值怎么传

有用过,父传子可以通过props来向子组件传值,子传父,无法向Vue的emit一样可以直接往父组件传值,需要在父组件写一个方法来实现,子传父这个问题由于当时太紧张没想起来

9、css的问题,有两个div,说出两个div之间的间距,margin-top: 10px,margin-bottom: 15px

这里问的是css的margin纵向重叠,答案是15px

10、说说你做了那些优化页面响应速度和用户体验

这个当时我回答的是,用七牛云作为图片服务器,网站中的图片使用七牛云加速访问,使用骨架屏在页面没加载完成显示,其实还能回答的更多,使用css雪碧图,压缩js代码,使用CDN,剔除重复的css和js等

11、兼容性,谈谈兼容了什么

只要您的客户存在使用不同浏览器(ie,firefox,chrome等)的可能,那你就不得不从完美的理想状态回到现实,因为不同核心的浏览器对CSS的解析效果呈现各异,导致您所期望的效果跟浏览器的“理解”效果有偏差

这个当时没怎么回答上,后面面试结束后,突然想到几点
1、使用css reset 重置HTML和css各个元素等在不同浏览器的默认属性值
2、被点击过后的超链接不再具有hover和active属性

  // 解决办法:按lvha的顺序书写css样式:
  ":link": a标签还未被访问的状态;
  ":visited": a标签已被访问过的状态;
  ":hover": 鼠标悬停在a标签上的状态;
  ":active": a标签被鼠标按着时的状态;

我现在公司的项目和自己的并没有要兼容IE浏览器,所以很多关于低版本的IE兼容性问题并没有遇到过

12、短信验证服务

这个项目我用的是织梦的后台管理系统搭建的,但是织梦并没有短信服务平台的插件,所以我对接了阿里云的短信验证平台,我用的是阿里云的阿里大于的短信接口,随机了四位数字作为验证码,我当时在数据库新建了一个张表,用来存接收下来的验证码及发送时间,前端获取到后和输入框里的验证码进行比对,正确后返回登录成功,失败显示验证码输入错误的提示信息