Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Как пройти собеседование по js? И зачем? | OdessaFrontend Meetup #4

110 views

Published on

Жизнь так устроена, что иногда нам приходится искать работу. Или сотрудника. И в такой ситуации очень сложно обойтись без собеседования. Юрий Федоренко делится собственным опытом прохождения и проведения собеседований, порефлексирует на тему того, как можно обойтись без него. Ну и позадаёт вам в меру каверзные задачки и вопросы из его коллекции.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Как пройти собеседование по js? И зачем? | OdessaFrontend Meetup #4

  1. 1. Как пройти собеседование по js? И зачем? Юра Федоренко
  2. 2. Кто здесь?
  3. 3. А какие варианты?
  4. 4. А какие варианты? ● Тестовое задание ● Рекомендация ● Собеседование
  5. 5. Кого ищем?
  6. 6. Что ищем?
  7. 7. Корпоративная культура
  8. 8. Корпоративная культура
  9. 9. Корпоративная культура
  10. 10. Никто не обязан вас учить
  11. 11. Что делать на собеседовании?
  12. 12. Что делать на собеседовании? ● Не врать
  13. 13. Что делать на собеседовании? ● Не врать ● Не воровать
  14. 14. Что делать на собеседовании? ● Не врать ● Не воровать ● Не быть мудаком
  15. 15. Что делать тем, кто собеседует?
  16. 16. Что делать тем, кто собеседует? ● Не врать ● Не воровать ● Не быть мудаком
  17. 17. Быть нормальным
  18. 18. Задачи
  19. 19. Типы данных
  20. 20. var arr = [1,2]; var brr = arr; brr = [42, 43]; arr[0]; ???
  21. 21. var arr = [1,2]; var brr = arr; brr[0] = 42; arr; ???
  22. 22. Что вернет функция? (function(){ return [2,2,2,2].map(parseInt); })()
  23. 23. Что вернет метод? [2,2,2,2].map(parseInt);
  24. 24. Конечно же... [2,2,2,2].map(parseInt);
  25. 25. Конечно же... [2,2,2,2].map(parseInt); [2,NaN,NaN,2]
  26. 26. O_o ??!!1 [2,2,2,2].map(parseInt); [2,NaN,NaN,2]
  27. 27. А почему так? [2,2,2,2].map(() => { parseInt() });
  28. 28. А почему так? [2,2,2,2].map((item, index)=> { parseInt(item, index); });
  29. 29. this
  30. 30. call, apply это понятно
  31. 31. А bind сможешь?
  32. 32. function fn(a, b) { console.log(a, b, this) } var magicFn = bind(fn, {}); magicFn(2, 3);
  33. 33. Нужно думать как bind!
  34. 34. function bind(cb, context) { }
  35. 35. function bind(cb, context) { return function() { } }
  36. 36. function bind(cb, context) { return function() { cb.apply(context) } }
  37. 37. function bind(cb, context) { return function() { cb.apply(context, arguments) } }
  38. 38. function bind(cb, context) { return function() { return cb.apply(context, arguments) } }
  39. 39. function fn(a, b) { console.log(a, b, this) } var magicFn = bind(fn, {}); magicFn(2, 3);
  40. 40. Классика for (var i = 0; i < 10; i++) { setTimeout(function(){ console.log(i); }, i*1000); }
  41. 41. Легкое решение for (let i = 0; i < 10; i++) { setTimeout(function(){ console.log(i); }, i*1000); }
  42. 42. Просто решение for (var i = 0; i < 10; i++) { setTimeout((function(i) { return function (){ console.log(i); } })(i), i*1000); }
  43. 43. Еще одно, просто решение for (var i = 0; i < 10; i++) { (function(i) { setTimeout(function (){ console.log(i); }, i*1000); })(i) }
  44. 44. Умное решение for (var i = 0; i < 10; i++) { setTimeout((function (i){ console.log(i); }).bind(null, i), i*1000); }
  45. 45. А как же new?
  46. 46. Что произойдет? function() { this.name = 'yura'; }
  47. 47. У меня для вас три истории...
  48. 48. Метод var o = { fn: function() { this.name = 'yura'; } } o.fn();
  49. 49. Просто функция function fn() { this.name = 'yura'; } fn();
  50. 50. Конструктор function fn() { this.name = 'yura'; } new fn();
  51. 51. Конструктор function fn() { this.name = 'yura'; } new fn;
  52. 52. У меня для вас три истории...
  53. 53. Что происходит когда вызываем с new ● Создается новый объект, он становится this’ом ● Неявно возвращается ● Устанавливается прототип
  54. 54. Что происходит когда вызываем с new ● Создается новый объект, он становится this’ом ● Неявно возвращается ● Устанавливается прототип O_o
  55. 55. __proto__ vs prototype
  56. 56. Не одно и тоже!
  57. 57. Прототипное наследование
  58. 58. Конструктор function fn() { this.name = 'yura'; } new fn;
  59. 59. var obj = { a: 5, b: { c: 10 } }; obj.__proto__ = { a: 10, b: { c: 20 } };
  60. 60. var obj = { a: 5, b: { c: 10 } }; obj.__proto__ = { a: 10, b: { c: 20 } }; delete obj.a; console.log(obj.a); delete obj.a; console.log(obj.a); delete obj.b; console.log(obj.b.c); delete obj.b.c; console.log(obj.b.c);
  61. 61. var obj = { a: 5, b: { c: 10 } }; obj.__proto__ = { a: 10, b: { c: 20 } }; delete obj.b; console.log(obj.b.c); var b = obj.b; delete b.c; console.log(obj.b.c);
  62. 62. t.me/callforward
  63. 63. t.me/djamah ?

×