100个前端面试题

预计会总结100个( ^ω^),目前74个,后续会继续更新。javascript

答案大部分来自网络,是我选取的说明的较好的博文。css

我的博客了解一下:www.bougieblog.cnhtml

原生js

基本数据类型

String, Object, Number, Symbol, undefined, null前端

内存泄露

变量提高及做用域,做用域链,词法做用域,动态做用域

this指向

call, apply, bind

Event Loop及定时器和异步的原理

闭包

原型和继承链

对象的深拷贝和浅拷贝

原生ajax写法

摘自youmightnotneedjqueryvue

// post
var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);

// get
var request = new XMLHttpRequest();
request.open('GET', '/my/url', true);
request.onload = function() {
  if (request.status >= 200 && request.status < 400) {
    // Success!
    var resp = request.responseText;
  } else {
    // We reached our target server, but it returned an error
  }
};
request.onerror = function() {
  // There was a connection error of some sort
};
request.send();

// 稍微封装一下
function ajax({ url, method, headers, data, success, error }) {
    headers = headers || 'application/x-www-form-urlencoded; charset=UTF-8'
    let request = new XMLHttpRequest()
    request.open(method, url, true)
    request.setRequestHeader('Content-type', headers)
    request.onload = function(progressEvent) {
        let response = progressEvent.currentTarget
        let {status, statusText, responseText, responseUrl} = response
        if(status > 199 && status < 400) {
            if(success) success(responseText)
        } else {
            if(error) error(statusText)
        }
    }
    request.onerror = function(error) {
        console.error(error)
    }
    request.send(data)
}
复制代码

严格模式

实现一个Event Bus

如下是简单模仿vue jsjava

class EventBus{
    constructor() {
        this.eventList = new Map()
    }
    $emit(evName, ...args) {
        let fn = this.eventList.get(evName)
        if(!fn) {
            console.error(`'${evName}' is undefined`)
            return
        }
        this.eventList.get(evName).apply(this, args)
    }
    $on(evName, fn) {
        if(this.eventList.get(evName)) {
            console.error(`duplicated event name : '${evName}'`)
            return
        }
        this.eventList.set(evName, fn)
        return {
            remove: () => {
                this.eventList.delete(evName)
            }
        }
    }
}
复制代码

函数柯里化


ES6/7

这个所有看阮老师的就好了react

Class

Set和Map

generator和async

callback和Promise

Object.defineProperty, Object.defineProperties

Object.setPrototypeOf, Object.getPrototypeOf

Object.getOwnPropertyDescriptors

Proxy和Reflect

Symbol


性能

reflow和repaint,如何避免

前端性能优化


网络和浏览器

跨域请求

GET, POST, PUT, DELETE的区别

请求头和响应头

cookie, session, token

TCP, TCP/IP, FTP, TELNET

http, https和webSocket

nginx反向代理与负载均衡

http2.0

浏览器缓存

浏览器渲染页面的过程

async和defer的区别及兼容性

IE6, 7, 8, 9, 10的兼容性问题

这个凭经验解释了jquery

兼容IE8浏览器的技术选型

win7自带IE8,在政府及事业单位工做的须要掌握webpack

xss攻击和sql注入


算法与模式

排序算法

这个github仓库,包含了不少算法nginx

virtual dom的diff算法

煊赫一时的东西,必须理解

设计模式

MVC, NVP, MVVP, MVVM

POP, OOP, SOA, AOP


html和css

Doctype及其做用

h5新特性

data-*属性的做用

自定义属性,能够经过el.getAttribute('data-custom')取值,el.dataSet.custom取值和赋值。

grid和flex布局及兼容性

flex自IE10开始支持,已成为手机网页主流布局方法。grid布局兼容性通常,估计再过一两年才会普及。

自适应和响应式布局

自适应是随着浏览器的大小变化而变化,响应式是响应屏幕尺寸,须要经过CSS来实现。

px, in, em, rem, vh, vw, vmin, vmax

display的全部可能的值

css画三角形

利用border实现

cubic-bezier

transform全部可能的值

requestAnimationFrame

css动画和js动画

掌握keyframs, transition。


框架

双向绑定,深刻响应式原理,发布订阅模式,观察者模式

单向数据流,状态管理

路由的history和hash模式

Vue和React的区别

Vuex, Redux和Flux

Vue的render和React.createElement

React.createClass,React.Component和函数式申明组件的区别

Mixin

React需使用createClass建立组件

高阶组件

循环元素时为何要加key


工具

sass和less

多看官方文档

webpack, gulp, grunt, rollup, browersify的区别

  • Gulp / Grunt 是前端自动化的工具,旨在提供一个自动化的流程(省去了手动编译less,stylus,sass已经babel的转码,图片的压缩,代码的压缩复制等系列操做),传统的多页面应用很是适合用这个
  • browserify / webpack 提供的是一个前端模块化的方案,让咱们能够将commonJS的模块方式应用与浏览器端
  • webpack 是 browserify 的增强版,不但实现了browserify模块化思想,还将图片,样式等也归入了模块化中
  • rollup 打包代码量小,经常使用来进行类库的打包

babel和babel-polyfill的做用

babel会将ES6语法转化为ES5语法,可是不会转义PromiseObjectArray等上的静态方法,这时候就须要babel-polyfill

ESLint代码风格

git经常使用命令

前端模块化的原理和意义

CommonJS, AMD, CMD, UMD规范

karma, jasmine和mocha

js测试框架了解一下

相关文章
相关标签/搜索