[Байт Али, Tencent, интервью, Сухие товары] Три рукопожатия, два раза нельзя? Здесь организовано осознание того, что вы ошиблись случайно!

Последний сборник общих вопросов на собеседовании по Java за 2020 год + подробные ответы (7)

В последнее время многие люди вокруг меня задают мне вопросы об интервью с крупными заводами. Поэтому я также комбинирую вопросы собеседования от себя и своих друзей, чтобы разобраться в общих и основных вопросах собеседования по Java. Первые несколько коллекций размещены на главной странице.

Некоторые ответы резюмирую я, а некоторые собраны в Интернете. Не паникуйте после просмотра этих интервью! Если у вас есть больше опыта, вы можете поделиться им в комментариях. Если у вас есть ошибки, вы можете указать на них. Пожалуйста, дайте мне знать, спасибо ~

Интернет

61. Что обозначают коды ответа HTTP 301 и 302? Какая разница?

 

Ответ: 301 и 302 - это кодировка статуса HTTP, и оба представляют, что определенный URL был передан.

 

различия: 

 

  • 301 редирект: 301 означает «перемещено навсегда».

  • 302 редирект: 302 означает временно перемещен. 

 

62. Разница между переадресацией и переадресацией?

 

Пересылка и перенаправление представляют два метода пересылки запросов: прямая пересылка и косвенная пересылка.

 

Режим прямой пересылки (Forward) , клиент и браузер отправляют запрос только один раз, сервлет, HTML, JSP или другие информационные ресурсы, второй информационный ресурс отвечает на запрос, в запросе объекта запроса сохраняется объект для каждой информации Ресурсы делятся.

 

Метод косвенной пересылки (перенаправление) на самом деле представляет собой два HTTP-запроса. Когда сервер отвечает на первый запрос, браузер отправляет запрос на другой URL-адрес для достижения цели пересылки.

 

Приведите популярный пример:

  

Прямая пересылка эквивалентна: «A просит B одолжить деньги, B говорит« нет », B идет к C, чтобы занять, и, если он не может занять, он передаст сообщение A»;

  

Косвенная пересылка эквивалентна: «A просит B занять деньги, B говорит нет, пусть A найдет C, чтобы занять деньги».


63. Кратко опишите разницу между tcp и udp?

 

  • TCP ориентирован на соединение (например, набор номера для установления соединения перед совершением вызова); UDP не требует установления соединения, то есть нет необходимости устанавливать соединение перед отправкой данных.

  • TCP предоставляет надежные услуги. Другими словами, данные, передаваемые через TCP-соединение, не имеют ошибок, потерь, дублирования и прибывают по порядку; UDP делает все возможное, чтобы доставить, то есть надежная доставка не гарантируется.

  • Tcp реализует надежную передачу с помощью контрольной суммы, контроля повторной передачи, идентификации серийного номера, скользящего окна и подтверждающего ответа. Например, управление повторной передачей, когда пакет потерян, также может выполняться управление последовательностью субпакетов, находящихся вне очереди.

  • UDP имеет лучшую производительность в реальном времени, более высокую эффективность работы, чем TCP, и подходит для высокоскоростной передачи и связи в реальном времени или широковещательной связи.

  • Каждое TCP-соединение может быть только двухточечным; UDP поддерживает интерактивную связь «один к одному», «один ко многим», «многие к одному» и «многие ко многим».

  • TCP требует больше системных ресурсов, а UDP требует меньше системных ресурсов.

 

64. Зачем tcp трижды пожимать руку, а два раза не работает? Почему?

 

Для обеспечения надежной передачи данных обе стороны в протоколе TCP должны поддерживать порядковый номер, чтобы идентифицировать, какие из отправленных пакетов данных были получены другой стороной. Процесс трехстороннего рукопожатия является необходимым шагом для взаимодействующих сторон, чтобы сообщить друг другу начальное значение серийного номера и подтвердить, что другая сторона получила начальное значение серийного номера.

 

Если имеется только два рукопожатия, может быть подтверждено самое большее только начальный порядковый номер инициатора соединения, а порядковый номер, выбранный другой стороной, не может быть подтвержден.

65. Что представляют собой семиуровневые модели OSI?

 

  1. Уровень приложений: интерфейс между сетевыми службами и конечными пользователями.

  2. Уровень представления: представление данных, безопасность и сжатие.

  3. Сеансовый уровень: установка, управление и завершение сеансов.

  4. Транспортный уровень: определите номер порта протокола для передачи данных, а также управления потоком и проверки ошибок.

  5. Сетевой уровень: выполните адресацию логических адресов для реализации выбора пути между разными сетями.

  6. Уровень канала передачи данных: такие функции, как установление логических соединений, адресация аппаратных адресов и проверка ошибок.

  7. Физический уровень: устанавливать, поддерживать и отключать физические соединения.

 

66. В чем разница между запросами на получение и публикацию?

 

  • GET безвреден, когда браузер откатывается, в то время как POST отправляет запрос снова.

  • URL-адрес, сгенерированный GET, можно добавить в закладки, но не POST.

  • Запросы GET будут активно кэшироваться браузером, а запросы POST - нет, если они не установлены вручную.

  • Запросы GET можно кодировать только по URL-адресу, тогда как POST поддерживает несколько методов кодирования.

  • Параметры запроса GET будут полностью сохранены в истории браузера, а параметры POST не сохранятся.

  • Параметры, отправляемые в URL-адресе для запросов GET, ограничены по длине, но не для POST.

  • Для типа данных параметра GET принимает только символы ASCII, тогда как POST не имеет ограничений.

  • GET менее безопасен, чем POST, поскольку параметры отображаются непосредственно в URL-адресе, поэтому его нельзя использовать для передачи конфиденциальной информации.

  • Параметры GET передаются через URL-адрес, а POST помещается в тело запроса.

Дай мне посмотреть, хорошая ли у тебя память

67. Как добиться междоменного доступа?

 

Метод 1. Междоменный пинг изображения или тег скрипта

 

Пинги изображения часто используются для отслеживания количества кликов пользователей по страницам или показа динамической рекламы. 
Теги скрипта могут получать данные из других источников, что также является основанием для использования JSONP. 

 

Метод 2: междоменный JSONP

 

JSONP (JSON с заполнением) - это «режим использования» формата данных JSON, который позволяет веб-страницам запрашивать данные из других доменов. Согласно объекту XmlHttpRequest, на который действует политика того же происхождения, и с помощью открытой политики элемента <script> веб-страницы могут получать данные JSON, динамически генерируемые из других источников, и этот режим использования является так называемым JSONP. Данные, захваченные с помощью JSONP, представляют собой не JSON, а произвольный JavaScript, запускаемый с помощью интерпретатора JavaScript, а не анализируемый с помощью анализатора JSON. Через Chrome все запросы Get, отправляемые JSONP, относятся к типу js, а не XHR. 

 

Недостатки:

 

  • Используйте только запрос Get

  • Невозможно зарегистрировать функции мониторинга событий, такие как успех и ошибка, и невозможно легко определить, не удалось ли выполнить запрос JSONP.

  • JSONP выполняется путем загрузки кода из других доменов и уязвим для атак с подделкой межсайтовых запросов, и его безопасность не может быть гарантирована.

Метод 3: CORS

 

Совместное использование ресурсов между источниками (CORS) - это спецификация технологии браузера, которая предоставляет веб-службам метод отправки сценариев песочницы из разных доменов, чтобы избежать политики одинакового происхождения в браузере и обеспечить безопасное перекрестное происхождение. Передача данных домена. Современные браузеры используют CORS в контейнерах API, таких как XMLHttpRequest, чтобы снизить риск HTTP-запросов. В отличие от JSONP, CORS также поддерживает другие требования HTTP в дополнение к методу запроса GET. Обычно серверу необходимо добавить один или несколько из следующих заголовков ответа:

 

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400

 

Междоменные запросы по умолчанию не содержат информацию о файлах cookie. Если вам необходимо передавать ее, настройте следующие параметры:

 

"Access-Control-Allow-Credentials": true
// Ajax设置
"withCredentials": true

 

Метод 4: window.name + iframe

 

window.name работает путем загрузки междоменного HTML-файла в iframe (обычно создается динамически i). Затем HTML-файл присваивает строковое содержимое, переданное запрашивающей стороне, для window.name. Затем запрашивающая сторона может получить в качестве ответа значение window.name.

 

  • Междоменная возможность тегов iframe;

  • Возможность сохранения значения атрибута window.name после обновления документа (а максимально допустимый размер составляет около 2M).

 

У каждого iframe есть окно, которое его обертывает, и это окно является дочерним окном верхнего окна. Атрибут contentWindow возвращает объект Window элемента <iframe>. Вы можете использовать этот объект Window для доступа к документу iframe и его внутренней DOM.

 

<!-- 
 下述用端口 
 10000表示:domainA
 10001表示:domainB
-->

<!-- localhost:10000 -->
<script>
  var iframe = document.createElement('iframe');
  iframe.style.display = 'none'; // 隐藏

  var state = 0; // 防止页面无限刷新
  iframe.onload = function() {
      if(state === 1) {
          console.log(JSON.parse(iframe.contentWindow.name));
          // 清除创建的iframe
          iframe.contentWindow.document.write('');
          iframe.contentWindow.close();
          document.body.removeChild(iframe);
      } else if(state === 0) {
          state = 1;
          // 加载完成,指向当前域,防止错误(proxy.html为空白页面)
          // Blocked a frame with origin "http://localhost:10000" from accessing a cross-origin frame.
          iframe.contentWindow.location = 'http://localhost:10000/proxy.html';
      }
  };

  iframe.src = 'http://localhost:10001';
  document.body.appendChild(iframe);
</script>

<!-- localhost:10001 -->
<!DOCTYPE html>
...
<script>
  window.name = JSON.stringify({a: 1, b: 2});
</script>
</html>

 

Метод пятый: window.postMessage ()

 

Новые возможности HTML5 можно использовать для отправки сообщений всем остальным оконным объектам. Следует отметить, что мы должны убедиться, что все сценарии выполняются перед отправкой MessageEvent.Если он вызывается во время выполнения функции, последующая функция истечет по тайм-ауту и ​​не выполнится.

 

Следующий код реализует междоменное хранилище localStorage.

 

<!-- 
 下述用端口 
 10000表示:domainA
 10001表示:domainB
-->

<!-- localhost:10000 -->
<iframe src="http://localhost:10001/msg.html" name="myPostMessage" style="display:none;">
</iframe>

<script>
  function main() {
      LSsetItem('test', 'Test: ' + new Date());
      LSgetItem('test', function(value) {
          console.log('value: ' + value);
      });
      LSremoveItem('test');
  }

  var callbacks = {};
  window.addEventListener('message', function(event) {
      if (event.source === frames['myPostMessage']) {
          console.log(event)
          var data = /^#localStorage#(\d+)(null)?#([\S\s]*)/.exec(event.data);
          if (data) {
              if (callbacks[data[1]]) {
                  callbacks[data[1]](data[2] === 'null' ? null : data[3]);
              }
              delete callbacks[data[1]];
          }
      }
  }, false);

  var domain = '*';
  // 增加
  function LSsetItem(key, value) {
      var obj = {
          setItem: key,
          value: value
      };
      frames['myPostMessage'].postMessage(JSON.stringify(obj), domain);
  }
  // 获取
  function LSgetItem(key, callback) {
      var identifier = new Date().getTime();
      var obj = {
          identifier: identifier,
          getItem: key
      };
      callbacks[identifier] = callback;
      frames['myPostMessage'].postMessage(JSON.stringify(obj), domain);
  }
  // 删除
  function LSremoveItem(key) {
      var obj = {
          removeItem: key
      };
      frames['myPostMessage'].postMessage(JSON.stringify(obj), domain);
  }
</script>

<!-- localhost:10001 -->
<script>
  window.addEventListener('message', function(event) {
    console.log('Receiver debugging', event);
    if (event.origin == 'http://localhost:10000') {
      var data = JSON.parse(event.data);
      if ('setItem' in data) {
        localStorage.setItem(data.setItem, data.value);
      } else if ('getItem' in data) {
        var gotItem = localStorage.getItem(data.getItem);
        event.source.postMessage(
          '#localStorage#' + data.identifier +
          (gotItem === null ? 'null#' : '#' + gotItem),
          event.origin
        );
      } else if ('removeItem' in data) {
        localStorage.removeItem(data.removeItem);
      }
    }
  }, false);
</script>

 

Обратите внимание на Safari, он сообщит об ошибке:

 

Блокировал фрейм с источником «http: // localhost: 10001» от доступа к фрейму с источником «http: // localhost: 10000». Протоколы, домены и порты должны совпадать.

 

 

Чтобы избежать этой ошибки, вы можете проверить меню разработки ==> отключить междоменное ограничение в браузере Safari. Или это может быть реализовано только путем сброса на стороне сервера, потому что браузер Safari по умолчанию поддерживает только междоменные запросы CORS.

 

Метод 6: изменить document.domain в поддоменах

 

Предварительное условие: эти два доменных имени должны принадлежать одному и тому же базовому доменному имени! И используемые протоколы и порты должны быть одинаковыми, иначе document.domain не может использоваться для междоменного использования, поэтому только кросс-субдомены

 

В рамках корневого домена разрешено устанавливать значение атрибута домена для его родительского домена. Например, в домене «aaa.xxx.com» в качестве домена можно указать «xxx.com», но не «xxx.org» или «com».

Теперь существует два доменных имени aaa.xxx.com и bbb.xxx.com. Страницы, встроенные с bbb ​​под aaa, так как их имена document.ns несовместимы, js bbb не могут работать под aaa. Вы можете установить document.name = 'xxx.com'; в соответствии с aaa и bbb через js для достижения взаимного доступа.

 

Метод седьмой: WebSocket

 

Протокол WebSocket - это новый протокол для HTML5. Он реализует полнодуплексную связь между браузером и сервером, обеспечивая при этом междоменное взаимодействие. Это отличная реализация технологии server push. Ссылки по теме: WebSocket, WebSocket-SockJS

 

Примечание. Объекты WebSocket не поддерживают прослушиватели событий DOM Level 2, и каждое событие должно определяться отдельно с использованием синтаксиса DOM Level 0.

 

Метод восьмой: агентство

 

Политика одинакового происхождения - это ограничение на стороне браузера, которое может быть решено на стороне сервера.

 

Клиент DomainA (браузер) ==> Сервер DomainA ==> Сервер DomainB ==> Клиент DomainA (браузер)

 

Источник: blog.csdn.net/ligang2585116/article/details/73072868

 

68. Расскажите о принципе реализации JSONP?

 

jsonp - это json + padding, динамическое создание тегов сценария и использование атрибута src тегов сценария для получения сценариев js в любом домене, благодаря этой функции (или уязвимости) сервер не возвращает товары в формате json, а возвращает абзац для вызова определенного Код js функции вызывается в src, который реализует кросс-домен.

В конце концов

Содержание вопросов интервью здесь, я надеюсь, что это будет полезно для всех.

Наконец, я хочу кое-что сказать вам: я работал так много лет и брал интервью у одних людей для других. Будь то с точки зрения интервьюера или руководителя, помимо навыков и опыта собеседования, отличные технологии и опыт работы с проектами также являются их козырями и уверенностью. Совместное использование основных технологий производителями первого уровня

 Мне потребовалось много времени, чтобы разобрать некоторые учебные материалы. То, что я опубликовал выше, является верхушкой айсберга в материалах. Надеюсь, я смогу вам помочь! Нажмите, чтобы вместе изучить шифр: csdn

                         

  Я поделюсь с вами другими статьями, посвященными чистой галантереи, и надеюсь, что действительно помогу вам. Ваша поддержка - моя самая большая мотивация!

рекомендация

отblog.csdn.net/weixin_50333534/article/details/108805134