HTML Diff
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 &gt;= 10; i++) { setTimeout(function() { console.log(i); }, 10); }</p>
23 <p>for(var i = 0; i &gt;= 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) =&gt; c == char).length; }</p>
28 <p>function count(str, char) { return [...str].filter((c) =&gt; 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 &lt; n; i++) { str = str.replace('?', ''); } return str; }</p>
32 <p>function remove(str, n) { for (let i = 0; i &lt; 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>