大前端面试题大全

临近春节,很多人又考虑换工作了,考虑到还有一年多的工作的时间,提前总结总结也是不错的,这里就记录一下最近翻到了以及先前自己总结的一些问题,为之后的复习做准备。

HTML 篇

H5 有哪些新特性

  • 语义化标签(header、footer、nav、aside、article、section 等)
  • 增强表单( 传送门 )
  • 本地存储
  • 多媒体元素标签: vedio 与 audio
  • 新增地理定位方法
  • canvas 画布
  • 拖放事件
  • webWorker
  • webSocket

webStorage 和 Cookie 的区别以及各自的优缺点

QQ截图20200616160533.png

从上表可以看到,cookie 已经不建议用于存储。如果没有大量数据存储需求的话,可以使用 localStorage 和 sessionStorage 。对于不怎么改变的数据尽量使用 localStorage 存储,否则可以用 sessionStorage 存储。

svg 与 canvas

![QQ截图20200616160624.png](https://upload-images.jianshu.io/upload_images/23679051-3fb5bed977262e62.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
移动端页面适配方案

CSS 篇

CSS3 的新特性

  • transition(过渡动画)、animation(贞动画)、transform(形状变化)
  • 新增选择器(伪类选择器、相邻选择器等)
  • 边框、阴影、滤镜等
  • 弹性布局、栅格布局

推荐阅读

position 默认值以及默认基于什么定位

默认值为:static;

定位是基于最近的且 position 值为非 static 的父元素;

水平垂直居中有哪些方法。(至少 3 种)

  • translate 方法
  • position + margin 定位
  • flex 布局
  • table-ceil 方法
  • padding 实现

清除浮动有哪些方式。

clear: both
overflow: hidden

BFC 的相关知识考察
BFC提供了一个环境,在这个环境中按照一定规则进行布局不会影响到其它环境中的布局。

常见问题:
高度塌陷
外边距折叠
实现方式:
浮动元素,float 除 none 以外的值
绝对定位元素,position(absolute,fixed)
display 为以下其中之一的值 inline-block,table-cells,table-captions
overflow 除了 visible 以外的值(hidden,auto,scroll)
……
参考文章:浅谈 BFC

CSS 选择器
实现以下字体样式效果

div {
  background-color: black;
}

p {
  &:nth-child(2n) {
    color: white;
  }
  &:nth-child(2n+1) {
    color: red;
  }
  &.center {
    color: yellow;
  }
  // 此处得考虑优先级问题
  &.center ~ p:not(:last-child) {
    color: blue;
  }
  &:last-child {
    color: green;
  }
}

JavaScript 篇
ES6+ 有哪些新特性

...

let 与闭包、解构 undefined 和 null 的值时的默认值问题、class 与原型链、Set 与 除重方法等等
Promise.all() 的实现

function PromiseAll(promiseArr) {
  if (!Array.isArray(promiseArr)) {
    throw new TypeError('You must pass an array');
  }

  const arrayLen = promiseArr.length;
  const resolvedArr = [];
  let pos = 0;

  return new Promise((resolve, reject) => {
    promiseArr.forEach(item => {
      Promise.resolve(item)
      .then(res => {
        resolvedArr.push(res);
        pos++;
        if (pos === arrayLen) {
          resolve(resolvedArr);
        }
      })
      .catch(e => {
        reject(e);
      });
    })
  });
}

数组去括号并去重

// 试题
let originArr = [1, 2, [2, 3], 3, [2, [3, 0]], 4, [[[5]]]]
// 实现的方法:
function formatArr(originArr) {
  function flattenDeep(arr) {
    let resArr = [];
    if (Array.isArray(arr)) {
      resArr = arr.reduce((a,b)=>[...a, ...flattenDeep(b)], resArr);
    } else {
      resArr.push(arr);
    }
    return resArr;
  }
  const flatArr = flattenDeep(originArr);
  return [...new Set(flatArr)];
}

const testArr = [1, [[2], [3, [4, 5]], 5]];
console.log(formatArr(testArr));
// 简单方法
function formatArr(originArr) {
  const flatArr = originArr.toString().split(',');
  const filteredArr = [...new Set(flatArr)];
  return filteredArr.map(n => Number(n));
}

This 指向问题

let obj = {
  b: 1,
  a: () => {
      console.log(this.b)
  }
}

obj.a()
// 输出 undefined

参考文章:深入了解 this

以下代码依次输出的结果

async function async1() {
  console.log('as1')
  await async2()
  console.log('end as1')
}

async function async2() {
  console.log('as2')
}

console.log('start')

async1(1)

setTimeout(() => {
  console.log('setTimeout')
})

new Promise((rs, rj) => {
  console.log('promise')
  rs()
}).then(() => {
  console.log('then')
})

console.log('end')
start
as1
as2
promise
end
end as1
then
setTimeout

HTTP 篇
常用的 HTTP 方法有哪些
GET:用于请求访问已经被 URI 识别的资源,可以通过 URL 传参给服务器
POST:用于传输信息给服务器,主要功能 GET 类似,但一般推荐使用 POST 方式
PUT:传输文件,报文主体中包含文件内容,保存到对应的 URI 位置
HEAD:获得报文首部,与 GET 方法类似,只是不返回报文主体,一般用于验证 URI 是否有效
DELETE:删除文件,与 PUT 方法相反,删除对应 URI 位置的文件
OPTIONS:查询对应 URI 支持的 HTTP 方法
GET 和 POST 的区别
GET 重点从服务器上获取资源,POST 重点向服务器发送数据
GET 传输的数据量小,因为受 URL 长度限制,但效率较高;POST 可以传输大量数据,所以上传文件时只能用 POST 方式;
GET 是不安全的,因为 URL 是可见的,可能会泄露私密信息,如密码等;
POST 较 GET 安全性较高;
请求报文和响应报文
a. 请求报文包含三部分:
请求行:包含请求方法、URI、HTTP版本信息
请求首部字段
请求内容实体
b. 响应报文包含三部分:
状态行:包含HTTP版本、状态码、状态码的原因短语
响应首部字段
响应内容实体
常见的状态码
200:表示请求已成功,请求所希望的响应头或数据体将随此响应返回。
301:永久重定向,资源已永久分配新 URI。
302:临时重定向,资源已临时分配新 URI。
304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
307:临时重定向,POST 不会变成 GET。
401:需要通过 HTTP 认证,或认证失败。
403:表示对请求资源的访问被服务器拒绝了。
404:表示服务器找不到你请求的资源。
500:表示服务器执行请求的时候出错了。
503:表示服务器超负载或正停机维护,无法处理请求。
强缓存和协商缓存
a. 强缓存相关的字段:
expires
cache-control:max-age=number
b. 协商缓存相关的字段:
Last-Modified/If-Modified-Since
Etag/If-None-Match


image.png

性能优化
HTML

image

CSS
能使用 base64 的尽量使用 base64
背景图加载
尽量不使用 @import 语法
JavaScript
减少 DOM 访问
多次修改统一节点时使用 documentFragment 文档片段来做中间拼接处理
减少获取 clientHeight 等信息的次数,会造成反复重绘
合理添加事件监听函数
其它
短链接的生成思路
一般链接的特点:不考虑 query 字段,一般就只有 26 个英文字母,而短链接的特点是含有 ([a-z][A-Z][0-9]),因此一个粗略的想法就是将 26 进制转化成 62 进制,因此将对应算法写出来基本上就算是答道点子上了。

算法的大致思路为: 26进制 -> 10 进制 -> 62 进制

有想了解更多的小伙伴可以去链接看一下,应该对你们能够有所帮助。

你可能感兴趣的:(大前端面试题大全)