前端面试——Web开发相关

https://blog.csdn.net/wdlhao/article/details/79079660

1.优雅降级和渐进增强?

(1)渐进增强 progressive enhancement

        针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

(2)优雅降级 graceful degradation
       一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

(3)区别

  • 优雅降级是从复杂的现状开始,并试图减少用户体验的供给;
  • 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要;
  • 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。

2.浏览器的内核?

  • IE: trident内核
  • Firefox:gecko内核
  • Safari:webkit内核
  • Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核
  • Chrome:Blink(基于webkit,Google与Opera Software共同开发)

3.降低页面加载时延的方法?

  • (1)减少http请求(合并文件,合并图片)
  • (2)图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方) 
  • (3)优化CSS(压缩合并css,如 margin-top, margin-left...) 
  • (4)网址后加斜杠(如www.campr.com/目录,会判断这个目录是什么文件类型,或者是目录。) 
  • (5)标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。 当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了) 
     

4.web攻击技术?

https://www.cnblogs.com/morethink/p/8734103.html

  • (1)XSS攻击:跨站脚本攻击(Cross-Site Scripting)

       XSS的攻击目标是为了盗取存储在客户端的cookie或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互。

  • (2)SQL注入

      攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。

  • (3)DDOS:分布式拒绝服务攻击(Distributed Denial of Service)

        简单说就是发送大量请求使服务器瘫痪。

  • (4)SYN攻击

     SYN攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

5.web前端开发如何优化页面性能?

【内容方面】

减少 HTTP 请求;减少 DOM 元素数量 ;使得 Ajax 可缓存

【CSS】

  • 把 CSS 放到代码页上端
  • 从页面中剥离 JavaScript 与 CSS
  • 精简 JavaScript 与 CSS
  • 避免 CSS 表达式

【JavaScript 】

  • 脚本放到 HTML 代码页底部 
  • 移除重复脚本 

【面向图片(Image)】

  • 优化图片
  • 不要在 HTML 中使用缩放图片
  • 使用恰当的图片格式
  • 使用 CSS Sprites 技巧对图片优化

6.浏览器是如何渲染页面的?

  • (1)解析HTML文件,创建DOM树。

      自上而下,遇到任何样式(link、style)与脚本(script)都会阻塞

  • (2)解析CSS。

      优先级:浏览器默认设置<用户设置<外部样式<内联样式<HTML中的style样式

  • (3)将CSS与DOM合并,构建渲染树(Render Tree)
  • (4)布局和绘制,重绘(repaint)和重排(reflow)

7. 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

  • 当发送一个 URL 请求时,浏览器会开启一个线程来处理这个请求,同时在远程 DNS 服务器上启动一个 DNS 查询,这能使浏览器获得请求对应的 IP 地址。
  • 浏览器与远程 Web 服务器通过 TCP 三次握手协商来建立一个 TCP/IP 连接。
  • 一旦 TCP/IP 连接建立,浏览器会通过该连接向远程服务器发送 HTTP 的 GET 请求,远程服务器找到资源并使用 HTTP 响应返回该资源,值为 200 的 HTTP 响应状态表示一个正确的响应。
  • 此时,Web 服务器提供资源服务,客户端开始下载资源。
  • 请求返回后,便进入了我们关注的前端模块。简单来说,浏览器解析 HTML 生成 DOM Tree-----》根据 CSS 生成 CSS Rule Tree-----》 javascript 又可以根据 DOM API 操作 DOM。

8.线程和进程的区别?

  • 一个程序至少有一个进程,一个进程至少有一个线程。线程的划分尺度小于进程,使得多线程程序的并发性高。
  • 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存,从而极大地提高了程序的运行效率。
  • 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。

9.什么是"use strict";?使用它的好处和坏处分别是什么?

     "use strict" 意味着代码按照严格模式解析,这种模式使得Javascript在更严格的条件下运行。

    (1)好处

  • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  • 消除代码运行的一些不安全之处,保证代码运行的安全;
  • 提高编译器效率,增加运行速度;
  • 为未来新版本的Javascript做好铺垫。

    (2)坏处

  • 同样的代码,在"严格模式"中,可能会有不一样的运行结果
  • 一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。

10.解释下JS中的this对象是如何工作的?

 this永远指向函数运行时所在的对象。如果是call,apply 指定的this是谁,就是谁;普通的函数调用,函数被谁调用,this就是谁。

猜你喜欢

转载自blog.csdn.net/qq_21428081/article/details/82531645