Как стать автором
Обновить

Комментарии 35

Опять эти люки… Как и написано в заголовке, эти вопросы действительно ужасны, и совершенно не подходят для собеседования )

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

А задачки интересные, конечно )
Да, абсолютно верно, именно поэтому мы отказались от этих вопросов.

На текущий момент мы сразу применяем физическое насилие к кандидатам. Обычно используем наручники и батарею.
А если кандидат чемпион мира по рукопашному коду?
Для таких случаев у нас в офисе есть перцовый балончик.

Хотя до такого еще не доходило, обычно справляемся своими силами.
Для этого собеседующих несколько.
На текущий момент мы сразу применяем физическое насилие к кандидатам. Обычно используем наручники и батарею.

Можно подробнее? Очень интересует практика в данном вопросе.

Конечно, приходите к нам на собеседование!
Нет, уж лучше вы к нам! ©
Страшно представить, что у вас делают с бэкендерами… Недельные спринты в темных подвалах?
Трехдневные спринты с митингами два раза в день, утром и ночью.

За баги в проде лишаем еды и будим палкой по ночам.
Трехдневные спринты

Лучше сразу пристрелите.
на первой своей работе коллеги мне рассказали историю (10 лет назад), что за год до моего прихода они наняли человека для кражи кода c прошивки с микроконтроллера и переделки его из ASM в код С++ (тайваньский алгоритм распознавания отпечатков пальцев). Код был скачан, но с конвертацией были проблемы. Чел потихоньку слился. Его нашли, прицепили к батарее пока он не сделал (1 месяц это заняло). Не только вы одни такое практикуете. Сейчас эти деятели пилят оборонные заказы.
Object.freeze замораживает только свойства самого объекта. Так что, если объект содержит в себе вложенные объекты, их тоже необходимо заморозить.

Или чтобы этого не делать достать данные из замыкания. Думаю понятно что флаг dataLoaded нужен только из-за отсутствия реактивности у item.


import getItemFromApi from 'path/to/getItemFromApi';

let item;

export default {
  data() {
    return { dataLoaded: false }
  }
  async mounted() {
    item = await getItemFromApi();
    this.dataLoaded = true;
  },
  computed() {
    return this.dataLoaded && item;
  }
};

Статья крутая, спасибо!

Так у вас тогда будет 1 item на все компоненты.
Если мне не изменяет память, (сменил vue на реакт примерно 8 месяцев назад) можно просто не объявлять его в data и таким же способом вернуть через computed. (только как this.item)
Это правда. Можно в data записать, но тогда придётся жить с предупреждениями в консоли, что не очень приятно. Если компонент не один действительно проще рекурсивный фриз сделать. (компоненты с огромными списками обычно одни на всю страницу)
Этот вопрос может показаться легким, но я гарантирую, на него не ответит ни один, даже самый прошареный разработчик. Можете задать его в начале собеседования, чтобы кандидат сразу почувствовал ваше превосходство.


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

ну вредные советы же, ирония, не?
А чего стрессовать на собеседовании?
Ох, почувствовал я себя днищем. Ни на один вопрос…
Как раз недавно читал тут статью про заниженную самооценку русскоязычных IT-шников.
И где вы только умудряетесь такие вопросы находить, изверги! =)
Спасибо, интересная и полезная статья.
К слову говоря — эта песочница тоже написана на Vue.js
О, так это ваша песочница!

Спасибо большое за нее, песочница с лучшей консолью!

Благодарю!
Не могли бы вы рассказать, чем консоль столь примечательна?


Возможно у вас есть пожелания?

Консоль примечательна тем, что:
1. Она есть
2. Она удобно расположена под preview

Единственный аналог с консолью на сайте, который я нашел — это jsbin.com. Вначале я пытался использовать его, но что-то у них не завелась подсветка синтаксиса


Из пожеланий — мне показалось неудобным, что нельзя сразу увидеть html, css и js.

Проблема возникает тогда, когда ты скидываешь человеку незнакомый ему код. Чтобы понять смысл этого кода, надо прокликать по всем вкладкам и держать в голове предыдущие файлы. В статье это было было не критично, я использовал только один js файл. Но когда мне присылали чуть более сложные демки на вашем сайте, я чувствовал затруднения.

Спасибо Андрей!
Планируется вторая версия, там будет возможность открыть несколько файлов в разных «местах».

Отличное изложение, спасибо


А я то думал: «зачем это подавление справочными вопросами, которые решаются с помощью гугла и исходников того же element-ui?».


«… упадут зарплатные ожидания» — теперь понятно. Умно!

Вообще зачем задавать вопросы по фреймворку?
это уже похоже на хак, с фризом объекта вариант получше. А за статью спасибо, реально полезная статья по Vue за последний год. Пишите еще ;)
Больше повесили комментарии к посту)

В последнем примере почему вы добавили
const { item } = this;
, а не оставили
this.item
?

Внутри методов и computed-функций я использую и деструктуризацию, и обращение через this, это зависит от контекста.

Если функция маленькая и использует переменную только один раз, то я обращаюсь через this (деструктуризация выглядит слишком громоздко для метода из одной строчки):
export default {
  /* ... */

  computed: {
    formattedValue() {
      return this.value.toFixed(2);
    },

    isInCart() {
      return this.presentInCart(this.item);
    },
  },
};


Однако если метод большой и использует переменную несколько раз, то я предпочитаю деструктуризацию:
export default {
  /* ... */

  mounted() {
    const { field } = this.$refs;

    if (!field) {
      return;
    }

    this.fieldWidth = field.offsetWidth;
    this.doSomething();
  },

  computed: {
    progress() {
      const { start, end } = this;

      if (start === 0 && end === 0) {
        return '50%';
      }

      return `${(start / (start + end)) * 100}%`;
    },
  },
};


Благодаря деструктуризации

  • В длинных методах сразу понятно, какие переменные объекта используются, так как использующиеся поля объявляются вначале
  • JavaScript после минификации меньше весит


После таких махинаций код выглядит немного почище и попонятней :)
Каким образом можно научиться разбирать подобные примеры неочевидного поведение в работе фреймворка? В процессе работы над проектом или в изучении исходников?
1, 3, 4, 8 — узнал в процессе работы над проектами. Возникала проблема, я ее решал и запоминал.

2, 5, 6 — смотрел исходники Vue, element-ui и portal-vue.

7 — читал issue на гитхабе, в одной из них увидел совет Евана использовать Object.freeze(). Сейчас, правда, это уже упомянуто в документации.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий