Disposición de las preguntas de la entrevista de Ali (Parte 1)

Ingrese la URL al proceso de renderizado

1. Ingrese una URL en el navegador. 2. Resuelva el nombre de dominio en una dirección IP a través de DNS. El nombre de dominio es solo una asignación con la dirección IP. El proceso de resolución de nombre de dominio es en realidad el proceso de restaurar el nombre de dominio a una dirección IP (si la entrada es una dirección IP, este paso se omite) 3. De acuerdo con la dirección IP y el puerto resueltos, el navegador inicia una solicitud http 4. El navegador establece una conexión con la conexión Tcp del servidor (proceso de establecimiento: protocolo de enlace de tres vías)

  • El primer apretón de manos: al establecer una conexión, el cliente envía un paquete de sincronización (syn = j) al servidor y entra en el estado SYN_SENT, esperando que el servidor confirme;
  • Segundo protocolo de enlace: cuando el servidor recibe el paquete syn, debe confirmar el SYN del cliente (ack = j + 1), y al mismo tiempo enviar un paquete SYN (syn = k), es decir, el paquete SYN + ACK, y el servidor entra en el estado SYN_RECV;
  • El tercer apretón de manos: el cliente recibe el paquete SYN + ACK del servidor y envía un paquete de reconocimiento ACK (ack = k + 1) al servidor. Después de que se envía el paquete, el cliente y el servidor ingresan al ESTABLECIDO (conexión TCP exitosa ) estado, que se completa tres veces se dan la mano.
  • Wave por primera vez: el cliente envía un FIN para cerrar la transferencia de datos del cliente al servidor y el cliente entra en el estado FIN_WAIT_1.
  • La segunda ola: después de que el servidor recibe el FIN, envía un ACK al cliente, confirmando que el número de serie es el número de serie recibido + 1 (igual que SYN, un FIN ocupa un número de serie), y el servidor ingresa CLOSE_WAIT estado.
  • Ola por tercera vez: el servidor envía un FIN para cerrar la transferencia de datos del servidor al cliente y el servidor entra en el estado LAST_ACK.
  • Cuarta ola: Después de que el Cliente recibe el FIN, el Cliente ingresa al estado TIME_WAIT y luego envía un ACK al Servidor, confirmando que el número de serie es el número de serie recibido +1, y el Servidor entra en el estado CERRADO, completando los cuatro olas. 5. Una vez que el navegador establece una conexión a través del protocolo de enlace de tres vías de tcp, envía una solicitud HTTP al servidor, solicitando paquetes de datos. 6. El servidor recibe y procesa la solicitud HTTP, encuentra recursos basados ​​en la información de la solicitud y devuelve información de respuesta 7. El navegador recibe la respuesta HTTP 8. Si el código de estado en el mensaje indica que la solicitud es exitosa, entonces se acepta el recurso devuelto (como un archivo HTML). Hasta ahora, el navegador ha recibido un documento HTML y comienza a analizar para representar el documento. 11. En este punto, el navegador recibió un documento HTML y comenzó a analizarlo para procesarlo. 12. Finaliza la reproducción de la página. 13. Saludó cuatro veces para cerrar la conexión TCP.

Aplanar el objeto

function copy(input) {
    
    
  let result = {
    
    };
  const flatten = (params, key) => {
    
    
    if (params instanceof Array) {
    
    
      params.forEach((param, index) => {
    
    
        if (param instanceof Object || param instanceof Array) {
    
    
          flatten(param, `${
      
      key}[${
      
      index}]`);
        } else {
    
    
          result[`${
      
      key}[${
      
      index}]`] = flatten(param, `${
      
      key}[${
      
      index}]`);
        }
      });
    } else if (params instanceof Object) {
    
    
      for (var itemKey in params) {
    
    
        const itemValue = params[itemKey];
        if (itemValue instanceof Array) {
    
    
          flatten(itemValue, itemKey);
        } else if (itemValue instanceof Object) {
    
    
          flatten(itemValue, itemKey);
        } else if (itemValue === null || itemValue === undefined) {
    
    
        } else {
    
    
          if (key) {
    
    
            result[`${
      
      key}.${
      
      itemKey}`] = flatten(itemValue, itemKey);
          } else {
    
    
            result[itemKey] = flatten(itemValue, itemKey);
          }
        }
      }
    } else {
    
    
      return params;
    }
  };
  flatten(input);
  return result;
}
let input = {
    
    
  a: 1,
  b: [
    1,
    2,
    {
    
    
      c: true,
    },
    [3],
  ],
  d: {
    
    
    e: 2,
    f: 3,
  },
  g: null,
};
copy(input);

Resta de matriz

let subSet = function (arr1, arr2) {
    
    
  var set1 = new Set(arr1);
  var set2 = new Set(arr2);

  var subset = [];

  for (let item of set1) {
    
    
    if (!set2.has(item)) {
    
    
      subset.push(item);
    }
  }

  return subset;
};

Decodificación de cadenas

function decodeString(input) {
    
    
  let i1 = input.lastIndexOf("[");
  let i2 = input.indexOf("]", i1);
  if (i1 > -1 && i2 > -1) {
    
    
    let oldStr = input.substring(i1, i2 + 1);
    let number = "";
    for (let i = i1 - 1, j = 0; ; i--, j++) {
    
    
      if (input[i]) {
    
    
        if (!(input[i] >= 0)) {
    
    
          break;
        } else {
    
    
          number = input[i] + number;
        }
      }else{
    
    
          break;
      }
    }
    function change(str, num) {
    
    
      let newStr = "";
      for (let i = 0; i < num; i++) {
    
    
        newStr += str;
      }
      return newStr;
    }
    input = input.replace(number + oldStr, change(oldStr.slice(1, -1), number));
    return decodeString(input);
  } else {
    
    
    return input;
  }
}
let str = '2[3[a]2[bc]]'

Supongo que te gusta

Origin blog.csdn.net/qq_40289624/article/details/111904148
Recomendado
Clasificación