前端面试题(1)

1.浏览器渲染页面的流程css

步骤:1)解析HTML文件,构建DOM Treehtml

  2)解析CSS,构建CSSOM Tree(css规则树)前端

  3)将DOM Tree和CSSOM合并,构建Render Tree(渲染树)ajax

  4)reflow(重排):根据Render tree 进行节点信息计算(layout)数据库

  5)repaint(重绘):根据计算好的信息绘制整个页面json

理论上,每一次的dom更改或者css集合属性更改,都会引发一次浏览器的重排/重绘过程,而若是是css的非几何属性更改,则只会引发重绘过程,因此重排必定引发重绘,重绘不必定引发重排后端

由于有时JS也参与DOM Tree的构建,于是咱们会先执行js再开始构建渲染树,JS脚本阻塞Render tree的构建,即阻塞了页面的渲染api

2.企业项目中为何要使用NodeJS?浏览器

Node.JS适合如下的情景缓存

1)实时性应用,好比在线多人协做工具,网页聊天应用

2)以I/O为主的高并发应用,好比为客户端提供API,读取数据库

3)流失应用,好比客户常常上传文件

4)先后端分离

3.AMD和CMD的区别

AMD 依赖前置

CMD 依赖就近

4.当输入www.baidu.com后会发生哪些事情?

1)输入网址 按下回车 ----DNS解析

2)找到相对应的服务器

3)TCP的三次握手

4)找到资源库,获取相对应的数据

5)解析数据

html css js img--TCP四次挥手

6)返回客户端页面

5.前端渲染和后端渲染的区别和优缺点?

首先,介绍一下 SPA、SEO、SSR 三者的区别

SPA(single page application) 单页面应用,是先后端分离时提出的一种解决方案。
优势:页面之间切换快;减小了服务器压力;
缺点:首屏打开速度慢,不利于 SEO 搜索引擎优。
 
SEO(search engine optimization)搜索引擎优化,利用搜索引擎的规则提升网站在有关搜索引擎内的天然排名。
咱们以前说 SPA 单页面应用,经过 ajax 获取数据,这就难保证咱们的页面能被搜索引擎收到。而且有一些搜索引擎不支持的 js 和经过 ajax 获取的数据,那就更不用提 SEO 了,为解决这个问题,SSR 登场了···
 
SSR (server side rendering)服务端渲染,SSR 的出现必定程度上解决了 SPA 首屏慢的问题,又极大的减小了普通 SPA 对于 SEO 的不利影响。
优势:
  更快的响应时间,不用等待全部 js 都下载完成,浏览器便能显示比较完整的页面;
更好的 SSR,咱们能够将 SEO 关键信息直接在后台就渲染成 html,从而保证搜索引擎都能爬取到关键数据。
缺点:
  占用更多的 CUP 和内存资源;
一些经常使用的浏览器的 api 可能没法正常使用,好比 window,document,alert等,若是使用的话须要对运行环境加以判断。
 
什么是服务器端渲染和客户端渲染?
  互联网早期,用户使用的浏览器浏览的都是一些没有复杂逻辑的、简单的页面,这些页面都是在后端将 html 拼接好的,而后返回给前端完整的 html 文件,浏览器拿到这个 html 文件以后就能够直接解析展现了,这也就是所谓的服务器端渲染。而随着前端页面的复杂性提升,前端就不只仅是普通的页面展现了,多是添加更多功能的组件,复杂性更大,另外,此时 ajax 的兴起,使得页面就开始崇拜先后端分离的开发模式,即后端不提供完整的 html 页面,而是提供一些 api 使得前端能够获取 json 数据,而后前端拿到 json 数据以后再在前端进行 html 页面的拼接,而后展现在浏览器上,这就是所谓的客户端渲染,这样前端就能够专一 UI 的开发,后端专一与逻辑开发
 
二者本质的区别?
  客户端渲染和服务器端渲染的最重要的区别就是到底是谁来完成html文件的完整拼接,若是是在服务器端完成的,而后返回给客户端,就是服务器端渲染,而若是是前端作了更多的工做完成了html的拼接,则就是客户端渲染。
 
服务器端渲染的优缺点是?
优势:

前端耗时少。由于后端拼接完了html,浏览器只须要直接渲染出来。
有利于SEO。由于在后端有完整的html页面,因此爬虫更容易爬取得到信息,更有利于seo。
无需占用客户端资源。即解析模板的工做彻底交由后端来作,客户端只要解析标准的html页面便可,这样对于客户端的资源占用更少,尤为是移动端,也能够更省电。
后端生成静态化文件。即生成缓存片断,这样就能够减小数据库查询浪费的时间了,且对于数据变化不大的页面很是高效 。

缺点:

  不利于先后端分离,开发效率低。使用服务器端渲染,则没法进行分工合做,则对于前端复杂度高的项目,不利于项目高效开发。另外,若是是服务器端渲染,则前端通常就是写一个静态html文件,而后后端再修改成模板,这样是很是低效的,而且还经常须要先后端共同完成修改的动做; 或者是前端直接完成html模板,而后交由后端。另外,若是后端改了模板,前端还须要根据改动的模板再调节css,这样使得先后端联调的时间增长。
占用服务器端资源。即服务器端完成html模板的解析,若是请求较多,会对服务器形成必定的访问压力。而若是使用前端渲染,就是把这些解析的压力分摊了前端,而这里确实彻底交给了一个服务器。
 
客户端渲染的优缺点是?
优势:
  先后端分离。前端专一于前端UI,后端专一于api开发,且前端有更多的选择性,而不须要遵循后端特定的模板。
体验更好。好比,咱们将网站作成SPA或者部份内容作成SPA,这样,尤为是移动端,可使体验更接近于原生app。

缺点:
  前端响应较慢。若是是客户端渲染,前端还要进行拼接字符串的过程,须要耗费额外的时间,不如服务器端渲染速度快。
不利于SEO。目前好比百度、谷歌的爬虫对于SPA都是不认的,只是记录了一个页面,因此SEO不好。由于服务器端可能没有保存完整的html,而是前端经过js进行dom的拼接,那么爬虫没法爬取信息。 除非搜索引擎的seo能够增长对于JavaScript的爬取能力,这才能保证seo。

使用服务器端渲染仍是客户端渲染?
  不谈业务场景而盲目选择使用何种渲染方式都是耍流氓。好比企业级网站,主要功能是展现而没有复杂的交互,而且须要良好的SEO,则这时咱们就须要使用服务器端渲染;而相似后台管理页面,交互性比较强,不须要seo的考虑,那么就可使用客户端渲染。
另外,具体使用何种渲染方法并非绝对的,好比如今一些网站采用了首屏服务器端渲染,即对于用户最开始打开的那个页面采用的是服务器端渲染,这样就保证了渲染速度,而其余的页面采用客户端渲染,这样就完成了先后端分离。

 6.浅谈堆和栈的理解

js变量存储有栈存储和堆存储,基本数据类型的变量存储在栈中,引用数据类型的变量存储在堆中,引用类型数据的地址也存在栈中

当访问基础类型的变量时,直接从栈中取值。当访问引用类型变量时,先从栈中读取地址,再根据地址到堆中取出数据

7.js的数据类型分为哪几类

基础数据类型:== !=- *= /= -=%=

强制类型转换:Number parseInt();取整转换parseFloat()

8.undefined和null区别

null是一个表示"无"的对象,转为数值为0

undefined:是一个表示"无"的原始值,转为数值时为NaN

undefined:

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

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

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

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

null:

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

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

相关文章
相关标签/搜索