三七互娱现场笔试题


1、请用HTML5标签写一个符合语义化的页面,页面中有导航栏、页眉、页脚、文字内容以及图片内容;

一些新增的结构标记
◎section:这可以是书中的一章或一节,实际上可以是在HTML4中有自己的标题的任何东西
◎header:页面上显示的页眉;与head元素不一样
◎footer:页脚;可以显示电子邮件中的签名
◎nav:指向其他页面的一组链接
◎article:blog、杂志、文章汇编等中的一篇文章

HTML5的文档结构
<header>...</header>
<nav>...</nav>
<article>
<section>...</section>
</article>
<aside>...</aside>
<footer>...</footer> 

HTML5的图片结构
<figureid="fig2">
<legend>Figure2.InstallMozillaXFormsdialog</legend>
<imgalt="AWebsiteisrequestingpermissiontoinstalltheollowingitem:MozillaXForms0.7Unsigned"src="installdialog.jpg"/>
</figure> 

 

2、写一个input输入框的样式,要求如下:
1)背景图片为bg.jpg,图片不重复显示,左对齐,背景颜色为蓝色;
2)宽200像素,高50像素;
3)边框为5像素绿色的虚线;
4)边框圆角半径3像素;
5)边框阴影效果,模糊距离3像素,垂直偏移2像素,水平偏移1像素;
6)输入字符上下居中,左对齐;
7)清楚两边浮动;
8)水平垂直居中于视口。

1)

多样式标记语法:background: background-color || background-image || background-repeat || background-attachment || background-position

Body{background:#FFF url(http://www.divcss5.com/img201301/divcss5-logo-2013.gif) no-repeat 0 0 fixed } 

  中文说明 标记语法
1 背景颜色 { padding: 0px; word-wrap: break-word;"> 2 背景图片 {background-image: url(http.//.../URL)|none}
3 背景重复 {background-repeat:inherit|no-repeat|repeat|repeat-x|repeat-y}
4 背景固定 {background-attachment:fixed|scroll}
5 背景定位 {background-position:数值|top|bottom|left|right|center}
6 背影样式 {background:背景颜色|背景图象|背景重复|背景附件|背景位置}

2)

3)

border-left 设置左边框
border-right 设置右边框
border-top 设置上边框
border-bottom 设置下边框

四边相同边框border简写
#divcss5{border:1px solid #00F}

边框样式值如下:
none :  无边框。与任何指定的border-width值无关
hidden :  隐藏边框。IE不支持
dotted :  在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为点线。否则为实线(常用)
dashed :  在MAC平台上IE4+与WINDOWS和UNIX平台上IE5.5+为虚线。否则为实线(常用)
solid :  实线边框(常用)
double :  双线边框。两条单线与其间隔的和等于指定的border-width值
groove :  根据border-color的值画3D凹槽
ridge :  根据border-color的值画菱形边框
inset :  根据border-color的值画3D凹边
outset :  根据border-color的值画3D凸边

4)

5)

官方用语:     box-shadow:1px 2px 3px 4px #ccc inset;

来分别看一下以上六个值的含义: 1px  从原点开始,沿x轴正方向的长度(倘若为负值,为沿x轴负方向的长度);

                2px  从原点开始,沿y轴正方向的长度;(倘若为负值,为沿y轴负方向的长度);

                3px  阴影的模糊度,只允许为正值;

                4px  阴影扩展半径;

                #ccc  阴影颜色;

                inset  设置为内阴影(如果不写这个值,默认为外阴影);

  铺垫完毕,说正事——给四条边分别加阴影。

      如果打算添加外部阴影,那么在div内部是不会显示阴影的。看起来好像是废话,来仔细分析一下。

      将div放在直角坐标系中,则div上边与x轴重合,左边与y轴重合,没错吧。所以,对于上面一条边,沿y轴正方向的阴影不会显示,因为沿y轴正方向的长度已经进入到了div内部。同样的,对于左侧边框,沿x轴正方向的长度也进入到了div内部,阴影不会显示。

      对于右侧边框,则沿x轴负方向的长度不显示(不要纠结于原点位置,只考虑坐标方向。可以看做右边与y轴重合,方便理解);对于下方边框(看做下边与x轴重合),沿y轴负方向的长度进入div内部,不显示。

box-shadow:    0px -10px 0px 0px #ff0000,   /*上边阴影  红色*/
                -10px 0px 0px 0px #3bee17,   /*左边阴影  绿色*/
                10px 0px 0px 0px #2279ee,    /*右边阴影  蓝色*/
                0px 10px 0px 0px #eede15;    /*下边阴影  黄色*/

6)

左对齐:text-align:left;

7)

一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了。

浮动会导致父级元素的背景、边框无法撑开,父子间的margin、padding无法显示

几点用于清除浮动

a、对父级设置适合CSS高度

b、clear:both清除浮动
为了统一样式,我们新建一个样式选择器CSS命名为“.clear”,并且对应选择器样式为“clear:both”,然后我们在父级“</div>”结束前加此div引入“class="clear"”样式。这样即可清除浮动。

c、父级div定义 overflow:hidden

 

3、CSS选择器的优先级如何定义?如何做选择器优化?

标签选择器给定1表示其优先级量,类选择器给定10,ID选择器给定100。

CSS优化原则
  1. 避免使用通配规则      如    *{} ,页面复杂的话,计算次数会很多,只对需要用到的元素进行选择
  2. 尽量少的直接去对标签进行选择,而是用class     如:#navs li{}, 更优的方式是给li加上nav_item的类名,及.nav_item{}
  3. 不要去用标签限定ID或者类选择符   如:div#main-container,应该简化为#main-container
  4. 尽量少的去使用后代选择器,降低选择器的权重值  后代选择器的开销是最高的,尽量将选择器的深度降到最低,最高不要超过三层,更多的使用类来关联每一个标签元素
  5. 要知道继承这个东西, 了解哪些属性是可以通过继承而来的,然后避免对这些属性重复编写规则

 

4、已知数组如下,请用JS完成以下要求,需写出详细实现步骤
1)从大到小排序testArray各项;
2)在testArray数组首尾分别添加数字11,99;
3)在testArray数组元素61后插入62,63,64;
4)将testArray数组反转输出算法,第一位放在最后一位,以此类推;
5)将testArray去重算法

JavaScript concat 方法:连接两个或多个数组
JavaScript join 方法:把数组转换为一个字符串
JavaScript Array toString 方法:把数组转换为字符串
JavaScript push 方法:向数组的末尾添加一个或多个元素
JavaScript unshift 方法:向数组的开头添加一个或多个元素
JavaScript pop 方法:删除并返回数组的最后一个元素
JavaScript shift 方法:删除并返回数组的第一个元素
JavaScript splice 方法:插入、删除或替换数组的元素
JavaScript Array slice 方法:从数组中返回选定的元素
JavaScript Array reverse 方法:颠倒数组中元素的顺序
JavaScript Array sort 方法:对数组的元素进行排序

http://www.5idev.com/p-javascript_array_splice.shtml

1)

var arrSimple2=new Array(1,8,7,6);
arrSimple2.sort(function(a,b){
            return b-a});
解释:a,b表示数组中的任意两个元素,若return > 0 b前a后;reutrn < 0 a前b后;a=b时存在浏览器兼容
    简化一下:a-b输出从小到大排序,b-a输出从大到小排序。

http://www.cnblogs.com/longze/archive/2012/11/27/2791230.html

2)

3)

arrSimple2.splice(1,2,'tom')

4)

5)

Array.prototype.unique3 = function(){
 var res = [];
 var json = {};
 for(var i = 0; i < this.length; i++){
  if(!json[this[i]]){
   res.push(this[i]);
   json[this[i]] = 1;
  }
 }
 return res;
}

var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
alert(arr.unique3());

 

5、使用ajax(可使用jQuery框架,若使用其他框架请注明)写一个跨域异步获取JSON数据方案;说说能否使用JS进行跨域异步post数据
var url = "http://www.37.com";

$.ajax
        ({
            
            type: "POST",
            contentType: "application/x-www-form-urlencoded",
            dataType: "html",
            url: "http://www.*****.com",  //这里是网址
            success:function(data){alert(data);},
            timeout:30000, 
            error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(errorThrown);
            }
        });

 

6、请编写子类Child,通过原型链方法和构造方法实现People父类继承,并调用say()说出自己的名字和年龄。
function People(name,age){
this.name = name;
this.age = age;
this.say = function(){
alert(this.name + "年龄:" + this.age);
}
}

http://www.cnblogs.com/humin/p/4556820.html

// 定义一个动物类
function Animal (name) {
  // 属性
  this.name = name || 'Animal';
  // 实例方法
  this.sleep = function(){
    console.log(this.name + '正在睡觉!');
  }
}
// 原型方法
Animal.prototype.eat = function(food) {
  console.log(this.name + '正在吃:' + food);
};

原型方法继承:
function Cat(){ 
}
Cat.prototype = new Animal();
Cat.prototype.name = 'cat';

// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
console.log(cat instanceof Animal); //true 
console.log(cat instanceof Cat); //true

使用构造方法继承:
function Cat(name){
  Animal.call(this);
  this.name = name || 'Tom';
}

// Test Code
var cat = new Cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof Animal); // false
console.log(cat instanceof Cat); // true

 

7、正则表达式考查题
1)格式为:2016-12-12 类型的日期格式校验正则表达式;
2)字符串解析:将格式诸如“[img:(src...)]”的字符串解析替换为“<a href = "src..."><img src = 'src...'></a>”;
var content = 'helloworld,[img:(http://www.37.com/helloworld.jpg)]';
//解析后输出:
'helloworld,<a href = "http://www.37.com/hello.jpg"><img src = 'http://www.37.com/helloworld.jpg'></a>';

var str = '9999-12-23'; 
if(str.match(/^((\d\d\d\d))-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/)) { 
alert('是日期'); 
} else { 
alert('不是日期'); 
} 

8、请描述zepto touch模块的移动事件?click与tap的区别?tap底层是对哪些事件的封装?

http://www.tuicool.com/articles/fURBr2v

如果手指移动屏幕超过30像素,则触发相应的滑动事件,swipeLeft, swipeRight, swipeUp, swipeDown

一、click 和 tap 比较

两者都会在点击时触发,但是在手机WEB端,click会有 200~300 ms,所以请用tap代替click作为点击事件。

singleTap和doubleTap 分别代表单次点击和双次点击。

二、关于tap的点透处理

在使用zepto框架的tap来移动设备浏览器内的点击事件,来规避click事件的延迟响应时,有可能出现点透的情况,即点击会触发非当前层的点击事件。

 

tap 事件相当于 pc 浏览器中的 click 效果,虽然在触屏设备上 click 事件仍然可用,但是在很多设备上,click 会存在一些延迟,如果想要快速响应的 “click” 事件,需要借助 touch 事件来实现。

 

9、算法题:请用JS实现冒泡排序算法

function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; }

10、前端如何对web进行性能上的优化?有什么检测工具?

http://www.cnblogs.com/mofish/archive/2010/10/12/1849041.html

一、提倡前端开发工程师在书写xhtml的时候做到结构语义化。

二、css,js文件数量及大小的优化(外联式;减少HTTP请求数)

三、背景图片数量及大小的优化(这里建议使用PNG8格式的图片结合css sprite,同样的图片,PNG8格式会相对来比GIF小)

四、内容图片的大小的优化

 

工具:http://blog.csdn.net/five3/article/details/7686376

 

11、说说你所知道的提高前端开发效率的工具或方法?

 

 

 

 

排序:http://www.jianshu.com/p/1b4068ccd505

http://www.divcss5.com/rumen/r120.shtml


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM