BAT及各大互联网公司2014前端笔试面试题

#2.JavaScript的数据类型都有什么?基本数据类型:String,boolean,Number,Undefined, Null引用数据类型:Object(Array,Date,RegExp,Function)那么问题来了,如何判断某变量是否为数组数据类型?方法一.判断其是否具有“数组性质”,如slice()方法。可自己给该变量定义slice方法,故有时会失效方法二.obj instanceof Array 在某些IE版本中不正确方法三.方法一二皆有漏洞,在ECMA Script5中定义了新方法Array.isArray(), 保证其兼容性,最好的方法如下:if(typeof Array.isArray==="undefined"){Array.isArray = function(arg){return Object.prototype.toString.call(arg)==="[object Array]"}; }3.已知ID的Input输入框,希望获取这个输入框的输入值,怎么做?(不使用第三方框架)document.getElementById(“ID”).value4.希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)var domList = document.getElementsByTagName(‘input’)var checkBoxList = [];var len = domList.length;  //缓存到局部变量while (len--) {  //使用while的效率会比for循环更高  if (domList[len].type == ‘checkbox’) {  checkBoxList.push(domList[len]);  }}5.设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黑色(不使用第三方框架)var dom = document.getElementById(“ID”);dom.innerHTML = “xxxx”dom.style.color = “#000”6.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?直接在DOM里绑定事件:

在JS里通过onclick绑定:xxx.onclick = test通过事件添加进行绑定:addEventListener(xxx, ‘click’, test)那么问题来了,Javascript的事件流模型都有什么?“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡7.什么是Ajax和JSON,它们的优缺点。Ajax是异步JavaScript和XML,用于在Web页面中实现异步数据交互。优点: 可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量 避免用户不断刷新或者跳转页面,提高用户体验缺点: 对搜索引擎不友好( 要实现ajax下的前后退功能成本较大 可能造成请求数的增加 跨域问题限制JSON是一种轻量级的数据交换格式,ECMA的一个子集优点:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)8.看下列代码输出为何?解释原因。var a;alert(typeof a); // undefinedalert(b); // 报错解释:Undefined是一个只有一个值

的数据类型,这个值就是“undefined”,在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined。而b由于未声明将报错。注意未申明的变量和声明了未赋值的是不一样的。9.看下列代码,输出什么?解释原因。12var a = null;alert(typeof a); //object解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回”object”。10.看下列代码,输出什么?解释原因。var undefined;undefined == null; // true1 == true; // true2 == true; // false0 == false; // true0 == ''; // trueNaN == NaN; // false[] == false; // true[] == ![]; // trueundefined与null相等,但不恒等(===)一个是number一个是string时,会尝试将string转换为number尝试将boolean转换为number,0或1尝试将Object转换成number或string,取决于另外一个对比量的类型所以,对于0、空字符串的判断,建议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。那么问题来了,看下面的代码,输出什么,foo的值为什么?var foo = "11"+2-"1";console.log(foo);console.log(typeof foo);执行完后foo的值为111,foo的类型为String。11.看代码给答案。var a = new Object();a.value = 1;b = a;b.value = 2;alert(a.value);答案:2(考察引用数据类型细节)12.已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。答案:alert(stringArray.join(“”))已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。function combo(msg){var arr=msg.split("-");for(var i=1;i

”中的{

$id}替换成10,{$name}替换成Tony (使用正则表达式)答案:”

”.replace(/{\$id}/g, ’10′).replace(/{\$name}/g, ‘Tony’);16.为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数escapeHtml,将, &, “进行转义function escapeHtml(str) {return str.replace(/[”&]/g, function(match) {switch (match) {case “”:return “>”;case “&”:return “&”;case “\””:return “"”;}});}17.foo = foo||bar ,这行代码是什么意思?为什么要这样写?答案:if(!foo) foo = bar; //如果foo存在,值不变,否则把bar的值赋给foo。短路表达式:作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。18.看下列代码,将会输出什么?(变量声明提升)var foo = 1;function(){console.log(foo);var foo = 2;console.log(foo);}答案:输出undefined 和 2。上面代码相当于:var foo = 1;function(){var foo;console.log(foo); //undefinedfoo = 2;console.log(foo); // 2; }函数声明与变量声明会被JavaScript引擎隐式地提升到当前作用域的顶部,但是只提升名称不会提升赋值部分。19.用js实现随机选取10–100之间的10个数字,存入一个数组,并排序。var iArray = []; funtion getRandom(istart, iend){var iChoice = istart - iend +1;return Math.floor(Math.random() * iChoice + istart;}for(var i=0; i

定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。答案:function serilizeUrl(url) {var result = {};url = url.split("?")[1];var map = url.split("&");for(var i = 0, len = map.length; i .split("=")[0]] = map[i].split("=")[1];}return result;}23.正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不同?匹配邮箱的正则表达式?答案:当使用RegExp()构造函数的时候,不仅需要转义引号(即\”表示”),并且还需要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。 邮箱的正则匹配:var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;24.看下面代码,给出输出结果。for(var i=1;i

//argument.callee()表示fn()result[n]=arguments.callee(n-1)+arguments.callee(n-2);return result[n];}}}中级Javascript:1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚考察点2:是否知道如何判断一个变量是什么类型的考察点3:递归算法的设计// 方法一:Object.prototype.clone = function(){var o = this.constructor === Array ? [] : {};for(var e in this){o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];}return o;}//方法二:/*** 克隆一个对象* @param Obj* @returns*/function clone(Obj) { var buf; if (Obj instanceof Array) { buf = []; //创建一个空的数组 var i = Obj.length; while (i--) { buf[i] = clone(Obj[i]); } return buf; }else if (Obj instanceof Object){ buf = {}; //创建一个空对象 for (var k in Obj) { //为这个对象添加新的属性 buf[k] = clone(Obj[k]); } return buf; }else{ //普通变量直接赋值return Obj; } }2.如何消除一个数组里面重复的元素?var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];function deRepeat(){var newArr=[];var obj={};var index=0;var l=arr.length;for(var i=0;i

//argument.callee()表示fn()result[n]=arguments.callee(n-1)+arguments.callee(n-2);return result[n];}}}中级Javascript:1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚考察点2:是否知道如何判断一个变量是什么类型的考察点3:递归算法的设计// 方法一:Object.prototype.clone = function(){var o = this.constructor === Array ? [] : {};for(var e in this){o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];}return o;}//方法二:/*** 克隆一个对象* @param Obj* @returns*/function clone(Obj) { var buf; if (Obj instanceof Array) { buf = []; //创建一个空的数组 var i = Obj.length; while (i--) { buf[i] = clone(Obj[i]); } return buf; }else if (Obj instanceof Object){ buf = {}; //创建一个空对象 for (var k in Obj) { //为这个对象添加新的属性 buf[k] = clone(Obj[k]); } return buf; }else{ //普通变量直接赋值return Obj; } }2.如何消除一个数组里面重复的元素?var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];function deRepeat(){var newArr=[];var obj={};var index=0;var l=arr.length;for(var i=0;i

setInterval(function() {self.wow(); }, 500);}}MadDog.prototype = new Dog(); //for testvar dog = new Dog();dog.yelp();var madDog = new MadDog();madDog.yelp();4.下面这个ul,如何点击每一列的时候alert其index?(闭包)

  • 这是第一条
  • 这是第二条
  • 这是第三条

答案:// 方法一:var lis=document.getElementById('2223').getElementsByTagName('li');for(var i=0;i -1) {result.push(allDoms[i]);}}}}}//如果是标签选择器else if(regResult[3]) {var d

oms = document.getElementsByTagName(regResult[3].toLowerCase());if(doms) {result = converToArray(doms);}}return result;}function converToArray(nodes){var array = null; try{ array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器 }catch(ex){array = new Array(); for( var i = 0 ,len = nodes.length; i ‘h e l l o w o r l d’String.prototype.spacify = function(){return this.split('').join(' ');};接着上述问题答案提问,1)直接在对象的原型上添加方法是否安全?尤其是在Object对象上。(这个我没能答出?希望知道的说一下。) 2)函数声明与函数表达式的区别?答案:在js中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。8.定义一个log方法,让它可以代理console.log的方法。可行的方法一:function log(msg) {console.log(msg);}log("hello world!") // hello world!

如果要传入多个参数呢?显然上面的方法不能满足要求,所以更好的方法是:123function log(){console.log.apply(console, arguments);};到此,追问apply和call方法的异同。答案:对于apply和call两者在作用上是相同的,即是调用一个对象的一个方法,以另一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。但两者在参数上有区别的。对于第一个参数意义都一样,但对第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。 如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3]) 。9.在Javascript中什么是伪数组?如何将伪数组转化为标准数组?答案:伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。假设接第八题题干,我们要给每个log方法添加一个”(app)”前缀,比如’hello world!’ ->’(app)hello world!’。方法如下:function log(){var args = Array.prototype.slice.call(arguments); //为了使用unshift数组方法,将argument转化为真正的数组args.unshift('(app)');console.log.apply(console, args);};10.对作用域上下文和this的理解,看下列代码:var User = {count: 1,getCount: function() {return this.count;}};console.log(User.getCount()); // what?var func = User.getCount;console.log(func()); // what?问两处console输出什么?为什么?答案是1和undefined。func是在winodw的上下文中被执行的,所以会访问不到count属性。继续追问,那么如何确保Uesr总是能访问到func的上下文,即正确返回1。正确的方法是使用Function.prototype.bind。兼容各个浏览器完整代码如下:Function.prototype.bind = Function.prototype.bind || function(context){var self = this;return function(){return self.apply(context, arguments);};}var func = User.getCount.bind(User);console.log(func());11.原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不同?如何用原生JS实现Jq的ready方法?window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。/** 传递函数给whenReady()* 当文档解析完毕且为操

作准备就绪时,函数作为document的方法调用*/var whenReady = (function() { //这个函数返回whenReady()函数var funcs = []; //当获得事件时,要运行的函数var ready = false; //当触发事件处理程序时,切换为true//当文档就绪时,调用事件处理程序function handler(e) {if(ready) return; //确保事件处理程序只完整运行一次//如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好if(e.type === 'onreadystatechange' && document.readyState !== 'complete') {return;}//运行所有注册函数//注意每次都要计算funcs.length//以防这些函数的调用可能会导致注册更多的函数for(var i=0; i

间变量  var exp = new Date();   exp.setTime(exp.getTime() + days*24*60*60*1000); //设置过期时间为days天  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } function getCookie(name){  var result = "";  var myCookie = ""+document.cookie+";";   var searchName = "+name+"=";  var startOfCookie = myCookie.indexOf(searchName);  var endOfCookie;  if(satrtOfCookie != -1){    startOfcookie += searchName.length;    endOfCookie = myCookie.indexOf(";",startOfCookie);    result = (myCookie.substring(startOfCookie,endOfCookie));  }  return result;}(function(){  var oTips = document.getElementById('tips');//假设tips的id为tips  var page = {  check: function(){//检查tips的cookie是否存在并且允许显示    var tips = getCookie('tips');    if(!tips || tips == 'show') return true;//tips的cookie不存在    if(tips == "never_show_again") return false;  },  hideTip: function(bNever){    if(bNever) setcookie('tips', 'never_show_again', 365);    oTips.style.display = "none";//隐藏  },  showTip: function(){  oTips.style.display = "inline";//显示,假设tips为行级元素  },  init: function(){    var _this = this;    if(this.check()){    _this.showTip();    setcookie('tips', 'show', 1);  }  oTips.onclick = function(){    _this.hideTip(true);  };  }  };page.init();})();14.说出以下函数的作用是?空白区域应该填写什么?//define (function(window){function fn(str){this.str=str;}fn.prototype.format = function(){var arg = ______;return this.str.replace(_____,function(a,b){return arg[b]||"";});}window.fn = fn;})(window);//use(function(){var t = new fn('

{1}{2}

');console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));})();答案:访函数的作用是使用format函数将函数的参数替换掉{0}这样的内容,返回一个格式化后的结果:第一个空是:arguments第二个空是:/\{(\d+)\}/ig15.用面向对象的Javascript来介绍一下自己。(没答案哦亲,自己试试吧)答案: 对象或者Json都是不错的选择哦,觉得题目还ok的亲点个推荐哦,题量会不断增加。面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项。据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。我总共想出了三种算法来实现这个目的:Array.prototyp

ype.unique1 = function(){var n = []; //一个新的临时数组for(var i = 0; i

模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答,或者网上有很多答案,可以自行搜索。  一、Java基础  1.String类为什么是final的。  2.HashMap的源码,实现原理,底层结构。  3.反射中,Class.forName和classloader的区别  4.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。  5.Java中的队列都有哪些,有什么区别。  6.Java的内存模型以及GC算法  7.Java7、Java8的新特性(baidu问的,好BT)  8.Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高  9.Java内存泄露的问题调查定位:jmap,jstack的使用等等  二、框架  1.struts1和struts2的区别  2.struts2和springMVC的区别  3.spring框架中需要引用哪些jar包,以及这些jar包的用途  4.srpingMVC的原理  5.springMVC注解的意思  6.spring中beanFactory和ApplicationContext的联系和区别  7.spring注入的几种方式  8.spring如何实现事物管理的  9.springIOC和AOP的原理  10.hibernate中的1级和2级缓存的使用方式以及区别原理  11.spring中循环注入的方式  三、多线程  1.Java创建线程之后,直接调用start()方法和run()的区别  2.常用的线程池模式以及不同线程池的使用场景  3.newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。  4.多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。或者一个类的static构造方法加上synchronized之后的锁的影响。  5.了解可重入锁的含义,以及ReentrantLock 和synchronized的区别  6.同步的数据结构,例如concurrentHashMap的源码理解以及内部实现原理,为什么他是同步的且效率高  7.atomicinteger和volatile等线程安全操作的关键字的理解和使用  8.线程间通信,wait和notify  9.定时线程的使用  10.场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率。  四、网络通信  1.http是无状态通信,http的请求方式有哪些,可以自己定义新的请求方式么。  2.socket通信,以及长连接,分包,连接异常断开的处理。  3.socket通信模型的使用,AIO和NIO。  4.socket框架netty的使用,以及NIO的实现原理,为什么是异步非阻塞。  5.同步和异步,阻塞和非阻塞。  五、Linux  1.常用的linux下的命令

  2.大的log文件中,统计异常出现的次数、排序,或者指定输出多少行多少列的内容。(主要考察awk)  3.linux下的调查问题思路:内存、CPU、句柄数、过滤、查找、模拟POST和GET请求等等场景  4.shell脚本中#!的作用  六、数据库MySql  1.MySql的存储引擎的不同  2.单个索引、联合索引、主键索引  3.Mysql怎么分表,以及分表后如果想按条件分页查询怎么办(如果不是按分表字段来查询的话,几乎效率低下,无解)  4.分表之后想让一个id多个表是自增的,效率实现  5.MySql的主从实时备份同步的配置,以及原理(从库读主库的binlog),读写分离  6.写SQL语句。。。  7.索引的数据结构,B+树  8.事物的四个特性,以及各自的特点(原子、隔离)等等,项目怎么解决这些问题  七、设计模式(写代码)  1.单例模式:饱汉、饿汉。以及饿汉中的延迟加载  2.工厂模式、装饰者模式、观察者模式。  八、算法  1.使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题)  2.两个有序数组的合并排序  3.一个数组的倒序  4.计算一个正整数的正平方根  5.说白了就是常见的那些查找排序算法(排序转载:http://mp.weixin.qq.com/s?__biz= ... 48a3&scene=5#rd)  九、缓存  1.为什么用缓存,用过哪些缓存,redis和memcache的区别  2.redis的数据结构  3.redis的持久化方式,以及项目中用的哪种,为什么  4.redis集群的理解,怎么动态增加或者删除一个节点,而保证数据不丢失。(一致性哈希问题)  以上包含了众多互联网公司的面试大众问题,剩下的就是具体项目具体问了。写博客自我总结用,如有问题,敬请原谅!

{$id} {$name}
{$id} {$id}_{$name}

#2.JavaScript的数据类型都有什么?基本数据类型:String,boolean,Number,Undefined, Null引用数据类型:Object(Array,Date,RegExp,Function)那么问题来了,如何判断某变量是否为数组数据类型?方法一.判断其是否具有“数组性质”,如slice()方法。可自己给该变量定义slice方法,故有时会失效方法二.obj instanceof Array 在某些IE版本中不正确方法三.方法一二皆有漏洞,在ECMA Script5中定义了新方法Array.isArray(), 保证其兼容性,最好的方法如下:if(typeof Array.isArray==="undefined"){Array.isArray = function(arg){return Object.prototype.toString.call(arg)==="[object Array]"}; }3.已知ID的Input输入框,希望获取这个输入框的输入值,怎么做?(不使用第三方框架)document.getElementById(“ID”).value4.希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)var domList = document.getElementsByTagName(‘input’)var checkBoxList = [];var len = domList.length;  //缓存到局部变量while (len--) {  //使用while的效率会比for循环更高  if (domList[len].type == ‘checkbox’) {  checkBoxList.push(domList[len]);  }}5.设置一个已知ID的DIV的html内容为xxxx,字体颜色设置为黑色(不使用第三方框架)var dom = document.getElementById(“ID”);dom.innerHTML = “xxxx”dom.style.color = “#000”6.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?直接在DOM里绑定事件:

在JS里通过onclick绑定:xxx.onclick = test通过事件添加进行绑定:addEventListener(xxx, ‘click’, test)那么问题来了,Javascript的事件流模型都有什么?“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡7.什么是Ajax和JSON,它们的优缺点。Ajax是异步JavaScript和XML,用于在Web页面中实现异步数据交互。优点: 可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量 避免用户不断刷新或者跳转页面,提高用户体验缺点: 对搜索引擎不友好( 要实现ajax下的前后退功能成本较大 可能造成请求数的增加 跨域问题限制JSON是一种轻量级的数据交换格式,ECMA的一个子集优点:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)8.看下列代码输出为何?解释原因。var a;alert(typeof a); // undefinedalert(b); // 报错解释:Undefined是一个只有一个值

的数据类型,这个值就是“undefined”,在使用var声明变量但并未对其赋值进行初始化时,这个变量的值就是undefined。而b由于未声明将报错。注意未申明的变量和声明了未赋值的是不一样的。9.看下列代码,输出什么?解释原因。12var a = null;alert(typeof a); //object解释:null是一个只有一个值的数据类型,这个值就是null。表示一个空指针对象,所以用typeof检测会返回”object”。10.看下列代码,输出什么?解释原因。var undefined;undefined == null; // true1 == true; // true2 == true; // false0 == false; // true0 == ''; // trueNaN == NaN; // false[] == false; // true[] == ![]; // trueundefined与null相等,但不恒等(===)一个是number一个是string时,会尝试将string转换为number尝试将boolean转换为number,0或1尝试将Object转换成number或string,取决于另外一个对比量的类型所以,对于0、空字符串的判断,建议使用 “===” 。“===”会先判断两边的值类型,类型不匹配时为false。那么问题来了,看下面的代码,输出什么,foo的值为什么?var foo = "11"+2-"1";console.log(foo);console.log(typeof foo);执行完后foo的值为111,foo的类型为String。11.看代码给答案。var a = new Object();a.value = 1;b = a;b.value = 2;alert(a.value);答案:2(考察引用数据类型细节)12.已知数组var stringArray = [“This”, “is”, “Baidu”, “Campus”],Alert出”This is Baidu Campus”。答案:alert(stringArray.join(“”))已知有字符串foo=”get-element-by-id”,写一个function将其转化成驼峰表示法”getElementById”。function combo(msg){var arr=msg.split("-");for(var i=1;i

”中的{

$id}替换成10,{$name}替换成Tony (使用正则表达式)答案:”

”.replace(/{\$id}/g, ’10′).replace(/{\$name}/g, ‘Tony’);16.为了保证页面输出安全,我们经常需要对一些特殊的字符进行转义,请写一个函数escapeHtml,将, &, “进行转义function escapeHtml(str) {return str.replace(/[”&]/g, function(match) {switch (match) {case “”:return “>”;case “&”:return “&”;case “\””:return “"”;}});}17.foo = foo||bar ,这行代码是什么意思?为什么要这样写?答案:if(!foo) foo = bar; //如果foo存在,值不变,否则把bar的值赋给foo。短路表达式:作为”&&”和”||”操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。18.看下列代码,将会输出什么?(变量声明提升)var foo = 1;function(){console.log(foo);var foo = 2;console.log(foo);}答案:输出undefined 和 2。上面代码相当于:var foo = 1;function(){var foo;console.log(foo); //undefinedfoo = 2;console.log(foo); // 2; }函数声明与变量声明会被JavaScript引擎隐式地提升到当前作用域的顶部,但是只提升名称不会提升赋值部分。19.用js实现随机选取10–100之间的10个数字,存入一个数组,并排序。var iArray = []; funtion getRandom(istart, iend){var iChoice = istart - iend +1;return Math.floor(Math.random() * iChoice + istart;}for(var i=0; i

定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。答案:function serilizeUrl(url) {var result = {};url = url.split("?")[1];var map = url.split("&");for(var i = 0, len = map.length; i .split("=")[0]] = map[i].split("=")[1];}return result;}23.正则表达式构造函数var reg=new RegExp(“xxx”)与正则表达字面量var reg=//有什么不同?匹配邮箱的正则表达式?答案:当使用RegExp()构造函数的时候,不仅需要转义引号(即\”表示”),并且还需要双反斜杠(即\\表示一个\)。使用正则表达字面量的效率更高。 邮箱的正则匹配:var regMail = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/;24.看下面代码,给出输出结果。for(var i=1;i

//argument.callee()表示fn()result[n]=arguments.callee(n-1)+arguments.callee(n-2);return result[n];}}}中级Javascript:1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚考察点2:是否知道如何判断一个变量是什么类型的考察点3:递归算法的设计// 方法一:Object.prototype.clone = function(){var o = this.constructor === Array ? [] : {};for(var e in this){o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];}return o;}//方法二:/*** 克隆一个对象* @param Obj* @returns*/function clone(Obj) { var buf; if (Obj instanceof Array) { buf = []; //创建一个空的数组 var i = Obj.length; while (i--) { buf[i] = clone(Obj[i]); } return buf; }else if (Obj instanceof Object){ buf = {}; //创建一个空对象 for (var k in Obj) { //为这个对象添加新的属性 buf[k] = clone(Obj[k]); } return buf; }else{ //普通变量直接赋值return Obj; } }2.如何消除一个数组里面重复的元素?var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];function deRepeat(){var newArr=[];var obj={};var index=0;var l=arr.length;for(var i=0;i

//argument.callee()表示fn()result[n]=arguments.callee(n-1)+arguments.callee(n-2);return result[n];}}}中级Javascript:1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚考察点2:是否知道如何判断一个变量是什么类型的考察点3:递归算法的设计// 方法一:Object.prototype.clone = function(){var o = this.constructor === Array ? [] : {};for(var e in this){o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];}return o;}//方法二:/*** 克隆一个对象* @param Obj* @returns*/function clone(Obj) { var buf; if (Obj instanceof Array) { buf = []; //创建一个空的数组 var i = Obj.length; while (i--) { buf[i] = clone(Obj[i]); } return buf; }else if (Obj instanceof Object){ buf = {}; //创建一个空对象 for (var k in Obj) { //为这个对象添加新的属性 buf[k] = clone(Obj[k]); } return buf; }else{ //普通变量直接赋值return Obj; } }2.如何消除一个数组里面重复的元素?var arr=[1,2,3,3,4,4,5,5,6,1,9,3,25,4];function deRepeat(){var newArr=[];var obj={};var index=0;var l=arr.length;for(var i=0;i

setInterval(function() {self.wow(); }, 500);}}MadDog.prototype = new Dog(); //for testvar dog = new Dog();dog.yelp();var madDog = new MadDog();madDog.yelp();4.下面这个ul,如何点击每一列的时候alert其index?(闭包)

  • 这是第一条
  • 这是第二条
  • 这是第三条

答案:// 方法一:var lis=document.getElementById('2223').getElementsByTagName('li');for(var i=0;i -1) {result.push(allDoms[i]);}}}}}//如果是标签选择器else if(regResult[3]) {var d

oms = document.getElementsByTagName(regResult[3].toLowerCase());if(doms) {result = converToArray(doms);}}return result;}function converToArray(nodes){var array = null; try{ array = Array.prototype.slice.call(nodes,0);//针对非IE浏览器 }catch(ex){array = new Array(); for( var i = 0 ,len = nodes.length; i ‘h e l l o w o r l d’String.prototype.spacify = function(){return this.split('').join(' ');};接着上述问题答案提问,1)直接在对象的原型上添加方法是否安全?尤其是在Object对象上。(这个我没能答出?希望知道的说一下。) 2)函数声明与函数表达式的区别?答案:在js中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。8.定义一个log方法,让它可以代理console.log的方法。可行的方法一:function log(msg) {console.log(msg);}log("hello world!") // hello world!

如果要传入多个参数呢?显然上面的方法不能满足要求,所以更好的方法是:123function log(){console.log.apply(console, arguments);};到此,追问apply和call方法的异同。答案:对于apply和call两者在作用上是相同的,即是调用一个对象的一个方法,以另一个对象替换当前对象。将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。但两者在参数上有区别的。对于第一个参数意义都一样,但对第二个参数: apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。 如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3]) 。9.在Javascript中什么是伪数组?如何将伪数组转化为标准数组?答案:伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。假设接第八题题干,我们要给每个log方法添加一个”(app)”前缀,比如’hello world!’ ->’(app)hello world!’。方法如下:function log(){var args = Array.prototype.slice.call(arguments); //为了使用unshift数组方法,将argument转化为真正的数组args.unshift('(app)');console.log.apply(console, args);};10.对作用域上下文和this的理解,看下列代码:var User = {count: 1,getCount: function() {return this.count;}};console.log(User.getCount()); // what?var func = User.getCount;console.log(func()); // what?问两处console输出什么?为什么?答案是1和undefined。func是在winodw的上下文中被执行的,所以会访问不到count属性。继续追问,那么如何确保Uesr总是能访问到func的上下文,即正确返回1。正确的方法是使用Function.prototype.bind。兼容各个浏览器完整代码如下:Function.prototype.bind = Function.prototype.bind || function(context){var self = this;return function(){return self.apply(context, arguments);};}var func = User.getCount.bind(User);console.log(func());11.原生JS的window.onload与Jquery的$(document).ready(function(){})有什么不同?如何用原生JS实现Jq的ready方法?window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕。/** 传递函数给whenReady()* 当文档解析完毕且为操

作准备就绪时,函数作为document的方法调用*/var whenReady = (function() { //这个函数返回whenReady()函数var funcs = []; //当获得事件时,要运行的函数var ready = false; //当触发事件处理程序时,切换为true//当文档就绪时,调用事件处理程序function handler(e) {if(ready) return; //确保事件处理程序只完整运行一次//如果发生onreadystatechange事件,但其状态不是complete的话,那么文档尚未准备好if(e.type === 'onreadystatechange' && document.readyState !== 'complete') {return;}//运行所有注册函数//注意每次都要计算funcs.length//以防这些函数的调用可能会导致注册更多的函数for(var i=0; i

间变量  var exp = new Date();   exp.setTime(exp.getTime() + days*24*60*60*1000); //设置过期时间为days天  document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } function getCookie(name){  var result = "";  var myCookie = ""+document.cookie+";";   var searchName = "+name+"=";  var startOfCookie = myCookie.indexOf(searchName);  var endOfCookie;  if(satrtOfCookie != -1){    startOfcookie += searchName.length;    endOfCookie = myCookie.indexOf(";",startOfCookie);    result = (myCookie.substring(startOfCookie,endOfCookie));  }  return result;}(function(){  var oTips = document.getElementById('tips');//假设tips的id为tips  var page = {  check: function(){//检查tips的cookie是否存在并且允许显示    var tips = getCookie('tips');    if(!tips || tips == 'show') return true;//tips的cookie不存在    if(tips == "never_show_again") return false;  },  hideTip: function(bNever){    if(bNever) setcookie('tips', 'never_show_again', 365);    oTips.style.display = "none";//隐藏  },  showTip: function(){  oTips.style.display = "inline";//显示,假设tips为行级元素  },  init: function(){    var _this = this;    if(this.check()){    _this.showTip();    setcookie('tips', 'show', 1);  }  oTips.onclick = function(){    _this.hideTip(true);  };  }  };page.init();})();14.说出以下函数的作用是?空白区域应该填写什么?//define (function(window){function fn(str){this.str=str;}fn.prototype.format = function(){var arg = ______;return this.str.replace(_____,function(a,b){return arg[b]||"";});}window.fn = fn;})(window);//use(function(){var t = new fn('

{1}{2}

');console.log(t.format('http://www.alibaba.com','Alibaba','Welcome'));})();答案:访函数的作用是使用format函数将函数的参数替换掉{0}这样的内容,返回一个格式化后的结果:第一个空是:arguments第二个空是:/\{(\d+)\}/ig15.用面向对象的Javascript来介绍一下自己。(没答案哦亲,自己试试吧)答案: 对象或者Json都是不错的选择哦,觉得题目还ok的亲点个推荐哦,题量会不断增加。面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项。据我所知,百度、腾讯、盛大等都在面试里出过这个题目。 这个问题看起来简单,但是其实暗藏杀机。 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解。我总共想出了三种算法来实现这个目的:Array.prototyp

ype.unique1 = function(){var n = []; //一个新的临时数组for(var i = 0; i

模式,算法,缓存等几个模块,由于问题太多,下面先列出问题,之后有时间在写文章解答,或者网上有很多答案,可以自行搜索。  一、Java基础  1.String类为什么是final的。  2.HashMap的源码,实现原理,底层结构。  3.反射中,Class.forName和classloader的区别  4.session和cookie的区别和联系,session的生命周期,多个服务部署时session管理。  5.Java中的队列都有哪些,有什么区别。  6.Java的内存模型以及GC算法  7.Java7、Java8的新特性(baidu问的,好BT)  8.Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高  9.Java内存泄露的问题调查定位:jmap,jstack的使用等等  二、框架  1.struts1和struts2的区别  2.struts2和springMVC的区别  3.spring框架中需要引用哪些jar包,以及这些jar包的用途  4.srpingMVC的原理  5.springMVC注解的意思  6.spring中beanFactory和ApplicationContext的联系和区别  7.spring注入的几种方式  8.spring如何实现事物管理的  9.springIOC和AOP的原理  10.hibernate中的1级和2级缓存的使用方式以及区别原理  11.spring中循环注入的方式  三、多线程  1.Java创建线程之后,直接调用start()方法和run()的区别  2.常用的线程池模式以及不同线程池的使用场景  3.newFixedThreadPool此种线程池如果线程数达到最大值后会怎么办,底层原理。  4.多线程之间通信的同步问题,synchronized锁的是对象,衍伸出和synchronized相关很多的具体问题,例如同一个类不同方法都有synchronized锁,一个对象是否可以同时访问。或者一个类的static构造方法加上synchronized之后的锁的影响。  5.了解可重入锁的含义,以及ReentrantLock 和synchronized的区别  6.同步的数据结构,例如concurrentHashMap的源码理解以及内部实现原理,为什么他是同步的且效率高  7.atomicinteger和volatile等线程安全操作的关键字的理解和使用  8.线程间通信,wait和notify  9.定时线程的使用  10.场景:在一个主线程中,要求有大量(很多很多)子线程执行完之后,主线程才执行完成。多种方式,考虑效率。  四、网络通信  1.http是无状态通信,http的请求方式有哪些,可以自己定义新的请求方式么。  2.socket通信,以及长连接,分包,连接异常断开的处理。  3.socket通信模型的使用,AIO和NIO。  4.socket框架netty的使用,以及NIO的实现原理,为什么是异步非阻塞。  5.同步和异步,阻塞和非阻塞。  五、Linux  1.常用的linux下的命令

  2.大的log文件中,统计异常出现的次数、排序,或者指定输出多少行多少列的内容。(主要考察awk)  3.linux下的调查问题思路:内存、CPU、句柄数、过滤、查找、模拟POST和GET请求等等场景  4.shell脚本中#!的作用  六、数据库MySql  1.MySql的存储引擎的不同  2.单个索引、联合索引、主键索引  3.Mysql怎么分表,以及分表后如果想按条件分页查询怎么办(如果不是按分表字段来查询的话,几乎效率低下,无解)  4.分表之后想让一个id多个表是自增的,效率实现  5.MySql的主从实时备份同步的配置,以及原理(从库读主库的binlog),读写分离  6.写SQL语句。。。  7.索引的数据结构,B+树  8.事物的四个特性,以及各自的特点(原子、隔离)等等,项目怎么解决这些问题  七、设计模式(写代码)  1.单例模式:饱汉、饿汉。以及饿汉中的延迟加载  2.工厂模式、装饰者模式、观察者模式。  八、算法  1.使用随机算法产生一个数,要求把1-1000W之间这些数全部生成。(考察高效率,解决产生冲突的问题)  2.两个有序数组的合并排序  3.一个数组的倒序  4.计算一个正整数的正平方根  5.说白了就是常见的那些查找排序算法(排序转载:http://mp.weixin.qq.com/s?__biz= ... 48a3&scene=5#rd)  九、缓存  1.为什么用缓存,用过哪些缓存,redis和memcache的区别  2.redis的数据结构  3.redis的持久化方式,以及项目中用的哪种,为什么  4.redis集群的理解,怎么动态增加或者删除一个节点,而保证数据不丢失。(一致性哈希问题)  以上包含了众多互联网公司的面试大众问题,剩下的就是具体项目具体问了。写博客自我总结用,如有问题,敬请原谅!

{$id} {$name}
{$id} {$id}_{$name}

相关内容

  • 互联网大潮下,前端开发工程师为何最受宠?
  • 互联网行业是近几年中人才招聘的热门,而在行业内,前端工程师则是众所周知的香饽饽.许多互联网巨头更是纷纷推出前端培训课程,诸如网易云课堂的<前端开发工程师>微专业.百度前端技术学院.360的前端星计划等,都为想要学习前端技术的人提供了机会,也反映出前端工程师受欢迎的程度. 根据知名招聘网站 ...

  • 景瑞地产2015校园招聘_大街网制作@大街网
  • 景瑞地产 2015校园招聘大礼包 -- 大街网Dajie.com 倾情奉献 景瑞地产校园招聘公共主页 http://jingruis.dajie.com/ 大街网校园招聘频道 http://campus.dajie.com/ 大街网校园招聘微博 http://weibo.com/yjsxyzp 关注 ...

  • 安徽移动2016校园招聘求职大礼包
  • 安徽移动篇 目录 第一章 安徽移动简介 .................................................................................................................................. ...

  • 大公司学做人,小公司学做事
  • 在职业的选择时,有人喜欢大公司的沉稳,有人喜欢小公司的激情,但是鱼与熊掌不可兼得,不少人也是在这个问题上相当痛苦. 有着同济本硕连读背景的刘先生,在传统企业待了5年之后,决定要转换一下工作环境.但是在跳槽做选择的时候,他也犯了难处. 刘先生经过面试,拿到了两家offer.第一家是大公司,稳定福利好, ...

  • 从投递简历到面试成功的步步为营
  • 当你兴致冲冲的将自己的简历完善了,那如何才能把简历投递到心仪的公司,有哪些渠道,用人单位会看我的简历吗,他们是如何筛选的,被约后,我要如何面对面试,下面我们就来一一解析一下. 关于投递简历的渠道基本可以分为一下几种,一种是直接去官网看招聘信息,直接投递,但公司官网一般反馈比较慢:一种是传统渠道,也就 ...

  • 三十岁之前,我为什么离开BAT,加入创业公司人人车?
  • 2015-05-19 泉四曲苑杂坛 本文首见于知乎回答:你辞职以后找到新工作这个过程是怎样的? 点击文末[阅读原文],进入知乎答案页.欢迎知乎关注" 泉四". 2015年1月30日,我在朋友圈更新了一条内容,附了工牌.工位照,写上:青春不老,斗志永存,愿大家好.这条内容获得了我有 ...

  • 国家电网2015校园招聘考试大纲考试内容真题
  • 国家电网2015校园招聘考试大纲考试内容真题 2015国家电网校园招聘考试公告.报名注意事项.职位表等最新资讯及免费备考资料请点击:http://www.dwz.cn/uovNF 组织招聘笔试 1.公司统一笔试分两批(或三批)实施.时间初定为2014年12月6日.2015年3月28日(时间如有调整, ...

  • 2015年国家电网校园招聘考试大纲考试内容真题
  • http://v.huatu.com 2015年国家电网校园招聘考试大纲考试内容真题 2015年国家电网校园招聘考试公告.考试大纲.真题.绝密资料请点击: http://www.dwz.cn/uovNF 1.综合能力(35%) 注:中国电力与能源战略相关知识可参考网站:http://htwx.hua ...

  • YC孵化器的零和游戏:一个投机犯的自我修养
  • 2005年3月,硅谷. 一个不太一样的投资机构在美国诞生了,他的名字叫Y Combinator.与其它财大气粗的风投基金相比,由著名码农Paul Graham成立的YC有着明显不同的投资策略,YC给每个项目的投资额度非常小.也与其它投资机构不同,Y Combinator会要求每一位入选创业者参与其长 ...