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之前,永远不要太相信自己,一句话,接着找,哈哈。