-
Notifications
You must be signed in to change notification settings - Fork 522
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试问题答案综合版 #2
Comments
good!👍 |
谢谢分享~~~ |
冒泡好像有点小错误。。 |
点赞 |
写的不错,谢谢分享 |
|
第一部分:基础篇
一、HTML、HTTP、web综合问题
1 前端需要注意哪些SEO
title
、description
、keywords
:搜索对着三项的权重逐个减小,title
值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title
要有所不同;description
把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description
有所不同;keywords
列举出重要关键词即可HTML
代码,符合W3C规范:语义化代码让搜索引擎容易理解网页HTML
代码放在最前:搜索引擎抓取HTML
顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取js
输出:爬虫不会执行js获取内容iframe
:搜索引擎不会抓取iframe
中的内容alt
2
<img>
的title
和alt
有什么区别alt
是<img>
的特有属性,是图片内容的等价描述,用于图片无法加载时显示、读屏器阅读图片。可提图片高可访问性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析。3 HTTP的几种请求方法用途
GET
方法POST
方法URL
指定的资源提交数据或附加新的数据PUT
方法POST
方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT
指定了资源在服务器上的位置,而POST
没有HEAD
方法DELETE
方法OPTIONS
方法URL
所支持的方法。如果请求成功,会有一个Allow
的头包含类似“GET,POST”
这样的信息TRACE
方法TRACE
方法被用于激发一个远程的,应用层的请求消息回路CONNECT
方法TCP/IP
通道4 从浏览器地址栏输入url到显示页面的步骤
基础版本
URL
交给DNS
域名解析,找到真实IP
,向服务器发起请求;HTML、JS、CSS
、图象等);HTML、JS、CSS
等)进行语法解析,建立相应的内部数据结构(如HTML
的DOM
);详细版
Expires
和Cache-Control
:script
,meta
这样本身不可见的标签。2)被css隐藏的节点,如display: none
详细简版
从浏览器接收
url
到开启网络请求线程(这一部分可以展开浏览器的机制以及进程与线程之间的关系)开启网络线程到发出一个完整的
http
请求(这一部分涉及到dns查询,tcp/ip
请求,五层因特网协议栈等知识)从服务器接收到请求到对应后台接收到请求(这一部分可能涉及到负载均衡,安全拦截以及后台内部的处理等等)
后台和前台的
http
交互(这一部分包括http
头部、响应码、报文结构、cookie
等知识,可以提下静态资源的cookie
优化,以及编码解码,如gzip
压缩等)单独拎出来的缓存问题,
http
的缓存(这部分包括http缓存头部,etag
,catch-control
等)浏览器接收到
http
数据包后的解析流程(解析html
-词法分析然后解析成dom
树、解析css
生成css
规则树、合并成render
树,然后layout
、painting
渲染、复合图层的合成、GPU
绘制、外链资源的处理、loaded
和domcontentloaded
等)CSS
的可视化格式模型(元素的渲染规则,如包含块,控制框,BFC
,IFC
等概念)JS
引擎解析过程(JS
的解释阶段,预处理阶段,执行阶段生成执行上下文,VO
,作用域链、回收机制等等)其它(可以拓展不同的知识模块,如跨域,web安全,
hybrid
模式等等内容)5 如何进行网站性能优化
content
方面HTTP
请求:合并文件、CSS
精灵、inline Image
DNS
查询:DNS
缓存、将资源分布到恰当数量的主机名DOM
元素数量Server
方面CDN
ETag
Gzip
压缩Cookie
方面cookie
大小css
方面CSS
表达式<link>
不使用@import
Javascript
方面javascript
和css
从外部引入javascript
和css
DOM
访问图片方面
css
精灵HTML
中拉伸图片6 HTTP状态码及其含义
1XX
:信息状态码100 Continue
继续,一般在发送post
请求时,已发送了http header
之后服务端将返回此信息,表示确认,之后发送具体参数信息2XX
:成功状态码200 OK
正常返回信息201 Created
请求成功并且服务器创建了新的资源202 Accepted
服务器已接受请求,但尚未处理3XX
:重定向301 Moved Permanently
请求的网页已永久移动到新位置。302 Found
临时性重定向。303 See Other
临时性重定向,且总是使用GET
请求新的URI
。304 Not Modified
自从上次请求后,请求的网页未修改过。4XX
:客户端错误400 Bad Request
服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。401 Unauthorized
请求未授权。403 Forbidden
禁止访问。404 Not Found
找不到如何与URI
相匹配的资源。5XX:
服务器错误500 Internal Server Error
最常见的服务器端错误。503 Service Unavailable
服务器端暂时无法处理请求(可能是过载或维护)。7 语义化的理解
html
语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;CSS
情况下也以一种文档格式显示,并且是容易阅读的。SEO
。8 介绍一下你对浏览器内核的理解?
主要分成两部分:渲染引擎(
layout engineer
或Rendering Engine
)和JS
引擎渲染引擎:负责取得网页的内容(
HTML
、XML
、图像等等)、整理讯息(例如加入CSS
等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核JS
引擎则:解析和执行javascript
来实现网页的动态效果最开始渲染引擎和
JS
引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎9 html5有哪些新特性、移除了那些元素?
HTML5
现在已经不是SGML
的子集,主要是关于图像,位置,存储,多任务等功能的增加canvas
video
和audio
元素localStorage
长期存储数据,浏览器关闭后数据不丢失sessionStorage
的数据在浏览器关闭后自动删除article
、footer
、header
、nav
、section
calendar
、date
、time
、email
、url
、search
webworker
,websocket
,Geolocation
移除的元素:
basefont
,big
,center
,font
,s
,strike,
tt,u`frame
,frameset
,noframes
支持
HTML5
新标签:IE8/IE7/IE6
支持通过document.createElement
方法产生的标签持HTML5
新标签当然也可以直接使用成熟的框架、比如
html5shim
10
HTML5
的离线储存怎么使用,工作原理能不能解释一下?在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件
原理:
HTML5
的离线存储是基于一个新建的.appcache
文件的缓存机制(不是存储技术),通过这个文件上的解析清单离线存储资源,这些资源就会像cookie
一样被存储了下来。之后当网络在处于离线状态下时,浏览器会通过被离线存储的数据进行页面展示如何使用:
manifest
的属性;cache.manifest
文件的编写离线存储的资源window.applicationCache
进行需求实现11 浏览器是怎么对
HTML5
的离线储存资源进行管理和加载的呢在线的情况下,浏览器发现
html
头部有manifest
属性,它会请求manifest
文件,如果是第一次访问app
,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储。如果已经访问过app
并且资源已经离线存储了,那么浏览器就会使用离线的资源加载页面,然后浏览器会对比新的manifest
文件与旧的manifes
t文件,如果文件没有发生改变,就不做任何操作,如果文件改变了,那么就会重新下载文件中的资源并进行离线存储。离线的情况下,浏览器就直接使用离线存储的资源。
12 请描述一下
cookies
,sessionStorage
和localStorage
的区别?cookie
是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递
sessionStorage
和localStorage
不会自动把数据发给服务器,仅在本地保存存储大小:
cookie
数据大小不能超过4ksessionStorage
和localStorage
虽然也有存储大小的限制,但比cookie
大得多,可以达到5M或更大有期时间:
localStorage
存储持久数据,浏览器关闭后数据不丢失除非主动删除数据sessionStorage
数据在当前浏览器窗口关闭后自动删除cookie
设置的cookie
过期时间之前一直有效,即使窗口或浏览器关闭13 iframe有那些缺点?
iframe
会阻塞主页面的Onload
事件SEO
iframe
和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载iframe
之前需要考虑这两个缺点。如果需要使用iframe
,最好是通过javascript
动态给iframe
添加src
属性值,这样可以绕开以上两个问题14 WEB标准以及W3C标准是什么?
css
和js
、结构行为表现的分离15 xhtml和html有什么区别?
一个是功能上的差别
XHTML
可兼容各大浏览器、手机以及PDA
,并且浏览器也能快速正确地编译网页另外是书写习惯的差别
XHTML
元素必须被正确地嵌套,闭合,区分大小写,文档必须拥有根元素16 Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?
link
会同时被加载,而@imort
页面被加载的时,link
会同时被加载,而@import
引用的CSS
会等到页面被加载完再加载import
只在IE5
以上才能识别,而link
是XHTML
标签,无兼容问题link
方式的样式的权重 高于@import
的权重<!DOCTYPE>
声明位于文档中的最前面,处于<html>
标签之前。告知浏览器的解析器, 用什么文档类型 规范来解析这个文档JS
运作模式是 以该浏览器支持的最高标准运行DOCTYPE
不存在或格式不正确会导致文档以混杂模式呈现17 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?行内元素和块级元素有什么区别?
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>
18 HTML全局属性(global attribute)有哪些
class
:为元素设置类标识data-*
: 为元素增加自定义属性draggable
: 设置元素是否可拖拽id
: 元素id
,文档内唯一lang
: 元素内容的的语言style
: 行内css
样式title
: 元素相关的建议信息19 Canvas和SVG有什么区别?
svg
绘制出来的每一个图形的元素都是独立的DOM
节点,能够方便的绑定事件或用来修改。canvas
输出的是一整幅画布svg
输出的图形是矢量图形,后期可以修改参数来自由放大缩小,不会是真和锯齿。而canvas
输出标量画布,就像一张图片一样,放大会失真或者锯齿20 HTML5 为什么只需要写
HTML5
不基于SGML
,因此不需要对DTD
进行引用,但是需要doctype
来规范浏览器的行为HTML4.01
基于SGML
,所以需要对DTD
进行引用,才能告知浏览器文档所使用的文档类型21 如何在页面上实现一个圆形的可点击区域?
svg
border-radius
js
实现 需要求一个点在不在圆上简单算法、获取鼠标坐标等等22 网页验证码是干嘛的,是为了解决什么安全问题
23 viewport
1px
被 渲染成2px
问题局部处理
mate
标签中的viewport
属性 ,initial-scale
设置为1
rem
按照设计稿标准走,外加利用transfrome
的scale(0.5)
缩小一倍即可;全局处理
mate
标签中的viewport
属性 ,initial-scale
设置为0.5
rem
按照设计稿标准走即可24 渲染优化
禁止使用
iframe
(阻塞父文档onload
事件)iframe
会阻塞主页面的Onload
事件iframe
和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载iframe
之前需要考虑这两个缺点。如果需要使用iframe
,最好是通过javascript
iframe
添加src
属性值,这样可以绕开以上两个问题禁止使用
gif
图片实现loading
效果(降低CPU
消耗,提升渲染性能)使用
CSS3
代码代替JS
动画(尽可能避免重绘重排以及回流)对于一些小图标,可以使用base64位编码,以减少网络请求。但不建议大图使用,比较耗费
CPU
HTTP
请求页面头部的
<style></style>
<script</script>
会阻塞页面;(因为Renderer
进程中JS
线程和渲染线程是互斥的)页面中空的
href
和src
会阻塞页面其他资源的加载 (阻塞下载进程)网页
Gzip
,CDN
托管,data
缓存 ,图片服务器前端模板 JS+数据,减少由于
HTML
标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数用
innerHTML
代替DOM
操作,减少DOM
操作次数,优化javascript
性能当需要设置的样式很多时设置
className
而不是直接操作style
少用全局变量、缓存
DOM
节点查找的结果。减少IO
读取操作图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳
对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘
IO
25 meta viewport相关
26 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?
IE
:trident
内核Firefox
:gecko
内核Safari
:webkit
内核Opera
:以前是presto
内核,Opera
现已改用Google -Chrome
的Blink
内核Chrome:Blink
(基于webkit
,Google与Opera Software共同开发)27 div+css的布局较table布局有什么优点?
css
文件。seo
)搜索引擎更友好,排名更容易靠前。28 a:img的alt与title有何异同?b:strong与em的异同?
alt(alt text)
:为不能显示图像、窗体或applets
的用户代理(UA
),alt
属性用来指定替换文字。替换文字的语言由lang
属性指定。(在IE浏览器下会在没有title
时把alt
当成tool tip
显示)title(tool tip)
:该属性为设置该属性的元素提供建议性的信息strong
:粗体强调标签,强调,表示内容的重要性em
:斜体强调标签,更强烈强调,表示内容的强调点29 你能描述一下渐进增强和优雅降级之间的不同吗
30 为什么利用多个域名来存储网站资源会更有效?
CDN
缓存更方便cookie
带宽31 简述一下src与href的区别
src
用于替换当前元素,href用于在当前文档和引用资源之间确立联系。src
是source
的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src
资源时会将其指向的资源下载并应用到文档内,例如js
脚本,img
图片和frame
等元素href
是Hypertext Reference
的缩写,指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,如果我们在文档中添加<link href="common.css" rel="stylesheet"/>
那么浏览器会识别该文档为css
文件,就会并行下载资源并且不会停止对当前文档的处理。这也是为什么建议使用link
方式来加载css
,而不是使用@import
方式32 知道的网页制作会用到的图片格式有哪些?
png-8
,png-24
,jpeg
,gif
,svg
WebP
格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG
的2/3
,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay
等知名网站已经开始测试并使用WebP
格式。40%
。“Animated Portable Network Graphics”
, 是PNG的位图动画扩展,可以实现png格式的动态图片效果。04年诞生,但一直得不到各大浏览器厂商的支持,直到日前得到iOS safari 8
的支持,有望代替GIF
成为下一代动态图标准33 在css/js代码上线之后开发人员经常会优化性能,从用户刷新网页开始,一次js请求一般情况下有哪些地方会有缓存处理?
33 一个页面上有大量的图片(大型电商网站),加载很慢,你有哪些方法优化这些图片的加载,给用户更好的体验。
CSSsprite
,SVGsprite
,Iconfont
、Base64
等技术。34 常见排序算法的时间复杂度,空间复杂度
35 web开发中会话跟踪的方法有哪些
cookie
session
url
重写input
ip
地址36 HTTP request报文结构是怎样的
一个请求报文例子如下:
37 HTTP response报文结构是怎样的
响应报文例子如下:
二、CSS部分
1 css sprite是什么,有什么优缺点
概念:将多个小图片拼接到一个图片中。通过
background-position
和元素尺寸调节需要显示的背景图案。优点:
HTTP
请求数,极大地提高页面加载速度缺点:
2
display: none;
与visibility: hidden;
的区别联系:它们都能让元素不可见
区别:
display:none
;会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden
;不会让元素从渲染树消失,渲染师元素继续占据空间,只是内容不可见display: none
;是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility: hidden;
是继承属性,子孙节点消失由于继承了hidden
,通过设置visibility: visible;
可以让子孙节点显式display
通常会造成文档重排。修改visibility
属性只会造成本元素的重绘。display: none
;元素内容;会读取visibility: hidden;
元素内容3
link
与@import
的区别link
是HTML
方式,@import
是CSS方式link
最大限度支持并行下载,@import
过多嵌套导致串行下载,出现FOUC
link
可以通过rel="alternate stylesheet"
指定候选样式link
支持早于@import
,可以使用@import
对老浏览器隐藏样式@import
必须在样式规则之前,可以在css文件中引用其他文件link
优于@import
4 什么是FOUC?如何避免
Flash Of Unstyled Content
:用户定义样式表加载之前浏览器使用默认样式显示文档,用户样式加载渲染之后再从新显示文档,造成页面闪烁。head
5 如何创建块级格式化上下文(block formatting context),BFC有什么用
创建规则:
float
不是none
)position
取值为absolute
或fixed
)display
取值为inline-block
,table-cell
,table-caption
,flex
,inline-flex
之一的元素overflow
不是visible
的元素作用:
margin
折叠6 display,float,position的关系
display
为none
,那么position
和float
都不起作用,这种情况下元素不产生框position
值为absolute
或者fixed
,框就是绝对定位的,float
的计算值为none
,display
根据下面的表格进行调整。float
不是none
,框是浮动的,display
根据下表进行调整display
根据下表进行调整display
的值为指定值display
7 清除浮动的几种方式,各自的优缺点
div
定义height
div
标签clear:both
div
定义伪类:after
和zoom
div
定义overflow:hidden
div
也浮动,需要定义宽度br
标签clear:both
8 为什么要初始化CSS样式?
CSS
初始化往往会出现浏览器之间的页面显示差异。SEO
有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化9 css3有哪些新特性
css
选择器border-radius
text-shadow
transform
CSS3新增伪类有那些?
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>
元素。:after
在元素之前添加内容,也可以用来做清除浮动。:before
在元素之后添加内容:enabled
:disabled
控制表单控件的禁用状态。:checked
单选框或复选框被选中10 display有哪些值?说明他们的作用
block
象块类型元素一样显示。none
缺省值。象行内元素类型一样显示。inline-block
象行内元素一样显示,但其内容象块类型元素一样显示。list-item
象块类型元素一样显示,并添加样式列表标记。table
此元素会作为块级表格来显示inherit
规定应该从父元素继承display
属性的值11 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?
IE
盒子模型、W3C
盒子模型;padding
)、边界(margin
)、 边框(border
);IE
的content
部分把border
和padding
计算了进去;12 CSS优先级算法如何计算?
!important > id > class > tag
important
比 内联优先级高13 对BFC规范的理解?
14 谈谈浮动和清除浮动
15 position的值, relative和absolute定位原点是
absolute
:生成绝对定位的元素,相对于static
定位以外的第一个父元素进行定位fixed
:生成绝对定位的元素,相对于浏览器窗口进行定位relative
:生成相对定位的元素,相对于其正常位置进行定位static
默认值。没有定位,元素出现在正常的流中inherit
规定从父元素继承position
属性的值16 display:inline-block 什么时候不会显示间隙?(携程)
margin
负值font-size:0
letter-spacing
word-spacing
17 PNG,GIF,JPG的区别及如何选
GIF
8
位像素,256
色boolean
透明JPEG
256
PNG
PNG8
和truecolor PNG
PNG8
类似GIF
颜色上限为256
,文件小,支持alpha
透明度,无动画18 行内元素float:left后是否变为块级元素?
display:block
;。但如果元素设置了浮动后再设置display:block
;那就不会占一行。19 在网页中的应该使用奇数还是偶数的字体?为什么呢?
20 ::before 和 :after中双冒号和单冒号 有什么区别?解释一下这2个伪元素的作用
:
)用于CSS3伪类,双冒号(::
)用于CSS3
伪元素21 如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)
60Hz
,即1
秒刷新60
次,所以理论上最小间隔为1/60*1000ms = 16.7ms
22 CSS合并方法
@import
引入多个css
文件,可以使用CSS
工具将CSS
合并为一个CSS
文件,例如使用Sass\Compass
等23 CSS不同选择器的权重(CSS层叠的规则)
!important
规则最重要,大于其它规则1000
ID
属性值,加100
10
24 列出你所知道可以改变页面布局的属性
position
、display
、float
、width
、heigh
t、margin
、padding
、top
、left
、right
、`25 CSS在性能优化方面的实践
css
压缩与合并、Gzip
压缩css
文件放在head
里、不要用@import
26 CSS3动画(简单动画的实现,如旋转等)
CSS3
中提出的三个属性:transition
、transform
、animation
transition
:定义了元素在变化过程中是怎么样的,包含transition-property
、transition-duration
、transition-timing-function
、transition-delay
。transform
:定义元素的变化结果,包含rotate
、scale
、skew
、translate
。animation
:动画定义了动作的每一帧(@keyframes
)有什么效果,包括animation-name
,animation-duration
、animation-timing-function
、animation-delay
、animation-iteration-count
、animation-direction
27 base64的原理及优缺点
http
请求CPU
进行编解码28 几种常见的CSS布局
流体布局
圣杯布局
双飞翼布局
29 stylus/sass/less区别
Scss
和LESS
语法较为严谨,LESS
要求一定要使用大括号“{}”,Scss
和Stylus
可以通过缩进表示层次与嵌套关系Scss
无全局变量的概念,LESS
和Stylus
有类似于其它语言的作用域概念Sass
是基于Ruby
语言的,而LESS
和Stylus
可以基于NodeJS
NPM
下载相应库后进行编译;30 postcss的作用
PostCSS
提供了一个解析器,它能够将CSS
解析成抽象语法树PostCSS
这个平台上,我们能够开发一些插件,来处理我们的CSS
,比如热门的:autoprefixer
postcss
可以对sass处理过后的css
再处理 最常见的就是autoprefixer
31 css样式(选择器)的优先级
!important
32 自定义字体的使用场景
banner
等固定文案33 如何美化CheckBox
label(for)
和id
input
:checked + label
34 伪类和伪元素的区别
35
base64
的使用HTTP
请求base64
的体积约为原图的4/3
36 自适应布局
思路:
margin
撑开div
包含,然后靠负margin
形成bfc
flex
37 请用Css写一个简单的幻灯片效果页面
38 什么是外边距重叠?重叠的结果是什么?
折叠结果遵循下列计算规则:
39 rgba()和opacity的透明效果有什么不同?
rgba()
和opacity
都能实现透明效果,但最大的不同是opacity
作用于元素,以及元素内的所有内容的透明度,rgba()
只作用于元素的颜色或其背景色。(设置rgba
透明的元素的子元素不会继承透明效果!)40 css中可以让文字在垂直和水平方向上重叠的两个属性是什么?
line-height
letter-spacing
41 如何垂直居中一个浮动元素?
如何垂直居中一个
<img>
?(用更简便的方法。)42 px和em的区别
px
和em
都是长度单位,区别是,px
的值是固定的,指定是多少就是多少,计算比较容易。em
得值不是固定的,并且em
会继承父级元素的字体大小。16px
。所以未经调整的浏览器都符合:1em=16px
。那么12px=0.75em
,10px=0.625em
。43 Sass、LESS是什么?大家为什么要使用他们?
CSS
预处理器。他是CSS
上的一种抽象层。他们是一种特殊的语法/语言编译成CSS
。LESS
既可以在客户端上运行 (支持IE 6+
,Webkit
,Firefox
),也可一在服务端运行 (借助Node.js
)为什么要使用它们?
44 知道css有个content属性吗?有什么作用?有什么应用?
45 水平居中的方法
text-align:center
margin
为auto
;position
为relative
,元素设left:0;right:0;margin:auto;
flex-box
布局,指定justify-content
属性为centerdisplay
设置为tabel-ceil
46 垂直居中的方法
display:table-cell
,同时设置vertial-align:middle
flex
布局,设置为align-item:center
bottom:0,top:0
,并设置margin:auto
top:50%,margin-top
值为高度一半的负值line-height
为height
值47 如何使用CSS实现硬件加速?
CSS
属性有transform
、opacity
、filter
,为了避免2D动画在开始和结束的时候的
repaint
操作,一般使用tranform:translateZ(0)
48 重绘和回流(重排)是什么,如何避免?
减少重绘和重排的方法:
DOM
查询cssText
或者className
一次性改变属性fragment
49 说一说css3的animation
animation
是css3新增的动画属性,这个css3动画的每一帧是通过@keyframes
来声明的,keyframes
声明了动画的名称,通过from
、to
或者是百分比来定义animation-name
来引用这个动画,同时css3动画也可以定义动画运行的时长、动画开始时间、动画播放方向、动画循环次数、动画播放的方式,animation-name
定义动画名、animation-duration
定义动画播放的时长、animation-delay
定义动画延迟播放的时间、animation-direction
定义动画的播放方向、
animation-iteration-count
定义播放次数、animation-fill-mode
定义动画播放之后的状态、animation-play-state
定义播放状态,如暂停运行等、animation-timing-function
50 左边宽度固定,右边自适应
html结构
方法1:左侧div设置成浮动:float: left,右侧div宽度会自拉升适应
方法2:对右侧:div进行绝对定位,然后再设置right=0,即可以实现宽度自适应
方法3:将左侧div进行绝对定位,然后右侧div设置margin-left: 200px
方法4:使用flex布局
三、JavaScript
1 闭包
闭包就是能够读取其他函数内部变量的函数
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域
闭包的特性:
说说你对闭包的理解
使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念
闭包 的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中
闭包的另一个用处,是封装对象的私有属性和私有方法
好处:能够实现封装和缓存等;
坏处:就是消耗内存、不正当使用会造成内存溢出的问题
使用闭包的注意点
2 说说你对作用域链的理解
window
对象即被终止,作用域链向下访问变量是不被允许的3 JavaScript原型,原型链 ? 有什么特点?
每个对象都会在其内部初始化一个属性,就是
prototype
(原型),当我们访问一个对象的属性时如果这个对象内部不存在这个属性,那么他就会去
prototype
里找这个属性,这个prototype
又会有自己的prototype
,于是就这样一直找下去,也就是我们平时所说的原型链的概念关系:
instance.constructor.prototype = instance.__proto__
特点:
JavaScript
对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变当我们需要一个属性的时,
Javascript
引擎会先看当前对象中是否有这个属性, 如果没有的就会查找他的
Prototype
对象是否有这个属性,如此递推下去,一直检索到Object
内建对象4 请解释什么是事件代理
Event Delegation
),又称之为事件委托。是JavaScript
中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能table
上代理所有td
的click
事件就非常棒5 Javascript如何实现继承?
构造继承
原型继承
实例继承
拷贝继承
原型
prototype
机制或apply
和call
方法去实现较简单,建议使用构造函数与原型混合方式6 谈谈This对象的理解
this
总是指向函数的直接调用者(而非间接调用者)new
关键字,this
指向new
出来的那个对象this
指向触发这个事件的对象,特殊的是,IE
中的attachEvent
中的this
总是指向全局对象Window
7 事件模型
DOM
事件流:同时支持两种事件模型:捕获型事件和冒泡型事件W3c
中,使用stopPropagation()
方法;在IE下设置cancelBubble = true
click - <a>
后的跳转。在W3c
中,使用preventDefault()
方法,在IE
下设置window.event.returnValue = false
8 new操作符具体干了什么呢?
this
变量引用该对象,同时还继承了该函数的原型this
引用的对象中this
所引用,并且最后隐式的返回this
9 Ajax原理
Ajax
的原理简单来说是在用户和服务器之间加了—个中间层(AJAX
引擎),通过XmlHttpRequest
对象来向服务器发异步请求,从服务器获得数据,然后用javascrip
t来操作DOM
而更新页面。使用户操作与服务器响应异步化。这其中最关键的一步就是从服务器获得请求数据Ajax
的过程只涉及JavaScript
、XMLHttpRequest
和DOM
。XMLHttpRequest
是aja
x的核心机制ajax 有那些优缺点?
Ajax
在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。Ajax
可以实现动态不刷新(局部刷新)AJAX
暴露了与服务器交互的细节。10 如何解决跨域问题?
那么怎样解决跨域问题的呢?
1.)父窗口:(http://www.domain.com/a.html)
2.)子窗口:(http://child.domain.com/b.html)
11 模块化开发怎么做?
12 异步加载JS的方式有哪些?
IE
async
:script
,插入到DOM
中,加载完毕后callBack
13 那些操作会造成内存泄漏?
setTimeout
的第一个参数使用字符串而非函数的话,会引发内存泄漏14 XML和JSON的区别?
数据体积方面
JSON
相对于XML
来讲,数据的体积小,传递的速度更快些。数据交互方面
JSON
与JavaScript
的交互更加方便,更容易解析处理,更好的数据交互数据描述方面
JSON
对数据的描述性比XML
较差传输速度方面
JSON
的速度要远远快于XML
15 谈谈你对webpack的看法
WebPack
是一个模块打包工具,你可以使用WebPack
管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包Web
开发中所用到的HTML
、Javascript
、CSS
以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源,webpack
有对应的模块加载器。webpack
模块打包器会分析模块间的依赖关系,最后 生成了优化且合并后的静态资源16 说说你对AMD和Commonjs的理解
CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD
规范则是非同步加载模块,允许指定回调函数AMD
推荐的风格通过返回一个对象做为模块对象,CommonJS
的风格通过对module.exports
或exports
的属性赋值来达到暴露模块对象的目的17 常见web安全及防护原理
sql
注入原理SQL
命令插入到Web
表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令总的来说有以下几点
"-"
进行转换等SQL
或者直接使用存储过程进行数据查询存取hash
掉密码和敏感的信息XSS原理及防范
Xss(cross-site scripting)
攻击指的是攻击者往Web
页面里插入恶意html
标签或者javascript
代码。比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie
中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点XSS防范方法
”<”,”>”,”;”,”’”
等字符做过滤;其次任何内容写到页面之前都必须加以encode,避免不小心把html tag
弄出来。这一个层面做好,至少可以堵住超过一半的XSS 攻击XSS与CSRF有什么区别吗?
XSS
是获取信息,不需要提前知道其他用户页面的代码和数据包。CSRF
是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。要完成一次CSRF
攻击,受害者必须依次完成两个步骤登录受信任网站
A
,并在本地生成Cookie
在不登出
A
的情况下,访问危险网站B
CSRF的防御
CSRF
方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数18 用过哪些设计模式?
工厂模式:
new
关键字构造函数模式
this
对象;19 为什么要有同源限制?
Iframe
把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript
读取到你的表单中input
中的内容,这样用户名,密码就轻松到手了。20 offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别
offsetWidth/offsetHeight
返回值包含content + padding + border,效果与e.getBoundingClientRect()相同clientWidth/clientHeight
返回值只包含content + padding,如果有滚动条,也不包含滚动条scrollWidth/scrollHeight
返回值包含content + padding + 溢出内容的尺寸21 javascript有哪些方法定义对象
var obj = {};
var obj = new Object();
var obj = Object.create(Object.prototype);
22 常见兼容性问题?
png24
位的图片在iE6浏览器上出现背景,解决方案是做成PNG8
margin
和padding
不同。解决方案是加一个全局的*{margin:0;padding:0;}
来统一,,但是全局效率很低,一般是如下这样解决:IE
下,event
对象有x
,y
属性,但是没有pageX
,pageY
属性Firefox
下,event
对象有pageX
,pageY
属性,但是没有x,y
属性.23 说说你对promise的了解
依照
Promise/A+
的定义,Promise
有四种状态:pending:
初始状态, 非fulfilled
或rejected.
fulfilled:
成功的操作.rejected:
失败的操作.settled: Promise
已被fulfilled
或rejected
,且不是pending
另外,
fulfilled
与rejected
一起合称settled
Promise
对象用来进行延迟(deferred
) 和异步(asynchronous
) 计算Promise 的构造函数
Promise
,最基本的用法如下:Promise
实例拥有then
方法(具有then
方法的对象,通常被称为thenable
)。它的使用方法如下:fulfilled
的时候被调用,一个在rejected
的时候被调用,接收参数就是future
,onFulfilled
对应resolve
,onRejected
对应reject
24 你觉得jQuery源码有哪些写的好的地方
jquery
源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,然后通过传入window
对象参数,可以使window
对象作为局部变量使用,好处是当jquery
中访问window
对象的时候,就不用将作用域链退回到顶层作用域了,从而可以更快的访问window对象。同样,传入undefined
参数,可以缩短查找undefined
时的作用域链jquery
将一些原型属性和方法封装在了jquery.prototype
中,为了缩短名称,又赋值给了jquery.fn
,这是很形象的写法jQuery
将其保存为局部变量以提高访问速度jquery
实现的链式调用可以节约代码,所返回的都是同一个对象,可以提高代码效率25 vue、react、angular
Vue.js
一个用于创建
web
交互界面的库,是一个精简的MVVM
。它通过双向数据绑定把View
层和Model
层连接了起来。实际的DOM
封装和输出格式都被抽象为了Directives
和Filters
AngularJS
是一个比较完善的前端
MVVM
框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等所有功能,模板功能强大丰富,自带了丰富的Angular
指令react
React
仅仅是VIEW
层是facebook
公司。推出的一个用于构建UI
的一个库,能够实现服务器端的渲染。用了virtual dom
,所以性能很好。26 Node的应用场景
特点:
Javascript
运行环境Chrome V8
引擎进行代码解释I/O
优点:
缺点:
核CPU
,不能充分利用CPU
27 谈谈你对AMD、CMD的理解
CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD
规范则是非同步加载模块,允许指定回调函数AMD
推荐的风格通过返回一个对象做为模块对象,CommonJS
的风格通过对module.exports
或exports
的属性赋值来达到暴露模块对象的目的es6模块 commonjs amd cmd
CommonJS
的规范中,每个JavaScript
文件就是一个独立的模块上下文(module context
),在这个上下文中默认创建的属性都是私有的。也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的。CommonJS
是同步加载模块,在浏览器中会出现堵塞情况,所以不适用AMD
异步,需要定义回调define
方式es6
一个模块就是一个独立的文件,该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export
关键字输出该变量es6
还可以导出类、方法,自动适用严格模式28 那些操作会造成内存泄漏
setTimeout
的第一个参数使用字符串而非函数的话,会引发内存泄漏29 web开发中会话跟踪的方法有哪些
cookie
session
url
重写input
ip
地址30 介绍js的基本数据类型
Undefined
、Null
、Boolean
、Number
、String
31 介绍js有哪些内置对象
Object
是JavaScript
中所有对象的父对象Object
、Array
、Boolean
、Number
和String
Function
、Arguments
、Math
、Date
、RegExp
、Error
32 说几条写JavaScript的基本规范
===/!==
来比较true/false
或者数值new Array
这种形式Switch
语句必须带有default
分支If
语句必须使用大括号for-in
循环中的变量 应该使用var
关键字明确限定作用域,从而避免作用域污33 JavaScript有几种类型的值
Undefined
,Null
,Boolean
,Numbe
r、String
)stack
)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;heap
)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其34 javascript创建对象的几种方式
function
来模拟无参的构造函数function
来模拟参构造函数来实现(用this
关键字定义构造的上下文属性)35 eval是做什么的
JS
代码并运行eval
,不安全,非常耗性能(2
次,一次解析成js
语句,一次执行)JSON
字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')
36 null,undefined 的区别
undefined
表示不存在这个值。undefined
:是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回undefined
例如变量被声明了,但没有赋值时,就等于
undefined
null
表示一个对象被定义了,值为“空值”null
: 是一个对象(空对象, 没有任何属性和方法)例如作为函数的参数,表示该函数的参数不是对象;
在验证
null
时,一定要使用===
,因为==
无法分别null
和undefined
37 ["1", "2", "3"].map(parseInt) 答案是多少
[1, NaN, NaN]
因为parseInt
需要两个参数(val, radix)
,其中radix
表示解析时用的基数。map
传了3
个(element, index, array)
,对应的radix
不合法导致解析失败。38 javascript 代码中的"use strict";是什么意思
use strict
是一种ECMAscript 5
添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,使JS
编码更加规范化的模式,消除Javascript
语法的一些不合理、不严谨之处,减少一些怪异行为39 JSON 的了解
JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式它是基于
JavaScript
的一个子集。数据格式简单, 易于读写, 占用带宽小JSON
字符串转换为JSON对象:JSON
对象转换为JSON字符串:40 js延迟加载的方式有哪些
defer
和async
、动态创建DOM
方式(用得最多)、按需异步载入js
41 同步和异步的区别
42 渐进增强和优雅降级
43 defer和async
defer
并行加载js
文件,会按照页面上script
标签的顺序执行async
并行加载js
文件,下载完成立即执行,不会按照页面上script
标签的顺序执行44 说说严格模式的限制
with
语句this
指向全局对象45 attribute和property的区别是什么
attribute
是dom
元素在文档中作为html
标签拥有的属性;property
就是dom
元素在js
中作为对象拥有的属性。html
的标准属性来说,attribute
和property
是同步的,是会自动更新的46 谈谈你对ES6的理解
JavaScript
提供了简单的字符串插值功能)for-of
(用来遍历数据—例如数组中的值。)arguments
对象可被不定参数和默认参数完美代替。ES6
将promise
对象纳入规范,提供了原生的Promise
对象。let
和const
命令,用来声明变量。let
命令实际上就增加了块级作用域。module
模块的概念47 ECMAScript6 怎么写class么
OOP
基础的人更快上手js
,至少是一个官方的实现了js
的人来说,这个东西没啥大影响;一个Object.creat()
搞定继承,比class
简洁清晰的多48 什么是面向对象编程及面向过程编程,它们的异同和优缺点
49 面向对象编程思想
50 对web标准、可用性、可访问性的理解
51 如何通过JS判断一个数组
instanceof
方法instanceof
运算符是用来测试一个对象是否在其原型链原型构造函数的属性constructor
方法constructor
属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数jQuery
正在使用的ES5
新增方法isArray()
52 谈一谈let与var的区别
let
命令不存在变量提升,如果在let
前使用,会导致报错let
和const
命令,就会形成封闭作用域53 map与forEach的区别
forEach
方法,是最基本的方法,就是遍历与循环,默认有3个传参:分别是遍历的数组内容item
、数组索引index
、和当前遍历数组Array
map
方法,基本用法与forEach
一致,但是不同的,它会返回一个新的数组,所以在callback需要有return
值,如果没有,会返回undefined
54 谈一谈你理解的函数式编程
55 谈一谈箭头函数与普通函数的区别?
this
对象,就是定义时所在的对象,而不是使用时所在的对象new
命令,否则会抛出一个错误arguments
对象,该对象在函数体内不存在。如果要用,可以用Rest
参数代替yield
命令,因此箭头函数不能用作Generator
函数56 谈一谈函数中this的指向
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
《javascript语言精髓》中大概概括了4种调用方式:
方法调用模式
函数调用模式
构造器调用模式
57 异步编程的实现方式
回调函数
事件监听(采用时间驱动模式,取决于某个事件是否发生):
发布/订阅(观察者模式)
Promise对象
Generator函数
async函数
58 对原生Javascript了解程度
RegExp
、JSON
、Ajax
、DOM
、BOM
、内存泄漏、跨域、异步装载、模板引擎、前端MVC
、路由、模块化、Canvas
、ECMAScript
59 Js动画与CSS动画区别及相应实现
CSS3
的动画的优点CSS3
的动画做一些优化JavaScript
的动画正好弥补了这两个缺点,控制能力很强,可以单帧的控制、变换,同时写得好完全可以兼容IE6
,并且功能强大。对于一些复杂控制的动画,使用javascript
会比较靠谱。而在实现一些小的交互动效的时候,就多考虑考虑CSS
吧60 JS 数组和对象的遍历方式,以及几种方式的比较
for in
循环for
循环forEach
forEach
回调中两个参数分别为value
,index
forEach
无法遍历对象Firefox
和chrome
支持forEach
无法使用break
,continue
跳出循环,且使用return
是跳过本次循环这两种方法应该非常常见且使用很频繁。但实际上,这两种方法都存在性能问题
在方式一中,
for-in
需要分析出array
的每个属性,这个操作性能开销很大。用在key
已知的数组上是非常不划算的。所以尽量不要用for-in
,除非你不清楚要处理哪些属性,例如JSON
对象这样的情况在方式2中,循环每进行一次,就要检查一下数组长度。读取属性(数组长度)要比读局部变量慢,尤其是当
array
里存放的都是DOM
元素,因为每次读取都会扫描一遍页面上的选择器相关元素,速度会大大降低61 gulp是什么
gulp
是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成Node.js
流的威力,你可以快速构建项目并减少频繁的IO
操作API
,掌握gulp
毫不费力,构建工作尽在掌握:如同一系列流管道62 说一下Vue的双向绑定数据的原理
vue.js
则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()
来劫持各个属性的setter
,getter
,在数据变动时发布消息给订阅者,触发相应的监听回调63 事件的各个阶段
document
--->target
目标 ---->document
addEventListener
的第三个参数设置为true
和false
的区别已经非常清晰了true
表示该元素在事件的“捕获阶段”(由外往内传递时)响应事件false
表示该元素在事件的“冒泡阶段”(由内向外传递时)响应事件64 let var const
let
var
const
const
申明基本数据类型时const a = 3
;a = 5
时 将会报错Value
项时, 将还是正常使用65 快速的让一个数组乱序
66 如何渲染几万条数据并不卡住界面
67 希望获取到页面中所有的checkbox怎么做?
68 怎样添加、移除、移动、复制、创建和查找节点
创建新节点
添加、移除、替换、插入
查找
69 正则表达式
RegExp()
构造函数的时候,不仅需要转义引号(即\
”表示”),并且还需要双反斜杠(即\\
表示一个\
)。使用正则表达字面量的效率更高邮箱的正则匹配:
70 Javascript中callee和caller的作用?
caller
是返回一个对函数的引用,该函数调用了当前函数;callee
是返回正在被执行的function
函数,也就是所指定的function
对象的正文71 window.onload和$(document).ready
window.onload()
方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。$(document).ready()
是DOM
结构绘制完毕后就执行,不必等到加载完毕72 addEventListener()和attachEvent()的区别
addEventListener()
是符合W3C规范的标准方法;attachEvent()
是IE低版本的非标准方法addEventListener()
支持事件冒泡和事件捕获; - 而attachEvent()
只支持事件冒泡addEventListener()
的第一个参数中,事件类型不需要添加on
;attachEvent()
需要添加'on'
addEventListener()
会按照事件绑定的顺序依次执行,attachEvent()
会按照事件绑定的顺序倒序执行73 获取页面所有的checkbox
74 数组去重方法总结(六种方法)
方法一
push
进数组方法二:利用splice直接在原数组进行操作
方法三:利用对象的属性不能相同的特点进行去重
方法四:数组递归去重
方法五:利用indexOf以及forEach
方法六:利用ES6的set
Set
数据结构,它类似于数组,其成员的值都是唯一的。Array.from
将Set
结构转换成数组75 (设计题)想实现一个对页面某个节点的拖曳?如何做?(使用原生JS)
mousedown
,mousemove
,mouseup
事件mousedown
事件触发后,开始拖拽mousemove
时,需要通过event.clientX
和clientY
获取拖拽位置,并实时更新位置mouseup
时,拖拽结束76 Javascript全局函数和全局变量
全局变量
Infinity
代表正的无穷大的数值。NaN
指示某个值是不是数字值。undefined
指示未定义的值。全局函数
decodeURI()
解码某个编码的URI
。decodeURIComponent()
解码一个编码的URI
组件。encodeURIComponent()
把字符串编码为URI
组件。escape()
对字符串进行编码。eval()
计算JavaScript
字符串,并把它作为脚本代码来执行。isFinite()
检查某个值是否为有穷大的数。isNaN()
检查某个值是否是数字。Number()
把对象的值转换为数字。parseFloat()
解析一个字符串并返回一个浮点数。parseInt()
解析一个字符串并返回一个整数。String()
把对象的值转换为字符串。unescape()
对由escape()
编码的字符串进行解码77 使用js实现一个持续的动画效果
定时器思路
requestAnimationFrame
使用css实现一个持续的动画效果
animation-name
规定需要绑定到选择器的
keyframe
名称。animation-duration
规定完成动画所花费的时间,以秒或毫秒计。
animation-timing-function
规定动画的速度曲线。
animation-delay
规定在动画开始之前的延迟。
animation-iteration-count
规定动画应该播放的次数。
animation-direction
规定是否应该轮流反向播放动画78 封装一个函数,参数是定时器的时间,.then执行回调函数
79 怎么判断两个对象相等?
80 项目做过哪些性能优化?
DNS
查询CDN
DOM
元素数量DOM
操作JavaScript
和CSS
JavaScript
、CSS
、字体、图片等CSS Sprite
iconfont
iframe
使用src
为空link
中81 浏览器缓存
http header
判断它是否命中强缓存,如果命中,则直接从本地获取缓存资源,不会发请求到服务器;request header
验证这个资源是否命中协商缓存,称为http
再验证,如果命中,服务器将请求返回,但不返回资源,而是告诉客户端直接从缓存中获取,客户端收到返回后就会从缓存中获取资源;区别是,强缓存不对发送请求到服务器,但协商缓存会。
ctrl+f5
强制刷新网页时,直接从服务器加载,跳过强缓存和协商缓存;f5
刷新网页时,跳过强缓存,但是会检查协商缓存;强缓存
Expires
(该字段是http1.0
时的规范,值为一个绝对时间的GMT
格式的时间字符串,代表缓存资源的过期时间)Cache-Control:max-age
(该字段是http1.1
的规范,强缓存利用其max-age
值来判断缓存资源的最大生命周期,它的值单位为秒)协商缓存
Last-Modified
(值为资源最后更新时间,随服务器response返回)If-Modified-Since
(通过比较两个时间来判断资源在两次请求期间是否有过修改,如果没有修改,则命中协商缓存)ETag
(表示资源内容的唯一标识,随服务器response
返回)If-None-Match
(服务器通过比较请求头部的If-None-Match
与当前资源的ETag
是否一致来判断资源是否在两次请求之间有过修改,如果没有修改,则命中协商缓存)82 WebSocket
ws
,加密后是wss
;ws
客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的包头只有2~10
字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的4字节的掩码。而HTTP
协议每次通信都需要携带完整的头部;83 尽可能多的说出你对 Electron 的理解
所以应该是从两个方面说开来
Chrome
(无各种兼容性问题);Node
(Node
能做的它也能做)84 深浅拷贝
浅拷贝
Object.assign
深拷贝
JSON.parse(JSON.stringify(object))
来解决该方法也是有局限性的
undefined
85 防抖/节流
防抖
对于按钮防点击来说的实现
节流
86 谈谈变量提升?
var
::: tip 变量提升
这是因为函数和变量提升的原因。通常提升的解释是说将声明的代码移动到了顶部,这其实没有什么错误,便于大家理解。但是更准确的解释应该是:在生成执行环境时,会有两个阶段。第一个阶段是创建的阶段,JS 解释器会找出需要提升的变量和函数,并且给他们提前在内存中开辟好空间,函数的话会将整个函数存入内存中,变量只声明并且赋值为
undefined
,所以在第二个阶段,也就是代码执行阶段,我们可以直接提前使用:::
在提升的过程中,相同的函数会覆盖上一个函数,并且函数优先于变量提升
四、jQuery
1 你觉得jQuery或zepto源码有哪些写的好的地方
2 jQuery 的实现原理
(function(window, undefined) {})(window);
jQuery
利用JS
函数作用域的特性,采用立即调用表达式包裹了自身,解决命名空间和变量污染问题window.jQuery = window.$ = jQuery;
在闭包当中将 jQuery 和 $ 绑定到 window 上,从而将 jQuery 和 $ 暴露为全局变量
3
jQuery.fn
的init
方法返回的this
指的是什么对象4 jQuery.extend 与 jQuery.fn.extend 的区别
$.fn.extend()
和$.extend()
是jQuery
为扩展插件提拱了两个方法$.extend(object)
; // 为jQuery添加“静态方法”(工具方法)$.fn.extend(json)
; // 为jQuery添加“成员函数”(实例方法)5 jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝
浅拷贝(只复制一份原始对象的引用)
var newObject = $.extend({}, oldObject);
深拷贝(对原始对象属性所引用的对象进行进行递归拷贝)
var newObject = $.extend(true, {}, oldObject);
6 jQuery 的队列是如何实现的
queue()/dequeue()/clearQueue()
三个方法组成。animate()
,ajax
,其他要按时间顺序执行的事件中7 jQuery 中的 bind(), live(), delegate(), on()的区别
bind
直接绑定在目标元素上live
通过冒泡传播事件,默认document
上,支持动态数据delegate
更精确的小范围使用事件代理,性能优于 liveon
是最新的1.9
版本整合了之前的三种方式的新事件绑定机制8 是否知道自定义事件
fire
函数用于调用jQuery
自定义事件列表中的事件9 jQuery 通过哪个方法和 Sizzle 选择器结合的
Sizzle
选择器采取Right To Left
的匹配模式,先搜寻所有匹配标签,再判断它的父节点jQuery
通过$(selecter).find(selecter);
和Sizzle
选择器结合10 jQuery 中如何将数组转化为 JSON 字符串,然后再转化回来
11 jQuery 一个对象可以同时绑定多个事件,这是如何实现的
12 针对 jQuery 的优化方法
DOM
对象id
选择器代替class
选择器#id
选择器来继承on
绑定事件jQuery
的内部函数data()
来存储数据jQuery
13 jQuery 的 slideUp 动画,当鼠标快速连续触发, 动画会滞后反复执行,该如何处理呢
JS
原生setTimeout
方法$('.tab').stop().slideUp();
14 jQuery UI 如何自定义组件
$.widget()
传递组件名称和一个原型对象来完成$.widget("ns.widgetName", [baseWidget], widgetPrototype);
15 jQuery 与 jQuery UI、jQuery Mobile 区别
jQuery
是JS
库,兼容各种PC浏览器,主要用作更方便地处理DOM
、事件、动画、AJAX
jQuery UI
是建立在jQuery
库上的一组用户界面交互、特效、小部件及主题jQuery Mobile
以jQuery
为基础,用于创建“移动Web应用”的框架16 jQuery 和 Zepto 的区别? 各自的使用场景
jQuery
主要目标是PC
的网页中,兼容全部主流浏览器。在移动设备方面,单独推出 `jQuery MobileZepto
从一开始就定位移动设备,相对更轻量级。它的
API基本兼容
jQuery`,但对PC浏览器兼容不理想17 jQuery对象的特点
JQuery
对象才能使用JQuery
方法JQuery
对象是一个数组对象五、Bootstrap
1 什么是Bootstrap?以及为什么要使用Bootstrap?
Bootstrap
具有移动设备优先、浏览器支持良好、容易上手、响应式设计等优点,所以Bootstrap
被广泛应用2 使用Bootstrap时,要声明的文档类型是什么?以及为什么要这样声明?
Bootstrap
时,需要使用HTML5
文档类型(Doctype
)。<!DOCTYPE html>
Bootstrap
使用了一些HTML5
元素和CSS
属性,如果在Bootstrap
创建的网页开头不使用HTML5
的文档类型(Doctype
),可能会面临一些浏览器显示不一致的问题,甚至可能面临一些特定情境下的不一致,以致于代码不能通过W3C
标准的验证3 什么是Bootstrap网格系统
viewport
)尺寸的增加,系统会自动分为最多12
列。4 Bootstrap 网格系统(Grid System)的工作原理
.container class
内,以便获得适当的对齐(alignment
)和内边距(padding
)。.row
和.col-xs-4
,可用于快速创建网格布局。LESS
混合类可用于更多语义布局。padding
)来创建列内容之间的间隙。该内边距是通过.rows
上的外边距(margin
)取负,表示第一列和最后一列的行偏移。.col-xs-4
5 对于各类尺寸的设备,Bootstrap设置的class前缀分别是什么
<768px
):.col-xs-
>=768px
):.col-sm-
>=992px
):.col-md-
>=1200px
):.col-lg-
6 Bootstrap 网格系统列与列之间的间隙宽度是多少
7 如果需要在一个标题的旁边创建副标题,可以怎样操作
8 用Bootstrap,如何设置文字的对齐方式?
class="text-center"
设置居中文本class="text-right"
设置向右对齐文本class="text-left"
设置向左对齐文本9 Bootstrap如何设置响应式表格?
10 使用Bootstrap创建垂直表单的基本步骤?
(1)向父
<form>
元素添加role="form"
;(2)把标签和控件放在一个带有
class="form-group"
的<div>
中,这是获取最佳间距所必需的;(3)向所有的文本元素
<input>
、<textarea>
、<select>
添加class="form-control"
11 使用Bootstrap创建水平表单的基本步骤?
(1)向父
<form>
元素添加class="form-horizontal"
;(2)把标签和控件放在一个带有
class="form-group"
的<div>
中;(3)向标签添加
class="control-label"
。12 使用Bootstrap如何创建表单控件的帮助文本?
13 使用Bootstrap激活或禁用按钮要如何操作?
.active
的class
disabled="disabled"
的属性14 Bootstrap有哪些关于的class?
.img-rounded
为图片添加圆角.img-circle
将图片变为圆形.img-thumbnail
缩略图功能.img-responsive
图片响应式 (将很好地扩展到父元素)15 Bootstrap中有关元素浮动及清除浮动的class?
(1)
class="pull-left"
元素浮动到左边(2)
class="pull-right"
元素浮动到右边(3)
class="clearfix"
清除浮动16 除了屏幕阅读器外,其他设备上隐藏元素的class?
17 Bootstrap如何制作下拉菜单?
class="dropdown"
的<div>
中;class="btn dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown"
class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1"
role="presentation"
。其中,下拉菜单的标题要添加class="dropdown-header"
,选项部分要添加tabindex="-1"
。18 Bootstrap如何制作按钮组?以及水平按钮组和垂直按钮组的优先级?
class="btn-group"
的<div>
去包裹按钮组;class="btn-group-vertical"
可设置垂直按钮组。btn-group
的优先级高于btn-group-vertical
的优先级。19 Bootstrap如何设置按钮的下拉菜单?
20 Bootstrap中的输入框组如何制作?
class="input-group"
中的<div>
中<div>
内,在class="input-group-addon"
的<span>
里面放置额外的内容;<span>
放在<input>
元素的前面或后面。21 Bootstrap中的导航都有哪些?
class="nav nav-tabs"
的标签页导航,还有class="nav nav-pills"
的胶囊式标签页导航;class="navbar navbar-default" role="navigation"
;class="breadcrumb"
22 Bootstrap中设置分页的class?
class="pagination"
class="pager"
23 Bootstrap中显示标签的class?
24 Bootstrap中如何制作徽章?
25 Bootstrap中超大屏幕的作用是什么?
六、webpack相关
1 打包体积 优化思路
UglifyJsPlugin
require.ensure
devtool
中的source-map
css
文件,单独打包2 打包效率
css
计算文件hash等devtool
loader
loader
开启cache
如babel-loader
3 Loader
编写一个loader
七、编程题
1 写一个通用的事件侦听器函数
2 如何判断一个对象是否为数组
3 冒泡排序
4 快速排序
5 编写一个方法 求一个字符串的字节长度
6 bind的用法,以及如何实现bind的函数和需要注意的点
bind
的作用与call
和apply
相同,区别是call
和apply
是立即调用函数,而bind
是返回了一个函数,需要调用的时候再执行。一个简单的
bind
函数实现如下7 实现一个函数clone
8 下面这个ul,如何点击每一列的时候alert其index
9 定义一个log方法,让它可以代理console.log的方法
10 输出今天的日期
11 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序
12 写一段JS程序提取URL中的各个GET参数
13 写一个
function
,清除字符串前后的空格14 实现每隔一秒钟输出1,2,3...数字
八、其他
1 负载均衡
http
重定向负载均衡:调度者根据策略选择服务器以302响应请求,缺点只有第一次有效果,后续操作维持在该服务器dns负载均衡:解析域名时,访问多个
ip
服务器中的一个(可监控性较弱)2 CDN
3 内存泄漏
js中可能出现的内存泄漏情况
dom
清空时,还存在引用ie
中使用闭包避免策略
4 babel原理
5 js自定义事件
6 前后端路由差别
JS
根据URL
来操作DOM
元素,根据每个页面需要的去服务端请求数据,返回数据后和模板进行组合九、综合
1 谈谈你对重构的理解
table
)布局改为DIV+CSS
CSS
、如对IE6有效的)SEO
进行优化2 什么样的前端代码是好的
3 对前端工程师这个职位是怎么样理解的?它的前景会怎么样
UI
设计,产品经理的沟通;4 你觉得前端工程的价值体现在哪
5 平时如何管理你的项目
globe.css
),编码模式(utf-8
) 等;CSS
跟HTML
分文件夹并行存放,命名都得统一(例如style.css
);JS
分文件夹存放 命名以该JS
功能为准的英文翻译。images.png png8
格式文件使用 - 尽量整合在一起使用方便将来的管理6 组件封装
十、一些常见问题
The text was updated successfully, but these errors were encountered: