А так же о всякой фигне
Это вторая часть задач по javascript, но теперь это взгляд со стороны работодателя. Это вопросы которые задаю я при собеседовании на позицию javascript developer. Я постарался перечислить их от более простых к более сложным. Вопросов не много, не обязательно они задаются все, и не обязательно в таком же порядке.
1. Есть несколько способов декларации переменных:
test1 = 1; var test2 = 2; let test3 = 3; const test4 = 4;
Чем они отличаются?
2. Если Вы молодой и шутливый, то наверняка в 1 вопросе Вы сказали что "test1 = 1;" не работает, вернёт ошибку. Это не верно, почему?
3.
const x = 0; x = 3; // error const test = { x: 0 }; test.x = 3; // success!
Почему?
4.
x = 1; console.log(x); // 1 var x = 0;
Почему консольлог выводит 1 ?
4.1 Если ответили на прошлый, то почему:
x = 1; // ReferenceError: x is not defined console.log(x); let x = 0;
Возвращает ошибку?
5. Есть несколько консольлогов:
console.log( function() { return 1; } ); console.log( function() { return 1; }() ); console.log( new function() { return 1; } ); console.log( new function() { return 1; }() );
Собсно что они покажут?
6. Есть тестовый массив и есть классический, олдскульный способ обхода массива и вывода значений в консольлог:
let arr = [ 1, 2, 3, 4 ]; for(let i=0; i<arr.length; i++) console.log(i);
Перечислите, пожалуйста, другие способы обхода массива (желательно не меньше 4), но без извращений вроде while циклов, только специализированные методы для работы с массивами.
7. Что такое стрелочные функции и чем они отличаются от обычных?
8. Почему следующий пример:
const arr = [ 1, 2, 3 ]; const result = arr.map( n => { value: n } ); console.log( result );
Возвращает [ undefined, undefined, undefined ] а не [ { value: n }, { value: n }, { value: n } ] ? И как это пофиксить?
9.
const adder = { sum: 0, add(num) { num.forEach( function(el) { this.sum += el; }); } } adder.add([ 1, 2, 3 ]); console.log( adder.sum );
Почему консольлог возвращает 0 и как это исправить? Для чистоты эксперимента не смотрите на следующий пример.
9.1
const adder = { sum: 0, add: num => { num.forEach( el => { this.sum += el; console.log( this ); }); } } adder.add([ 1, 2, 3 ]); console.log( adder.sum );
А почему в этом примере опять получаем 0 в консольлоге?
10. Есть код:
const Test = function() { this.val = 0; } let test1 = new Test(); console.log( Test ); console.log( test1 );
Почему в первом случае выводится: [Function: Test]
А во втором: Test { val: 0 }
11. Есть объект: { x: 1, y: 2, i: 3 } как получить все ключи объекта?
12. Есть некая апи, которая возвращает данные по статистике в виде следующего объекта:
{ result: 'success', items: [ { total: 10, blocked: 5, whiteListed: 3 }, { total: 15, blocked: 2, whiteListed: 6 }, ... ] }
Для построения графиков нужно сделать отдельные массивы данных по каждому свойству, например:
let total = [ 10, 15, ... ]; let blocked = [ 5, 3, ... ]; let whiteListed = [ 3, 6, ... ];
13. Почему следующий код
for(var i=0; i<3; i++) setTimeout( function() { console.log(i); }, 0 );
Выводит:
3 3 3
а не
0 1 2
И как это исправить?
14.
let x = 1; let test1 = { x: 1 }; let y = x; let test2 = test1; test2.x = 2; y = 2; console.log( x ); console.log( test1.x );
Что будет в логе и почему?
Первую часть можно найти тут. Так же можно посмотреть Задачи по nodejs для начинающих.
Focusrite scarlett works well on linux (2nd gen)
Если вы живёте на линуксах и думаете брать или не брать focusrite scarlett - берите, определяется как universal usb audio, работает без глюков, звук выдаёт отличный.
Типичные задачи backend разработчика
Тут я расскажу о типичных задачах, которые приходится решать бэкэнд разработчику. Всё это примеры из личного опыта. Примеры справедливы для любых языков программирования.