高級前端面試題 重要

1、前端工程化

關於前端工程化,是一個很大的命題,你在知乎上搜索前端工程化,會有一些文章,這些文章能夠幫助你理解前端工程化。javascript

說一下我理解的前端工程化吧,前端工程化不僅僅包括前端的模塊化、組件化、自動化,還包括前端性能優化,前端目錄規劃,前端規範化,自動化測試,發佈等等一系列知識。這裏我就不一 一介紹了,感興趣的也能夠去讀讀張雲龍的文章:css

https://github.com/fouber/blog/issues/3html

https://github.com/fouber/blog/issues/10前端

2、 前端設計模式

其實這裏能夠做爲一篇文章來書寫了,不過,假如你不瞭解,能夠網上搜了一下前端設計模式,關於設計模式也是有很多文章的。vue

3、 前端安全性問題

固然,這個是老的話題,有的在初中級前端面試中也會說起到。可是在中高級面試的時候,你要說出前端安全性問題防護,及前端常見安全性問題的攻擊原理是什麼。html5

一、xss跨站腳本攻擊(原理、如何進行的、防護手段是什麼,要說清楚)java

二、CSRF跨站請求僞造(如何僞造法?怎麼防護?等等都要說清楚)node

三、sql腳本注入(注入方式,防護方式)mysql

四、上傳漏洞 (防護方式)jquery

4、 跨域問題的處理

關於跨域,我前面不少文章也說起了,瀏覽器跨域訪問解決方案,這篇文章能夠看一下。

另外,面試官可能會問及 cookie跨域及localStorage跨域問題,關於這一點,也能夠看我以前剛剛寫的文章:http://www.haorooms.com/post/kuayu_localstorage_cookie

5、前端數據加密

一、base64加密

在頁面中引入base64.js文件,調用方法爲:

   

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>base64加密</title> <script type="text/javascript" src="base64.js"></script> <script type="text/javascript"> var b = new Base64(); var str = b.encode("admin:admin"); alert("base64 encode:" + str);      //解密 str = b.decode(str); alert("base64 decode:" + str); </script> </head> <body> </body> </html>

base64加密下載

二、md5加密

在頁面中引用md5.js文件,調用方法爲

  

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>md5加密</title> <script type="text/ecmascript" src="md5.js"></script> <script type="text/javascript"> var hash = hex_md5("123dafd"); alert(hash) </script> </head> <body> </body> </html>

md5加密下載

三、sha1加密

聽說這是最安全的加密

頁面中引入sha1.js,調用方法爲

  

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>sha1加密</title> <script type="text/ecmascript" src="sha1.js"></script> <script type="text/javascript"> var sha = hex_sha1('mima123465') alert(sha) </script> </head> <body> </body> </html>

6、http相關問題

這個可能涉及的東西也蠻多,能夠看我前段時間總結的系列文章:

http://www.haorooms.com/post/long_lianjie_websocket

7、 知識點問題介紹

上面問題多是前端通用問題吧,下面的問題可能都是相關知識點的,下面簡單總結一下:

一、 webpack相關

這個考察你對webpack的理解是使用程度。

例如可能考察以下知識點:

一、hash(contenthash, chunkhash)

二、多頁面配置

三、發佈上線流程

四、如何加快打包速度,減小打包體積

五、和其餘工具的區別(grunt,glup,rollup,parcel,Browserify)

二、狀態管理器相關

主要是flux、redux、vuex等

主要問題以下:

1、flux、redux、vuex數據流向,(例如:點擊按鈕觸發到狀態更改,數據是如何流向的?)

例如flux:

1、用戶訪問 View 2View 發出用戶的 Action 3Dispatcher 收到 Action,要求 Store 進行相應的更新 4Store 更新後,發出一個"change"事件 5View 收到"change"事件後,更新頁面

2、vuex和redux區別

3、vuex數據流?爲何要遵循這個數據流?假如在頁面中直接修改state,而不是經過mutation 的commit方式修改,會怎麼樣?

三、 vue相關

vue相關的問題有不少。僅舉例:

1vue-router如何作歷史返回提示? 2vue-router如何作用戶登陸權限等? 3vue生命週期 4vue組件通訊 5vue服務器渲染 6vue性能優化

四、 nodejs相關

1nodejs經常使用模塊 2nodejs爬蟲 3nodejs  4nodejs請求如何返回大文件

五、 es6相關

一、generate和async await

...

六、算法

1、冒泡排序 2、數據去重方法 3、取1000個數字裏面的質數

七、模塊化

一、amd,cmd及commonjs區別

二、import、require區別

八、其餘




1、自動化測試相關 2mock數據相關 3pwa相關 4nginx相關 5、微信小程序相關 6、敏捷開發等

前言

以前在興安得力的時候,我也出過前端的面試題。那麼前端人員在外面面試的時候,通常技術人員都會考察咱們那些地方呢?我在這裏不妨總結一下!(PS:有點小邪惡,這個公開以後,對於面試者來講是方便了。可是,假如你是公司技術人員,是面試官,您不妨修改一下題目,變通一下!)

javascript常見題目

1、您對js的原型是如何理解的?您對js的繼承是如何理解的?可否舉例說明js的繼承?

關於這個題目,我以前的一篇文章 http://www.haorooms.com/post/js_constructor_pro ,您能夠看一下。理解一下原型prototype,關於繼承,那主要是js原型鏈的繼承。關於繼承的理解及舉例(我這裏就不詳細介紹了,簡單介紹以後,你即便背過了,也不必定理解,對於公司也是不公平的)。我仍是推薦面試者看一本書《[JavaScript高級程序設計(第3版)]》,這本書對js講的很詳細。關於這個題目,您能夠閱讀其第六章就能夠了!認真閱讀以後,相信你能理解,也可以簡單的說出來!

關於js的繼承,確實是重點和難點,我寫過兩篇博客,你們能夠看下:http://www.haorooms.com/post/js_lei_jicheng

http://www.haorooms.com/post/js_jc_lei2

2、js閉包?舉例並說明其主要的做用!

關於閉包,實際上是指有權訪問另外一個函數做用域中變量的函數。具體我以前也寫過一篇文章,能夠看一看!

javascript閉包的理解 http://www.haorooms.com/post/js_bb

javascript閉包入門理解(二):http://www.haorooms.com/post/js_bbtwo

3、js數組主要有哪些方法?主要參數你瞭解嗎?

具體你能夠查一下,經常使用的通常有以下:

1 、shift():刪除數組的第一個元素,返回刪除的值。這裏是0

2 、unshift(3,4):把參數加載數組的前面,返回數組的長度。如今list:中是3,4,0,1,2

三、pop():刪除數組的最後一個元素,返回刪除的值。這裏是2.

四、push(3):將參數加載到數組的最後,返回數組的長度,如今List中時:0,1,2,3

五、concat(3,4):把兩個數組拼接起來。

六、splice(start,deleteCount,val1,val2,...):從start位置開始刪除deleteCount項,並從該位置起插入val1,val2,...

七、reverse:將數組反序

var a = [1,2,3,4,5]; var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1] 

八、sort(orderfunction):按指定的參數對數組進行排序 var a = [1,2,3,4,5]; var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]

九、slice(start,end):返回從原數組中指定開始下標到結束下標之間的項組成的新數組

var a = [1,2,3,4,5]; var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]

4、js迭代的方法

every() 、fliter()、forEach()、map()、some()具體你們能夠查一下!

5、js數組去重和排序

具體我就不詳細描述了。

6、js正則表達式

關於正則:http://www.haorooms.com/post/js_regex_refuse ,這篇文章應對面試足夠了!

讓你寫個簡單的正則,去掉字符串左右空格。具體看看我以前的文章http://www.haorooms.com/post/js_kong_ge

關於正則,你能夠去了解一下!

7、純js的ajax請求原理

能夠查詢,瞭解一下!看下這幾篇文章http://www.haorooms.com/post/js_ajax_chun 和http://www.haorooms.com/post/js_shixian_jquery 最後關於js實現ajax的,最新出了js的fetch方法,很不錯的!

8、js模塊化

能夠看下我以前的文章:http://www.haorooms.com/post/js_require_zz

9、雙等號隱性轉換

具體看文章:http://www.haorooms.com/post/js_yinxingleixing

10、js操做符,字符串截取等

具體請看:http://www.haorooms.com/post/js_czf_mst

字符串截取,substr 、substring等的區別

11、js中繼承中call和apply()的區別

用法差很少,傳遞參數不一樣。具體你能夠網上查查,也能夠看下個人文章 http://www.haorooms.com/post/js_constructor_pro

12、類數組轉換爲數組的方法

Array.prototype.slice.call(arguments);

十3、cookie 不設置過時時間,默認過時時間是多少?

關閉瀏覽器就結束了

十4、改變數組長度的方法有哪些?

shift、unshift、pop、push

十5、js事件循環 event loop

請看文章:http://www.haorooms.com/post/js_xiancheng

十6、require 和 import的區別

看文章:http://blog.csdn.net/qq_28702545/article/details/54892562

前端常見題目

1、如何處理跨域?

jsonp等,能夠看下我寫的 瀏覽器跨域訪問解決方案

2、如何處理緩存?如何清除緩存。

ajax隨機數、ajax參數、meta中設置等。能夠看下我寫的 js清除瀏覽器緩存的幾種方法

3、http請求問題,HTTP請求信息由那3部分組成?

1、請求方法URI協議/版本 (例如:GET/haorooms.jspHTTP/1.1 2、請求頭(Request Header)(例如:Accept:image/gif.image/jpeg.*/* Accept-Language:zh-cn Connection:Keep-Alive Host:localhost等等) 三、請求正文 

關於圖片的請求,能夠看我以前的一篇文章 http://www.haorooms.com/post/web_http_request

4、前端性能優化問題,你是如何處理前端性能問題的?

看我以前的一篇文章:http://www.haorooms.com/post/web_xnyh_jscss 及 前端性能優化補充篇

5、網站js和css如何壓縮?有哪些方法?

ant+yuicompressor具體能夠看看我以前的一篇文章:http://www.haorooms.com/post/ant_yuicom

ant:http://www.haorooms.com/tools/ant_book/

SASS等 能夠對css進行自動壓縮!

也能夠用Grunt構建工具進行。能夠看下 前端js和css的壓縮合並之grunt

6、用到哪些css插件?

bootstrap,animate.css 等

7、讓你本身搭建一個網站,你是如何作架構的?

考察前端架構能力。

8、一些狀態碼你瞭解嗎?

200成功類、300重定向類、400客戶端類、500服務器端類。具體能夠網上查一下!

9、如何用瀏覽器進行代碼調試?

谷歌瀏覽器、火狐、IE等。(不明白的同窗具體網上能夠查一下)

10、json字符串轉爲json的方法

具體請看:http://www.haorooms.com/post/js_jsons_h

http://www.haorooms.com/post/json_object_json_string

html+css+html5+css3 常見題目

1、假如一個頁面,左側固定,右側自適應,你是如何作到的?

方法不少,通常是margin和浮動,具體能夠網上查一下。很簡單。

2、html5新的標籤和特性有哪些?

html5標籤有不少,你能夠網上查一下。

3、你經常使用的css3有哪些?說出你記得的。

哈哈哈,這個不少,你要再複習一下css3包括其動畫等等。

4、如何處理瀏覽器兼容性問題?

請看:http://www.haorooms.com/post/IE_jianrong

5、如何用css美化radio、checkbox等按鈕樣式?

具體能夠看個人一篇文章:http://www.haorooms.com/post/css_mh_ck_radio

web touch常見題目

1、作手機網站長見的兼容問題有哪些?

看下手機網站相關文章。

2、網站如何自適應的?響應式網站通常如何製做?

能夠隨便聊聊。能夠看下http://www.haorooms.com/post/css3media

3、zepto.js使用過程當中有哪些問題?jquerymobile用過嗎?會有哪些問題?

用過的話,能夠隨便聊一下!

加分項

例如,大家聊到數據庫,數一下如何用mongo作分頁等等,包括mysql數據庫等等。

聊到inux系統,linux經常使用的命令。

聊到angularjs,vue.js、angularjs的指令,雙向數據綁定。MVVM模式和mvc模式的區別及mvp模式。

聊到前端架構,及百度fits的jello等。

聊到經常使用的版本控制工具git或者SVN,講講git經常使用的命令,git回滾到某個版本怎麼作( $ git reset --hard 某個版本號)

人事面試

人事面試和技術面試是有區別的,人事通常問一些概況總結方面的問題,我下面舉一些列子吧!

1、你作了這麼多項目,讓你感覺最深,印象最深的是哪一個項目?你從中學到了什麼?爲何會感覺最深?

2、作前端開發這麼多年來?說下你的感覺吧!

3、簡單自我介紹一下本身。

4、你對公司有什麼須要瞭解的?

5、談到薪資,談到離職緣由,談到將來幾年的規劃等等,我在這裏就不具體說了。

上面是我面試過程當中最多見的一些問題。注意:面試的時候千萬要真誠,不要撒謊,是什麼就是什麼,我列舉上面題目的緣由是有些前端人員可能技術很好,可是面試的時候緊張,沒有準備。這樣你簡單準備了以後,就能發揮本身正常水平!廣大朋友們,加油吧!

分享幾個前端乾貨,面試常常提

2016年3月29日 22470次瀏覽

前言

我前面的文章,也有幾篇講過面試的,不過都沒有很細緻的講,例如:總結前端面試過程當中最容易出現的問題,等等。還有一些文章,也是面試中可能提問的。今天,分享幾個小知識,算是乾貨吧!前端面試中也常常會問及,不過問及的概率相對較少。我我的認爲,面試中你把基礎的知識打好,就能夠無敵!哪些基礎知識呢?例如:js的繼承、js函數等等,萬變不離其宗,都是這些的擴展及應用。這些知識理解透徹了,再加一些面試技巧就能夠了!

1、怎麼讓Chrome支持小於12px 的文字?

這個咱們在作移動端的時候,設計師圖片上的文字假如是10px,咱們實如今網頁上以後。每每設計師回來找咱們,這個字體能小一些嗎?我設計的是10px?爲啥是12px?其實咱們都知道,谷歌Chrome最小字體是12px,無論你設置成8px仍是10px,在瀏覽器中只會顯示12px,那麼如何解決這個坑爹的問題呢?

咱們的作法是:

針對谷歌瀏覽器內核,加webkit前綴,用transform:scale()這個屬性進行縮放!

<style> p span{font-size:10px;-webkit-transform:scale(0.8);display:block;} </style> <p><span>haorooms博客測試10px</span></p>

2、IOS手機瀏覽器字體齒輪

修改-webkit-font-smoothing屬性,結果是: -webkit-font-smoothing: none: 無抗鋸齒 -webkit-font-smoothing: antialiased | subpixel-antialiased | default: 灰度平滑

3、如何修改chrome記住密碼後自動填充表單的黃色背景?

大致能夠經過input : -webkit-autofill來進行修改!

input:-webkit-autofill { background-color: #FAFFBD; background-image: none; color: #000; }

4、谷歌瀏覽器運行下面代碼,並解釋!

[].forEach.call($$("*"),function(a){ a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16) })

運行上面代碼以後,會發現HTML層都被使用不一樣的顏色添加了一個高亮的邊框。爲何會這樣呢?

首先咱們來看

[].forEach.call(),關於call()和apply(),我前面有文章也寫過,具體能夠看http://www.haorooms.com/post/js_constructor_pro

[].forEach.call()等價於Array.prototype.forEach.call()

其次咱們來看$$("*")

你能夠在你的Chrome瀏覽器控制檯中輸入$$('a'),而後你就能獲得一個當前頁面中全部錨元素的列表。

$$函數是許多現代瀏覽器命令行API中的一個部分,它等價於document.querySelectorAll,你能夠將一個CSS選擇器做爲這個函數的參數,而後你就可以得到當前頁面中全部匹配這個CSS選擇器的元素列表。若是你在瀏覽器控制檯之外的地方,你可使用document.querySelectorAll('')來代替$$('')

爲元素添加顏色

爲了讓元素都有一個漂亮的邊框,咱們在上面的代碼中使用了CSS屬性outline。outline屬性位於CSS盒模型以外,所以它並不影響元素的屬性或者元素在佈局中的位置,這對於咱們來講很是有用。這個屬性和修改border屬性很是相似,所以下面的代碼應該不會很難理解:

a.style.outline="1px solid #" + color

真正有趣的地方在於定義顏色部分:

(~~(Math.random()*(1<<24))).toString(16)

~~的做用至關於parseInt,和我前面講解的「|」功能相似,關於運算符「I」 ,能夠去看看!

經過上面代碼能夠獲取到一個隨機的顏色值!

5、input [type=search] 搜索框右側小圖標如何美化?

美化效果以下圖:

enter image description here

右側默認的比較難看的按鈕,美化成右側效果。

input[type="search"]::-webkit-search-cancel-button{ -webkit-appearance: none;height: 15px; width: 15px;border-radius: 8px;background:url("images/searchicon.png") no-repeat 0 0;background-size: 15px 15px;}

用到的是僞元素::-webkit-search-cancel-button,關於什麼是僞類和爲元素,請看:http://www.haorooms.com/post/css_wl_wys

6、iOS safari 如何阻止「橡皮筋效果」?

能夠參考一下知乎上的回答 https://www.zhihu.com/question/22256539 。

可是,咱們遇到的問題不是這樣,我是要解決彈跳致使彈出層(position:absolute)的覆蓋層高度小於100%;

針對這個問題,我想到的解決方案以下:

方法一: 把position:absolute改爲position:fixed,並在彈出層以後,設置body的高度是100%;overflow是hidden。

方法二:

思路是獲取蘋果瀏覽器導航欄的高度。而後滾動的時候,從新獲取其高度。在導航欄高度變小的時候,給彈出層增長高度的百分比!

代碼以下:

 //ios safari 伸縮判斷 var topbarHeight=window.outerHeight-window.innerHeight,agent=navigator.userAgent,globleflag=true; $(window).scroll(function () { if(agent.indexOf("iPhone")!=-1 || agent.indexOf("iPad")!=-1){ var topbarHeightNow=window.outerHeight-window.innerHeight; if(topbarHeightNow<topbarHeight){ globleflag=false //此處寫處理邏輯 }else{ globleflag=true //此處寫處理邏輯 } } });

7、實現點擊文字,文字後面radio選中效果

這個效果是前端很常常用到和遇到的效果了,實現這個效果的方式也不少,不少朋友用js和jquery來實現,可是最簡單的,咱們能夠直接用lable標籤的 for 屬性來實現。

看下下面例子:

<form> <label for="male">Male</label> <input type="radio" name="sex" id="male" /> <br /> <label for="female">Female</label> <input type="radio" name="sex" id="female" /> </form>

label 的for屬性後面跟着input的id,就能夠點擊label,來觸發input效果了,你們能夠試一試!

8、網站中,圖片文件(jpg,png,gif),如何點擊下載?而非點擊預覽?

咱們平時在網站中的圖片,假如咱們要下載,以下寫:

<a href="haorooms博客.jpg">下載</a>

咱們點擊下載按鈕,只會預覽「haorooms博客.jpg」這張圖片,並不會出現下載框,另存爲那種?那麼咱們如何作呢?

咱們只須要以下寫

<a href="haorooms博客.jpg" download >下載</a>

就能夠下載了。點擊以下進行嘗試吧!下載

不但如次,咱們還能夠指定文件名稱,以下寫法:

<a href="haorooms博客.jpg" download="haoroom前端博客圖片下載" >下載</a>

測試以下:下載

上面就是指定下載的寫法!

9、Math.min()比Math.max()大

Math.min() < Math.max() // false Math.min() > Math.max() // true

由於Math.min() 返回 Infinity, 而 Math.max()返回 -Infinity。

10、經典面試題目

const Greeters = [] for (var i = 0 ; i < 10 ; i++) { Greeters.push(function () { return console.log(i) }) } Greeters[0]() // 10 Greeters[1]() // 10 Greeters[2]() // 10

把 var 改爲 let試試!

const Greeters = [] for (let i = 0 ; i < 10 ; i++) { Greeters.push(function () { return console.log(i) }) } Greeters[0]() // 0 Greeters[1]() // 1 Greeters[2]() // 2

11、數組對象全等比較

// 這些能夠 'abc' === 'abc' // true 1 === 1 // true // 然而這些不行 [1,2,3] === [1,2,3] // false {a: 1} === {a: 1} // false {} === {} // false

由於[1,2,3]和[1,2,3]是兩個不一樣的數組,只是它們的元素碰巧相同。所以,不能簡單的經過===來判斷。

12、關於數字和點號

3.toString() 3..toString() 3...toString()

這個題也挺逗, 答案是

 error, '3', error

你若是換一個寫法就更費解了

var a = 3; a.toString()

這個答案就是 '3';

爲啥呢?

由於在 js 中 1.1, 1., .1 都是合法的數字. 那麼在解析 3.toString 的時候這個 . 究竟是屬於這個數字仍是函數調用呢? 只能是數字, 由於3.合法啊!

十3、變量提高

以下題目

var name = 'World!'; (function () { if (typeof name === 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();

理解這個,咱們能夠先看下面的題目:

var x = 1; // Initialize x console.log(x + " " + y); // '1 undefined' var y = 2;

至關於:

var x = 1; // Initialize x var y; // Declare y console.log(x + " " + y); // '1 undefined' y = 2; // Initialize y

變量提高了!

因此上面的自調用函數能夠以下理解:

var name = 'World!'; (function () { var name; if (typeof name === 'undefined') { name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();

name在scope裏面,所以,先找裏面,裏面找到了name,所以執行的結果是

'Goodbye Jack'

十4、局部變量和全局變量

(function(){ var x = y = 1; })(); console.log(y); console.log(x);

輸出:

1, error

y 被賦值到全局。x 是局部變量,全局中獲取不到。因此打印 x 的時候會報 ReferenceError

十5、正則表達式字面一致也不相等

var a = /123/, b = /123/; a == b a === b

即便正則的字面量一致, 他們也不相等.

答案 false, false

十6、函數名稱不可改變

function foo() { } var oldName = foo.name; foo.name = "bar"; [oldName, foo.name]

答案

['foo', 'foo']

例如:

function doSomething() {} doSomething.name; // "doSomething" var f = function() {}; var object = { someMethod: function() {} }; console.log(f.name); // "f" console.log(object.someMethod.name); // "someMethod"

函數的名字是不能夠改變的。

十7、寫出最簡單的去重方式

一、es6的new Set()方式,具體請看:http://www.haorooms.com/post/js_map_set

例如:

let array=[0,3,4,5,3,4,7,8,2,2,5,4,6,7,8,0,2,0,90]; [...new Set(array)]

或者直接

[...new Set([1,3,4,5,1,2,3,3,4,8,90,3,0,5,4,0])]

二、es5的Array filter()

[1,3,4,5,1,2,3,3,4,8,90,3,0,5,4,0].filter(function(elem,index,Array){ return index === Array.indexOf(elem); })
相關文章
相關標籤/搜索