前端面试笔试知识汇总3(含答案)

另外两篇文章连接以下:javascript

前端面试笔试知识汇总1(含答案);css

前端面试笔试知识汇总2(含答案);html

 

结合个人秋招面经来看,效果更佳:2017年秋季校招前端面经(百度,腾讯,网易,华为,乐视等)前端

以及各个公司校招笔试题回忆录:各个公司前端笔试题回顾html5

 

4八、获取url后面的参数并变为对象

 

 

4九、 经常使用那几种浏览器测试?有哪些内核(Layout Engine)?

  (Q1) 浏览器:IE,Chrome,FireFox,Safari,Opera。java

  (Q2) 内核:Trident,Gecko,Presto,Webkit。web

50. 说下行内元素和块级元素的区别?行内块元素的兼容性使用?(IE8 如下)

  (Q1) 行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(能够设置line-height),margin上下无效,padding上下无效。面试

块级元素:各占据一行,垂直方向排列。重新行开始结束接着一个断行。ajax

  (Q2) 兼容性:display:inline-block;*display:inline;*zoom:1;canvas

51.box-sizing经常使用的属性有哪些?分别有什么做用?

  (Q1)box-sizing: content-box|border-box|inherit;

  (Q2)content-box:宽度和高度分别应用到元素的内容框。在宽度和高度以外绘制元素的内边距和边框(元素默认效果)。

border-box:元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。经过从已设定的宽度和高度分别减去边框和内边距才能获得内容的宽度和高度。

52. Doctype做用?标准模式与兼容模式各有什么区别?

  (Q1) <!DOCTYPE>告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会致使文档以兼容模式呈现。

  (Q2) 标准模式的排版和JS运做模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点没法工做。

53. HTML5 为何只须要写 <!DOCTYPE HTML>?

  HTML5不基于 SGML,所以不须要对DTD进行引用,可是须要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行)。

而HTML4.01基于SGML,因此须要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

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

  主要分红两部分:渲染引擎(layout engineer或Rendering Engine)和js引擎。

  渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,而后会输出至显示器或打印机。

  浏览器的内核的不一样对于网页的语法解释会有不一样,因此渲染的效果也不相同。全部网页浏览器、电子邮件客户端以及其它须要编辑、显示网络内容的应用程序都须要内核。

  JS引擎则:解析和执行javascript来实现网页的动态效果。

  最开始渲染引擎和JS引擎并无区分的很明确,后来JS引擎愈来愈独立,内核就倾向于只指渲染引擎。

55. html5有哪些新特性?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

(Q1)HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增长。

  (1)绘画 canvas;

  (2)用于媒介回放的 video 和 audio 元素;

  (3)本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

  (4)sessionStorage 的数据在浏览器关闭后自动删除;

  (5)语意化更好的内容元素,好比 article、footer、header、nav、section;

  (6)表单控件,calendar、date、time、email、url、search;

  (7)新的技术webworker, websocket, Geolocation;

 

(Q2)IE8/IE7/IE6支持经过document.createElement方法产生的标签,

  能够利用这一特性让这些浏览器支持HTML5新标签,

  浏览器支持新标签后,还须要添加标签默认的样式。

  固然也能够直接使用成熟的框架、好比html5shim,

  <!--[if lt IE 9]>

  <![endif]-->

56. 简述一下你对HTML语义化的理解?

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

57. 介绍js的基本数据类型

  Undefined、Null、Boolean、Number、String

58. js有哪些内置对象?

  数据封装类对象:Object、Array、Boolean、Number 和 String

  其余对象:Function、Arguments、Math、Date、RegExp、Error

59. this对象的理解

  this老是指向函数的直接调用者(而非间接调用者);

  若是有new关键字,this指向new出来的那个对象;

  在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this老是指向全局对象Window。

60. eval是作什么的?

  它的功能是把对应的字符串解析成JS代码并运行;

  应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)。

  由JSON字符串转换为JSON对象的时候能够用eval,var obj =eval('('+ str +')')。

61. DOM怎样添加、移除、移动、复制、建立和查找节点

  • 建立新节点

    createDocumentFragment() //建立一个DOM片断

    createElement() //建立一个具体的元素

    createTextNode() //建立一个文本节点

  • 添加、移除、替换、插入

    appendChild()

    removeChild()

    replaceChild()

    insertBefore() //在已有的子节点前插入一个新的子节点

  • 查找

    getElementsByTagName() //经过标签名称

    getElementsByName() //经过元素的Name属性的值(IE容错能力较强,会获得一个数组,其中包括id等于name值的)

    getElementById() //经过元素Id,惟一性

62. null和undefined的区别?

  null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

undefined:

  (1)变量被声明了,但没有赋值时,就等于undefined。

  (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

  (3)对象没有赋值的属性,该属性的值为undefined。

  (4)函数没有返回值时,默认返回undefined。

null:

  (1) 做为函数的参数,表示该函数的参数不是对象。

  (2) 做为对象原型链的终点。

63. new操做符具体干了什么呢?

  (1)建立一个空对象,而且 this 变量引用该对象,同时还继承了该函数的原型。

  (2)属性和方法被加入到 this 引用的对象中。

  (3)新建立的对象由 this 所引用,而且最后隐式的返回 this 。

64. JSON 的了解?

  JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。

  格式:采用键值对,例如:{'age':'12', 'name':'back'}

65. call() 和 apply() 的区别和做用?

  apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。若是上下文是null,则使用全局对象代替。

    如:function.apply(this,[1,2,3]);

  call()的第一个参数是上下文,后续是实例传入的参数序列。

    如:function.call(this,1,2,3);

66. 如何获取UA?

 

67. HTTP状态码知道哪些?

  100 Continue 继续,通常在发送post请求时,已发送了http header以后服务端将返回此信息,表示确认,以后发送具体参数信息

  200 OK 正常返回信息

  201 Created 请求成功而且服务器建立了新的资源

  202 Accepted 服务器已接受请求,但还没有处理

  301 Moved Permanently 请求的网页已永久移动到新位置。

  302 Found 临时性重定向。

  303 See Other 临时性重定向,且老是使用 GET 请求新的 URI。

  304 Not Modified 自从上次请求后,请求的网页未修改过。

  400 Bad Request 服务器没法理解请求的格式,客户端不该当尝试再次使用相同的内容发起请求。

  401 Unauthorized 请求未受权。

  403 Forbidden 禁止访问。

  404 Not Found 找不到如何与 URI 相匹配的资源。

  500 Internal Server Error 最多见的服务器端错误。

  503 Service Unavailable 服务器端暂时没法处理请求(多是过载或维护)。

68. 你有哪些性能优化的方法?

  (1) 减小http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

  (2) 前端模板 JS+数据,减小因为HTML标签致使的带宽浪费,前端用变量保存ajax请求结果,每次操做本地变量,不用请求,减小请求次数

  (3) 用innerHTML代替DOM操做,减小DOM操做次数,优化javascript性能。

  (4) 当须要设置的样式不少时设置className而不是直接操做style。

  (5) 少用全局变量、缓存DOM节点查找的结果。减小IO读取操做。

  (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

  (7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

69. 什么叫优雅降级和渐进加强?

  优雅降级:web站点在全部新式浏览器中都能正常工做,若是用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工做。

因为IE独特的盒模型布局问题,针对不一样版本的IE的hack实践过优雅降级了,为那些没法支持功能的浏览器增长候选方案,使之在旧式浏览器上以某种形式降级体验却不至于彻底失效。

  渐进加强:从被全部浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增长无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥做用。

70. 哪些常见操做会形成内存泄漏?

  内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在。

  垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。

  setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏。

  闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)。

 

71. 线程与进程的区别

  一个程序至少有一个进程,一个进程至少有一个线程。

  线程的划分尺度小于进程,使得多线程程序的并发性高。

  另外,进程在执行过程当中拥有独立的内存单元,而多个线程共享内存,从而极大地提升了程序的运行效率。

  线程在执行过程当中与进程仍是有区别的。每一个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。可是线程不可以独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分能够同时执行。但操做系统并无将多个线程看作多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

7二、JavaScript 运行机制详解

具体能够参考阮一峰的博文《JavaScript 运行机制详解:再谈Event Loop》

1、JavaScript是单线程?

  JavaScript的单线程,与它的用途有关。做为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操做DOM。这决定了它只能是单线程,不然会带来很复杂的同步问题。好比,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另外一个线程删除了这个节点,这时浏览器应该以哪一个线程为准?

因此,为了不复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,未来也不会改变。

2、任务队列

  JavaScript语言的设计者意识到,这时主线程彻底能够无论IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回告终果,再回过头,把挂起的任务继续执行下去。因而,全部任务能够分红两种,一种是同步任务(synchronous),另外一种是异步任务

3、事件和回调函数

  "任务队列"是一个事件的队列(也能够理解成消息的队列),IO设备完成一项任务,就在"任务队列"中添加一个事件,表示相关的异步任务能够进入"执行栈"了。主线程读取"任务队列",就是读取里面有哪些事件。

  "任务队列"中的事件,除了IO设备的事件之外,还包括一些用户产生的事件(好比鼠标点击、页面滚动等等)。只要指定过回调函数,这些事件发生时就会进入"任务队列",等待主线程读取。

4、Event Loop

  主线程从"任务队列"中读取事件,这个过程是循环不断的,因此整个的这种运行机制又称为Event Loop(事件循环)

5、定时器

  除了放置异步任务的事件,"任务队列"还能够放置定时事件,即指定某些代码在多少时间以后执行。这叫作"定时器"(timer)功能,也就是定时执行的代码。

7三、Css渲染机制

  当咱们的浏览器得到html文件后,会自上而下的加载,并在加载过程当中进行解析和渲染。

  加载说的就是获取资源文件的过程,若是在加载的过程当中,遇到外部css文件和图片,浏览器会另外发出一个请求,来获取css文件和相应的图片,这个请求是异步的,并不会影响html文件。

  可是若是遇到JavaScript文件,html文件会挂起渲染的线程,等待javascript加载完毕后,html文件再继续渲染。

  为何html须要等待javascript呢?由于javascript可能会修改DOM,致使后续的html资源白白加载,因此html必须等待javascript文件加载完毕后,再继续渲染。这也就是为何javascript文件要写在底部body标签前的缘由。

  好了,接下来咱们介绍渲染的细节,html的渲染过程就是将html代码按照深度优先遍历来生成DOM树。

  css文件下载完后也会进行渲染,生成相应的CSSOM。

  当全部的css文件下载完且全部的CSSOM构建结束后,就会和DOM一块儿生成Render Tree。

  接下来,浏览器就会进入Layout环节,将全部的节点位置计算出来。

  最后,经过Painting环节将全部的节点内容呈现到屏幕上。

  咱们理解的重排和重绘也就是分别触发了Layout环节和Painting环节。

7四、在网页中的应该使用奇数仍是偶数的字体?为何呢?

  • 偶数字号相对更容易和 web 设计的其余部分构成比例关系。好比:当我用了 14 px 的正文字号,我可能会在一些地方用 14 × 0.5 = 7 px 的 margin,在另外一些地方用 14 × 1.5 = 21 px 的标题字号。
  • Windows 自带的点阵宋体(中易宋体)从 Vista 开始只提供 十二、1四、16 px 这三个大小的点阵,而 1三、1五、17 px 时用的是小一号的点阵(即每一个字占的空间大了 1 px,但点阵没变),因而略显稀疏。

7五、水平竖直居中的方法

一、使用flex

 

二、使用transform

 

三、块的大小都知道

前面两种在不知道容器的大小可使用,下面这种事须要知道大小的

相关文章
相关标签/搜索