乐趣区

初级前端开发面试总结

前端面试总结
先说背景,本人 2018 年 7 月毕业,去年十月校招到今年 10 月一直在做前端开发工作,年前打算换工作,就重新梳理下面试考点总结包含:JavaScript 基础,CSS 基础,常见算法和数据结构,React&Vue 框架,计算机网络相关知识,可能有的点很细,有的点很大,参考个人情况进行总结,方便对知识进行回忆,有的列举出了参考答案,有的则在文末列举了优秀回答
闭包

闭包的概念?
闭包的作用?
使用闭包的注意点?

事件机制

事件 3 个阶段 事件捕获阶段,处于目标阶段,事件冒泡阶段
默认为事件冒泡

ES6

let const class 模块化 等等常用 ES6 知识
箭头函数作用,此处可以扩展考察 this 指向问题
set map 相关

原型链

4 种继承方式
new 原理

深拷贝 & 浅拷贝

数据类型
基本数据类型和引用数据类型

跨域

同源策略
CORS
JSONP
Iframe + document.domain

安全

CSRF 跨站请求攻击(原理,保护措施 referer token 验证码,设置 cookie 的 httponly 属性,post 请求等等
XSS(同上

HTTP 方法

几种方法介绍
axios 库

输入 URL 到页面成功渲染的过程

经典问题 (任何一个步骤都可以引申来考察
DNS 解析(具体的解析过程
TCP 连接
http 请求 (状态码考察
返回数据 浏览器渲染页面(页面渲染过程
上面这些模块下面一一例举

DNS 解析过程

概念
浏览器缓存
系统缓存
路由器缓存
域名提供商
顶级域名服务器
主域名服务器

浏览器页面渲染

加载 html 构建页面 dom 树
解析 css 构建渲染树
渲染树构建完成后,将渲染树绘制到屏幕(回流和重绘
JS 解析,会阻塞 dom 树的构建

状态码

http 缓存 304
强制缓存(expires cache-control
对比缓存(Etag & if-none-match last-modified & if-modified-since
301 302 区别(永久性重定向(带缓存和临时性重定向)

垃圾回收

引用计数
标记清除

TypeScript

使用就不说了,总结下优缺点
增加了代码的可读性和可维护性 编译时错误提示
包容性 .js 可写为 .ts
拥抱 ES6,框架支持
学习成本高如:类,泛型,接口

函数式编程

概念 相同的输入 永远的到相同的输出,且没有任何副作用
副作用 比如 ajax 请求 改变全局变量
优缺点 1. 缓存性 2. 可移植性 3. 并行性 不需要共性内存
柯里化的概念,作用(最好不要答装逼 我还没想到更好的答案
我列举一个知乎答案:统一接口,封装的每一层都干干净净,逻辑表现清楚

IndexedDB

特点
区别 LocalStorage SessionStorage(1. 同步 2. 存储大小)

WebSocket

概念
特点
readyState

排序算法

常见的排序算法 复杂度 稳定性
快速排序 不稳定 空间复杂度 O(logn) 平均时间复杂度 O(nlogn) 最差 …O(n2)
选择排序 不稳定 空间复杂度 O(1) … 所有都是 O(n2)
冒泡排序 稳定
堆排序 不稳定 空间复杂度 O(1) … 所有都是 O(nlogn)
插入排序

哈希表

数组和链表的特点
搜索插入和删除的时间复杂度 O(1)

二叉树

先序遍历
中序遍历
后序遍历
层序表里
树高

链表
翻转链表
AVL 树 二叉查找树

特点
O(logn)

精度丢失问题

0.1 + 0.1 != 0.2 (为什么
计算机内部的信息都是由二进制存储的,但是有些浮点数没法用二进制精准的表示出来
小数转整数
Math.round() 四舍五入
Math.ceil() Math.floor()

生成随机数

引入 Math.random() [0,1) 的随机小数
parseInt(Math.random()*(m-n)+n) [n, m)
Math.round(Math.random()*(m-n)+n) [n, m]

数组去重

var set = new Set([1,1,2,2,3,3,3,3]) var arr = […set]
indexOf

如何判断数组是数组

Array.isArray(arr) ES5 的方法
arr instanceof Array
arr.__proto__.constructor === Array()
Object.prototype.toString.call(arr) === ‘[object Array]’ // 数据原型和对象原型定义的 toString 方法不同
Object.prototype.toString.call(obj) === ‘[object Object]’ // 如上
Object.prototype.toString.call(null) === ‘[object Null]’ // 推荐此方法

数组指定个数去重 findDuplicate(num)
es6 Set Map 相关操作
反转字符串
JS 异步

异步解决历史 (Ajax 的进化历程)
Promise,Async/Await 用法 Promise 缺点
Promise API Promise.all & Promise.race

Ajax

ReadyState (0, 1, 2, 3, 4) 5 中状态
js 实现 ajax
优缺点

单 / 双向数据绑定

MV** 概念
vue/react 数据绑定机制

Vue

生命周期
父子组件通信
双向数据绑定
vm.$nextTick 原理

React

生命周期
Virtual-dom 技术以及改良后的 Diff 算法
对比 Vue.js

Position 属性
几种属性值
Box-sizing 属性

content-box border-box
盒模型 W3c 标准盒模型和 IE 盒模型

两栏布局 三栏布局
常见自适应布局写法
回流和重绘

概念
举例
如何避免 eg: DocumentFragment, Absolute

浮动

伪元素和伪类
清除浮动常见 3 种方法

隐藏元素

display none
visibility hidden 区别

垂直居中布局
常见的垂直居中布局方法
前端性能优化
列举常见前端性能优化方法

列举一些优秀回答 输入 URL 你可以看到什么?HTTP 缓存 域名解析过程 vue 生命周期 React 生命周期 CSRF 攻击 水平垂直居中布局

退出移动版