web前端面试

不用临时变量怎么实现 swap(a, b)——用加法或者异或都可以

CSS3新属性

CSS居中

事件委托机制

请解释什么是事件代理

事件代理(Event Delegation),又称之为事件委托。是 JavaScript 中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能 可以大量节省内存占用,减少事件注册,比如在table上代理所有td的click事件就非常棒 可以实现当新增子对象时无需再次对其绑定

盒模型

闭包

垃圾回收

那些操作会造成内存泄漏?

  • 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在
  • setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏
  • 闭包使用不当

缓存

谈谈你对webpack的看法

用过哪些设计模式?

如何解决跨域问题?

jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面

HTTP协议

  1. 2XX 成功
200 OK,表示从客户端发来的请求在服务器端被正确处理
204 No content,表示请求成功,但响应报文不含实体的主体部分
206 Partial Content,进行范围请求
  1. 3XX 重定向
 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
 302 found,临时性重定向,表示资源临时被分配了新的 URL
 303 see other,表示资源存在着另一个 URL,应使用 GET 方法丁香获取资源
 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
 307 temporary redirect,临时重定向,和302含义相同
  1. 4XX 客户端错误
400 bad request,请求报文存在语法错误
401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
403 forbidden,表示对请求资源的访问被服务器拒绝
404 not found,表示在服务器上没有找到请求的资源
  1. 5XX 服务器错误
500 internal sever error,表示服务器端在执行请求时发生了错误
503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

HTTP的几种请求方法用途

1. GET方法
发送一个请求来取得服务器上的某一资源
2. POST方法
向URL指定的资源提交数据或附加新的数
3. PUT方法
跟POST方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT指定了资源在服务器上的位置,而POST没有
4. HEAD方法
只请求页面的首部
5. DELETE方法
删除服务器上的某资源
6. OPTIONS方法
它用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息
7. TRACE方法
TRACE方法被用于激发一个远程的,应用层的请求消息回路
8. CONNECT方法
把请求连接转换到透明的TCP/IP通道

如何进行网站性能优化

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中拉伸图片

Redux

ES6

  • 新增模板字符串(为JavaScript提供了简单的字符串插值功能)
  • 箭头函数
  • for-of(用来遍历数据—例如数组中的值。)
  • arguments对象可被不定参数和默认参数完美代替。
  • ES6将promise对象纳入规范,提供了原生的Promise对象。
  • 增加了let和const命令,用来声明变量。
  • 增加了块级作用域。
  • let命令实际上就增加了块级作用域。
  • 还有就是引入module模块的概念

异步机制

算法

window.onload和document.ready的区别

window.onload是在页面中包含图片在内的素有元素全部加载完成; document.ready是文档结构加载完成,但不包含图片,其他媒体文件; 在jQuery中会看到$(function(){})和$(document).ready(function(){}),是在DOM树加载完成之后执行; window.onload是在DOM树加载完以及所有文件加载完成才执行,因此慢于document.ready。

数组去重

  1. new Set
  2. indexOf()
  3. splice()

new具体做了些什么

创建一个新对象foo; 并将它的__proto__指向其构造函数的prototype,foo.proto = Foo.prototype; 动态将this指向新对象,Foo.apply(foo,arguments); 执行函数体中的代码; 放回新对象foo;

说说严格模式的限制

  • 变量必须声明后再使用
  • 函数的参数不能有同名属性,否则报错
  • 不能使用with语句
  • 禁止this指向全局对象

语义化的理解

  • 用正确的标签做正确的事情!
  • html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
  • 在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的。
  • 搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。
  • 使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解

介绍一下你对浏览器内核的理解?

  • 主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎

  • 渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核

  • JS引擎则:解析和执行javascript来实现网页的动态效果,最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎

html5有哪些新特性、移除了那些元素?

  1. HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加
  • 绘画 canvas
  • 用于媒介回放的 video 和 audio 元素
  • 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失
  • sessionStorage 的数据在浏览器关闭后自动删除
  • 语意化更好的内容元素,比如article、footer、header、nav、section
  • 表单控件,calendar、date、time、email、url、search
  • 新的技术webworker, websocket, Geolocation
  1. 移除的元素:
  • 纯表现的元素:basefont,big,center,font, s,strike,tt,u
  • 对可用性产生负面影响的元素:frame,frameset,noframes
  1. 支持HTML5新标签:
  • IE8/IE7/IE6支持通过document.createElement方法产生的标签
  • 可以利用这一特性让这些浏览器支持HTML5新标签
  • 浏览器支持新标签后,还需要添加标签默认的样式
  1. 当然也可以直接使用成熟的框架、比如html5shim

iframe有那些缺点?

  • iframe会阻塞主页面的Onload事件
  • 搜索引擎的检索程序无法解读这种页面,不利于SEO
  • iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载
  • 使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值,这样可以绕开以上两个问题

行内元素有哪些?块级元素有哪些? 空(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>
  • 行内元素不可以设置宽高,不独占一行
  • 块级元素可以设置宽高,独占一行

HTML全局属性(global attribute)有哪些

  • class:为元素设置类标识
  • data-*: 为元素增加自定义属性
  • draggable: 设置元素是否可拖拽
  • id: 元素id,文档内唯一
  • lang: 元素内容的的语言
  • style: 行内css样式
  • title: 元素相关的建议信息

link与@import的区别

  • link是HTML方式, @import是CSS方式
  • link最大限度支持并行下载,@import过多嵌套导致串行下载,出现FOUC
  • link可以通过rel="alternate stylesheet"指定候选样式
  • 浏览器对link支持早于@import,可以使用@import对老浏览器隐藏样式
  • @import必须在样式规则之前,可以在css文件中引用其他文件
  • 总体来说:link优于@import

display,float,position的关系

  • 如果display为none,那么position和float都不起作用,这种情况下元素不产生框
  • 否则,如果position值为absolute或者fixed,框就是绝对定位的,float的计算值为none,display根据下面的表格进行调整。
  • 否则,如果float不是none,框是浮动的,display根据下表进行调整
  • 否则,如果元素是根元素,display根据下表进行调整
  • 其他情况下display的值为指定值
  • 总结起来:绝对定位、浮动、根元素都需要调整display

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 单选框或复选框被选中

冒泡和捕获;

this相关(注意箭头函数的this指向问题);

call、apply、bind;

setTimeout、setInterval和requestAnimationFrame;

模块化开发;

HTML attribute 与 DOM property 的对比

要想理解 Angular 绑定如何工作,重点是搞清 HTML attribute 和 DOM property 之间的区别。
attribute 是由 HTML 定义的。property 是由 DOM (Document Object Model) 定义的。
少量 HTML attribute 和 property 之间有着 1:1 的映射,如 id。
有些 HTML attribute 没有对应的 property,如 colspan。
有些 DOM property 没有对应的 attribute,如 textContent。
大量 HTML attribute 看起来映射到了 property…… 但却不像你想的那样!
最后一类尤其让人困惑…… 除非你能理解这个普遍原则:
attribute 初始化 DOM property,然后它们的任务就完成了。property 的值可以改变;attribute 的值不能改变。
例如,当浏览器渲染 <input type="text" value="Bob"> 时,它将创建相应 DOM 节点, 它的 value 这个 property 被初始化为 “Bob”。
当用户在输入框中输入 “Sally” 时,DOM 元素的 value 这个 property 变成了 “Sally”。 但是该 HTML 的 value 这个 attribute 保持不变。如果你读取 input 元素的 attribute,就会发现确实没变: input.getAttribute('value') // 返回 "Bob"。
HTML 的 value 这个 attribute 指定了初始值;DOM 的 value 这个 property 是当前值。
disabled 这个 attribute 是另一种特例。按钮的 disabled 这个 property 是 false,因为默认情况下按钮是可用的。 当你添加 disabled 这个 attribute 时,只要它出现了按钮的 disabled 这个 property 就初始化为 true,于是按钮就被禁用了。
添加或删除 disabled 这个 attribute 会禁用或启用这个按钮。但 attribute 的值无关紧要,这就是你为什么没法通过 <button disabled="false">仍被禁用</button> 这种写法来启用按钮。
设置按钮的 disabled 这个 property(如,通过 Angular 绑定)可以禁用或启用这个按钮。 这就是 property 的价值。
就算名字相同,HTML attribute 和 DOM property 也不是同一样东西。
这句话值得再强调一次: 模板绑定是通过 property 和事件来工作的,而不是 attribute。

Promises vs Observables

Promises:
返回单个值
不可取消
Observables:
可以使用多个值
可取消
支持map,filter,reduce和类似的操作符

转载于:https://my.oschina.net/jasper1987/blog/1841653

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值