成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

2016十家公司前端面試小記

開發 前端
不過總體來講基本上每家問的問題也差不多,可能不同業務的公司問的問題的側重點不太一樣,有點側重于移動端適配css布局瀏覽器兼容IE hack,而有的側重于JS邏輯面向對象設計模式考察等,如果你有三到五年左右的開發經驗這些問題基本也都遇見過,就算是做個總結吧。

前言

春節前離職了,年后來了有一周了,把簡歷丟到網上后大概收到了將近七十多個面試邀請,挑了幾個稍微知名一些的公司如國美京東美團百度彩票等和一些中 小型公司去面試,這星期一共面了11家公司,除了阿里似乎沒戲了其他的十家基本都發了口頭或是正式offer,也不打算再面了,社保斷了也是個麻煩事,打 算從這其中挑一個就可以了。

[[163044]]

面試過程中有做面試題的,也有直接聊的,實話講有些面試題其實就是背書,隨便一百度就能出答案的東西其實不太適合用于面試題中。例如某某css屬性 的用法,js某函數的作用等等。個人傾向于將實際工作中可能會遇到的問題的場景,以及各種技術的坑作為面試題,這樣一則可以看出他的經驗多少,二則也可以 防止他做筆試題的時候手機搜索結果。

不過總體來講基本上每家問的問題也差不多,可能不同業務的公司問的問題的側重點不太一樣,有點側重于移動端適配css布局瀏覽器兼容IE hack,而有的側重于JS邏輯面向對象設計模式考察等,如果你有三到五年左右的開發經驗這些問題基本也都遇見過,就算是做個總結吧。

手寫事件模型及事件代理/委托

這個算是被問到的最多次數的問題了,首先要求描述下js里面的【事件的三個階段】,如果沒聽說過三個階段,那基本上就沒戲了。分別是捕獲,目標,冒 泡階段,低版本IE不支持捕獲階段。然后可能問到IE和W3C不同綁定事件解綁事件的方法有什么區別,參數分別是什么,以及事件對象e有什么區別等等。

如果上述都沒問題,接下來可能會問【事件的代理/委托】的原理以及優缺點,這是靠事件的冒泡機制來實現的,優點是

1、可以大量節省內存占用,減少事件注冊,比如在table上代理所有td的click事件就非常棒

2、可以實現當新增子對象時無需再次對其綁定事件,對于動態內容部分尤為合適

事件代理的應用常用應該僅限于上述需求下,如果把所有事件都用代理就可能會出現事件誤判,即本不應用觸發事件的被綁上了事件,事實上我見過有人把頁面里的所有事件都綁定到document用委托的,這是極其不明智的做法。

所謂勁酒雖好,可不要貪杯哦~

之后對方可能要求你手寫原生js【實現事件代理】,并要求兼容瀏覽器,其實就是考核對事件對象e的了解程度,以及在IE下對應的屬性名。其實此時如果你說就是用target,currentTarget,以及IE下的srcElement和this,基本就可以略過了。

如果上述都ok的話,那么極有可能要求讓你【實現事件模型】,即寫一個類或是一個模塊,有兩個函數,一個bind一個trigger,分別實現綁定 事件和觸發事件,核心需求就是可以對某一個事件名稱綁定多個事件響應函數,然后觸發這個事件名稱時,依次按綁定順序觸發相應的響應函數。

這個需求如果對于做過C#的人來講就再熟悉不過,他根本就是C#中的【委托】(delegate)。而委托與事件幾乎是一家子。回到前面說的題目, 大致實現思路就是創建一個類或是匿名函數,在bind和trigger函數外層作用域創建一個字典對象,用于存儲注冊的事件及響應函數列表,bind時, 如果字典沒有則創建一個,key是事件名稱,value是數組,里面放著當前注冊的響應函數,如果字段中有,那么就直接push到數組即可。 trigger時調出來依次觸發事件響應函數即可。

不過還有很多細節,比如觸發響應函數時的上下文應該是什么,觸發響應函數的參數列表應該是什么,如果要求把調用trigger的參數列表都傳到響應函數中還要考慮到吧arguments對象轉化為純數組才行等等。

還有一些面試官會問到事件如何派發也就是事件廣播(dispatchEvent)等等,這里不再展開。

有關事件的考核點大概也就這么多了

前端性能優化

這個簡直老生常談,不管是園子里還是園子外,關于前端優化的東西太多太多了,不同角度不同方向也有很多,網絡性能優化,加快訪問速度,瀏覽器并行加 載數量,怎樣實現原生JS異步載入,CDN加速的原理,如何將不同靜態資源發布到多個域名服務器上,發布后這些靜態字段的url路徑改怎么批量改寫,用什 么工具進行項目打包,css打包后的相對路徑怎么轉換為絕對路徑,用什么工具進行項目模塊依賴管理,怎么進行cookie優化等等,

這個說起來就很多了,盡可能的按照自己做過的優化來講,否則面試官隨便挑一項深究都可能會卡殼,與其這樣還不如不講

閉包原理及應用

這個問題的經典性,幾乎所有面試官都會問到這個問題,什么情況下會發生閉包,為什么需要閉包,什么場景下需要,閉包閉了誰,怎么釋放被閉包的變量內存,閉包的優點是什么,缺點是什么等等。

關于閉包,有的是上述提問,有的是直接做閉包面試題。關于概念網上一搜一大把,關于閉包面試題,可以參考我之前寫過的一篇文章:大部分人都會做錯的經典JS閉包面試題

不夸張的講,如果這篇文章完全弄懂了,基本上沒有可以難住的閉包的題目了。

手寫Function.bind函數

首先會要求解釋下這個函數的作用,以及在什么場景下需要用到它,最后手寫一個Function.bind函數。

只要掌握核心幾點就沒問題:

1、Function.bind返回的也是一個函數,所以注定發生了閉包,

2、在返回的這個函數中去調用一個其他的函數,這其實本質上就是函數鉤子(HOOK)

關于在JS里的函數鉤子,我認為只需要維護以下三點即可:

1、保持函數的this指向

2、保持函數的所有參數都傳遞到目標函數

3、保持函數的返回值

有了以上這幾點,這個函數就非常好寫了,下面是MSDN上的標準Polyfill:

  1. if (!Function.prototype.bind) { 
  2.   Function.prototype.bind = function (oThis) { 
  3.     if (typeof this !== "function") { 
  4.       // closest thing possible to the ECMAScript 5 
  5.       // internal IsCallable function 
  6.       throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); 
  7.     } 
  8.  
  9.     var aArgs = Array.prototype.slice.call(arguments, 1), 
  10.         fToBind = this
  11.         fNOP = function () {}, 
  12.         fBound = function () { 
  13.           return fToBind.apply(this instanceof fNOP 
  14.                                  ? this 
  15.                                  : oThis || this
  16.                                aArgs.concat(Array.prototype.slice.call(arguments))); 
  17.         }; 
  18.  
  19.     fNOP.prototype = this.prototype; 
  20.     fBound.prototype = new fNOP(); 
  21.  
  22.     return fBound; 
  23.   }; 

手寫數組快速排序/去重

不管是排序也好,還是去重也罷,都是計算機基礎知識了,雖然快排寫出來了,去重也用多種方式實現了,但是算法是我的弱項,這里就不展開了。不過對于準備面試的童鞋來講,準備下常用算法還是比較重要的,大部分公司還是比較看重此類基礎知識的。

JS的定義提升

利用js的特性定義提升這個知識點衍生出來的面試題相當之多,諸如以下等等

  1. (function(a){ 
  2.     console.log(a); 
  3.     var a=10
  4.     function a(){}; 
  5. }(100)) 

這算是我做過的定義提升里面的最簡單的題目了,建議可以看下我的上一篇文章:一道常被人輕視的前端JS面試題

基本上能做對那篇文章中所說的題目的話,此類面試題基本平趟無懸念

跨域

關于跨域大概可以分iframe的跨域,和純粹的跨全域請求。

關于跨域的可以去看園子里的這幾篇文章:

JavaScript跨域總結與解決辦法

跨域-知識

跨域資源共享的10種方式

其實正統的跨全域的解決方法大致也就,JSONP,Access Control和服務器代理這么三種

JSONP原理

只要你聊到跨域,就必須聊到JSONP,那么就必須要講一下JSONP的實現原理,以及你在項目中那個需求使用了JSONP,這里簡單講就是HTML里面所有帶src屬性的標簽都可以跨域,如iframe,img,script等。

所以可以把需要跨域的請求改成用script腳本加載即可,服務器返回執行字符串,但是這個字符串是在window全局作用域下執行的,你需要把他 返回到你的代碼的作用域內,這里就需要臨時創建一個全局的回調函數,并把到傳到后臺,最后再整合實際要請求的數組,返回給前端,讓瀏覽器直接調用,用回調 的形式回到你的原代碼流程中。

基本講到這也就沒什么要再講的了。

將url的查詢參數解析成字典對象

這個題目不約而同的出現在了多家公司的面試題中,當然也是因為太過于典型,解決方案無非就是拆字符或者用正則匹配來解決,我個人強烈建議用正則匹 配,因為url允許用戶隨意輸入,如果用拆字符的方式,有任何一處沒有考慮到容錯,就會導致整個js都報錯。而正則就沒有這個問題,他只匹配出正確的配 對,非法的全部過濾掉,簡單,方便。

實現代碼:

  1. function getQueryObject(url) { 
  2.     url = url == null ? window.location.href : url; 
  3.     var search = url.substring(url.lastIndexOf("?") + 1); 
  4.     var obj = {}; 
  5.     var reg = /([^?&=]+)=([^?&=]*)/g; 
  6.     search.replace(reg, function (rs, $1, $2) { 
  7.         var name = decodeURIComponent($1); 
  8.         var val = decodeURIComponent($2);                
  9.         val = String(val); 
  10.         obj[name] = val; 
  11.         return rs; 
  12.     }); 
  13.     return obj; 

函數節流

對于常見的場景,如網頁滾動時,經常會有滾動到哪時做什么樣的動畫效果,遂要注冊onscroll事件,如何減少觸發次數,到達優化性能,同時又滿足效果要求不卡頓,一個是優化事件內代碼,減少代碼量,二就是做函數節流。

大部分節流都采用時間做節流,即時間間隔小于多少的不再調用,但同時保證一個最小調用間隔。(否則拖拽類的節流都將無效果),也可以用調用次數做節流,但要考慮最后一次調用需要要執行。

可以參考:淺談javascript的函數節流

設計模式

這方面被問到的比較多的有觀察者模式,職責鏈模式,工廠模式

主要是應用于js開發組件中會經常涉及,純粹的頁面業務邏輯可能涉及不多。

比如如何去設計一個前端UI組件,應該公開出哪些方法,應該提供哪些接口,應該提供哪些事件。哪部分邏輯流程應該開放出去讓用戶自行編寫,如何實現組件與組件之間的通信,如何實現高內聚低耦合,如何實現組件的高復用等等

css垂直居中方法

可以看到我提到上面大多數都是關于JS的面試題,主要是因為css并不是我的強項,但有幾個出現頻率很高,就是經典的垂直居中問題。

這個問題又可以細分為,被垂直居中的元素是否定高,是文字還是塊,文字是單行還是多行文字等等

這個可以百度下,有N多種解決方案,主要還是看應用場景的限制。

自適應布局

這個問題可以劃分為,左固定右自適應寬度,上固定下固定中間自適應高度等等布局要求。

關于左右自適應的,不低于10種解決方案,還要看dom結構要求是并列還是嵌套,是否允許有父級元素,是否允許使用CSS3,是否有背景色,是否要兩列等高,等等

而關于自適應高度的解決方案就略少一些,大致也是靠,CSS3的calc屬性,內padding,絕對定位后拉伸,動態js計算等等解決方案,同樣也是要看應用場景能用哪個

移動端自適應

也被問到了很多移動端開發中的各種坑,比如2倍屏,3倍屏的自適應等,我移動端的經驗略少,所以只是按照我做過的經驗去盡可能的描述清楚,這里就不多說了

其他關于前端

除了技術以外,因為帶過一個小團隊,所以更多的時間都是去聊關于項目,關于團隊,關于如何管理,關于如何處理團隊內問題,如何跨團隊協作等等。這部分純屬工作經驗了,按照做過的不同項目也會有不同。

總之,大部分聊得還算比較愉快,京東評定的是T3,美團評定的是P6,我也不太清楚這算是個什么等級,不過大部分公司都是評定為中級最多中高級開發水平。大概就這樣了,從參加工作到現在也有4年了,只混到這么個水平似乎也確實有些說不過去。

責任編輯:王雪燕 來源: 小小滄海
相關推薦

2020-07-28 15:18:20

源代碼泄露泄露代碼網絡攻擊

2021-11-19 15:33:02

云計算DevOps初創公司

2016-08-16 10:52:45

2022-11-30 22:13:39

初創公司AI

2016-02-26 10:37:05

2021-11-26 05:23:44

網絡初創公司IT

2013-01-09 09:51:22

大數據數據分析

2023-12-25 15:45:34

2021-11-26 05:20:38

半導體初創公司數據中心

2022-02-17 12:20:02

擴展檢測和響應XDR安全公司

2024-12-10 07:10:00

網絡初創公司邊緣網絡

2022-11-28 15:45:09

網絡初創公司

2023-12-15 18:45:39

網絡初創公司邊緣網絡網絡

2021-11-26 05:26:27

云安全初創公司云計算

2009-02-16 12:20:02

面試失業職業生涯

2022-11-28 13:37:54

DevOps軟件交付

2021-07-07 14:37:42

企業網絡安全行業動態

2024-12-09 13:11:30

2023-12-19 19:07:38

云安全初創公司保護云

2023-12-20 16:04:32

云初創公司云計算云應用市場
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av三级| 国产精品视频一区二区三区, | 中文字幕 在线观看 | 亚洲精品一二三区 | 亚洲综合激情 | 日韩字幕一区 | 日本三级线观看 视频 | 久久久久久久一区 | 亚洲国产精品成人无久久精品 | 丁香色婷婷 | 国产成人免费 | 大学生a级毛片免费视频 | 精品国产视频 | 影音先锋中文字幕在线观看 | 国产午夜精品久久久久免费视高清 | 天天草夜夜骑 | 日本激情视频中文字幕 | 91色综合| 日韩精品1区2区3区 爱爱综合网 | 超碰在线97国产 | 福利在线看 | 一区二区中文 | 日本人做爰大片免费观看一老师 | 久久久国产一区二区三区四区小说 | 欧美片网站免费 | 欧美一区二区三区在线观看视频 | 黄色片视频 | 欧美综合国产精品久久丁香 | 欧美久久久网站 | 国产精品一区二区av | 一区二区久久精品 | 国产欧美一区二区精品久导航 | h视频在线观看免费 | 欧美精品一区二区三区四区 在线 | 国产视频一区二区 | 国产精品成人一区二区三区夜夜夜 | 污书屋 | 久久精品国产久精国产 | 国产精品久久久久久久免费大片 | 国产色播av在线 | 亚洲高清在线 |