前端工程師

前端工程師屬于IT技術(shù)職業(yè)的一種,是近5年發(fā)展起來的職業(yè),舊的體系將其定義為Web前端工程師,主要的技術(shù)包含:HTML
、JavaScrip
t、CSS
。但I(xiàn)T技術(shù)屬于變化比較快的領(lǐng)域,最近發(fā)生了很大的變革,新的體系下,前端工程師技術(shù)又增加了:nodejs
、Hybrid App
。前端技術(shù)的興起和網(wǎng)頁越來越豐富化,造就了前端的繁榮現(xiàn)象。雖然說入門相比IT
其他行業(yè)簡單,繼而造成更多人轉(zhuǎn)行和培訓(xùn)機構(gòu)大量成批送出,但是這個職位依舊稀缺中高級人才。
面試是一個重要的環(huán)節(jié),他是公司評判你是否適合和測試你技術(shù)的程度的方式,所以如果你想進(jìn)入到你心儀的公司,那么面試這個環(huán)節(jié)就不能掉鏈子,下面是我見到過總結(jié)的一些面試題,希望各位前端工程師們能有些許幫助,會定期更新面試題。
HTML/CSS部分
1.什么是盒子模型?
在網(wǎng)頁中,一個元素占有空間的大小由幾個部分構(gòu)成,其中包括元素的內(nèi)容(content)
,元素的內(nèi)邊距(padding)
,元素的邊框(border)
,元素的外邊距(margin)
四個部分。這四個部分占有的空間中,有的部分可以顯示相應(yīng)的內(nèi)容,而有的部分只用來分隔相鄰的區(qū)域或區(qū)域。4個部分一起構(gòu)成了css中元素的盒模型。
2、行內(nèi)元素有哪些?塊級元素有哪些? 空(void)元素有那些?
- 行內(nèi)元素:a、b、span、img、input、strong、select、label、em、button、textarea
- 塊級元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote
- 空元素:即系沒有內(nèi)容的HTML元素,例如:br、meta、hr、link、input、img
3、CSS實現(xiàn)垂直水平居中
很經(jīng)典的問題有很多種方法,下面是其中一種解決辦法:
html:
<div class="wrapper">
<div class="content"></div>
</div>
css:
.wrapper {
position: relative;
width: 500px;
height: 500px;
background-color: #ddd;
}
.content{
background-color:#6699FF;
width:200px;
height:200px;
position: absolute; //父元素需要相對定位
top: 50%;
left: 50%;
margin-top:-100px ; //二分之一的height,width
margin-left: -100px;
}
4.簡書一下src和href的區(qū)別
- href 是指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點)或當(dāng)前文檔(鏈接)之間的鏈接,用于超鏈接。
- src是指向外部資源的位置,指向的內(nèi)容將會嵌入到文檔中當(dāng)前標(biāo)簽所在位置;在請求src資源時會將其指向的資源下載并應(yīng)用到文檔內(nèi),例如js腳本,img圖片和frame等元素。當(dāng)瀏覽器解析到該元素時,會暫停其他資源的下載和處理,直到將該資源加載、編譯、執(zhí)行完畢,圖片和框架等元素也如此,類似于將所指向資源嵌入當(dāng)前標(biāo)簽內(nèi)。這也是為什么將js腳本放在底部而不是頭部。
5.什么是css hack
一般來說是針對不同的瀏覽器寫不同的CSS,就是 CSS Hack。
IE瀏覽器Hack一般又分為三種,條件Hack、屬性級Hack、選擇符Hack(詳細(xì)參考CSS文檔:css文檔)。例如:
// 1、條件Hack
<!--[if IE]>
<style>
.test{color:red;}
</style>
<![endif]-->
// 2、屬性Hack
.test{
color:#090\9; /* For IE8+ */
*color:#f00; /* For IE7 and earlier */
_color:#ff0; /* For IE6 and earlier */
}
// 3、選擇符Hack
* html .test{color:#090;} /* For IE6 and earlier */
* + html .test{color:#ff0;} /* For IE7 */
6.簡述同步和異步的區(qū)別
同步是阻塞模式,異步是非阻塞模式。
同步就是指一個進(jìn)程在執(zhí)行某個請求的時候,若該請求需要一段時間才能返回信息,那么這個進(jìn)程將會一直等待下去,直到收到返回信息才繼續(xù)執(zhí)行下去;
異步是指進(jìn)程不需要一直等下去,而是繼續(xù)執(zhí)行下面的操作,不管其他進(jìn)程的狀態(tài)。當(dāng)有消息返回時系統(tǒng)會通知進(jìn)程進(jìn)行處理,這樣可以提高執(zhí)行的效率。
7、px和em的區(qū)別
px和em都是長度單位,區(qū)別是,px的值是固定的,指定是多少就是多少,計算比較容易。em得值不是固定的,并且em會繼承父級元素的字體大小。
瀏覽器的默認(rèn)字體高都是16px。所以未經(jīng)調(diào)整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em
8.什么叫優(yōu)雅降級和漸進(jìn)增強?
漸進(jìn)增強 progressive enhancement:
針對低版本瀏覽器進(jìn)行構(gòu)建頁面,保證最基本的功能,然后再針對高級瀏覽器進(jìn)行效果、交互等改進(jìn)和追加功能達(dá)到更好的用戶體驗。
優(yōu)雅降級 graceful degradation:
一開始就構(gòu)建完整的功能,然后再針對低版本瀏覽器進(jìn)行兼容。
區(qū)別:
- a. 優(yōu)雅降級是從復(fù)雜的現(xiàn)狀開始,并試圖減少用戶體驗的供給
- b. 漸進(jìn)增強則是從一個非常基礎(chǔ)的,能夠起作用的版本開始,并不斷擴充,以適應(yīng)未來環(huán)境的需要
- c. 降級(功能衰減)意味著往回看;而漸進(jìn)增強則意味著朝前看,同時保證其根基處于安全地帶
瀏覽器的內(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ā))
JavaScript部分
1.怎樣添加、移除、移動、復(fù)制、創(chuàng)建和查找節(jié)點?
1.創(chuàng)建新節(jié)點
createDocumentFragment() //創(chuàng)建一個DOM片段
createElement() //創(chuàng)建一個具體的元素
createTextNode() //創(chuàng)建一個文本節(jié)點
2.添加、移除、替換、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替換
insertBefore() //插入
3.查找
getElementsByTagName() //通過標(biāo)簽名稱
getElementsByName() //通過元素的Name屬性的值
getElementById() //通過元素Id,唯一性
2.如何消除一個數(shù)組里面重復(fù)的元素?
// 方法一:
var arr1 =[1,2,2,2,3,3,3,4,5,6],
arr2 = [];
for(var i = 0,len = arr1.length; i< len; i++){
if(arr2.indexOf(arr1[i]) < 0){
arr2.push(arr1[i]);
}
}
document.write(arr2); // 1,2,3,4,5,6
3.在Javascript中什么是偽數(shù)組?如何將偽數(shù)組轉(zhuǎn)化為標(biāo)準(zhǔn)數(shù)組?
偽數(shù)組(類數(shù)組):無法直接調(diào)用數(shù)組方法或期望length屬性有什么特殊的行為,但仍可以對真正數(shù)組遍歷方法來遍歷它們。典型的是函數(shù)的argument參數(shù),還有像調(diào)用getElementsByTagName,document.childNodes之類的,它們都返回NodeList對象都屬于偽數(shù)組。可以使用Array.prototype.slice.call(fakeArray)將數(shù)組轉(zhuǎn)化為真正的Array對象。
function log(){
var args = Array.prototype.slice.call(arguments);
//為了使用unshift數(shù)組方法,將argument轉(zhuǎn)化為真正的數(shù)組
args.unshift('(app)');
console.log.apply(console, args);
};
4.addEventListener最后一個參數(shù)是做什么用的
規(guī)定事件是冒泡還是捕獲。false是冒泡,true是捕獲
5.什么是冒泡,什么是捕獲
當(dāng)一個元素觸發(fā)了一個事件之后就會像上層傳遞直至body,document。捕獲是從最不具體的傳至最具體的
6.所有的事件都可以冒泡么
不是,blur focus change不可冒泡
7.怎么取消事件冒泡
eve.preventDefault(阻止事件默認(rèn)行為)
HTTP
1.一次完整的HTTP事務(wù)是怎樣的一個過程?
基本流程:
- a. 域名解析
- b. 發(fā)起TCP的3次握手
- c. 建立TCP連接后發(fā)起http請求
- d. 服務(wù)器端響應(yīng)http請求,瀏覽器得到html代碼
- e. 瀏覽器解析html代碼,并請求html代碼中的資源
- f. 瀏覽器對頁面進(jìn)行渲染呈現(xiàn)給用戶
更新日志
2017/06/13 第一次更新文章