目錄結構如下:
零、寒暄
這段時間陸陸續續的跑一些筆試,時間比較倉促,難得有機會整理,下面跟大家分享一下23號去哪兒的筆試題。不多說,來正題。
去哪兒一共有7道題,前三道是必答題,后面有兩道是前端必答題,還有最后兩道是測試必答題,其他人選答,也就是說我的前端崗位,5道題必答,2道題選答。時間100分鍾。
一、題目
1.題目是用英文寫的,我就用本人拙劣的英語水平給大家翻譯一下,有可能題目都翻譯得不對,大家見諒,哈哈。
大概就是設計一個函數,要求返回不小於最小長度的字符串,字符串長度不夠的,用傳進的字符補全字符串。
padStart(string,minLength,padChar)
string:需要出現在返回結果的末尾
minLength:必須值,可以為零或負,此時返回完整的字符串
padChar:用於插入字符串前以補全字符串達到最小的字符串長度
return:返回拼接后的字符串
例如padStart("7",3,"0") returns "007"
padStart("2010",3,"0") retruns "2010"
這個題目只要是考一下基本的英文翻譯,知識點考點還行,如果各位需要原稿英文題目,在下面留言,我會貼出來。
看下面代碼:
function padStart(string, minLength, padChar) { var strLen = string.length, result = ""; if (strLen <= 0 || strLen == minLength || strLen > minLength) { result = string; } else if (strLen < minLength) { var offset = minLength - strLen; for (var i = 0, len = offset; i < len; i++) { if (i == 0) { result = padChar + string; } else { result = padChar + result; } } } return result; } console.log(padStart("2010", 3, "0")); //2010 console.log(padStart("7", 4, "0")); //0007
2.編寫一個簡單的命令行參數解析函數,命令行的參數名用“-”加英文或數字組成,例如“-name”,后面跟着的部分是具體的值,命令行參數之間,參數與值之間用一個或多個連續的空格分隔。雙引號中的內容作為一個整體看待,不進行解析。返回結果是被分隔開的額一個個參數和值。假定命令行的內容只會包含英文、數字、空格、雙引號和減號。
例如,參數為:
-name Lily -age 21 -school "University of Oxford"
返回結果為:
[-name Lily,-age 21,-school "University of Oxford"]
看下面代碼:
function getParam(str){ var reg=/"[\w\s-]*"/g,result=[],m=0; var regResult=str.match(reg); //輸入字符串,返回按“-”分開后的數組 function toSplit(myStr){ var newStr = myStr.split("-"); newStr.shift(); for (var i = 0, len = newStr.length; i < len; i++) { newStr[i] = "-" + newStr[i]; } return newStr; } if(!regResult){ result=toSplit(str); }else{ var replaceStr=str.replace(/"[\w\s-]*"/g,"&");//將包含的“”部分用&代替 var tempArr=toSplit(replaceStr); for(var i=0,l=tempArr.length;i<l;i++){ if(tempArr[i].indexOf("&")!=-1){ tempArr[i]=tempArr[i].replace(/[&]/g,regResult[m++]);//將&用原字符串代替 } } result=tempArr; } return result; } var testStr='-name Lily -age 21 -school "Univrsity of -a Oxford" -address "-beijing -xichengqu 1-"'; console.log(getParam(testStr)); //["-name Lily ", "-age 21 ", "-school "Univrsity of -a Oxford" ", "-address "-beijing -xichengqu 1-""]
3.編寫一個diff函數,用來比較兩個字符串的差異,如果字符在第一個字符串中存在,在第二個字符串中不存在則輸出減號和相應的字符;如果字符在第二個字符串中存在,在第一個字符串中不存在則輸出加號和相應的字符;如果存在相同的子字符串,則子字符串中的內容都不需要輸出,字符的比較結果用逗號分隔,每個差異的字符串都要找出來。要求充分利用相同的子字符串,盡可能優化算法保證輸出的結果最短。作為參數的字符串中只會包含英文字母。
假設函數原型為:
String diff(String a,String b)
如:
a="abc",b="aabcbc",則輸出為"+a,+b,+c";
a="abcde",b="bcdef",則輸出為“-a,+f”;
a="aba",b="aababb",則輸出為“+a,+b,+b”
【ps:這個題目的答案是我筆試的時候寫的,現在驗證不對,以下只是一個參考】我覺得這個題目自己在“要求充分利用相同的子字符串,盡可能優化算法保證輸出的結果最短”做的是不夠的,或者說沒有達到題目的要求,希望大家提點意見,把自己的代碼直接貼到我博客下面,萬分感謝。
看下面代碼:
function diff(strA, strB) { var arrA = strA.split(""), arrB = strB.split(""), tempStr = "", strInA = "", strInB = "", result = ""; for (var i = 0, lenA = arrA.length; i < lenA; i++) { if (strB.indexOf(arrA[i]) == -1) { //A有B沒有 strInA = strInA + "-" + arrA[i] + ","; } else { tempStr = tempStr + arrA[i]; } } for (var j = 0, lenB = arrB.length; j < lenB; j++) { if (tempStr.indexOf(arrB[j]) == -1) { strInB = strInB + "+" + arrB[j] + ","; } } result = strInA + strInB; result = result.slice(0, -1); return result; } console.log(diff("abce", "abcd")); //-e,+d
4.css的題目
div寬度為100px,邊框為1px,div1、div2為兄弟元素,要求分別畫出以下三種情況中二者的在頁面中的表現
a) .div1{position:absolute;float:left} .div2{position:absolute;float:right}
b) .div1{postition:relative;float:left} .div2{position:relative;float:right}
c) .div1{position:absolute;float:right} .div2{position:relative;float:left}
這道題目當時不知道為啥,被整懵了,其實很簡單的,就考查絕對定位和相對定位,那個是真正的脫離普通流,即是否在頁面中占據位置。
上圖:

5.請實現javascript中的indexOf功能,判斷一i個字符串a中是否包含另一個字符串b。
a)如果包含,需要返回匹配字符串b的位置
b)如果不包含,需要返回-1
例如 indexOf("hello","el") returns 1;
看下面代碼:
function indexOf(strA, strB) { var lenA = strA.length, lenB = strB.length; if (lenA < lenB) { return -1; } else if (strA === strB) { return 0; } else { for (var j = 0; j < lenA; j++) { if (strA.charAt(j) == strB[0] && strA.substr(j, lenB) == strB) { return j; } } return -1; } } console.log(indexOf("hello", "el")); //1
二、總結
本人前端菜鳥,能力有限。其實去哪兒的筆試題還是蠻基礎的,但是自己有些題目做的有瑕疵。把題目列出來,主要是給大家一個參考。另外,題目答案自己做的不一定正確,歡迎留言拍磚。代碼肯定有大量需要優化的地方,希望各位提出意見,大家共同進步,祝各位基友軟妹子找到理想工作。
此文章發布在本人博客園rookiebob,如需轉載本文,請務必注明來源:http://www.cnblogs.com/rookiebob/,有些勘誤我會及時更正,為了避免對您的誤解,請訪問原文!