去哪兒2015年校招筆試

目錄結構以下:javascript

零、寒暄

這段時間陸陸續續的跑一些筆試,時間比較倉促,可貴有機會整理,下面跟你們分享一下23號去哪兒的筆試題。很少說,來正題。css

去哪兒一共有7道題,前三道是必答題,後面有兩道是前端必答題,還有最後兩道是測試必答題,其餘人選答,也就是說個人前端崗位,5道題必答,2道題選答。時間100分鐘。html

1、題目

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,div一、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

2、總結

本人前端菜鳥,能力有限。其實去哪兒的筆試題仍是蠻基礎的,可是本身有些題目作的有瑕疵。把題目列出來,主要是給你們一個參考。另外,題目答案本身作的不必定正確,歡迎留言拍磚。代碼確定有大量須要優化的地方,但願各位提出意見,你們共同進步,祝各位基友軟妹子找到理想工做。前端

此文章發佈在本人博客園rookiebob,如需轉載本文,請務必註明來源:http://www.cnblogs.com/rookiebob/,有些勘誤我會及時更正,爲了不對您的誤解,請訪問原文!
相關文章
相關標籤/搜索