前端面試題--解答


2015前端面試頻率題

 
一個面試大神總結的面試題,拿來學習下。
 
三大類:HTML,CSS,Javascript(jquery)

 

HTML:
 
1.  什么是語義化的HTML?有何意義?為什么要做到語義化?(高頻率考題)

a、什么是語義化的HTML?

語義化的HTML就是寫出的HTML代碼,符合內容的結構化(內容語義化),選擇合適的標簽(代碼語義化),能夠便於開發者閱讀和寫出更優雅的代碼的同時讓瀏覽器的爬蟲和機器很好地解析。

b、為什么要做到語義化?

1.有利於SEO,有利於搜索引擎爬蟲更好的理解我們的網頁,從而獲取更多的有效信息,提升網頁的權重。

2.在沒有CSS的時候能夠清晰的看出網頁的結構,增強可讀性。

3.便於團隊開發和維護,語義化的HTML可以讓開發者更容易的看明白,從而提高團隊的效率和協調能力。

4.支持多終端設備的瀏覽器渲染。

 

2.  行內元素和塊元素分別有哪些?(高頻率)
 
   塊級元素:div  , p  , form,   ul,  li ,  ol, dl,    form,   address,  fieldset,  hr, menu,  table
     行內元素:span,   strong,   em,   br,  img ,  input,  label,  select,  textarea,  cite,  
 
 
3.  嚴格模式與混雜模式的區分?如何觸發這兩種模式?(高頻率)
 
區分DOCTYPE(是Document Type文檔類型的簡寫)是一組機器可讀的規則,它們指示(X)HTML文檔中允許有什么,不允許有什么,DOCTYPE正是用來告訴瀏覽器使用哪種DTD,一般放在(X)HTML文檔開頭聲明)用以告訴其他人這個文檔的類型風格。

區別:嚴格模式是瀏覽器根據web標准去解析頁面,是一種要求嚴格的DTD,不允許使用任何表現層的語法,如<br/>,混雜模式則是一種向后兼容的解析方法。
觸發:根據不同的DTD觸發,如果沒有聲明,那么默認為混雜模式。
 
4.  Doctype 是什么?有啥作用
 
  DOCTYPE是document type(文檔類型)的簡寫,用來說明你用的XHTML或者HTML是什么版本。
 
5.  HTML與XHTML的區別

1、XHTML元素必須被正確地嵌套

2、XHTML 元素必須被關閉,空標簽也必須被關閉。如<br/>

3、XHTML 元素必須小寫

4、XHTML 文檔必須擁有一個根元素

5、XHTML屬性名稱必須小寫,屬性值必須加引號,屬性不能簡寫。如:<input checked="checked" />
6、XHTML用 id 屬性代替 name 屬性。

  注意:應該在 "/" 符號前添加一個額外的空格,以使你的 XHTML 與當今的瀏覽器相兼容

  7、語言屬性(lang)lang 屬性應用於幾乎所有的 XHTML 元素。它定義元素內部的內容的所用語言的類型。如果在某元素中使用 lang 屬性,就必須添加額外的 xml:lang,  像這樣:<div lang="no" xml:lang="no">Heia Norge!</div>

 

6.  HTML5以什么標簽開頭?
 
  HTML5的網頁文件開頭是聲明標簽是 <!DOCTYPE html>
  (頁面頭部,不同與<head></head>)
 
7.  Div與span的區別
1、它2個都是用來划分區間但是沒有實際語義的標簽;
2、差別就在於div是塊級元素,不會其他元素在同一行;span是內聯元素~可以與其他元素位於同一行~
 
8.  Img的alt和title有啥區別?各自作用?
  alt:圖片替代文字(IE6會提示)
  title:鼠標提示文字
 
9.  HTML5的離線儲存
  它的優勢在於與平台的無關性,無論你是windows,unix,linux,mac,都可以觀看html5格式的內容。
10. iframe有那些缺點?
*iframe會阻塞主頁面的Onload事件;
*iframe和主頁面共享連接池,而瀏覽器對相同域的連接有限制,所以會影響頁面的並行加載。
*SEO不利,對爬蟲不友好。

 

CSS:
1. CSS盒模型原理(高頻率)
 
  CSS 框模型 (Box Model) 規定了元素框處理元素內容、 內邊距邊框 和  外邊距 的方式。
 
2. CSS的導入方式:import與link方式的區別?優缺點?(高頻率)

  兩者都是外部引用CSS的方式,但是存在一定的區別:

  區別1:link是XHTML標簽,除了加載CSS外,還可以定義RSS等其他事務;@import屬於CSS范疇,只能加載CSS。

  區別2:link引用CSS時,在頁面載入時同時加載;@import需要頁面網頁完全載入以后加載。

  區別3:link是XHTML標簽,無兼容問題;@import是在CSS2.1提出的,低版本的瀏覽器不支持。

  區別4:ink支持使用Javascript控制DOM去改變樣式;而@import不支持。

 

3. CSS的優先級?內聯和important哪個優先級高?(高頻率)
 
  id選擇器 值:100
  類選擇器 值:10
  標簽選擇器: 1
 
4. 盒子垂直居中方法(高頻率)
 
  position: absolute;
   left:50%;
  top:50%; 
  width:400px;
  height:400px;
   margin-left:-200px;
  margin-top:-200px;
 
5. 浮動元素清除浮動方法(高頻率)
   四種方法:
  1、使用空標簽清除浮動
  2、使用overflow屬性。(overflow:auto;zoom:1″用於兼容IE6)
  3、使用after偽對象清除浮動。 該方法只適用於非IE瀏覽器 。
  4、浮動外部元素,float-in-float。這種方法很簡單,就是把“#outer”元素也進行浮動(向左或者向右)。
 
6. 常見兼容性問題(高頻率)
  

浮動:

1.雙倍邊距bug        塊 浮動 橫向margin         display:inline 

2.li本身沒浮動內容浮動 ie6 li 內容浮動            給li加浮動     li加vertical-alian

其實就是浮動塊狀元素前面不能有內聯文本的出現

 

ie6 下,下margin消失

當一行子元素占有的寬度之和和父級的寬度相差超過3px,或者有不滿行狀態的時候最有一行的子元素的下margin值就會失效、

 

ie6下文字溢出bug

原因 1.浮動元素前面有注釋 或者內聯元素

內聯元素越多,溢出越多

子元素的寬度和父級的寬度相差小於3px的時候

解決辦法用div包起來 或者把父級元素寬度調大

 
7. CSS的定位屬性,各自區別,應用場景
 
static(靜態) 沒有特別的設定,遵循基本的定位規定,不能通過z-index進行層次分級。
relative(相對定位) 對象不可層疊、不脫離文檔流,參考自身靜態位置通過 top,bottom,left,right 定位,並且可以通過z-index進行層次分級。
absolute(絕對定位) 脫離文檔流,通過 top,bottom,left,right 定位。選取其最近一個最有定位設置的父級對象進行絕對定位,如果對象的父級沒有設置定位屬性,            absolute元素將以body坐標原點進行定位,可以通過z-index進行層次分級。
 fixed(固定定位) 這里所固定的參照對像是 可視窗口而並非是body或是父級元素。可通過z-index進行層次分級。
 
8. 談談CSS3 Media Queries
 
 
9. Diplay:none與visibility:hidden的區別(高頻率)
 
visibility:hidden隱藏,但在瀏覽時保留位置;
display:none視為不存在,且不加載!
 
10.談談CSS hack
 
  • 各游覽器常用兼容標記一覽表:

  • 標記 IE6 IE7 IE8 FF Opera Sarari
    [*+><] X X X X
    _ X X X X X
    \9 X X X
    \0 X X X X
    @media screen and (-webkit-min-device-pixel-ratio:0){.bb {}} X X X X X
    .bb , x:-moz-any-link, x:default X X √(ff3.5及以下) X X
    @-moz-document url-prefix(){.bb{}} X X X X X
    @media all and (min-width: 0px){.bb {}} X X X
    * +html .bb {} X X X X X
    游覽器內核 Trident Trident Trident Gecko Presto WebKit
 
11.CSS中em和px的關系和區別
 
1. em的值並不是固定的;
2. em會繼承父級元素的字體大小。 
  12px = 1.2em
 
 
12.。。。。。

 

Javascript:
1. 閉包的理解,javascript的作用域(高頻率)
 
 a、閉包就是能夠讀取其他函數內部變量的函數。
 b、在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。

閉包的用途

閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函數內部的變量,另一個就是讓這些變量的值始終保持在內存中。 

 

  JS中作用域的概念:

  表示變量或函數起作用的區域,指代了它們在什么樣的上下文中執行,亦即上下文執行環境。Javascript的作用域只有兩種:全局作用域和本地作用域,本地作用域是按照函  數來區分的。  
 
 
2. Ajax的跨域問題和緩存原理?同步與異步的區別?(高頻率)
 
 
3. 數組的增刪查找(高頻率)
http://blog.csdn.net/lxp1021/article/details/6632678
 
4. DOM節點的創建、移動、復制、刪除、查找。(高頻率)
 

(1)創建新節點

      createDocumentFragment()    //創建一個DOM片段

      createElement_x_x()   //創建一個具體的元素

      createTextNode()   //創建一個文本節點

(2)添加、移除、替換、插入

      appendChild()

      removeChild()

      replaceChild()

      insertBefore()

(3)查找

      getElementsByTagName()    //通過標簽名稱

      getElementsByName()    //通過元素的Name屬性的值

      getElementById()    //通過元素Id,唯一性

 

 

1.創建元素節點
document.createElement_x_x() 方法 用於創建元素,接受一個參數,即要創建元素的標簽名,返回創建的元素節點

1 var div = document.createElement_x_x("div"); //創建一個div元素
2 div.id = "myDiv"; //設置div的id
3 div.className = "box"; //設置div的class

創建元素后還要把元素添加到文檔樹中

2.添加元素節點
appendChild() 方法 用於向childNodes列表的末尾添加一個節點,返回要添加的元素節點

1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var li = document.createElement_x_x("li"); //創建li
3 li.innerHTML = "項目四"; //向li內添加文本
4 ul.appendChild(li); //把li 添加到ul子節點的末尾

 


appendChild() 方法還可以添加已經存在的元素,會將元素從原來的位置移到新的位置
1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 ul.appendChild(ul.firstChild); //把ul的第一個元素節點移到ul子節點的末尾

 

insertBefore() 方法,如果不是在末尾插入節點,而是想放在特定的位置上,用這個方法,該方法接受2個參數,第一個是要插入的節點,第二個是參照節點,返回要添加的元素節點

1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var li = document.createElement_x_x("li"); //創建li
3 li.innerHTML= "項目四"; //向li內添加文本
4 ul.insertBefore(li,ul.firstChild); //把li添加到ul的第一個子節點前
 
1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var li = document.createElement_x_x("li"); //創建li
3 li.innerHTML= "項目四"; //向li內添加文本
4 ul.insertBefore(li,ul.lastChild); //把li添加到ul的子節點末尾
 
1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var li = document.createElement_x_x("li"); //創建li
3 li.innerHTML= "項目四"; //向li內添加文本
4 var lis = ul.getElementsByTagName_r("li") //獲取ul中所有li的集合
5 ul.insertBefore(li,lis[1]);     //把li添加到ul中的第二個li節點前

添加后:

 

3.移除元素節點
removeChild() 方法,用於移除節點,接受一個參數,即要移除的節點,返回被移除的節點,注意被移除的節點仍然在文檔中,不過文檔中已沒有其位置了

1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var fromFirstChild = ul.removeChild(ul.firstChild); //移除ul第一個子節點
 
1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var lis = ul.getElementsByTagName_r("li") //獲取ul中所有li的集合
3 ul.removeChild(lis[0]);       //移除第一個li,與上面不同,要考慮瀏覽器之間的差異

4.替換元素節點
replaceChild() 方法,用於替換節點,接受兩個參數,第一參數是要插入的節點,第二個是要替換的節點,返回被替換的節點

1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var fromFirstChild = ul.replaceChild(ul.firstChild); //替換ul第一個子節點
 
1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul;
2 var li = document.createElement_x_x("li"); //創建li
3 li.innerHTML= "項目四"; //向li內添加文本
4 var lis = ul.getElementsByTagName_r("li") //獲取ul中所有li的集合
5 var returnNode = ul.replaceChild(li,lis[1]); //用創建的li替換原來的第二個li

5.復制節點
cloneNode() 方法,用於復制節點, 接受一個布爾值參數, true 表示深復制(復制節點及其所有子節點), false 表示淺復制(復制節點本身,不復制子節點)

1 var ul = document.getElementByIdx_xx_x("myList"); //獲得ul
2 var deepList = ul.cloneNode(true); //深復制
3 var shallowList = ul.cloneNode(false); //淺復制
 
5. SetTimeout與setInterval區別
 
    因為setTimeout(表達式,延時時間)在執行時,是在載入后延遲指定時間后,去執行一次表達式,記住,次數是一次 
    而setInterval(表達式,交互時間)則不一樣,它從載入后,每隔指定的時間就執行一次表達式 
 
 
6. 面向對象編程:b怎么繼承a
 
 
7. 編寫一個JavaScript函數 parseQueryString,它的用途是把URL參數解析為一個對象
varobj = parseQueryString(url);
alert(obj.key0)  // 輸出0
 
 
8. JS關鍵字與保留字的選擇:parent,class,void,main。
 
 
9. ajax屬於javascript?
 
  js是語言, ajax是javascript的一種應用, 兩者沒有比較性.
 
10.Var a = ‘abc def ghi’,把每三個字中的首字母轉為大寫。
name = 'aaa bbb ccc';
uw=name.replace(/\b\w+\b/g, function(word){
  return word.substring(0,1).toUpperCase()+word.substring(1);}
  );
 
11.Ajax的執行過程
 
 
12.JSON與XML的區別?優缺點?
  http://www.cnblogs.com/SanMaoSpace/p/3139186.html
 
13.寫一個tab菜單切換程序
  http://blog.csdn.net/sx1989827/article/details/3814006
 
14.寫一個點擊input能夠彈出當前input索引的函數。
 
 
15.==與===的區別
 
  1、對於string,number等基礎類型,==和===是有區別的
1)不同類型間比較,==之比較“轉化成同一類型后的值”看“值”是否相等,===如果類型不同,其結果就是不等
2)同類型比較,直接進行“值”比較,兩者結果一樣
 
2、對於Array,Object等高級類型,==和===是沒有區別的
進行“指針地址”比較
 
3、基礎類型與高級類型,==和===是有區別的
1)對於==,將高級轉化為基礎類型,進行“值”比較
2)因為類型不同,===結果為false
 
http://blog.csdn.net/wxdzxl/article/details/8502119
 
16.Null與undefined的區別
  http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html
 
17.Js如何實現多重繼承
  http://blog.csdn.net/nengyu/article/details/7591811
 
18.Eval是啥?談談對它的理解
 
 
19.事件、IE與火狐的事件機制有什么區別?
 
 
20.。。。。

 

其他:
1. 對bootstrap的理解(高頻率)
bootstrap就是從一個原始樣本中進行有放回的重復采樣,采樣大小和原始樣本大小相同,采樣次數根據計算量而定。從每個重新樣的樣本中可以計算某個統計量的bootstrap 分布,比如說均值,多個重采樣樣本的均值構成了原始樣本均值的bootstrap分布。在采樣完后需要檢查待研究統計量的bootstrap分布是不是符合正態分布。此外,統計量的bootstrap標准誤等於該統計量bootstrap分布的標准差。
 
2. 網站性能優化的方法(高頻率)
 
1)將css和js文件放在獨立外部文件中引用
2) 使用gzip壓縮網頁內容
3)將CSS放在頁面頂端,JS文件放在頁面底端
4)使JS文件內容最小化
5)盡量減少外部腳本的使用,減少DNS查詢時間

( 文件合並

 文件最小化/文件壓縮

 使用 CDN 托管

 緩存的使用(多個域名來提供緩存)

 其他)

3. 響應式布局(高頻率)
 
 
4. 前端由哪些部分組成(高頻率)
  

a、網頁的結構層(structural layer)由 HTML 或 XHTML 之類的標記語言負責創建。標簽,也就是那些出現在尖括號里的單詞,對網頁內容的語義含義做出了描述,但這些標簽不包含任何關於如何顯示有關內容的信息。例如,P 標簽表達了這樣一種語義:“這是一個文本段。”

b、網頁的表示層(presentation layer) 由 CSS 負責創建。 CSS 對“如何顯示有關內容”的問題做出了回答。

c、網頁的行為層(behavior layer)負責回答“內容應該如何對事件做出反應”這一問題。這是 Javascript 語言和 DOM 主宰的領域。

 
5. W3C標准是啥
W3C標准是一些列標准的集合!在各個企業的基礎上做一定的整合,形成一套標准集,便於推廣和使用!根據網頁主要由三部分組成:結構(Structure)、表現(Presentation)和行為(Behavior)。對應的標准也分三方面:結構化標准語言主要包括XHTML和XML,表現標准語言主要包括CSS,行為標准主要包括對象模型(如W3C DOM)、ECMAScript等。在具體的XHTML標准(如屬性值加引號,不允許單標記,大小寫等等比較多)!語法上比,我們目前使用的html標記較為嚴格!更為具體的信息樓上可以參見百度百科,XHTML等相關術語!也可參見,W3C發布的使用文檔!
 
6. 漸進增強與優雅降級的理解

優雅降級和漸進增強印象中是隨着css3流出來的一個概念。由於低級瀏覽器不支持css3,但css3的效果又太優秀不忍放棄,所以在高級瀏覽中使用css3而低級瀏覽器只保證最基本的功能。咋一看兩個概念差不多,都是在關注不同瀏覽器下的不同體驗,關鍵的區別是他們所側重的內容,以及這種不同造成的工作流程的差異。

 

什么是漸進增強(progressive enhancement)、優雅降級(graceful degradation)呢?

  漸進增強 progressive enhancement:針對低版本瀏覽器進行構建頁面,保證最基本的功能,然后再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗。

  優雅降級 graceful degradation:一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容。

  區別:優雅降級是從復雜的現狀開始,並試圖減少用戶體驗的供給,而漸進增強則是從一個非常基礎的,能夠起作用的版本開始,並不斷擴充,以適應未來環境的需要。降級(功能衰減)意味着往回看;而漸進增強則意味着朝前看,同時保證其根基處於安全地帶。

 

“優雅降級”觀點

“優雅降級”觀點認為應該針對那些最高級、最完善的瀏覽器來設計網站。而將那些被認為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發周期的最后階段,並把測試對象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個版本。

在這種設計范例下,舊版的瀏覽器被認為僅能提供“簡陋卻無妨 (poor, but passable)” 的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由於它們並非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。

 

“漸進增強”觀點

“漸進增強”觀點則認為應關注於內容本身。

內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得“漸進增強”成為一種更為合理的設計范例。這也是它立即被 Yahoo! 所采納並用以構建其“分級式瀏覽器支持 (Graded Browser Support)”策略的原因所在。

 

參考資料:http://stackoverflow.com/questions/2550431/what-is-the-difference-between-progressive-enhancement-and-graceful-degradation

 
7. 為什么利用多個域名來提供網站資源會更有效?
 
除了節約cookie帶寬的因素,另一個重要因素是節約主域名的連接數,從而提高客戶端網絡帶寬的利用率,優化頁面響應。因為老的瀏覽器(IE6是典型),針對同一個域名只允許同時保持兩個HTTP連接。將圖片等資源請求分配到其他域名上,避免了大圖片之類的並不一定重要的內容阻塞住主域名上其他后續資源的連接(比如ajax請求)。
8. http中的404狀態碼是什么意思
  
404:請求的網頁不存在或已刪除(不排除日后該鏈接有效的可能性);
410:請求的網頁不存在(永久);
200:服務器成功返回網頁
302:網址臨時重定向(跳轉
301:網址永久重定向
 
9. 常用的測試工具、開發工具有哪些?
 
  開發:sumline text  、 VIM  、DW
  測試:firebug  、 IEtester 、 
 
10.Jpeg、gif、png格式的優缺點,應用場景
 
  jpg高畫質(圖片)
  gif 色質單一(圖標)
  png 透明
 
11.談談對前端的理解
  1、前端主要包括三門技術html、css及javascript(下稱js),其中以js為主為難。
    2、底層學起,然后框架,然后新技術(h5、css3)
 
12.你認為做前端最需要的品質
 
 
13.你最近看過的文章是什么
 
 
14.有沒有逛技術網站的習慣?請列舉這些網站
 
  w3cfun 、 博客園 、web開發者
 
15.。。。。


免責聲明!

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



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