標籤:style blog http color io os java ar strong
零、寒暄
這段時間陸陸續續的跑一些筆試,時間比較倉促,難得有機會整理,下面跟大家分享一下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")); //2010console.log(padStart("7", 4, "0")); //007
2.編寫一個簡單的命令列參數解析函數,命令列的參數名用“-”加英文或數字組成,例如“-name”,後面跟著的部分是具體的值,命令列參數之間,參數與值之間用一個或多個連續的空格分隔。雙引號中的內容作為一個整體看待,不進行解析。返回結果是被分隔開的額一個個參數和值。假定命令列的內容只會包含英文、數字、空格、雙引號和減號。例如,參數為:-name Lily -age 21 -school ""University of Oxford"返回結果為:[-name Lily,-age 21,-school "University of Oxford"]看下面代碼:
function getParam(str) { var newStr = str.split("-"); console.log(newStr); for (var i = 0, len = newStr.length; i < len; i++) { newStr[i] = "-" + newStr[i] } newStr.shift(); return newStr;}var result = getParam("-name Lily -age 21 -school ‘University of Oxford‘");console.log(result);
3.編寫一個diff函數,用來比較兩個字串的差異,如果字元在第一個字串中存在,在第二個字串中不存在則輸出減號和相應的字串;如果字元在第二個字串中存在,在第一個字串中不存在則輸出加號和相應的字串;如果存在相同的子字串,則子字串中的內容都不需要輸出,字元的比較結果用逗號分隔,每個差異的字串都要找出來。要求充分利用相同的子字串,儘可能最佳化演算法保證輸出的結果最短。作為參數的字串中只會包含英文字母。 假設函數原型為:String diff(String a,String b)如:a="abc",b="aabcbc",則輸出為"+a,+b,+c";a="abcde",b="bcdef",則輸出為“-a,+f”我覺得這個題目自己在“要求充分利用相同的子字串,儘可能最佳化演算法保證輸出的結果最短”做的是不夠的,或者說沒有達到題目的要求,希望大家提點意見,把自己的代碼直接貼到我部落格下面,萬分感謝。看下面代碼:
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 (lenA == lenB) { 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
三、總結
本人前端菜鳥,能力有限。其實去哪兒的筆試題還是蠻基礎的,但是自己有些題目做的有瑕疵。把題目列出來,主要是給大家一個參考。另外,題目答案自己做的不一定正確,歡迎留言拍磚。代碼肯定有大量需要最佳化的地方,希望各位提出意見,大家共同進步,祝各位基友軟妹子找到理想工作。
去哪兒2015年校招筆試