Предисловие

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

О себе

Начал карьеру как web разработчик, проработал 2 года и перешел на должность flutter разработчика, после 1.5 лет достиг потолка и решил развиваться в другой компании с сильной flutter командой.

С чего я начал обучение

Поскольку в интернете на данный момент не так много информации, о том, что могут спросить во время собеседований на должность Flutter developer я начал пересматривать абсолютно всё, до чего могли дотянуться мои руки – от того, какая папка в проекте за что отвечает, до того, как работает flutter на уровне фреймворка, виды архитектур, паттерны, стейт менеджеры и т.д.

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

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

Топ вопросов

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

Отличный пример сделали ребята из surf, здесь вы можете посмотреть вопросы с собеседования в их компанию.

Общие вопросы

  • ООП

  • SOLID

  • Виды архитектур MVP, MVC, MVVM.

  • Паттерны/шаблоны проектирования

Вопросы по dart

  • В чём отличие final от const - этот вопрос я слышал чаще, чем отличие stateful от stateless виджетов, поэтому советую в первую очередь разобраться в этой теме.

  • Future - что это такое и как оно выполняется.

  • Eventloop - рассказать про очереди и как выполняется код в dart. Часто на этом вопросе могут дать задачу на понимание.

  • Isolate - как работает и какие проблемы решает.

  • Stream - что это такое и какие типы бывают, в чём особенность разных типов.

  • Null safety.

  • dynamic, object, null.

  • extention, mixin и abstract class - в чём сходства и различия между ними? После этого обычно продолжают задавать вопросы по особенностям mixin.

  • hash and equals - зачем их перезаписывать и что будет, если этого не делать?

Вопросы по flutter

  • Stateful и stateless widgets - в чём разница между ними, когда какой использовать?

  • Жизненный цикл виджетов.

  • InheritedWidget - что это за виджет и какие функции он выполняет? Как с ним взаимодействовать?

  • Widget, element, renderobject - здесь лучше всего полностью рассказать как эта вся история работает, что от чего зависит и т.д.

  • Platform channel - какие виды бывают и в чём их особенности?

  • Анимации - здесь можно пробежаться по их видам и какую когда использовать.

Вывод

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

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

Надеюсь, моя статья помогла вам уменьшить страх перед походом на собеседование. Всем мир.

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


  1. Safort
    24.07.2022 00:03
    +2

    Спасибо, но как-то слишком кратко получилось. Такой тип статей, как это часто делают, хорошо бы дополнить ответами или ссылками, где описывается данный материал по Dart/Flutter.


    1. Tosuj Автор
      24.07.2022 08:18
      +1

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

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


  1. 402d
    24.07.2022 00:22
    +2

    Я пишу на разных ЯВУ с 1989 года (БЕЙСИК, ФОРТРАН, ПАСКАЛЬ).

    И вот вчера решил ознакомиться с флутером и соответственно дартом.

    Не знаю, кто и кого списывал. Впечатление очень похоже со свифтом и js ну и тем как на джаве или в пхп сделано.

    Из особенностей синтаксического сахара самого дарта

    1) Конструкторы у класссов. Тут фантазия у авторов разгулялась.

    остальное в различном виде (или подобие видел)

    final в яве один в один. const - классика практически во всех ЯВУ есть

    2) Future - промис из javascript

    3) Eventloop - пока не дошел до них (для себя буду искать есть ли отличая от Handler & Executor из java )

    4) Isolate с первого прочтения как аналогия с асинктаск из java, которая еще наложила lock на объект.

    5) Вау эффект от Stream, млин или я не знал, что подобное можно замутить в PHP или JAVA

    6) Null safety - Swift и Dark найдите отличия

    7) dinamic - добро пожаловать в джава скрипты ( в качестве параметра может прилететь все, что угодно)

    object, null - отличий от других ЯВУ не вижу.

    8) extension - как-то повеяло разработкой под iOS

    mixin - trait из PHP

    abstract class есть в любом ЯВУ с ООП.

    9) hash & equal - имхо из разряда вопросов для собеседования. Опять же нового от других ЯВУ тут не вижу.

    -----------------

    Чтобы я спросил. Замыкания. В мобильной разработке используется постоянно.

    P.S. не сильно ругайте просто поделился впечатлением о дарте на вторые сутки изучения.

    Учебник по синтаксису прочитан. Но реальный код еще не писал.


    1. Tosuj Автор
      24.07.2022 08:24

      Что забавно, про замыкания меня спросили только один раз и это был собес в котором вместо flutter/dart гоняли по знаниям js) хотя в вакансии про это ни слова не было.

      Dart изначально создавался как УБИЙЦА JavaScript. Поэтому он так сильно похож на другие языка и поэтому, как второй язык, его достаточно просто учить.


    1. mayorovp
      24.07.2022 14:34

      Вау эффект от Stream, млин или я не знал, что подобное можно замутить в PHP или JAVA

      ЕМНИП, это есть в Kotlin под именем Flow. А также в C# под именем IAsyncEnumerable (но не так распространено)


      1. 402d
        24.07.2022 15:16

        Котлин не использовал. Со студенчества был небольшой задел на джаву. Поэтому читал месяц стартандроид (после 78 урока) начал писать приложение.

        День третий разбирания с флатером. https://github.com/flutter/samples.git - запускаю и разбираюсь в примерах. Ага зависимости тянутся с pub.dev. (Знакомо packagist,npmjs)

        Попутно по классам флатера для UI очень пригодится предварительно разобраться с самим https://material.io/

        Прикидываю как переписать свое приложение. Шаред преференсы - аналог найден. room - floor. Получение intent - облом раз (GPL лицензия). Смотрим дальше. Оп. А вот оказывается и Stream задействован ;) Разобраться еще как сбиндиться на службу и можно начинать. А там по ходу уже


    1. DVF
      24.07.2022 22:25

      Изолят скорее нужно с тредом сравнивать из паскаля. Отдельный поток от основного потока приложения да ещё с изолированной памятью.


  1. dimskiy
    24.07.2022 09:58
    +2

    В последнем абзаце я бы еще добавил "а нужен ли вам яндекс?". Денег там не так много предлагают, как может показаться :) Работа среднего инженера не будет отличаться от любой другой компании подобных размеров - все тот же говнокод и десятилетнее легаси.


    1. Tosuj Автор
      24.07.2022 10:51
      +2

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


  1. Mitai
    25.07.2022 11:46

    спасибо, а что бы из этого списка вы оставили для позиции джуна?


    1. Tosuj Автор
      25.07.2022 14:21

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

      Когда я занимался подбором, то действовал следующим образом.
      1. Давал простенькую задачу на алгоритмы (решается в 6 строк)

      2. Всегда задавал ряд типичных вопросов

      • ООП

      • Подробней расспрашивал про классы (как сделать поле приватным, как наследоваться, что такое конструктор и т.д.)

      • git


      3. Смотрел был ли опыт изучения android/ios/web. Если был, то выстраивал вопросы относительно этого опыта, спрашивал самую базу, чтобы понять насколько кандидат разобрался в том, чем уже занимался.

      Если был опыт dart/flutter то:

      4. Dart

      • сколько потоков

      • что значит "асинхронный язык"

      • какие типы данных есть в dart


      5. Flutter

      • stateful и stateless widgets

      • как переходить между экранами

      • какими виджетами пользовались (container, row и т.д.)

      • как подключить библиотеку


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