WEB 面試題

一、HTML 方面

1、三欄布局,左右固定,中間自適應?

左中右三欄寬度自適應于瀏覽器的方法有三個:絕對定位法margin負值法以及自身浮動法

一、絕對定位法:左右兩欄采用絕對定位,分別固定于頁面的左右兩側,中間的主體欄用左右margin值撐開距離。于是實現了三欄自適應布局。

這種方式三個div的順序可以任意改變。

此方法的優點在于:理解容易,上手簡單,受內部元素影響而破壞布局的概率低,就是比較經得起折騰。

缺點在于:如果中間欄含有最小寬度限制,或是含有寬度的內部元素,當瀏覽器寬度小到一定程度,會發生層重疊的情況。

<body>

? ? <div class="main"></div>

? ? <div class="left"></div>

? ? <div class="right"></div>

</body>

.main {

? ? margin: 0 200px;

? ? background: red;

}? ?

.left {

? ? position: absolute;

? ? top: 0;

? ? left: 0;

? ? width: 200px;

? ? height: 100%;

}

.right {

? ? position: absolute;

? ? top: 0;

? ? right: 0;

? ? width: 200px;

? ? height: 100%;

}

二、自身浮動法:左欄左浮動,右欄右浮動,中間欄放最后

這種方式需要注意三個div的順序,左右兩欄的順序不分先后,但是中間一欄必須放在最后。

此方法的優點是:代碼足夠簡潔與高效

缺點是:中間主體存在克星,clear:both屬性。如果要使用此方法,需避免明顯的clear樣式。

<body>

? <div class="left"></div>

? <div class="right"></div>

? <div class="main"></div>

</body>

.main {

margin :0 200px;

}

.left {

float: left;

width: 200px;

height: 100%;

}

.right {

float: right;

width: 200px;

height: 100%;

}

三、margin負值法:左右兩欄均左浮動,左右兩欄采用負的margin值。中間欄被寬度為100%的浮動元素包起來。

左右兩欄div的順序不分先后,但是主體部分div要放前面。

此方法的優點在于:三欄相互關聯,可謂真正意義上的自適應,有一定的抗性——布局不易受內部影響。

缺點在于:相對比較難理解些,上手不容易,代碼相對復雜。出現百分比寬度,過多的負值定位,如果出現布局的bug,排查不易。

<body>

? ? <div class="main">

? ? ? ? <div class="content"></div>

? ? </div>

? ? <div class="left"></div>

? ? <div class="right"></div>

</body>

.main {

? ? float: left;

? width:100%;

}

.content {

? ? margin:0 200px;

? ? height:100%;

}

.left {

? ? float: left;

? ? width: 200px;

? ? margin-left: -100%;

}

.right {

? ? float: left;

? ? width: 200px;

? ? margin-left: -200px;

}




二、CSS 方面

1、css盒模型有哪些及區別?

IE盒子模型box-sizing:border-box;(怪異模式)

W3C標準盒子模型 box-sizing:content-box;(標準模式)默認模式

2、同上問題,怎么相互轉換?


來說說為什么要將標準盒模型轉換為IE盒模型

為什么IE盒模型更容易開發?先來解決這個問題。從上面兩張圖片對比可以看出來,標準的盒模型padding,border是不算在寬度之內的,所以當你比如要在一個容器里并排顯示兩個同樣的盒子。你用標準模型時肯定會這樣設置每個盒子width:50%.但是當你查看時會發現兩個盒子緊緊挨在一起實在是不美觀,所以你又設置padding:0 5%;然而這時候兩個盒子寬度又超過了大容器的總寬度,所以你又得去調整盒子的width:40% 這樣確實可以解決問題,可是這樣你不覺得很不方便嗎。。好了這時候就可以看出IE盒模型的好處了。就將兩個盒子的寬度設置為50%,這時候就算你再怎么去調整padding都會在兩個盒子的內部去調整,不會再影響布局。簡直方便到不要不要的~~


box-sizing 屬性


3、頁面導入樣式時,使用link和@import有什么區別?

1.link屬于HTML標簽,除了加載CSS外,還能用于定義RSS,定義rel連接屬性等作用;而@import是CSS提供,只能加載CSS;

2.頁面被加載的時,link會同時被加載,而@import引用的CSS會等到頁面被加載完再加載;

import是CSS2.1提出的,只在IE5以上才能被識別,而link是HTML標簽,無兼容問題;

4、清楚浮動有哪些方式?比較好的方式是哪一種?

1、父級div定義height。

2、結尾處加空div標簽clear:both。

3、父級div定義偽類:after和zoom。

4、父級div定義overflow:hidden。

5、父級div定義overflow:auto。

6、父級div也浮動,需要定義寬度。

7、父級div定義display:table。

8、結尾處加br標簽clear:both。

比較好的是第3種,好多網站都這樣用

5、CSS實現垂直水平居中?

HTML 結構

<div class="wrapper">

<div class="content"></div>

</div>

CSS 結構

.wrapper {

? ? position: relative;

}

.content {

? ? width: 200px;

? ? height: 200px;

? ? position: absolute;? ? ? ? //父元素需要相對定位

? ? top: 50%;

? ? left: 50%;

? ? margin-top: -100px ;? //二分之一的height,width

? ? margin-left:? -100px;

}

第二種方法

.content {

? ? position: absolute;

? ? left: 50%;

? ? top: 50%;

? ? width: 200px;

? ? height: 200px;

? ? transform: translate(-50%,-50%);

? ? }

6、css選擇符有哪些?哪些屬性可以繼承?

類型選擇符(body)、群組選擇符(h1,h2,h3,span)、包含選擇符(h2 span)、ID選擇符(#id)、Class選擇符(.content)

CLASS屬性,偽類A標簽,列表ul、li、dl、dd、dt可以繼承

優先級算法:

1.優先級就近原則,同權重情況下樣式定義最近者為準;

2.載入樣式以最后載入的定位為準;

3.!important >? id > class > tag?

4.important 比 內聯優先級高,但內聯比 id 要高

7、CSS3新增偽類?

1)? ? ? p:first-of-type? 選擇屬于其父元素的首個 <p> 元素的每個 <p> 元素。

2)? ? ? p:last-of-type? 選擇屬于其父元素的最后 <p> 元素的每個 <p> 元素。

3)? ? ? p:only-of-type? 選擇屬于其父元素唯一的 <p> 元素的每個 <p> 元素。

4)? ? ? p:only-child? ? 選擇屬于其父元素的唯一子元素的每個 <p> 元素。

5)? ? ? p:nth-child(2)? 選擇屬于其父元素的第二個子元素的每個 <p> 元素。

6)? ? ? :enabled :disabled 控制表單控件的禁用狀態。

7)? ? ? :checked? ? ? ? 單選框或復選框被選中。

8、CSS3有哪些新特性?

1)? ? CSS3實現圓角(border-radius),陰影(box-shadow),

2)? ? 對文字加特效(text-shadow、),線性漸變(gradient),旋轉(transform)

3)? ? transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);// 旋轉,縮放,定位,傾斜

4)? ? 增加了更多的CSS選擇器? 多背景 rgba

5)? ? 在CSS3中唯一引入的偽元素是 ::selection.

6)? ? 媒體查詢,多欄布局

7)? ? border-image

9、display:none;與visibility:hidden的區別是什么?

display:none;使用該屬性后,HTML元素(對象)的寬高,高度等各種屬性值都將“丟失”;

visibility:hidden;使用該屬性后,HTML元素(對象)僅僅是在視覺上看不見(完全透明),而它所占據的空間位置仍然存在,也即是說它仍然具有高度,寬度等屬性值。

10、怎么解決邊界重疊問題?

答案

11、display:inline-block的間隙問題和解決辦法?

**原因:**inline-block元素間有空格或是換行,因此產生了間隙。?

答案

三、JS 方面

1、js三種存儲方式區別?

sessionStorage、localStorage、cookier

相同點:都保存在瀏覽器端,同源的

不同點:

①傳遞方式不同

cookie數據始終在同源的http請求中攜帶(即使不需要),即cookie在瀏覽器和服務器間來回傳遞。

sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。

②數據大小不同

cookie數據還有路徑(path)的概念,可以限制cookie只屬于某個路徑下。

存儲大小限制也不同,cookie數據不能超過4k,同時因為每次http請求都會攜帶cookie,所以cookie只適合保存很小的數據,如會話標識。

sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。

③數據有效期不同

sessionStorage:僅在當前瀏覽器窗口關閉前有效,自然也就不可能持久保持;

localStorage:始終有效,窗口或瀏覽器關閉也一直保存,因此用作持久數據;

cookie只在設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉。

④作用域不同

sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個頁面;

localStorage 在所有同源窗口中都是共享的;

cookie也是在所有同源窗口中都是共享的。

Web Storage 支持事件通知機制,可以將數據更新的通知發送給監聽者。

Web Storage 的 api 接口使用更方便。

2、null 與 undefined 區別?

null: Null類型,代表“空值”,代表一個空對象指針,使用typeof運算得到 “object”,所以你可以認為它是一個特殊的對象值。

undefined: Undefined類型,當一個聲明了一個變量未初始化時,得到的就是undefined。

3、this 指向幾種情況?

1:如果一個函數中有this,但是它沒有被上一級的對象所調用,那么this指向的就是window,這里需要說明的是在js的嚴格版中this指向的不是window,但是我們這里不探討嚴格版的問題,你想了解可以自行上網查找。

2:如果一個函數中有this,這個函數有被上一級的對象所調用,那么this指向的就是上一級的對象。

3:如果一個函數中有this,這個函數中包含多個對象,盡管這個函數是被最外層的對象所調用,this指向的也只是它上一級的對象。

4、繼承幾種方式?

答案

5、防止事件冒泡與取消默認事件、事件捕獲?

防止冒泡

w3c的方法是e.stopPropagation(),IE則是使用e.cancelBubble = true

取消默認事件

w3c的方法是e.preventDefault(),IE則是使用e.returnValue = false;

DOM事件流(event? flow )存在三個階段:事件捕獲階段、處于目標階段、事件冒泡階段。

事件捕獲(event? capturing)通俗的理解就是,當鼠標點擊或者觸發dom事件時,瀏覽器會從根節點開始由外到內進行事件傳播,即點擊了子元素,如果父元素通過事件捕獲方式注冊了對應的事件的話,會先觸發父元素綁定的事件。

事件冒泡(dubbed? bubbling)與事件捕獲恰恰相反,事件冒泡順序是由內到外進行事件傳播,直到根節點。

無論是事件捕獲還是事件冒泡,它們都有一個共同的行為,就是事件傳播,它就像一跟引線,只有通過引線才能將綁在引線上的鞭炮(事件監聽器)引爆,試想一下,如果引線不導火了,那鞭炮就只有一響了!!!

dom標準事件流的觸發的先后順序為:先捕獲再冒泡,即當觸發dom事件時,會先進行事件捕獲,捕獲到事件源之后通過事件傳播進行事件冒泡。不同的瀏覽器對此有著不同的實現,IE10及以下不支持捕獲型事件,所以就少了一個事件捕獲階段,IE11、Chrome 、Firefox、Safari等瀏覽器則同時存在。

說到事件冒泡與捕獲就不得不提一下兩個用于事件綁定的方法addEventListener、attachEvent。當然還有其它的事件綁定的方式這里不做介紹。

  addEventListener(event, listener, useCapture)

·參數定義:event---(事件名稱,如click,不帶on),listener---事件監聽函數,useCapture---是否采用事件捕獲進行事件捕捉,

        默認為false,即采用事件冒泡方式

    addEventListener在 IE11、Chrome 、Firefox、Safari等瀏覽器都得到支持。

attachEvent(event,listener)

·參數定義:event---(事件名稱,如onclick,帶on),listener---事件監聽函數。

    attachEvent主要用于IE瀏覽器,并且僅在IE10及以下才支持,IE11已經廢了這個方法了(微軟還是挺識趣的,慢慢向標準靠攏)。

6、什么是Ajax,同步與異步區別,創建一個Ajax?

AJAX是“Asynchronous JavaScript and XML”的縮寫。他是指一種創建交互式網頁應用的網頁開發技術。

同步:阻塞的,瀏覽器向服務器請求數據,服務器比較忙,瀏覽器一直等著(頁面白屏),直到服務器返回數據,瀏覽器才能顯示頁面。

異步:非阻塞的,瀏覽器向服務器請求數據,服務器比較忙,瀏覽器可以自如的干原來的事情(顯示頁面),服務器返回數據的時候通知瀏覽器一聲,瀏覽器把返回的數據再渲染到頁面,局部更新。

//ajax編寫步驟//

//1、創建XMLHttpRequest對象

var xhr = new XMLHttpRequest();

//2、設置請求參數

xhr.open(請求方式,請求地址,異步或同步);

//3、設置回調函數

xhr.onreadystatechange = function(){

? ? if(xhr.reasyState===4){

? ? ? ? if(xhr.status === 200) {

? ? ? ? ? ?//5、接受響應

? ? ? ? ? ? console.log(xhr.responseText);

? ? ? ? }

? ? }

}

// 4、發送請求

xhr.send();

7、如何解決跨域問題?

理解跨域的概念:協議、域名、端口都相同才同域,否則都是跨域。

出于安全考慮,服務器不允許ajax跨域獲取數據,但是可以跨域獲取文件內容,所以基于這一點,可以動態創建script標簽,使用標簽的src屬性訪問js文件的形式獲取js腳本,并且這個js腳本中的內容是函數調用,該函數調用的參數是服務器返回的數據,為了獲取這里的參數數據,需要事先在頁面中定義回調函數,在回調函數中處理服務器返回的數據,這就是解決跨域問題的主流解決方案。

8、GET和POST的區別,何時使用POST?

GET:一般用于信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,一般在2000個字符,有的瀏覽器是8000個字符。

POST:一般用于修改服務器上的資源,對所發送的信息沒有限制。

以下情況中,請使用POST請求:

①、無法使用緩存文件(更新服務器上的文件或數據庫)

②、向服務器發送大量數據(POST沒有數據量限制)

③、發送包含未知字符的用戶輸入時,POST比GET更穩定也更可靠。

9、一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什么?

分為4個步驟:

1. 當發送一個 URL 請求時,不管這個 URL 是 Web 頁面的 URL 還是 Web 頁面上每個資源的 URL,瀏覽器都會開啟一個線程來處理這個請求,同時在遠程 DNS 服務器上啟動一個 DNS 查詢。這能使瀏覽器獲得請求對應的 IP 地址。

2. 瀏覽器與遠程 Web 服務器通過 TCP 三次握手協商來建立一個 TCP/IP 連接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在 瀏覽器和服務器之間傳遞。該握手首先由客戶端嘗試建立起通信,而后服務器應答并接受客戶端的請求,最后由客戶端發出該請求已經被接受的報文。

3. 一旦 TCP/IP 連接建立,瀏覽器會通過該連接向遠程服務器發送 HTTP 的 GET 請求。遠程服務器找到資源并使用 HTTP 響應返回該資源,值為 200 的 HTTP 響應狀態表示一個正確的響應。

4. 此時,Web 服務器提供資源服務,客戶端開始下載資源。

10、html網頁渲染的基本過程?

答案

11、解決跨域請求?

答案

12、js數據類型?

13、怎么判讀是數組類型?

14、call、apply、bind區別?

15、js數組去重?

16、數組排序?

17、null屬于什么類型?

18、閉包,什么時候使用?

19、性能優化方式?

20、聲明函數與定義式函數區別,聲明提前?

21、如何判斷數值是NAN?

22、js數組與偽數組區別?

四、VUE 方面

1、vue生命周期?

2、vue 動態組件與異步組件?

3、vuex是做什么的?

4、vue常用指令?

5、v-if與v-show區別?

6、談一談父組件與子組件,兄弟組件?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。