web前端面試題集合

1.XHTML和HTML有什么區(qū)別

  • HTML是一種基本的WEB網(wǎng)頁設(shè)計語言,XHTML是一個基于XML的置標(biāo)語言
    最主要的不同:
  • XHTML 元素必須被正確地嵌套。
  • XHTML 元素必須被關(guān)閉。
  • 標(biāo)簽名必須用小寫字母。
  • XHTML 文檔必須擁有根元素。

2.前端頁面有哪三層構(gòu)成,分別是什么?作用是什么?

  • 結(jié)構(gòu)層 Html :由 HTML 或 XHTML 之類的標(biāo)記語言負(fù)責(zé)創(chuàng)建,僅負(fù)責(zé)語義的表達(dá)。解決了頁面“內(nèi)容是什么”的問題。
  • 表示層 CSS :由CSS負(fù)責(zé)創(chuàng)建,解決了頁面“如何顯示內(nèi)容”的問題。
  • 行為層 js:由腳本負(fù)責(zé)。解決了頁面上“內(nèi)容應(yīng)該如何對事件作出反應(yīng)”的問題。

3.你做的頁面在哪些流覽器測試過?這些瀏覽器的內(nèi)核分別是什么?

  • IE:Trident內(nèi)核
  • Mozilla FireFox:Gecko內(nèi)核
  • Chrome、Safari:Webkit內(nèi)核
  • Opera:Presto內(nèi)核

4.什么是語義化的HTML?

  • 直觀的認(rèn)識標(biāo)簽 對于搜索引擎的抓取有好處,用正確的標(biāo)簽做正確的事情!
  • html語義化就是讓頁面的內(nèi)容結(jié)構(gòu)化,便于對瀏覽器、搜索引擎解析;
  • 在沒有樣式CCS情況下也以一種文檔格式顯示,并且是容易閱讀的。
  • 搜索引擎的爬蟲依賴于標(biāo)記來確定上下文和各個關(guān)鍵字的權(quán)重,利于 SEO。
  • 使閱讀源代碼的人對網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護(hù)理解。

5.HTML5 為什么只需要寫 !DOCTYPE HTML?

  • HTML5 不基于 SGML,因此不需要對DTD進(jìn)行引用,但是需要doctype來規(guī)范瀏覽器的行為(讓瀏覽器按照它們應(yīng)該的方式來運(yùn)行);
  • 而HTML4.01基于SGML,所以需要對DTD進(jìn)行引用,才能告知瀏覽器文檔所使用的文檔類型。

6.Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?

  • !DOCTYPE聲明位于位于HTML文檔中的第一行,處于html 標(biāo)簽之前。告知瀏覽器的解析器用什么文檔標(biāo)準(zhǔn)解析這個文檔。DOCTYPE不存在或格式不正確會導(dǎo)致文檔以兼容模式呈現(xiàn)。
  • 標(biāo)準(zhǔn)模式的排版 和JS運(yùn)作模式都是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行。在兼容模式中,頁面以寬松的向后兼容的方式顯示,模擬老式瀏覽器的行為以防止站點(diǎn)無法工作。

7.html5有哪些新特性、移除了那些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分 HTML 和HTML5?

  • HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。
  • 繪畫 canvas
  • 用于媒介回放的 video 和 audio 元素
  • 本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失;
  • sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動刪除
  • 語意化更好的內(nèi)容元素,比如 article、footer、header、nav、section
  • 表單控件,calendar、date、time、email、url、search
  • 新的技術(shù)webworker, websockt, Geolocation
    移除的元素
  • 純表現(xiàn)的元素:basefont,big,center,font, s,strike,tt,u;
  • 對可用性產(chǎn)生負(fù)面影響的元素:frame,frameset,noframes;
    支持HTML5新標(biāo)簽:
  • IE8/IE7/IE6支持通過document.createElement方法產(chǎn)生的標(biāo)簽,
  • 可以利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽,
  • 瀏覽器支持新標(biāo)簽后,還需要添加標(biāo)簽?zāi)J(rèn)的樣式:

8.請描述一下 cookies,sessionStorage 和 localStorage 的區(qū)別?

  • cookie在瀏覽器和服務(wù)器間來回傳遞。 sessionStorage和localStorage不會
  • sessionStorage和localStorage的存儲空間更大;
  • sessionStorage和localStorage有更多豐富易用的接口;
  • sessionStorage和localStorage各自獨(dú)立的存儲空間;

9.如何實現(xiàn)瀏覽器內(nèi)多個標(biāo)簽頁之間的通信?

  • 調(diào)用localstorge、cookies等本地存儲方式

CSS面試題

1.簡要說一下CSS的元素分類

  • 塊級元素:div,p,h1,form,ul,li;
  • 行內(nèi)元素 : span>,a,label,input,img,strong,em;

2.CSS隱藏元素的幾種方法(至少說出三種)

  • Opacity:元素本身依然占據(jù)它自己的位置并對網(wǎng)頁的布局起作用。它也將響應(yīng)用戶交互;
  • Visibility:與 opacity 唯一不同的是它不會響應(yīng)任何用戶交互。此外,元素在讀屏軟件中也會被隱藏;
  • Display:display 設(shè)為 none 任何對該元素直接打用戶交互操作都不可能生效。此外,讀屏軟件也不會讀到元素的內(nèi)容。這種方式產(chǎn)生的效果就像元素完全不存在;
  • Position:不會影響布局,能讓元素保持可以操作;
  • Clip-path:clip-path 屬性還沒有在 IE 或者 Edge 下被完全支持。如果要在你的 -
  • clip-path 中使用外部的 SVG 文件,瀏覽器支持度還要低;

3.CSS清除浮動的幾種方法(至少兩種)

  • 使用帶clear屬性的空元素
  • 使用CSS的overflow屬性;
  • 使用CSS的:after偽元素;
  • 使用鄰接元素處理;

4.CSS居中(包括水平居中和垂直居中)

內(nèi)聯(lián)元素居中方案

水平居中設(shè)置:

  • 1.行內(nèi)元素:設(shè)置 text-align:center;
  • 2.Flex布局:設(shè)置display:flex;justify-content:center;(靈活運(yùn)用,支持Chroime,F(xiàn)irefox,IE9+)

垂直居中設(shè)置:

  • 1.父元素高度確定的單行文本(內(nèi)聯(lián)元素):設(shè)置 height = line-height;
  • 2.父元素高度確定的多行文本(內(nèi)聯(lián)元素)
    • a:插入 table (插入方法和水平居中一樣),然后設(shè)置 vertical-align:middle;
    • b:先設(shè)置 display:table-cell 再設(shè)置 vertical-align:middle;
      塊級元素居中方案

水平居中設(shè)置:

  • 1.定寬塊狀元素:設(shè)置 左右 margin 值為 auto;
  • 2.不定寬塊狀元素
    • a:在元素外加入 table 標(biāo)簽(完整的,包括 table、tbody、tr、td),該元素寫在 td 內(nèi),然后設(shè)置 margin 的值為 auto;
    • b:給該元素設(shè)置 displa:inine 方法;
      c:父元素設(shè)置 position:relative 和 left:50%,子元素設(shè)置 position:relative 和 left:50%;

垂直居中設(shè)置:

  • 使用position:absolute(fixed),設(shè)置left、top、margin-left、margin-top的屬性;
  • 利用position:fixed(absolute)屬性,margin:auto這個必須不要忘記了;
  • 利用display:table-cell屬性使內(nèi)容垂直居中;
  • 使用css3的新屬性transform:translate(x,y)屬性;
  • 使用:before元素;

5.寫出幾種IE6 BUG的解決方法

  • 雙邊距BUG float引起的 使用display
  • 3像素問題 使用float引起的 使用dislpay:inline -3px
  • 超鏈接hover 點(diǎn)擊后失效 使用正確的書寫順序 link visited hover active
  • Ie z-index問題 給父級添加position:relative
  • Png 透明 使用js代碼 改
  • Min-height 最小高度 !Important 解決’
  • select 在ie6下遮蓋 使用iframe嵌套
  • 為什么沒有辦法定義1px左右的寬度容器(IE6默認(rèn)的行高造成的,使用-
    over:hidden,zoom:0.08 line-height:1px)

6.對于SASS或是Less的了解程度?喜歡那個?

  • LESS和Sass之間的主要區(qū)別是他們的實現(xiàn)方式不同,LESS是基于JavaScript運(yùn)行,所以LESS是在客戶端處理。
  • Sass是基于Ruby的,是在服務(wù)器端處理的。很多開發(fā)者不選擇LESS是因為LESS輸出修改過的CSS到瀏覽器需要依賴于Javascript引擎,而Javascript引擎需要額外的時間來處理代碼。

7.Bootstrap了解程度

  • Bootstrap,來自 Twitter,是目前很受歡迎的前端框架。
  • Bootstrap 是基于 HTML、CSS、JavaScript 的,它簡潔靈活,使得 Web 開發(fā)更加快捷。
  • 它由Twitter的設(shè)計師Mark Otto和Jacob Thornton合作開發(fā),是一個CSS/HTML框架。Bootstrap提供了優(yōu)雅的HTML和CSS規(guī)范,它即是由動態(tài)CSS語言Less寫成

8.頁面導(dǎo)入樣式時,使用link和@import有什么區(qū)別?

  • link屬于XHTML標(biāo)簽,除了加載CSS外,還能用于定義RSS, 定義rel連接屬性等作用;而@import是CSS提供的,只能用于加載CSS;
  • 頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;
  • import是CSS2.1 提出的,只在IE5以上才能被識別,而link是XHTML標(biāo)簽,無兼容問題;

9.介紹一下CSS的盒子模型?

  • 有兩種, IE 盒子模型、標(biāo)準(zhǔn) W3C 盒子模型;IE的content部分包含了 border 和 pading;
  • 盒模型: 內(nèi)容(content)、填充(padding)、邊界(margin)、 邊框(border).

10.CSS 選擇符有哪些?哪些屬性可以繼承?優(yōu)先級算法如何計算? CSS3新增偽類有那些?

  • id選擇器( # myid)
  • 類選擇器(.myclassname)
  • 標(biāo)簽選擇器(div, h1, p)
  • 相鄰選擇器(h1 + p)
  • 子選擇器(ul > li)
  • 后代選擇器(li a)
  • 通配符選擇器( * )
  • 屬性選擇器(a[rel = “external”])
  • 偽類選擇器(a: hover, li: nth – child)
  • 可繼承的樣式: font-size font-family color, UL LI DL DD DT;
  • 不可繼承的樣式:border padding margin width height ;
  • 優(yōu)先級就近原則,同權(quán)重情況下樣式定義最近者為準(zhǔn);

優(yōu)先級為:(JavaScript)

  • !important > id > class > tag
  • important 比 內(nèi)聯(lián)優(yōu)先級高

11.CSS3有哪些新特性?

  • CSS3實現(xiàn)圓角(border-radius:8px),陰影(box-shadow:10px),
  • 對文字加特效(text-shadow、),線性漸變(gradient),旋轉(zhuǎn)(transform)
  • transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) -
    skew(-9deg,0deg);//旋轉(zhuǎn),縮放,定位,傾斜
  • 增加了更多的CSS選擇器 多背景 rgba

JavaScript面試題

0.JavaScript的數(shù)據(jù)類型都有什么?

  • 基本數(shù)據(jù)類型:String,boolean,Number,Undefined, Null

  • 引用數(shù)據(jù)類型:Object(Array,Date,RegExp,Function)
    那么問題來了,如何判斷某變量是否為數(shù)組數(shù)據(jù)類型?

  • 方法一.判斷其是否具有“數(shù)組性質(zhì)”,如slice()方法??勺约航o該變量定義slice方法,故有時會失效

  • 方法二.obj instanceof Array 在某些IE版本中不正確

  • 方法三.方法一二皆有漏洞,在ECMA Script5中定義了新方法Array.isArray(), 保證其兼容性,最好的方法如下:

1.javascript的typeof返回哪些數(shù)據(jù)類型

  • Object
  • number
  • function
  • boolean
  • underfind

2.例舉3種強(qiáng)制類型轉(zhuǎn)換和2種隱式類型轉(zhuǎn)換?

  • 強(qiáng)制(parseInt,parseFloat,number)
  • 隱式(== – ===);

3.數(shù)組方法pop() push() unshift() shift()

  • Push()尾部添加
  • pop()尾部刪除
  • Unshift()頭部添加
  • shift()頭部刪除

4.ajax請求的時候get 和post方式的區(qū)別?

  • 一個在url后面 一個放在虛擬載體里面
  • 有大小限制
  • 安全問題
  • 應(yīng)用不同 一個是論壇等只需要請求的,一個是類似修改密碼的;

5.call和apply的區(qū)別

  • Object.call(this,obj1,obj2,obj3)
  • Object.apply(this,arguments)

6.ajax請求時,如何解釋json數(shù)據(jù)

  • 使用eval parse,鑒于安全性考慮 使用parse更靠譜;

7.事件委托是什么

  • 讓利用事件冒泡的原理,讓自己的所觸發(fā)的事件,讓他的父元素代替執(zhí)行!

8.閉包是什么,有什么特性,對頁面有什么影響?簡要介紹你理解的閉包

  • 閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。

9.添加 刪除 替換 插入到某個接點(diǎn)的方法

  • obj.appendChidl()
  • obj.innersetBefore
  • obj.replaceChild
  • obj.removeChild

10.說一下什么是javascript的同源策略?

  • 一段腳本只能讀取來自于同一來源的窗口和文檔的屬性,這里的同一來源指的是主機(jī)名、協(xié)議和端口號的組合

11.編寫一個b繼承a的方法;

function A(name){
    this.name = name;
    this.sayHello = function(){alert(this.name+” say Hello!”);};
}
function B(name,id){
    this.temp = A;
    this.temp(name);        //相當(dāng)于new A();
    delete this.temp;       
     this.id = id;   
    this.checkId = function(ID){alert(this.id==ID)};
}

12.如何阻止事件冒泡和默認(rèn)事件

function stopBubble(e)
{
    if (e && e.stopPropagation)
        e.stopPropagation()
    else
        window.event.cancelBubble=true
}
return false

13.下面程序執(zhí)行后彈出什么樣的結(jié)果?

function fn() {
    this.a = 0;
    this.b = function() {
        alert(this.a)
    }
}
fn.prototype = {
    b: function() {
        this.a = 20;
        alert(this.a);
    },
    c: function() {
        this.a = 30;
        alert(this.a);
    }
}
var myfn = new fn();
myfn.b();
myfn.c();

14.談?wù)凾his對象的理解。

  • this是js的一個關(guān)鍵字,隨著函數(shù)使用場合不同,this的值會發(fā)生變化。
  • 但是有一個總原則,那就是this指的是調(diào)用函數(shù)的那個對象。
  • this一般情況下:是全局對象Global。 作為方法調(diào)用,那么this就是指這個對象

15.下面程序的結(jié)果

function fun(n,o) {
  console.log(o)
  return {
    fun:function(m){
      return fun(m,n);
    }
  };
}
var a = fun(0);  a.fun(1);  a.fun(2);  a.fun(3);
var b = fun(0).fun(1).fun(2).fun(3);
var c = fun(0).fun(1);  c.fun(2);  c.fun(3);

//答案:

//a: undefined,0,0,0
//b: undefined,0,1,2
//c: undefined,0,1,1

16.下面程序的輸出結(jié)果


var name = 'World!';
(function () {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

17.了解Node么?Node的使用場景都有哪些?

  • 高并發(fā)、
  • 聊天、
  • 實時消息推送

18.介紹下你最常用的一款框架

  • jquery,rn,angular等;

19.對于前端自動化構(gòu)建工具有了解嗎?簡單介紹一下

  • Gulp,Grunt等;

20.介紹一下你了解的后端語言以及掌握程度

  • python 等

其它

1.對Node的優(yōu)點(diǎn)和缺點(diǎn)提出了自己的看法?

  • (優(yōu)點(diǎn))
    因為Node是基于事件驅(qū)動和無阻塞的,所以非常適合處理并發(fā)請求,
    因此構(gòu)建在Node上的代理服務(wù)器相比其他技術(shù)實現(xiàn)(如Ruby)的服務(wù)器表現(xiàn)要好得多。
    此外,與Node代理服務(wù)器交互的客戶端代碼是由javascript語言編寫的,
    因此客戶端和服務(wù)器端都用同一種語言編寫,這是非常美妙的事情。
  • (缺點(diǎn))
    Node是一個相對新的開源項目,所以不太穩(wěn)定,它總是一直在變,
    而且缺少足夠多的第三方庫支持??雌饋?,就像是Ruby/Rails當(dāng)年的樣子。

2.你有哪些性能優(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é)點(diǎn)查找的結(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)化”的。

3.http狀態(tài)碼有那些?分別代表是什么意思?

  • 100-199 用于指定客戶端應(yīng)相應(yīng)的某些動作。
  • 200-299 用于表示請求成功。
  • 300-399 用于已經(jīng)移動的文件并且常被包含在定位頭信息中指定新的地址信息。
  • 400-499 用于指出客戶端的錯誤。400 1、語義有誤,當(dāng)前請求無法被服務(wù)器理解。401 當(dāng)前請求需要用戶驗證 403 服務(wù)器已經(jīng)理解請求,但是拒絕執(zhí)行它。
  • 500-599 用于支持服務(wù)器錯誤。 503 – 服務(wù)不可用

4.一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發(fā)生了什么?(流程說的越詳細(xì)越好)

  • 查找瀏覽器緩存
  • DNS解析、查找該域名對應(yīng)的IP地址、重定向(301)、發(fā)出第二個GET請求
  • 進(jìn)行HTTP協(xié)議會話
  • 客戶端發(fā)送報頭(請求報頭)
  • 文檔開始下載
  • 文檔樹建立,根據(jù)標(biāo)記請求所需指定MIME類型的文件
  • 文件顯示
    瀏覽器這邊做的工作大致分為以下幾步:
  • 加載:根據(jù)請求的URL進(jìn)行域名解析,向服務(wù)器發(fā)起請求,接收文件(HTML、JS、CSS、圖象等)。
  • 解析:對加載到的資源(HTML、JS、CSS等)進(jìn)行語法解析,建議相應(yīng)的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(比如HTML的DOM樹,JS的(對象)屬性表,CSS的樣式規(guī)則等等)

5.你常用的開發(fā)工具是什么,為什么?

Sublime,Atom,Nodepad++;pycharm

6.說說最近最流行的一些東西吧?常去哪些網(wǎng)站?

  • Node.js、MVVM、React-native,Angular,Weex等
    CSDN,Segmentfault,
  • 博客園,掘金,Stackoverflow,伯樂在線等

7.介紹下你的項目(如果有的話)?并說一下在做這個項目中運(yùn)用的技術(shù)以及遇到的難題是如何解決的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,155評論 1 92
  • 第一部分HTML&CSS整理答案1.什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HTML5...
    Programmer客棧閱讀 2,102評論 0 12
  • ?前端面試題匯總 一、HTML和CSS 21 你做的頁面在哪些流覽器測試過?這些瀏覽器的內(nèi)核分別是什么? ...
    Simon_s閱讀 2,374評論 0 8
  • 請參看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,771評論 2 19
  • 今晚菠蘿蜜有點(diǎn)流鼻涕,睡覺前喝奶鼻塞比較厲害,后來摸著額頭有些熱,量體溫38,我叫爸爸拿了上次開的一種藥喂給她吃,...
    心想事成_3376閱讀 212評論 0 0

友情鏈接更多精彩內(nèi)容