1 added
1 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Тест от Google № 1</a></li>
1
<ul><li><a>Тест от Google № 1</a></li>
2
<li><a>Тест от Google № 2: каррирование</a><ul><li><a>Как же реализовать такую задачу?</a></li>
2
<li><a>Тест от Google № 2: каррирование</a><ul><li><a>Как же реализовать такую задачу?</a></li>
3
</ul></li>
3
</ul></li>
4
<li><a>Какие навыки еще ценятся?</a></li>
4
<li><a>Какие навыки еще ценятся?</a></li>
5
</ul><p>Очень многие программисты мечтают работать в таких крупных компаниях, как<strong>Google</strong>,<strong>Facebook</strong>или<strong>Amazon</strong>. В этой статье мы подобрали парочку каверзных тестов, которые задавали начинающим при поступлении на работу в корпорацию Google. Посмотрим, справитесь ли вы с ними. Также скажем несколько слов о том, что еще должен уметь современный JS-разработчик.</p>
5
</ul><p>Очень многие программисты мечтают работать в таких крупных компаниях, как<strong>Google</strong>,<strong>Facebook</strong>или<strong>Amazon</strong>. В этой статье мы подобрали парочку каверзных тестов, которые задавали начинающим при поступлении на работу в корпорацию Google. Посмотрим, справитесь ли вы с ними. Также скажем несколько слов о том, что еще должен уметь современный JS-разработчик.</p>
6
<a></a><p>В первом тестовом задании от Google необходимо написать<strong>функцию</strong>, которая станет проходить через массив, состоящий из целых чисел, выводя индекс каждого элемента, причем делая это с 3-секундной задержкой.</p>
6
<a></a><p>В первом тестовом задании от Google необходимо написать<strong>функцию</strong>, которая станет проходить через массив, состоящий из целых чисел, выводя индекс каждого элемента, причем делая это с 3-секундной задержкой.</p>
7
<p>По статистике<strong>Google</strong>чаще всего соискатели предлагали следующее решение этого теста на javascript:</p>
7
<p>По статистике<strong>Google</strong>чаще всего соискатели предлагали следующее решение этого теста на javascript:</p>
8
<p>Все бы ничего, но проблема в том, что такое решение теста, несмотря на свою популярность, является неправильным, ведь по итогу код повторится четыре раза и станет выводить “<em>Index: 4, element: undefined</em>”. А все потому, что функция <em>setTimeout </em>- внутренняя (вложенная), то есть имеющая доступ к переменным внешней функции. А у нас во внешней function существует цикл <em>for,</em> где происходит инициализация переменной <em>i</em> - индекса для прохода по нашему массиву. Дальше проходит 3 секунды, в результате чего выполняется код функции с выводом значения i, которое на момент окончания цикла равняется четырем, т. к. оно проходит через значения 0, 1, 2, 3, 4, останавливаясь на цифре 4.</p>
8
<p>Все бы ничего, но проблема в том, что такое решение теста, несмотря на свою популярность, является неправильным, ведь по итогу код повторится четыре раза и станет выводить “<em>Index: 4, element: undefined</em>”. А все потому, что функция <em>setTimeout </em>- внутренняя (вложенная), то есть имеющая доступ к переменным внешней функции. А у нас во внешней function существует цикл <em>for,</em> где происходит инициализация переменной <em>i</em> - индекса для прохода по нашему массиву. Дальше проходит 3 секунды, в результате чего выполняется код функции с выводом значения i, которое на момент окончания цикла равняется четырем, т. к. оно проходит через значения 0, 1, 2, 3, 4, останавливаясь на цифре 4.</p>
9
<p>Чтобы успешно справиться с этим тестом от Google,<strong>надо знать</strong>:</p>
9
<p>Чтобы успешно справиться с этим тестом от Google,<strong>надо знать</strong>:</p>
10
<p>- замыкание функций;</p>
10
<p>- замыкание функций;</p>
11
<p>- область видимости;</p>
11
<p>- область видимости;</p>
12
<p>- внутренний таймер.</p>
12
<p>- внутренний таймер.</p>
13
<p>Вот как будет выглядеть верная реализация в JavaScript:</p>
13
<p>Вот как будет выглядеть верная реализация в JavaScript:</p>
14
<p>Также является приемлемым и создание следующего кода:</p>
14
<p>Также является приемлемым и создание следующего кода:</p>
15
<h2>Тест от Google № 2: каррирование</h2>
15
<h2>Тест от Google № 2: каррирование</h2>
16
<p><strong>Каррирование</strong>в JS представляет собой специальный прием функционального программирования, при котором происходит преобразование функции с заменой нескольких ее первых аргументов константными значениями, то есть происходит создание новой<em>function</em>на основе старой, причем в новой будет меньшее число аргументов. На практике эта техника позволит создать более элегантный и чистый программный код.</p>
16
<p><strong>Каррирование</strong>в JS представляет собой специальный прием функционального программирования, при котором происходит преобразование функции с заменой нескольких ее первых аргументов константными значениями, то есть происходит создание новой<em>function</em>на основе старой, причем в новой будет меньшее число аргументов. На практике эта техника позволит создать более элегантный и чистый программный код.</p>
17
<p>В примере ниже мы применяем каррирование, прибавляя новое число к уже заданному значению:</p>
17
<p>В примере ниже мы применяем каррирование, прибавляя новое число к уже заданному значению:</p>
18
<h3><strong>Как же реализовать такую задачу?</strong></h3>
18
<h3><strong>Как же реализовать такую задачу?</strong></h3>
19
<p>Мы можем применить<em>currying</em>к прототипу функции. Когда нет аргументов для каррирования, просто возвратим текущую функцию. Когда аргументы есть, действуем следующим образом:</p>
19
<p>Мы можем применить<em>currying</em>к прототипу функции. Когда нет аргументов для каррирования, просто возвратим текущую функцию. Когда аргументы есть, действуем следующим образом:</p>
20
<ul><li>объединяем старые аргументы с новыми, применяя для этого <em>args.concat(toArray(arguments))</em>;</li>
20
<ul><li>объединяем старые аргументы с новыми, применяя для этого <em>args.concat(toArray(arguments))</em>;</li>
21
<li>передаем все аргументы в функцию посредством <em>apply</em>.</li>
21
<li>передаем все аргументы в функцию посредством <em>apply</em>.</li>
22
</ul><p>Ниже мы передаем аргументы в метод<em>function.curry</em>, в результате чего вернется функция. Как раз ее мы и сможем задействовать для последующего каррирования.</p>
22
</ul><p>Ниже мы передаем аргументы в метод<em>function.curry</em>, в результате чего вернется функция. Как раз ее мы и сможем задействовать для последующего каррирования.</p>
23
<h2>Какие навыки еще ценятся?</h2>
23
<h2>Какие навыки еще ценятся?</h2>
24
<p>Если вы только начали свой путь программиста, настроены серьезно и действительно хотите дорасти до компании уровня Google, вы должны понимать, что в вашей жизни будет много тестов и тестовых заданий, а требуемые знания не ограничиваются одним языком программирования и умением создавать простой код. Учиться придется всегда.</p>
24
<p>Если вы только начали свой путь программиста, настроены серьезно и действительно хотите дорасти до компании уровня Google, вы должны понимать, что в вашей жизни будет много тестов и тестовых заданий, а требуемые знания не ограничиваются одним языком программирования и умением создавать простой код. Учиться придется всегда.</p>
25
<p>Что желательно знать, если вы хотите освоить карьеру фронтенд-разработчика:</p>
25
<p>Что желательно знать, если вы хотите освоить карьеру фронтенд-разработчика:</p>
26
<p>- HTML ("хтмл");</p>
26
<p>- HTML ("хтмл");</p>
27
<p>- CSS;</p>
27
<p>- CSS;</p>
28
<p>- кроссбраузерную верстку;</p>
28
<p>- кроссбраузерную верстку;</p>
29
<p>- основы веб-разработки;</p>
29
<p>- основы веб-разработки;</p>
30
<p>- основы взаимодействия "сервер-клиент";</p>
30
<p>- основы взаимодействия "сервер-клиент";</p>
31
<p>- уверенно работать с Git;</p>
31
<p>- уверенно работать с Git;</p>
32
<p>- TypeScript (желательно);</p>
32
<p>- TypeScript (желательно);</p>
33
<p>- React/Flux/Angular/Webpack (хотя бы что-то из перечисленного);</p>
33
<p>- React/Flux/Angular/Webpack (хотя бы что-то из перечисленного);</p>
34
<p>- Node.js;</p>
34
<p>- Node.js;</p>
35
<p>- понимание, как писать автотесты и юнит-тесты, умение автоматизировать тестирование веб-интерфейсов.</p>
35
<p>- понимание, как писать автотесты и юнит-тесты, умение автоматизировать тестирование веб-интерфейсов.</p>
36
<p>Да, не все является обязательным, но классическую связку фронтендера никто не отменял:<strong>HTML + CSS + JS</strong>.</p>
36
<p>Да, не все является обязательным, но классическую связку фронтендера никто не отменял:<strong>HTML + CSS + JS</strong>.</p>
37
<p>Если хотите повысить свой уровень владения Javascript, обратите внимание на следующие курсы в Otus:</p>
37
<p>Если хотите повысить свой уровень владения Javascript, обратите внимание на следующие курсы в Otus:</p>
38
<ul><li><a>продвинутый уровень</a>по JavaScritpt - вступительный тест размещен по<a>этой ссылке</a>;</li>
38
<ul><li><a>продвинутый уровень</a>по JavaScritpt - вступительный тест размещен по<a>этой ссылке</a>;</li>
39
<li><a>базовый уровень</a>- вступительный тест проходить не надо, можно просто<a>оставить заявку</a>на данный курс.</li>
39
<li><a>базовый уровень</a>- вступительный тест проходить не надо, можно просто<a>оставить заявку</a>на данный курс.</li>
40
</ul><p>Также существует отдельный курс по<a>HTML и CSS</a>и<a>направление по Node.js</a>, где прокачиваются навыки по созданию серверных приложений на Node.js с помощью Express, TypeScript, Apollo, Nest.js и GraphQl. Вступительный тест располагается по<a>этой ссылке</a>.</p>
40
</ul><p>Также существует отдельный курс по<a>HTML и CSS</a>и<a>направление по Node.js</a>, где прокачиваются навыки по созданию серверных приложений на Node.js с помощью Express, TypeScript, Apollo, Nest.js и GraphQl. Вступительный тест располагается по<a>этой ссылке</a>.</p>
41
-
<p>На этом все, остается пожелать вам успехов в тестах, задачах и вопросах на собеседовании. Помните, что только упо��ный труд позволит добиться поставленных целей, поэтому со временем любые тестовые задания будут вам по плечу! Даже если это задания от Google.</p>
41
+
<p>На этом все, остается пожелать вам успехов в тестах, задачах и вопросах на собеседовании. Помните, что только упорный труд позволит добиться поставленных целей, поэтому со временем любые тестовые задания будут вам по плечу! Даже если это задания от Google.</p>
42
<p><em>По материалам https://proglib.io/p/tricky-challenges-js/.</em></p>
42
<p><em>По материалам https://proglib.io/p/tricky-challenges-js/.</em></p>
43
<a></a>
43
<a></a>