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測試框架了解一下

相關文章
相關標籤/搜索