【web前端面试题整理02】前端面试题第二弹袭来,接招!(转)

前言

今天本来准备先了解下node.js的,但是,
看看我们一个小时前与一个小时后的差距: 既然如此,我们继续来搜集我们的前端
面试题大业吧!!!

特别感谢玉面小肥鱼提供哟,@玉面小飞鱼

题目一览

JavaScript编程题
1、实现输出document对象中所有成员的名称和类型;
2、如何获得一个DOM元素的绝对位置?(获得元素位置,不依赖框架)
3、如何利用JS生成一个table?
4、实现预加载一张图片,加载完成后显示在网页中并设定其高度为50px,宽度为50px;
5、假设有一个4行td的table,将table里面td顺序颠倒;
6、模拟一个HashTable类,包含有add、remove、contains、length方法;
7、Ajax读取一个XML文档并进行解析的实例;
8、JS如何实现面向对象和继承机制?
9、JS模块的封装方法,比如怎样实现私有变量,不能直接赋值,只能通过公有方法;
10、对闭包的理解,闭包的好处和坏处?
11、对this指针的理解,可以列举几种使用情况?
12、对JS中函数绑定的理解?函数绑定可以使用哪两个函数?
13、jQuery的特点?
14、简述Ajax的异步机制。Ajax有哪些好处和弊端?

尼玛题还不少啊,公司一次性问完是要逆天吗???我们来一道一道做下吧,反正不吃亏!

第一题,document所有成员名称与属性

1、实现输出document对象中所有成员的名称和类型;

拿到这道题,我们来看看他是想考察神马呢?

PS:我弱弱的差点认为他考察的就是一个for in,我害怕的试了一下:

于是我发现他是一个对象,难道真的for in就完了?

1 for (var k in document) {
2     var v = document[k];
3     alert(v + ‘:‘ + typeof (v));
4 }

最后证明确实如此。。。怎么会这么简单呢?

思考

其实我猜面试官可能会在此上做一点文章,考察面试者对for in细节的认识,因为我们的原型链问题,我们会遍历一个对象的所有属性包括原型的一直到达object,而这显然不是我们想要的,所以此点各位可以拿来说下。

第二题,获取元素位置

2、如何获得一个DOM元素的绝对位置?(获得元素位置,不依赖框架)

这道题根本就是送分的(不能编码、不能设置断点情况我直接悲剧!),直接上断点:

所有信息一目了然,代码都省了,但是万一有坑怎么办,所以测试下IE吧:

看我们混杂模式也是这个样子,所以这个题是没有问题的,我们直接获取其属性即可。

第三题,生成table

3、如何利用JS生成一个table?

这道题是基本的dom操作,我这边直接略去了。。。。

第四题,图片加载问题

实现预加载一张图片,加载完成后显示在网页中并设定其高度为50px,宽度为50px;

这道题感觉有点意思,首先是预加载,然后是加载完毕后设置高度与宽度,那么什么是预加载呢?

顾名思义,WEB中的预加载就是在网页全部加载之前,对一些主要内容进行加载,以提供给用户更好的体验,减少等待的时间。否则,如果一个页面的内容过于庞大,没有使用预加载技术的页面就会长时间的展现为一片空白,直到所有内容加载完毕。
图片的预加载技术使用较为广泛,一般的效果是网页中的图片由模糊变得清晰。

在说一个比较龊的问题,比如我们要让一张图片居中显示我们该怎样干?我们必须知道其尺寸才行,不然该功能是无法实现的。

图片的高宽必须要其加载结束时候才能获取,于是我们这里来做一个实验,先来张本地图片吧:

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4 </head>
 5 <body>
 6     <img src="1.png" id="img" />
 7     <script type="text/javascript">
 8         var img = document.getElementById(‘img‘);
 9         var s = ‘‘;
10
11     </script>
12 </body>
13 </html>

这张图片在本地,他加载速度是非常快的,所以我们这里问题不大,我们现在换成网络文件吧:

http://t1.baidu.com/it/u=3208399380,3492442390&fm=21&gp=0.jpg

这张图片很大滴哟,我们来试试:

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4 </head>
 5 <body>
 6     <img src="http://t1.baidu.com/it/u=3208399380,3492442390&fm=21&gp=0.jpg" id="img" />
 7     <script type="text/javascript">
 8         var img = document.getElementById(‘img‘);
 9         var s = ‘‘;
10
11     </script>
12 </body>
13 </html>

各位请看,我们这里神马都米有了!!!这个原因大家应该比较清楚了:

页面开始形成dom根据dom与css形成渲染树,这个过程结束后才会加载图片,所以我们这里获取不到图片信息很正常的。

一种简单的做法

 1 var imgLoad = function (url, callback) {
 2     var img = new Image();
 3     img.src = url;
 4     if (img.complete) {
 5         callback(img.width, img.height);
 6     } else {
 7         img.onload = function () {
 8             callback(img.width, img.height);
 9             img.onload = null;
10         };
11     };
12 };
13 imgLoad(‘http://t1.baidu.com/it/u=3208399380,3492442390&fm=21&gp=0.jpg‘);

这是一种比较常见的做法,便是等图片完全加载后再显示。

但是根据这个文章:http://www.planeart.cn/?p=1121

我们看到作者有不一样的做法,而且这里是值得我们思考与学习的:

以上需要图片加载结束才会显示,他认为其速度慢了一点,其认为浏览器获取了图片的头部信息,然后写了一个js时钟来做这件事情,其详细实现我们这里就不去管它了,因为我对使用时钟是不太赞成的,但是作者的思路还是值得学习。

现在再回国头来看看我们这道题,我们在callback中实现代码就可以完成这道题了,但是我这里想再看看,因为原作者说在图片完全加载完便获取了图片的高度与宽度,而且其实验也证明了这点,于是我们一起来看看图片加载流程吧。

图片加载流程

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title></title>
 4 </head>
 5 <body>
 6     <img src="http://c-photo.i-part.com.tw/n1v1/4/1/9/0/780914/photo/book20/12760996629047.jpg" id="img" />
 7     <script type="text/javascript">
 8         var img = document.getElementById(‘img‘);
 9         setInterval(function () {
10             var s = ‘‘;
11         }, 100);
12     </script>
13 </body>
14 </html>

经过测试,图片的尺寸确实会先出来,若是不使用定时器,我暂时也想不到办法。。。

于是,此题暂时如此吧,这里还是贴出原作者的代码吧,确实不错了:


 1 // 更新:
 2 // 05.27: 1、保证回调执行顺序:error > ready > load;2、回调函数this指向img本身
 3 // 04-02: 1、增加图片完全加载后的回调 2、提高性能
 4
 5 /**
 6  * 图片头数据加载就绪事件 - 更快获取图片尺寸
 7  * @version    2011.05.27
 8  * @author    TangBin
 9  * @see        http://www.planeart.cn/?p=1121
10  * @param    {String}    图片路径
11  * @param    {Function}    尺寸就绪
12  * @param    {Function}    加载完毕 (可选)
13  * @param    {Function}    加载错误 (可选)
14  * @example imgReady(‘http://www.google.com.hk/intl/zh-CN/images/logo_cn.png‘, function () {
15         alert(‘size ready: width=‘ + this.width + ‘; height=‘ + this.height);
16     });
17  */
18 var imgReady = (function () {
19     var list = [], intervalId = null,
20
21     // 用来执行队列
22     tick = function () {
23         var i = 0;
24         for (; i < list.length; i++) {
25             list[i].end ? list.splice(i--, 1) : list[i]();
26         };
27         !list.length && stop();
28     },
29
30     // 停止所有定时器队列
31     stop = function () {
32         clearInterval(intervalId);
33         intervalId = null;
34     };
35
36     return function (url, ready, load, error) {
37         var onready, width, height, newWidth, newHeight,
38             img = new Image();
39
40         img.src = url;
41
42         // 如果图片被缓存,则直接返回缓存数据
43         if (img.complete) {
44             ready.call(img);
45             load && load.call(img);
46             return;
47         };
48
49         width = img.width;
50         height = img.height;
51
52         // 加载错误后的事件
53         img.onerror = function () {
54             error && error.call(img);
55             onready.end = true;
56             img = img.onload = img.onerror = null;
57         };
58
59         // 图片尺寸就绪
60         onready = function () {
61             newWidth = img.width;
62             newHeight = img.height;
63             if (newWidth !== width || newHeight !== height ||
64                 // 如果图片已经在其他地方加载可使用面积检测
65                 newWidth * newHeight > 1024
66             ) {
67                 ready.call(img);
68                 onready.end = true;
69             };
70         };
71         onready();
72
73         // 完全加载完毕的事件
74         img.onload = function () {
75             // onload在定时器时间差范围内可能比onready快
76             // 这里进行检查并保证onready优先执行
77             !onready.end && onready();
78
79             load && load.call(img);
80
81             // IE gif动画会循环执行onload,置空onload即可
82             img = img.onload = img.onerror = null;
83         };
84
85         // 加入队列中定期执行
86         if (!onready.end) {
87             list.push(onready);
88             // 无论何时只允许出现一个定时器,减少浏览器性能损耗
89             if (intervalId === null) intervalId = setInterval(tick, 40);
90         };
91     };
92 })();

第五题,td顺序颠倒

5、假设有一个4行td的table,将table里面td顺序颠倒;

这道题又属于那种不使用jquery比较烦的。。。我们这里获取td的dom直接向td.parent appendChild即可,但是操作时候需要注意一点兼容性问题。

第六题,模拟HashTable

因为
javascript里面的对象字面量就是hashtable,他这么一说反而让我不知道怎么干了,于是上代码吧:

 1 var HashTable = function () {
 2     this.data = {};
 3 };
 4 HashTable.prototype.add = function (k, v) {
 5     this.data[k] = v; //不存在便赋值,存在便更新,判断条件都给省了。。。
 6 };
 7 HashTable.prototype.remove = function (k) {
 8     if (this.data[k]) delete this.data[k];
 9 };
10 HashTable.prototype.contains = function (v) {
11     var exist = false;
12     for (var k in this.data) {
13         if (v == this.data[k]) {
14             exist = true;
15             break;
16         }
17     }
18     return exist;
19 };
20 HashTable.prototype.length = function () {
21     var len = 0;
22     for (var k in this.data) {
23         len++;
24     }
25     return len;
26 };
27 var hs = new HashTable();
28
29 hs.add(‘叶小钗‘, ‘叶小钗‘);
30 hs.add(‘一页书‘, ‘一页书‘);
31 hs.add(‘素还真‘, ‘素还真‘);
32 var c = hs.contains(‘叶小钗‘);
33 hs.remove(‘叶小钗‘);
34 var d = hs.contains(‘叶小钗‘);
35 var a = hs.length();
36
37 var s = ‘‘;

第七题,ajax解析xml

Ajax读取一个XML文档并进行解析的实例;

在json出现之前,ajax返回的一般都是xml,其解析过程比较痛苦,当年做考试系统时候不知道json便解析的xml,那家伙确实费工夫,这里可以封装一个方法。我这里暂时略去,后面点补上。

.......需要补上

第八题,js面向对象

【初窥javascript奥秘之面向对象】封装与继承

第九题,模块封装

【javascript激增的思考01】模块化编程

第十题,闭包

【初窥javascript奥秘之闭包】叶大侠病都好了,求不踩了:)

第十一题,this的理解

【初窥javascript奥秘之让人捉摸不定的this】你知道现在this指向哪里吗???

第十二题,函数绑定的理解

12、对JS中函数绑定的理解?函数绑定可以使用哪两个函数?

这道题我完全没明白意思,可能是考察call与apply吧。

第十三题,jquery的特点

该题需要单独开贴讨论了,而且老夫神马都没有。

第十四题,ajax

14、简述Ajax的异步机制。Ajax有哪些好处和弊端?

【初窥javascript奥秘之Ajax】简述下你所知道的Ajax?

结语

感谢我们的玉面小飞鱼提供的这14道javascript的题目,我这里简要的回答了一番,很多不足,也请各位回答一篇哦,我这里下来后再继续跟进。

原文地址:https://www.cnblogs.com/jwcz/p/11793467.html

时间: 2024-10-12 09:25:00

【web前端面试题整理02】前端面试题第二弹袭来,接招!(转)的相关文章

web前端面试题整理(HTML篇)

web前端面试题整理(HTML篇)需要web前端课程工具和电子书,可以加: 33群105601600;  22群1203428331. h5的改进:新元素画布canvas: HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成音频audio视频video语义性: article,  nav ,  footer, section, aside, hgroup等.时间time 新属性拖放: draggable   <img draggable=&q

一个web开发人员在发布站点前你需要考虑哪些技术细节

转自http://www.xker.com/page/e2014/0520/132486.html 一个web开发人员在发布站点前你需要考虑哪些技术细节 文章转自Hedgehog博客 前日在cnblogs上看到一遍文章<每个程序员都必读的12篇文章>,其中大多数是E文的. 先译其中一篇web相关的”每个程序员必知之WEB开发”. 原文: http://programmers.stackexchange.com/questions/46716/what-technical-details-sho

扫清 Android 面试障碍--面试前的准备及必刷面试题

又准备要去面试了吗? 来来来,给你点干货建议. 磨刀不误砍柴工, 面试的时间一般只有几个小时不到,所以做好充分准备会极大提高你的成功率.面试的要点分: 面试前的准备和面试中的注意事项,接下来先来说说面试前的准备. 面试前准备 毋庸置疑,求职者在面试之前必须做好充足的准备,我认为有以下几点是重中之重: 完善简历,以及对简历内容做充分准备 可以说简历内容不在于多而在于精,尽量让每个字都有信息量,而且千万要中肯,比如说对于三年以内工作经验的,还是不要用「精通」这两个字了,会让面试官觉得你很浮夸. 坦率

购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session

原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车案例,非常精彩,这里这里记录下对此项目的理解. 文章:http://chsakell.com/2015/01/31/angularjs-feat-web-api/http://chsakell.com/2015/03/07/angularjs-feat-web-api-en

.Net 面试题整理(一)

.Net 面试题整理(一) 好久的资料了,拿出来分享给大家,主要是记录一些面试题整理. Main函数是什么?在程序中使用Main函数有什么需要注意的地方? Q:程序的入口函数!函数名字不能改变:一个程序中有且只有一个Main函数. CLR是什么?程序集是什么?当运行一个程序集的时候,CLR做了什么事情? Q:Common Language RunTime 公共语言运行时. 编译后代码的集合.(包括exe和dll). 加载项目里所有的类到内存,并找到其中的主函数,并作为默认的启动函数调用执行. 值

Java笔试面试题整理第一波

(本系列同步更新于 个人博客小站) 本系列整理Java相关的笔试面试知识点.其它几篇文章例如以下: Java笔试面试题整理第八波 Java笔试面试题整理第七波 Java笔试面试题整理第六波 Java笔试面试题整理第五波 Java笔试面试题整理第四波 Java笔试面试题整理第三波 Java笔试面试题整理第二波 Java笔试面试题整理第一波 1.Java变量 Java中主要有例如以下几种类型的变量 局部变量 类变量(静态变量)-- 属于类 成员变量(非静态变量)-- 属于对象 2.关于枚举 pack

史上最全Java面试题整理(附参考答案)

下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正,更多精彩内容可以关注我的微信公众号:Java团长 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类. 继承:基于基类创建新类. 封装:将数据隐藏起来,对数据的访问只能通过特定接口. 多态性:不同子类型对象对相同消息作出不同响应. 2.访问修饰符public,private,protected,以及不写(默认)时的区别? ? protected 当前类,同包,异包子类. 3.String 是

myBatis+Spring+SpringMVC框架面试题整理

myBatis+Spring+SpringMVC框架面试题整理(一) 2018年09月06日 13:36:01 新新许愿树 阅读数 14034更多 分类专栏: SSM 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41541619/article/details/82459873 目录 ■ SpringMVC 的工作原理 ■ 谈谈你对SpringMVC的理解 ■ SpringMVC

海量数据面试题整理1.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是

海量数据面试题整理 1. 给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G.所以不可能将其完全加载到内存中处理.考虑采取分而治之的方法. s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中.这样每个小文件的大约为300M. s 遍历文件b,采取和a相同的方式将url分别存储到1000各小文件(记为).这样