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

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

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

Я разбил на 4 основных топика: HTML, CSS, JS, общие вопросы по Frontend/Программированию.

Ну что, поехали!

Поехали
Поехали

База, HTML

По HTML обычно немного спрашивают, потому что подразумевается, что если ты уже на собесе, то формочку сверстать сможешь. Однако есть пару тем, которые иногда могут поставить в тупик:

  • Доступность: важность семантических элементов, различных атрибутов у элементов, может ли div быть семантичным, какие css свойства могут влиять на скринридеры.
    Советую отдельно почитать про атрибуты role, aria, зачем и где они применяются, а остальное хорошо расписано вот тут - тык.
    Также советую почитать статьи и исследования на эту тему(в т.ч. на хабре), очень интересно, как некоторые маленькие штуки, делают жизнь людей с ограниченными возможностями лучше.

  • SEO: спрашивают редко, но полезно про это знать, по этой теме можно почитать про то, зачем нужен robots.txt, noindex, nofollow и sitemap.xml (как закрыть ту или иную страницу от индексации, как добавить страницы в индекс), и про микроразметку (breadcrumbs, article, faq и тд).

  • Не уверен, что это именно можно отнести к HTML, но оставлю это здесь, этапы построения страницы(Render Tree, Layout, Paint, Reflow/Repaint), довольно популярный вопрос про который редко что-то помнят.

  • Семантика и какие семантические теги, когда применять - тык.

  • Web Components, Shadow DOM, как они работают, что с помощью них можно делать.

CSS

Тут тоже довольно редко бывают сложные вопросы, но я нашел парочку:

  • Контекст наложения, вроде бы простая тема, но есть вещи, которые забываешь(например, когда формируется новый контекст наложения) - тык

  • Что такое вендорные префиксы и зачем их использовать - тык

  • CSS animation, какие есть свойства, как с помощью keyframes создать свою анимацию - тык

Javascript

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

  • Сборщик мусора и работа с памятью - тык

  • Когда разговор заходит о толстом клиенте, часто вспоминают Web Workers, зачем используются, как поднять производительность, чем могут быть полезны, какие есть ограничения - тык, тык1.

  • В последнее время, в связи с хайпом PWA, часто начал слышать про Service Workers, зачем используются, чем могут быть полезны, какие есть ограничения - тык, тык1.

  • Часто когда говорят о фреймворках и о концепции реактивности, всплывает Proxy про него тоже стоит вспомнить, про то, какие хендлеры есть, что с помощью него можно делать - тык

  • Структуры данных Set и Map и когда их можно использовать.

  • WeakMap и WeakSet в чем отличие от Set и Map и как с ними работает сборщик мусора.

  • Генераторы - как работают, где используются.

  • Не совсем полностью про JS, но Websocket, SSE - что это и зачем нужно

Typescript

Тут не сильно много советов, так как довольно редко спрашивают что-то сложное и необычное про typescript(история меня и моих друзей, может у кого-то иначе).

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

  • Пробежаться по handbook и посмотреть темы, которые уже подзабыл.

Общие темы

Тут все подряд, что-то на программирование, не обязательно про Frontend, но довольно часто мелькающее на собеседованиях, что-то про Frontend, но относящаяся сразу к нескольким категориям.

  • Разница между CSR, SSR, SSG, ISR, что лучше использовать для SEO, какие ресурсы нужны для каждого из подходов.

  • Пару раз спрашивали, про то, какие паттерны проектирования знаю, и какие из них применяются во Frontend(например observer - event listener, intersection observer; singleton - vuex store), советую почитать тут довольно просто с картинками и примерами кода, объясняются почти все популярные паттерны - тык(ссылка работает только с VPN).

  • Web Perfomance, какие есть метрики(LCP, FID, CLS, FCP, INP, TTFB), которые влияют на производительность, как с ними работать, какие есть best practices - тык

  • Что такое TDD/BDD, какие плюсы/минусы есть у подходов.

  • Инструменты для тестирование во Frontend, какие виды тестирования можно реализовывать(unit, e2e, integration) - тык.

  • Webpack, разбиение на чанки, tree shaking, plugins - тык.
    В чем отличие Webpack vs Vite.

  • Вопросы про ci/cd уже база - что это такое, зачем нужно, как написать базовый скрипт для деплоя.

  • Однажды был интересный кейс: меня попросили составить свою книгу по изучению Frontend, попросили начать с базы и до фреймворков и других инструментов, нужно было рассказать про темы, которые я туда включил бы. Всем советую попробовать и посмотреть, что у вас получится - довольно интересный экспириенс.

Итого

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


Если статья показалась вам интересной, то у меня есть Телеграм Канал, где я пишу про новые технологии во фронте, делюсь хорошими книжками и интересными статьями других авторов.

Комментарии (18)


  1. zodchiy
    05.11.2023 15:24
    +2

    У меня есть вопрос, на который я не смог найти однозначно ответа. Как js хранит массив в памяти? Есть зависимость от типа хранимых данных в массиве?


    1. Dragonek Автор
      05.11.2023 15:24
      +2

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


      1. Alexandroppolus
        05.11.2023 15:24
        +1

        Если все элементы одного типа, а в массиве нет "дырок", то оптимизирующий компилятор таки сведет это дело к обычному (в С++ ном понимании) массиву. По крайней мере, в v8


    1. gev
      05.11.2023 15:24
      +1

      сам JS никак ничего не хранит


      1. Dragonek Автор
        05.11.2023 15:24

        Да, вы правы, за это отвечает движок


      1. zodchiy
        05.11.2023 15:24
        +1

        боже, как я без этого комментария жил. Открою форточку.


  1. kirillbelash93
    05.11.2023 15:24
    +1

    Вот вам туповатый вопрос с собеса на фронта - когда typeof от строки вернет object?

    p. s я на него не ответил т.к не представляю, кто так делает в реальности да и не видел никогда.


    1. Dragonek Автор
      05.11.2023 15:24
      +5

      Если создать строку через конструктор, new String(''), то она явно будет обьектом, кринжовый вопрос.
      А вообще в JS есть такая история как boxing/unboxing и все примитивы оборачиваются в объекты, для того чтобы мы могли использовать у них методы, например такие как toLowerCase() и тд. Так что вопрос может быть в каком-то смысле был на знание этого, просто странно сформулирован. Вот тут можно почитать - тык.


      1. kirillbelash93
        05.11.2023 15:24
        +2

        Да вы правильно ответили, а я вот не ответил, да и когда спросил своего друга сеньора он тоже не смог сказать.


      1. Dragonek Автор
        05.11.2023 15:24
        +3

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


        1. Fell-x27
          05.11.2023 15:24
          +2

          Разумеется, ведь две одинаковые строки, созданные через new не будут равны при сравнении в таком случае.


    1. IvanTheCrazy
      05.11.2023 15:24
      -1

      Обоссать того, кто такие вопросы задаёт. Вот в чем смысл? Дать человеку почувствовать себя униженным или что? Практической пользы ноль


      1. kirillbelash93
        05.11.2023 15:24

        К слову данный сеньор сидел и на расслабоне задавая такие вопросы курил еще электронку типо вообще даже дверь открыта.


      1. Dragonek Автор
        05.11.2023 15:24

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


        1. IvanTheCrazy
          05.11.2023 15:24
          +1

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


        1. Vlad_IT
          05.11.2023 15:24
          +1

          Мне кажется, IvanTheCrazy писал не про вопросы из вашего поста, а про пример от пользователя kirillbelash93 про typeof на строку. Это действительно ужасный вопрос для собеседований.

          Вопросы же из вашего поста часто встречаются в практике, лично меня ничего не смутило в них, на все можно +- ответить хоть как-то.


  1. kriThree
    05.11.2023 15:24

    Извиняюсь, но ссылочка на паттернах проектирования не работает????


    1. Dragonek Автор
      05.11.2023 15:24

      Там ссылка на refactoring.guru, он почему-то не работает без впнки, попробуй с впн зайти