转载IMWeb团队,知乎地址:https://zhuanlan.zhihu.com/p/27945639
经典面试题
21.XHTML和HTML有什么区别
HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
22.什么是语义化的HTML?
直观的认识标签 对于搜索引擎的抓取有好处,用正确的标签做正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
23.常见的浏览器内核有哪些?
Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
Presto内核:Opera7及以上。 [Opera内核原为:Presto,现为:Blink;]Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)]
24.HTML5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和HTML5?
HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
绘画 canvas
用于媒介回放的 video 和 audio 元素
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除
语意化更好的内容元素,比如 article、footer、header、nav、section
表单控件,calendar、date、time、email、url、search
新的技术webworker, websockt, Geolocation
移除的元素
纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;
支持HTML5新标签:
IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,浏览器支持新标签后,还需要添加标签默认的样式:
前端思考题
11.前端开发中有什么经典的轮子值得自己去实现一遍?
我造过的轮子:LiuJi-Jim/jas:异步控制的工具,11年写的,只有60行,然而炒鸡好用,吃自己狗食的级别。LiuJi-Jim/raze-tpl:模板引擎,语法风骚迷人,吃自己狗食的级别。LiuJi-Jim/mirror:Virtual-DOM实现,玩具级别。LiuJi-Jim/h5pal:万吨巨轮,仙剑奇侠传web移植(介绍)。LiuJi-Jim/c-struct:一个用于JS读写C结构体的工具,从h5pal里拆出来重构的。还有一些烂尾了,还有一些不想发出来的,各种Promise、EventEmitter、Module Loader、山寨Lodash、数据结构、类工厂、MVC……不提也罢。
12.在你的日常开发中遇到过哪些常用布局是无法用纯 CSS 实现的?
多行文字溢出显示省略号
最大行数
更好用的 Flex
元素查询(Element Queries)
CSS 分页滚动
非矩形布局
流式 Grid 布局
在线编程题
16.函数的上下文
要求:将函数 fn 的执行上下文改为 obj 对象
思路:在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可。
function speak(fn, obj) {
return fn.apply(obj, obj);
}
17.流程控制
要求:实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz2、如果 num 能被 3 整除,返回字符串 fizz
3、如果 num 能被 5 整除,返回字符串 buzz
4、如果参数为空或者不是 Number 类型,返回 false
5、其余情况,返回参数 num
思路:能否整除即余数是否为0,则使用%运算符。使用if-elseif结构,只要某一条匹配,则下面的不会在进行判断。判断num是否为Number,可以用typeof运算符,返回的是字符串。
function fizzBuzz(num) {
if(num%3 == 0 && num%5 == 0)
return "fizzbuzz";
else if(num%3 == 0)
return "fizz";
else if(num%5 == 0)
return "buzz";
else if(num == null || typeof num != "number")
return false;
else return num;
}
18.返回函数
要求:实现函数 functionFunction,调用之后满足如下条件:
1、返回值为一个函数 f
2、调用返回的函数 f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ‘, ’
3、所有函数的参数数量为 1,且均为 String 类型
思路:首先执行functionFunction(‘Hello’),传入参数str,然后返回函数f,f与(‘world’)组合,执行f(‘world’),传入参数s,f返回str+”, “+s,即Hello, world。注意中间的逗号后面有一个空格。
function functionFunction(str) {
var f = function(s){
return str+", "+s;
}
return f;
}