前端面試問題集錦

HTML部分

  • 對HTML5的理解

html5一些問題
<!DOCTYPE html>
manifest的部分被MDN標記為過時
storage部分
視頻,音頻,位置,
placeholder <input type="search" name="user_search" placeholder="Search W3School">
postMessage: XDM跨文檔消息傳送 當(dāng)前頁面的iframe或者當(dāng)前頁面彈出的窗口 MDN

  • Web語義化

語義化標簽
優(yōu)點:結(jié)構(gòu)清晰,利于閱讀和seo

  • SEO
  • 頁面加載的過程

http://blog.jobbole.com/12749/
dom tree, style rules, render tree(layout),paiting

  • LocalStorage,cookie,session

localStorage 永久存儲,本地存儲,長度沒有限制,setItem,getItem,鍵值對存儲
SessionStorage 瀏覽器會話關(guān)閉以后就會清理掉,其他和localStorage一樣
cookie 最好不要超過4K 給服務(wù)器發(fā)送請求的時候會帶上,數(shù)量有限,

  • history

history.go(-1)往前一個頁面
history.back() == history.go(-1)
history.forward() == history.go(1)

  • requestAnimationFrame

把所有的dom操作都集中在一次重繪中,跟隨瀏覽器刷新頻率,不可見或者隱藏的元素不會進行重繪,cancelAnimationFrame

  • Canvas & SVG
  • https

在http和TCP之間放置一層SSL(安全套接層)
拿到公鑰
公開密鑰加密

  • websocket

不是http協(xié)議,需要專門的服務(wù)器支持
ws:// ws://
帶寬小

var socket = new WebSocket("ws://example.com/")
socket.onopen = function(){}
socket.onerror = function(){}
socket.onclose = function(){}

CSS部分

布局

  • 幾種布局方式

固定布局: 像素布局
流體布局: 百分比
彈性布局: 字體為基礎(chǔ)單位 em? 還有說flexbox的
左邊定寬,右邊自適應(yīng)
經(jīng)典的圣杯布局 我的總結(jié)
高度定寬+自適應(yīng) (初步想法是利用js)

  • 變形

transform: rotate() scale(0.8) skew() translate(50px,50px)

  • 動畫

兼容性,需要加前綴
@keyframes myfirst
{
0% {background: red;}
25% {background: yellow;}
50% {background: blue;}
100% {background: green;}
}

- css3邊框
>圓角border-radius
陰影 box-shadow
- box-sizing
>box-sizing屬性可以為三個值之一:content-box(default),border-box,padding-box。
content-box,border和padding不計算入width之內(nèi)
padding-box,padding計算入width內(nèi)
border-box,border和padding計算入width之內(nèi),其實就是怪異模式了~
- flex
- css hack
>gulp post css autoprefixer
PostCSS插件 [CSSNext](https://github.com/cssnext/cssnext) 用下一代CSS書寫方式兼容現(xiàn)在瀏覽器
PostCSS插件 [Autoprefixer](https://github.com/postcss/autoprefixer) 為CSS補全瀏覽器前綴
PostCSS插件 [CSS Grace](https://github.com/cssdream/cssgrace) 讓CSS兼容舊版IE
CSS3 transition transform animate
- CSS3選擇器 
>[w3c](http://www.w3school.com.cn/cssref/css_selectors.asp)
#### 組合選擇器
**E, F**:  E或者F
**E F**:  E的所有后代F
**E>F**:  E的子代F
**E+F**:  E之后的所有同級元素F 
偽類 (nth-of-type)
- w3c盒子模型 和 IE盒子模型,box-sizing屬性
- BFC
- 優(yōu)先級
> 內(nèi)聯(lián)1000 id 100 class 10 tag 1 
less 與 sass
background-*系列屬性,這個不要忽視了,還是很重要的


#JS部分
- 原型鏈的解釋
>每個構(gòu)造函數(shù)都有一個原型對象,實例有一個指向原型的指針,如果原型是別的構(gòu)造函數(shù)的實例的時候,層層遞進就有了原型鏈

function SuperType(){
this.property = true;
}
SuperType.prototype.getSuperValue = function(){
return this.property;
};
function SubType(){
this.subproperty = false;
}
//繼承了SuperType
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function (){
return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true

- 作用域鏈
>
- 閉包(手寫)
- 繼承(手寫)
>利用原型鏈(就在上面)
利用call或者apply
綜合利用上面的兩種
或者是利用Object.create原型繼承
http://www.lxweimin.com/p/a82de7858dd7
- call,apply,bind
>call的話是單個參數(shù),apply是參數(shù)數(shù)組,綁定函數(shù)執(zhí)行的活動對象
- 聲明提升
>JavaScript引擎在執(zhí)行的時候,會把所有變量的聲明都提升到**當(dāng)前作用域**的最前面。
- new Object()  
>new其實是跟的是構(gòu)造函數(shù)
原型指針指向Object的原型,繼承Object的屬性
也可以用字面量方式生成  {}
關(guān)于[new](http://www.lxweimin.com/p/2b99d9ad83c5)
- 數(shù)據(jù)類型
>基本數(shù)據(jù)類型Undefined、Null、Boolean、Number和String,按值訪問
Object,后來ES6還除了Symbol,
- typeof
>typeof是小寫
其中Null的typeof是object
typeof顯示函數(shù)是function
正則表達式有可能是function,ie會可能是object
es規(guī)定實現(xiàn)了[[call]]方法的typeof都顯示為函數(shù)
檢測類型建議用instanceof,數(shù)組的話建議Array.isArray()
- Number
> Number.MAX_VALUE  最大值 
Number.NEGATIVE_INFINITY 最小值、Number.MIN_VALUE
isFinite(num)
NaN與自身也不等
三個函數(shù)轉(zhuǎn)化 Number,ParseInt,parseFloat
- 高階函數(shù)
- JSON
- 跨域
>JSONP 利用動態(tài)生成javascript標簽,服務(wù)器動態(tài)生成js代碼,callback函數(shù)里面有json的數(shù)據(jù)

var flightHandler = function(data){
alert('你查詢的航班結(jié)果是:票價 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 張。');
};
// 提供jsonp服務(wù)的url地址(不管是什么類型的地址,最終生成的返回值都是一段javascript代碼)
var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler";
// 創(chuàng)建script標簽,設(shè)置其屬性
var script = document.createElement('script');
script.setAttribute('src', url);
// 把script標簽加入head,此時調(diào)用開始
document.getElementsByTagName('head')[0].appendChild(script);
</script>

iframe 通信 設(shè)置domain,前提是兩個為主域名
CORS,ajax的
onmessage,也是可以跟頁面產(chǎn)生的頁面進行跨域通信
web worker也有g(shù)lobal的
- Ajax
> xhr
- 原生DOM操作(比如 逆序DOM節(jié)點)
- 事件捕捉,捕獲,冒泡,代理
- Array常用函數(shù)
>[mdn](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array)
length屬性,toString,toLocalString,valueOf      push,pop,shift,unshift, 
reverse sort,對當(dāng)前數(shù)組進行排序
splice 刪除,插入,替換,針對當(dāng)前數(shù)組
concat slice針對當(dāng)前數(shù)組創(chuàng)建新數(shù)組
迭代方法 es5 every  filter  forEach  map some (item,index,array)
檢測是不是數(shù)組Array.isArray() ,instanceof 在框架不同的時候容易出問題
- String常用函數(shù)
- Object常用的
>toString,toLocalString,valueOf
hasOwnProperty,isPrototypeOf,propertyIsEnumerable
- Function
>Object有的都有了,還有arguments,apply,call,bind,caller,constructor,length,name,prototype
- JS動畫
- ES5
>[Object.create()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create)、[Object.defineProperty()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)、[getters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)和[setters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)、[嚴格模式](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)以及[JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)對象
- CommonJS、AMD、CMD 模塊化編程
- 多重繼承
>看到一個方案,是利用設(shè)計模式的Mixin,比如Jquery的extend,其實本質(zhì)上是復(fù)制屬性
es6的proxy
- sort
>先大寫再小寫,字母序
- es6
>箭頭函數(shù)(匿名函數(shù))
map
set
generator
proxy
class
模塊
super

## DOM&&BOM
- DOM操作
>添加節(jié)點,appendChild,insertBefore
移除節(jié)點 removeChild
復(fù)制節(jié)點 cloneNode
創(chuàng)建 createElement
查找 getElementById get
- elements
- onready和onload的區(qū)別
>onready表示整個文檔加載完了,onload表示所有的資源都加載完
樣式控制可以在onload方面加載完,onready事件觸發(fā)類的可以加載
- 事件流
>事件流描述的是從頁面中接收事件的順序
事件先捕獲,再冒泡
最開始ie只支持冒泡,Netscape是捕獲,然后后面ie9就開始用捕獲,最保險的方式是用冒泡
- ajax

var xhr = XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if (xhr.status === 200) {
option.onload(JSON.parse(xhr.responseText));
}
else {
option.onerror(xhr.status);
}
}
}
xhr.open("post",url,true);
xhr.send(form);


#框架部分(大部分按照簡歷來)
Angular臟檢查機制
手寫Angular指令,知道其生命周期
手動實現(xiàn)MVC(考察)
Angular的理解
你心中的前端框架
Promise(感覺已經(jīng)成了必考項目)[極客學(xué)院](http://wiki.jikexueyuan.com/project/javascript-promise-mini-book/how-to-write-promise.html)
worker多線程計算
- require.js使用什么設(shè)計模式
>我覺得是 觀察者模式



##HTTP
- HTTP1/2 理解
報文
>報文分為請求報文和相應(yīng)報文
報文由報文首部和報文主體組成中間由第一個CR+LF分割
請求報文首部:請求行+請求首部字段+通用首部字段+實體首部字段
響應(yīng)報文首部:狀態(tài)行+響應(yīng)首部字段+通用首部字段+實體首部字段
![](http://upload-images.jianshu.io/upload_images/2099962-8591869039fad2e6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 狀態(tài)碼
>200 OK
204 No Content
206 Partial Content 斷點續(xù)傳
301/302 Moved Permanently 重定向
301 Permanently Moved 代表永久性轉(zhuǎn)移
302 Temporarily Moved 代表暫時性轉(zhuǎn)移
303 See Other 和302有點像,但是指定用GET獲取新資源
304 Not Modified
403
404 Not Found 未找到資源
500 Internal Server Error 服務(wù)器錯誤
[r](http://kb.cnblogs.com/page/168720/)
- 優(yōu)化
- 緩存控制(必考)
- 網(wǎng)絡(luò)協(xié)議,TCP三次握手,四次揮手
- XSS
>跨站腳本攻擊,表單數(shù)據(jù)加入html代碼或者script將document.cookie通過img發(fā)送給其他服務(wù)器,植入攻擊代碼
- SQL注入攻擊
>url上面q=ss之類的,代碼的sql就發(fā)生改變
- CSRF跨域請求偽造(必考) 
通過已經(jīng)驗證的信息,然后發(fā)送腳本
避免方式1.ssl 2.每次都加上驗證
>CSRF
- 跨域
>六種(document.domain+iframe,動態(tài)創(chuàng)建script,利用iframe和location.hash,window.name,使用HTML5 postMessage,利用flash)
- 學(xué)習(xí)經(jīng)歷和方法
- 性能優(yōu)化
>文件合并,壓縮
減少dom操作
css動畫代替js動畫
web worker
局部變量代替全局變量
閉包記得回收
- 單元測試  [Mocha和chai.js](http://www.lxweimin.com/p/975de13d0406)
>測試驅(qū)動開發(fā)
- 瀏覽器有幾種內(nèi)核
>Trident  IE 
gecko Mozilla
WebKit chrome safari
Presto Opera

自動化工具 gulp webpack 
模板引擎如何實現(xiàn)變量替換
代碼考察,
排序算法實現(xiàn)
數(shù)組去重。 兩種,一種利用哈希,比較快,另外一種先排序后去重,這種節(jié)約空間。
條件注釋
數(shù)據(jù)庫知識
MongoDB, PostgreSQL,Redis,HBase

兼容性問題
polyfill,shim
autoprefixer postCSS
reset

## 開放題
- 用戶說網(wǎng)頁有問題,你怎么判斷
> 不知道怎么回答
- 怎么知道自己的網(wǎng)頁出問題了
> 我的思路,一個是爬蟲定時,第二個是頁面加載后發(fā)送ajax來統(tǒng)計。

這位同學(xué)總結(jié)了前端[面試題目](http://www.lxweimin.com/p/fe62c7e33ba8)
前端的一些資源,https://github.com/JacksonTian/fks
牛客網(wǎng)上經(jīng)典問題
http://www.nowcoder.com/ta/front-end-interview/review?page=1
折磨人的面試題 http://www.tuicool.com/articles/feiayiq
requirejs的源碼


書籍推薦
《javascript高級程序設(shè)計》
《es6》
《Node》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 前端開發(fā)面試知識點大綱: HTML&CSS: 對Web標準的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,458評論 0 25
  • 前端面試題的簡單整理,都只是大概回答,具體某些問題的具體理解后續(xù)會補上。 前端頁面有哪三層構(gòu)成,分別是什么?作用是...
    李歡li閱讀 493評論 0 2
  • HTML HTML5標簽 媒體查詢head部分寫法 Doctype作用? 嚴格模式與混雜模式如何區(qū)分?它們有何意義...
    Mayo_閱讀 666評論 0 8
  • <a name='html'>HTML</a> Doctype作用?標準模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,540評論 1 19
  • 一點半準時睜開眼,電話同時振動。是閨蜜老公豬頭的電話,他那特有的大喇叭瞬間通過電話傳遍了整個辦公室,“還沒睡醒啊,...
    向行閱讀 400評論 6 5