今天跟H5班的一個(gè)同學(xué)聊面試。
我已經(jīng)成功一半了。。。
怎么說?
我這邊已經(jīng)認(rèn)可公司了,就等公司認(rèn)可我。
哈,這種心態(tài)太好了。面試是一個(gè)很消耗元?dú)獾氖虑椋还苣惚旧淼募寄茉趺礃樱鳛橐粋€(gè)初出茅廬的學(xué)生,在找工作的過程中,都會(huì)遇到各種問(刁)題(難)。
我們應(yīng)該用樂觀積極的態(tài)度、滿滿的正能量去面對(duì)所有的事情。調(diào)整心態(tài),全力以赴,屬于你的work.right就在不遠(yuǎn)處等著你。
下面是小鷗整理的HTML5面試常見問題和答案,僅供參考,僅供參考,僅供參考。這些問題并不能保證你一定能得到心儀的Offer,但是可以肯定的是,看過它,面試的時(shí)候你心里一定不會(huì)那么方。
只許看,不許背?
心理第一,答案第二
開始吧
?
1談?wù)勀銓?duì)HTML5的理解。
答案解析:
絕大多數(shù)人心中的HTML5僅僅是HTML的第5個(gè)版本,認(rèn)為H5只不過是增加了一些新標(biāo)簽,如<header>、<section>、<canvas>或者增加了動(dòng)畫、漸變之類的炫酷效果。實(shí)際上這種理解是極其膚淺的,完全是外行人看熱鬧!H5從廣義上說是前端開發(fā)中各種最新技術(shù)的總稱,包含了HTML5、CSS3、JavaScript、ES6和各種開源框架等最新前端開發(fā)技術(shù)的總和。H5廣泛而深入地吸收了移動(dòng)互聯(lián)網(wǎng)時(shí)代的技術(shù)精髓,再加上其自身跨平臺(tái)、免安裝、更新快的技術(shù)優(yōu)勢(shì),自2014年底發(fā)布以來,已經(jīng)逐漸成為現(xiàn)代互聯(lián)網(wǎng)和移動(dòng)互聯(lián)網(wǎng)開發(fā)的核心技術(shù),逐漸發(fā)展成為各行各業(yè)進(jìn)入互聯(lián)網(wǎng)+的首選開發(fā)技術(shù)。
2目前哪些瀏覽器支持HTML5?
答案解析:
幾乎所有的瀏覽器都支持HTML 5,例如Safari,Chrome,火狐,Opera,IE等。
3HTML5中的DataList是什么?
答案解析:
HTML 5中的DataList控件元素有助于提供自動(dòng)完成功能的文本框,如下圖所示。
DataList控件功能的HTML代碼:
<input?list="Country">
<datalist?id="Country">
<option?value="India">
<option?value="Italy">
<option?value="Iran">
<option?value="Israel">
<option?value="Indonesia">
</datalist>
4SVG是什么?
答案解析:
SVG表示(scalable vector graphics)可縮放矢量圖形。這是一個(gè)基于文本的圖形語言,它可以繪制使用文本、線、點(diǎn)等的圖形,因此可以輕巧又快速地渲染。
5能否使用HTML5舉個(gè)簡(jiǎn)單的SVG例子?
答案解析:
比方說,我們想要使用HTML 5 SVG顯示下面簡(jiǎn)單的線條。
下面是HTML 5代碼,你可以看到SVG標(biāo)簽封閉了多邊形標(biāo)簽用來顯示星星圖形。
<svg?id="svgelem"?height="[object SVGAnimatedLength]"?xmlns="http://www.w3.org/2000/svg">
<line?style="stroke: rgb(255, 0, 0); stroke-width: 2px;"?y2="[object SVGAnimatedLength]"?x2="[object SVGAnimatedLength]"?y1="[object SVGAnimatedLength]"?x1="[object SVGAnimatedLength]">
</line>
6HTML5中canvas是什么?
答案解析:
Canvas是你在HTML中可以繪制圖形的區(qū)域。?
7我們?nèi)绾问褂肅anvas來畫一條簡(jiǎn)單的線?
答案解析:
三步走:
1、定義Canvas區(qū)域
2、獲取訪問canvas上下文區(qū)域
3、繪制圖形
定義Canvas區(qū)域
定義Canvas區(qū)域你需要使用下面的HTML代碼,這定義了你能進(jìn)行繪圖的區(qū)域
<canvas id="mycanvas" width="600" height="500"></canvas>
獲取畫布區(qū)域的訪問
在畫布上進(jìn)行繪圖我們首先需要獲取上下文區(qū)域的關(guān)聯(lián),下面是獲取畫布區(qū)域的代碼。
var c=document.getElementById("mycanvas"); var ctx=c.getContext("2d");
繪制圖形
現(xiàn)在一旦你獲取了訪問上下文,我們就可以開始在上下文中繪制了。首先調(diào)用“move”方法并從一個(gè)點(diǎn)開始,使用線條方法繪制線條然后使用stroke方法結(jié)束。
以下是完整的代碼:
輸出結(jié)果:
8Canvas和SVG圖形的區(qū)別是什么?
答案解析:
從前面的兩個(gè)問題中我們可以看到Canvas和SVG都可以在瀏覽器上繪制圖形。所以在這個(gè)問題上面試官可能會(huì)要你回答什么時(shí)候用哪個(gè)。
SVGCanvas繪制后記憶,換句話說任何使用SVG繪制的形狀都能被記憶和操作,瀏覽器可以再次顯示Canvas則是繪制后忘記,一旦繪制完成你就不能訪問像素和操作它SVG對(duì)于創(chuàng)建圖形例如CAD軟件是良好的,一旦東西繪制,用戶就想去操作它Canvas則用于繪制和遺忘類似動(dòng)漫和游戲的場(chǎng)畫。為了之后的操作,SVG需要記錄坐標(biāo),所以比較緩慢。因?yàn)闆]有記住以后事情的任務(wù),所以Canvas更快。我們可以用繪制對(duì)象的相關(guān)事件處理我們不能使用繪制對(duì)象的相關(guān)事件處理,因?yàn)槲覀儧]有他們的參考分辨率獨(dú)立分辨率依賴
9HTML5中我們?nèi)绾螌?shí)現(xiàn)應(yīng)用緩存?
答案解析:
首先我們需要指定”manifest”文件,“manifest”文件幫助你定義你的緩存如何工作。以下是”mainfest”文件的結(jié)構(gòu):
所有manifest文件都以“CACHE MANIFEST”語句開始。
#(散列標(biāo)簽)有助于提供緩存文件的版本。
CACHE 命令指出哪些文件需要被緩存。
Mainfest文件的內(nèi)容類型應(yīng)是“text/cache-manifest”。
以下是如何在ASP.NET C#使用manifest緩存:
創(chuàng)建一個(gè)緩存manifest文件以后,接下來的事情實(shí)在HTML頁面中提供mainfest連接,如下所示:
當(dāng)以上文件第一次運(yùn)行,他會(huì)添加到瀏覽器應(yīng)用緩存中,在服務(wù)器宕機(jī)時(shí),頁面從應(yīng)用緩存中獲取。
10本地存儲(chǔ)和cookies(儲(chǔ)存在用戶本地終端上的數(shù)據(jù))之間的區(qū)別是什么?
答案解析:
CookiesLocal storage客戶端/服務(wù)端客戶端和服務(wù)端都能訪問數(shù)據(jù)。Cookie的數(shù)據(jù)通過每一個(gè)請(qǐng)求發(fā)送到服務(wù)端。只有本地瀏覽器端可訪問數(shù)據(jù),服務(wù)器不能訪問本地存儲(chǔ)直到故意通過POST或者GET的通道發(fā)送到服務(wù)器。大小每個(gè)cookie有4095byte。每個(gè)域5MB。過期Cookies有有效期,所以在過期之后cookie和cookie數(shù)據(jù)會(huì)被刪除。沒有過期數(shù)據(jù),無論最后用戶從瀏覽器刪除或者使用Javascript程序刪除,我們都需要?jiǎng)h除。
11HTML5 為什么只需要寫 <!DOCTYPE HTML>?
答案解析:
HTML5不基于SGML,因此不需要對(duì)DTD進(jìn)行引用,但是需要DOCTYPE來規(guī)范瀏覽器的行為(讓瀏覽器按照他們應(yīng)該的方式來運(yùn)行)而HTML4.01基于SGML,所以需要對(duì)DTD進(jìn)行引用,才能告知瀏覽器文檔所使用的文檔類型。
12行內(nèi)元素有哪些?塊級(jí)元素有哪些? 空(void)元素有那些?
答案解析:
行內(nèi)元素:a ?b ?span ?img ?input ?select ?strong
塊級(jí)元素:div ?ul ?ol ?li ?dl ?dt ?dd ?h1 ?h2 ?h3 ?h4 ?p ?等
空元素:<br> ?<hr> ?<img> ?<link> <meta>
13頁面導(dǎo)入樣式時(shí),使用link和@import有什么區(qū)別?
答案解析:
link屬于XHTML標(biāo)簽,而@import是css提供的;
頁面被加載時(shí),link會(huì)同時(shí)被加載,而@import引用的css會(huì)等到頁面被加載完再加載;
@import只在IE5以上才能識(shí)別,而link是XHTML標(biāo)簽,無兼容問題;
link方式的樣式的權(quán)重高于@import的權(quán)重。
14html5有哪些新特性、移除了那些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?
答案解析:
新特性,新增元素:
內(nèi)容元素:article、footer、header、nav、section
表單控件:calendar、date、time、email、url、search
控件元素:webworker,websockt,Geolocation
移除元素:
顯現(xiàn)層元素:basefont,big,center,font,s,strike,tt,u
性能較差元素:frame,frameset,noframes
處理兼容問題有兩種方式:
IE6/IE7/IE8支持通過document方法產(chǎn)生的標(biāo)簽,利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽。
使用是html5shim框架
另外,DOCTYPE聲明的方式是區(qū)分HTML和HTML5標(biāo)志的一個(gè)重要因素,此外,還可以根據(jù)新增的結(jié)構(gòu),功能元素來加以區(qū)分。
15如何區(qū)分 HTML 和 HTML5?
答案解析:
在文檔類型聲明上不同:
HTML是很長(zhǎng)的一段代碼,很難記住,而HTML5卻只有簡(jiǎn)簡(jiǎn)單單的聲明,方便記憶。
在結(jié)構(gòu)語義上不同:
HTML:沒有體現(xiàn)結(jié)構(gòu)語義化的標(biāo)簽,通常都是這樣來命名的<div id="header"></div>,這樣表示網(wǎng)站的頭部。
HTML5:在語義上卻有很大的優(yōu)勢(shì)。提供了一些新的標(biāo)簽,比如:<header><article><footer>
16簡(jiǎn)述一下你對(duì)HTML語義化的理解?
答案解析:
用正確的標(biāo)簽做正確的事情
html語義化讓頁面的內(nèi)容結(jié)構(gòu)化,結(jié)構(gòu)更清晰,便于對(duì)瀏覽器、搜索引擎解析
即使在沒有樣式css情況下也以一種文檔格式顯示,并且是容易閱讀的
搜索引擎的爬蟲也依賴于HTML標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利于SEO
使于都源代碼的人對(duì)網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護(hù)理解。
17HTML5的離線儲(chǔ)存怎么使用,工作原理能不能解釋一下?
答案解析:
localStorage 長(zhǎng)期存儲(chǔ)數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失;
sessionStorage 數(shù)據(jù)在瀏覽器關(guān)閉后自動(dòng)刪除。
18iframe有那些缺點(diǎn)?
答案解析:
在網(wǎng)頁中使用框架結(jié)構(gòu)最大的弊病是搜索引擎的“蜘蛛”程序無法解讀這種頁面
框架結(jié)構(gòu)有時(shí)會(huì)讓人感到迷惑,頁面很混亂
19Doctype作用? 嚴(yán)格模式與混雜模式如何區(qū)分?它們有何意義?
答案解析:
<!Doctype>聲明位于文檔中的最前面,處于<html>標(biāo)簽之前。告知瀏覽器的解析器,用什么文檔類型規(guī)范來解析這個(gè)文檔。
嚴(yán)格模式的排版和JS運(yùn)作模式是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行。
在混雜模式中,頁面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點(diǎn)無法工作。
DOCTYPE不存在或格式不正確會(huì)導(dǎo)致文檔以混雜模式呈現(xiàn)。
20常見兼容性問題?
png24位的圖片在IE6瀏覽器上出現(xiàn)背景
? ? ? ??解決方案:做成PNG8
瀏覽器默認(rèn)的 margin 和 padding 不同
? ? ? ??解決方案:加一個(gè)全局的*{margin:0;padding:0;}來統(tǒng)一
IE6雙邊距bug:塊屬性標(biāo)簽float后,又有橫行的 margin 情況下,在 IE6 顯示 margin 比設(shè)置的大。浮動(dòng)IE產(chǎn)生的雙倍距離 #box{float:left;width:10px;margin:0 0 0 100px;} 這種情況下IE6會(huì)產(chǎn)生200px的距離。
? ? ? ??解決方法:加上_display:inline,使浮動(dòng)忽略
IE下,可以使用獲取常規(guī)屬性的方法來獲取自定義屬性,也可以使用getAttribute()獲取自定義屬性; Firefox下,只能使用getAttribute()獲取自定義屬性。
? ? ? ?解決方法:統(tǒng)一通過getAttribute()獲取自定義屬性。
IE下,even對(duì)象有x,y屬性,但是沒有pageX,pageY屬性,但是沒有x,y屬性;
? ??? ?解決方法:(條件注釋)缺點(diǎn)是在IE瀏覽器下可能會(huì)增加額外的HTTP請(qǐng)求數(shù)。
Chrome中文界面下默認(rèn)會(huì)將小于 12px 的文本強(qiáng)制按照 12px 顯示
? ? ???解決方法:可通過加入 CSS 屬性 -webkt-text-size-adjust:none;解決
超鏈接訪問過后 hover 樣式就不出現(xiàn)了,被點(diǎn)擊訪問過的超鏈接樣式不在具有 hover 和 active ;
? ??? ? 解決方法:改變CSS屬性的排列順序:L-V-H-A: a:link{ } ?a:visited{ } a:hover{ } a:active{ }?
21如何實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁之間的通信?
答案解析:
調(diào)用localstorge、cookies等本地存儲(chǔ)方式
22webSocket如何兼容低瀏覽器?
答案解析:
Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 編碼發(fā)送 XHR 、 基于長(zhǎng)輪詢的 XHR
23支持HTML5新標(biāo)簽
答案解析:
IE8/IE7/IE6支持通過 document.createElement 方法產(chǎn)生的標(biāo)簽,可以利用這一特性讓這些瀏覽器支持 HTML5 新標(biāo)簽,瀏覽器支持新標(biāo)簽后,還需要添加標(biāo)簽?zāi)J(rèn)的樣式;
當(dāng)然最好的方式是直接使用成熟的框架、使用最多的是 html5shim 框架
<!--[if lt IE 9]>?
<script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>?
<![endif]-->
24如何區(qū)分:DOCTYPE 聲明\新增的結(jié)構(gòu)元素\功能元素,語義化的理解?
答案解析:
用正確的標(biāo)簽做正確的事情;
html語義化就是讓頁面的內(nèi)容結(jié)構(gòu)化,便于對(duì)瀏覽器、搜索引擎解析;
在沒有樣式 CSS 情況下也以一種文檔格式顯示,并且是容易閱讀的;
搜索引擎的爬蟲依賴于標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利用 SEO ;
使閱讀源代碼的人對(duì)網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護(hù)理解。
25介紹一下 CSS 的盒子模型?
答案解析:
有兩種,IE 盒子模型、標(biāo)準(zhǔn) W3C 盒子模型; IE 的 content 部分包含了 border 和 padding;
盒模型:內(nèi)容(content)、填充(padding)、邊界(margin)、邊框(border)。
26CSS 選擇符有哪些?哪些屬性可以繼承??jī)?yōu)先級(jí)算法如何計(jì)算? CSS3 新增偽類有哪些?
答案解析:
id 選擇器(#myid)
類選擇器(.myclassname)
標(biāo)簽選擇器(div,h1,p)
相鄰選擇器(h1 + p)
子選擇器(ul > li)
后代選擇器(li a)
通配符選擇器(* )
屬性選擇器( a[rel = "external"])
偽類選擇器(a: hover, li: nth - child)
27可繼承的樣式有哪些?
font-size
font-family color,?
UL
LI?
DL?
DD?
DT
28不可繼承的樣式有哪些?
border?
padding?
margin?
width?
height
29優(yōu)先級(jí)就近原則
解析答案:
同權(quán)重情況下樣式定義最近者為準(zhǔn)
30載入樣式
解析答案:
以最后載入的定位為準(zhǔn);
優(yōu)先級(jí)為: !important > ?id > class > tag ?; ? important 比 內(nèi)聯(lián)優(yōu)先級(jí)高?
31CSS3新增偽類舉例:
答案解析:
p:first-of-type ? 選擇屬于其父元素的首個(gè) <p> 元素的每個(gè) <p> 元素;
p:last-of-type ? 選擇屬于其父元素的最后 <p> 元素的每個(gè) <p> 元素;
p:only-of-type ?選擇屬于其父元素唯一的 <p> 元素的每個(gè) <p> 元素;
p:only-child ? ?選擇屬于其父元素的唯一子元素的每個(gè) <p> 元素;
p:nth-child(2) ?選擇屬于其父元素的第二個(gè)子元素的每個(gè) <p> 元素;
:enabled ?:disabled 控制表單控件的禁用狀態(tài);
:checked ? ? ? ?單選框或復(fù)選框被選中。
32如何居中div? 如何居中一個(gè)浮動(dòng)元素?
答案解析:
給div 設(shè)置一個(gè)寬度,然后添加 margin:0 auto 屬性;div{width:200px; margin:0 auto; }
33居中一個(gè)浮動(dòng)元素
答案解析:
確定容器的寬高 ?寬500 高300的層,設(shè)置層的外邊距
.div{width:500px;height:300px;margin:-150px 0 0 -250px;position:relative;background:green;left:50%;頭:50%}
34css3有哪些新特性?
答案解析:
CSS3 實(shí)現(xiàn)圓角(border-radius:8px;)
陰影(box-shadow:10px)
對(duì)文字加特效(text-shadow)
線性漸變(gradient)
旋轉(zhuǎn)(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg)//旋轉(zhuǎn),縮放,定位,傾斜
增加了更多的 css 選擇器 多背景 rgba
35display:inline-block 什么時(shí)候會(huì)顯示間隙?
答案解析:
移除空格,使用margin 負(fù)值、使用 font-size:0、letter-spacing 、word-spacing
36使用 CSS 預(yù)處理器嗎?喜歡哪個(gè)?
答案解析:
SASS
37什么是盒子模型?
答案解析:
在網(wǎng)頁中,一個(gè)元素占有空間的大小由幾個(gè)部分構(gòu)成,其中包括元素的內(nèi)容(content),元素的內(nèi)邊距(padding),元素的邊框(border),元素的外邊距(margin)四個(gè)部分。
這四個(gè)部分占有的空間中,有的部分可以顯示相應(yīng)的內(nèi)容,而有的部分只用來分隔相鄰的區(qū)域或區(qū)域。4個(gè)部分一起構(gòu)成了css中元素的盒模型。
38CSS實(shí)現(xiàn)垂直水平居中
答案解析:
一道經(jīng)典的問題,實(shí)現(xiàn)方法有很多種,以下是其中一種實(shí)現(xiàn):
HTML結(jié)構(gòu):
<div class="content"></div>
</div>
CSS:
? ? .wrapper{position:relative;}
? ? .content{
? ? ? ? background-color:#6699FF;
? ? ? ? width:200px;
? ? ? ? height:200px;
? ? ? ? position: absolute; ? ? ? ?//父元素需要相對(duì)定位
? ? ? ? top: 50%;
? ? ? ? left: 50%;
? ? ? ? margin-top:-100px ; ? //二分之一的height,width
? ? ? ? margin-left: -100px;
? ? }
39簡(jiǎn)述一下src與href的區(qū)別
答案解析:
href 是指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點(diǎn))或當(dāng)前文檔(鏈接)之間的鏈接,用于超鏈接。
src是指向外部資源的位置,指向的內(nèi)容將會(huì)嵌入到文檔中當(dāng)前標(biāo)簽所在位置;在請(qǐng)求src資源時(shí)會(huì)將其指向的資源下載并應(yīng)用到文檔內(nèi),例如js腳本,img圖片和frame等元素。
當(dāng)瀏覽器解析到該元素時(shí),會(huì)暫停其他資源的下載和處理,直到將該資源加載、編譯、執(zhí)行完畢,圖片和框架等元素也如此,類似于將所指向資源嵌入當(dāng)前標(biāo)簽內(nèi)。這也是為什么將js腳本放在底部而不是頭部。
40簡(jiǎn)述同步和異步的區(qū)別
答案解析:
同步是阻塞模式,異步是非阻塞模式。
同步就是指一個(gè)進(jìn)程在執(zhí)行某個(gè)請(qǐng)求的時(shí)候,若該請(qǐng)求需要一段時(shí)間才能返回信息,那么這個(gè)進(jìn)程將會(huì)一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去;
異步是指進(jìn)程不需要一直等下去,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài)。當(dāng)有消息返回時(shí)系統(tǒng)會(huì)通知進(jìn)程進(jìn)行處理,這樣可以提高執(zhí)行的效率。
41px和em的區(qū)別
答案解析:
px和em都是長(zhǎng)度單位,區(qū)別是,px的值是固定的,指定是多少就是多少,計(jì)算比較容易。em得值不是固定的,并且em會(huì)繼承父級(jí)元素的字體大小。
瀏覽器的默認(rèn)字體高都是16px。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em
42瀏覽器的內(nèi)核分別是什么?
答案解析:
IE: trident內(nèi)核
Firefox:gecko內(nèi)核
Safari:webkit內(nèi)核
Opera:以前是presto內(nèi)核,Opera現(xiàn)已改用Google Chrome的Blink內(nèi)核
Chrome:Blink(基于webkit,Google與Opera Software共同開發(fā))