0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Всем доброе время суток! В этой небольшой статье я хочу рассказать про первый этап собеседования из двух на позицию младшего JavaScript-разработчика, которые я прошел успешно благодаря обучению на Hexlet.</p>
1
<p>Всем доброе время суток! В этой небольшой статье я хочу рассказать про первый этап собеседования из двух на позицию младшего JavaScript-разработчика, которые я прошел успешно благодаря обучению на Hexlet.</p>
2
<p>Компанию, к сожалению, назвать не могу, но зато приведу весь код, который мы с интервьюером написали за оба этапа собеседования. Сразу скажу, что задания не были сложными, скорее даже наоборот, и статья больше подойдет начинающим программистам. После каждого задания постараюсь указать, какой курс на Hexlet можно пройти, чтобы глубже его (задание) понять.</p>
2
<p>Компанию, к сожалению, назвать не могу, но зато приведу весь код, который мы с интервьюером написали за оба этапа собеседования. Сразу скажу, что задания не были сложными, скорее даже наоборот, и статья больше подойдет начинающим программистам. После каждого задания постараюсь указать, какой курс на Hexlet можно пройти, чтобы глубже его (задание) понять.</p>
3
<p>Итак, первый этап начался с небольшого знакомства, а затем мы приступили непосредственно к первому заданию. В нем писать код было не нужно, а нужно было сказать, что делает уже написанный код и что он выводит в консоль. Интервьюер написал следующие конструкции:</p>
3
<p>Итак, первый этап начался с небольшого знакомства, а затем мы приступили непосредственно к первому заданию. В нем писать код было не нужно, а нужно было сказать, что делает уже написанный код и что он выводит в консоль. Интервьюер написал следующие конструкции:</p>
4
<p>var b = {}; var c; b.b = 1; c = b; c.b = 2; console.log('1)', b.b); // ? console.log('2)', c.b); // ?</p>
4
<p>var b = {}; var c; b.b = 1; c = b; c.b = 2; console.log('1)', b.b); // ? console.log('2)', c.b); // ?</p>
5
<p>Что появится в консоли после последних двух строк?</p>
5
<p>Что появится в консоли после последних двух строк?</p>
6
<p><strong>Тут нужно понимать, что когда выполнился код, присваивающий переменную b переменной c (c = b), на самом деле в переменной c оказалась ссылка на объект b. Другими словами: теперь и c и b ссылаются на один и тот же объект. Поэтому c.b и b.b выведут одно и то же значение, а именно 2.</strong></p>
6
<p><strong>Тут нужно понимать, что когда выполнился код, присваивающий переменную b переменной c (c = b), на самом деле в переменной c оказалась ссылка на объект b. Другими словами: теперь и c и b ссылаются на один и тот же объект. Поэтому c.b и b.b выведут одно и то же значение, а именно 2.</strong></p>
7
<p>Ответ оказался правильным и мы перешли к следующей части.</p>
7
<p>Ответ оказался правильным и мы перешли к следующей части.</p>
8
<p>var a = { counter: 1 }; function inc(obj) { obj.counter++; obj.changed = true; } inc(a); console.log('3)', a); // ?</p>
8
<p>var a = { counter: 1 }; function inc(obj) { obj.counter++; obj.changed = true; } inc(a); console.log('3)', a); // ?</p>
9
<p><strong>Здесь я пытался найти какой-то подвох, но так его и не нашел - мы просто передаем объект в функцию, увеличиваем его свойство counter и устанавливаем новое свойство changed, а после выводим этот объект в консоль. Все довольно просто. Вывод будет таким:</strong></p>
9
<p><strong>Здесь я пытался найти какой-то подвох, но так его и не нашел - мы просто передаем объект в функцию, увеличиваем его свойство counter и устанавливаем новое свойство changed, а после выводим этот объект в консоль. Все довольно просто. Вывод будет таким:</strong></p>
10
<p>3) { counter: 2, changed: true }</p>
10
<p>3) { counter: 2, changed: true }</p>
11
<p>Курс<a><strong>Основы программирования</strong></a>полностью покрывает знания, которые были здесь необходимы.</p>
11
<p>Курс<a><strong>Основы программирования</strong></a>полностью покрывает знания, которые были здесь необходимы.</p>
12
<p>В следующем задании интервьюер попросил обработать данные, пришедшие с backend, которые выглядят следующим образом:</p>
12
<p>В следующем задании интервьюер попросил обработать данные, пришедшие с backend, которые выглядят следующим образом:</p>
13
<p>var arr = [ { name: 'score', value: 10 }, { name: 'highScore', value: 20 }, // ... ];</p>
13
<p>var arr = [ { name: 'score', value: 10 }, { name: 'highScore', value: 20 }, // ... ];</p>
14
<p>После обработки этих данных мы должны получить объект следующего вида:</p>
14
<p>После обработки этих данных мы должны получить объект следующего вида:</p>
15
<p>{ score: 10, highScore: 20, ... }</p>
15
<p>{ score: 10, highScore: 20, ... }</p>
16
<p><strong>Собственно задача довольно тривиальная, создать объект, перебрать массив и установить name как свойство объекта, а value как значение.</strong></p>
16
<p><strong>Собственно задача довольно тривиальная, создать объект, перебрать массив и установить name как свойство объекта, а value как значение.</strong></p>
17
<p>function objFromArr(arr) { const obj = {} for (let val of arr) { obj[val['name']] = val['value'] } }</p>
17
<p>function objFromArr(arr) { const obj = {} for (let val of arr) { obj[val['name']] = val['value'] } }</p>
18
<p>Решение интервьюера устроило и он спросил что будет, если в массив данных с backend добавится еще одна строка highScore со значением 100.</p>
18
<p>Решение интервьюера устроило и он спросил что будет, если в массив данных с backend добавится еще одна строка highScore со значением 100.</p>
19
<p>{ score: 10, highScore: 20, highScore: 100, ... }</p>
19
<p>{ score: 10, highScore: 20, highScore: 100, ... }</p>
20
<p><strong>Конечно же, так как в нашем объекте уже есть свойство highScore оно просто обновится и значение 20 поменяется на 100.</strong></p>
20
<p><strong>Конечно же, так как в нашем объекте уже есть свойство highScore оно просто обновится и значение 20 поменяется на 100.</strong></p>
21
<p>Пройдите Hexlet курс<a><strong>JS: Объекты</strong></a>, чтобы узнать все об объектах.</p>
21
<p>Пройдите Hexlet курс<a><strong>JS: Объекты</strong></a>, чтобы узнать все об объектах.</p>
22
<p>Третьим заданием для меня стал вот такой маленький кусок кода:</p>
22
<p>Третьим заданием для меня стал вот такой маленький кусок кода:</p>
23
<p>for(var i = 0; i >= 10; i++) { setTimeout(function() { console.log(i); }, 10); }</p>
23
<p>for(var i = 0; i >= 10; i++) { setTimeout(function() { console.log(i); }, 10); }</p>
24
<p><strong>Как и в первом задании, мне необходимо было предсказать вывод в консоль. Здесь я приметил инициализацию переменной с помощью конструкции var и вспомнил её отличия от let. В случае с var переменная будет иметь область видимости функции, в которой она описана, поэтому, когда начнется вывод в консоль, i будет равно 10 и это число будет выведено все 10 раз по одному разу на каждую итерацию.</strong><strong>Интервьюер со мной согласился и попросил исправить код так, чтобы в консоли появились числа от 0 до 10 по одному разу, вместо 10 раз по 10. Я поменял var на let, объяснив это тем, что у let область видимости блочная и для каждой итерации переменная будет своей.</strong></p>
24
<p><strong>Как и в первом задании, мне необходимо было предсказать вывод в консоль. Здесь я приметил инициализацию переменной с помощью конструкции var и вспомнил её отличия от let. В случае с var переменная будет иметь область видимости функции, в которой она описана, поэтому, когда начнется вывод в консоль, i будет равно 10 и это число будет выведено все 10 раз по одному разу на каждую итерацию.</strong><strong>Интервьюер со мной согласился и попросил исправить код так, чтобы в консоли появились числа от 0 до 10 по одному разу, вместо 10 раз по 10. Я поменял var на let, объяснив это тем, что у let область видимости блочная и для каждой итерации переменная будет своей.</strong></p>
25
<p>Объяснение отличий var от let можно узнать в курсе Hexlet<a><strong>Основы программирования</strong></a>в уроке<strong>Цикл while и переменные</strong></p>
25
<p>Объяснение отличий var от let можно узнать в курсе Hexlet<a><strong>Основы программирования</strong></a>в уроке<strong>Цикл while и переменные</strong></p>
26
<p>В четвертом задании мы снова вернулись к кодингу. Необходимо было написать функцию, которая принимает на вход две строки и подсчитывает количество вхождений второй строки в первую. При этом первый аргумент может быть пустой строкой, а второй - только строкой из одного символа.</p>
26
<p>В четвертом задании мы снова вернулись к кодингу. Необходимо было написать функцию, которая принимает на вход две строки и подсчитывает количество вхождений второй строки в первую. При этом первый аргумент может быть пустой строкой, а второй - только строкой из одного символа.</p>
27
<p><strong>Так как искомая строка может быть всего одним символом - я решил разбить строку в массив и применить функцию filter, чтобы отфильтровать все подходящие символы, а затем посчитать длину получившегося массива. В итоге код выглядел так:</strong></p>
27
<p><strong>Так как искомая строка может быть всего одним символом - я решил разбить строку в массив и применить функцию filter, чтобы отфильтровать все подходящие символы, а затем посчитать длину получившегося массива. В итоге код выглядел так:</strong></p>
28
<p>function count(str, char) { return [...str].filter((c) => c == char).length; }</p>
28
<p>function count(str, char) { return [...str].filter((c) => c == char).length; }</p>
29
<p><a><strong>JS: Коллекции</strong></a>и<a><strong>JS: Функции</strong></a>расскажут все необходимое про массивы и управление ими.</p>
29
<p><a><strong>JS: Коллекции</strong></a>и<a><strong>JS: Функции</strong></a>расскажут все необходимое про массивы и управление ими.</p>
30
<p>Решение было принято без возражений, и мы перешли к следующей задаче.</p>
30
<p>Решение было принято без возражений, и мы перешли к следующей задаче.</p>
31
<p>Теперь нужно было написать функцию, которая бы удаляла из строки n одинарных кавычек.<strong>Я решил сначала пойти простым путем и n раз применить функцию replace, чтобы заменить кавычки на пустую строку. Я думал, меня попросят придумать какое-то более эффективное решение, но этого не последовало. В итоге мой код выглядел следующим образом:</strong></p>
31
<p>Теперь нужно было написать функцию, которая бы удаляла из строки n одинарных кавычек.<strong>Я решил сначала пойти простым путем и n раз применить функцию replace, чтобы заменить кавычки на пустую строку. Я думал, меня попросят придумать какое-то более эффективное решение, но этого не последовало. В итоге мой код выглядел следующим образом:</strong></p>
32
<p>function remove(str, n) { for (let i = 0; i < n; i++) { str = str.replace('?', ''); } return str; }</p>
32
<p>function remove(str, n) { for (let i = 0; i < n; i++) { str = str.replace('?', ''); } return str; }</p>
33
<p>Да, я понимаю, что решение далеко не оптимально и если, например, в строке всего одна кавычка, а в функцию передать n = 1000, то будут выполнены лишние действия, но решение было принято и я не стал настаивать на его улучшении :)</p>
33
<p>Да, я понимаю, что решение далеко не оптимально и если, например, в строке всего одна кавычка, а в функцию передать n = 1000, то будут выполнены лишние действия, но решение было принято и я не стал настаивать на его улучшении :)</p>
34
<p>Последним заданием первого этапа было задание из испытания на Hexlet<a><strong>"Сбалансированы ли скобки"</strong></a>, что было довольно приятным сюрпризом. Код данного задания приводить не буду, чтобы не спойлерить решение и не лишать вас возможности написать его самостоятельно.</p>
34
<p>Последним заданием первого этапа было задание из испытания на Hexlet<a><strong>"Сбалансированы ли скобки"</strong></a>, что было довольно приятным сюрпризом. Код данного задания приводить не буду, чтобы не спойлерить решение и не лишать вас возможности написать его самостоятельно.</p>
35
<p>На этом первый этап закончился, и мы договорились встретиться через неделю для второго этапа. Статья итак уже вышла больше чем я рассчитывал, поэтому второй этап опишу отдельно.</p>
35
<p>На этом первый этап закончился, и мы договорились встретиться через неделю для второго этапа. Статья итак уже вышла больше чем я рассчитывал, поэтому второй этап опишу отдельно.</p>
36
<p>В заключении хотелось бы пожелать всем ищущим работу удачи и целеустремленности. Решайте больше задач (благо есть<a>Codebattle</a>), проходите замечательные курсы на Hexlet и у вас обязательно все получится!</p>
36
<p>В заключении хотелось бы пожелать всем ищущим работу удачи и целеустремленности. Решайте больше задач (благо есть<a>Codebattle</a>), проходите замечательные курсы на Hexlet и у вас обязательно все получится!</p>