2014阿里巴巴WEB前端实习生在线笔试题

2014年3月31日晚,我怀着略微忐忑的心情(第一次在线笔试^_^!!)进行了笔试,阿里巴巴的笔试题共有10道,几乎包含了Web前端开发的各个方面,有程序题、有叙述题,时间非常紧张,只完成了大概6道题。下面把遇到的题目跟大家分享一下!

1、

<pre name="code" class="html"><!doctype html>
<html>
    <head>
        <style type="text/css">
            div:not(.outer) p { color: purple; }
            div.outer p { color: orange; }
        </style>
    </head>  

    <body>
        <div class="outer">
            <p>
                我是 outer 里面的字
            </p>
            <div class="inner">
                <p>
                    我是 inner 里面的字
                </p>
            </div>
        </div>
    </body>
</html>  


问:为什么以上两个<p> 标签中的文字颜色都是橙色的?

这里涉及到了CSS中的层叠和特殊性问题,首先按照上下顺序,第一个<p>元素它的样式很明显是由div.outer p 定义的,所以是橙色。第二个<p>元素的样式是由样式表中的两个样式同时定义,而且同样是color样式。根据《CSS权威指南》中的介绍,当CSS样式发生层叠时,要通过层叠规则来安排最终元素匹配的样式。CSS2.1的层叠规则中的规定,在没有!important标志时,要按照特殊性排序,如果还不能比较完,就后面覆盖前面。可以参考:CSS层叠规则

2、请实现一个Event类,继承自此类的对象都会拥有两个方法on和trigger,类声明如下,请写出完整代码:

[javascript] view
plain
copy

  1. function Event() {}
  2. Event.prototype.on = function(eventName, callback) {
  3. //注册事件监听
  4. }
  5. Event.prototype.trigger = function(eventName, data) {
  6. //触发事件
  7. }
<span style="font-family: Arial, Helvetica, sans-serif;">3、</span>

要求实现一个多行文本输入框,固定宽度。可根据用户输入的内容多少进行高度自适应变化。如,用户输入了1行文字,则输入框显示为1行,而有2行文字,就显示2行。如微博的评论回复。

[javascript] view
plain
copy

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>文本框换行</title>
  5. <meta charset="utf-8">
  6. <style>
  7. .txt {
  8. border: 1px solid #CCC;
  9. width: 200px;
  10. padding: 3px;
  11. font: 12px/16px Simsun;
  12. outline: none;
  13. resize: none;
  14. word-wrap: break-word;
  15. word-break: break-all;
  16. overflow: hidden;
  17. }
  18. </style>
  19. <script>
  20. window.addEventListener(‘load‘, function () {
  21. (function (o, e, t) {
  22. //创建一个pre标签,用来计算文字应有高度
  23. e = document.createElement("pre");
  24. //给pre添加上和文本域一样的样式
  25. e.className = "txt";
  26. //设置绝对定位到屏幕外来隐藏它
  27. e.style.position = "absolute";
  28. e.style.left = "-9999px";
  29. //创建一个文本节点来操作,避免直接操作HTML
  30. e.appendChild(t = document.createTextNode(""));
  31. //给pre的末尾添加一个换行,因为pre会吞掉末尾的一个换行
  32. e.appendChild(document.createTextNode("\n"));
  33. //把pre放入文档中
  34. document.body.appendChild(e);
  35. //文本域键盘事件时计算高度
  36. o.onkeydown = o.onkeyup = function () {
  37. //IE8下\r\n在PRE标签中会被解析为两行,所以需要一个替换
  38. //如果觉得这样会影响效率可以先判断浏览器
  39. t.data = o.value.replace(/\r\n/g, "\n");
  40. o.style.height = e.offsetHeight - 8 + "px";
  41. };
  42. //初始时计算一次
  43. o.onkeydown();
  44. //为了避免换行时闪的太厉害,稍微阻止下滚动
  45. o.onscroll = function () {
  46. o.scrollTop = 0
  47. };
  48. })(document.getElementById("o"));
  49. }, false);
  50. </script>
  51. </head>
  52. <body>
  53. <textarea id="o" class="txt">来呀,来编辑我呀~</textarea>
  54. </body>
  55. </html>

4、

编写一个JavasSript函数,给定一个DOM节点node和一个正整数n,返回node的所有第n代后代节点(直接子节点为第1代)

[javascript] view
plain
copy

  1. function getDescendants(node, n) {
  2. // return an Array
  3. }

[javascript] view
plain
copy

  1. <script type="text/javascript" >
  2. function getDescendants(node, n) {
  3. //node, n
  4. var childArr = [];
  5. var len,tempArr,childNodelist;
  6. childArr.push(node);
  7. for(var i = 0; i<n ; i++){
  8. len = childArr.length;
  9. tempArr = [];
  10. for(var j = 0;j<len;j++){
  11. childNodeList = makeArray(childArr[j].childNodes);
  12. tempArr = tempArr.concat(childNodeList);
  13. }
  14. childArr = tempArr;
  15. }
  16. return childArr;
  17. }
  18. var makeArray = function(obj){
  19. return Array.prototype.slice.call(obj,0);
  20. }
  21. var result = getDescendants(document.getElementById("content"),2);
  22. alert(result);
  23. </script>

5、有2个int型已经去重的数组a和b,都是已经从小到大排序好的。要求遍历b数组的数字,如果这个数字出现在a中,就将其从a删去;反之将其插入到a的适当位置,使a保持排序状态。

[javascript] view
plain
copy

  1. <script type="text/javascript" charset="utf-8">
  2. //有2个int型已经去重的数组a和b,都是已经从小到大排序好的。要求遍历b数组的数字,
  3. //如果这个数字出现在a中,就将其从a删去;反之将其插入到a的适当位置,使a保持排序状态。
  4. var mySort = {};
  5. mySort.sortArr = function(a, b) {
  6. var pos = 0;
  7. for (var i = 0; i < b.length; i++) {
  8. pos = mySort.checkRepeat(a, b[i],pos);
  9. }
  10. }
  11. mySort.checkRepeat = function(a, v, pos) {
  12. var isChanged = false;
  13. if (a != null && a != undefined && a.length > 0) {
  14. for (var j = pos; j < a.length; j++) {
  15. if (a[j] == v) {
  16. a.splice(j, 1);
  17. break;
  18. } else if (a[j] > v) {
  19. a.splice(j, 0, v);
  20. break;
  21. }
  22. }
  23. if(j == a.length){
  24. a.push(v);
  25. }
  26. return j;
  27. }
  28. }
  29. var a = [2,7,12,25,36,64];
  30. var b = [2,3,9,32,36,56,87];
  31. document.write("合并前数组a为:"+a.toString()+"<br>");
  32. document.write("合并前数组b为:"+b.toString()+"<br>");
  33. mySort.sortArr(a,b);
  34. document.write("合并后数组a为:"+a.toString());

//结果是:

合并前数组a为:2,7,12,25,36,64

合并前数组b为:2,3,9,32,36,56,87

合并后数组a为:3,7,9,12,25,32,56,64,87

6、请描述一下从用户输入网址开始,到网页最后呈现出来的全过程,越详细越好,包括各种事件等。

7、8、请评价以下代码并给出改进意见。

<pre name="code" class="javascript">if (window.addEventListener) {?
    var addListener = function (el, type, listener, useCapture) {?
        el.addEventListener(type, listener, useCapture);
    };
} else if (document.all) {
    addListener = function (el, type, listener) {
        el.attachEvent("on" + type,
            function () {
                listener.apply(el);
            });
    };
}  

问:1、为什么最终小狗叫了200声汪?请详细说明为什么。2、修改代码setTimeout部分代码,实现每隔1秒调用i(从1到10递增)次dog()。

1、第一题重点在于函数作用域的问题。

2、 修改后的setTimeout函数是

[javascript] view
plain
copy

  1. for (var i = 0; i < 10; i++) {
  2. (function(a) {
  3. setTimeout(function() {
  4. for (var j = 1; j <= a; j++) {
  5. document.write(dog()+" "+a+"<br>");
  6. }
  7. }, 1000);
  8. })(i+1);
  9. }

2014阿里巴巴WEB前端实习生在线笔试题,布布扣,bubuko.com

时间: 2024-10-07 00:59:11

2014阿里巴巴WEB前端实习生在线笔试题的相关文章

2017百度web前端实习生在线笔试题

代码: 1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 int n = sc.nextInt(); 7 int num[]=new int[n];//用户输入的数组 8 int b[]=new int[n];//复制num 9 int c[]=new int[n];//依次保

2015阿里巴巴前端实习生在线笔试题

Summary 大公司开始招实习生了,我也变成过来人了,品味到之前的酸甜苦辣,除了加油好像也没法说那么多. 因为是你在奋斗,心态这件事是你们在掌握的.但是我们唯一能提供的是我们topview实验室新鲜出炉的面经和笔试. (其实我在想有没应届生春招 - -!) Where 2015阿里巴巴前端实习生在线笔试题

2014阿里巴巴web前端实习生试题分析(1)

简化以下CSS代码: div.container{ width:500px; background-image:url(/img/sprite.png); background-repeat:no-repeat; background-position:0px -78px; } div.container ul#news-list,div.container ul#news-list li{ margin:0px;padding:0px; } div.container ul#news-list

腾讯web前端开发工程师笔试题及答案

1. 如何实现事件委托? 首先要知道什么是事件委托. 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少遇到这么多li的情况),为每个li添加事件侦听就会对页面性能产生很大的影响. 就像下面这段代码: <!DOCTYPE HTML><html><head><meta charset="utf-8" /><ti

2015年阿里巴巴校招研发工程师在线笔试题汇总

在线笔试题汇总 卷一: 1.下面的函数中哪个是系统调用而不是库函数______? printf scanf fgetc read print_s scan_s 2.某足球队有四名外援,分别来自巴西.荷兰.意大利和美国.他们分别擅长前锋.后卫或守门,其中: ① 美国外援单独擅长守门: ② 意大利外援不擅长前锋: ③ 巴西外援和另外某个外援擅长相同的位置: ④ 荷兰外援擅长的位置和巴西外援不同. 以上条件可以推出巴西外援擅长的位置是______. 前锋 守门 后卫 前锋或守门 后卫或守门 前锋或后卫

(转)腾讯web前端开发的笔试题(记忆版)

面试职位的是web前端开发工程师.一小时的笔试题,一看全傻眼了.全都是网页设计和javascript的东西,悲剧了.做java的几百年不搞那东东了.现在凭记忆记录一些笔试题,本人亲面,拒绝网上的各种假题. 1.js中“5”+4=? 答案:54 2.js中void(0)=? 答案:undefined 3.js中NaN*4=? 答案:NaN 4.js中null*4.5=? 答案:0 5.js中alert(5*015===5.075)结果?原因? 6.js中13>>2=? -13>>2=

阿里巴巴2015实习生在线笔试题

1 #include <iostream> 2 3 using namespace std; 4 5 class animal 6 { 7 public: 8 virtual void print_age(void)=0; 9 protected: 10 int age; 11 }; 12 class dog: public animal 13 { 14 public: 15 dog(){this->age = 2;} 16 ~dog(){} 17 virtual void print_

WEB前端面试的笔试题

html <!DOCTYPE>标签的定义与用法 <!DOCTYPE> 声明必须是 HTML 文档的第一行,位于 <html> 标签之前. <!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令. <!DOCTYPE>是HTML5的声明,所有的浏览器都支持它,对大小写不敏感,没有结束标签. 块级元素和行内元素有哪些? 块级元素:<div> <d>l <dt

2014阿里巴巴web前实习生项目分析(1)

以下简化CSS代码: div.container{ width:500px; background-image:url(/img/sprite.png); background-repeat:no-repeat; background-position:0px -78px; } div.container ul#news-list,div.container ul#news-list li{ margin:0px;padding:0px; } div.container ul#news-list