关于笔经面经参考:2015校园招聘阿里巴巴前端笔经面经
请解释一下什么是语义化的HTML。语义化HTML的优点
根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。
语义化HTML优点:
1,去掉或者丢失样式的时候能够让页面呈现出清晰的结构
2,有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;
3,方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;
4,便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。
写html时注意点:
尽可能少的使用无语义的标签div和span;
在语义不明显时,既可以使用div或者p时,尽量用p, 因为p在默认情况下有上下间距,对兼容特殊终端有利;
不要使用纯样式标签,如:b、font、u等,改用css设置。
需要强调的文本,可以包含在strong或者em标签中(浏览器预设样式,能用CSS指定就不用他们),strong默认样式是加粗(不要用b),em是斜体(不用i);
使用表格时,标题要用caption,表头用thead,主体部分用tbody包围,尾部用tfoot包围。表头和一般单元格要区分开,表头用th,单元格用td;
表单域要用fieldset标签包起来,并用legend标签说明表单的用途;
每个input标签对应的说明文本都需要使用label标签,并且通过为input设置id属性,在lable标签中设置for=someld来让说明文本和相对应的input关联起来。
HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
区别:
1.所有的标记都必须要有一个相应的结束标记
2.所有标签的元素和属性的名字都必须使用小写
3.所有的XML标记都必须合理嵌套
4.所有的属性必须用引号""括起来
5.把所有<和&特殊符号用编码表示
6.给所有属性赋一个值
7.不要在注释内容中使“--”
8.图片必须有说明文字
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
需要浮动的元素可使用CSS中float属性来定义元素的浮动位置,left:往左浮动,right:往右浮动
浮动元素引起的问题:
(1)父元素的高度无法被撑开,影响与父元素同级的元素
(2)与浮动元素同级的非浮动元素会跟随其后
(3)若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构
解决方法:
使用CSS中的clear:both;属性来清除元素的浮动可解决2、3问题,对于问题1,添加如下样式,给父元素添加clearfix样式:
.clearfix:after{content: ".";display: block;height: 0;clear: both;visibility: hidden;}
.clearfix{display: inline-block;} /* for IE/Mac */
清除浮动的几种方法:
1,额外标签法,<div style="clear:both;"></div>(缺点:不过这个办法会增加额外的标签使HTML结构看起来不够简洁。)
2,使用after伪类
#parent:after{
content:".";
height:0;
visibility:hidden;
display:block;
clear:both;
}
3,浮动外部元素
4,设置overflow为hidden或者auto
盒模型——外边距、内边距和边框之间的关系,IE 8以下版本的浏览器中的盒模型有什么不同。
一个元素盒模型的层次从内到外分别为:内边距、边框和外边距
IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框
严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
在标准模式中,浏览器根据规范呈现页面;
在混杂模式中,页面以一种比较宽松的向后兼容的方式显示。
浏览器根据DOCTYPE是否存在以及使用的哪种DTD来选择要使用的呈现方法。如果XHTML文档包含形式完整的DOCTYPE,那么它一般以标准模式
呈现。对于HTML
4.01文档,包含严格DTD的DOCTYPE常常导致页面以标准模式呈现。包含过渡DTD和URI的DOCTYPE也导致页面以标准模式呈现,但是有过
渡DTD而没有URI会导致页面以混杂模式呈现。DOCTYPE不存在或形式不正确会导致HTML和XHTML文档以混杂模式呈现。
apply 和 call的作用
动态改变某个类的某个方法的运行环境。
****************************senior***********************************
你能描述一下渐进增强和优雅降级之间的不同吗?
* 如果提到了特性检测,可以加分。
优雅降级和渐进增强印象中是随着css3流出来的一个概念。由于低级浏览器不支持css3,但css3的效果又太优秀不忍放弃,所以在高级浏览中使用css3而低级浏览器只保证最基本的功能。咋一看两个概念差不多,都是在关注不同浏览器下的不同体验,关键的区别是他们所侧重的内容,以及这种不同造成的工作流程的差异。
渐进增强 progressive enhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 graceful degradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。
区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。
什么是FOUC?你如何来避免FOUC?
如果使用import方法对CSS进行导入,会导致某些页面在Windows 下的Internet Explorer出现一些奇怪的现象:以无样式显示页面内容的瞬间闪烁,这种现象称之为文档样式短暂失效(Flash of Unstyled Content),简称为FOUC.原因大致为:
1,使用import方法导入样式表。
2,将样式表放在页面底部
3,有几个样式表,放在html结构的不同位置。其实原理很清楚:当样式表晚于 结构性html 加载,当加载到此样式表时,页面将停止之前的渲染。此样式表被下载和解析后,将重新渲染页面,也就出现了短暂 的 花屏现象。解决方法:使用LINK标签将样式表放在文档HEAD中更多
javascript对象的几种创建方式
1,工厂模式
2,构造函数模式
3,原型模式
4,混合构造函数和原型模式
5,动态原型模式
6,寄生构造函数模式
7,稳妥构造函数模式
javascript继承的6种方法
1,原型链继承
2,借用构造函数继承
3,组合继承(原型+借用构造)
4,原型式继承
5,寄生式继承
6,寄生组合式继承
接下来复习:
1, 输入网址到出现页面的过程(IP解析,DNS解析等)
分为4个步骤:
(1),当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。
(2),浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
(3),一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。
(4),此时,Web服务器提供资源服务,客户端开始下载资源。
2, ajax过程
(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.
(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.
(3)设置响应HTTP请求状态变化的函数.
(4)发送HTTP请求.
(5)获取异步调用返回的数据.
(6)使用JavaScript和DOM实现局部刷新.
3, 兼容性问题
1, 浮动双边距。
ie6下的bug,当给一个div元素设置float属性后,margin值会加倍,解决方法:给 div 设置display:inline;
2,设置元素的最小高度和最小宽度
(原因: ie6中元素高度是根据内容的高度而变化的,并且无法识别min-height属性,所以要显示给容器设置height。)
ie6不能识别属性min-height 和 min-width(采用!important方法修复)
3,上下margin重合。
ie和ff都存在,相邻的两个div的margin-left和margin-right不会重合,但是margin-top和margin-bottom却会发生重合。
解决方法,养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom。
4, ie6下无法设置微高
(原因:ie6下会拒绝高度小于字号的设置)
解决方案:font-size: 0; line-height:0;
5,ie6对png图片格式支持不好(引用一段脚本处理)
6, ie6下hover伪类的bug,ie6只支持a:hover,其它的伪类不支持
解决办法是: 采用javascript或jQuery来解决。
4, BOM
5, 框架源码和框架间的比较
jQuery, EXT, YUI, angular, ember, backbone, requireJS, seaJs, cordova等等。
6, javascript设计模式
7, 跨域请求
同源策略:同源指的是协议,域名,端口是否相同,同源策略是一种安全协议。
指一段脚本只能读取来自同一来源的窗口和文档的属性。
跨域请求的解决方案:
1,jsonp
2,document.domain
3,window.name
4,window.postMessage
8, 正则表达式
1, 身份证的正则表达式
var re = /(^d{15}$)|(^d{18}$)|(^d{17}(d|Xx)$)/;
2, 非负整数
var re = /^(0|([1-9]d*))$/;
3, 整整数
var re = /^[1-9]d*$/;
4, 非正整数
var re = /^(0|())$/;
9, 前端工具
npm, grunt, bower, YUI comprosser, google clojure, IETester, YSlow
10, 准备材料
包括一些获奖证书,实习证书,聘书等等
11,异步加载和延迟加载
异步加载的方案: 动态插入script标签
通过ajax去获取js代码,然后通过eval执行
script标签上添加defer或者async属性
创建并插入iframe,让它异步执行js
延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。
案例(瀑布流)
!important在 CSS 中表示优先调用, ie6不能识别这个属性
以上笔记都是平时容易忽略的。
可以Focus 我的github,接下来打算把之前写的一些整理优质代码push到github上。
我的github地址:https://github.com/liufeng-cheng
有问题可以留言,需要资料可以给我发邮件哦(包括个人简历都可以看情况提供参考)~
另外推荐前端书籍:
javascript 权威指南
git权威指南
Nodejs权威指南
高性能javascript
基于mvc的javascript富客户端应用
angularjs开发下一代web应用
精通正则表达式
javascript框架设计
HTML5高级程序设计
这几个站点不错,可以收藏一下
http://www.nowamagic.net/ 简明现代魔法,独立博客,我看了2年了
http://tomxu.cnblogs.com/ 汤姆大叔设计模式那一部分可以慢慢消化,感觉对闭包、作用域讲的挺深的,赞一个!!
http://www.css88.com/ css88,还可以啦
http://javascript.ruanyifeng.com/ javascript在线参考教程,挺不错的,写的很好,很全面
**********************alibaba front-end requirements***********************************
阿里要求:
在这里,你将参与交互设计师一起,美化产品线 Web功能的设计;
与视觉设计师一起,参与完成产品线 Web功能的开发与实现;
有机会参与各产品线用户体验、性能、架构等方面的改进与优化;
你还将加入到我们业内最前沿Web技术的研究与开发中。
我们希望你,可以熟练使用各种 Web 前端技术,包括(X)HTML/CSS/Javascript/JSON 等,并有相关的项目开发经验或成果;
我们希望你,有基于Ajax 应用的开发经验;深刻理解 Web 标准,对可用性、可访问性等相关知识有实际的了解; 对算法、数据结构以及后台开发(PHP/Java等)有一定了解;
我们希望你,关注新事物、新技术,有较强的学习能力,喜欢挑战;并且,个性乐观开朗,逻辑性强,善于和各种背景的人合作。
还等什么呢?快来加入我们的阿里巴巴,期待你的大展身手!