(在放大镜中寻找你)javascript
前言css
我是一名前端开发,从2016年6月毕业到现在步入工做,期间也面试了一些公司,参考过一些面试文档,学习了一些面试宝典,掌握了一些面试、笔试技巧和经验,因此就总结了一些优质的前端面试题以及面试要点,初学者阅后也要用心钻研其中的原理,重要知识须要系统学习,透彻学习,才能造成本身的知识链,以不变应万变,万不可投机取巧,只求面试过关哦!html
面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑、新技术↑。前端
题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。html5
进行追问: 能够确保问到你开始不懂或面试官开始不懂为止,这样能够大大延展题目的区分度和深度,知道你的实际能力。由于这种关联知识是长时间的学习,绝对不是临时抱佛脚得来的。java
言语态度:回答问题再棒,面试官(多是你的直接领导面试),会考虑我要不要这我的作个人同事?作个人员工?因此态度很重要。(感受更像是相亲)git
硬知识才能:资深的工程师能把absolute和relative弄混,这样的人不要也罢,由于团队须要的你这我的具备能够依靠的才能(靠谱)。github
一、HTML&CSSweb
html:超级文本标记语言(HyperText Markup Language)面试
css:层叠样式表(Cascading Style Sheets)对Web标准的理解、浏览器内核差别、兼容性、hack、CSS基本功:布局、盒子模型、浮动和定位、选择器优先级及使用、HTML五、CSS三、移动端适应
二、JavaScript
ECMAScript标准规范,描述这门语言的实现细节和标准。
基础部分
数据类型、运算符、结构语句、面向对象、函数、正则表达式。
应用部分
window对象、document对象、继承、闭包、插件、做用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等
三、jQuery
对象的结构、jQuery的方法挂在哪里、插件制做、jQuery的经常使用方法、选择器、jQuery的事件用法
四、其余
HTTP、安全、正则、优化、重构、响应式、移动端、团队协做、后台相关、编辑器和自动化工具、新技术、前端自动化、可维护、SEO、UED、架构、职业生涯等
做为一名前端工程师,不管工做年头长短都应该必须掌握的知识点:
DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
DOM操做 ——如何添加、移除、移动、复制、建立和查找节点等。
事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差异,以及经常使用的事件委托。
XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。
严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。
盒模型 —— 外边距、内边距和边框之间的关系,及IE8如下版本的浏览器中的盒模型
块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
HTML与XHTML——两者有什么区别,你以为应该使用哪个并说出理由。
JSON —— 做用、用途、设计结构。
备注:
根据本身须要选择性阅读,面试题是对理论知识的总结,让本身学会应该如何表达。资料答案不够正确和全面,欢迎补充答案、题目;最好是如今网上没有的。格式不断修改更新中。
HTML
标签闭合、标签小写、不乱嵌套、使用外链css和js、结构行为表现的分离。
<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签以前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档
严格模式的排版和 JS 运做模式是 以该浏览器支持的最高标准运行。
在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点没法工做。 DOCTYPE不存在或格式不正确会致使文档以混杂模式呈现。
CSS规范规定,每一个元素都有display属性,肯定该元素的类型,每一个元素都有默认的display值, 好比div默认display属性值为“block”,成为“块级”元素; span默认display属性值为“inline”,是“行内”元素。
行内元素有:a b span img input select strong(强调的语气)
块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
知名的空元素:` <br> <hr> <img> <input> <link> <meta>
不为人知的是:<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
行内元素不能够设置宽高,不独占一行;
块级元素能够设置宽高,独占一行。
link属于XHTML标签,而@import是CSS提供的;
页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;
link方式的样式的权重 高于@import的权重。
IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink。
png24位的图片在iE6浏览器上出现背景,解决方案是作成PNG8。
浏览器默认的margin和padding不一样。解决方案是加一个全局的*{margin:0;padding:0;}来统一,,可是全局效率很低,通常是以下这样解决:
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{ margin:0; padding:0; }
IE6双边距bug:块属性标签float后,又有横行的margin状况下,在ie6显示margin比设置的大。
浮动ie产生的双倍距离#box{ float:left; width:10px; margin:0 0 0 100px;}
这种状况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;
将其转化为行内属性。(_这个符号只有ie6会识别)渐进识别的方式,从整体中逐渐排除局部。首先,巧妙的使用“9”这一标记,将IE游览器从全部状况中分离出来。接着,再次使用“+”将IE8和IE七、IE6分离开来,这样IE8已经独立识别。
css中存在的兼容问题
.bb{ background-color:#f1ee18;/*全部识别*/ .background-color:#00deff\9; /*IE六、七、8识别*/ +background-color:#a200ff;/*IE六、7识别*/ _background-color:#1e0bd1;/*IE6识别*/ }
IE下,可使用获取常规属性的方法来获取自定义属性,也可使用getAttribute()获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性.解决方法:统一经过getAttribute()获取自定义属性.
IE下,even对象有x,y属性,可是没有pageX,pageY属性;Firefox下,event对象有pageX,pageY属性,可是没有x,y属性.
解决方法:(条件注释)缺点是在IE浏览器下可能会增长额外的HTTP请求数。
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 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务、画布、强后台相关技术等功能的增长。他的新的定义为:一套新的javascriptAPI和若干小的对html结构的改动。
绘画 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新标签,浏览器支持新标签后,还须要添加标签默认的样式:
固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
用正确的标签作正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CCS状况下也以一种文档格式显示,而且是容易阅读的。
搜索引擎的爬虫依赖于标记来肯定上下文和各个关键字的权重,利于 SEO。
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 数据在浏览器关闭后自动删除。
(写)描述一段语义的html代码
(HTML5中新增长的不少标签(如:<article>、<nav>、<header>和<footer>等)就是基于语义化设计原则)
< div id="header"> < h1>标题< /h1> < h2>专一Web前端技术< /h2> < /div>
*iframe会阻塞主页面的Onload事件;
*iframe和主页面共享链接池,而浏览器对相同域的链接有限制,因此会影响页面的并行加载。 使用iframe以前须要考虑这两个缺点。若是须要使用iframe,最好是经过javascript 动态给iframe添加src属性值,这样能够能够绕开以上两个问题。
cookie在浏览器和服务器间来回传递。
sessionStorage和localStorage不会 sessionStorage和localStorage的存储空间更大;
sessionStorage和localStorage有更多丰富易用的接口;
sessionStorage和localStorage各自独立的存储空间;
调用localstorge、cookies等本地存储方式
Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR
CSS
(1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;
(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).
1.id选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul > li)
6.后代选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = “external”])
9.伪类选择器(a: hover, li: nth – child)
可继承的样式: font-size font-family color ul li dl dd dt;
不可继承的样式:border padding margin width height ;
优先级为:
!important > id > class > tag
important 比 内联优先级高
优先级就近原则,同权重状况下样式定义最近者为准;
载入样式以最后载入的定位为准;
p:first-of-type 选择属于其父元素的首个 <p> 元素的每一个 <p>
元素。
p:last-of-type 选择属于其父元素的最后<p> 元素的每一个 <p>
元素。
p:only-of-type 选择属于其父元素惟一的<p> 元素的每一个 <p>
元素。
p:only-child 选择属于其父元素的惟一子元素的每一个 <p>
元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每一个 <p>
元素。
:enabled :disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。
// 给div设置一个宽度,而后添加margin:0 auto属性 div{ width:200px; margin:0 auto; }
结构层 Html 表示层 CSS 行为层 js
1.使用空标签清除浮动clear:both(缺点,增长无心义的标签,让人感受很不爽)
2.使用overflow:auto(使用zoom:1用于兼容IE,缺点:内部宽高超过父级div时,会出现滚动条)
3.是用afert伪元素清除浮动(IE8以上和非IE浏览器才支持,目前:大型网站都有使用,如:腾迅,网易,新浪等等)
1.肯定容器的宽高 宽500 高 300 的层
2.设置层的外边距
.div { Width:500px ; height:300px;//高度能够不设 Margin: -150px 0 0 -250px; position:relative;相对定位 background-color:pink;//方便看效果 left:50%; top:50%; }
block 象块类型元素同样显示。
none 缺省值。象行内元素类型同样显示。
inline-block 象行内元素同样显示,但其内容象块类型元素同样显示。
list-item 象块类型元素同样显示,并添加样式列表标记。
*absolute:生成绝对定位的元素,相对于 static 定位之外的第一个父元素进行定位。
*fixed:生成绝对定位的元素,相对于浏览器窗口进行定位。
*relative:生成相对定位的元素,相对于其正常位置进行定位。
static 默认值。没有定位,元素出如今正常的流中
(忽略 top, bottom, left, right z-index 声明)。
inherit 规定从父元素继承 position 属性的值。
CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),
对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
增长了更多的CSS选择器 多背景 rgba
由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。
固然,初始化样式会对SEO有必定的影响,但鱼和熊掌不可兼得,但力求影响最小的状况下初始化。最简单的初始化方法就是: {padding: 0; margin: 0;} (不建议)
淘宝的样式初始化:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; } body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; } h1, h2, h3, h4, h5, h6{ font-size:100%; } address, cite, dfn, em, var { font-style:normal; } code, kbd, pre, samp { font-family:couriernew, courier, monospace; } small{ font-size:12px; } ul, ol { list-style:none; } a { text-decoration:none; } a:hover { text-decoration:underline; } sup { vertical-align:text-top; } sub{ vertical-align:text-bottom; } legend { color:#000; } fieldset, img { border:0; } button, input, select, textarea { font-size:100%; } table { border-collapse:collapse; border-spacing:0; }
(他们之间优先级的关系)
综上所述,一、能够把它看做是一个相似优先级的机制, "position:absolute" 和 "position:fixed" 优先级最高,有它存在的时候,浮动不起做用,'display' 的值也须要调整; 二、元素的 'float' 特性的值不是 "none" 的时候或者它是根元素的时候,调整 'display' 的值; 三、非根元素,而且非浮动元素,而且非绝对定位的元素,'display' 特性值同设置值。
这从另外一个侧面说明了一个问题:浮动或绝对定位的元素,只能是块元素或表格。
(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关 系和相互做用。)
SASS、LESS
多数显示器默认频率是60Hz,即1秒刷新60次,因此理论上最小间隔为1/60*1000ms = 16.7ms
移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing
JavaScript
它的功能是把对应的字符串解析成JS代码并运行; 应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)。
目前,null和undefined基本是同义的,只有一些细微的差异。
null表示"没有对象",即该处不该该有值。典型用法是:
(1) 做为函数的参数,表示该函数的参数不是对象。
(2) 做为对象原型链的终点。
Object.getPrototypeOf(Object.prototype) // null
undefined表示"缺乏值",就是此处应该有一个值,可是尚未定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
var i; i // undefined function f(x){console.log(x)} f() // undefined var o = new Object(); o.p // undefined var x = f(); x // undefined
// event(事件)工具集,来源:github.com/markyun markyun.Event = { // 页面加载完成后 readyEvent : function(fn) { if (fn==null) { fn=document; } var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = fn; } else { window.onload = function() { oldonload(); fn(); }; } }, // 视能力分别使用dom0||dom2||IE方式 来绑定事件 // 参数: 操做的元素,事件名称 ,事件处理程序 addEvent : function(element, type, handler) { if (element.addEventListener) { //事件类型、须要执行的函数、是否捕捉 element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent('on' + type, function() { handler.call(element); }); } else { element['on' + type] = handler; } }, // 移除事件 removeEvent : function(element, type, handler) { if (element.removeEnentListener) { element.removeEnentListener(type, handler, false); } else if (element.datachEvent) { element.detachEvent('on' + type, handler); } else { element['on' + type] = null; } }, // 阻止事件 (主要是事件冒泡,由于IE不支持事件捕获) stopPropagation : function(ev) { if (ev.stopPropagation) { ev.stopPropagation(); } else { ev.cancelBubble = true; } }, // 取消事件的默认行为 preventDefault : function(event) { if (event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } }, // 获取事件目标 getTarget : function(event) { return event.target || event.srcElement; }, // 获取event对象的引用,取到事件的全部信息,确保随时能使用event; getEvent : function(e) { var ev = e || window.event; if (!ev) { var c = this.getEvent.caller; while (c) { ev = c.arguments[0]; if (ev && Event == ev.constructor) { break; } c = c.caller; } } return ev; } };
高并发、聊天、实时消息推送
number,string,boolean,object,undefined
经过原型和构造器
[1, NaN, NaN] 由于 parseInt 须要两个参数 (val, radix),其中 radix 表示解析时用的基数。map 传了 3 个 (element, index, array),对应的 radix 不合法致使解析失败。
注明:今天先更新到这里,有一些问题没有给出答案提示,你们能够先自行思考一下,明天会继续更面试要点,期待你的到来!真心但愿这些知识点能够帮到有须要的人。
注:原文有较大改动
使用 keyframes, animation属性,例如timing, delay,play state, animation-count, iteration count, direction,fill mode以及will-change等等 创造动画魔法
做为设计者、开发人员,除去精简的用户界面,更好的页面加载速度外,咱们发现经过给界面添加动画效果,能够增长用户与网站的互动率,可以更好的吸引用户使用咱们的产品。CSS3 相对于原先的基于 JavaScript 操做 Dom 实现动画的方式而已,CSS现在拥有更好的兼容性。因此本文就介绍CSS动画的一些基本知识。
keyframes
经过逐渐改变对象的运动状态的方式,咱们能够将动画应用到到页面上的任何对象上。然而利用keyframes特性,咱们即可以控制动画对象每一阶段的状态。
@keyframes pulse {
0% {
transform: scale3d(1, 1, 1);
}
50%{
transform: scale3d(1.1, 1.1, 1.1);
}
100% {
transform: scale3d(1, 1, 1);
}
}
咱们尝试思考如下这个例子:
动画名(Animation name): pulse
3个步骤:0%(state time), 50%(x time), 100% (end time)
CSS值:scale3d(x, y, z)
当动画已经在(@keyframes)中定义好后,咱们能够控制如下几样东西:
动画的持续时间
延迟多久动画开始
动画的重复频率
动画的方向
如下是实现示例:
button {
animation-duration: 1s;
animation-name: pulse;
}
在以上示例中,咱们给一个Button添加了动画 pulse,定义了持续时长(duration)为1秒。 若是咱们调整了这个持续时长属性的值,则能够看到这个Button就会出现一个还不错的效果。如图:
Demo地址:http://codepen.io/phyesix/pen...
1.动画时间(Animation Timing)
动画时间函数是用于决定咱们但愿动画在移动周期内要进行加速和减速效果的时间。因此,为了实现这个效果,咱们须要定义动画将要移动的速度。这里有一些咱们常见的动画时间属性的选项值,例如:initial,inherit, ease, ease-in, ease-out, 还有linear等等。
动画时间函数:左(ease)右(linear) 以上的选项是很直接的调整动画的方法。然而经过自定义贝塞尔曲线的值,能够知足你具体的动画时间需求。
关于如何使用贝塞尔曲线的方法咱们能够经过查看Mozilla的开发者网站
2.动画延时 (Animation Delay)
动画延时经常应用于当咱们须要对动画进行的延时操做的时候。即当某个动画被触发了,而后延时1S后开始执行。例如: 咱们对“Send FeedBack"按钮添加了延时处理:
动画延时:左(1秒), 右(2秒)
3.动画播放状态(Animation Play State)
动画播放状态经常用来控制动画是否须要暂停或者继续。
运行(running): 动画继续
暂停(paused): 动画中止
Demo地址:http://codepen.io/phyesix/pen...
4.动画的循环次数
循环次数指单位时间内,动画所重复执行的次数。
无限(infinite):无限循环
指定值(x):动画重复x次
继承(inherit):继承父级的循环次数
Demo地址:http://codepen.io/phyesix/pen...
5.动画方向(Animation Direction)
动画方向是用于指定动画对象的移动方向。例如是从尺寸0%到100%,仍是从100%到%0,又或者是从0%到100%的大小,而后反转从100%到0%。
顺序的(Normal): 指动画从0%到100%顺序执行
倒序(Reverse): 动画从100%做为起点位置开始到0%倒序执行
交替(Alernate): 动画先从0%变化到100%,而后从100%返回到0%
反转-交替(Alternate-reverse): 动画从100%到0%倒序, 而后又从0%前进到100%正序执行
Demo地址:http://codepen.io/phyesix/pen...
6.动画填充模式(Animation Fill Mode)
咱们须要知道,当动画执行结束后,在动画执行期间给对象元素所添加的样式并非永久的。这个样式仅仅是在动画期间被应用而后即被移除。关于动画应用的模式,咱们可使用如下属性值来表示:
向后(Backward): 在动画处于0%时,样式会被应用到元素上
向前(Forward): 在动画处于100%时,样式会被应用到元素上
兼得(Both): 在动画开始和结束时样式会被应用
初始值(Initial): 设置这个属性为默认值
Demo地址:http://codepen.io/phyesix/pen...
7.将要改变(Will-Change)
很是感谢 Will-Change 特性。能够经过 Will-Change 属性,咱们能够在动画执行前,提早通知浏览器上咱们将要执行动画的对象元素。这就容许了咱们能够一次性的对元素的多个属性进行动画操做。从而减小大部分动画执行期间潜在的性能损耗问题。
button {
will-change: transform, opacity;
}
下面的代码我声明了将会对全部元素的全部属性执行动画,即便是非动画区域。
, ::before, *::after {
will-change: all
}
很显然,上面的这种使用方法会带来一些没有必要的系统资源的占用和性能损耗。 因此,咱们应该尽量在所须要的元素上使用CSS动画。更多关于 Will-Change 的特性的信息请看:https://dev.opera.com/article...
4个超级属性
在keyframes里,咱们几乎可使用任何的CSS属性。在现在的大部分浏览器中,你能够放心的使用 position, scale, rotation, opacity 等等属性值。而且这4个属性能够给动画效果带来更高效,更好的性能表现。
引用:https://www.html5rocks.com/en...
结语
以上列举的都是些实现CSS动画的基本属性,一旦了解了这些基础,从而更方便的开始进行动画创做。 关于不少你可能感兴趣的CSS动画应用和实例资源,能够查看Codepen的CSS动画单元。
翻译地址:http://imziv.com/blog/article...
原文连接:https://stories.jotform.com/h...
好了,下面是广告时间。前端学习群,入群即送学习资料。如今还不满,从速哦!入群加笑笑微信:iamaixiaoxiao。