2019年前端面試題


CSS選擇器有哪些?

http://www.runoob.com/cssref/css-selectors.html

CSS中px、em、rem的區別?

px像素(Pixel)。相對長度單位。像素px是相對於顯示器屏幕分辨率而言的。(引自CSS2.0手冊)

PX特點

1. IE無法調整那些使用px作為單位的字體大小;

2. 國外的大部分網站能夠調整的原因在於其使用了em或rem作為字體單位;

3. Firefox能夠調整px和em,rem,但是96%以上的中國網民使用IE瀏覽器(或內核)。

em是相對長度單位,相對於當前對象內文本的字體尺寸,如當前對行內文本的字體尺寸未被人為設置,則相對於瀏覽器的默認字體尺寸。(引自CSS2.0手冊)

(任意瀏覽器的默認字體高都是16px。所有未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em,10px=0.625em。為了簡化font-size的換算,需要在css中的body選擇器中聲明Font-size=62.5%,這就使em值變為 16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然后換上em作為單位就行了。)

 

EM特點 

 1. em的值並不是固定的;

 2. em會繼承父級元素的字體大小

所以我們在寫CSS的時候,需要注意兩點:

1. body選擇器中聲明Font-size=62.5%;

2. 將你的原來的px數值除以10,然后換上em作為單位;

3. 重新計算那些被放大的字體的em數值。避免字體大小的重復聲明。

rem是CSS3新增的一個相對單位(root em,根em),這個單位引起了廣泛關注。這個單位與em有什么區別呢?區別在於使用rem為元素設定字體大小時,仍然是相對大小,但相對的只是HTML根元素。這個單位可謂集相對大小和絕對大小的優點於一身,通過它既可以做到只修改根元素就成比例地調整所有字體大小,又可以避免字體大小逐層復合的連鎖反應。目前,除了IE8及更早版本外,所有瀏覽器均已支持rem。對於不支持它的瀏覽器,應對方法也很簡單,就是多寫一個絕對單位的聲明。這些瀏覽器會忽略用rem設定的字體大小

 

addClass、removeClass、toggleClass三者的區別?

.addClass(“className”)方法是用來給指定元素增加類名,也就是說給指定的元素追加樣式; 

.removeClass(“className”)方法是用來給指定的元素移除類名,也就是說給指定元素移除樣式; 

.toggleClass(“className”)方法是用來給脂定的元素增加或移除類名(如果元素的類名存在就移除,如果不存在就增加),也就是說用來給指定的元素進行樣式切換(如果元素存在樣式則去掉,如果不存在則加上樣式)。

 

JS有哪些數據類型?

1,基本類型:字符串類型(string),數字類型(number),布爾類型(boolean)
2,復雜類型:數組類型(array),對象類型(object),函數類型(function),正則類型(regexp)
3,空類型:undefine  和 null

字符串轉數字類型方法:1,加減乘除取余 接字符串 隱士轉換

                                 2,parseInt(字符串)  轉為整數   

                                 3,parseFloat(字符串)  轉為浮點數類型  

                                 4,number  (字符串)

 
數字轉字符串類型方法:1,.toString() 

                                 2.string()  一般用於轉換NAN和 undefine 

                                 3.連接符+號

字符串或數字轉boolean類型: boolean(字符串)  除false NaN 空字符串  數字0  和undefine   其余轉換后都是true

 

談談document.ready和window.onload的區別?

最基本的區別:

1.執行時間

  window.onload必須等到頁面內包括圖片的所有元素加載完畢后才能執行。 
  $(document).ready()是DOM結構繪制完畢后就執行,不必等到加載完畢。

2.編寫個數不同

  window.onload不能同時編寫多個,如果有多個window.onload方法,只會執行一個 
  $(document).ready()可以同時編寫多個,並且都可以得到執行

3.簡化寫法

  window.onload沒有簡化寫法 
  $(document).ready(function(){})可以簡寫成$(function(){});

jQuery中.bind() .live() .delegate() .on()區別?

https://www.cnblogs.com/chenlogin/p/5105710.html

 

setTimeout與setInterval的主要區別?

setTimeout()方法只運行一次,也就是說當達到設定的時間后就出發運行指定的代碼,運行完后就結束了,如果還想再次執行同樣的函數,可以在函數體內再次調用setTimeout(),可以達到循環調用的效果。

setInterval()是循環執行的,即每達到指定的時間間隔就執行相應的函數或者表達式,是真正的定時器。

 get和post的區別?

get把請求的數據放在url上,即HTTP協議頭上,其格式為: 以?分割URL和傳輸數據,參數之間以&相連。 數據如果是英文字母/數字,原樣發送, 如果是空格,轉換為+, 如果是中文/其他字符,則直接把字符串用BASE64加密,及“%”加上“字符串的16進制ASCII碼”。 

post把數據放在HTTP的包體內(requrest body)。

get提交的數據最大是2k(原則上url長度無限制,那么get提交的數據也沒有限制咯?限制實際上取決於瀏覽器,(大多數)瀏覽器通常都會限制url長度在2K個字節,即使(大多數)服務器最多處理64K大小的url。也沒有卵用。)。
post理論上沒有限制。實際上IIS4中最大量為80KB,IIS5中為100KB。

GET產生一個TCP數據包,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據);
POST產生兩個TCP數據包,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

GET在瀏覽器回退時是無害的,POST會再次提交請求。

GET產生的URL地址可以被Bookmark,而POST不可以。

GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。

GET請求只能進行url編碼,而POST支持多種編碼方式。

GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。

GET只接受ASCII字符的參數的數據類型,而POST沒有限制

那么,post那么好為什么還用get?get效率高!。

如何實現瀏覽器內多個標簽頁之間的通信?

 

方法一:localstorge在一個標簽頁里被添加、修改或刪除時,都會觸發一個storage事件,通過在另一個標簽頁里監聽storage事件,即可得到localstorge存儲的值,實現不同標簽頁之間的通信。

方法二:使用cookie+setInterval,將要傳遞的信息存儲在cookie中,每隔一定時間讀取cookie信息,即可隨時獲取要傳遞的信息。

 

 

token、session的區別?

session:session 從字面上講,就是會話。這個就類似於你和一個人交談,你怎么知道當前和你交談的是張三而不是李四呢?對方肯定有某種特征(長相等)表明他就是張三。

session 也是類似的道理,服務器要知道當前發請求給自己的是誰。為了做這種區分,服務器就要給每個客戶端分配不同的“身份標識”,然后客戶端每次向服務器發請求的時候,都帶上這個“身份標識”,服務器就知道這個請求來自於誰了。至於客戶端怎么保存這個“身份標識”,可以有很多種方式,對於瀏覽器客戶端,大家都默認采用 cookie 的方式

服務器使用session把用戶的信息臨時保存在了服務器上,用戶離開網站后session會被銷毀。這種用戶信息存儲方式相對cookie來說更安全,可是session有一個缺陷:如果web服務器做了負載均衡,那么下一個操作請求到了另一台服務器的時候session會丟失。

token:

Token的引入:Token是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼並進行對比,判斷用戶名和密碼正確與否,並作出相應提示,在這樣的背景下,Token便應運而生。

Token的定義:Token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,當第一次登錄后,服務器生成一個Token便將此Token返回給客戶端,以后客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。最簡單的token組成:uid(用戶唯一的身份標識)、time(當前時間的時間戳)、sign(簽名,由token的前幾位+鹽以哈希算法壓縮成一定長的十六進制字符串,可以防止惡意第三方拼接token請求服務器)。

使用Token的目的:Token的目的是為了減輕服務器的壓力,減少頻繁的查詢數據庫,使服務器更加健壯。

 

 cookie,localStorage和sessionStorage的區別?

共同點:都是保存在瀏覽器端、且同源的 
區別: 
1、cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務器間來回傳遞,而sessionStorage和localStorage不會自動把數據發送給服務器,僅在本地保存。cookie數據還有路徑(path)的概念,可以限制cookie只屬於某個路徑下 
2、存儲大小限制也不同,cookie數據不能超過4K,同時因為每次http請求都會攜帶cookie、所以cookie只適合保存很小的數據,如會話標識。sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大 
3、數據有效期不同,sessionStorage:僅在當前瀏覽器窗口關閉之前有效;localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;cookie:只在設置的cookie過期時間之前有效,即使窗口關閉或瀏覽器關閉 
4、作用域不同,sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的 
5、web Storage支持事件通知機制,可以將數據更新的通知發送給監聽者 
6、web Storage的api接口使用更方便

HTTP1.0、HTTP1.1 和 HTTP2.0 的區別?

1、HTTP的歷史

早在 HTTP 建立之初,主要就是為了將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。也是說對於前端來說,我們所寫的HTML頁面將要放在我們的 web 服務器上,用戶端通過瀏覽器訪問url地址來獲取網頁的顯示內容,但是到了 WEB2.0 以來,我們的頁面變得復雜,不僅僅單純的是一些簡單的文字和圖片,同時我們的 HTML 頁面有了 CSS,Javascript,來豐富我們的頁面展示,當 ajax 的出現,我們又多了一種向服務器端獲取數據的方法,這些其實都是基於 HTTP 協議的。同樣到了移動互聯網時代,我們頁面可以跑在手機端瀏覽器里面,但是和 PC 相比,手機端的網絡情況更加復雜,這使得我們開始了不得不對 HTTP 進行深入理解並不斷優化過程中

詳細介紹:https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A

 

http和https的區別?https的原理?

https://www.cnblogs.com/wqhwe/p/5407468.html

WebSerivce與WebAPI的區別

https://www.cnblogs.com/niuniu1985/p/8425709.html

 
前端性能優化方案有哪些
https://www.cnblogs.com/MarcoHan/p/5295398.html
1. 減少 HTTP請求數
(1). 從設計實現層面簡化頁面
(2). 合理設置 HTTP緩存
(3). 資源合並與壓縮
(4). CSS Sprites
(5). Inline Images-->使用 data:  URL scheme的方式將圖片嵌入到頁面或 CSS中,如果不考慮資源管理上的問題的話,不失為一個好辦法。如果是嵌入頁面的話換來的是增大了頁面的體積,而且無法利用瀏覽器緩存。使用在 CSS中的圖片則更為理想一些。
(6). Lazy Load Images(自己對這一塊的內容還是不了解)
2. 將外部腳本置底(將腳本內容在頁面信息內容加載后再加載)
3. 異步執行 inline腳本(其實原理和上面是一樣,保證腳本在頁面內容后面加載。)
4. Lazy Load Javascript(只有在需要加載的時候加載,在一般情況下並不加載信息內容。)
5. 將 CSS放在 HEAD中
6. 異步請求 Callback(就是將一些行為樣式提取出來,慢慢的加載信息的內容)
7. 減少不必要的 HTTP跳轉
8. 避免重復的資源請求--> 這種情況主要是由於疏忽或頁面由多個模塊拼接而成,然后每個模塊中請求了同樣的資源時,會導致資源的重復請求
9. Javascript代碼塊優化
10.CSS選擇符
11. HTML優化
12. Image壓縮
 
各瀏覽器兼容性問題?
https://blog.csdn.net/xustart7720/article/details/73604651/
https://www.cnblogs.com/alongup/p/9018396.html
 
HTML5和傳統HTML的區別?
https://www.cnblogs.com/jerry666/p/5093526.html
 
CSS3新特性有哪些?
https://blog.csdn.net/lxcao/article/details/52797914
 
ES6新特性有哪些?
ECMAScript 6 簡稱 ES6,是 JavaScript 語言的下一代標准,已經在2015年6月正式發布了。它的目標是使得 JavaScript 語言可以用來編寫復雜的大型應用程序,成為企業級開發語言。 
ECMAScript 和 JavaScript 的關系:前者是后者的語法規格,后者是前者的一種實現
ES7、ES8新特性?

ES7在ES6的基礎上主要添加了兩項內容:

  • Array.prototype.includes()方法
  • 求冪運算符(**)

ES8特性:

主要新功能:

  • 異步函數 Async Functions(Brian Terlson)
  • 共享內存和Atomics(Lars T. Hansen)

次要新功能:

  • Object.values / Object.entries(Jordan Harband)
  • String padding(Jordan Harband,Rick Waldron)
  • Object.getOwnPropertyDescriptors() (Jordan Harband,Andrea Giammarchi)
  • 函數參數列表和調用中的尾逗號(Jeff Morrison)

 

對HTML5 websocket的了解?

WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協議。

WebSocket 使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數據。在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。

在 WebSocket API 中,瀏覽器和服務器只需要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數據互相傳送。

現在,很多網站為了實現推送技術,所用的技術都是 Ajax 輪詢。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP請求,然后由服務器返回最新的數據給客戶端的瀏覽器。這種傳統的模式帶來很明顯的缺點,即瀏覽器需要不斷的向服務器發出請求,然而HTTP請求可能包含較長的頭部,其中真正有效的數據可能只是很小的一部分,顯然這樣會浪費很多的帶寬等資源。

HTML5 定義的 WebSocket 協議,能更好的節省服務器資源和帶寬,並且能夠更實時地進行通訊。

瀏覽器通過 JavaScript 向服務器發出建立 WebSocket 連接的請求,連接建立以后,客戶端和服務器端就可以通過 TCP 連接直接交換數據。

當你獲取 Web Socket 連接后,你可以通過 send() 方法來向服務器發送數據,並通過 onmessage 事件來接收服務器返回的數據。

http://www.runoob.com/html/html5-websocket.html

 

React_Flux入門

https://blog.csdn.net/i10630226/article/details/54984299

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM