11月1号笔试题总结

  今天是11月1日,参加了两场宣讲会并参加了笔试。昨天因为下雨,而且没有公司就歇了一天。大概总结下今天的笔试题,两套题有一些相同的题。

  1. CSS中的单位: %,百分比;in,英寸;cm,厘米;mm,毫米;em,和字体大小有关,相对单位;ex,一个 ex 是一个字体的 x-height。(x-height 通常是字体尺寸的一半);pt,磅(1pt 等于 1/72英寸);pc,12点活字(1 pc等于12点,大约6pt,1/6英寸);px,像素(计算机屏幕上的一个点)。

  2.  深入理解BFC

  3.  在IE9丶火狐丶谷歌浏览器下font-size:12px 的宋体文字所占高度依次是  13.69(约为14),15,14。这是自己测试的,真是这样的话,就没有正确答案。

A 12 12 12  B. 14 17 14 C.14 14 12 D.17 17 12 感觉最接近的就是B答案了,可能是之前火狐显示的高度是 17 吧。

  4.  在 HTML5 中,getCurrentPosition()获得当前位置,返回并保存值。getLocation( ) 地图定位用户所在位置。

  5. 

1 <script>
2     var bb = 1;
3     function aa(bb){
4         bb = 2;
5         alert(bb);
6     };
7     aa(bb);    //2
8     alert(bb);    //1
9 </script>

  6.  javascript有 5 种原始数据类型,分别是 string,number,boolean,null,undefined。

    null == undefined,结果为 true。

  7.  数组的写法

 1 var mycars=new Array()
 2 mycars[0]="Saab"
 3 mycars[1]="Volvo"
 4 mycars[2]="BMW"
 5 
 6 var mycars=new Array(3)
 7 mycars[0]="Saab"
 8 mycars[1]="Volvo"
 9 mycars[2]="BMW"
10 
11 var mycars=new Array("Saab","Volvo","BMW")

  8. 

1<script>
2   var arrTemp = [1,2,3];
3   arrTemp.shift();    //[2,3]
4   arrTemp.push(1);    //[2,3,1]
5   arrTemp.unshift(2);    //[2,2,3,1]
6   var arrNew = arrTemp.concat([1,2]);//[2,2,3,1,1,2]
7   console.log(arrNew);
8</script>

array对象属性:  

      constructor,返回对创建此对象的数组函数的引用。

      length,设置或返回数组中元素的数目。

      prototype,使你有能力向对象添加属性和方法。

array对象方法:

      concat(),连接两个或更多的数组,并返回结果。

      join(),把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。

      pop(),删除并返回数组的最后一个元素。

      push(),向数组的末尾添加一个或更多元素,并返回新的长度。

      reverse(),颠倒数组中元素的顺序。

      shift(),删除并返回数组的第一个元素。

      slice(),从某个已有的数组返回特定的元素。

      sort(),对数组的元素进行排序。

      splice(),删除元素,并向数组添加新元素。

      toSource(),返回该对象的源代码。

      toString(),把数组转换为字符串,并返回结果。

      toLocationString(),把数组转换为本地数组,并返回结果。

      unshift(),向数组的开头添加一个或更多元素,并返回新的长度。

      valueOf(),返回数组对象的原始值。

  9. JSON数据,{"name":"xiaoming","age":"student"}

      1) JSON的字符串必须用双引号。

      2) JSON无法表示 undefined,只能表示 "undefined"。

      3) JSON无法表示函数。

      4) JSON的对象语法不能有引用。

  10.

1 <script>
2     var arr = [];
3     arr[0] = 0;
4     arr[1] = 1;
5     arr.foo = 'c';
6     console.log(arr.length);  //2 length返回的是array的数组索引长度,
                   //数组索引只能是数字,如果是字符串的相当于对象属性了。
7 </script>

  11.

1 <script>
2     var obj = {
3         a:1,
4         b:function(){alert(this.a)}
5     };
6     var fun = obj.b;
7     fun();    //弹出 undefined
8 </script>        

this的行为有时候会显得极其诡异,让人感到困惑,但只需要记住 this的值要等到代码真正执行时才能确定
同时this的值具体有以下几种情况:

  1. new 调用时指的是被构造的对象

  2. callapply调用,指向我们指定的对象

  3. 对象调用,如执行obj.b()this指向obj

  4. 默认的,指向全局变量window(相当于执行window.fun())

这样看来,当你执行fun()的时候,以上1,2点均不满足。
第3点,因为this是运行时确定的,而我们执行fun(),等同于windown.fun()(与obj没有任何关系),自然的this指向window,而window没有定义变量a,结果是undefined

1 <script>
2     var obj ={
3         a:alert(1),
4         b:(function(){alert(2);}()) 
5     }; 
6     var fun =obj.b; 
7     fun();    //先弹出1,再弹出2
8 </script>

  12.

1 <script>
2     for (var i=0;i<5;i++){
3         setTimeout(function(){
4             console.log(i+'');  //5 5 5 5 5
5         },100);
6     }
7 </script>

  涉及到作用域问题,如果将 var 改为 let,则输出为 0 1 2 3 4  

  13.

 1     var a = "undefined";
 2     var b = "false";
 3     var c = "";
 4     function assert(aVar){
 5         if(aVar)
 6             alert(true);
 7         else
 8             alert(false);
 9     }
10     assert(a);    //true
11     assert(b);    //true
12     assert(c);    //false   

  14. javascript常见事件的触发情况

  15. 正确定义函数

  16. sessionStorage 保存数据的方法:sessionStorage.setItem("key","value");

  17.

1     var x = new Boolean(false);
2     if(x) alert('hi');        
3     var y = Boolean(0);
4     if(y) alert('hello');
5     //alert('hi')

  如果Boolean构造函数的参数不是一个布尔值,则该参数会被转换成一个布尔值。如果参数是 0,-0,null,false,NaN,undefined,或者空字符串(" "),生成的Boolean对象的值为false,其他任何值,包括任何对象或者字符串 "false" ,都会创建一个值为 true 的Boolean对象。

  18.

1     var x = {a:10,b:20};
2     var y = {a:40,c:50};
3     y.__proto__ = x;
4     console.log(y.a);    //40
5     console.log(y.b);    //20
6     console.log(y.c);    //50

  19.

1     function foo(x,y,z){
2         console.log(foo.length)        //3  形参
3         console.log(arguments.length);    //2  实参
4         }
5     foo(1,2);

  20.

 1     var x = 10;
 2     function fn(y){
 3         console.log(x+y);
 4     }
 5     function show(f){
 6         var x = 20;
 7         var b = 9;
 8         f(b);
 9     }
10     show(fn);    //19

  21. 用js实现数组去重,输出无重复数据的数组,要求时间,空间最优。可写出多种实现方式并注明优缺点。 

  22. 用html,css和js模拟实现一个下拉框,使得下拉框在各个浏览器下的样式和行为完全一致。说明你的设计方案,并且重点说明功能设计时要考虑的因素。

  23. 优雅降级和渐进增强

渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验

 

优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容

 

区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带

 

"优雅降级"观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如 IE、Mozilla 等)的前一个版本。

 

在这种设计范例下,旧版的浏览器被认为仅能提供“简陋却无妨 (poor, but passable)” 的浏览体验。你可以做一些小的调整来适应某个特定的浏览器。但由于它们并非我们所关注的焦点,因此除了修复较大的错误之外,其它的差异将被直接忽略。

“渐进增强”观点则认为应关注于内容本身。内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得“渐进增强”成为一种更为合理的设计范例。这也是它立即被 Yahoo! 所采纳并用以构建其“分级式浏览器支持 (Graded Browser Support)”策略的原因所在

  24. http状态码

  25. GET 和 POST   

区别一:

从字面上可以看出,get(获取)重点在从服务器上获取资源,post(发送)是向服务器发送数据;

区别二:

get传输数据是通过URL请求,以field(字段)= value的形式,置于URL的后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;

post传输数据通过Http的post机制,将field与对应值封存在请求报文的内容实体中发送给服务器,这个过程对用户是不可见的;

区别三:

get传送的数据,服务器端用Request.QueryString()方法获得;

post传送的数据,服务器端用Request.Form()方法获得;

区别四:

Get传输的数据量小,因为受URL长度限制,但效率较高

Post可以传输大量数据,所以上传文件时只能用Post方式

区别五:

get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;

post较get安全性较高;

区别六:

get限制Form表单的数据集的值必须为ASCII字符,不能通过request.setCharacterEncoding("utf-8");设置中文字符,服务器得到的中文字符可能为乱码!

post支持整个字符集ISO10646,可以通过request.setCharacterEncoding("utf-8");正确显示中文字符。

  26. 如何提高网站的性能

  27. src 和 href的区别

       href是Hypertext Reference的缩写,表示超文本引用。用来建立当前元素和文档之间的链接。常用的有:link、a。例如

1 <link href = "1.css" rel = "stylesheet" />

浏览器会识别该文档为css文档,并行下载该文档,并且不会停止对当前文档的处理。这也是建议使用link,而不采用@import加载css的原因。

     src是source的缩写,src的内容是页面必不可少的一部分,是引入。src指向的内容会嵌入到文档中当前标签所在的位置。常用的有:img、script、iframe。例如

1 <script src = "script.js"></script>

当浏览器解析到该元素时,会暂停浏览器的渲染,知道该资源加载完毕。这也是将js脚本放在底部而不是头部得原因。

    简而言之,src用于替换当前元素;href用于在当前文档和引用资源之间建立联系。

   28. js找出数组 arr 中重复出现过的元素。输入例子: duplicate([1,2,4,4,3,3,1,5,3]).sort() 

输出例子:[1,3,4] 

   程序如下:

1 function duplicates(arr) {
2     result = [];
3     arr.forEach(function(item){
4         if(arr.indexOf(item)!=arr.lastIndexOf(item)&&result.indexOf(item)==-1)
5             result.push(item);         
6   })
7     return result;
8 } 
原文地址:https://www.cnblogs.com/wangmengjun/p/7769440.html