JS相关概念及服务器相关概念

#js相关概念

  • #####new 的过程

    • 1.创建一个空对象 将来会返回这个对象
    • 2.调用构造函数,并将构造函数的this指向新创建的对象o
    • 3.把原型对象的方法给新创建的o,把o的__proto__指向构造函数的显式原型
    • 4.判断构造函数的返回值,来决定new的返回值是(构造函数的返回值还是实例化对象)
  • #####什么是闭包?闭包的优点?闭包的缺点?

    • 闭包就是函数嵌套函数,闭包就是内部嵌套的函数, 闭包是一个包含内部函数引入外部函数变量的那个对象, 闭包是函数内部和函数外部的连接的桥梁(间接的让函数外部读取函数内部的局部变量)

    • 优点:让局部变量在函数执行结束以后,仍然存在于内存当中,延长了局部变量的生命周期,可以让外部作用域读写内部作用域的变量

    • 缺点:函数执行完成之后,局部变量不会销毁,长时间占用内存,还可能造成内存泄漏

      解决方法:减少使用、及时释放

  • #####谈一谈作用域链

    • 1.函数的创建的时候,会创建一条作用域链(scope chain)
    • 2.作用域链:保证对 当前执行环境所能够访问的所有的变量和函数 的有序访问
    • 3.作用域链访问的所有的变量和函数, 也就是访问的是各个函数变量对象,其实真正意义上是一个各个作用域的变量对象组成的链条
    • 4.在函数定义的时候,创建的作用域链式不完整的,因为当前的函数没有执行,所以作用域链的最前端没有变量对象
    • 5.当函数调用并创建执行上下文的时候,会把当前的作用域的变量对象放到作用域链的最前端,此时作用域链完整并激活
    • 6.作用域链的最前端一定是当前的函数的变量对象,最末端一定是window对象
    • 7.当查找一个变量的时候,就会沿着作用域链去查找,如果查不到就会抛出错误
  • #####什么是执行上下文

    • 1.js解析并不是真正的直接逐行解析,而是进入到一个新的作用域的时候,会有一个准备工作,这个准备工作被称作为‘执行上下文’,指向上下文还在内存中为函数执行创建一个空间
    • 2.新的作用域可以是全局作用域和局部作用域
    • 3.全局的执行上下文只有一个,局部的执行上下文可以有多个
    • 4.因为有多个执行上下文,所以js会创建一个执行上下文栈(stack),用来管理所有的执行上下文
    • 5.代码最开始指向是先执行全局,所以会现在stack中压入一个全局执行上下文,全局执行上下文等代码全部指向完毕才退出
    • 6.当代码执行一个函数,此时就会创建一个新的局部执行上下文,并把它压入到stack中,当函数执行函数,就把当前执行上下文在stack中弹出
    • 7.执行上下文包含3个内容:1.变量对象 2.确定this 3.激活作用域链
  • #####区分 公有 私有 静态 特权 概念

    • 公有属性和公有方法:设置给实例化对象的属性和方法被称作公有属性和公有方法

      私有属性和私有方法:声明在构造函数中的变量或函数,被称作为私有属性和私有方法

      静态属性和方法:js中无需实例化就可以调用的方法或属性叫做静态方法和静态属性。

      特权方法:在构造函数中给实例对象绑定的方法被称作为特权方法

  • #####谈一谈变量对象

    • 1.变量对象是官方的专业名词,保存当前作用域所有的属性和方法

    • 2.在执行上下文中,变量对象被创建和激活,只有变量对象被激活,我们才能获取到当前作用域定义的属性和方法

    • 3.变量对象分为 全局变量对象和局部变量对象

    • 4.全局的变量对象其实就是window对象,因为所有的全局变量和全局的函数 都是window对象的属性和方法

    • 5.局部变量对象:

      ​ - 创建局部执行上下文时候产生局部变量对象

      ​ - 在变量对象中创建形参和实参

      ​ - 把所有的函数声明放到变量对象中(函数优先提升),此时如果有重名的属性,则直接覆盖

      ​ - 把当前作用域中所有的变量,以键值对的形式保存在变量对象中,此时所有的变量的值都应该是undefined

      ​ - 当提升的变量如果和形参或函数有重名的,则不会干扰已经存在的这些属性(只有当执行到变量被赋值了,才会进行覆盖)

  • #####谈一谈thist

    this是函数中的一个变量,他指向的对象是根据函数调用时候决定的 函数调用有4中方式

    • ​ 1.自己调用, 2.上下文对象调用, 3.实例化调用 , 4. call 和 appyl调用

    如何确定this指向

    ​ - 首先确实是否是硬绑定,如果是则this指向call所规定的对象

    ​ - 是否是实例化调用,如果是实例化调用,则this指向实例化对象

    ​ - 判断函数调用是否是被上下文对象调用的,如果是 则this指向上下文对象(要注意是否存在隐式丢失现象)

    ​ - 函数自调用 返回window

  • #####谈一谈事件轮询机制

    执行初始化同步代码,把相应的回调给到浏览器对应的管理模块(事件回调->事件管理模块 、计时器 回调->计时器管理模块 ajax回调->ajax管理模块)

    当事件发生或计时器到期等等。就会把相应的回调函数添加到回调队列中,等待执行

    等初始化代码指向完毕,js引擎就会循环的检查回调队列中的回调函数,并执行

  • #####谈一谈 call apply bind

    • call、apply、bind每一个函数都有这三个方法,这三个方法作用一直都是改变函数运行时的上下文指向,其实就是改变函数中的this指向,

    • call和apply 都是改变了this指向,并且调用了函数,但是参数是不一样的

      ​ fn.call(fn1,fn的参数使用逗号隔开);

      ​ fn.apply(null,[数组,里边书写的是fn的参数]) (可以传递数组)

      ​ bind 只是改变了this指向,并且返回了一个新函数的引用,并没有调用函数

  • #####谈谈原型链

    每个函数对象都有自己的显示原型__prototype__属性他默认指向一个Obect空对象,叫原型对象,原型对象上也有一个属性是constructor ,它指向是其构造函数,每个对象也有自己的一个隐式原型__proto__属性,默认值就是其构造函数的prototype的属性值,

    服务器相关概念

  • #####谈一谈cookie
    1.“HTTP 是一个无状态的协议”:即使同一个客户端连续两次发送请求给服务器,服务器也识别不出这是同一个客户端发送的请求。为了解决 HTTP 无状态导致的问题,后来出现了 Cookie
    2.Cookie指某些网站为了辨别用户身份而储存在用户本地终端上的数据
    3.Cookie作为一段一般不超过 4KB 的小型文本数据,它由一个名称(Name)、一个值(Value)和其它几个用于控制 Cookie 有效期、安全性、使用范围的可选属性组成
    4.Cookie的设置

    • 客户端发送 HTTP 请求到服务器
    • 当服务器收到 HTTP 请求时,在响应头里面添加一个 Set-Cookie 字段
    • 浏览器收到响应后保存下 Cookie
    • 之后对该服务器每一次请求中都通过 Cookie 字段将 Cookie 信息发送给服务器。
      5.过期时间设置:
    • Expires 用于设置 Cookie 的过期时间
    • Max-Age 用于设置在 Cookie 失效之前需要经过的秒数
    • HTTPOnly:设置 HTTPOnly 属性可以防止客户端脚本通过 document.cookie 等方式访问 Cookie,有助于避免 XSS 攻击
  • #####谈一谈缓存
    1.缓存是性能优化中简单高效的一种优化方式。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷
    2.缓存分为强缓存和协商缓存

    • 强缓存:不会向服务器发送请求,直接从缓存中读取资源,并且显示from disk cache或from memory cache字样,强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control。
    • 协商缓存:协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程
    • 描述协商缓存过程
  • #####谈一谈session
    1.因为 Cookie 可以通过客户端修改,而 Session 只能在服务端设置,所以安全性比 Cookie 高,一般会用于验证用户登录状态
    2 Session 是基于Cookie 实现的另一种记录服务端和客户端会话状态的机制
    3 Session 是存储在服务端,而 SessionId 会被存储在客户端的 Cookie 中
    3 描述Session的过程

  • #####从url到页面渲染中间发生的什么

    1.DNS查询解析

    ​ 将域名地址解析成ip地址

    2.TCP连接: TCP三次握手

    ​ 第一次握手:浏览器发送给服务器,告诉服务器我准备好了,将要发送请求

    ​ 第二次握手:服务器发送给浏览器,告诉浏览器我也准备好了,需要和你再次确认一下

    ​ 第三次握手:浏览器发送给服务器,告诉服务器确认完毕,马上发送请求

    3.发送请求

    ​ 按照HTTP协议的规定,生成请求报文,浏览器将请求报文发送给服务器,浏览器将请求报文发送给服务器

    4.返回响应

    ​ 按照HTTP协议的规定,生成相应报文,服务器将请求报文发送给客户端

    5.渲染页面:

    1.解析 html 结构为浏览器可以理解的 DOM 树结构,期间会去下载次级资源以及执行 js 代码。

    1. 解析css生产CSSOM树
    2. 解析js,可能会对DOM和样式修改
    3. 根据DOM树和CSSOM树,生成渲染树(render Tree)
    4. 分层:根据层叠上下文属性,将渲染树的节点进行分层
    5. 生成图层绘制指令:绘制指令生成之后,渲染进程主线程会将绘制指令发送给合成线程,由合成线程来完成最后的绘制工作。合成线程会将图层划分为图块
    6. 栅格化:将图层划分为图块
    7. 合成和显示

    6.断开连接:TCP四次挥手

    ​ 第一次挥手:浏览器发送给服务器,告诉服务器请求报文发送完毕

    第二次挥手:服务器发送给浏览器,告诉浏览器请求报文接受完毕,可以等待断开

    第三次挥手:服务器发送给浏览器,告诉浏览器响应报文发送完毕

    第四次挥手:浏览器发送给服务器,告诉服务器响应报文接受完毕,可以断开连接了

    服务器断开连接 再是浏览器断开连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值