目錄
$HTML, HTTP,web綜合問題
- 一、前端須要注意哪些
SEO
- 二、
<img>
的title
和alt
有什麼區別 - 三、
HTTP
的幾種請求方法用途 - 四、從瀏覽器地址欄輸入
url
到顯示頁面的步驟 - 五、如何進行網站性能優化
- 六、HTTP狀態碼及其含義
- 七、語義化的理解
- 八、介紹一下你對瀏覽器內核的理解
- 九、
html5
有哪些新特性、移除了那些元素? - 十、
HTML5
的離線儲存怎麼使用,工做原理能不能解釋一下? - 十一、瀏覽器是怎麼對
HTML5
的離線儲存資源進行管理和加載的呢 - 十二、請描述一下
cookies
,sessionStorage
和localStorage
的區別 - 1三、
iframe
有那些缺點? - 1四、
WEB
標準以及W3C標準是什麼? - 1五、
xhtml
和html
有什麼區別? - 1六、
Doctype
做用? 嚴格模式與混雜模式如何區分?它們有何意義? - 1七、行內元素有哪些?塊級元素有哪些? 空(
void
)元素有那些?行內元素和塊級元素有什麼區別? - 1八、
HTML
全局屬性(global attribute
)有哪些 - 1九、
Canvas
和SVG
有什麼區別? - 20、
HTML5
爲何只須要寫<!DOCTYPE HTML>?
- 2一、如何在頁面上實現一個圓形的可點擊區域?
- 2二、網頁驗證碼是幹嗎的,是爲了解決什麼安全問題
$CSS部分
- 一、
css sprite
是什麼,有什麼優缺點 - 二、
display: none;
與visibility: hidden
;的區別 - 三、
link
與@import
的區別 - 四、什麼是
FOUC?
如何避免 - 五、如何建立塊級格式化上下文(
block formatting context
),BFC
有什麼用 - 七、清除浮動的幾種方式,各自的優缺點
- 八、爲何要初始化
CSS
樣式? - 九、
css3
有哪些新特性 - 十、
display
有哪些值?說明他們的做用 - 十一、介紹一下標準的CSS的盒子模型?低版本IE的盒子模型有什麼不一樣的?
- 十二、
CSS
優先級算法如何計算? - 1三、對
BFC
規範的理解? - 1四、談談浮動和清除浮動
- 1五、
position
的值,relative
和absolute`定位原點是 - 1六、
display:inline-block
何時不會顯示間隙?(攜程) - 1七、
PNG,GIF,JPG
的區別及如何選 - 1八、行內元素
float:left
後是否變爲塊級元素? - 1九、在網頁中的應該使用奇數仍是偶數的字體?爲何呢?
- 20、
::before
和:after
中雙冒號和單冒號有什麼區別?解釋一下這2
個僞元素的做用 - 2一、若是須要手動寫動畫,你認爲最小時間間隔是多久,爲何?(阿里)
- 2二、
CSS
合併方法 - 2三、
CSS
不一樣選擇器的權重(CSS
層疊的規則) - 2四、列出你所知道能夠改變頁面佈局的屬性
- 2五、
CSS
在性能優化方面的實踐 - 2六、
CSS3
動畫(簡單動畫的實現,如旋轉等) - 2七、
base64
的原理及優缺點
$JavaScript
- 一、閉包
- 二、說說你對做用域鏈的理解
- 三、
JavaScript
原型,原型鏈 ? 有什麼特色? - 四、請解釋什麼是事件代理
- 五、
Javascript
如何實現繼承? - 六、談談
This
對象的理解 - 七、事件模型
- 八、
new
操做符具體幹了什麼呢? - 九、
Ajax
原理 - 十一、模塊化開發怎麼作?
- 十二、異步加載
JS
的方式有哪些? - 1三、那些操做會形成內存泄漏?
- 1四、
XML
和JSON
的區別? - 1五、談談你對
webpack
的見解 - 1七、常見
web
安全及防禦原理 - 1八、用過哪些設計模式?
- 1九、爲何要有同源限制?
- 20、
offsetWidth/offsetHeight
,clientWidth/clientHeight
與scrollWidth/scrollHeight
的區別 - 2一、
javascript
有哪些方法定義對象 - 2二、常見兼容性問題?
- 2二、說說你對
promise
的瞭解 - 2三、你以爲
jQuery
源碼有哪些寫的好的地方 - 2五、
Node
的應用場景 - 2六、談談你對
AMD
、CMD
的理解 - 2七、那些操做會形成內存泄漏?
- 2八、
web
開發中會話跟蹤的方法有哪些 - 2九、介紹
js
的基本數據類型 - 30、介紹
js
有哪些內置對象? - 3一、說幾條寫
JavaScript
的基本規範? - 3二、
JavaScript
有幾種類型的值?,你能畫一下他們的內存圖嗎? - 3三、
javascript
建立對象的幾種方式? - 3四、
eval
是作什麼的? - 3五、
null,undefined
的區別? - 3六、
[「1」, 「2」, 「3」].map(parseInt)
答案是多少? - 3七、
javascript
代碼中的」use strict」
;是什麼意思 ? 使用它區別是什麼? - 3八、
JSON
的瞭解? - 3九、js延遲加載的方式有哪些?
- 40、同步和異步的區別?
- 4一、漸進加強和優雅降級
- 4二、
defer
和async
- 4三、說說嚴格模式的限制
- 4四、
attribute
和property
的區別是什麼? - 4五、談談你對
ES6
的理解 - 4六、
ECMAScript6
怎麼寫class
麼,爲何會出現class
這種東西? - 4七、什麼是面向對象編程及面向過程編程,它們的異同和優缺點
- 4八、從你本身的理解來看,你是如何理解面向對象編程的,它解決了什麼問題,有什麼做用
- 4九、對web標準、可用性、可訪問性的理解
$編程題
- 一、寫一個通用的事件偵聽器函數
- 二、如何判斷一個對象是否爲數組
- 三、冒泡排序
- 四、快速排序
- 五、編寫一個方法 求一個字符串的字節長度
$其餘
- 一、談談你對重構的理解
- 二、什麼樣的前端代碼是好的
- 三、對前端工程師這個職位是怎麼樣理解的?它的前景會怎麼樣?
- 四、你以爲前端工程的價值體如今哪
- 五、平時如何管理你的項目?
人事面
- 面試完你還有什麼問題要問的嗎
- 你有什麼愛好?
- 你最大的優勢和缺點是什麼?
- 你爲何會選擇這個行業,職位?
- 你以爲你適合從事這個崗位嗎?
- 你有什麼職業規劃?
- 你對工資有什麼要求?
- 如何看待前端開發?
- 將來三到五年的規劃是怎樣的?
常問
- 自我介紹
- 你的項目中技術難點是什麼?遇到了什麼問題?你是怎麼解決的?
- 你認爲哪一個項目作得最好?
- 最近在看哪些前端方面的書?
- 平時是如何學習前端開發的?
- 你最有成就感的一件事
- 你是怎麼學習前端的
$HTML, HTTP,web綜合問題
一、前端須要注意哪些SEO
- 合理的
title
、description
、keywords
:搜索對着三項的權重逐個減少,title值強調重點便可,重要關鍵詞出現不要超過2次,並且要靠前,不一樣頁面title
要有所不一樣;description
把頁面內容高度歸納,長度合適,不可過度堆砌關鍵詞,不一樣頁面description
有所不一樣;keywords
列舉出重要關鍵詞便可 - 語義化的
HTML
代碼,符合W3C規範:語義化代碼讓搜索引擎容易理解網頁 - 重要內容
HTML
代碼放在最前:搜索引擎抓取HTML
順序是從上到下,有的搜索引擎對抓取長度有限制,保證重要內容必定會被抓取 - 重要內容不要用
js
輸出:爬蟲不會執行js獲取內容 - 少用
iframe
:搜索引擎不會抓取iframe
中的內容 - 非裝飾性圖片必須加
alt
- 提升網站速度:網站速度是搜索引擎排序的一個重要指標
二、<img>
的title
和alt
有什麼區別
- 一般當鼠標滑動到元素上的時候顯示
alt
是<img>
的特有屬性,是圖片內容的等價描述,用於圖片沒法加載時顯示、讀屏器閱讀圖片。可提圖片高可訪問性,除了純裝飾圖片外都必須設置有意義的值,搜索引擎會重點分析。
三、HTTP的幾種請求方法用途
-
一、
GET
方法javascript- 發送一個請求來取得服務器上的某一資源
-
二、
POST
方法css- 向
URL
指定的資源提交數據或附加新的數據
- 向
-
三、
PUT
方法html- 跟
POST
方法很像,也是想服務器提交數據。可是,它們之間有不一樣。PUT指定了資源在服務器上的位置,而POST
沒有
- 跟
-
四、
HEAD
方法前端- 只請求頁面的首部
-
五、
DELETE
方法vue- 刪除服務器上的某資源
-
六、
OPTIONS
方法html5- 它用於獲取當前
URL
所支持的方法。若是請求成功,會有一個Allow
的頭包含相似「GET,POST」
這樣的信息
- 它用於獲取當前
-
七、
TRACE
方法javaTRACE
方法被用於激發一個遠程的,應用層的請求消息迴路
-
八、
CONNECT
方法react- 把請求鏈接轉換到透明的
TCP/IP
通道
- 把請求鏈接轉換到透明的
四、從瀏覽器地址欄輸入url到顯示頁面的步驟
- 瀏覽器根據請求的
URL
交給DNS
域名解析,找到真實IP
,向服務器發起請求; - 服務器交給後臺處理完成後返回數據,瀏覽器接收文件(
HTML、JS、CSS
、圖象等); - 瀏覽器對加載到的資源(
HTML、JS、CSS
等)進行語法解析,創建相應的內部數據結構(如HTML
的DOM
); - 載入解析到的資源文件,渲染頁面,完成。
五、如何進行網站性能優化
-
content
方面jquery- 減小
HTTP
請求:合併文件、CSS
精靈、inline Image
- 減小
DNS
查詢:DNS
緩存、將資源分佈到恰當數量的主機名 - 減小
DOM
元素數量
- 減小
-
Server
方面webpack- 使用
CDN
- 配置
ETag
- 對組件使用
Gzip
壓縮
- 使用
-
Cookie
方面- 減少
cookie
大小
- 減少
-
css
方面- 將樣式表放到頁面頂部
- 不使用
CSS
表達式 - 使用
<link>
不使用@import
-
Javascript
方面- 將腳本放到頁面底部
- 將
javascript
和css
從外部引入 - 壓縮
javascript
和css
- 刪除不須要的腳本
- 減小
DOM
訪問
-
圖片方面
- 優化圖片:根據實際顏色須要選擇色深、壓縮
- 優化
css
精靈 - 不要在
HTML
中拉伸圖片
六、HTTP狀態碼及其含義
1XX
:信息狀態碼100 Continue
繼續,通常在發送post
請求時,已發送了http header
以後服務端將返回此信息,表示確認,以後發送具體參數信息
2XX
:成功狀態碼200 OK
正常返回信息201 Created
請求成功而且服務器建立了新的資源202 Accepted
服務器已接受請求,但還沒有處理
3XX
:重定向301 Moved Permanently
請求的網頁已永久移動到新位置。302 Found
臨時性重定向。303 See Other
臨時性重定向,且老是使用GET
請求新的URI
。304 Not Modified
自從上次請求後,請求的網頁未修改過。
4XX
:客戶端錯誤400 Bad Request
服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。401 Unauthorized
請求未受權。403 Forbidden
禁止訪問。404 Not Found
找不到如何與URI
相匹配的資源。
5XX:
服務器錯誤500 Internal Server Error
最多見的服務器端錯誤。503 Service Unavailable
服務器端暫時沒法處理請求(多是過載或維護)。
七、語義化的理解
- 用正確的標籤作正確的事情!
html
語義化就是讓頁面的內容結構化,便於對瀏覽器、搜索引擎解析;- 在沒有樣式
CSS
狀況下也以一種文檔格式顯示,而且是容易閱讀的。 - 搜索引擎的爬蟲依賴於標記來肯定上下文和各個關鍵字的權重,利於
SEO
。 - 使閱讀源代碼的人對網站更容易將網站分塊,便於閱讀維護理解
八、介紹一下你對瀏覽器內核的理解?
-
主要分紅兩部分:渲染引擎(
layout engineer
或Rendering Engine
)和JS
引擎 -
渲染引擎:負責取得網頁的內容(
HTML
、XML
、圖像等等)、整理訊息(例如加入CSS
等),以及計算網頁的顯示方式,而後會輸出至顯示器或打印機。瀏覽器的內核的不一樣對於網頁的語法解釋會有不一樣,因此渲染的效果也不相同。全部網頁瀏覽器、電子郵件客戶端以及其它須要編輯、顯示網絡內容的應用程序都須要內核 JS
引擎則:解析和執行javascript
來實現網頁的動態效果- 最開始渲染引擎和
JS
引擎並無區分的很明確,後來JS引擎愈來愈獨立,內核就傾向於只指渲染引擎
九、html5有哪些新特性、移除了那些元素?
-
HTML5
如今已經不是SGML
的子集,主要是關於圖像,位置,存儲,多任務等功能的增長- 繪畫
canvas
- 用於媒介回放的
video
和audio
元素 - 本地離線存儲
localStorage
長期存儲數據,瀏覽器關閉後數據不丟失 sessionStorage
的數據在瀏覽器關閉後自動刪除- 語意化更好的內容元素,好比
article
、footer
、header
、nav
、section
- 表單控件,
calendar
、date
、time
、email
、url
、search
- 新的技術
webworker
,websocket
,Geolocation
- 繪畫
-
移除的元素:
- 純表現的元素:
basefont
,big
,center
,font
,s
,strike,
tt,u` - 對可用性產生負面影響的元素:
frame
,frameset
,noframes
- 純表現的元素:
-
支持
HTML5
新標籤:IE8/IE7/IE6
支持經過document.createElement
方法產生的標籤- 能夠利用這一特性讓這些瀏覽器支
持HTML5
新標籤 - 瀏覽器支持新標籤後,還須要添加標籤默認的樣式
-
固然也能夠直接使用成熟的框架、好比
html5shim
十、HTML5
的離線儲存怎麼使用,工做原理能不能解釋一下?
-
在用戶沒有與因特網鏈接時,能夠正常訪問站點或應用,在用戶與因特網鏈接時,更新用戶機器上的緩存文件
-
原理:
HTML5
的離線存儲是基於一個新建的.appcache
文件的緩存機制(不是存儲技術),經過這個文件上的解析清單離線存儲資源,這些資源就會像cookie
同樣被存儲了下來。以後當網絡在處於離線狀態下時,瀏覽器會經過被離線存儲的數據進行頁面展現 -
如何使用:
- 頁面頭部像下面同樣加入一個
manifest
的屬性; - 在
cache.manifest
文件的編寫離線存儲的資源 - 在離線狀態時,操做
window.applicationCache
進行需求實現
- 頁面頭部像下面同樣加入一個
十一、瀏覽器是怎麼對HTML5
的離線儲存資源進行管理和加載的呢
-
在線的狀況下,瀏覽器發現
html
頭部有manifest
屬性,它會請求manifest
文件,若是是第一次訪問app
,那麼瀏覽器就會根據manifest文件的內容下載相應的資源而且進行離線存儲。若是已經訪問過app
而且資源已經離線存儲了,那麼瀏覽器就會使用離線的資源加載頁面,而後瀏覽器會對比新的manifest
文件與舊的manifes
t文件,若是文件沒有發生改變,就不作任何操做,若是文件改變了,那麼就會從新下載文件中的資源並進行離線存儲。 -
離線的狀況下,瀏覽器就直接使用離線存儲的資源。
十二、請描述一下 cookies
,sessionStorage
和 localStorage
的區別?
cookie
是網站爲了標示用戶身份而儲存在用戶本地終端(Client Side)上的數據(一般通過加密)- cookie數據始終在同源的http請求中攜帶(即便不須要),記會在瀏覽器和服務器間來回傳遞
sessionStorage
和localStorage
不會自動把數據發給服務器,僅在本地保存-
存儲大小:
cookie
數據大小不能超過4ksessionStorage
和localStorage
雖然也有存儲大小的限制,但比cookie
大得多,能夠達到5M或更大
-
有期時間:
localStorage
存儲持久數據,瀏覽器關閉後數據不丟失除非主動刪除數據sessionStorage
數據在當前瀏覽器窗口關閉後自動刪除cookie
設置的cookie
過時時間以前一直有效,即便窗口或瀏覽器關閉
1三、iframe有那些缺點?
iframe
會阻塞主頁面的Onload
事件- 搜索引擎的檢索程序沒法解讀這種頁面,不利於
SEO
iframe
和主頁面共享鏈接池,而瀏覽器對相同域的鏈接有限制,因此會影響頁面的並行加載- 使用
iframe
以前須要考慮這兩個缺點。若是須要使用iframe
,最好是經過javascript
動態給iframe
添加src
屬性值,這樣能夠繞開以上兩個問題
1四、WEB標準以及W3C標準是什麼?
- 標籤閉合、標籤小寫、不亂嵌套、使用外鏈
css
和js
、結構行爲表現的分離
1五、xhtml和html有什麼區別?
-
一個是功能上的差異
- 主要是
XHTML
可兼容各大瀏覽器、手機以及PDA
,而且瀏覽器也能快速正確地編譯網頁
- 主要是
-
另外是書寫習慣的差異
XHTML
元素必須被正確地嵌套,閉合,區分大小寫,文檔必須擁有根元素
1六、Doctype做用? 嚴格模式與混雜模式如何區分?它們有何意義?
- 頁面被加載的時,
link
會同時被加載,而@imort
頁面被加載的時,link
會同時被加載,而@import
引用的CSS
會等到頁面被加載完再加載
import
只在IE5
以上才能識別,而link
是XHTML
標籤,無兼容問題
link
方式的樣式的權重 高於@import
的權重 <!DOCTYPE>
聲明位於文檔中的最前面,處於<html>
標籤以前。告知瀏覽器的解析器, 用什麼文檔類型 規範來解析這個文檔- 嚴格模式的排版和
JS
運做模式是 以該瀏覽器支持的最高標準運行 - 在混雜模式中,頁面以寬鬆的向後兼容的方式顯示。模擬老式瀏覽器的行爲以防止站點沒法工做。
DOCTYPE
不存在或格式不正確會致使文檔以混雜模式呈現
1七、行內元素有哪些?塊級元素有哪些? 空(void)元素有那些?行內元素和塊級元素有什麼區別?
- 行內元素有:
a b span img input select strong
- 塊級元素有:
div ul ol li dl dt dd h1 h2 h3 h4…p
- 空元素:
<br> <hr> <img> <input> <link> <meta>
- 行內元素不能夠設置寬高,不獨佔一行
- 塊級元素能夠設置寬高,獨佔一行
1八、HTML全局屬性(global attribute)有哪些
class
:爲元素設置類標識data-*
: 爲元素增長自定義屬性draggable
: 設置元素是否可拖拽id
: 元素id
,文檔內惟一lang
: 元素內容的的語言style
: 行內css
樣式title
: 元素相關的建議信息
1九、Canvas和SVG有什麼區別?
svg
繪製出來的每個圖形的元素都是獨立的DOM
節點,可以方便的綁定事件或用來修改。canvas
輸出的是一整幅畫布svg
輸出的圖形是矢量圖形,後期能夠修改參數來自由放大縮小,不會是真和鋸齒。而canvas
輸出標量畫布,就像一張圖片同樣,放大會失真或者鋸齒
20、HTML5 爲何只須要寫 <!DOCTYPE HTML>?
HTML5
不基於SGML
,所以不須要對DTD
進行引用,可是須要doctype
來規範瀏覽器的行爲- 而
HTML4.01
基於SGML
,因此須要對DTD
進行引用,才能告知瀏覽器文檔所使用的文檔類型
2一、如何在頁面上實現一個圓形的可點擊區域?
svg
border-radius
- 純
js
實現 須要求一個點在不在圓上簡單算法、獲取鼠標座標等等
2二、網頁驗證碼是幹嗎的,是爲了解決什麼安全問題
- 區分用戶是計算機仍是人的公共全自動程序。能夠防止惡意破解密碼、刷票、論壇灌水
- 有效防止黑客對某一個特定註冊用戶用特定程序暴力破解方式進行不斷的登錄嘗試
$CSS部分
一、css sprite是什麼,有什麼優缺點
-
概念:將多個小圖片拼接到一個圖片中。經過
background-position
和元素尺寸調節須要顯示的背景圖案。 -
優勢:
- 減小
HTTP
請求數,極大地提升頁面加載速度 - 增長圖片信息重複度,提升壓縮比,減小圖片大小
- 更換風格方便,只需在一張或幾張圖片上修改顏色或樣式便可實現
- 減小
-
缺點:
- 圖片合併麻煩
- 維護麻煩,修改一個圖片可能須要重新佈局整個圖片,樣式
二、display: none;
與visibility: hidden;
的區別
-
聯繫:它們都能讓元素不可見
-
區別:
display:none
;會讓元素徹底從渲染樹中消失,渲染的時候不佔據任何空間;visibility: hidden
;不會讓元素從渲染樹消失,渲染師元素繼續佔據空間,只是內容不可見display: none
;是非繼承屬性,子孫節點消失因爲元素從渲染樹消失形成,經過修改子孫節點屬性沒法顯示;visibility: hidden;
是繼承屬性,子孫節點消失因爲繼承了hidden
,經過設置visibility: visible;
可讓子孫節點顯式- 修改常規流中元素的
display
一般會形成文檔重排。修改visibility
屬性只會形成本元素的重繪。 - 讀屏器不會讀取
display: none
;元素內容;會讀取visibility: hidden;
元素內容
三、link
與@import
的區別
link
是HTML
方式,@import
是CSS方式link
最大限度支持並行下載,@import
過多嵌套致使串行下載,出現FOUC
link
能夠經過rel="alternate stylesheet"
指定候選樣式- 瀏覽器對
link
支持早於@import
,可使用@import
對老瀏覽器隱藏樣式 @import
必須在樣式規則以前,能夠在css文件中引用其餘文件- 整體來講:
link
優於@import
四、什麼是FOUC?如何避免
Flash Of Unstyled Content
:用戶定義樣式表加載以前瀏覽器使用默認樣式顯示文檔,用戶樣式加載渲染以後再重新顯示文檔,形成頁面閃爍。- 解決方法:把樣式表放到文檔的
head
五、如何建立塊級格式化上下文(block formatting context),BFC有什麼用
-
建立規則:
- 根元素
- 浮動元素(
float
不是none
) - 絕對定位元素(
position
取值爲absolute
或fixed
) display
取值爲inline-block
,table-cell
,table-caption
,flex
,inline-flex
之一的元素overflow
不是visible
的元素
-
做用:
- 能夠包含浮動元素
- 不被浮動元素覆蓋
- 阻止父子元素的
margin
摺疊
六、display,float,position的關係
- 若是
display
爲none
,那麼position
和float
都不起做用,這種狀況下元素不產生框 - 不然,若是
position
值爲absolute
或者fixed
,框就是絕對定位的,float
的計算值爲none
,display
根據下面的表格進行調整。 - 不然,若是
float
不是none
,框是浮動的,display
根據下表進行調整 - 不然,若是元素是根元素,
display
根據下表進行調整 - 其餘狀況下
display
的值爲指定值 - 總結起來:絕對定位、浮動、根元素都須要調整
display
七、清除浮動的幾種方式,各自的優缺點
- 父級
div
定義height
- 結尾處加空
div
標籤clear:both
- 父級
div
定義僞類:after
和zoom
- 父級
div
定義overflow:hidden
- 父級
div
也浮動,須要定義寬度 - 結尾處加
br
標籤clear:both
- 比較好的是第3種方式,好多網站都這麼用
八、爲何要初始化CSS樣式?
- 由於瀏覽器的兼容問題,不一樣瀏覽器對有些標籤的默認值是不一樣的,若是沒對
CSS
初始化每每會出現瀏覽器之間的頁面顯示差別。 - 固然,初始化樣式會對
SEO
有必定的影響,但魚和熊掌不可兼得,但力求影響最小的狀況下初始化
九、css3有哪些新特性
- 新增各類
css
選擇器 - 圓角
border-radius
- 多列布局
- 陰影和反射
- 文字特效
text-shadow
- 線性漸變
- 旋轉
transform
CSS3新增僞類有那些?
p:first-of-type
選擇屬於其父元素的首個<p>
元素的每一個<p>
元素。p:last-of-type
選擇屬於其父元素的最後<p>
元素的每一個<p>
元素。p:only-of-type
選擇屬於其父元素惟一的<p>
元素的每一個<p>
元素。p:only-child
選擇屬於其父元素的惟一子元素的每一個<p>
元素。p:nth-child(2)
選擇屬於其父元素的第二個子元素的每一個<p>
元素。:after
在元素以前添加內容,也能夠用來作清除浮動。:before
在元素以後添加內容:enabled
:disabled
控制表單控件的禁用狀態。:checked
單選框或複選框被選中
十、display有哪些值?說明他們的做用
block
象塊類型元素同樣顯示。none
缺省值。象行內元素類型同樣顯示。inline-block
象行內元素同樣顯示,但其內容象塊類型元素同樣顯示。list-item
象塊類型元素同樣顯示,並添加樣式列表標記。table
此元素會做爲塊級表格來顯示inherit
規定應該從父元素繼承display
屬性的值
十一、介紹一下標準的CSS的盒子模型?低版本IE的盒子模型有什麼不一樣的?
- 有兩種,
IE
盒子模型、W3C
盒子模型; - 盒模型: 內容(content)、填充(
padding
)、邊界(margin
)、 邊框(border
); - 區 別:
IE
的content
部分把border
和padding
計算了進去;
十二、CSS優先級算法如何計算?
- 優先級就近原則,同權重狀況下樣式定義最近者爲準
- 載入樣式以最後載入的定位爲準
- 優先級爲:
!important > id > class > tag
important
比 內聯優先級高
1三、對BFC規範的理解?
- 它決定了元素如何對其內容進行定位,以及與其餘元素的關係和相互做用
1四、談談浮動和清除浮動
- 浮動的框能夠向左或向右移動,直到他的外邊緣碰到包含框或另外一個浮動框的邊框爲止。因爲浮動框不在文檔的普通流中,因此文檔的普通流的塊框表現得就像浮動框不存在同樣。浮動的塊框會漂浮在文檔普通流的塊框上
1五、position的值, relative和absolute定位原點是
absolute
:生成絕對定位的元素,相對於static
定位之外的第一個父元素進行定位fixed
:生成絕對定位的元素,相對於瀏覽器窗口進行定位relative
:生成相對定位的元素,相對於其正常位置進行定位static
默認值。沒有定位,元素出如今正常的流中inherit
規定從父元素繼承position
屬性的值
1六、display:inline-block 何時不會顯示間隙?(攜程)
- 移除空格
- 使用
margin
負值 - 使用
font-size:0
letter-spacing
word-spacing
1七、PNG,GIF,JPG的區別及如何選
-
GIF
8
位像素,256
色- 無損壓縮
- 支持簡單動畫
- 支持
boolean
透明 - 適合簡單動畫
-
JPEG
- 顏色限於
256
- 有損壓縮
- 可控制壓縮質量
- 不支持透明
- 適合照片
- 顏色限於
PNG
- 有
PNG8
和truecolor PNG
PNG8
相似GIF
顏色上限爲256
,文件小,支持alpha
透明度,無動畫- 適合圖標、背景、按鈕
- 有
1八、行內元素float:left後是否變爲塊級元素?
- 浮動後,行內元素不會成爲塊狀元素,可是能夠設置寬高。行內元素要想變成塊狀元素,佔一行,直接設置
display:block
;。但若是元素設置了浮動後再設置display:block
;那就不會佔一行。
1九、在網頁中的應該使用奇數仍是偶數的字體?爲何呢?
- 偶數字號相對更容易和 web 設計的其餘部分構成比例關係
20、::before 和 :after中雙冒號和單冒號 有什麼區別?解釋一下這2個僞元素的做用
- 單冒號(
:
)用於CSS3僞類,雙冒號(::
)用於CSS3
僞元素 - 用於區分僞類和僞元素
2一、若是須要手動寫動畫,你認爲最小時間間隔是多久,爲何?(阿里)
- 多數顯示器默認頻率是
60Hz
,即1
秒刷新60
次,因此理論上最小間隔爲1/60*1000ms = 16.7ms
2二、CSS合併方法
- 避免使用
@import
引入多個css
文件,可使用CSS
工具將CSS
合併爲一個CSS
文件,例如使用Sass\Compass
等
2三、CSS不一樣選擇器的權重(CSS層疊的規則)
!important
規則最重要,大於其它規則- 行內樣式規則,加
1000
- 對於選擇器中給定的各個
ID
屬性值,加100
- 對於選擇器中給定的各個類屬性、屬性選擇器或者僞類選擇器,加
10
- 對於選擇其中給定的各個元素標籤選擇器,加1
- 若是權值同樣,則按照樣式規則的前後順序來應用,順序靠後的覆蓋靠前的規則
2四、列出你所知道能夠改變頁面佈局的屬性
position
、display
、float
、width
、heigh
t、margin
、padding
、top
、left
、right
、`
2五、CSS在性能優化方面的實踐
css
壓縮與合併、Gzip
壓縮css
文件放在head
裏、不要用@import
- 儘可能用縮寫、避免用濾鏡、合理使用選擇器
2六、CSS3動畫(簡單動畫的實現,如旋轉等)
- 依靠
CSS3
中提出的三個屬性:transition
、transform
、animation
transition
:定義了元素在變化過程當中是怎麼樣的,包含transition-property
、transition-duration
、transition-timing-function
、transition-delay
。transform
:定義元素的變化結果,包含rotate
、scale
、skew
、translate
。animation
:動畫定義了動做的每一幀(@keyframes
)有什麼效果,包括animation-name
,animation-duration
、animation-timing-function
、animation-delay
、animation-iteration-count
、animation-direction
2七、base64的原理及優缺點
- 優勢能夠加密,減小了
http
請求 - 缺點是須要消耗
CPU
進行編解碼
$JavaScript
一、閉包
-
閉包就是可以讀取其餘函數內部變量的函數
-
閉包是指有權訪問另外一個函數做用域中變量的函數,建立閉包的最多見的方式就是在一個函數內建立另外一個函數,經過另外一個函數訪問這個函數的局部變量,利用閉包能夠突破做用鏈域
-
閉包的特性:
- 函數內再嵌套函數
- 內部函數能夠引用外層的參數和變量
- 參數和變量不會被垃圾回收機制回收
說說你對閉包的理解
-
使用閉包主要是爲了設計私有的方法和變量。閉包的優勢是能夠避免全局變量的污染,缺點是閉包會常駐內存,會增大內存使用量,使用不當很容易形成內存泄露。在js中,函數即閉包,只有函數纔會產生做用域的概念
-
閉包 的最大用處有兩個,一個是能夠讀取函數內部的變量,另外一個就是讓這些變量始終保持在內存中
-
閉包的另外一個用處,是封裝對象的私有屬性和私有方法
-
好處:可以實現封裝和緩存等;
- 壞處:就是消耗內存、不正當使用會形成內存溢出的問題
使用閉包的注意點
- 因爲閉包會使得函數中的變量都被保存在內存中,內存消耗很大,因此不能濫用閉包,不然會形成網頁的性能問題,在IE中可能致使內存泄露
- 解決方法是,在退出函數以前,將不使用的局部變量所有刪除
二、說說你對做用域鏈的理解
- 做用域鏈的做用是保證執行環境裏有權訪問的變量和函數是有序的,做用域鏈的變量只能向上訪問,變量訪問到
window
對象即被終止,做用域鏈向下訪問變量是不被容許的 - 簡單的說,做用域就是變量與函數的可訪問範圍,即做用域控制着變量與函數的可見性和生命週期
三、JavaScript原型,原型鏈 ? 有什麼特色?
- 每一個對象都會在其內部初始化一個屬性,就是
prototype
(原型),當咱們訪問一個對象的屬性時 - 若是這個對象內部不存在這個屬性,那麼他就會去
prototype
裏找這個屬性,這個prototype
又會有本身的prototype
,因而就這樣一直找下去,也就是咱們平時所說的原型鏈的概念 - 關係:
instance.constructor.prototype = instance.__proto__
-
特色:
JavaScript
對象是經過引用來傳遞的,咱們建立的每一個新對象實體中並無一份屬於本身的原型副本。當咱們修改原型時,與之相關的對象也會繼承這一改變
-
當咱們須要一個屬性的時,
Javascript
引擎會先看當前對象中是否有這個屬性, 若是沒有的 - 就會查找他的
Prototype
對象是否有這個屬性,如此遞推下去,一直檢索到Object
內建對象
四、請解釋什麼是事件代理
- 事件代理(
Event Delegation
),又稱之爲事件委託。是JavaScript
中經常使用綁定事件的經常使用技巧。顧名思義,「事件代理」便是把本來須要綁定的事件委託給父元素,讓父元素擔當事件監聽的職務。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好處是能夠提升性能 - 能夠大量節省內存佔用,減小事件註冊,好比在
table
上代理全部td
的click
事件就很是棒 - 能夠實現當新增子對象時無需再次對其綁定
五、Javascript如何實現繼承?
- 構造繼承
- 原型繼承
- 實例繼承
-
拷貝繼承
-
原型
prototype
機制或apply
和call
方法去實現較簡單,建議使用構造函數與原型混合方式
六、談談This對象的理解
this
老是指向函數的直接調用者(而非間接調用者)- 若是有
new
關鍵字,this
指向new
出來的那個對象 - 在事件中,
this
指向觸發這個事件的對象,特殊的是,IE
中的attachEvent
中的this
老是指向全局對象Window
七、事件模型
W3C
中定義事件的發生經歷三個階段:捕獲階段(capturing
)、目標階段(targetin
)、冒泡階段(bubbling
)
- 冒泡型事件:當你使用事件冒泡時,子級元素先觸發,父級元素後觸發
- 捕獲型事件:當你使用事件捕獲時,父級元素先觸發,子級元素後觸發
DOM
事件流:同時支持兩種事件模型:捕獲型事件和冒泡型事件- 阻止冒泡:在
W3c
中,使用stopPropagation()
方法;在IE下設置cancelBubble = true
- 阻止捕獲:阻止事件的默認行爲,例如
click - <a>
後的跳轉。在W3c
中,使用preventDefault()
方法,在IE
下設置window.event.returnValue = false
八、new操做符具體幹了什麼呢?
- 建立一個空對象,而且
this
變量引用該對象,同時還繼承了該函數的原型 - 屬性和方法被加入到
this
引用的對象中 - 新建立的對象由
this
所引用,而且最後隱式的返回this
九、Ajax原理
Ajax
的原理簡單來講是在用戶和服務器之間加了—箇中間層(AJAX
引擎),經過XmlHttpRequest
對象來向服務器發異步請求,從服務器得到數據,而後用javascrip
t來操做DOM
而更新頁面。使用戶操做與服務器響應異步化。這其中最關鍵的一步就是從服務器得到請求數據Ajax
的過程只涉及JavaScript
、XMLHttpRequest
和DOM
。XMLHttpRequest
是aja
x的核心機制
ajax 有那些優缺點?
- 優勢:
- 經過異步模式,提高了用戶體驗.
- 優化了瀏覽器和服務器之間的傳輸,減小沒必要要的數據往返,減小了帶寬佔用.
Ajax
在客戶端運行,承擔了一部分原本由服務器承擔的工做,減小了大用戶量下的服務器負載。Ajax
能夠實現動態不刷新(局部刷新)
- 缺點:
- 安全問題
AJAX
暴露了與服務器交互的細節。 - 對搜索引擎的支持比較弱。
- 不容易調試。
- 安全問題
十、如何解決跨域問題?
jsonp
、iframe
、window.name
、window.postMessage
、服務器上設置代理頁面
十一、模塊化開發怎麼作?
- 當即執行函數,不暴露私有成員
十二、異步加載JS的方式有哪些?
- defer,只支持
IE
async
:- 建立
script
,插入到DOM
中,加載完畢後callBack
1三、那些操做會形成內存泄漏?
- 內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在
setTimeout
的第一個參數使用字符串而非函數的話,會引起內存泄漏- 閉包使用不當
1四、XML和JSON的區別?
-
數據體積方面
JSON
相對於XML
來說,數據的體積小,傳遞的速度更快些。
-
數據交互方面
JSON
與JavaScript
的交互更加方便,更容易解析處理,更好的數據交互
-
數據描述方面
JSON
對數據的描述性比XML
較差
-
傳輸速度方面
JSON
的速度要遠遠快於XML
1五、談談你對webpack的見解
WebPack
是一個模塊打包工具,你可使用WebPack
管理你的模塊依賴,並編繹輸出模塊們所需的靜態文件。它可以很好地管理、打包Web
開發中所用到的HTML
、Javascript
、CSS
以及各類靜態文件(圖片、字體等),讓開發過程更加高效。對於不一樣類型的資源,webpack
有對應的模塊加載器。webpack
模塊打包器會分析模塊間的依賴關係,最後 生成了優化且合併後的靜態資源
1六、說說你對AMD和Commonjs的理解
CommonJS
是服務器端模塊的規範,Node.js
採用了這個規範。CommonJS
規範加載模塊是同步的,也就是說,只有加載完成,才能執行後面的操做。AMD
規範則是非同步加載模塊,容許指定回調函數AMD
推薦的風格經過返回一個對象作爲模塊對象,CommonJS
的風格經過對module.exports
或exports
的屬性賦值來達到暴露模塊對象的目的
1七、常見web安全及防禦原理
-
sql
注入原理- 就是經過把
SQL
命令插入到Web
表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令
- 就是經過把
-
總的來講有如下幾點
- 永遠不要信任用戶的輸入,要對用戶的輸入進行校驗,能夠經過正則表達式,或限制長度,對單引號和雙
"-"
進行轉換等 - 永遠不要使用動態拼裝SQL,可使用參數化的
SQL
或者直接使用存儲過程進行數據查詢存取 - 永遠不要使用管理員權限的數據庫鏈接,爲每一個應用使用單獨的權限有限的數據庫鏈接
- 不要把機密信息明文存放,請加密或者
hash
掉密碼和敏感的信息
- 永遠不要信任用戶的輸入,要對用戶的輸入進行校驗,能夠經過正則表達式,或限制長度,對單引號和雙
XSS原理及防範
Xss(cross-site scripting)
攻擊指的是攻擊者往Web
頁面裏插入惡意html
標籤或者javascript
代碼。好比:攻擊者在論壇中放一個看似安全的連接,騙取用戶點擊後,竊取cookie
中的用戶私密信息;或者攻擊者在論壇中加一個惡意表單,當用戶提交表單的時候,卻把信息傳送到攻擊者的服務器中,而不是用戶本來覺得的信任站點
XSS防範方法
- 首先代碼裏對用戶輸入的地方和變量都須要仔細檢查長度和對
」<」,」>」,」;」,」’」
等字符作過濾;其次任何內容寫到頁面以前都必須加以encode,避免不當心把html tag
弄出來。這一個層面作好,至少能夠堵住超過一半的XSS 攻擊
XSS與CSRF有什麼區別嗎?
-
XSS
是獲取信息,不須要提早知道其餘用戶頁面的代碼和數據包。CSRF
是代替用戶完成指定的動做,須要知道其餘用戶頁面的代碼和數據包。要完成一次CSRF
攻擊,受害者必須依次完成兩個步驟 -
登陸受信任網站
A
,並在本地生成Cookie
- 在不登出
A
的狀況下,訪問危險網站B
CSRF的防護
- 服務端的
CSRF
方式方法不少樣,但總的思想都是一致的,就是在客戶端頁面增長僞隨機數 - 經過驗證碼的方法
1八、用過哪些設計模式?
-
工廠模式:
- 工廠模式解決了重複實例化的問題,但還有一個問題,那就是識別問題,由於根本沒法
- 主要好處就是能夠消除對象間的耦合,經過使用工程方法而不是
new
關鍵字
-
構造函數模式
- 使用構造函數的方法,即解決了重複實例化的問題,又解決了對象識別的問題,該模式與工廠模式的不一樣之處在於
- 直接將屬性和方法賦值給
this
對象;
1九、爲何要有同源限制?
- 同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議
- 舉例說明:好比一個黑客程序,他利用
Iframe
把真正的銀行登陸頁面嵌到他的頁面上,當你使用真實的用戶名,密碼登陸時,他的頁面就能夠經過Javascript
讀取到你的表單中input
中的內容,這樣用戶名,密碼就輕鬆到手了。
20、offsetWidth/offsetHeight,clientWidth/clientHeight與scrollWidth/scrollHeight的區別
offsetWidth/offsetHeight
返回值包含content + padding + border,效果與e.getBoundingClientRect()相同clientWidth/clientHeight
返回值只包含content + padding,若是有滾動條,也不包含滾動條scrollWidth/scrollHeight
返回值包含content + padding + 溢出內容的尺寸
2一、javascript有哪些方法定義對象
- 對象字面量:
var obj = {};
- 構造函數:
var obj = new Object();
- Object.create():
var obj = Object.create(Object.prototype);
2二、常見兼容性問題?
png24
位的圖片在iE6瀏覽器上出現背景,解決方案是作成PNG8
- 瀏覽器默認的
margin
和padding
不一樣。解決方案是加一個全局的*{margin:0;padding:0;}
來統一,,可是全局效率很低,通常是以下這樣解決:
IE
下,event
對象有x
,y
屬性,可是沒有pageX
,pageY
屬性Firefox
下,event
對象有pageX
,pageY
屬性,可是沒有x,y
屬性.
2二、說說你對promise的瞭解
-
依照
Promise/A+
的定義,Promise
有四種狀態:-
pending:
初始狀態, 非fulfilled
或rejected.
-
fulfilled:
成功的操做. -
rejected:
失敗的操做. -
settled: Promise
已被fulfilled
或rejected
,且不是pending
-
-
另外,
fulfilled
與rejected
一塊兒合稱settled
Promise
對象用來進行延遲(deferred
) 和異步(asynchronous
) 計算
Promise 的構造函數
- 構造一個
Promise
,最基本的用法以下:
-
Promise
實例擁有then
方法(具備then
方法的對象,一般被稱爲thenable
)。它的使用方法以下: -
接收兩個函數做爲參數,一個在
fulfilled
的時候被調用,一個在rejected
的時候被調用,接收參數就是future
,onFulfilled
對應resolve
,onRejected
對應reject
2三、你以爲jQuery源碼有哪些寫的好的地方
jquery
源碼封裝在一個匿名函數的自執行環境中,有助於防止變量的全局污染,而後經過傳入window
對象參數,可使window
對象做爲局部變量使用,好處是當jquery
中訪問window
對象的時候,就不用將做用域鏈退回到頂層做用域了,從而能夠更快的訪問window對象。一樣,傳入undefined
參數,能夠縮短查找undefined
時的做用域鏈jquery
將一些原型屬性和方法封裝在了jquery.prototype
中,爲了縮短名稱,又賦值給了jquery.fn
,這是很形象的寫法- 有一些數組或對象的方法常常能使用到,
jQuery
將其保存爲局部變量以提升訪問速度 jquery
實現的鏈式調用能夠節約代碼,所返回的都是同一個對象,能夠提升代碼效率
2四、vue、react、angular
-
Vue.js
一個用於建立web
交互界面的庫,是一個精簡的MVVM
。它經過雙向數據綁定把View
層和Model
層鏈接了起來。實際的DOM
封裝和輸出格式都被抽象爲了Directives
和Filters
-
AngularJS
是一個比較完善的前端MVVM
框架,包含模板,數據雙向綁定,路由,模塊化,服務,依賴注入等全部功能,模板功能強大豐富,自帶了豐富的Angular
指令 -
react
React
僅僅是VIEW
層是facebook
公司。推出的一個用於構建UI
的一個庫,可以實現服務器端的渲染。用了virtual dom
,因此性能很好。
2五、Node的應用場景
-
特色:
- 一、它是一個
Javascript
運行環境 - 二、依賴於
Chrome V8
引擎進行代碼解釋 - 三、事件驅動
- 四、非阻塞
I/O
- 五、單進程,單線程
- 一、它是一個
-
優勢:
- 高併發(最重要的優勢)
-
缺點:
- 一、只支持單
核CPU
,不能充分利用CPU
- 二、可靠性低,一旦代碼某個環節崩潰,整個系統都崩潰
- 一、只支持單
2六、談談你對AMD、CMD的理解
-
CommonJS
是服務器端模塊的規範,Node.js
採用了這個規範。CommonJS
規範加載模塊是同步的,也就是說,只有加載完成,才能執行後面的操做。AMD
規範則是非同步加載模塊,容許指定回調函數 -
AMD
推薦的風格經過返回一個對象作爲模塊對象,CommonJS
的風格經過對module.exports
或exports
的屬性賦值來達到暴露模塊對象的目的
2七、那些操做會形成內存泄漏?
- 內存泄漏指任何對象在您再也不擁有或須要它以後仍然存在
setTimeout
的第一個參數使用字符串而非函數的話,會引起內存泄漏- 閉包、控制檯日誌、循環(在兩個對象彼此引用且彼此保留時,就會產生一個循環)
2八、web開發中會話跟蹤的方法有哪些
cookie
session
url
重寫- 隱藏
input
ip
地址
2九、介紹js的基本數據類型
Undefined
、Null
、Boolean
、Number
、String
30、介紹js有哪些內置對象?
Object
是JavaScript
中全部對象的父對象- 數據封裝類對象:
Object
、Array
、Boolean
、Number
和String
- 其餘對象:
Function
、Arguments
、Math
、Date
、RegExp
、Error
3一、說幾條寫JavaScript的基本規範?
- 不要在同一行聲明多個變量
- 請使用
===/!==
來比較true/false
或者數值 - 使用對象字面量替代
new Array
這種形式 - 不要使用全局函數
Switch
語句必須帶有default
分支If
語句必須使用大括號for-in
循環中的變量 應該使用var
關鍵字明確限定做用域,從而避免做用域污
3二、JavaScript有幾種類型的值?,你能畫一下他們的內存圖嗎?
- 棧:原始數據類型(
Undefined
,Null
,Boolean
,Numbe
r、String
) - 堆:引用數據類型(對象、數組和函數)
- 兩種類型的區別是:存儲位置不一樣;
- 原始數據類型直接存儲在棧(
stack
)中的簡單數據段,佔據空間小、大小固定,屬於被頻繁使用數據,因此放入棧中存儲; - 引用數據類型存儲在堆(
heap
)中的對象,佔據空間大、大小不固定,若是存儲在棧中,將會影響程序運行的性能;引用數據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。當解釋器尋找引用值時,會首先檢索其 - 在棧中的地址,取得地址後從堆中得到實體
3三、javascript建立對象的幾種方式?
javascript
建立對象簡單的說,無非就是使用內置對象或各類自定義對象,固然還能夠用JSON
;但寫法有不少種,也能混合使用
- 對象字面量的方式
- 用
function
來模擬無參的構造函數
- 用
function
來模擬參構造函數來實現(用this
關鍵字定義構造的上下文屬性)
- 用工廠方式來建立(內置對象)
- 用原型方式來建立
- 用混合方式來建立
3四、eval是作什麼的?
- 它的功能是把對應的字符串解析成
JS
代碼並運行 - 應該避免使用
eval
,不安全,很是耗性能(2
次,一次解析成js
語句,一次執行) - 由
JSON
字符串轉換爲JSON對象的時候能夠用eval,var obj =eval('('+ str +')')
3五、null,undefined 的區別?
undefined
表示不存在這個值。undefined
:是一個表示」無」的原始值或者說表示」缺乏值」,就是此處應該有一個值,可是尚未定義。當嘗試讀取時會返回undefined
-
例如變量被聲明瞭,但沒有賦值時,就等於
undefined
-
null
表示一個對象被定義了,值爲「空值」 null
: 是一個對象(空對象, 沒有任何屬性和方法)-
例如做爲函數的參數,表示該函數的參數不是對象;
-
在驗證
null
時,必定要使用===
,由於==
沒法分別null
和undefined
3六、[「1」, 「2」, 「3」].map(parseInt) 答案是多少?
[1, NaN, NaN]
由於parseInt
須要兩個參數(val, radix)
,其中radix
表示解析時用的基數。map
傳了3
個(element, index, array)
,對應的radix
不合法致使解析失敗。
3七、javascript 代碼中的」use strict」;是什麼意思 ? 使用它區別是什麼?
use strict
是一種ECMAscript 5
添加的(嚴格)運行模式,這種模式使得 Javascript 在更嚴格的條件下運行,使JS
編碼更加規範化的模式,消除Javascript
語法的一些不合理、不嚴謹之處,減小一些怪異行爲
3八、JSON 的瞭解?**
JSON(JavaScript Object Notation)
是一種輕量級的數據交換格式-
它是基於
JavaScript
的一個子集。數據格式簡單, 易於讀寫, 佔用帶寬小 -
JSON
字符串轉換爲JSON對象:
JSON
對象轉換爲JSON字符串:
3九、js延遲加載的方式有哪些?
defer
和async
、動態建立DOM
方式(用得最多)、按需異步載入js
40、同步和異步的區別?
- 同步:瀏覽器訪問服務器請求,用戶看獲得頁面刷新,從新發請求,等請求完,頁面刷新,新內容出現,用戶看到新內容,進行下一步操做
- 異步:瀏覽器訪問服務器請求,用戶正常操做,瀏覽器後端進行請求。等請求完,頁面不刷新,新內容也會出現,用戶看到新內容
4一、漸進加強和優雅降級
-
漸進加強 :針對低版本瀏覽器進行構建頁面,保證最基本的功能,而後再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。
-
優雅降級 :一開始就構建完整的功能,而後再針對低版本瀏覽器進行兼容
4二、defer和async
defer
並行加載js
文件,會按照頁面上script
標籤的順序執行async
並行加載js
文件,下載完成當即執行,不會按照頁面上script
標籤的順序執行
4三、說說嚴格模式的限制
- 變量必須聲明後再使用
- 函數的參數不能有同名屬性,不然報錯
- 不能使用
with
語句 - 禁止
this
指向全局對象
4四、attribute和property的區別是什麼?
attribute
是dom
元素在文檔中做爲html
標籤擁有的屬性;property
就是dom
元素在js
中做爲對象擁有的屬性。- 對於
html
的標準屬性來講,attribute
和property
是同步的,是會自動更新的 - 可是對於自定義的屬性來講,他們是不一樣步的
4五、談談你對ES6的理解
- 新增模板字符串(爲
JavaScript
提供了簡單的字符串插值功能) - 箭頭函數
for-of
(用來遍歷數據—例如數組中的值。)arguments
對象可被不定參數和默認參數完美代替。ES6
將promise
對象歸入規範,提供了原生的Promise
對象。- 增長了
let
和const
命令,用來聲明變量。 - 增長了塊級做用域。
let
命令實際上就增長了塊級做用域。- 還有就是引入
module
模塊的概念
4六、ECMAScript6 怎麼寫class麼,爲何會出現class這種東西?
- 這個語法糖可讓有
OOP
基礎的人更快上手js
,至少是一個官方的實現了 - 但對熟悉
js
的人來講,這個東西沒啥大影響;一個Object.creat()
搞定繼承,比class
簡潔清晰的多
4七、什麼是面向對象編程及面向過程編程,它們的異同和優缺點
- 面向過程就是分析出解決問題所須要的步驟,而後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就能夠了
- 面向對象是把構成問題事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘某個事物在整個解決問題的步驟中的行爲
- 面向對象是以功能來劃分問題,而不是步驟
4八、面向對象編程思想
- 基本思想是使用對象,類,繼承,封裝等基本概念來進行程序設計
- 優勢
- 易維護
- 採用面向對象思想設計的結構,可讀性高,因爲繼承的存在,即便改變需求,那麼維護也只是在局部模塊,因此維護起來是很是方便和較低成本的
- 易擴展
- 開發工做的重用性、繼承性高,下降重複工做量。
- 縮短了開發週期
- 易維護
4九、對web標準、可用性、可訪問性的理解
- 可用性(Usability):產品是否容易上手,用戶可否完成任務,效率如何,以及這過程當中用戶的主觀感覺可好,是從用戶的角度來看產品的質量。可用性好意味着產品質量高,是企業的核心競爭力
- 可訪問性(Accessibility):Web內容對於殘障用戶的可閱讀和可理解性
- 可維護性(Maintainability):通常包含兩個層次,一是當系統出現問題時,快速定位並解決問題的成本,成本低則可維護性好。二是代碼是否容易被人理解,是否容易修改和加強功能。
$編程題
一、寫一個通用的事件偵聽器函數
二、如何判斷一個對象是否爲數組
三、冒泡排序
- 每次比較相鄰的兩個數,若是後一個比前一個小,換位置
四、快速排序
- 採用二分法,取出中間數,數組每次和中間數比較,小的放到左邊,大的放到右邊
五、編寫一個方法 求一個字符串的字節長度
- 假設:一個英文字符佔用一個字節,一箇中文字符佔用兩個字節
六、bind的用法,以及如何實現bind的函數和須要注意的點
bind
的做用與call
和apply
相同,區別是call
和apply
是當即調用函數,而bind
是返回了一個函數,須要調用的時候再執行。
一個簡單的bind
函數實現以下
$其餘
一、談談你對重構的理解
- 網站重構:在不改變外部行爲的前提下,簡化結構、添加可讀性,而在網站前端保持一致的行爲。也就是說是在不改變UI的狀況下,對網站進行優化, 在擴展的同時保持一致的UI
-
對於傳統的網站來講重構一般是:
-
表格(
table
)佈局改成DIV+CSS
-
使網站前端兼容於現代瀏覽器(針對於不合規範的
CSS
、如對IE6有效的) -
對於移動平臺的優化
-
針對於
SEO
進行優化
-
二、什麼樣的前端代碼是好的
- 高複用低耦合,這樣文件小,好維護,並且好擴展。
三、對前端工程師這個職位是怎麼樣理解的?它的前景會怎麼樣?
-
前端是最貼近用戶的程序員,比後端、數據庫、產品經理、運營、安全都近
- 實現界面交互
- 提高用戶體驗
- 有了Node.js,前端能夠實現服務端的一些事情
-
前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分,甚至更好,
-
與團隊成員,
UI
設計,產品經理的溝通; -
作好的頁面結構,頁面重構和用戶體驗;
四、你以爲前端工程的價值體如今哪
-
爲簡化用戶使用提供技術支持(交互部分)
-
爲多個瀏覽器兼容性提供支持
-
爲提升用戶瀏覽速度(瀏覽器性能)提供支持
-
爲跨平臺或者其餘基於webkit或其餘渲染引擎的應用提供支持
-
爲展現數據提供支持(數據接口)
五、平時如何管理你的項目?
-
先期團隊必須肯定好全局樣式(
globe.css
),編碼模式(utf-8
) 等; -
編寫習慣必須一致(例如都是採用繼承式的寫法,單樣式都寫成一行);
-
標註樣式編寫人,各模塊都及時標註(標註關鍵樣式調用的地方);
-
頁面進行標註(例如 頁面 模塊 開始和結束);
-
CSS
跟HTML
分文件夾並行存放,命名都得統一(例如style.css
); -
JS
分文件夾存放 命名以該JS
功能爲準的英文翻譯。 -
圖片採用整合的
images.png png8
格式文件使用 - 儘可能整合在一塊兒使用方便未來的管理
人事面
- 面試完你還有什麼問題要問的嗎
- 你有什麼愛好?
- 你最大的優勢和缺點是什麼?
- 你爲何會選擇這個行業,職位?
- 你以爲你適合從事這個崗位嗎?
- 你有什麼職業規劃?
- 你對工資有什麼要求?
- 如何看待前端開發?
- 將來三到五年的規劃是怎樣的?
常問
- 自我介紹
- 你的項目中技術難點是什麼?遇到了什麼問題?你是怎麼解決的?
- 你認爲哪一個項目作得最好?
- 最近在看哪些前端方面的書?
- 平時是如何學習前端開發的?
- 你最有成就感的一件事
- 你是怎麼學習前端的