前言:
最近離職了,工作快三年了,第二次離職,兩次離職都帶着沉重的心態,或許還有點依依不舍,或許。。。說多了都是淚,哈哈;
這個時間點工作也不好找,投了很多家公司,發現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之前,永遠不要太相信自己,一句話,接着找,哈哈。