2014年前端面試經歷


前言:

最近離職了,工作快三年了,第二次離職,兩次離職都帶着沉重的心態,或許還有點依依不舍,或許。。。說多了都是淚,哈哈;

這個時間點工作也不好找,投了很多家公司,發現90%的公司在招移動端人才;

面試了近十家公司,有移動端、互聯網電商、金融證券、醫療、廣告、還有創業型公司,接下來講的主要是一些面試題。

 

面試題:

1、下面代碼運行結果

var bl = false;

$.ajax(url, {
    //...
    success: function(){
        bl = true;
    }
});

while ( !bl ) {
    alert( bl );
}
alert( bl );

// 結果大家自己去想,這道題是面試官臨時寫的,簡單直接,很好的考察你是否理解javascript中的運行機制,很棒的一道面試題

 

2、擴展Array原型,編寫一個去除數組重復項的方法

// 算法一,兩層循環,性能差
Array.prototype.unique = function(){
    var len = this.length, i;

    // 兩兩比較(數組長度大於1)
    while ( --len > 0 ) {
        i = len;
        while ( --i >= 0 ) {                    // 前一項索引最小為0
            if ( this[len] === this[i] ) {      // 最后一項與前一項進行比較
                //this.splice(i, 1);            // this.length自動減一,刪除前面的重復項
                this.splice(len, 1);            // this.length自動減一,刪除后面的重復項
                i--;
            }
        }
    }
    return this;
};

// 算法二,性能優化
Array.prototype.unique = function(){
    var i, key, len = this.length,
        cache = {},        // 緩存對象
        ret = [];    // 要返回的數組

    for ( i = 0; i < len; i++ ) {
        key = typeof this[i] + this[i];
        if ( cache[key] !== 1 ) {
            cache[key] = 1;
            ret.push( this[i] );
        }
    }
    
    return ret;;
};

// 解決方法三,直接使用jQuery.unique工具函數
var arr = [1,3,4,6,9,10,4,6];
arr = jQuery.unique( arr );    // [1, 3, 4, 6, 9, 10]

 

3、手動實現原生數組Array.prototype.sort方法的實現

Array.prototype.sort = function( filter ){
    var i, temp, len = this.length;

    // 兩兩比較(數組長度大於1)
    while ( --len > 0 ) {
        i = len;        
        while ( --i >= 0 ) {                    // 前一項索引最小為0
            temp = this[len];
            
            // 不傳遞過濾回調,則默認是從小到大排序
            // 回調函數的返回值大於0,則是從小到大排序,否則不進行操作,默認為從大到小
            if ( !filter && this[i] > this[len] || filter && filter(this[i], this[len]) > 0 ) {
                this[len] = this[i];
                this[i] = temp;
            }
        }
    }
    return this;
};


//快速排序法
function quickSort ( arr ) {
    // 必要條件
    if ( arr.length <= 1 ) { return arr; }

    var left = [], right = [],
        length = arr.length,
        pivotIndex = Math.floor( length / 2 ),
        
        // 中間項
        pivot = arr.splice( pivotIndex, 1 )[0]; //每執行一次,原數組arr數組length--

    // 實際的數組長度為 length-1
    for ( var i = 0; i < length - 1; i++ ) {
        if ( arr[i] < pivot ) {     // 小於中間項的放左邊
            left.push( arr[i] );
        }
        else {
            right.push( arr[i] );   // 大於中間項的放右邊
        }
    }

    // 遞歸
    return quickSort( left ).concat( pivot, quickSort( right ) );
}

 

4、其他算術題

// 數的階乘
function factorial( num ) {
    var ret = num;
    while ( --num ) {
        ret = ret * num;
    }
    return ret;
}
factorial( 10 ); // 3628800

// 對數值型值保留2位小數
var num = 100.567;
var num2 = 100;
num.toFixed(2); //    100.57
num2.toFixed(2); // 100.00


// 求一個數組中隨機出現的項
function randomArr ( arr ) {
    // Math.random()           最小值接近0,最大接近1,0.00000000000001    0.9999999999999
    // Math.random()*length    最小值接近0,最大接近length
    // Math.floor( Math.random() * arr.length ) 舍去小數部分,得到的就是隨機出現的數組索引
    var randomIdx = Math.floor( Math.random() * arr.length );
    return arr[randomIdx];    // 返回隨機項
}

 

總結:

出去面試盡量請年假,在你沒確定得到滿意的offer之前,永遠不要太相信自己,一句話,接着找,哈哈。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM