From 92053549904e9c491ee75dc69ab0a6766bc3d566 Mon Sep 17 00:00:00 2001 From: wangwenjie <1662484899@qq.com> Date: Sat, 13 Aug 2016 19:30:37 +0800 Subject: [PATCH 01/33] update --- README.md | 67 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index eb4982a..1138e66 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -#2014年最新前端开发面试题(转自markyun) +# 2016年前端开发面试题 + +## 原始基础版转自markyun + ### PS:在其基础上完善了一些答案,增加一些问题 欢迎fork wj:) ## 目录 @@ -15,20 +18,20 @@ 本文总结了一些优质的前端面试题(多数源于网络),初学者阅后也要用心钻研其中的原理,重要知识需要系统学习,透彻学习,形成自己的知识链。万不可投机取巧,只求面试过关是错误的! -###面试有几点需注意:(来源程劭非老师 github:@wintercn) +### 面试有几点需注意:(来源程劭非老师 github:@wintercn) 1. 面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑。 -1. 题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。 +2. 题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。 -1. 进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度,知道你的实际能力。因为这种关联知识是长时期的学习,绝对不是临时记得住的。 +3. 进行追问: 可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度,知道你的实际能力。因为这种关联知识是长时期的学习,绝对不是临时记得住的。 -1. 回答问题再棒,面试官(可能是你的直接领导面试),会考虑我要不要这个人做我的同事?所以态度很重要。(感觉更像是相亲) +4. 回答问题再棒,面试官(可能是你的直接领导面试),会考虑我要不要这个人做我的同事?所以态度很重要。(感觉更像是相亲) -1. 资深的工程师能把absolute和relative弄混,这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)。 +5. 资深的工程师能把absolute和relative弄混,这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)。 -**前端开发面试知识点大纲:** +#### 前端开发面试知识点大纲 ```html HTML&CSS: @@ -109,29 +112,29 @@ DOM事件模型最独特的性质是,文本节点也触发事件(在IE中不 ``` @@ -846,7 +849,6 @@ SASS (SASS、LESS没有本质区别,只因为团队前端都是用的SASS) - png、jpg、gif 这些图片格式解释一下,分别什么时候用。有没有了解过webp? - - 什么是Cookie 隔离?(或者说:请求资源的时候不要让它带cookie怎么做) ```html @@ -1055,7 +1057,7 @@ javascript创建对象简单的说,无非就是使用内置对象或各种自定 - 谈谈This对象的理解。 -- 什么是window对象? 什么是document对象? +- 什么是window对象? 什么是document对象? - 看看下面运行结果? @@ -1091,7 +1093,6 @@ abc17def null表示一个对象被定义了,值为“空值”; undefined 表示不存在这个值。 - typeof undefined //"undefined" undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined; @@ -1623,7 +1624,6 @@ setTimeout 的第一个参数使用字符串而非函数的话,会引发内存 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环) ``` - - JQuery一个对象可以同时绑定多个事件,这是如何实现的? - Node.js的适用场景? @@ -1796,6 +1796,13 @@ for(var i=0; i<10;i++){ 5、是否了解Promise? http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345008539155e93fc16046d4bb7854943814c4f9dc2000 + +6、前后端分离,你们团队是如何协作开发的; + +7、写一个todolist(Jquery、Angular、React) + +8、你们团队现在使用的前端框架(PC、H5)、前端自动化工具、常用库、插件,是否沉淀组件库等 + ``` ## 其他问题 From a73bfa11171f77c9f3aa9138fe50561a3eae8c95 Mon Sep 17 00:00:00 2001 From: wenjiewang Date: Thu, 12 Jul 2018 22:01:03 +0800 Subject: [PATCH 02/33] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=9D=A2=E8=AF=95?= =?UTF-8?q?=E7=BB=8F=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 349 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 178 insertions(+), 171 deletions(-) diff --git a/README.md b/README.md index 1138e66..9526d0e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,11 @@ -# 2016年前端开发面试题 +# 前端开发面试题 + +## 2018-07-12 更新 + +``` +总结了17年初到18年初百场前端面试的面试经验(含答案) +https://juejin.im/post/5b44a485e51d4519945fb6b7 +``` ## 原始基础版转自markyun @@ -10,8 +17,8 @@ 2. [HTML 部分](#user-content-html) 3. [CSS 部分](#user-content-css) 4. [JavaScript 部分](#user-content-js) - 5. [其他问题](#user-content-other) - 6. [优质网站推荐](#user-content-web) + 5. [其他问题](#user-content-other) + 6. [优质网站推荐](#user-content-web) ## 前言 ## @@ -36,9 +43,9 @@ ```html HTML&CSS: 对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、 -选择器优先级及使用、HTML5、CSS3、移动端适应 +选择器优先级及使用、HTML5、CSS3、移动端适应 -JavaScript: +JavaScript: 数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、 内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。 @@ -48,28 +55,28 @@ HTTP、安全、正则、优化、重构、响应式、移动端、团队协作 作为一名前端工程师,**无论工作年头长短都应该必须掌握的知识点**: -此条由 王子墨 发表在 [前端随笔](http://julying.com/blog/front-end-engineers-must-master-knowledge/) - +此条由 王子墨 发表在 [前端随笔](http://julying.com/blog/front-end-engineers-must-master-knowledge/) + 1、DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。 ```html -document.documentElement 返回文档的根节点 -document.body -document.activeElement 返回当前文档中被击活的标签节点(ie) -event.fromElement 返回鼠标移出的源节点(ie) -event.toElement 返回鼠标移入的源节点(ie) -event.srcElement 返回激活事件的源节点(ie) -event.target 返回激活事件的源节点(firefox) -当前对象为node -返回父节点:node.parentNode, node.parendElement, -返回所有子节点:node.childNodes(包含文本节点及标签节点),node.children -返回第一个子节点:node.firstChild -返回最后一个子节点: node.lastChild -返回同属上一个子节点:node.nextSibling -返回同属下一个子节点:node.previousSibling +document.documentElement 返回文档的根节点 +document.body +document.activeElement 返回当前文档中被击活的标签节点(ie) +event.fromElement 返回鼠标移出的源节点(ie) +event.toElement 返回鼠标移入的源节点(ie) +event.srcElement 返回激活事件的源节点(ie) +event.target 返回激活事件的源节点(firefox) +当前对象为node +返回父节点:node.parentNode, node.parendElement, +返回所有子节点:node.childNodes(包含文本节点及标签节点),node.children +返回第一个子节点:node.firstChild +返回最后一个子节点: node.lastChild +返回同属上一个子节点:node.nextSibling +返回同属下一个子节点:node.previousSibling parentNode和parentElement功能一样,childNodes和children功能一样。但是parentNode和 -childNodes是符合W3C标准的,可以说比较通用。而另外两个只是IE支持,不是标准,Firefox就不支持 -,所以大家只要记得有parentElement和children就行了 +childNodes是符合W3C标准的,可以说比较通用。而另外两个只是IE支持,不是标准,Firefox就不支持 +,所以大家只要记得有parentElement和children就行了 ``` 2、DOM操作——怎样添加、移除、移动、复制、创建和查找节点。 @@ -215,26 +222,26 @@ JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 JSON建构于两种结构: “名称/值”对的集合(A collection of name/value pairs)。 不同的语言中,它被理解为对象(object),纪录(record),结构(struct), -字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 +字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。 ``` -**备注:** +**备注:** 根据自己需要选择性阅读,面试题是对理论知识的总结,让自己学会应该如何表达。 -资料答案不够正确和全面,**欢迎补充**答案、题目;最好是现在网上没有的。 +资料答案不够正确和全面,**欢迎补充**答案、题目;最好是现在网上没有的。 -格式不断修改更新中。 +格式不断修改更新中。 ## HTML -- Doctype作用? 严格模式与混杂模式如何区分?它们有何意义? +- Doctype作用? 严格模式与混杂模式如何区分?它们有何意义? ```html (1)、 声明位于文档中的最前面,处于 标签之前。告知浏览器的解析器, -用什么文档类型 规范来解析这个文档。 +用什么文档类型 规范来解析这个文档。 (2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。 @@ -256,14 +263,14 @@ HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype ```html (1)CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值, 比如div默认display属性值为“block”,成为“块级”元素; -span默认display属性值为“inline”,是“行内”元素。 - +span默认display属性值为“inline”,是“行内”元素。 + (2)行内元素有:a b span img input select strong(强调的语气); -块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p - -(3)知名的空元素: -

-鲜为人知的是: +块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p + +(3)知名的空元素: +

+鲜为人知的是: ``` @@ -286,17 +293,17 @@ inline-block:是使元素以块级元素的形式呈现在行内。 ```html (1)link属于XHTML标签,而@import是CSS提供的; - + (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; - + (3)import只在IE5以上才能识别,而link是XHTML标签,无兼容问题; - + (4)link方式的样式的权重 高于@import的权重. ``` - 介绍一下你对浏览器内核的理解? -```html +```html 主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。 渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。 @@ -308,7 +315,7 @@ JS引擎则:解析和执行javascript来实现网页的动态效果。 - 浏览器的内核分别是什么? -```html +```html Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML] Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等 @@ -327,16 +334,16 @@ Webkit内核:Safari,Chrome等。 [ Chrome的:Blink(WebKit的分支)] - 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。 -- IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。 +- IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。 -浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;} +浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;} 这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中 加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别) -渐进识别的方式,从总体中逐渐排除局部。 +渐进识别的方式,从总体中逐渐排除局部。 -首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。 +首先,巧妙的使用“\9”这一标记,将IE游览器从所有情况中分离出来。 接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。 css @@ -344,39 +351,39 @@ css background-color:#f1ee18;/*所有识别*/ .background-color:#00deff\9; /*IE6、7、8识别*/ +background-color:#a200ff;/*IE6、7识别*/ -_background-color:#1e0bd1;/*IE6识别*/ -} +_background-color:#1e0bd1;/*IE6识别*/ +} - IE下,可以使用获取常规属性的方法来获取自定义属性, 也可以使用getAttribute()获取自定义属性; -Firefox下,只能使用getAttribute()获取自定义属性. +Firefox下,只能使用getAttribute()获取自定义属性. 解决方法:统一通过getAttribute()获取自定义属性. -- IE下,even对象有x,y属性,但是没有pageX,pageY属性; +- IE下,even对象有x,y属性,但是没有pageX,pageY属性; Firefox下,event对象有pageX,pageY属性,但是没有x,y属性. - 解决方法:(条件注释)缺点是在IE浏览器下可能会增加额外的HTTP请求数。 -- Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, +- Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决. 超链接访问过后hover样式就不出现了 被点击访问过的超链接样式不在具有hover和active了解决方法是改变CSS属性的排列顺序: L-V-H-A : a:link {} a:visited {} a:hover {} a:active {} ``` -- html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 +- html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5? ```html - HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。 -- 绘画 canvas -用于媒介回放的 video 和 audio 元素 +- 绘画 canvas +用于媒介回放的 video 和 audio 元素 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失; sessionStorage 的数据在浏览器关闭后自动删除 -语意化更好的内容元素,比如 article、footer、header、nav、section -表单控件,calendar、date、time、email、url、search +语意化更好的内容元素,比如 article、footer、header、nav、section +表单控件,calendar、date、time、email、url、search 新的技术webworker, websockt, Geolocation - 移除的元素 @@ -393,14 +400,14 @@ sessionStorage 的数据在浏览器关闭后自动删除 浏览器支持新标签后,还需要添加标签默认的样式: - 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架 - + 如何区分: DOCTYPE声明\新增的结构元素\功能元素 ``` - 语义化的理解? - + ```html 用正确的标签做正确的事情! html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析; @@ -450,14 +457,14 @@ sessionStorage 数据在浏览器关闭后自动删除。 ```html (HTML5中新增加的很多标签(如: