【長坑慎入】2014阿里前端線上筆試題解答-2
No.9
題目:
實現如下圖所示的佈局,要求:
- sidebar 固定寬度200px,content和header寬度自適應;
- 當window寬度小於600px時,變成三行佈局。
預設如下
寬度小於600px時如下
下面是html結構:
<div class='header'>
<h1>header</h1>
</div>
<div class="sidebar>
<h1">sidebar"</h1>
</div>
<div class="content">
<h1>content</h1>
</div>
請寫出其css程式碼:(提示,可以使用media query來檢測瀏覽器視窗寬度)
解答:
這裡涉及到CSS的media query檢測,這裡有篇文章詳細介紹了其中的引數型別,而這篇文章則饒有性質的探討了不同裝置下應該如何編寫media query,有興趣的讀者可以詳細看一下。針對這個題來說,只要用到 screen and (min-width)
即可。程式碼如下:
h1 {
margin: 0;
}
section div{
height: 100px;
}
section div:nth-of-type(n+2) {
margin-top: 20px;
}
.header {
background-color: red;
}
.sidebar {
background-color: green;
}
.content {
background-color: blue;
}
@media screen and (min-width: 600px) {
.sidebar {
width: 200px;
position: absolute;
}
.content {
margin-left: 220px;
}
}
這裡還需要注意一個問題:sidebar的寬度固定,而content填充剩餘的全部。針對這種一邊固定而一邊液態的情況,最好的解決辦法就是將固定的部分浮動出來,然後將液態的部分使用margin來填充固態部分浮動而產生的空隙。這裡使用了絕對定位,以滿足題目中的要求。
No.10
題目:
寫一段指令碼,實現:當頁面上任意一個連結被點選的時候,alert出這個連結在頁面上的順序號,如第一個連結則alert(1), 依次類推。
解答:
起初做這個題目的時候簡單的認為所有連結應該指的就是 <a>
,所以很快寫出了程式碼如下:
var body = document.getElementsByTagName("body")[0]
, links = document.getElementsByTagName("a")
, len = links.length
, foo = function(e){
if (e.target.tagName.toLowerCase() !== 'a') //注意這裡的tagName是大寫
return
for (var i = 0; i < len; i++) {
if (links[i] === e.target)
alert(i + 1)
}
}
body.addEventListener('click', foo, false)
但是後來看到網上有一個本題的解答:最英俊的程式設計師 阿里巴巴2013年校園招聘前端工程師筆試題詳解,解答中使用了 document.links
的方法,查了一下發現這個陣列返回的是所有有 href
的和標籤,才知道連結不止有一種,那麼可以把程式碼改成如下的樣式:
var body = document.getElementsByTagName("body")[0]
, links = document.getElementsByTagName("a")
, len = links.length
, foo = function(e){
var tagName = e.target.tagName.toLowerCase()
if ((tagName === 'a' || tagName === 'area') && e.target.href) {
for (var i = 0; i < len; i++)
if (links[i] === e.target) {
alert(i + 1)
}
}
}
body.addEventListener('click', foo, false)
當然也可以採用網上最英俊的程式設計師的解答,在頁面中每一個連結都繫結事件監聽,只不過這樣顯得有些效率不高,特別是在頁面連結過多的情況下。個人認為相同效果的事件監聽還是在父級元素上繫結為好,要不就可惜了JS冒泡的監聽機制啊。
No.14
題目:
(new Date).getTime()
和 +new Date()
都可以取到當前時間戳,它們的實現原理是什麼,哪個效率更高?
解答:
這個題目挺有趣,起初我認為應該是第二個寫法的效率更高……因為寫起來更容易,但是經過實際的檢驗我意識到了我的錯誤,第一種寫法所耗的時間基本上只有第二種寫法的一半。後來查閱了MDN:Date.getTime 發現這個函式本身實際上等價於 valueOf
,那麼結論也呼之欲出了。因為第一種方法實際上直接呼叫了 valueOf
,而第二種方法涉及到JS內部的型別轉換(可以參見我的這篇文章:【WEB前端】百度前端面試經歷小研究1——JavaScript 型別轉換),儘管最終的結果也是呼叫了 valueOf
函式,但是畢竟有個轉換的過程,所以效率理應比前者要來的低下吧。
No.16
題目:
請寫一個 getParents 方法讓它可以獲取某一個 DOM 元素的所有父親節點。
解答:
第一反應就是想到jQuery裡面的 getParents()
,自己想了一下JS中可以獲取 parentNode
,所以應該迴圈獲取就可以了。解答如下:
function getParents(ele) {
var matched = []
// 防止獲取 document
while ( (ele = ele.parentNode) && ele.nodeType !== 9) {
matched.push(ele)
}
return matched
}
No.20
題目:
有一個陣列,其中儲存的都是小寫英文字串,現在要把它按照除了第一個字母外的字元的字典順序(字典順序就是按首字母從a-z順序排列,如果首字母相同則按第二個字母……)排序,請編寫程式碼
例:["abd","cba","ba",],排序後["ba","cba","abd"]
解答:
這個題目是專門凸顯JS函數語言程式設計特點的題目,結果原作者居然用C語言解答了……捂臉。這裡給出JS的寫法,十分簡潔明瞭。
var bySecLetter = function(x, y) {
if (typeof x === 'string' && typeof y === 'string') {
var a = x.slice(1)
, b = y.slice(1)
if (a > b) return 1
else if (a < b) return -1
}
return 0
}
var a = ["abd","cba","ba"]
a.sort(bySecLetter)
這裡只需要呼叫sort的比較函式,大於返回正數,小於返回負數,等於返回0即可。而作為字串,本身的比較順序就是字典順序,所以只需要擷取從第二個字元開始的字串進行比較,就可以得出比較結果。更多關於sort函式的資訊可以參見MDN的連結。
相關文章
- 【長坑慎入】2014阿里前端線上筆試題解答-1阿里前端筆試
- 2014亞馬遜線上筆試題目亞馬遜筆試
- 美團網2014校招筆試題及解答(長沙站+哈爾濱站)薦筆試
- 2014亞馬遜線上筆試題目及解決方案(MMChess問題)亞馬遜筆試
- 熱乎的前端筆試/面試/跳坑筆記(指南)前端筆試面試筆記
- 前端筆試&面試爬坑系列---演算法前端筆試面試演算法
- 前端筆試&面試爬坑系列—演算法前端筆試面試演算法
- 阿里巴巴筆試題阿里筆試
- 後端小白的VUE入門筆記, 前端高能慎入後端Vue筆記前端
- 前端筆試題面試題記錄前端筆試面試題
- 荔枝FM的前端筆試題前端筆試
- 各大網際網路公司2014前端筆試面試題–JavaScript篇前端筆試面試題JavaScript
- 前端筆試題面試題記錄(下)前端筆試面試題
- 前端入門-day2(常見css問題及解答)前端CSS
- 各大網際網路公司2014前端筆試面試題–HTML,CSS篇前端筆試面試題HTMLCSS
- 找工作學習筆記2------阿里巴巴實習生筆試題(含答案)筆記阿里筆試
- 阿里巴巴公司DBA筆試題阿里筆試
- 測試面試題目求解答面試題
- BAT及各大網際網路公司2014前端筆試面試題:JavaScript篇BAT前端筆試面試題JavaScript
- 線上問題排查,一不小心踩到阿里的 arthas坑了阿里
- 前端面試&筆試&錯題指南(三)前端面試筆試
- 前端面試&筆試&錯題指南(四)前端面試筆試
- 前端面試&筆試&錯題指南(二)前端面試筆試
- BAT及各大網際網路公司2014前端筆試面試題:HTML/CSS篇BAT前端筆試面試題HTMLCSS
- 【筆試技巧】碰到遊戲設計題型怎麼解答?有哪些思路?筆試遊戲設計
- 2016微軟4月線上筆試題微軟筆試
- 阿里巴巴 D2 前端會議筆記阿里前端筆記
- 2017華為筆試題2筆試
- 人工智慧:風口之上泡沫之中謹慎入坑人工智慧
- 前端高頻筆試題之HTML/CSS部分前端筆試HTMLCSS
- [譯] HTTP/2 常見問題解答HTTP
- 一道前端面試題?求大神解答前端面試題
- 前端筆試題面試題記錄(上)| 掘金技術徵文前端筆試面試題
- Swift面試題收集和個人解答(長期更新)Swift面試題
- 關於一道前端筆試題的思考前端筆試
- 社招中級前端筆試面試題總結前端筆試面試題
- 2014年亞馬遜線上筆試題目及解法_9_24(字串編輯距離升級版)亞馬遜筆試字串
- web前端工程師面試題10條必會筆試題Web前端工程師面試題筆試