A. Web 前端面試
博客園整理了一下,有好的面試題歡迎大家發在評論區喲
1. 閉包
2. 數組去重
3. 原型和原型鏈
4. call,apply,bind三者的區別?
5. 請介紹常見的 HTTP 狀態碼(至少五個)
6. 深淺拷貝
7. 實現(5).add(3).minus(2)輸出6
8. null和undefined區別
9. MVC和MVVC?
10. Vue生命周期
11. Vue數據雙向綁定原理
12. Vue組件傳參
13. 說說各瀏覽器存在的兼容問題
14. router和route
15. active-class屬於Vue哪一個moles,有什麼作用
16. v-if和v-show
17. computed和watch有什麼區別
18.Vue 組件中 data 為什麼必須是函數
19. vue中子組件調用父組件的方法
20. vue中 keep-alive 組件的作用
21. vue中如何編寫可復用的組件?
22. Vue 如何去除url中的 #
23. Vue 中 key 的作用
24. Vue 中怎麼自定義指令
25. Vue 中怎麼自定義過濾器
26. NextTick 是做什麼的
27. Vue 組件 data 為什麼必須是函數
28. 計算屬性computed 和事件 methods 有什麼區別
29. scoped(死夠撲的)
30. vue如何獲取dom?
31. promise
32. vue常用指令有哪些
33.vue-loader是什麼?使用和用途?
34.css樣式局部化,如何讓css只在當前組件起作用?scss和stytus樣式穿透
閉包指有權訪問另一個函數中變數的函數,
MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
B站視頻: https://www.bilibili.com/video/BV1YJ411R7ap?from=search&seid=18157596230752413126
https://www.jianshu.com/p/9c3547450a52
https://search.bilibili.com/all?keyword=%E5%8E%9F%E5%9E%8B%E9%93%BE%20%E9%BB%91%E9%A9%AC
都是用來改變this指向的
call和apply都是function原型上的方法,每一個函數作為function的實例都可以調用這兩個方法,而這兩個方法都是用來改變this指向的
一般情況下this指向其調用者()
fun.call(thisArg,arg1,ary2,...)
主要作用可以實現繼承
調用函數,改變this指向
繼承
fun.apply(thisArg,[argsArray])
作用:調用函數,改變函數內部this指向
參數必須是數組
apply主要應用於藉助數學對象等
bind()方法不會調用函數,但可以改變函數內部this指向
fun.bind(thisArg,arg1,arg2,...)
thisArg:在fun函數運行時指定的this值
arg1,arg2:傳遞的其他參數
返回由指定的this值和初始化參數改造的原函數拷貝
call的性能要比apply好一些,尤其當傳遞參數超過3個,後期開發可多用call
時間測試
狀態碼是由 3 位數組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息–表示請求已接收,繼續處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx:伺服器端錯誤–伺服器未能實現合法的請求。
阮一峰: http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html
MVC 是後端中的概念
MVVC中 是前端概念
最終實現V和M數據的同步,因此開發者只需關注業務邏輯,不需要手動操作Dom,mvvm是vue的核心
這兩個不同的結構可以看出兩者的區別,他們的一些屬性是不同的。
active-class 屬於vue-router的樣式方法
當routerlink標簽被點擊時將會應用這個樣式
使用有兩種方法
routerLink標簽內使用
在使用時會有一個Bug
首頁的active會一直被應用
解決辦法
為了解決上面的問題,還需加入一個屬性exact,類似也有兩種方式:
在router-link中寫入exact
在路由js文件,配置active-class
還可以不用exact這種方法去解決,例如
首頁
路由中加入重定向
computed
computed是計算屬性,也就是計算值,它更多用於計算值的場景
computed具有緩存性,computed的值在getter執行後是會緩存的,只有在它依賴的屬性值改變之後,下一次獲取computed的值時重新調用對應的getter來計算
computed適用於計算比較消耗性能的計算場景
watch
watch更多的是[觀察]的作用,類似於某些數據的監聽回調,用於觀察props $emit或者本組件的值,當數據變化時來執行回調進行後續操作
無緩存性,頁面重新渲染時值不變化也會執行
小結
當我們要進行數值計算,而且依賴於其他數據,那麼把這個數據設計為computed
如果你需要在某個數據變化時做一些事情,使用watch來觀察這個數據變化。
去這里看一下blog.csdn.net
vue-router 默認使用 hash 模式,所以在路由載入的時候,項目中的 url 會自帶 #。如果不想使用 #, 可以使用 vue-router 的另一種模式 history
new Router({
mode: 'history',
routes: [ ]
})
需要注意的是,當我們啟用 history 模式的時候,由於我們的項目是一個單頁面應用,所以在路由跳轉的時候,就會出現訪問不到靜態資源而出現 404 的情況,這時候就需要服務端增加一個覆蓋所有情況的候選資源:如果 URL 匹配不到任何靜態資源,則應該返回同一個 index.html 頁面
具體參考 官方API
參考 官方文檔-自定義指令
過濾器也同樣接受全局注冊和局部注冊
具體可參考官方文檔 深入響應式原理
我們可以將同一函數定義為一個 method 或者一個計算屬性。對於最終的結果,兩種方式是相同的
不同點:
讓css只在當前組件中起作用
B. web前端如何 面試
站到HR的角度來思考問題:
當HR問出一個問題的時候,你要站到他的角度想,他為什麼會提出這個問題,根本原因是什麼,這樣立馬分析回答下來一般不會跑偏。比如:你對加班怎麼看?立馬思考:為什麼問我這個問題,這家可能有加班文化啊,好 回答,鍛煉自己能力 覺得加班真是個大好學習的機會。
專業技術點要擼明白:
簡歷里你寫的各種熟悉:HTML,CSS,JS,等等這些專業技能點,基礎面試題一定要多看,做到面試能答上。
GitHub里搜索:前端面試題,很多愛心夥伴已經整理,試著找一下。
項目經驗要對所用技術點以及坑有很好的了解:
既然做過項目,爬過的坑,用到的技術點,就是面試中很可能會被問到的內容,提前需要溫習好。
C. web前端的面試自我介紹解析
web前端的面試自我介紹解析
自我介紹這個問題,不用多說了,面試必定會問!接下來我為你帶來web前端的面試自我介紹解析,希望對你有幫助。
【如何進行自我介紹】
如果想要在自我介紹的時候就能夠打動面試官,吸引面試官對我們的興趣,那麼像我們這種接受過PHP培訓的程序員的自我介紹當然不能和應屆生或者其他非技術崗位一樣。如何進行自我介紹比較好?有沒有什麼套路呢?當然有。
如何進行自我介紹?看看老師是怎麼建議大家的`!
1、我叫xxx,來自於吉林敦化,從網上看得到公司招聘的這個職位,覺得非常適合自己的發展。所以來這里爭取下這份工作。
2、接下來可以講解自己的核心競爭力(最強的技能、最深入研究的知識領域、個性中最積極的部分)和閃光點(做過的最成功的事,主要的成就)。核心就是要體現自己勝任這份工作(介紹時候要自然有底氣,合情合理,面試前要充分准備好)。
3、先介紹到這里,面試官看看有什麼問題,我可以再補充。
4、最後要說謝謝,任何HR都喜歡有禮貌的人!
注意:自曝其短(說自己的缺點)沒有必要,自我介紹的時候千萬不要和簡歷有沖突!
【你有什麼優劣勢】
這個問題是企業面試過程中被問到的概率很大的! 面試官想通過這一類問題的解答了解到: 1、這個人能否對自己做出正確的估價;2、主試人最關注的是該人的缺點、弱點,如這方面的問題比較突出,那就不適合做某項工作。作為前端工程師,我們應該如何巧妙的答這道題,給自己加分呢?
你有什麼優劣勢?請看前端老師的是怎麼教我們答的:
1
作為程序員,最重要的能夠給企業做好事(包括與人合作一起幹事),能解決問題。所以我們可以這樣說:
1、優點往狠里說 (技術狂熱、學習能力強、為人謙和)
2、劣勢可以提自己不是(本專業出身), 但是(對技術很狂熱)
【你為什麼選擇我們公司】
1
你為什麼選我擇們的公司,對於這個問題,其實是面試官試圖從中了解你求職的動機、願望以及對此項工作的態度。這個問題,也是經常會被面試官問到的,所以各位面試的時候,一定要有所准備!
;D. web前端工程師面試自我介紹_web前端工程師面試自我介紹怎麼說
自我介紹 ,就是自己將自己介紹給他人或眾人的一種介紹方式。那麼web前端工程師 面試 時自我介紹應該怎麼說?以下是我為您整理的web前端工程師 面試自我介紹 內容,希望能幫到你。
web前端工程師面試自我介紹第一篇
我喜歡 籃球 和 乒乓球 ,曾擔任大學校籃球隊隊員。在籃球隊中深刻體會到在大家共同努力下擊敗對手的成就感!
對於計算機有著狂熱的喜愛,雖掌握軟體眾多,但對編程情有獨鍾!在每一次解決了問題後都有一種成就感!我喜歡這種感覺,讓我能沉迷於我的代碼的世界中!
愛好 程序設計,喜歡開發自已的小型產品,追求技術上的滿足感;穩固的架構,健壯的代碼,團結的合作,是我的不懈追求。
有良好的編程習慣,以及程序錯誤控制和解決能力,我愛程序員這個崗位,當每天敲著代碼,聽著音樂,是很快樂的
用心工作,用心生活!我可能不是最好的,最合適的,我覺得我是最有潛力的!2016,一起加油!
web前端工程師面試自我介紹第二篇(英文)good morning, my name is jack, it is really a great honor to have this opportunity for a interview, i would like to answer whatever you may raise, and i hope i can make a good performance today, eventually enroll in this prestigious university in september. now i will introce myself briefly,i am 21 years old,born in heilongjiang province ,northeast of china,and i am curruently a senior student at beijing xx uni.my major is packaging engineering.and i will receive my bachelor degree after my graation in june.in the past 4 years,i spend most of my time on study,i have passed cet4/6 with an ease. and i have acquired basic knowledge
of packaging and publishing both in theory and in practice. besides, i have attend several packaging exhibition hold in beijing, this is our advantage study here, i have taken a tour to some big factory and company. through these i have a deeply understanding of domestic packaging instry. compared to developed countries such as us, unfortunately, although we have made extraordinary progress since 1978,our packaging instry are still underdeveloped, mess, unstable, the situation of employees in this field are awkard. but i have full confidence in a bright future if only our economy can keep the growth pace still. i guess you maybe interested in the reason itch to law, and what is my plan ring graate study life, i would like to tell you that pursue law is one of my lifelong goal,i like my major packaging and i won't give up,if i can pursue my master degree here i will combine law with my former ecation. i will work hard in thesefields ,patent ,trademark, right, on the base of my years study in department of p&p, my character? i cannot describe it well, but i know i am optimistic and confident. sometimes i prefer to stay alone, reading, listening to music, but i am not lonely, i like to chat with my classmates, almost talk everything ,my favorite pastime is valleyball,playing cards or surf online. through college life,i learn how to balance between study and entertainment. by the way, i was a actor of our amazing drama club. i had a few glorious memory on stage. that is my pride.
web前端工程師面試自我介紹第三篇(英文)my name is zhao wanjun. wanjun is my given name. wan means sweet and jun means person, so my name means a sweet-tempered girl. i actually am! but you can call me june, for your convenience, j-u-n-e, IT's similar to my chinese name jun. i am from enping, a small cITy in the southwest of guangdong province, near hongkong and macao. maybe you have never been there before, IT's well known for the hot springs there.
in 2014, i got the highest score in the college entrance examinations in my cITy and entered zhongshan universITy. my major is computer science. my gpa ranks in the top 40% among all students, but i have stronger c++ programming skills than many others. also, i was the first one to learn java in my class.
i was chosen by a teacher of mine to participate in his project. the project was about a lan chat room, and i developed the instant messaging system in IT. i was the only female student in this project team.
besides study and the project, i worked in the student union for two years, first year as a member, next year promoted to be the general secretary. my colleagues describe me as a reliable and considerate person.
ibm is top on my job hunting list for of the reasons you hear every day. i look forward to joining a famous company as IT means good training, good pay, and good people to work wITh, just like you gentlemen!
technical support engineer is my ideal job because i have both a technical background and the abilITy to deal wITh clients. also, traveling isn’t a problem although i am a woman.
>>>下一頁更多精彩「求 職自我 介紹」
E. web前端初級面試要求
想要通過前端面試順利進入一線大廠成就高薪前端夢。那麼首先,我們得知道前端面試中,社招和校招究竟有啥區別?
對於前端開發來說,如果說社招更看重對前端技術體系的深入理解,以及解決問題的能力話,那校招更看重的其實是基本功和學習能力(或者說是潛力)。
但其實,無論是社招還是校招,面試的時候都會問到一些曾經操作過的項目,尤其是大廠,或者熱門高薪部門,面試官除必問的技術經驗外,也會對技術深度進行一個基礎的考核,那在這種情況下如何hold住大廠面試呢?
前端面試三要素:簡歷、個人介紹、技術能力。下面,就來分別聊一聊。
1、簡歷篩選關:
HR一般會去看簡歷中所提的技術棧是否匹配,怎麼看呢?我們可以抓住簡歷中的技術名詞,一般來說如果一點技術名詞都沒有提到,那麼大概有以下幾種可能:很水、很牛但概率很小、不會寫簡歷。所以,一部分人可能會因為簡歷的問題沒有了面試機會,這點是需要非常注意的。
2、個人介紹關:
通過了簡歷篩選階段,就真正到了面試環節。這時候一定要准備好一段最多3分鍾的個人介紹。請注意,最多3分鍾!言簡意賅的說明自己的工作時間,擅長技術棧和自己的工作預期。
3、項目經驗表達:
對前端開發學習者而言,JS並不陌生,但大廠的JS面試題卻總是顯得很「陌生」,怎麼樣能夠真正做到深入理解與高級應用?這不僅是面試過程中對前端求職者的要求,也是大多數前端開發者的痛點。
大廠面試中,面試官除了關注你的項目經驗外,還往往喜歡和面試者深入探討前端某些技術領域成體系的前端知識。比如:模塊化、非同步解決方案、網路、框架及原理、線程等,但在與面試官的正面battle中,求職者總會敗下陣來。
所以,建議大家在Web前端面試前一定要注重這三個方面的內容。注重了這些想找找到一份適合的Web前端開發工作並不是難事。
F. web前端面試十大總結,不了解一下嗎
在互聯網時代,瀏覽器幾乎主宰著一切,而前端開發人員決定著瀏覽器的內容展現形式和信息的提供,是不可或缺的一部分。前端開發實際上具有很明顯的時代特徵,它在很大程度上決定著大眾的信息攝入,以及用戶讀取信息的有效方式。那麼今天小編為大家總結了一些web前端的面試題,希望對大家有幫助哦!
一:字體高亮函數
題目:請你完成highlight函數,可以把模版字元串中的插入內容替換掉,並且插入文檔以後顯示紅色。例如:
constyourName='ScriptOJ'
constmyName='Jerry'
document.body.innerHTML=highlight`Hello,${yourName}.Iam
${myName}.`
上面例子的頁面顯示如下:
0_1498033735172_upload-2abd65b1-1e98-46ba-b46f-df4188a036a5
請你完成highlight函數的編寫。
答案:
css:
.highlight{
color:red;
}
js:
//考察的是Taggedtemplateliterals的使用
//
#/en-US/docs/Web/JavaScript/Reference/Template_literals
consthighlight=(strings,...args)=>{
returnstrings.rece((str,cur,i)=>{
return`${str}${cur}${args[i]?`class="highlight">${args[i]}`:''}`
},'')
}
二:數組去重
題目:編寫一個函數unique(arr),返回一個去除數組內重復的元素的數組。例如:
unique([0,1,2,2,3,3,4])//=>[0,1,2,3,4]
unique([0,1,Ƈ',Ƈ',2])//=>[0,1,Ƈ',2]
答案:
constunique=(arr)=>[...newSet(arr)]
三:解析字串
題目:完成一個extractStr函數,可以把一個字元串中所有的:到.的子串解析出來並且存放到一個數組當中,例如:
extractStr('Mynameis:Jerry.Myageis:12.')//=>['Jerry',']
注意,:和.之間不包含:和.。也即是說,如果::abc..,則返回['abc']。
(本題來源:《JavaScriptCookbook》)
答案:·
constextractStr=(str)=>{
constret=str.match(/:([^:.])*?./g)||[]
returnret.map((subStr)=>subStr.replace(/[:.]/g,''))
}
四:spacify題目:
請你給字元串都添加上原型方法spacify,可以讓一個字元串的每個字母都多出一個空格的間隔:"ScriptOJ".spacify()//=>
"ScriptO
J"(本題來源:#/interview-questions)答案:String.prototype.spacify
=function(){
returnthis.split('').join('')
}
五:safeGet
題目:有時候我們需要訪問一個對象較深的層次,但是如果這個對象某個屬性不存在的話就會報錯,例如:
vardata={a:{b:{c:'ScriptOJ'}}}
data.a.b.c//=>scriptoj
data.a.b.c.d//=>報錯,代碼停止執行
console.log('ScriptOJ')//=>不會被執行
請你完成一個safeGet函數,可以安全的獲取無限多層次的數據,一旦數據不存在不會報錯,會返回undefined,例如:
vardata={a:{b:{c:'ScriptOJ'}}}
safeGet(data,'a.b.c')//=>scriptoj
safeGet(data,'a.b.c.d')//=>返回undefined
safeGet(data,'a.b.c.d.e.f.g')//=>返回undefined
console.log('ScriptOJ')//=>列印ScriptOJ
答案:
constsafeGet=(o,path)=>{
try{
returnpath.split('.').rece((o,k)=>o[k],o)
}catch(e){
returnvoid666
}
}
六:判斷兩個矩形是否重疊
題目:用一個對象的數據來表示一個矩形的位置和大小:
{
x:100,
y:100,
width:150,
height:250
}
它表示一個寬為150高為250的矩形在頁面上的(100,100)的位置。
請你完成一個函數isOverlap可以接受兩個矩形作為參數,判斷這兩個矩形在頁面上是否重疊。例如:
constrect1={x:100,y:100,width:100,height:100}
constrect2={x:150,y:150,width:100,height:100}
isOverlap(rect1,rect2)//=>true
答案:
//原理:#/find-two-rectangles-overlap/
constisOverlap=(rect1,rect2)=>{
constl1={x:rect1.x,y:rect1.y}
constr1={x:rect1.x+rect1.width,y:rect1.y+rect1.height}
constl2={x:rect2.x,y:rect2.y}
constr2={x:rect2.x+rect2.width,y:rect2.y+rect2.height}
if(
l1.x>r2.x||
l2.x>r1.x||
l1.y>r2.y||
l2.y>r1.y
)returnfalse
returntrue
}
七:按下標插入
題目:現在有一個數組存放字元串數據:
['item1','item2','item3','item4','item5']
有另外一個數組存放一組對象:
[
{content:'section1',index:0},
{content:'section2',index:2}
]
它每個對象表示的是會往原來的數組的index坐標插入content數據(index不會重復):
01234
item1itme2item3item4item5
^^
||
section1section2
最後結果是:['section1','item1','item2','section2','item3','item4',
'item5']
請你完成injectSections函數,可以達到上述的功能:
injectSections(
['item1','item2','item3','item4','item5'],
[
{content:'section1',index:0},
{content:'section2',index:2}
]
)//=>['section1','item1','item2','section2','item3','item4',
'item5']
答案:
constinjectSections=(items,sections)=>{
/*需要插入坐標對應數據存放到map裡面*/
constsectionsMap=newMap(sections.map(({index,content})=>[index,
content]))
/*新建一個數組,然後往裡面push原來數組的數據*/
returnitems.rece((ret,item,index)=>{
/*push的時候先檢查map裡面有沒有,有的話先pushmap裡面的數據*/
if(sectionsMap.has(index))ret.push(sectionsMap.get(index))
/*再push原來的數據*/
ret.push(item)
returnret
},[])
}
八:數組拍平(二)
題目:編寫一個JavaScriptgenerator函數,接受一個僅包含數字的多維數組
,返回一個迭代器,可以遍歷得到它拍平以後的結果。例如:
constnumbers=flatten2([1,[[2],3,4],5])
numbers.next().value//=>1
numbers.next().value//=>2
numbers.next().value//=>3
numbers.next().value//=>4
numbers.next().value//=>5
答案:
function*flatten2(arr){
for(leti=0;i
constitem=arr[i]
/*yield*的使用可以大大簡化程序編寫*/
Array.isArray(item)?yield*flatten2(item):yielditem;
}
}
/*用flatten2來完成flatten也是很方便的*/
//constflatten=(arr)=>[...flatten2(arr)]
九:判斷兩個Set是否相同
題目:完成isSameSet函數,它接受了兩個Set對象作為參數,請你返回true/false來表明這兩個set
的內容是否完全一致,例如:
consta={}
constb=1
constc='ScriptOJ'
constset1=newSet([a,b,c])
constset2=newSet([a,c,b])
isSameSet(set1,set2)//=>true
答案:
//codefrom#/js-example.html
/*這道題不能簡單地使用sort,使用sort並不靠譜。因為Set裡面的內容可能有很多種類
*字元串、對象、數字,不同類型之間是不可對比的,所以排序結果並不會一致
*
*最好的方式是按照數學上集合相等的定義:
*A=B當且僅當A是B的子集並且B是A的子集。
*
*這種判斷方式還可以用在對象、map等其他數據類型的判斷當中。
*/
constisSameSet=(s1,s2)=>{
/*獲取一個集合所有的值,判斷另外一個集合是否全部包含該這些值*/
constisSame=(a,b)=>{
constvalues=[...a]
for(letvalofvalues){
/*及時跳出循環,可以降低演算法復雜度*/
if(!b.has(val))returnfalse
}
returntrue
}
/*a包含b,b包含a,那麼兩個集合相同*/
returnisSame(s1,s2)&&isSame(s2,s1)
}
/*By陳小俊*/
//constisSameSet=(set1,set2)=>
//[...set1].every((o)=>set2.has(o))&&
//[...set2].every((o)=>set1.has(o))
十:記憶化斐波那契函數(Memoization)
題目:斐波那契數列指的是類似於以下的數列:
1,1,2,3,5,8,13,....
也就是,第n個數由數列的前兩個相加而來:f(n)=f(n-1)+f(n-2)
請你完成fibonacci函數,接受n作為參數,可以獲取數列中第n個數,例如:
fibonacci(1)//=>1
fibonacci(2)//=>1
fibonacci(3)//=>2
...
測試程序會從按順序依次獲取斐波那契數列中的數,請注意程序不要超時,也不要添加額外的全局變數。
本題來源:《JavaScript語言精髓》
答案:
constfibonacci=((memo=[0,1])=>{
constfib=(n)=>{
letresult=memo[n]
if(typeofresult!=="number"){
result=fib(n-1)+fib(n-2)
memo[n]=result
}
returnresult
}
returnfib
})()
最後就是反應能力,臨場出現意外什麼的了,這就看你自己了,萬一自己一不留神說錯話了,大神給你指出來,請記得謝謝一定要謙虛!在這里小編也希望每一位web培訓班畢業的學員都能順利找到稱心的工作!
免責聲明:內容和圖片源自網路,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容
在互聯網時代,瀏覽器幾乎主宰著一切,而前端開發人員決定著瀏覽器的內容展現形式和信息的提供,是不可或缺的一部分。前端開發實際上具有很明顯的時代特徵,它在很大程度上決定著大眾的信息攝入,以及用戶讀取信息的有效方式。那麼今天小編為大家總結了一些web前端的面試題,希望對大家有幫助哦!
一:字體高亮函數
題目:請你完成highlight函數,可以把模版字元串中的插入內容替換掉,並且插入文檔以後顯示紅色。例如:
constyourName='ScriptOJ'
constmyName='Jerry'
document.body.innerHTML=highlight`Hello,${yourName}.Iam
${myName}.`
上面例子的頁面顯示如下:
0_1498033735172_upload-2abd65b1-1e98-46ba-b46f-df4188a036a5
請你完成highlight函數的編寫。
答案:
css:
.highlight{
color:red;
}
js:
//考察的是Taggedtemplateliterals的使用
//
#/en-US/docs/Web/JavaScript/Reference/Template_literals
consthighlight=(strings,...args)=>{
returnstrings.rece((str,cur,i)=>{
return`${str}${cur}${args[i]?`class="highlight">${args[i]}`:''}`
},'')
}
二:數組去重
題目:編寫一個函數unique(arr),返回一個去除數組內重復的元素的數組。例如:
unique([0,1,2,2,3,3,4])//=>[0,1,2,3,4]
unique([0,1,Ƈ',Ƈ',2])//=>[0,1,Ƈ',2]
答案:
constunique=(arr)=>[...newSet(arr)]
三:解析字串
題目:完成一個extractStr函數,可以把一個字元串中所有的:到.的子串解析出來並且存放到一個數組當中,例如:
extractStr('Mynameis:Jerry.Myageis:12.')//=>['Jerry',']
注意,:和.之間不包含:和.。也即是說,如果::abc..,則返回['abc']。
(本題來源:《JavaScriptCookbook》)
答案:·
constextractStr=(str)=>{
constret=str.match(/:([^:.])*?./g)||[]
returnret.map((subStr)=>subStr.replace(/[:.]/g,''))
}
四:spacify題目:
請你給字元串都添加上原型方法spacify,可以讓一個字元串的每個字母
G. Web前端面試的常見面試題匯總
今天小編要跟大家分享的文章是關於參加Web前端面試的常見面試題匯總。准備參加Web前端面試的小夥伴們來和小編一起看一看吧,希望本篇文章能夠對大家有所幫助。1.漸進增強與優雅降級
漸進增強
並不是一種技術,而是一種設計思想。各個瀏覽器的渲染能力各不相同,要做一個每個人都能看到的網頁、感受到的體驗都一致的網站幾乎不可能。但還是得網站的可訪問性,保證用戶在任何環境下都能正常訪問網頁得核心內容或能使用基本功能(避免網頁打不開、排版錯誤等),並為他們提供當前條件下最好的體驗,這就是漸進增強得核心思想。
優雅降級也是一種設計思想,為了保證在高版本瀏覽器中提供最好的體驗,碰到低版本瀏覽器再降級進行兼容處理,使其能正常瀏覽。
這兩種思想的區別在於:
1.漸進增強是向上兼容,優雅降級是向下兼容;
2.漸進增強是從簡單到復雜,優雅降級是從復雜到簡單;
3.漸進增強關注的是內容(保證核心內容),優雅降級關注的是瀏覽體驗(為了兼容低版本瀏覽器)
2.DOCTYPE
作用
DTD(DocumentTypeDefinition,文檔類型定義)是一系列的語法規則,用來定義XML或(X)HTML
的文檔類型。瀏覽器會使用它來判斷文檔類型,決定何種協議來解析,以及切換瀏覽模式。
DOCTYPE是用來聲明文檔類型和DTD
規范的,一個主要的用途便是文件的合法性驗證。如果文檔代碼不合法,那麼瀏覽器解析時便會出現一些差錯。
HTML5的文檔類型聲明:
HTML4.01Strict(HTML4.01嚴格模式)的DTD包含所有HTML
元素和屬性,但不包括展示性的和棄用的元素(如font),它的文檔類型聲明:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
標准模式與怪異模式
怪異模式(Quirks
Mode)用於模擬舊瀏覽器的行為。早期的網站並不會遵循完整的規范,隨著瀏覽器支持越來越多的規范,在那些舊的瀏覽器中開發的頁面在顯示時會被破壞。為了向後兼容,瀏覽器發明了怪異模式,一行錯誤或無效的
DOCTYPE都會觸發怪異模式。
瀏覽器使用文件開頭的DOCTYPE來決定用怪異模式處理或標准模式處理。DOCTYPE
可以確保不同瀏覽器以相同的方式解析文檔,以及執行相同的渲染模式。
怪異模式與標准模式的主要區別:
1.怪異模式的寬度和高度會包含padding和border。標准模式不包含,標准模式下可以通過設置box-sizing:
border-box將標准盒模型轉化成怪異模式下的盒模型。
2.怪異模式下,當內容超出容器高度時,會將容器拉伸,而不是溢出。
3.怪異模式下,在表格中的字體樣式(如font-size)不會繼承。
4.怪異模式下顏色值必須使用十六進制標記法。
3.語義化
HTML5
中的語義化就是讓元素、屬性或屬性值有含義,更准確地標記特定類型的內容。對元素語義化的目的是為了讓元素的語義和呈現分離,元素只負責文檔內容的結構與含義,而CSS
樣式控制內容的呈現,像元素,沒有語義但卻能將字體變粗,這類元素違背了語義化的目的,將會被廢棄。
優點
·使得HTML文檔結構清晰、布局合理、主體突出、可讀性更強。
·有利於SEO,搜索引擎根據標簽來確定上下文和各個關鍵字的權重。
·方便其他設備解析,如盲人閱讀器根據語義渲染網頁。
·有利於開發和維護,語義化更具可讀性,代碼更好維護,與CSS3關系更和諧。
語義化標簽
·
·footer內容的頁腳,通常包含該章節作者、版權數據或者與文檔相關的鏈接等信息;
·article
文檔、頁面、應用或網站中的獨立結構,是可獨立分配的、可復用的結構,如在發布中,它可能是論壇帖子、雜志或新聞文章、博客、用戶提交的評論、互動式組件,或者其他獨立的內容項目;
·nav描述一個含有多個超鏈接的區域,該區域包含跳轉到其他頁面或頁面內部其他部分的鏈接列表;
·section表示文檔中的一個區域(或節),比如,內容中的一個專題組;
·main定義文檔的主要內容,該內容在文檔中應當是獨一無二的,不包含任何在文檔中重復的內容,比如側邊欄,導航欄鏈接,版權信息,網站
logo,搜索框(搜索框作為文檔的主要內容);
·aside
表示一個和其餘頁面內容幾乎無關的部分,被認為是獨立於該內容的一部分且可以被單獨的拆分出來而不會影響整體。通常表現為側邊欄或嵌入內容。
4.超鏈接偽類
:link、:visited、:active和:hover的聲明順序是怎樣的?
:link表示未訪問的鏈接狀態;
:visited表示已訪問狀態;:active表示激活狀態(滑鼠按下);:hover表示懸停狀態。
推薦順序是LVHA,即:link:visited:hover:active。理由如下:
·當滑鼠懸停在未訪問的鏈接上時,:link和:hover都會命中,如果:hover在:link
之前聲明,那麼(:hover)就會被覆蓋;
·當滑鼠懸停在已訪問的連接上時,:visited和:hover都會命中,如果:hover在:visited
之前聲明,那麼(:hover)就會被覆蓋;
·當滑鼠單擊鏈接時,:active和:hover都會命中,我們大多是想讓:hover只在懸停時展示樣式,按下滑鼠時使用:active
樣式,因此:active在:hover之後聲明;
·綜上,:hover應在:link和:visited之後,在:active之前,因此active在最後。而:link和
:visited兩者的順序無所謂,互不影響。
5.CSS常見的長度單位
CSS中除了px長度單位之外,還有下面幾個長度單位:
·pc六分之一英寸,1pc=12pt=1/6*1in=16px;
·pt一磅,72分之一英寸。1pt=1/12_1pc=1/72_1in≈1.33px;
·in一英寸,1in=2.54cm=96px;
·ex在含有「X」字母的字體中,它是該字體的小寫字母的高度。對於很多字體來說,1ex≈0.5em;
·em1em等於父級元素的字體大小,2em就是父級元素字體大小的二倍;
·rem當用在根元素()的font-size上面時,它代表了它的初始值;
·ch代表元素所用字體font中「0」這一字形的寬度;
·vh1vh相當於視口高度的1%,100vh就是視口的高度;
·vw1vw相當於視口寬度的1%,100vw就是視口的寬度;
·vmax視口高度vw和寬度vh兩者中的最小值
·vmin視口高度vw和寬度vh兩種中的最大值;
·%相對於父級元素的大小來確定;
參考:CSS
CSSpercentage[2]
6.事件對象
冒泡與捕獲
事件冒泡與捕獲是事件處理的兩種機制,主要描述當在一個元素上有兩個相同類型的事件處理器被激活會發生什麼。
在點擊子元素時,瀏覽器運行了兩種不同的階段:捕獲階段和冒泡階段。捕獲階段的行為:
·瀏覽器檢查元素的最外層祖先,是否在捕獲階段中注冊了一個onclick事件處理程序,如果是,則運行它;
·
然後,它移動到中單擊元素的下一個祖先元素,並執行相同的操作,然後是單擊元素再下一個祖先元素,依此類推,直到到達實際點擊的元素;
而冒泡與捕獲恰恰相反:
·瀏覽器檢查實際點擊的元素是否在冒泡階段中注冊了一個onclick事件處理程序,如果是,則運行它;
·然後它移動到下一個直接的祖先元素,並做同樣的事情,然後是下一個,等等,直到它到達元素;
而現代瀏覽器在默認情況下,所有事件處理程序都在冒泡階段進行注冊。因此上面代碼在點擊子元素時會先執行子元素綁定的事件,然後向上冒泡,觸發父元素綁定的事件。
addEventListener函數的第三個參數是個布爾值。含義:
·當布爾值是false時(這也是默認值),表示向上冒泡觸發事件;
·當布爾值是true時,表示向下捕獲觸發事件;
不能冒泡的事件
有些事件是不會冒泡的。比如:
·blur元素失去焦點時觸發,focusout事件也是失去焦點時觸發,但可以冒泡;
·focus元素獲取焦點時觸發;
·mouseenter滑鼠移動到元素上時會觸發該事件,與之對應的是mouseover事件,但會冒泡;
·mouseleave滑鼠離開元素時觸發,與之對應的是mouseout,但會冒泡;
事件冒泡可以讓我們利用事件委託,尤其是處理大量子元素時,如果給每個子元素都綁定事件,這是不優雅的,可以將事件綁定到父元素上,並讓子節點上發生的事件冒泡到父節點上,利用
e.target屬性可以獲取到當前觸發事件的子元素。
事件對象中的方法
·stopPropagation()阻止事件冒泡,當設置後,點擊該元素時父元素綁定的事件就不會再觸發;
·preventDefault()阻止默認事件的發生;
·stopImmediatePropagation()它用來阻止監聽同一事件的其他事件監聽器被調用以及阻止事件冒泡,比如給同一個div
元素綁定多個click事件(使用addEventListener方法可以注冊多個),當在第二個事件函數中調用
stopImmediatePropagation方法時,點擊div元素時,後面注冊的click將不會被觸發,而且還會阻止事件冒泡;
比如下面的例子,給p綁定多個click事件,在第二個事件函數中調用stopImmediatePropagation,第三個click
事件就不會觸發,因為也阻止了冒泡,因此父元素的click事件也不會觸發。
paragraph
H. 如何面試Web前端開發工程師
近來幾個月,一直在努力尋找前端戰友,未果,一路的招聘經歷下來,心生不少感慨,
一直都很小心翼翼的,怕錯失了高人,又更加怕失誤把關不夠招到不合格的同學進來公司,對公司對項目造成某些影響。
面試前端工程師對我來說是一件非常有意思的事,因為面試過程很大程度上也是自我提升的過程。無論大公司還是小公司,之所以在如何招聘到真正有能力的
前端工程師方面會遇到同樣的問題,就是因為負責招聘的那些人不知道自己公司需要什麼樣的人,結果問問題時也問不到點子上。經過這幾年在行業里的摸索,我總
結出了自己的一套很有效的面試前端工程的方法。
有的應聘者說我不好對付,但留給他們這樣的印象也並非我所願。我覺得之所以他們說我不好對付,主要是因為我問他們問題時問得太細了。以前我曾專門寫過一些
東西,告訴應聘者怎麼才能通過我的面試(Survivinganinterviewwithme)以及優秀的前面工程師應該具備什麼樣的素質(What
makesagoodfrontend
engineer?),而我的面試可以說完全是按照那兩篇文章的標准進行的。我不會問一些特別偏門的問題,也不認為出幾道邏輯題就能考出人的真實水平。我
唯一的想法就是確定你能否勝任我們要招的這個職位。為此,我需要簡單地考察如下幾個方面。
基本知識
我們生活在互聯網時代,你想知道的任何事情幾乎都能在15分鍾內找到相關信息。可是,能找到信息並不等於你會使用它。我認為所有前端工程師至少都應
該掌握某些基本的知識,才能有效地完成自己的工作。如果一遇到問題,就停下工作上網四處搜索解決方案,怎麼可能保證按期完成工作呢?聽聽,還有誰在說「我
不知道,但我可以上網搜到。」請這些同學把手舉起來,讓大家認識一下(immediatelyraisesaflagfor
me.)。下面我列出一些基本的知識點,這些都是我認為一名前端工程師(無論工作年頭長短)在沒有任何外來幫助的情況應該知道的。
DOM結構——兩個節點之間可能存在哪些關系以及如何在節點之間任意移動。
DOM操作——怎樣添加、移除、移動、復制、創建和查找節點。
事件——怎樣使用事件以及IE和DOM事件模型之間存在哪些主要差別。
XMLHttpRequest——這是什麼、怎樣完整地執行一次GET請求、怎樣檢測錯誤。
嚴格模式與混雜模式——如何觸發這兩種模式,區分它們有何意義。
盒模型——外邊距、內邊距和邊框之間的關系,IE8以下版本的瀏覽器中的盒模型有什麼不同。
塊級元素與行內元素——怎麼用CSS控制它們、它們怎樣影響周圍的元素以及你覺得應該如何定義它們的樣式。
浮動元素——怎麼使用它們、它們有什麼問題以及怎麼解決這些問題。
HTML與XHTML——二者有什麼區別,你覺得應該使用哪一個並說出理由。
JSON——它是什麼、為什麼應該使用它、到底該怎麼使用它,說出實現細節來。
重申一下,上述這些知識點都應該是你應該「想都不用想」的東西。我一開始問的所有問題都是想摸清你對所有這些領域知識的掌握程度。雖然上面列出的這些知識點並沒有面面俱到,但我覺得你至少應該掌握這些,才有可能跟我坐到一間辦公室里來。
少量提問
我非常贊同面試者問的問題越少越好。反復問應聘者各種問題既不公平,也很無聊。我在任何一次面試中,通常只問三個大問題,但每個問題又會涉及我所能想到的多個方面。回答每個大問題一般要經過幾個步驟,這樣我就可以在每個步驟中穿插著問一些小問題。比如說:
現在有一個正顯示著Yahoo!股票價格的頁面。頁面上有一個按鈕,你可以單擊它來刷新價格,但不會重新載入頁面。請你描述一下實現這個功能的過程,假設伺服器會負責准備好正確的股票價格數據。
這個問題牽扯到一組我想要考察的基本知識點:DOM結構、DOM操作、事件處理、XHR和JSON。如果我要求你對換一種處理股票價格的方式,或者
讓你在頁面中顯示其他信息,就可以把更多的知識點包括進來。對於經驗比較豐富應聘者,我也可以自如地擴展要考察的知識范圍,最簡單像JOSN與XML的區
別、安全問題、容量問題,等等。
我還希望應聘者給出的任何解決方案中都不要使用庫。我想看到最原生態的代碼,你就當頁面中沒有包含任何庫。你說你對哪個庫了解多少多少,但我不能把
關於庫的知識作為評判能力的因素,因為庫是會隨時間變化的。我需要的是真正理解庫背後的機制,特別是能夠徒手寫出一個自己的庫的人。
解決問題
做為一名前端工程師,最值得高興的事莫過於解決同一個問題會有很多種不同的方法,而你要做的就是找出最合適的方法來。我在提問的時候,經常會在應聘
者解釋完一種方法後問他們還有沒有第二種方法。此時我會跟他們說,假設你的這個方法由於種種原因被否決了,那麼你還能不能給出另一種方法。這樣做可以達到
兩個目的。
首先,可以測試出他們是否在毫無意義地復述書本中的東西。不能不承認,某些人確實有過目不忘的天賦,聽他們在那裡滔滔不絕地講,你會覺得他們什麼都
明白。可是,只要一跟這些人談到怎麼查找方案無效的原因,以及能否拿出一個新方案來,他們往往就傻眼了。這時候,如果我聽到「我不明白這個方案為什麼不夠
好」之類的反問,心裡立刻就明白我的問題已經超出了他們的能力范圍,而他們只是想拿自己死記硬背的結論來矇混過關。
其次,可以測試出他們已經掌握的(還是那句話,「想都不用想」)瀏覽器技術知識。如果他們對瀏覽器平台的核心知識有較好的理解,想出解決同一問題的不同方案根本沒有那麼難。
對一名前端工程師來說,這絕對是最重要的能力。前端工程師在工作中遇到本該如此卻並未如此的難題(說你啦,IE6),應該說是一件很平常的事。一個方案無效就無計可施的人,做不了前端工程師。
考核應聘者解決問題能力的另一層原因,與我的個人喜好有關。在搞清楚應聘者知道什麼不知道什麼之後,我就會想著問一個他們知識領域之外的問題。這樣
做的目的,就是想看看他們怎樣運用已有的知識解決新問題。在解決問題的每一步,我也准備了一些提示,以防有人會卡殼打艮(在我面前15分鍾一言不發,對我
評價這個人毫無幫助)。我真正感興趣的,是他們能夠從上一步前進到下一步。我希望看到一個人就在我眼前學到新知識。
注意:所有問題都與瀏覽器技術相關。我不相信出幾道抽象的邏輯題,就能夠考出某人解決Web技術問題的能力。在我看來,這無異於讓素描大師畫肖像(或者讓劉翔跟博爾特同場競技),沒有意義,也得不到任何有價值的信息。
有激情
要成為一名優秀的前端工程師,最重要的莫過於對自己做的事要有激情。我們技能都不是從學校中或者從研討會上學來的,因此前端工程師必須具備自學能
力。瀏覽器技術的變化可謂日新月異,所以也只有不斷提升自己的技能才做得到與時俱進。我雖然不能強迫誰必須多看博客、不斷學習,但想應聘前端工程師的人恐
怕還是必須這么做的。
你怎麼知道誰對這種工作有沒有激情?實際上非常簡單。我只問一個簡單的問題:「目前你對什麼Web技術最感興趣?」這個問題永遠不會過期,而且也幾
乎不可能出錯除非你答不上來。就眼下來說,我希望你對這個問題給出的技術中包括WebSocket、HTML、WebGL、客戶端資料庫,等等。只有
對Web開發充滿激情的人,才會堅持不懈地學習新知識、掌握新技能;這些人才是我真正想要的。當然,我會讓他們詳細解釋自己提到的技術,以保證他們不是隨
口說了幾個時髦的新詞彙。
最後一點
計算機科學或者Web設計方面的知識當然也有用,但那都是基本知識之外的東西。只要基本知識在那兒了,一切就都有了基礎,想擴充知識面也不難。可
是,如果等到正式上班以後,還得從頭學習基本技能,那種難度是不可同日而語的。另外,高級前端工程師與一般工程師相比,肯定需要掌握更多的技能。而面試幾
乎沒有經驗大學畢業生,同樣也會有一套完全不同的程序。我在這篇文章里列出來的都是一些最基本的東西。
對於那些還沒有多少面試經驗的人,我總是喜歡告訴他們,面試完了只要問自己一個問題就行:你想以後跟這個人在一起共事嗎?如果不管為什麼,回答是不,那就是不。
*免責聲明:轉載文章和圖片均來自公開網路,版權歸作者本人所有,推送文章除非無法確認,我們都會註明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯系刪除或授權事宜。
I. web前端實用技巧助成功面試
相信大家在web前端的面試中都遇到很多技術問題吧,今天北大青鳥web前端培訓專家給大家分享10個常見的web前端面試題,希望大家能夠在面試時更加從容不迫。
1.HTML5為什麼只需要寫?
html5不基於SGML(標准通用語言),因此不需要對DTD(文檔類型定義)進行引用,但需要doctype來規范瀏覽器的行為(讓瀏覽器按照它們應該的方式運行)
而html4.01基於SGML,所以需要對DTD進行應用,才能告知瀏覽器文檔所使用的文檔類型。
2.頁面導入樣式時,使用link和@import有什麼區別?
1).link屬於XHTML標簽,而@import是CSS提供的;
2).頁面被載入的時,link會同事被載入,而@import引用的CSS會等到頁面被載入完再載入;
3).import只有在IE5以上才能被識別,而link是XHTML標簽,無兼容問題;
4).link方式的樣式的權重>@import的權重
3.常見的瀏覽器內核有哪些?
IE瀏覽器的內核:Trident、
Mozilla的Gecko、
Chrome的Blink(WebKit的分支)、
Opera內核原為Presto,現為Blink
4.簡述一下你對HTML語義化的理解?
HTML語義化是指根據內容的結構化(內容語義化),選擇合適的標簽(代碼語義化)便於開發者閱讀和寫出更優雅的代碼的同時讓瀏覽器的爬蟲和機器很好地解析。
HTML語義化的主要目的是:
1).為了在沒有css的情況下,頁面也能呈現出很好地內容結構、代碼結構
2).有利於用戶體驗
3).有利於SEO和搜索引擎建立良好的溝通。
4).方便其他設備解析以意義的方式來渲染網頁、
5).便於團隊開發和維護,增加可讀性。
5.xhtml和html有什麼區別
HTML是一種基本的WEB網頁設計語言,XHTML是一個基於XML的置標語言
最主要的不同:
XHTML元素必須被正確地嵌套。
XHTML元素必須被關閉。
標簽名必須用小寫字母。
XHTML文檔必須擁有根元素
6.行內元素有哪些?塊級元素有哪些?CSS的盒模型?
塊級元素:divph1h2h3h4formul
行內元素:abbrispaninputselect
Css盒模型:內容,border,margin,padding
7.前端頁面有哪三層構成,分別是什麼?作用是什麼?
結構層Html表示層CSS行為層js
8.標簽上title與alt屬性的區別是什麼?
Alt當圖片不顯示是用文字代表。
Title為該屬性提供信息
9.你如何對網站的文件和資源進行優化?
文件合並
文件最小化/文件壓縮
使用CDN託管
緩存的使用
10.解釋jsonp的原理,以及為什麼不是真正的ajax
動態創建script標簽,回調函數
Ajax是頁面無刷新請求數據操作
以上這10個web前端開發技巧希望能給你帶來幫助,如果你對web前端開發有更多優秀的想法,歡迎去北大青鳥web前端培訓機構實地訪查,歡迎加入北大青鳥大家庭。