Интервью с Tencent (2)

опрос

существуетИнтервью с Tencent (1)В середине я в основном рассказал об опыте автора брать интервью у Tencent по первой и второй сторонам.Статья получила хороший отклик.Когда автор был взволнован,он отложил на ночь свою девушку и написал вторую статью.Теперь мои уши а колени еще немного болят.. Во второй части будет описана третья часть интервью автора с Tencent, а четвертая часть будет дополняться в последующих статьях. Ради моей тяжелой работы, пожалуйста, обратите внимание!

Третья сторона - телефонное интервью плюс удаленный машинный тест

С этой стороны вопросов не так много, я задал несколько вопросов, связанных с сетью, а также задал несколько интеллектуальных вопросов, остальное все компьютерные тесты!

Давай, давай, не говори глупостей, обсохни!

1. Что происходит с момента ввода URL до загрузки страницы?

Этот вопрос звучит знакомо? Я думаю, что многие люди сталкивались с ним в интервью. Это очень, очень классический вопрос для интервью! Интервьюеры любят спрашивать, потому что этот вопрос действительно может исследовать многие аспекты знаний.

Отвечать:

1. Введите URL-адрес в адресную строку браузера и нажмите Enter.

2. Браузер проверяет, существует ли текущий URL-адрес в кеше, и сравнивает, истек ли срок действия кеша.

3. DNS разрешает IP-адрес, соответствующий URL-адресу.

4. Установите TCP-соединение в соответствии с IP (трехстороннее рукопожатие).

5. HTTP инициирует запрос.

6. Сервер обрабатывает запрос, и браузер получает HTTP-ответ.

7. Визуализируйте страницу и постройте DOM-дерево.

8. Закройте соединение TCP (четыре раза).

В этом вопросе много деталей, которые здесь невозможно объяснить полностью, автор напишет отдельную статью, объясняющую эту классическую проблему в продолжении, читатели могут сначала обратить на нее внимание. Здесь я в основном рассказываю о том, как начальник гусиной фабрики шаг за шагом приходил ко мне спрашивать, 😝.

1.1 Вы только что говорили о кэшировании, можете ли вы рассказать нам о кэшировании?

Отвечать:

Существуют различные правила для кеша браузера и кеша HTTP, которые классифицируются в соответствии с тем, необходимо ли повторно инициировать запрос на сервер. Я разделяю его в обязательный кэш и контрастный кэш (кэш согласования).

Заставить кеш определять поля HTTP-заголовка: cache-control, Expires.

Истекает абсолютное время, время сервера. Браузер проверяет текущее время и напрямую использует кешированный файл, если срок его действия не истек. Но есть проблема с этим методом: время сервера может не совпадать с временем клиента. Поэтому это поле использовалось редко.

Максимальный возраст в управлении кешем экономит относительное время. Например, Cache-Control: max-age = 484200, что означает, что после того, как браузер получит файл, кеш действителен в течение 484200 с. Если присутствуют как cache-control, так и Expires, браузер всегда предпочитает cache-control.

О кэше сравнения судят по полям last-modified и Etag HTTP.

last-modified — это поле, возвращаемое сервером при первом запросе ресурса, указывающее время последнего обновления. Поле if-modified-since отправляется в следующий раз, когда браузер запрашивает ресурс. Сервер сравнивает локальное время Last-modified с временем if-modified-since, если оно несовместимо, то считает, что срок действия кеша истек, и возвращает браузеру новый ресурс, если время совпадает, отправляет статус 304 код, чтобы браузер продолжал использовать кеш.

Etag: идентификатор объекта (хеш-строка) ресурса. Когда содержимое ресурса обновляется, Etag изменяется. Сервер определит, изменился ли Etag, и если изменился, вернет новый ресурс, иначе вернет 304.

Если у вас все еще есть вопросы, вы также можете прочитать очень подробную статью команды Black Gold о кэшировании.Лучшие практики внешнего кэширования.

1.2 Пожалуйста, опишите конкретный процесс разрешения DNS?

Разрешение DNS — это процесс рекурсивного запроса, который невозможно объяснить в двух словах, давайте посмотрим на картинку.

1.3 Как TCP инициирует и закрывает соединения?

Отвечать:Это так просто! Три рукопожатия и четыре волны!

1.4 Какие коды состояния вы знаете?

1xx: Информация об индикации — указывает, что запрос получен и обработка продолжается.

2xx: Успех — указывает, что запрос был успешно получен, понят, принят.

3xx: перенаправление — для выполнения запроса необходимо предпринять дополнительные действия.

4xx: Ошибка клиента — запрос содержит синтаксическую ошибку или запрос не может быть выполнен.

5xx: ошибка на стороне сервера — серверу не удалось выполнить допустимый запрос. Часто встречающиеся коды состояния: 200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500 (пожалуйста, найдите их сами).

1.5 В течение всего процесса, о котором вы только что упомянули, какие методы оптимизации можно использовать для оптимизации и повышения скорости отклика веб-страниц?

поделиться оченьКомплексные оптимизированные статьи

2. 5:15, угол между часами и минутами?

67,5 градусов Ха, для этого есть формула, можете рассуждать сами, если не уверены, можете спросить у меня в комментариях.

3. Из 8 одинаковых по внешнему виду мячей 7 мячей имеют одинаковый вес и 1 мяч является [ненормальным мячом], который может быть тяжелее или легче.Сколько раз взвешивание на весах может гарантировать, что этот [ненормальный мяч] можно найти, и надо Знать, легкий он или тяжелый.

Это очень интересный вопрос с 3 ответами.

Отвечать

1. Возьмите четыре из восьми шаров, чтобы сформировать две группы A и B, по 2 в каждой группе.

2. Впервые взвесьте группы А и В. Если веса разные, проблема в одной группе.

3. Два шара будут восстановлены и взвешены во второй раз.Если вес разный, возникает проблема. Взвесьте восстановленный тяжелый шар (если выбран легкий шар, следующий вывод будет обратным) и легкий шар в третий раз. Если шар тяжелый, то тяжелый шар — ненормальный, если они одинаковые, то оставшийся — легкий ненормальный.

Собеседование окончено, 😁 приступаем к письменному тесту

1. Реализовано на нативном js, требования: нельзя искать онлайн-ресурсы, добиться компонентизации, время 100 минут.

1. Реализовать скользящую анимацию div, заканчивающуюся через 5 секунд от быстрого к медленному (CSS3 не разрешен).

2. На странице есть поле ввода для запроса слова совпадения в массиве arr и запроса эффекта автозаполнения.

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

Честно говоря, немного расстраивает авторская реализация этого вопроса, но я терпеть не могу свою милоту 😊! Итак, просмотрев код, интервьюер дал мне еще один шанс, пожалуйста, задайте еще один вопрос, меня не устраивают ответы на эти два вопроса!

2. Реализуйте функцию add(a,b) для добавления двух больших целых чисел за пределы диапазона хранения целых чисел. Обратите внимание, что a и b, а также возвращаемое значение функции являются строками.

Автор легко справился с этим вопросом и сразу перешел к коду.

function add (a, b) {
    let lenA = a.length,
        lenB = b.length,
        len = lenA > lenB ? lenA : lenB;

    // 先补齐位数一致
    if(lenA > lenB) {
        for(let i = 0; i < lenA - lenB; i++) {
            b = '0' + b;
        }
    } else {
        for(let i = 0; i < lenB - lenA; i++) {
            a = '0' + a;
        }
    }

    let arrA = a.split('').reverse(),
        arrB = b.split('').reverse(),
        arr = [],
        carryAdd = 0;

    for(let i = 0; i < len; i++) {
        let temp = Number(arrA[i]) + Number(arrB[i]) + carryAdd;
        arr[i] = temp > 9 ? temp - 10 : temp;
        carryAdd = temp >= 10 ? 1 : 0;
    }

    if(carryAdd === 1) {
        arr[len] = 1;
    }

    return arr.reverse().join('');
    
}

Эпилог

Вот так благополучно закончились три стороны, и я с удовольствием могу приготовить пельмени для своей подруги! всех с зимним солнцестоянием!

Следующий

@author: Even