---
# System prepended metadata

title: Front-end собеседование Игоря Фролова

---

# Front-end собеседование Игоря Фролова

## Задачи

### Как боротья с сайд-эффектами?

#### Ответ

Использовать Saga
Разрулирование запросов

### Что такое чистая функция?

#### Ответ

—

### Какие значения возвращает `typeof`?

#### Ответ

```
string
number
object
boolean
undefined
```

### Какие типы есть в JS?

#### Ответ

```
все те же, что возвращает typeof + NaN
```


### Как проверить переменную `combo` на массив?

#### Ответ

```
Array.isArray(combo)
```

### Какие методы массива знаете и используете?

#### Ответ

```javascript
// map reduce foreach filter sort

var a = [1, 100, 3];

a.reduce((currentItem, accumulator) => {
    return currentItem + accumulator;
},0)

a.sort() // [1, 3, 100]
```

### Как преобразовать массив в объект?

```javascript
var list = [
  { name: 'width', value: 10 },
  { name: 'height', value: 20 },
  { name: 'x', value: 30 }
];

// TODO: { width: 10, height: 20, x: 30 }
```

#### Ответ

```javascript
const a = {};

list.forEach((item) => {
    a[item.name] = item.value;
});

return a;
```

### Что будет выведено в консоль?

```javascript
var b = {};
var c;

b.b = 1;
c = b;
c.b = 2;

console.log('1)', b.b);
console.log('2)', c.b);

var a = { counter: 1 };
function inc(obj) {
  obj.counter++;
  obj.changed = true;
}
inc(a);
console.log('3)', a);
```

#### Ответ

```
1) 1
2) 2
3) { counter: 1 }
```

### Как отрендерится код?

```htmlmixed
<div style="float: left; border: 1px solid red;">
  <span
    style="position: relative; top: -1000px; left: -1000px; border: 1px solid green;"
  >
    Inner text
  </span>
</div>
```

#### Ответ

```
div не знаю
span улетит вверх влево
```

### Как решить задачу?

```javascript
// Есть функция и объект.
// Необходимо, чтобы функция в консоли вывела значение 'wow'.
// Как добиться желаемого не изменяя тело функции?

function f() { console.log(this.x); }
var obj = { x: 'wow' };
```

#### Ответ

```javascript
f().bind(obj);
f.call(obj);
f.apply(obj);
```

### Написать счетчик используя замыкание

#### Ответ

```javascript
class Counter {
    counter = 0;
    
    up = () => {
        return ++counter; 
    }
    
    down = () => {
        return --counter;
    }
    
    getState = () => {
        return counter;
    }
}

var counter = new Counter();

console.log(counter.up()); // 1
console.log(counter.up()); // 2
console.log(counter.up()); // 3
console.log(counter.getState()) // 3
console.log(counter.up()); // 4
console.log(counter.down()); // 3
```

### Решить задачу

* Необходимо написать функцию, которая на вход принимает урл, асинхронно ходит по этому урлу GET запросом и возвращает данные (json)
* Для получении данных можно использовать fetch
* Если во время запроса произошла ошибка, то пробовать запросить ещё 5 раз
* Если в итоге информацию получить не удалось, выбросить ошибку «Заданный URL недоступен».

#### Ответ

```javascript
const requestCounter = 0;

const _request = () => {
    requestCounter++;
    
    axios.get('http://url')
        .then(onSuccess)
        .catch(onError);
    
};

const onSuccess = (payload) => {
    console.log(payload);
};

const onError = (err) => {
    if(requestCounter === 5) {
        console.error(err);
        
        return;
    }
    
    _request();
}
 
```

### Что будет выведено в консоль?

```javascript
console.log('start');

setTimeout(function() {
  console.log('setTimeout');
}, 0);

Promise.resolve()

.then(function() {
  console.log('promise1');
}).
.then(function() {
  console.log('promise2');
});

console.log('finish');
```

#### Ответ

```
start
finish
propmise1
promise2
setTimeout
```

### Написать функцию для проверки слова на палиндром

```javascript
// Написать функцию, которая на вход получает слово,
// а на выходе выдает true, если входящее слово палиндром,
// иначе false. Функция должна игнорировать регистр символов.

function checkIsPalindrome(word) {
  // …
}

console.log(1, checkIsPalindrome('Иван') === false);
console.log(2, checkIsPalindrome('доход') === true);
console.log(3, checkIsPalindrome('Доход') === true);
console.log(4, checkIsPalindrome('ЗаКаз') === true);
```

#### Ответ

```javascript
function checkIsPalindrome(word) {
  const wLength = word.length;
  const lower = word.toLowerCase();
  const neededLength = wLength > 1 ? Math.floor(wLength/2) : wLength;
  
  for (i = 0; i < neededLength; i++) {
      var firstChar = lower[i];
      var secondChar = lower[wLength - i];
      
      if(firstChar !== secondChar) {
        return false;
      }
  }
  
  return true;
  // toLowerCase
  // x = length / 2
  // floor
  // for x
  
  
}
```

### Как сверстать?

<p><img src="https://i.imgur.com/UJPisQ2.png" width="308"/></p>

#### Ответ

```jade
style |
  Объяснил на словах — всё ОК
  Использует flex

div.wrapper
  div.image-container
    div.image
  div.text(style="word-wrap")
    strong Константин
    span web-developer
  div.close(style="transform: rotate")
```
