今天是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
的值具体有以下几种情况:
-
new
调用时指的是被构造的对象 -
call
、apply
调用,指向我们指定的对象 -
对象调用,如执行
obj.b()
,this
指向obj
-
默认的,指向全局变量
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 }