Skip to content

Instantly share code, notes, and snippets.

@ivan-hilckov
Created January 12, 2022 12:40
Show Gist options
  • Save ivan-hilckov/b01a9610bc22cdbd0430d9d7b5e941e0 to your computer and use it in GitHub Desktop.
Save ivan-hilckov/b01a9610bc22cdbd0430d9d7b5e941e0 to your computer and use it in GitHub Desktop.
js interview question

JS

  1. Расскажи про объект Promise? [https://learn.javascript.ru/promise-basics]
//Что выведет код ниже?

let promise = new Promise(function(resolve, reject) {
  resolve(1);

  setTimeout(() => resolve(2), 1000);
});

promise.then(alert);

[https://gist.github.com/ivan-hilckov/5fa19f39fab7672f6b7e5a12fd1b180c]

//Встроенная функция setTimeout использует колбэк-функции. Создайте альтернативу, использующую промисы.
// Функция delay(ms) должна возвращать промис, который перейдёт в состояние «выполнен» через ms миллисекунд, так чтобы мы могли добавить к нему .then:

function delay(ms) {
  // ваш код
}

delay(3000).then(() => alert('выполнилось через 3 секунды'));
  1. Расскажи зачем нужен async/await. Какие проблемы он решает? Как с ним работать? [https://learn.javascript.ru/async-await]
// Перепишите один из примеров раздела Цепочка промисов, используя async/await вместо .then/catch:
function loadJson(url) {
  return fetch(url)
    .then(response => {
      if (response.status == 200) {
        return response.json();
      } else {
        throw new Error(response.status);
      }
    })
}

loadJson('no-such-user.json') // (3)
  .catch(alert); // Error: 404
  1. Расскажи что ты знаешь про Map и Set. Какие проблемы решает? Чем Map отличается от Object? Чем Set отличается от Array? Как упорядоченны элементы в Map и Set [https://learn.javascript.ru/map-set]
// Создайте функцию unique(arr), которая вернёт массив уникальных, не повторяющихся значений массива arr.

function unique(arr) {
  /* ваш код */
}

let values = ["Hare", "Krishna", "Hare", "Krishna",
  "Krishna", "Krishna", "Hare", "Hare", ":-O"
];

alert( unique(values) ); // Hare,Krishna,:-O
  1. Расскажи что ты знаешь про WeakMap и WeakSet. Какие проблемы решает? Чем отличается от Map и Set? [https://learn.javascript.ru/weakmap-weakset]

  2. Расскажи что ты знаешь про Symbol.iterator? [https://learn.javascript.ru/iterable]

  3. Расскажи что ты знаешь о генератора в js? Как работает конструкция yield? Зачем это нужно и какую боль решает? [https://learn.javascript.ru/generators]

Псевдослучайный генератор
Есть много областей, где нам нужны случайные данные.

Одной из них является тестирование. Нам могут понадобиться случайные данные: текст, числа и т.д., чтобы хорошо всё проверить.

В JavaScript мы можем использовать Math.random(). Но если что-то пойдёт не так, то нам нужно будет перезапустить тест, используя те же самые данные.

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

Пример такой формулы, которая генерирует более-менее равномерно распределённые значения:

next = previous * 16807 % 2147483647
Если мы используем 1 как зерно, то значения будут:

16807
282475249
1622650073
…и так далее…
Задачей является создать функцию-генератор pseudoRandom(seed), которая получает seed и создаёт генератор с указанной формулой.

Пример использования:

let generator = pseudoRandom(1);

alert(generator.next().value); // 16807
alert(generator.next().value); // 282475249
alert(generator.next().value); // 1622650073

REACT

  1. Расскажите о базовом принципе работы React Hooks? [https://ru.reactjs.org/docs/hooks-intro.html]

  2. Расскажите о том как оптимизировать React-приложение. Как измерить производительность? Как инструменты можно использовать для debug? [https://ru.reactjs.org/docs/optimizing-performance.html]

  3. Что ты знаешь о Error Boundary? Зачем это нужно? Какие проблемы это решает? [https://ru.reactjs.org/docs/error-boundaries.html]

  4. Что такое HOC? Зачем это нужно? Какие проблемы это решает? [https://ru.reactjs.org/docs/higher-order-components.html]

  5. Тебе нужно провязать компонент на js (например https://harvesthq.github.io/chosen/) с твоим приложением на react. В чем сложность этой задачи? [https://ru.reactjs.org/docs/integrating-with-other-libraries.html]

  6. Что на самом деле представляет из себя JSX? Как примерно бы выглядел код компонента без использования JSX? [https://ru.reactjs.org/docs/react-without-jsx.html]

// код с JSX 

class Hello extends React.Component {
  render() {
    return <div>Привет, {this.props.toWhat}</div>;
  }
}

ReactDOM.render(
  <Hello toWhat="мир" />,
  document.getElementById('root')
);
// код с без JSX 

class Hello extends React.Component {
  render() {
    return React.createElement('div', null, `Привет, ${this.props.toWhat}`);
  }
}

ReactDOM.render(
  React.createElement(Hello, {toWhat: 'мир'}, null),
  document.getElementById('root')
);
  1. Расскажи как быть в ситуации когда нужно несколько компонентов должны отражать одни и те же изменяющиеся данные. [https://reactjs.org/docs/lifting-state-up.html]

REDUX

  1. Расскажи общими словами про redux. Зачем он нужен и какую проблему решает? [https://redux.js.org/tutorials/essentials/part-1-overview-concepts]

  2. Расскажи что ты знаешь про Immutability. Как эта концепция связана с redux? [https://redux.js.org/tutorials/essentials/part-1-overview-concepts#immutability] [https://redux.js.org/usage/structuring-reducers/immutable-update-patterns]

  3. Расскажи как работать с асинхронными логикой в redux? Какие подходы можно использовать? [https://redux.js.org/tutorials/fundamentals/part-6-async-logic]

  4. Расскажи что такое селекторы в концепции redux? Зачем они нужны? Расскажи что такое memoization и как мы можем это использовать это в redux? [https://redux.js.org/tutorials/fundamentals/part-7-standard-patterns#memoized-selectors]

Паттерны

  1. Расскажи что такое паттерны программирования? Какие паттерны ты знаешь? [https://refactoring.guru/]

  2. Какой паттерн как тебе кажется базовый при работе с react? [https://refactoring.guru/design-patterns/composite]

Код

promise https://codeshare.io/6pY0QY - task https://codeshare.io/DZYOqk - solution

useEffectAfterMount https://codeshare.io/pqlvV0 - task https://codeshare.io/j0jzWR - solution

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

  1. Какие рабочие обязанности тебе нравятся больше всего? Почему?
  2. С какими людьми тебе легче всего работать? Почему?
  3. С какими сложней всего и почему?
  4. Расскажи про свой самый крупный факап. Как ты с ним справился в итоге?
  5. Какие обязанности особенно нравится выполнять? Чем? Что именно нравится в этих задачах?
  6. Какие обязанности нравится выполнять меньше всего? Почему? Что можно было бы изменить, чтобы эти задачи стали интересны?
  7. Нравится ли тебе продукт, который ты делаешь? Почему?
  8. Если бы ты мог создать продукт с нуля, чтобы это был за продукт?
  9. Какие особенности проекта, продукта нравятся больше всего? Почему?
  10. Если есть два хороших решения поставленной задачи, по какому принципу будет сделать выбор, какое решение стоит принять?
  11. Как ты считаешь, зачем люди строят карьеру? Почему для них это важно?
  12. Как ты видишь свою карьеру в рамках нашей компании и этой команды?
  13. Как ты повышаешь свою профессиональную компетенцию? Какие книги читаешь? Курсы?
  14. Из какого источника ты смог почерпнуть полезные знания последний раз? Чем они оказались полезны?
  15. Кого ты считаешь экспертом в команде? У кого интересно учиться?
  16. Считаешь ли ты себя экспертом? Почему?
  17. Как ты считаешь, что влияет на то, чтобы человек работал в компании долгое время?
  18. Что может побудить тебя перейти в другую команду или уволиться?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment