[关闭]
@pspgbhu 2019-08-25T17:21:41.000000Z 字数 4682 阅读 953

几道面试题

未分类


初级

一个未知宽高元素怎么上下左右垂直居中

题:一个父元素里面有一个未知宽高的子元素,如何使得子元素相较于父元素上下左右垂直居中。

注意:此题不要

  1. 父元素 table-cell

    1. .father {
    2. display: table-cell;
    3. width: 200px;
    4. height: 300px;
    5. vertical-align: middle;
    6. }
  2. 绝对定位 + transform

    1. .father {
    2. position: relative
    3. }
    4. .child {
    5. position: absolute;
    6. left: 50%;
    7. right: 50%;
    8. transform: translate(-50%, -50%);
    9. }
  3. flex

    1. .father {
    2. display: flex;
    3. align-items: center;
    4. justify-content: center;
    5. }

还有一些其他方法暂不列出

请写出以下 console 的输出

    1.
  1. var foo = 1;
  2. function test() {
  3. console.log(foo); // 打印 undefined
  4. var foo = 'smart';
  5. console.log(foo); // 打印 smart
  6. }
  7. test();

考点是定义变量时会有变量提升的效果。因此 test 函数等效于

  1. function test() {
  2. var foo;
  3. console.log(foo);
  4. foo = 'smart';
  5. console.log(foo);
  6. }
    2.
  1. var a;
  2. console.log(typeof a); // 打印 undefined
  3. console.log(b); // 打印 undefined

这个题没啥特殊的,就看能不能答对了

    3.
  1. var Item = {
  2. id: 1,
  3. getId: function() {
  4. return this.id;
  5. }
  6. };
  7. console.log(Item.getId()); // 1
  8. var func = Item.getId;
  9. console.log(func()); // undefined

考函数体内的 this 指向,第一个调用,this 指向 Item 对象,下面的那个调用,this 指向 window 对象

DOM 事件流

下图是 W3C 最新草案中附上的事件流示意图

DOM 事件流中规定了事件流包含三个阶段:事件捕获阶段(capture phase)处于目标阶段(target phase)事件冒泡阶段(bubble phase)

当在页面中某个元素上触发事件时,就会先进入到 事件捕获阶段,该阶段会从 window 对象开始 一级一级沿着目标元素的祖先元素们向下捕获(DOM2 中规定事件应从 document 对象开始传播,但在 DOM3 中增加了 window 对象),直到到达触发事件的目标元素的父元素为止。然后在触发事件的目标元素上进入 处于目标阶段,而后进入事件冒泡阶段,从目标元素的父元素开始一直到传播到 window 对象上。

事件流三个阶段的准确定义

W3C 最新的 DOM Events 草案关于三个阶段的定义。

  • The capture phase: The event object propagates through the target’s ancestors from the Window to the target’s parent. This phase is also known as the capturing phase.
  • The target phase: The event object arrives at the event object’s event target. This phase is also known as the at-target phase. If the event type indicates that the event doesn’t bubble, then the event object will halt after completion of this phase.
  • The bubble phase: The event object propagates through the target’s ancestors in reverse order, starting with the target’s parent and ending with the Window. This phase is also known as the bubbling phase.

DOM3 和 DOM2 中事件流的差异

  1. 旧内容:规定 Document 为事件流顶层对象。
    新内容:规定 Window 为事件流顶层对象。

    在 DOM Level 2 Events 中明确规定了事件应从 document 对象开始传播,但是各大浏览器厂商纷纷将 window 对象也加入了事件流中。此次 DOM3 Level 中尊重了这个既成事实,将 window 对象加入了 Event Flow 中。

  2. 旧内容:冒泡阶段是从目标元素开始向上传播的,同时在事件处理程序中事件对象“处于目标阶段”时(即 Event.eventPhase === 2)也不是真正的处于该阶段,而是处于“冒泡阶段”。
    新内容:冒泡阶段是从目标的父元素开始向上传播的,同时在事件处理程序中事件对象“处于目标阶段”时(即 Event.eventPhase === 2)便是真正的处于目标阶段了。

  3. 旧内容:DOM2 Level 中没有明确规定多个事件触发的顺序。
    新内容:现在多个事件触发的顺序已经在 DOM3 Level 中明确规定了。

    可通过 “event order” 关键字在页面中搜索查看最新标准 W3C UI Events 现行草案

中级

BFC

参考 https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context

XSS是什么,攻击原理,怎么预防

HTTP 协议

HTTP 的特性

HTTP 报文

HTTP 报文分为三个部分:请求行,请求头,请求体
结构如下:

  1. <method> <request-url> <version>
  2. <headers>
  3. <body>

统一资源标识符 URI (Uniform Resource Identifier) 用于标识互联网上资源地址。

Restful API 风格下的 HTTP 最基本的四种请求方式

关于 POST 和 PUT 的创建资源的不同:

响应报文

HTTP 响应报文和 HTTP 请求报文相似,是由状态行,响应头,响应体组成的。

HTTP keep-alive

TCP 协议

注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。

三次握手 & 四次挥手

三次握手目的是连接服务器端指定窗口,建立 TCP 连接

中断 TCP 连接需要经过四次挥手,客户端或服务器均可主动发起挥手动作

TCP KeepAlive

它不同于 HTTP 的 keep-alive,TCP 连接建立之后,连接的双方并不知道彼此是否还存活着,在一方掉线后,另一方却还维持着 TCP 连接。为了避免这种情况,当超过一定的时间没有发送数据后,TCP 会自动发送一个数据为空的报文给对方,来探测对方的是否存活,如果连续发送多次后都没有回应,则认为连接丢失,没有必要保持连接。

HTTPS 协议

HTTP + SSL = HTTPS

先建立 SSL 通信,SSL 建立成功的基础上再建立 HTTP 协议。

HTTPS 采用混合加密的机制

建立通讯的时候,采用公开秘钥加密(非对称加密),通讯建立成功后采用共享秘钥加密(对称加密)。因为非对称加密成本大,因此 HTTPS 采用这种混合加密的形式。

为了保证在建立连接时,客户端使用的公钥就是服务器发送出去的公钥,而非被中间人替换过的,因此引进了证书机制来验证公钥的合法性。

HTTP 状态码的含义

高级

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注