О чем говорить на фронтенд-интервью в 2019 году? Посмотри

внешний интерфейс JavaScript CSS опрос
Оригинальный автор: Harshal PatilFollow
Переводчик: Джоти, UC International R&D

Спереди написано: Добро пожаловать в официальный аккаунт «UC International Technology», мы предоставим вам качественные технические статьи, связанные с клиентом, сервером, алгоритмом, тестированием, данными, интерфейсом и т. д., не ограничиваясь оригинальностью и перевод.

С появлением спецификации JavaScript ES2015 все изменилось. Спецификация огромна — благодаря встроенной поддержке модулей и развитию функционального программирования новый язык JavaScript возрождается. И продолжайте запускать ES2016, ES2017 каждый год...
Тем не менее, когда дело доходит до собеседования или найма разработчиков интерфейса, существует огромный разрыв между ожиданиями, реальностью и потребностями. Как сказала Лори Восс в видео NPM:
97% кода современных веб-приложений исходит от NPM.
Адрес видео: https://www.youtube.com/watch?time_continue=238&v=Qa4dxW-Qi2s
Пишем ли мы на самом деле код или просто складываем код, как блоки Lego?

В конце 2018 года большинство опрошенных все еще использовали jQuery, когда их спрашивали об AJAX. Вот несколько типичных примеров, иллюстрирующих этот разрыв:

CSS Grid и Flexbox уже широко поддерживаются. Однако во время интервью еще велась дискуссия о том, как сделать плавающие элементы в CSS для достижения многоколоночной компоновки и центрирования встроенных блочных элементов.

Сборщик модулей — это спецификация, разработанная для крупномасштабных приложений. Однако когда дело доходит до архитектуры, мы снова говорим о минификации и конкатенации. Сколько раз в интервью мы обсуждали Webpack?

Если 97% кода исходит из NPM, но интервью сосредоточено на сортировке массивов или переборе объектов. Более того, все еще интересно узнать значение typeof null . Почему бы не подойти рационально к выбору подходящей библиотеки, фреймворка или инструмента?

Мы по-прежнему будем просить интервьюируемого делать классическое наследование поверх прототипа, но не для подтверждения необходимости этих ложных идей. У нас больше шаблонов методов. Конечно, классы JavaScript, недавно введенные частные и статические свойства также заслуживают обсуждения. Это помогает нам лучше понять, что думает интервьюер, думает о ключевых решениях и т. д.

Обсуждение кэширования по-прежнему ограничивается заголовками управления кэшированием и CDN. Такие технологии, как IndexDB, HTTP/2 или Service Workers, просто прохожие.

Количество интервьюируемых бесконечно, но разрыв между оценкой на собеседовании и фактическими потребностями работы далек. С одной стороны, наши передовые технологии сделали огромный скачок вперед, а с другой стороны, наше большое сообщество еще не приняло эти новые технологии. Разрушенные районы никогда не бывают хорошим знаком. Это путь катастрофы. Разрыв всегда порождает что-то новое, достаточно мощное, чтобы разрушить все, что мы создали до сих пор. Я не могу представить, чтобы разработчик Java написал еще один Facebook с использованием GWT.

Интервью — отличный способ внести изменения и объединить таланты. Как интервьюер, если вы относитесь к интервью просто как к «интервью», то можете только раздуть себя и ничего не получить в итоге.

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

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

Слишком долго читать версию: сначала мы должны думать о себе как о интервьюере.


Основные вопросы по JavaScript

1. Заставьте следующий код работать правильно:

2. Следующий код возвращает false в JavaScript. Пожалуйста, объясните, почему:


3. Какие существуют типы данных в JavaScript?
Подсказка: существует только два типа — первичные типы данных и ссылочные типы (объекты). Существует шесть основных типов.

4. Решите следующие проблемы с асинхронным кодом.
Извлекает и вычисляет средний балл для каждого учащегося, принадлежащего к одному и тому же классу, в данном случае с идентификатором класса 75. Каждый студент может пройти один или несколько курсов в год. Для получения необходимых данных можно использовать следующие API.


Напишите функцию, которая принимает идентификатор класса и вычисляет среднее значение для каждого ученика в этом классе на основе этой функции. Конечным результатом этой функции должен быть список студентов со средними баллами:
[
  { "id": 1, "name": "John", "average": 70.5 },
  { "id": 3, "name": "Lois", "average": 67 },
}
Напишите необходимые функции, используя обычные обратные вызовы, промисы, наблюдаемые, генераторы или асинхронное ожидание. Попробуйте решить эту проблему, используя как минимум 3 разных метода.

5. Используйте JavaScript Proxy для реализации простой привязки данных
Совет: ES Proxy позволяет перехватывать вызовы любого свойства или метода объекта. Во-первых, DOM следует обновлять всякий раз, когда изменяется базовый объект привязки.

6. Объясните модель параллелизма JavaScript Знакомы ли вы с какими-либо другими моделями параллелизма, используемыми в других языках программирования, таких как Elixir, Clojure, Java и т. д.?
Подсказка: цикл событий, очередь задач, стек вызовов, куча и т. д.

7. Что делает ключевое слово «новое» в JavaScript?
Совет: В JavaScript new — это оператор, используемый для создания экземпляров объектов. Цель здесь состоит в том, чтобы понять широту знаний и памяти.
Также обратите внимание на [[Construct]] и [[Call]].

8. Какие существуют шаблоны вызова функций в JavaScript? объясни подробно. Подсказка: есть четыре режима: вызов функции, вызов метода, .call() и .apply().

9. Объясните любые новые предложения ECMAScript, которые будут выпущены в ближайшее время.
Совет: например, BigInt, частичная функция, оператор конвейера и т. д. в 2018 году.

10. Что такое итераторы и итераторы в JavaScript? Вы знаете, что такое встроенный итератор?

11. Как сериализовать следующие объекты в JSON?
Что произойдет, если мы преобразуем следующий объект в строку JSON?



12. Знакомы ли вы с типизированными массивами? Если вы знакомы, объясните, как они соотносятся с традиционными массивами в JavaScript?

13. Как работают параметры по умолчанию?
Если нам нужно использовать значение тайм-аута по умолчанию при вызове функции makeAPIRequest, каков правильный синтаксис?


14. Объясните TCO — оптимизация обратных вызовов. Существуют ли какие-либо механизмы JavaScript, поддерживающие оптимизацию хвостовых вызовов?
Совет: по состоянию на 2018 год нет.


Проблемы с дизайном интерфейсных приложений JavaScript


1. Объясните односторонний поток данных и двустороннюю привязку данных.
Angular 1.x основан на двусторонней привязке данных, тогда как React, Vue, Elm и т. д. основаны на архитектуре одностороннего потока данных.

2. Какие аспекты архитектуры однонаправленного потока данных подходят для MVC?
MVC имеет долгую историю, насчитывающую около 50 лет, и превратилась в MVP, MVVM и MV*. Каковы отношения между ними? Если MVC — это архитектурный шаблон, что такое однонаправленный поток данных? Решают ли эти конкурирующие модели одну и ту же проблему?

3. Чем клиентский MVC отличается от серверного или классического MVC?
Совет: Классический MVC — это Smalltalk MVC для настольных приложений. В веб-приложении есть как минимум два разных цикла данных MVC.

4. Каковы ключевые факторы, отличающие функциональное программирование от объектно-ориентированного или императивного программирования?
Подсказки: каррирование, бесточечные функции, частичное применение функций, функции высшего порядка, чистые функции, независимые побочные эффекты, типы записей (объединения, алгебраические типы данных) и т. д.

5. Как функциональное программирование связано с реактивным программированием в контексте JavaScript и внешнего интерфейса?
Подсказка: правильного ответа нет. Но грубо говоря, функциональное программирование — это небольшой код, написание чистых функций, а реактивное программирование — это большой код, то есть поток данных между модулями, соединяющий компоненты, написанные в стиле FP. FRP — функциональное реактивное программирование ( Функциональное реактивное программирование) — еще одна другая, но родственная концепция.

6. Какие проблемы решают неизменяемые структуры данных?
Есть ли какие-либо последствия для производительности неизменяемых структур? Какие библиотеки в экосистеме JS предоставляют неизменяемые структуры данных? Каковы преимущества и недостатки этих библиотек?

Подсказки: безопасность потоков (нам действительно нужно беспокоиться об этом в браузерном JavaScript?), функции без побочных эффектов, лучшее управление состоянием и т. д.

7. Должны ли большие приложения использовать статическую типизацию?
Как вы сравниваете TypeScript/Flow с языками преобразования JS, такими как Elm/ReasonML/PureScript? Каковы преимущества и недостатки этих методов?

Какими должны быть основные критерии выбора того или иного типа системы?

Что такое вывод типа?

В чем разница между статически типизированным языком и строго типизированным языком? В чем суть JavaScript в этом отношении?

Известны ли вам слабо типизированные, но статически типизированные языки? Знаете ли вы динамически типизированный, но строго типизированный язык? Пример один или два.

Подсказка: структурные и номинальные системы типов, надежность типов, поддержка инструментов/экосистемы, правильность важнее удобства.

8. Каковы известные модульные системы в JavaScript? Оцените модульную систему ES.
Перечислите некоторые сложности, связанные с реализацией взаимодействия между различными модульными системами (в основном заинтересованы в модулях ES и взаимодействии с CommonJS).

9. Как HTTP/2 повлияет на упаковку приложений JavaScript?
Перечислите основные различия между HTTP/2 и его предшественником.

10. Какие улучшения есть у Fetch API по сравнению с традиционным Ajax?
Есть ли недостатки/трудности в использовании Fetch API?
Что может Ajax такого, чего не может получить?

11. Обсудите вопросы, связанные с обещаниями.
Подсказки: ранняя оценка, неудобные механизмы отмены, маскировка map() и flatMap() методами then() и т. д.


Основы интерфейса и теоретические вопросы


1. Какова цель Doctype в HTML?
В частности, что происходит в каждой из следующих ситуаций:

  • Тип документа не существует.
  • Используется тип документа HTML4, но HTML-страница использует теги HTML5, такие как
  • Используется недопустимый тип документа.

2. В чем разница между DOM и BOM?
Подсказка: BOM, DOM, ECMAScript и JavaScript — разные вещи.

3. Как работает обработка событий в JavaScript?
Как показано на изображении ниже, у нас есть три элемента div. Каждый div имеет связанный с ним обработчик кликов. Обработчик выполняет следующие задачи:

  • Обработчик кликов Outer div выводит приветствие на консоль.
  • Обработчик Inner div выводит приветствие на консоль.
  • Самый внутренний обработчик щелчка div выводит на консоль приветствие.

Напишите фрагмент кода для назначения этих задач, чтобы вы всегда печатали следующую последовательность при нажатии InnerMost Div?

привет внутренний → привет внутренний → привет внешний


Всплывание и захват событий
Совет: захват событий и пузырьковое распространение событий

4. Какие есть способы загрузки файлов на сервер с помощью одностраничного приложения?
Подсказки: XMLHttpRequest2 (потоковая передача), выборка (не потоковая передача), File API

5. В чем разница между CSS reflow и repaint?
Какие свойства CSS вызывают перекомпоновку и перерисовку?

6. Что такое вес селектора CSS и как он работает?

7. Чем пиксель в CSS отличается от пикселя в оборудовании/физике?
Подсказка: пиксели не пиксели не пиксели — ppk.

8. Каков алгоритм секционирования?
Подсказка: он также известен как алгоритм структуры HTML5. Особенно важно при построении сайта со смысловой структурой.

9. Если вы использовали макет CSS Flex / CSS Grid (сетку), объясните, почему вы его используете? Какую проблему он решает для вас?

Используя CSS Grid, в чем разница между процентами и единицами fr?
С CSS flexbox иногда flex-элементы/дети не учитывают ширину/высоту, установленную flex-контейнером? Почему это происходит?
Можно ли создать макет Masonry с помощью CSS Grid? Если да, то как?
Объясните термины CSS Grid и CSS flexbox?
Как плавающие элементы (float: left | right;) отображаются в CSS Grid и flexbox?

Советы: столбцы одинаковой высоты, центрирование по вертикали, сложные сетки и т. д.

10. Когда я должен использовать анимацию CSS вместо CSS-переходов? Каковы ваши критерии для принятия этого решения?

11. Если вы просматриваете код CSS, с какими проблемами вы часто сталкиваетесь в своем коде?
Примеры: используйте магические числа, такие как width: 67px, или используйте em вместо единиц rem, пишите медиа-запросы перед общим кодом, злоупотребляйте идентификаторами и классами и т. д.

12. Как обнаружить сенсорные события в JavaScript?
Вы не оптимистичны в отношении обнаружения поддержки устройств сенсорными событиями? Если да, то почему? Сравните события касания и события щелчка.
Когда устройство поддерживает как события касания, так и события мыши, как вы думаете, каким должен быть правильный порядок событий для этих событий?

13. Для чего используются атрибуты `async` и `defer`, определенные для тегов скрипта?
Теперь у нас есть модули HTTP / 2 и ES, которые действительно полезны?

Составленный список — это всего лишь беглый взгляд на бесконечное количество вопросов, которые мы могли бы обсудить в интервью. Есть много вещей, таких как веб-компоненты, CORS, безопасность, файлы cookie, преобразования CSS, веб-сборка, сервис-воркеры, PWA, архитектура CSS и т. д., которые мы не рассмотрели. Мы также не рассматриваем конкретные проблемы с фреймворками или библиотеками.

Я надеюсь, что это руководство поможет сообществу найти свой путь в интервью.

Английский оригинал:
https://blog.webf.zone/front-end-javascript-interviews-in-2018-19-e17b0b10514

«UC International Technology» стремится делиться с вами высококачественными техническими статьями.
Добро пожаловать, чтобы подписаться на наш официальный аккаунт и поделиться статьей с друзьями