前端面试大纲-自用

592 阅读6分钟

HTML 篇

网页中的SEO优化

题目解析

dom对象的基本操作

题目解析

event对象中 target和currentTarget 属性的区别

题目解析

白屏/首屏时间计算

题目解析

前端性能监控/异常监控

TODO:题目解析

请说说 scrollIntoViewscrollIntoViewIfNeeded 的使用区别

scrollIntoView

scrollIntoViewIfNeeded

CSS 篇

你知道什么是BFC吗?

题目解析

说说CSS选择器以及这些选择器的优先级

  • !important (后声明的important可以覆盖之前声明的)
  • 内联样式(1000)
  • ID选择器(0100)
  • 类选择器/属性选择器/伪类选择器(0010)
  • 元素选择器/伪元素选择器(0001)
  • 关系选择器/通配符选择器(0000)

如何处理CSS命名混乱导致相互影响问题

  • 使用BEM规范来命名类
  • 使用CSS Modules方案
  • 使用css in js方案,例如styled-components
  • 使用tailwindcss等原子性css方案

CSS Modules

产生局部作用域的唯一方法,就是使用一个独一无二的class的名字,不会与其他选择器重名。这就是 CSS Modules 的做法

题目解析

BEM命名规范

BEM的意思就是块(block)、元素(element)、修饰符(modifier),是由Yandex团队提出的一种CSS Class 命名方法。

需要注意的是,BEM规范并不是让类命无限级联,因为它并不严格的与DOM挂钩,所以元素层级嵌套的多少层也没关系,命名约定是为了更好的识别顶级组件模块

决战BEM, 10个常见问题及其解决方案

Tailwind.css

给类取名太痛苦?试试tailwindcss吧

CSS预处理器scss,less

  • lessscss/sass的区别

CSS中的层叠上下文和层叠顺序以及层叠水平

题目解析

了解 Flex 布局么?平常有使用 Flex 进行布局么?

题目解析

了解 Grid 布局么?平常有使用 Grid 进行布局么?

flex: 1中,设置height或者width的作用

  • 如果没有设置width,当内部元素的内容大小超过平均分配的剩余空间时,元素的宽度等于内容大小
  • 如果设置了width并且这个width的大小小于平均分配的剩余空间大小时,取平均分配的剩余空间
  • 当flex设置为 1 时 相当于 剩余空间大小 = 父元素的宽度,因此,平均的剩余空间大小等于 = 父元素的宽度 / 元素的个数
  • 直接设置width为0可以保证元素宽度平分父元素宽度
  • 总结
    • 可以解决子元素高度宽度超出父元素问题
    • 可以解决flex:1;的子元素height: 100%无效问题

如何设计一个 4 列等宽布局,各列之间的边距是 10px(考虑浏览器的兼容性)?

  • flex布局
  • grid布局
  • float布局
  • table布局

行内元素,块级元素的水平/垂直居中

CSS 清除浮动的原理是什么?

clear 属性规定元素的哪一侧不允许其他浮动元素

浮动元素和绝对定位元素的区别和应用?

CSS 中的 vertical-align 有哪些值?它在什么情况下才能生效?

CSS 中的 background 的 background-image 属性可以和 background-color 属性一起生效么?

了解 CSS 3 动画的硬件加速么?在重绘和重流方面有什么需要注意的点?

伪元素和伪类有什么区别?

浮动元素和绝对定位元素的区别和应用?

多行元素的文本省略号

white-space,word-break,word-wrap区别

如何判断一个元素 CSS 样式溢出,从而可以选择性的加 title 或者 Tooltip?

如何让 CSS 元素左侧自动溢出(... 溢出在左侧)

JS/TS 篇

实现对象的深拷贝

instanceof的底层原理

function instance_of(L, R) {
    var O = R.prototype;
    L = L.__proto__;
    while (true) {
      if (L === null) return false;
      if (O === L) return true;
      L = L.__proto__;
    }
}

如何判断对象的一个属性/方法是自身的还是原型链上的

通过hasOwnPropertyin操作符组合

function isAttributeInPrototype(obj, key) {
    return !obj.hasOwnProperty(key) && (key in obj)
}

用 JavaScript 实现函数的防抖(debounce)节流(throttle)

题目解析

改变函数内部this指针的指向函数(bind,apply,call的区别及实现原理)

在 JavaScript 中如何实现对象的私有属性?

async / awaitPromise 的区别?

JavaScript 中几种迭代语法在 Chrome 等现代浏览器中的性能差异?

谈谈你对 TypeScript 的理解?

在 JavaScript 可以有哪几种形式实现继承,各有什么优缺点, 说说 ES5 和 ES6 继承的区别?

es6的proxy介绍,以及与es5中的Object.defineProperty的区别

es6 Modules 相对于 CommonJS 的区别是什么?

设计模式篇

说说在开发中经常的几种设计模式

Vue 篇

React 篇

谈谈React Hooks中过时闭包问题

谈谈几种常见Hooks的用法及注意点useEffectuseCallbackuseMemouseRef

React-Router中history模式和hash模式的区别,背后的实现原理是什么

实现一个防抖hooks useDebounce

实现一个节流hooks useThrottle

在无状态组件每一次函数上下文执行的时候,react用什么方式记录了hooks的状态?

多个react-hooks用什么来记录每一个hooks的顺序的 ? 换个问法!为什么不能条件语句中,声明hooks?

function函数组件中的useState,和 class类组件 setState有什么区别?

react 是怎么捕获到hooks的执行上下文,是在函数组件内部的?

useEffect,useMemo 中,为什么useRef不需要依赖注入,就能访问到最新的改变值?

useMemo是怎么对值做缓存的?如何应用它优化性能?

为什么两次传入useState的值相同,函数组件不更新?

前端工程领域篇

谈谈webpackloderplugin的区别

谈谈babel的工作原理

谈谈@bable/preset-env@babel/plugin-transform-runtime

浏览器篇

浏览器强缓存协商缓存的区别及运作方式

协商缓存的etag方式和last-modefined方式的各自优缺点

题目解析

cookie的属性有哪些

浏览器从输入url到页面呈现的过程,尽可能详细

HTTP/HTTPS

https加密是怎么做的,具体的实现过程

算法能力篇

二叉树的深度优先广度优先介绍,先序遍历中序遍历后序遍历等,深度和广度具体怎么代码实现?口述代码

网络安全篇

常见的几种网络攻击方式,如何应对?

内容安全策略CSP(Content-Security-Policy)

题目解析

性能优化篇

有用过cdn吗?cdn的优点有哪些?cdn怎么实现就近访问的

业务篇

笔试篇

参考文章