1、頁面重構(gòu)怎么操作?
網(wǎng)站重構(gòu):在不改變外部行為的前提下,簡化結(jié)構(gòu)、添加可讀性,而在網(wǎng)站前端保持一致的行為。也就是說是在不改變UI的情況下,對網(wǎng)站進(jìn)行優(yōu)化,在擴(kuò)展的同時保持一致的UI。
對于傳統(tǒng)的網(wǎng)站來說重構(gòu)通常是:
表格(table)布局改為DIV+CSS
使網(wǎng)站前端兼容于現(xiàn)代瀏覽器(針對于不合規(guī)范的CSS、如對IE6有效的)
對于移動平臺的優(yōu)化
針對于SEO進(jìn)行優(yōu)化
深層次的網(wǎng)站重構(gòu)應(yīng)該考慮的方面
減少代碼間的耦合
讓代碼保持彈性
嚴(yán)格按規(guī)范編寫代碼
設(shè)計可擴(kuò)展的API
代替舊有的框架、語言(如VB)
增強(qiáng)用戶體驗
通常來說對于速度的優(yōu)化也包含在重構(gòu)中
壓縮JS、CSS、image等前端資源(通常是由服務(wù)器來解決)
程序的性能優(yōu)化(如數(shù)據(jù)讀寫)
采用CDN來加速資源加載
對于JS DOM的優(yōu)化
HTTP服務(wù)器的文件緩存
2、列舉IE與其他瀏覽器不一樣的特性?
*事件不同之處:
觸發(fā)事件的元素被認(rèn)為是目標(biāo)(target)。而在IE中,目標(biāo)包含在event對象的srcElement屬性;
獲取字符代碼、如果按鍵代表一個字符(shift、ctrl、alt除外),IE的keyCode會返回字符代碼(Unicode),DOM中按鍵的代碼和字符是分離的,要獲取字符代碼,需要使用charCode屬性;
阻止某個事件的默認(rèn)行為,IE中阻止某個事件的默認(rèn)行為,必須將returnValue屬性設(shè)置為false,Mozilla中,需要調(diào)用preventDefault()方法;
停止事件冒泡,IE中阻止事件進(jìn)一步冒泡,需要設(shè)置cancelBubble為true,Mozzilla中,需要調(diào)用stopPropagation();
3、99%的網(wǎng)站都需要被重構(gòu)是那本書上寫的?
網(wǎng)站重構(gòu):應(yīng)用web標(biāo)準(zhǔn)進(jìn)行設(shè)計(第2版)
4、什么叫優(yōu)雅降級和漸進(jìn)增強(qiáng)?
優(yōu)雅降級:Web站點在所有新式瀏覽器中都能正常工作,如果用戶使用的是老式瀏覽器,則代碼會針對舊版本的IE進(jìn)行降級處理了,使之在舊式瀏覽器上以某種形式降級體驗卻不至于完全不能用。
如:border-shadow
5、是否了解公鑰加密和私鑰加密。
一般情況下是指私鑰用于對數(shù)據(jù)進(jìn)行簽名,公鑰用于對簽名進(jìn)行驗證;
HTTP網(wǎng)站在瀏覽器端用公鑰加密敏感數(shù)據(jù),然后在服務(wù)器端再用私鑰解密。
6、WEB應(yīng)用從服務(wù)器主動推送Data到客戶端有那些方式?
html5提供的Websocket
不可見的iframe
WebSocket通過Flash
XHR長時間連接
XHR Multipart Streaming
script標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
標(biāo)簽的長時間連接(可跨域)
7、對Node的優(yōu)點和缺點提出了自己的看法?
*(優(yōu)點)因為Node是基于事件驅(qū)動和無阻塞的,所以非常適合處理并發(fā)請求,
因此構(gòu)建在Node上的代理服務(wù)器相比其他技術(shù)實現(xiàn)(如Ruby)的服務(wù)器表現(xiàn)要好得多。
此外,與Node代理服務(wù)器交互的客戶端代碼是由javascript語言編寫的,
因此客戶端和服務(wù)器端都用同一種語言編寫,這是非常美妙的事情。
*(缺點)Node是一個相對新的開源項目,所以不太穩(wěn)定,它總是一直在變,
而且缺少足夠多的第三方庫支持。看起來,就像是Ruby/Rails當(dāng)年的樣子。
8、你有用過哪些前端性能優(yōu)化的方法?
(1)減少http請求次數(shù):CSS
Sprites, JS、CSS源碼壓縮、圖片大小控制合適;網(wǎng)頁Gzip,CDN托管,data緩存,圖片服務(wù)器。
(2)前端模板JS+數(shù)據(jù),減少由于HTML標(biāo)簽導(dǎo)致的帶寬浪費(fèi),前端用變量保存AJAX請求結(jié)果,每次操作本地變量,不用請求,減少請求次數(shù)
(3)用innerHTML代替DOM操作,減少DOM操作次數(shù),優(yōu)化javascript性能。
(4)當(dāng)需要設(shè)置的樣式很多時設(shè)置className而不是直接操作style。
(5)少用全局變量、緩存DOM節(jié)點查找的結(jié)果。減少IO讀取操作。
(6)避免使用CSS Expression(css表達(dá)式)又稱Dynamic
properties(動態(tài)屬性)。
(7)圖片預(yù)加載,將樣式表放在頂部,將腳本放在底部加上時間戳。
(8)避免在頁面的主體布局中使用table,table要等其中的內(nèi)容完全下載之后才會顯示出來,顯示比div+css布局慢。
對普通的網(wǎng)站有一個統(tǒng)一的思路,就是盡量向前端優(yōu)化、減少數(shù)據(jù)庫操作、減少磁盤IO。向前端優(yōu)化指的是,在不影響功能和體驗的情況下,能在瀏覽器執(zhí)行的不要在服務(wù)端執(zhí)行,能在緩存服務(wù)器上直接返回的不要到應(yīng)用服務(wù)器,程序能直接取得的結(jié)果不要到外部取得,本機(jī)內(nèi)能取得的數(shù)據(jù)不要到遠(yuǎn)程取,內(nèi)存能取到的不要到磁盤取,緩存中有的不要去數(shù)據(jù)庫查詢。減少數(shù)據(jù)庫操作指減少更新次數(shù)、緩存結(jié)果減少查詢次數(shù)、將數(shù)據(jù)庫執(zhí)行的操作盡可能的讓你的程序完成(例如join查詢),減少磁盤IO指盡量不使用文件系統(tǒng)作為緩存、減少讀寫文件次數(shù)等。程序優(yōu)化永遠(yuǎn)要優(yōu)化慢的部分,換語言是無法“優(yōu)化”的。
9、http狀態(tài)碼有那些?分別代表是什么意思?
(1)簡單版
[
100Continue繼續(xù),一般在發(fā)送post請求時,已發(fā)送了http
header之后服務(wù)端將返回此信息,表示確認(rèn),之后發(fā)送具體參數(shù)信息
200OK正常返回信息
201Created請求成功并且服務(wù)器創(chuàng)建了新的資源
202Accepted服務(wù)器已接受請求,但尚未處理
301Moved Permanently請求的網(wǎng)頁已永久移動到新位置。
302 Found臨時性重定向。
303 See Other臨時性重定向,且總是使用GET請求新的URI。
304Not Modified自從上次請求后,請求的網(wǎng)頁未修改過。
400 Bad Request服務(wù)器無法理解請求的格式,客戶端不應(yīng)當(dāng)嘗試再次使用相同的內(nèi)容發(fā)起請求。
401 Unauthorized請求未授權(quán)。
403 Forbidden禁止訪問。
404 Not Found找不到如何與URI相匹配的資源。
500 Internal Server Error最常見的服務(wù)器端錯誤。
503 Service Unavailable服務(wù)器端暫時無法處理請求(可能是過載或維護(hù))。
]
(2)完整版
1**(信息類):表示接收到請求并且繼續(xù)處理
100——客戶必須繼續(xù)發(fā)出請求
101——客戶要求服務(wù)器根據(jù)請求轉(zhuǎn)換HTTP協(xié)議版本
2**(響應(yīng)成功):表示動作被成功接收、理解和接受
200——表明該請求被成功地完成,所請求的資源發(fā)送回客戶端
201——提示知道新文件的URL
202——接受和處理、但處理未完成
203——返回信息不確定或不完整
204——請求收到,但返回信息為空
205——服務(wù)器完成了請求,用戶代理必須復(fù)位當(dāng)前已經(jīng)瀏覽過的文件
206——服務(wù)器已經(jīng)完成了部分用戶的GET請求
3**(重定向類):為了完成指定的動作,必須接受進(jìn)一步處理
300——請求的資源可在多處得到
301——本網(wǎng)頁被永久性轉(zhuǎn)移到另一個URL
302——請求的網(wǎng)頁被轉(zhuǎn)移到一個新的地址,但客戶訪問仍繼續(xù)通過原始URL地址,重定向,新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發(fā)出新的Request。
303——建議客戶訪問其他URL或訪問方式
304——自從上次請求后,請求的網(wǎng)頁未修改過,服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容,代表上次的文檔已經(jīng)被緩存了,還可以繼續(xù)使用
305——請求的資源必須從服務(wù)器指定的地址得到
306——前一版本HTTP中使用的代碼,現(xiàn)行版本中不再使用
307——申明請求的資源臨時性刪除
4**(客戶端錯誤類):請求包含錯誤語法或不能正確執(zhí)行
400——客戶端請求有語法錯誤,不能被服務(wù)器所理解
401——請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用
HTTP 401.1 -未授權(quán):登錄失敗
HTTP 401.2
-未授權(quán):服務(wù)器配置問題導(dǎo)致登錄失敗
HTTP 401.3
- ACL禁止訪問資源
HTTP 401.4
-未授權(quán):授權(quán)被篩選器拒絕
HTTP 401.5 -未授權(quán):ISAPI或CGI授權(quán)失敗
402——保留有效ChargeTo頭響應(yīng)
403——禁止訪問,服務(wù)器收到請求,但是拒絕提供服務(wù)
HTTP 403.1禁止訪問:禁止可執(zhí)行訪問
HTTP 403.2
-禁止訪問:禁止讀訪問
HTTP 403.3
-禁止訪問:禁止寫訪問
HTTP 403.4
-禁止訪問:要求SSL
HTTP 403.5
-禁止訪問:要求SSL 128
HTTP 403.6
-禁止訪問:IP地址被拒絕
HTTP 403.7
-禁止訪問:要求客戶證書
HTTP 403.8
-禁止訪問:禁止站點訪問
HTTP 403.9
-禁止訪問:連接的用戶過多
HTTP 403.10
-禁止訪問:配置無效
HTTP 403.11
-禁止訪問:密碼更改
HTTP 403.12
-禁止訪問:映射器拒絕訪問
HTTP 403.13
-禁止訪問:客戶證書已被吊銷
HTTP 403.15
-禁止訪問:客戶訪問許可過多
HTTP 403.16
-禁止訪問:客戶證書不可信或者無效
HTTP 403.17 -禁止訪問:客戶證書已經(jīng)到期或者尚未生效
404——一個404錯誤表明可連接服務(wù)器,但服務(wù)器無法取得所請求的網(wǎng)頁,請求資源不存在。eg:輸入了錯誤的URL
405——用戶在Request-Line字段定義的方法不允許
406——根據(jù)用戶發(fā)送的Accept拖,請求資源不可訪問
407——類似401,用戶必須首先在代理服務(wù)器上得到授權(quán)
408——客戶端沒有在用戶指定的餓時間內(nèi)完成請求
409——對當(dāng)前資源狀態(tài),請求不能完成
410——服務(wù)器上不再有此資源且無進(jìn)一步的參考地址
411——服務(wù)器拒絕用戶定義的Content-Length屬性請求
412——一個或多個請求頭字段在當(dāng)前請求中錯誤
413——請求的資源大于服務(wù)器允許的大小
414——請求的資源URL長于服務(wù)器允許的長度
415——請求資源不支持請求項目格式
416——請求中包含Range請求頭字段,在當(dāng)前請求資源范圍內(nèi)沒有range指示值,請求也不包含If-Range請求頭字段
417——服務(wù)器不滿足請求Expect頭字段指定的期望值,如果是代理服務(wù)器,可能是下一級服務(wù)器不能滿足請求長。
5**(服務(wù)端錯誤類):服務(wù)器不能正確執(zhí)行一個正確的請求
HTTP 500 -服務(wù)器遇到錯誤,無法完成請求
HTTP
500.100 -內(nèi)部服務(wù)器錯誤- ASP錯誤
HTTP 500-11服務(wù)器關(guān)閉
HTTP 500-12應(yīng)用程序重新啟動
HTTP 500-13
-服務(wù)器太忙
HTTP 500-14
-應(yīng)用程序無效
HTTP 500-15
-不允許請求global.asa
Error 501 -未實現(xiàn)
HTTP 502 -網(wǎng)關(guān)錯誤
HTTP 503:由于超載或停機(jī)維護(hù),服務(wù)器目前無法使用,一段時間后可能恢復(fù)正常
10、一個頁面從輸入URL到頁面加載顯示完成,這個過程中都發(fā)生了什么?(流程說的越詳細(xì)越好)
注:這題勝在區(qū)分度高,知識點覆蓋廣,再不懂的人,也能答出幾句,
而高手可以根據(jù)自己擅長的領(lǐng)域自由發(fā)揮,從URL規(guī)范、HTTP協(xié)議、DNS、CDN、數(shù)據(jù)庫查詢、
到瀏覽器流式解析、CSS規(guī)則構(gòu)建、layout、paint、onload/domready、JS執(zhí)行、JS API綁定等等;
詳細(xì)版:
(1)瀏覽器會開啟一個線程來處理這個請求,對URL分析判斷如果是http協(xié)議就按照Web方式來處理;
(2)調(diào)用瀏覽器內(nèi)核中的對應(yīng)方法,比如WebView中的loadUrl方法;
(3)通過DNS解析獲取網(wǎng)址的IP地址,設(shè)置UA等信息發(fā)出第二個GET請求;
(4)進(jìn)行HTTP協(xié)議會話,客戶端發(fā)送報頭(請求報頭);
(5)進(jìn)入到web服務(wù)器上的Web
Server,如Apache、Tomcat、Node.JS等服務(wù)器;
(6)進(jìn)入部署好的后端應(yīng)用,如PHP、Java、JavaScript、Python等,找到對應(yīng)的請求處理;
(7)處理結(jié)束回饋報頭,此處如果瀏覽器訪問過,緩存上有對應(yīng)資源,會與服務(wù)器最后修改時間對比,一致則返回304;
(8)瀏覽器開始下載html文檔(響應(yīng)報頭,狀態(tài)碼200),同時使用緩存;
(9)文檔樹建立,根據(jù)標(biāo)記請求所需指定MIME類型的文件(比如css、js),同時設(shè)置了cookie;
(10)頁面開始渲染DOM,JS根據(jù)DOM API操作DOM,執(zhí)行事件綁定等,頁面顯示完成。
簡潔版:
瀏覽器根據(jù)請求的URL交給DNS域名解析,找到真實IP,向服務(wù)器發(fā)起請求;
服務(wù)器交給后臺處理完成后返回數(shù)據(jù),瀏覽器接收文件(HTML、JS、CSS、圖象等);
瀏覽器對加載到的資源(HTML、JS、CSS等)進(jìn)行語法解析,建立相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如HTML的DOM);
載入解析到的資源文件,渲染頁面,完成。
11、你用的得心應(yīng)手用的熟練地編輯器&開發(fā)環(huán)境是什么樣子?
Sublime Text 3 +相關(guān)插件編寫前端代碼
Google chrome、Mozilla
Firefox瀏覽器+firebug兼容測試和預(yù)覽頁面UI、動畫效果和交互功能
Node.js+Gulp
git用于版本控制和Code Review
12、對前端工程師這個職位是怎么樣理解的?它的前景會怎么樣?
前端是最貼近用戶的程序員,比后端、數(shù)據(jù)庫、產(chǎn)品經(jīng)理、運(yùn)營、安全都近。
(1)實現(xiàn)界面交互
(2)提升用戶體驗
(3)有了Node.js,前端可以實現(xiàn)服務(wù)端的一些事情
前端是最貼近用戶的程序員,前端的能力就是能讓產(chǎn)品從90分進(jìn)化到100分,甚至更好,
參與項目,快速高質(zhì)量完成實現(xiàn)效果圖,精確到1px;
與團(tuán)隊成員,UI設(shè)計,產(chǎn)品經(jīng)理的溝通;
做好的頁面結(jié)構(gòu),頁面重構(gòu)和用戶體驗;
處理hack,兼容、寫出優(yōu)美的代碼格式;
針對服務(wù)器的優(yōu)化、擁抱最新前端技術(shù)。
13、你對加班的看法?
加班就像借錢,原則應(yīng)當(dāng)是------救急不救窮
14、平時如何管理你的項目?
先期團(tuán)隊必須確定好全局樣式(globe.css),編碼模式(utf-8)等;
編寫習(xí)慣必須一致(例如都是采用繼承式的寫法,單樣式都寫成一行);
標(biāo)注樣式編寫人,各模塊都及時標(biāo)注(標(biāo)注關(guān)鍵樣式調(diào)用的地方);
頁面進(jìn)行標(biāo)注(例如頁面模塊開始和結(jié)束);
CSS跟HTML分文件夾并行存放,命名都得統(tǒng)一(例如style.css);
JS分文件夾存放命名以該JS功能為準(zhǔn)的英文翻譯。
圖片采用整合的images.png png8格式文件使用盡量整合在一起使用方便將來的管理
15、說說最近最流行的一些東西吧?常去哪些網(wǎng)站?
ES6\WebAssembly\Node\MVVM\Web Components\React\React Native\Webpack組件化
16、移動端(Android IOS)怎么做好用戶體驗?
清晰的視覺縱線、
信息的分組、極致的減法、
利用選擇代替輸入、
標(biāo)簽及文字的排布方式、
依靠明文確認(rèn)密碼、
合理的鍵盤利用、
京程一燈,夢起的地方,我們始終相信通過努力,可以改變自己的命運(yùn)。
我們始終相信,通過堅持不懈,可以為大家解決更多的前端技術(shù)問題。
我們始終相信,時間可以證明,我們可以為廣大IT從業(yè)者解決前端學(xué)習(xí)路線。
HTML5,CSS3,Web前端,jquery,javascript,前端學(xué)習(xí)路線,各類問題,我們都可以為你解決。
更多技術(shù)好文,前端問題,面試技巧,請關(guān)注京程一燈(原一燈學(xué)堂)