10 вопросов на собеседовании JavaScript программиста, ответить на которые должен каждый


Оглавление (нажмите, чтобы открыть):

25 вопросов, которые задают на собеседовании JavaScript-разработчику

Доброго времени суток, дорогой гость! Рада приветствовать на страницах своего блога.

Сегодня речь пойдет о том, какие вопросы задаются на техническом собеседовании кандидату на позицию Javascript-разработчика. Цель — проверить необходимый уровень знаний языка кандидата и теоретической подготовки.

Мне бы хотелось выразить благодарность Senior Frontend Developer Греченок Евгению и Senior Backend Developer Гиззатову Марселю за помощь в создании статьи. Те вопросы, которые идут дальше, из их методички, которую они используют для собеседований кандидатов «и на 30 тысяч, и на 130». Большое спасибо, ребята, за время, которое мне уделили, и считаю, что для меня на собеседовании был хороший стимул убрать пробелы в собственных знаниях и сделать еще один шаг к тому, чтобы стать профессионалом.

Вопросы по JavaScript (синтаксис и особенности языка)

1. Если вам необходимо проверить, определено ли свойство у самого объекта … (hasOwnProperty)
2. Как работает this ( http://bonsaiden.github.io/JavaScript-Garden/ru/#function.this )
3. Замыкания ( http://bonsaiden.github.io/JavaScript-Garden/ru/#function.closures )
4. Определение переменных (всплытие)
5. Переменные let, const, var ( https://learn.javascript.ru/let-const )
6. Равенство и сравнение (оператор == и ===)
7. Операторы typeof и instanceof (для чего используются http://bonsaiden.github.io/JavaScript-Garden/ru/#types.instanceof )
8. Почему нельзя использовать eval ( http://bonsaiden.github.io/JavaScript-Garden/ru/#core.eval )
9. Деструктуризация ( https://learn.javascript.ru/destructuring )
10. Строки-шаблоны ( https://learn.javascript.ru/es-string )
11. Классы (прототипы, современные)
12. Итераторы ( https://learn.javascript.ru/iterator )
13. Генераторы ( https://learn.javascript.ru/generator )
14. Новые типы данных ( https://learn.javascript.ru/set-map )
15. Что такое Eventloop? Объясните принцип его работы.

Общие вопросы по программированию

  1. Отличие компилируемого языка от интерпретируемого
    Чем компиляция С отличается от Java
  2. Отличие статической типизации от динамической
  3. Отличие наследование от композиции ( https://habrahabr.ru/post/325478/ )
  4. Алгоритмы и их сложность (JS https://tproger.ru/translations/algorithms-and-data-structures/ )
    a. В приложении к любому языку привести примеры стандартных методов сортировки / обхода дерева / поиска в массиве, дикте с пояснением о их сложности и как работают.
  5. FIFO, LIFO
  6. Структуры данных (JS https://learn.javascript.ru/data-structures )
    a. Числа, Строки
    b. Объекты (ассоциативные массивы), передача по ссылке (что передаётся по значению)
    c. Массивы
    d. Деревья, Списки (связанный, ссылочный)
  7. Архитектура (в чём разница)
    a. асинхронная,
    b. многопоточная
  8. Микросервисы
    a. Будет ли микросервисами распределённая архитектура через общую шину данных
    b. Требования к микросервисам
    i. горизонтальное масштабирование
    ii. отказоустойчивость
  9. Преимущества микросервисов:
    i. легкая поддержка (небольшие сервисы легче)
    ii. нет ограничения на языки и библиотеки для решения задачи
    iii. упрощенное тестирование, возможность замокать взаимодействия
    iv. легкое накатывание и откатывание новых версий
    v. можно экспериментировать с технологиями

Гибкие методологии

  1. Зачем нужны
  2. Какие подходы есть
  3. Выявление проблем в разработке, зачем нужна ретроспектива в scrum
  4. Распределение задач по разработчикам
    • горят сроки
    • планирование

Задача на понимание JavaScript

Задача 1. Что выведет данный код?

Цель задачи: проверить понимание замыкания.

Тема: Замыкание (closure).

Ответ: Если исходить из определения замыкания — способность функции запоминать область видимости переменной, в которой та была объявлена, то правильный ответ 5. Функция a запомнила содержимое объявленной ранее переменной за пределами функции, и после вывода функции, передала в alert 5.

Собеседование на должность JavaScript-разработчика: популярные задачи с разбором решений

О том, как проводить собеседования на технические специальности, уже давно ведётся множество споров. Не все компании используют одинаковые методы проверки кандидатов, но чаще всего вам предлагают решить задачу с помощью кода либо на подходящей платформе, либо на ужасной белой доске.

Проблема распространённых задач заключается в том, что они не имеют никакого отношения к реальной работе, особенно когда речь идёт о frontend. На собеседовании не хватает простых вопросов, например о совместимости браузера, вёрстке или событиях DOM.

Специалисты по подбору сотрудников, которые поддерживают такой подход, часто говорят что-то вроде:

— Я бы предпочёл нанять умного человека и научить его Х, чем нанять человека, который знает всё об Х, но ему не хватает творчества, логики и умения рассуждать.

Как бы то ни было, на данный момент задачи всё ещё являются важной частью процесса собеседования. Эта статья расскажет, как решить пять распространённых задач по программированию, которые вам могут задать в ходе собеседования на должность младшего JavaScript- или frontend-разработчика.

Подготовка к собеседованию

Прежде чем приступить к решению задач, рассмотрим несколько общих советов по подготовке к собеседованию.

  • Готовьтесь заранее. Определите приоритет в подготовке, изучайте менее знакомые темы и много практикуйтесь. Если у вас нет опыта работы в области компьютерных наук, обязательно ознакомьтесь с некоторыми фундаментальными темами, касающимися алгоритмов и структур данных. Существуют онлайн-платформы, как платные, так и бесплатные, которые предлагают отличные способы отработать свои навыки прохождения собеседований. GeeksforGeeks, Pramp, Interviewing.io и CodeSignal — лишь некоторые из них.
  • Тренируйтесь мыслить вслух, когда пытаетесь найти решение. Фактически, раскрыть ваш ход мыслей в обстановке собеседования предпочтительнее, чем тратить всё доступное время на написание кода в полной тишине. Ваши слова дадут интервьюеру шанс помочь, если вы ошибётесь. Это также подчеркнёт ваши навыки общения.
  • Осознайте задачу, прежде чем начать её решать. Это важно. Иначе вы потратите время на размышления о неверной задаче. Кроме того, это заставит задуматься над вопросами, которые вы можете задать интервьюеру.
  • Практикуйте написание кода вручную. Это поможет, если вам предложат использовать доску, где нет автозаполнения, форматирования и т. д. При подготовке пробуйте записать свой код на листе бумаги или доске вместо того, чтобы держать всё в голове.

Стандартные задачи на JavaScript

Вполне вероятно, что вы уже сталкивались с одной или несколькими задачами из перечисленных ниже либо во время собеседования, либо во время практики на JavaScript. Что может быть лучше, чем наконец разобраться с ними?

Палиндром

Палиндром — это слово, предложение или последовательность символов, которая читается слева направо так же, как и справа налево. Например, «racecar» и «Anna» являются палиндромами, а «Table» и «John» — нет.

Формулировка задачи

Дана строка, нужно написать функцию, которая возвращает значение true, если строка — палиндром, и false, если это не так. При решении задачи необходимо учитывать пробелы и знаки препинания. Пример:

Логическое решение задачи

Эта задача строится на идее перевернуть строку задом наперёд. Если обратная строка совпадает с исходной, то это палиндром, и функция должна вернуть значение true. И наоборот, если обратная строка не совпадает с исходной, функция должна вернуть значение false.

Практическое решение

Вот один из способов решения задачи палиндрома:

Начните с преобразования символов входной строки в символы нижнего регистра. Поскольку вы собираетесь сравнивать каждый символ исходной строки с символами перевёрнутой строки, единый регистр гарантирует, что сравнение будет сосредоточено лишь на сравнении самих символов.

ZIP Service, Москва, можно удалённо, от 100 000 ₽

Далее переворачиваем исходную строку. Это можно сделать, преобразовав строку в массив с помощью метода .split() (библиотека String), затем перевернув массив методом .reverse() (библиотека Array) и, наконец, преобразовав обратный массив снова в строку с помощью метода .join() (библиотека Array).

Остаётся сравнить перевёрнутую строку с исходной и вернуть результат в виде true или false.

FizzBuzz

Это очень популярная задача на собеседованиях.

Формулировка задачи

Напишите функцию, которая выводит в консоль числа от 1 до n, где n — целое число, которое функция принимает в качестве параметра, при этом:

  • выводит fizz вместо чисел, кратных 3;
  • выводит buzz вместо чисел, кратных 5;
  • выводит fizzbuzz вместо чисел, кратных и 3, и 5.

Логическое решение задачи

Один важный момент в FizzBuzz — способ поиска кратных чисел в JavaScript. Это делается с помощью оператора модуля или остатка — %, который возвращает остаток от деления двух чисел. Остаток 0 означает, что первое число кратно второму:

Если разделить 12 на 5, то получится 2 с остатком 2. Если разделить 12 на 3, то получится 4 с остатком 0. В первом примере 12 не кратно 5, а в во втором 12 кратно 3.

Практическое решение

Вот одно из решений, которое вы можете использовать для задачи FizzBuzz:

Функция выше попросту выполняет необходимые тесты, используя условные операторы, и выводит ожидаемый результат. В этой задаче нужно обратить внимание на порядок операторов if… else : начинайте с двойного условия ( && ) и заканчивайте случаем, когда кратные числа не найдены. Таким образом вы сможете охватить все варианты.

Анаграмма

Слова являются анаграммами другого слова, если имеют одинаковые буквы в одинаковом количестве, но в разном порядке.

Формулировка задачи

Напишите функцию, проверяющую, являются ли две строки анаграммами друг друга (регистр букв не имеет значения). Важны только символы, пробелы или знаки препинания не учитываются. Пример:

Логическое решение задачи

Первое, на что нужно обратить внимание, — вам нужно проверять каждую букву в двух входных строках не только на наличие, но и на количество в каждой строке. Изображение такой информации будет выглядеть примерно так:

Подходящей структурой для хранения данных анаграммы будет объектный литерал JavaScript: ключ — это символ буквы, а значение — количество её повторений в данной строке.

Затем обратите внимание на пограничные случаи задачи:

  • убедитесь, что регистр букв не учитывается при сравнении. Просто преобразуйте обе строки в нижний или верхний регистр;
  • исключите из сравнения всё, что не является символом. Хорошим вариантом будет использование регулярных выражений.

Практическое решение

Вот как можно подойти к решению этой задачи:

Обратите внимание на использование Object.keys() . Этот метод возвращает массив, содержащий имена или ключи в том же порядке, в котором они встречаются в объекте. В этом случае массив будет выглядеть так:

Это удобный способ получить свойства объекта без выполнения громоздкого цикла. В этой задаче вы можете использовать этот способ вместе со свойством .length , чтобы проверить, имеют ли обе строки одинаковое количество символов, что является важной особенностью анаграмм.

Найти гласные

Вероятно, это одна из менее сложных задач, но это не уменьшает шанс того, что вы столкнётесь с ней во время собеседования.

Формулировка задачи

Напишите функцию, которая принимает строку в качестве аргумента и возвращает количество гласных, содержащихся в этой строке. Гласными являются «a», «e», «i», «o», «u».

Практическое решение

Вот простое решение задачи с гласными:

На что следует обратить внимание — это использование метода .includes() . Он доступен как для строк, так и для массивов. Вы можете использовать его, чтобы определить, содержит ли массив определённое значение. Метод возвращает true, если массив содержит указанное значение, и false, если нет.

Существует также более краткое решение этой проблемы:

Решение выше задействует метод .match() . Его использование в сочетании с регулярным выражением позволяет выполнять действенный поиск. Если регулярное выражение как аргумент метода найдено внутри указанной строки, возвращаемым значением будет массив совпадающих символов. Если совпадений не найдено, .match() вернёт null .

Фибоначчи

Эта статья не была бы полной без задачи Фибоначчи — классического вопроса, с которым вы наверняка столкнётесь во время собеседования.

Последовательность Фибоначчи — это порядок чисел, где каждое последующее число является суммой двух предыдущих. Например, первые десять чисел последовательности выглядят так: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34.

Формулировка задачи

Напишите функцию, которая возвращает n-ую запись в последовательности, где n — это число, которое вы передаёте в качестве аргумента функции.

Логическое решение задачи

Задача Фибоначчи включает в себя прохождение по циклу такое количество раз, которое указано в аргументе функции, и возврат значения на соответствующей позиции. Такой способ постановки задачи указывает на использование циклов для решения. В качестве альтернативы вы можете попробовать рекурсию, что наверняка поразит интервьюера.

Практическое решение

Вот как может выглядеть решение с помощью цикла:

Массив результатов уже содержит первые два числа в своём ряду, потому что каждая запись в ряду Фибоначчи состоит из суммы двух предыдущих чисел. Изначально у вас нет двух чисел, которые вы можете взять для получения следующего числа, поэтому цикл не может сгенерировать их автоматически. Однако вы знаете, что первые два числа всегда 0 и 1, поэтому вручную инициализируете массив результатов этими двумя числами.

Теперь попробуем рекурсивный подход:

Вы продолжаете вызывать fibonacci() , передавая всё меньшие и меньшие числа в качестве аргументов, пока не достигнете уже известного случая, где переданный аргумент равен 0 или 1.

Заключение

Если вы уже прошли несколько этапов собеседований на работу frontend- или JavaScript-разработчика, особенно уровня junior, вы, вероятно, столкнулись хотя бы с одной или двумя из задач, которые перечислены выше. Но даже если они вам не встретились, вы можете использовать их для совершенствования своих навыков программирования на JavaScript.

Ещё больше IT-задач для собеседований с разбором решений можно найти здесь.

10 вопросов на собеседовании JavaScript программиста, ответить на которые должен каждый

Обязательно к прочтению для начинающих frontend-разработчиков!

10 вопросов на собеседовании JavaScript программиста, ответить на которые должен каждый — Библиотека программиста

Собрали список вопросов, ответы на которые должен знать не только каждый JavaScript разработчик, но и, пожалуй, любой программист.

Комментарии (9)

Ильдар Кранов

прочитал вопросы и понял, что лучше мне пойти работать грузчиком.

Станислав Овсянкин

Статью писал дегенерат. Хорошо: — Знать ФП — Знать ООП Плохо: — Не знать ФП — Не знать ООП

Александр Жуков

Возможно писал HR)

Руслан Талипов

Выводы без рассказа об исходных предпосылках бессмысленны.

Виталий Столяров

Никита Вьюшков

абсолютно однобокие и общие вопросы.

Радослав Чеславович

Мне кажется, или javascript программист и front-end разработчик это не одно и то же?

Александр Колосовский

Чистый JavaScript разработчик в природе осень редкое явление

Леонид Клименко


Обо всех этих методах, методологиях, парадигмах и прочих аккордеонах знают только авторы подобных статей. У массы разработчиков все инструменты хранятся в голове под совершенно другими названиями ( ключами, если угодно). Многим вообще с трудом даётся общение с незнакомыми людьми. Только резюме. Ну и пару-тройку строк придётся написать, конечно.

50 вопросов, ответы на которые вы должны знать, прежде чем идти на собеседование по JavaScript

Собеседования c разработчиками напоминают Дикий Запад. Никто толком не понимает, чем занимается. Большинство технических рекрутеров не могут отличить Java от JavaScript. Тем не менее им поручено заниматься наймом разработчиков.

Мастер Йода рекомендует:  SQL для анализа данных

Бывает, что от нас требуют восьмилетний опыт работы с языком Swift. И это, учитывая, что языку Swift всего три года.

Работать разработчиком непросто, но весело и захватывающе. Пройти собеседование может быть так же просто, как войти в комнату, или, наоборот, слишком тяжело, в случае, если вам попадется бесчеловечное испытание на белой доске. Никогда не знаешь, чего ожидать.

К счастью, мы можем подготовиться к технической части собеседования и быть уверенными в том, что не завалим ее.

Большинство (современных) компаний осознают, что процесс собеседования с разработчиками работает не очень и нуждается в доработке. В этих компаниях мы и хотим работать.

В этой статье я собрал 50 вопросов, к которым вам следует подготовиться, прежде чем идти на собеседование по JavaScript.

Общие вопросы — это вопросы, которые покажут, как вы реагируете, думаете и насколько хорошо впишитесь в команду.

Ваши ответы на данные вопросы должны быть достаточно сжатыми, поскольку они не имеют большого веса.

Не путайтесь в своих словах, делайте длинные паузы, чтобы тщательно обдумать ответы на вопросы.

  1. Что вдохновляет или интересует вас в программировании?

2. Что нового вы узнали вчера/на этой неделе?

3. Расскажите о предпочитаемой среде разработки. Какуюоперационную систему, IDE и терминал вы используете и почему?

4. Если бы вы могли освоить одну технологию в этом году, что бы это было? Как бы вы осваивали новый навык?

5. Как на предыдущей работе вы решили последнее разногласие с вашим начальником? Чем все закончилось? Не могли бы вы дать номер вашего начальника, чтобы я мог проверить его версию? [Последний вопрос — блеф, ни у кого нет времени звонить вашему бывшему начальнику]

6. Какие ресурсы, форумы или инструменты вы используете, чтобы узнавать о последних тенденциях во фронтенд-разработке и дизайне? Есть ли среди них фавориты, какие и почему?

7. Если бы вы присоединились к проекту и команда разработчиков использовала табы, а вы пробелы, что бы вы сделали в таком случае? Вы попытаетесь убедить команду использовать пробелы или присоединитесь к толпе и будете использовать табы?

[Вопрос с подвохом] — Наиболее правильный ответ будет заключаться в том, чтобы использовать стандартный инструмент форматирования, вроде Prettier, чтобы код любого члена команды выглядел одинаково при отправке в репозиторий. Таким образом, вы сможете продолжать использовать пробелы, а команда сможет свободно использовать табы.

Если вы будете навязывать свое мнение остальным разработчикам, то вас вряд ли будут считать командным игроком, а если вы начнете использовать табы без особого желания, то вы не будете так мотивированы, как все остальные, и с большой вероятностью уйдете.

8. Можете ли вы описать свой рабочий процесс при создании веб-страницы? Какие первые пять шагов вы проделываете при создании нового проекта?

9. С какой технической проблемой вы столкнулись в последний раз и как вы ее решили?

10. Какие действия вы предприняли в отношении последних проектов, чтобы повысить удобство поддержки кода? Какие-либо конкретные парадигмы программирования, вроде функционального программирования или разработки через тестирование?

Теперь, когда мы закончили с общими вопросами, пришло время для финальной схватки. Это там, где на вас посыпятся технические вопросы.

Примечание: вопросы в большей степени ориентированы на фронтенд-разработку, но могут попасться и те, что касаются бэкенда, DevOps и решения проблем.

11. С какими системами контроля версий вы знакомы? Как вы делитесь кодом между проектами без потерь?

12. Назовите четыре способа уменьшить время загрузки страницы.

13. Как расшифровывается CORS и к какой проблеме это относится?

14. Объясните, что такое ARIA и экранные считывающие устройства, а также как сделать веб-сайт доступным для людей с ограниченными возможностями.

15. Для чего используется doctype ?

16. Перечислите структурные блоки в HTML5.

17. В чем разница между localStorage, файлами cookie и sessionStorage?

18. Для чего подходят атрибуты data- ?

19. К каким вещам следует относиться с осторожностью при проектировании или разработке многоязычных сайтов? Как вы обслуживаете страницу с контентом на нескольких языках?

20. Что такое прогрессивный рендеринг?

21. Объясните, как работает this в JavaScript. Как работает this в классах и функциях?

22. Опишите, что такое всплытие и перехват событий (event bubbling и event capturing).

23. Объясните, что такое поднятие переменных.

24.Объясните разницу между:

  • function Animal() <>
  • var animal = Animal()
  • var animal = new Animal()

25.В чем разница между объектами хоста и нативными объектами?

26. Приведите типичный случай использования анонимных функций.

27. Объясните, как в JavaScript работает прототипное наследование.

28. Что такое замыкание и как/зачем вы его используете?

29. В чем разница между null и undefined ?

30. В чем разница между == и === ?

31. Что такое Webpack? Какие проблемы он решает?

32. Вы когда-нибудь использовали фреймворк или библиотеку для фронтенд-разработки? Если да, то какие именно?

33. Почему условный (тернарный) оператор так называется? Что означает слово тернарный?

34. Какие инструменты и методы вы используете для отладки JavaScript кода?

35. Как вы отлаживаете JavaScript код, который выполняется на сервере, например Node.js?

36. Назовите преимущества/недостатки написания JavaScript кода на языке, который компилируется в JavaScript?

37. С учетом нижеприведенного кода, как бы вы выполнили функцию duplicate ?

38. Можете ли вы привести пример каррирования и рассказать, почему такой синтаксис дает преимущество?

39. Можете ли вы привести пример деструктуризации объекта или массива?

40. Кто создал JavaScript и почему язык называется JavaScript?

41. В чем разница между этими двумя функциями?

42. Для чего и когда создаются статические члены класса?

43. В чем разница между переменными, созданными с помощью let , var или const ?

44. Что происходит, когда вы заходите на веб-сайт? Что такое DNS?

45. Что такое движок V8? Кто его использует?

46. Что означает $ в JavaScript коде?

47. Объясните разницу между лейаутом, рисованием и композитингом.

48. Как вы можете повысить FPS при прокрутке веб-сайта?

49. Какой вывод у нижеприведенного кода?

50. Что такое цикл событий в JavaScript и для чего он нужен?

Спасибо за прочтение и удачи в программировании! ❤

5 типичных JavaScript вопросов на собеседовании

Разработчики JavaScript пользуются большим спросом в мире IT. Если это та сфера, в которой у вас достаточно знаний, у вас есть много возможностей изменить место своей работы и повысить заработную плату. Но прежде чем вы будете приняты на работу, вам необходимо будет пройти собеседование. В этой статье мы покажем вам 5 типичных вопросов, которые вы должны пройти при приёме на работу и показать свои умения в JavaScript.

Вопрос 1: Возможности

Рассмотрим следующий код:

Что будет написано на консоли?

Ответ

Код выше напишет 5.

Хитрость этого вопроса заключается в том, что в IIFE есть два задания, но переменная a объявляется ключевым словом var. Это означает, что a является переменной функции. b же присвоена глобальной области.

Другой хитростью этого вопроса является то, что он использует строгий режим (‘use strict’;) в функции. Если был включен строгий режим, код покажет ошибку “Uncaught ReferenceError: b не определён”. Помните, что строгий режим требует, чтобы вы ссылались на глобальные области. Таким образом, вы должны написать:

Вопрос 2: Создание “родных” методов

Определите повторяющуюся функцию в строке объекта. Функция подразумевает целое число, определяющее, сколько раз строка должна повториться. Функция повторяет указанную строку указанное количество раз. Например:

Должно получиться «hellohellohello».

Ответ

Возможная реализация показана ниже:

Вопрос проверяет знания разработчиков о наследовании в JavaScript и свойстве прототипа. Так же проверяется и способность разработчика расширять функциональность собственных типов данных (хотя это не обязательно).

Ещё одним важным моментом является демонстрация знаний о том, как не отменить уже определенные функции. Это делается путём тестирования, подтверждающего, что функция не существует самостоятельно до ее определения.

Этот метод особенно полезен, когда вас попросили заклинить функцию JavaScript.

Вопрос 3: Подъём

Каков результат выполнения и почему?

Ответ

Результаты кода – underfined и 2.

Причина в том, что обе переменные функции подняты (помещены в верхней части функции), но переменные не удерживают присвоены значения. В то время, когда переменная a печатается, она существует в функции (это декларируется), но она все ещё undefined. Другими словами, код выше эквивалентен следующему:

Вопрос 4: Как это работает в JavaScript

Каков результат следующего кода? Обоснуйте свой ответ.

Ответ

Код выдаст Aurelio De Rosa и John Doe. Причина в том, что контекст функции, вызываемый ключевым this словом, в JavaScript зависит от того, как именно вызывается функция, а не от того, как она определена.
Вызов первых console.log ( ), getFullname ( ) вызывается функцией объекта obj.prop. Таким образом, контекст относится к последнему и возвращает “fullname” как свойство объекта. В противном случае, когда getFullname ( ) присваивается переменной, контекст относится к глобальному объекту. Это происходит потому, что тест устанавливается как свойство глобального объекта (window). По этой причине функция возвращает значение свойства fullnameиз window, которая в данном случае является кодом, устанавливаемым в первой строке фрагмента.

Вопрос 5: call ( ) и apply ( )

Исправьте предыдущий вопрос так, чтобы последний console.log ( ) стал Aurelio De Rosa.

Ответ

Вопрос может быть изменен, повлияв на контекст функции, используя функции call ( ) или apply ( ). Если вы не знаете их и их отличия, вам стоит прочесть статью. В коде ниже я буду использовать call ( ), но в этом случае применяется apply ( ), результат будет тот же:

Заключение

В этой статье мы обсудили пять типичных вопросов, которые задают на собеседовании, чтобы проверить разработчика JavaScript. Фактические вопросы могут отличаться от собеседования, но понятия и темы, как правило, схожи. Я надеюсь, что вы хорошо провели время, тестируя свои знания. В случае, если вы не смогли ответить на все вопросы, не волнуйтесь: нет ничего, что изучение и опыт не могут исправить.
Если у вас были другие вопросы на собеседовании, не стесняйтесь поделиться ими с нами. Это может помочь многим разработчикам.

Топ 20 вопросов, задаваемых на интервью по Node.js

В этой статье мы поговорим о 20 вопросах, обычно задаваемых на интервью по Node.js. Если вы MEAN-стэк разработчик, и вы хотите узнать про основные вопросы, задаваемые на интервью по Node.js, вы пришли по адресу. Этот список позоволит вам познакомиться с настоящими вопросами, с которыми вы можете столкнуться во время вашего интервью.

1. Что такое Node.js?

Node.js — это платформа, для создания быстрых и расширяемых сетевых приложений. Преимуществами Node.js над другими серверными языками является то, что он использует событийно-управляемую не блокирующую ввод-вывод модель, которая делает его легким и эффективным.

2. Вы можете объяснить, как работает Node.js?

Он использует JavaScript-движок Google V8 для выполнения кода. Он содержит встроенную библиотеку ввода-вывода для файлов, сокетов и HTTP-соединений. Node.js инкапсулирует libuv, чтобы управлять асинхронными событиями.

3. Является ли Node.js однопоточным?

Node.js работает с одним потоком, но использует не блокирующие ввод-вывод вызовы, что дает возможность поддержки нескольких одновременных соединений. Это значит, что node не работает с запросами параллельно, но все задачи на бэкенде, которые в самом деле занимают много времени, выполняются параллельно.

4. Можете ли вы объяснить асинхронный подход в Node.js?

Node.js работает асинхронно, используя цикл событий и коллбэк-функции. Цикл событий — это функциональность, которая обрабатывает все внешние события и конвертирует их в коллбэк-функции. Таким образом происходит вызов всех ваших обработчиков в нужное время. Это значит, в то время как выполняется один запрос, он делает кучу вещей на стороне бэкенда, так что текущий запрос или ожидающийся не отнимают много времени.

5. Вы можете объяснить, что такое Globals?

Глобал, процесс и буфер в совокупности называются Globals.

Глобал: Это объект в глобальном неймспейсе
Процесс: Это тоже глобальный объект, но он предоставляет существенную функциональность для преобразования синхронной функции в асинхронный коллбэк.
Буфер: Сырые данные хранятся в экземплярах класса Buffer.

6. Какое применение у нижнего подчеркивания в Node.js?

Чтобы получить доступ к последнему выражению, мы должны использовать символ нижнего подчеркивания (_).

7. Вы можете создать HTTP-сервер на Node.js? Приведите пример кода.

Да, мы можем создать HTTP-сервер на Node.js. Для этого мы можем использовать команду http-server.

8. Как загрузить HTML в Node.js?

Чтобы загрузить HTML, мы должны изменить HTTP-заголовок Content-type с text/plain на text/html.

9. Можете ли вы объяснить разницу между Node.js и AJAX?

Разница между Node.js и Ajax заключается в том, что Ajax — это технология клиентской стороны, в то время как Node.js — серверной. Ajax используется для изменения содержимого страницы без ее обновления, а Node.js используется для разработки серверного ПО. Node.js выполняется сервером, в то время как Ajax выполняется браузером.

10. Можете ли вы объяснить разницу между readFile и createReadStream в Node.js?

readFile сначала прочитает файл полностью в память, прежде чем сделает его доступныи для пользователя.
createReadStream будет читать файл определенными порциями, размер которых указывается заранее.

11. Что такое коллбэк в контексте Node.js?

Коллбэк — это асинхронный эквивалент функции, которая будет вызвана, когда какая-то задача завершится. Node.js в полную меру использует коллбэки, все API написаны так, что они поддерживают коллбэки. Преимущество использования коллбэков заключается в том, что это делает Node.js довольно хорошо расширяемым, то есть это дает возможность выполнять большое количество запросов без ожидания завершения функции.


12. Что такое глубоко вложенные коллбэки и как их предотвратить?

Глубоко вложенные коллбэки означают сильную вложенность, которая делает код трудным для чтения и поддержки. Чтобы предотвратить это, нужно использовать модуляризацию, которая разбивает коллбэки на независимые функции. Другой способ предотвращения этой проблемы — использование промисов, которые позволяют передавать ошибки и создавать цепочки вызовов.

13. Что такое Event Loop и Event Emitter?

Node.js поддерживает параллельность при помощи событий и коллбэков даже если это однопоточное приложение. Поток хранит event loop, и когда какая-то задача завершается, этот поток вызывает соответствующее событие.

EventEmitter вызывает событие когда завершается какая-то задача, происходит ошибка, регистрируется или удаляется какой-нибудь слушатель. Он предоставляет свойства, такие как on и emit . On используется чтобы связать функцию, а emit — для вызова события.

14. Сколько типов стримов представлено в Node.js?

Есть 4 типа стримов, представленных в Node.js, а именно: Readable, Writable, Duplex и Transform. Readable используется для операции чтения, Writable для операции записи, Duplex и для чтения и для записи, а Transform — это разновидность Duplex, где вывод вычисляется на основе ввода.

15. Почему следует использовать буферы вместо двоичных строк, чтобы обрабатывать двоичные данные?

Чистый JavaScript не имеет достаточного функционала для работы с двоичными данными. Так как серверы на Node.js должны работать с TCP-соединениями для чтения и записи данных, с двоичными строками будет проблематично работать, так как они медленные и имееют тенденцию ломаться. Именно поэтому всегда целесообразнее использовать буферы вместо двочнных строк.

16. Как изящно остановить Node.js сервер?

Мы можем изящно остановить сервер используя общий сигнал, называемый SIGTERM или SIGINT, который используется для прекращения работы программ. Нам нужно вызвать SIGTERM или SIGINT, который остановит программу и очистит память, используемую ресурсами программы.

17. Что такое Error First?

“Error-first” — это стандартный протокол для коллбэков Node.js, который содержит простое правило, что первый аргумент коллбэка должен быть объектом ошибки. Если аргумент ошибки не равен null, значит операции не были успешны, произошла ошибка. А если этот аргумент равен null, значит все прошло успешно.

18. В чем заключается разница между process.nextTick() и setImmediate()?

Разница между process.nextTick() и setImmediate() заключается в том, что process.nextTick() откладывает выполнение действия до тех пор, пока не произойдет следующий проход по циклу событий или он просто вызывает коллбэк-функцию, как только будет завершено текущее выполненение цикла событий. В то время как setImmediate() запускает коллбэк в следующем цикле событий и он возвращает в цикл событий для выполнения любых операций ввода-вывода.

19. Как вы можете следить за изменениями файла в Node.js?

Мы можем воспользоваться функцией watch() для файловой системы, которая следит за изменениями в файле.

20. Как разрулить “Process out of Memory Exception” в Node.js?

Чтобы решить эту проблему, нам нужно увеличить max-old-space-size. По умолчанию он равен 512 МБ. Чтобы увеличить эту память можно воспользоваться командой node —max-old-space-size=1024 file.js .

Если вы нашли эту статью полезной, пожалуйста, оставляйте комментарии и делитесь с друзьями.

Список вопросов и задач при собеседовании PHP программиста

Готовясь к прохождению собеседования, PHP программисты часто задаются вопросами: что меня будут спрашивать, какие вопросы и задания могут быть? Вопросы и задачи могут быть абсолютно разными. Здесь нельзя предугадать, что конкретно у вас будут спрашивать, и какое тестовое задание попросят пройти.

В данной статье собраны наиболее часто встречающиеся вопросы и задачи, которые могут попасться на собеседовании и которые PHP программист должен знать.

Основное

Что такое PHP?

PHP — это скриптовый язык программирования для создания сайтов и веб-приложений. PHP унаследовал синтаксис языков программирования C, Perl, Java.

Какие знаешь версии PHP?

Есть следующие версии PHP:

  • PHP 2, PHP 3, PHP 4 старые и не поддерживаемые версии
  • PHP 5 >= используется в большинстве проектов, преимущественно обладает версия 5.6
  • PHP 7 актуальная версия с новыми возможностями и улучшениями

Синтаксис PHP

Что такое short tags и как его использовать в PHP?

Для обработки скрипта все содержимое кода необходимо заключать в открывающие и закрывающие теги и ?> , которые определяют начало и конец обработки. short tags — это короткий синтаксис позволяющий использовать echo использовать = (ровно) Например:

Как изолировать PHP код от HTML? Для чего это нужно?

Изолирование кода необходимо для использования смешанного содержимого скрипта: php, javascript, css и т.п. Изолирование обеспечивает удобство и простоту понимания содержимого скрипта.

Как использовать комментарии в коде PHP?

Комментарии позволяют документировать участки кода в PHP скрипте. Содержимое комментариев не отображается при выполнении скрипта. PHP поддерживает комментарии в следующих стилях:

Мастер Йода рекомендует:  Как выбрать копирайтера

Однострочные комментарии записываются до конца строки или текущего блока PHP-кода после символов // или # Многострочные комментарии запитываются внутри символов /* и */ Например:

Что такое $this и self в PHP?

$this — является ссылкой на текущий объект. self — является ссылкой на текущий класс.

В чем разница между одинарными и двойными кавычками в PHP?

В отличии от одинарных, данные в двойных кавычках парсятся.Например, при использовании двойных кавычек результат выведет Hello, а одинарные кавычки выведут переменную как текст, а не ее значение:

Типы данных PHP

Сколько в PHP типов данных? Какие это типы данных?

В PHP есть 8 базовых типов данных

4 скалярных типа:

  • boolean — логический тип true/false
  • integer — целочисленный тип
  • float — числовой тип с плавающей точкой, содержащий целые и дробные числа
  • string — строковый тип

2 составных типа:

  • array — массив с упорядоченным списком элементов
  • object — объект

2 специальных типа:

  • resource — ссылка на внешний (абстрактный) ресурс.
  • NULL — пустой тип, без значения

Какой тип типизации данных в PHP?

В PHP используется динамическая типизация, не требующая объявления переменной и указания ее типа при объявлении.

Что такое переменная и как ее использовать?

Переменная это именованная область в памяти для хранения данных. Имя переменной должно начинаться с буквы или символа подчеркивания, состоять из букв, цифр и символов подчеркивания. Перед именем переменной необходимо использовать символ $ .

Что такое область видимости переменной?

Область видимости переменной, это место в котором переменная определена. Например, внутри функции или за ее пределом.

Что такое переменные извне?

Переменные извне — это данные полученные из формы с помощью GET и POST, данные полученные из COOKIE.

В чем разница между GET и POST?

GET передает данных из адресной строки в виде строки с параметрами. POST передает данные используя HTTP тело запроса (например, обычно через html форму). GET может передавать только данные объемом 1024 символов. POST может отправлять данные большого размера, который обычно установлен в настройках сервера.

Константы

Что такое константы? Как их использовать?

Константы — это уникальное имя, которое содержит какие-то данные. Константы можно использовать двумя способами:

Что такое волшебные константы?

Волшебные константы — это список предопределенных в PHP констант. Существуют следующие волшебные константы

Текущий номер строки в файле.

Полный путь и имя текущего файла с развернутыми симлинками. Внутри подключаемого файла возвращается имя данного файла.

Директория файла. Внутри подключаемого файла возвращается директория этого файла.

Имя функции или в случае анонимной функции.

Имя класса, содержит название пространства имен, в котором класс был объявлен (например, Block\Aside).

Имя трейта, содержит название пространства имен, в котором трейт был объявлен (например, Block\Aside).

Имя метода класса.

Имя текущего пространства имен.

Полное имя класса (с указанием пространства имен).

Операторы PHP

Что такое оператор?

Оператор — это одно или несколько выражений, используемых для выполнения определенных действий.

Какие существуют операторы?

В PHP есть следующие виды операторов:

  • оператор присваивания
  • арифметические операторы
  • логические операторы
  • побитовые операторы
  • операторы сравнения
  • оператор управления ошибками
  • операторы инкремента и декремента
  • строковые операторы
  • операторы массивов
  • оператор проверки типа

Что такое арифметические операторы?

Арифметические операторы это простейшие математические операции: идентичность, отрицание, сложение, вычитание, умножение, деление, деление по модулю, возведение в степень.

Что такое логические операторы?

Логические операторы используются для проверки истинности или ложности каких-либо действий или условий. Есть следующие логические операторы:

Что такое оператор присваивания?

Оператор присваивания обозначается знаком = и позволяет указать для переменной новое значение.

Что такое побитовые операторы?

Побитовые операторы это операции производимые над цепочкой битов.

Что такое операторы сравнения?

Операторы сравнения используются для сравнения значений переменных между собой.Существуют следующие операторы сравнения:

Тождественно не равно

Больше или равно

Космический корабль (spaceship)

Что такое оператор управления ошибками?

Оператор управления ошибками обозначается знаком @ и позволяет игнорировать вывод ошибок для используемых функций.

Что такое операторы исполнения?

Оператор исполнения позволяет выполнить строку, заключенную в кавычки « и возвращает полученный вывод. Например:

Что такое операторы инкремента и декремента?

Операторы инкремента и декремента позволяют увеличить и уменьшить значение переменной на 1 (единицу). PHP поддерживает префиксные и постфиксные операторы инкремента и декремента в стиле C.Например:

Увеличивает $a на единицу, затем возвращает значение $a.

Возвращает значение $a, затем увеличивает $a на единицу.

Уменьшает $a на единицу, затем возвращает значение $a.

Возвращает значение $a, затем уменьшает $a на единицу.

Что работает быстрей: преинкремент или постинкремент?

Преинкремент работает быстрее, изменяя содержимое самой переменной, в то время как постинкремент создает временную переменную.

Что такое строковые операторы?

Строковые операторы позволяют работать с текстом. Оператор конкатенации (‘.’) соединяет в строку левый и правый аргументы. Оператор присваивания с конкатенацией (‘.=’), соединяет в строку правый аргумент к левому.

Что делает оператор проверки типа?

Оператор проверки типа instanceof используется чтобы определить, является ли текущий объект экземпляром указанного класса.

Управляющие конструкции

Обязательно ли использовать закрывающий тег ?> в конце файла?

Нет, не обязательно. В файлах, где только PHP код, его лучше не использовать, чтобы предотвратить случайное попадание конечного пробела в вывод.

В чем разница между require(), require_once(), include(), include_once()?

  • require() просто подключает в текущий файл указанный
  • require_once() подлключает указанный файл в текущий только в том случает, если он не был ранее подключен
  • include() работает также как и require(), подключает файл и в случае ошибки возвращает WARNING, в то время как require() возвращает FATAL ERROR
  • include_once() работает также как и require_once(), подключает файл если он не был ранее подключен и возвращает WARNING, в то время как require_once() возвращает FATAL ERROR.

В чем отличие цикла while от do while?

Тело цикла do-while выполнится хотя бы один раз, так как условие проверяется в конце цикла, в то время как в цикле while условие проходит проверку вначале.

Что такое goto и как он работает?

Оператор goto обеспечивает переход из одной части программы в другую. Место в которое производится переход указывается с помощью специальной метки с двоеточием. Для перехода к этому месту используют оператор goto и название метки.

В чем различия между операторами break и continue?

Оператор break прерывает выполнение инструкций for, foreach, while, do-while или switch, а опратор continue пропускает часть итерации внутри цикла.


Как прервать выполнение for, foreach, while, do-while или switch?

Прервать выполнение инструкций for, foreach, while, do-while или switch возможно с помощью оператора break .

Как пропустить часть интерации цикла внутри for, foreach, while, do-while или switch?

Пропустить часть интерации цикла внутри for, foreach, while, do-while или switch возможно с помощью оператора continue .

Что такое declare?

Оператор declare производит установку директив исполнения для блока кода.

Почему в declare нельзя использовать переменные и константы?

В declare нельзя использовать переменные и константы, потому что директивы обрабатываются во время компиляции файла и только символьные данные могут использоваться в значении declare.

Что такое альтернативный синтаксис?

Альтернативный синтаксис используется для операторов if, while, for, foreach и switch и позволяет изменить запись выражения, использовав вместо открывающей фигурной скобки двоеточие (:), а вместо закрывающей скобки endif;, endwhile;, endfor;, endforeach; или endswitch;

Строки

Есть ли разница между одинарными и двойными кавычками?

Переменные заключенные в двойные кавычки парсятся и их содержимое выводится, в то время как в одинарных кавычках просто отобразят название переменной как обычный текст.

В чем различия между echo и print?

Оба оператора используются для вывода текста. echo() является конструкцией, которая может принимать несколько аргументов и выводить их на экран. print() не совсем функция и может принимать только 1 аргумент, а также писаться без скобок.

Дана строка «Hello world!». Как перевернуть строку?

Чтобы перевернуть строку, можно использовать функцию strrev()

Массивы

Как удалить переменную или элемент из массива?

Для удаления переменной или элемента из массива надо использовать функцию unset(). Например:

Дан массив [1,2,3,4,5,6,7]. Как перевернуть его и получить [7,6,5,4,3,2,1]?

Чтобы перевернуть массив, можно использовать функцию array_reverse()

Как получить максимальное значение элемента массива [1,2,3,4,5,10,20,30,40,50,70,100, 10, 30, 50]?

Для получения максимального значения массива можно использовать функцию max() .

Либо сделать это через цикл:

Функции

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

Функция — это набор операторов, выполняющих определенные действия. Функция начинается с ключевого слова function , за которым следует имя функции, а за ней круглые скобки с передаваемыми параметрами внутрь функции.

Что такое аргументы функции?

Аргументы функции это данные, передаваемые внутрь функции в виде списка параметров. Аргументы разделяются запятыми и вычисляются слева на право.

Какие существуют способы передачи аргументов в функцию?

Передача аргументов в функцию осуществляется: по значению (часто используемый), по ссылке, значения по умолчанию.

Как просиходит передача аргументов в функцию по значению?

Передача аргументов в функцию по ссылке происходит с помощью указания новых аргументов внутри вызываемой функции.

Как происходит передача аргументов в функцию по ссылке?

Передача аргументов в функцию по ссылке происходит с помощью указания амперсанда ( & ) перед именем аргумента в описании функции.

Как для функции просиходит установка значений по умолчанию?

Установка значений по умолчанию для функции просиходит с помощью указания значений для аргументов функции.

Какой оператор производит возврат результата функции?

Возрат результата функции производится с помощью оператора return .

Как происходит обращение к функциям через переменные?

Обращение к функциям через переменные происходит с помощью присоединения к имени переменной круглых скобок. PHP будет искать функцию с таким именем и пытаться ее выполнить.

Что такое ананимные функции?

Анонимная функция, или по другому, замыкания (closures), представляет собой функцию не имеющую имени и используемую для значений callback-параметров.

Что такое static функция?

Static функция вызывается напрямую у класса и позволяет обращаться к свойствам и методам класса без создания экземпляра класса. При этом указатель $this не доступен внутри метода объявленного статическим.

Что такое рекурсия?

Рекурсия — это вызов функции из самой себя.

Классы и объекты

Что такое объектно-ориентированное программирование?

Объектно-ориентированное программирование — это парадигма программирования с использованием объектов и классов.

Что такое MVC?

MVC (Model-View-Controller) схема шаблона проектирования, разделенный на три компонента для работы с базой данных, интерфейсом отображения данных, взаимосвязью приложения с пользователем. Модель отвечает за работу с информацией из базы данных. Представление отвечает за отображение полученной информации на экран. Контроллер отвечает за взаимодействие между данными и отображением.

Что такое конструктор?

Конструктор это метод _constructor(), который вызывается при создании экземпляра класса с помощью ключевого слова new.

Как в PHP сделать множественное наследование?

В PHP нельзя сделать множественное наследование. У класса может быть только один родитель. Для эмуляции множественного наследования можно использовать функцию _call() или трейты (traits). Трейт позволяет группировать и повторно использовать наборы методов в нескольких классах.

Назовите основные концепции объектно-ориентированного программирования

Основными концепциями объектно-ориентированного программирования являются: инкапсуляция, наследование, полиморфизм. Инкапсуляция объединяет методы и данные и защищает от внешнего вмешательства или неправильного использования. Наследование позволяет одному объекту наследовать методы и свойства другого объекта. Полиморфизм создает общий интерфейс для схожих по смыслу действий, чтобы решать множество разных задач.

Что такое виртуальный метод?

Виртуальный метод является переопределенным методом класса в классах-наследниках для вызова во время исполнения.

Что такое класс?

Класс это модель еще не существующего объекта, описывающая устройство бъекта — его методы и свойства.

Что такое объект?

Объект это данные и методы для их обработки.

Что такое члены класса?

Членами класса называют данные и методы объекта.

В чем отличие класса от объекта?

Объект является экземпляром типа класса. Класс является типом данных.

Что такое область видимости переменной?

Область видимости переменной — это область, в пределах которой метод или переменная продолжает работать и возвращать значение.

Есть несколько типов определяемых область видимости методов и переменных:

  • public — переменная доступна из любого места
  • protected — защищенная переменная доступна только внутри класса, в котором была объявлена и из производных классов
  • private — закрытые методы и переменные доступны только внутри класса

В чем отличие локальной переменной от глобальной переменной?

Локальные переменные доступны только в конкретном методе, а глобальные во всей программе.

Что такое абстрактный класс?

Абстрактный класс в объектно-ориентированном программировании — это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать) абстрактные методы и свойства.

В чем разница между абстрактным классом и интерфейсом?

Абстрактный класс — имеет хотя бы один метод и обозначается как abstract . Интерфейс — это тоже абстрактный класс, но он не может иметь свойств, и не определено содержимое методов.

Зачем интерфейс, когда есть абстрактный класс?

Произвести наследование можно только от одного абстрактного класса, но реализовать множество интерфейсов. Абстрактный класс наследуется, а интерфейс реализуется.

Пространства имен

Что такое пространства имен?

Пространства имен — это объединение элементов (классов) с уникальными названиями в одну группу и их защита от внешнего вмешательства (инкапсулирование) внутри единого пространства с указанным именем.

Какие проблемы решает пространство имен?

Пространство имен решает проблемы конфликта имен классов, функций, констант и длинных имен различных библиотеки и модулей.

Как объявляются пространства имен?

Пространства имен объявляются с помощью ключевого слова namespace .

Как получить название пространства имен?

Получить название пространства имен можно с помощью магической константы __NAMESPACE__ .

Что такое use?

Ключевое слово use позволяет импортировать файл или каталог.

Что такое псевдоним имени?

Псевдоним имени — это указание короткого имени для импортируемого пути к файлу или каталогу.

Исключения

Что такое исключения?

Исключения позволяют сделать обработку ошибок в PHP: сгенерировать или поймать.

Генераторы

Что такое генераторы?

Генератор — это простая функция обозначаемая как yield (похожа на простые итераторы) и вместо возращения значения, как это делает return , будет перебирать все значения.

Что такое yield?

Ключевое слово yield используется при создании генератора для перебора значений и вместо возращения значения, как это делает return , перебирает все значения.

Ссылки

Что такое ссылка?

Ссылка — это доступ к переменной под разными именами.

Что делают ссылки?

Ссылки обеспечивают выполнение следующих операций: присвоение по ссылке, передачу по ссылке и возврат по ссылке.

Что не делают ссылки?

Ссылки не являются указателями на данные.

Cookie

Что такое Cookie и зачем они используются?

Cookie (Печеньки) — это небольшой фрагмент информации передаваемый в браузер и хранящийся на компьютере пользователя. Cookie используется для хранения необольшой информации, а также используется при аутентификации пользователей сайта, установки различных настроек и ведении статистики о сайте.

Что нельзя хранить в Cookie и почему?

В cookie ни в коем случае нельзя хранить конфендициальные данные, например: пароли, номера карт, а также делать проверку подленности пользователя к аккаунтам Это связано с тем, что содержимое cookie может быть легко просмотрено и изменено через браузер любым пользователем.

Какие есть типы cookie?

Есть следующие типы cookie: сессионные, постоянные, защищенные, HTTP-only. Сессионные (временные) — существуют только когда пользователь зашел на сайт, а при закрытии браузера уничтожаются. Постоянные — существуют все время и удаляются только в установленную дату или промежуток времени. Защищенные — куки могут быть переданы только через шифрованное HTTPS соединение. HTTP-only — к кукам нельзя обращаться из браузера через JavaScript, что устраняет их кражу через кросс-сайтового скриптинга (XSS).

Сессии

Что такое сессии и зачем они используются?

Сессии — это специальные файлы на сервере для хранения и доступа различных данных. Сессии позволяют хранить данные, к которым через браузер пользователь не может получить доступ, например, как в cookie. Посетителю сайта присваивается уникальный id (идентификатор сессии), который хранится в cookie на стороне пользователя или передается через адресную строку.

Вопросы MySQL

Где и как нужно хранить пароли пользователей сайта?

Пароли пользователей сайта необходимо хранить в базе данных в защищенном виде хэшировав их с помощью: sha1(), crypt(), password_hash().

Как получить одинаковые значения в поле MySQL?

Есть таблица product . Необходимо получить все одинаковые значения из поля vendor .

Как программисту провалить собеседование


Поговорим о том, какие действия и ошибки обеспечат провал на собеседовании. Что написать в резюме, что сказать, как себя вести, чтобы наверняка отпугнуть работодателя?
Если вы еще не программист, но хотите им стать, рекомендуем пройти онлайн-курс по основам программирования. Это бесплатно!

Самые популярные ошибки при составлении резюме

Сергей Дмитриченко, основатель GMS Services, сооснователь AmazingHiring:

«Часто талантливые программисты не любят много писать. Хороший код должен содержать минимально возможное количество строк. При составлении резюме — это не всегда верно. Здорово, если описание опыта содержит несколько предложений о проектах, в которых вы участвовали, зоне ответственности, используемых технологиях и результатах работы. Если компания, в которой вы работаете, не очень известная, лучше добавить одно-два предложения о том, чем она занимается. Если имя на слуху — достаточно названия и ссылки на сайт.

Бывает, что при составлении резюме, разработчик ориентируется на технического специалиста. Например, такое описание опыта разработчика драйверов под операционную систему windows: C/C++, Asm, x86, x64, DDK, WDF, WDM, не всем рекрутерам позволит распознать правильного кандидата. С точки зрения же программиста — этого вполне достаточно, чтобы понять специализацию. Пояснение „заклинаний“ кратким текстом поможет рекрутерам быстрее найти вас и правильно оценить.

Программисты не всегда правильно преподносят свой опыт и ожидания от новой работы. Умение емко и четко рассказать о своем опыте, расставить правильные акценты — важная часть интервью. Отдельная тема — ответ на вопрос „чего вы ждете от новой работы?“, часто его сложно добиться. Важно помнить всем известную истину: собеседование — это двойная продажа (компания продает себя кандидату и наоборот). Если вы согласились на интервью, поищите информацию о компании, будьте вежливы и доброжелательно настроены, проявляйте заинтересованность, будьте пунктуальны.

Мастер Йода рекомендует:  Введение в компьютерную графику от ведущих университетов мира

Онлайн-репутация становится все более важным критерием найма. Высокий рейтинг на Stackoverflow, Kaggle, открытые репозитории на GitHub — информация, которую полезно добавлять в резюме. Она может позволить компаниям быстрее понять ваш профессиональный уровень и, возможно, сразу позвать на техническое интервью, вместо выполнения входного тестового задания».

Галина Денина, руководитель HR-службы Redmadrobot:

«Резюме стоит составлять, как минимум, отталкиваясь от того, в компанию какого профиля человек хочет устроиться — занимающуюся аутсорс-разработкой или продуктовую. Важно правильно расставлять акценты и ни в коем случае не игнорировать сопроводительное письмо, именно в нем можно сакцентировать внимание рекрутера на том, что соискатель считает важным и релевантным. В Redmadrobot самая частая причина отказа кандидатам — слабые технические навыки.

Вовсе не нужно упражняться в остроумии и снабжать резюме искрометными (как вам кажется) шутками. Такие попытки выделить свое резюме могут поднять настроение сотрудникам HR-отдела, но не сделают его резюме более заметным с профессиональной точки зрения. Компаниям нужны профессионалы, а чувство юмора — это soft skill, который вы сможете ненавязчиво продемонстрировать на финальном испытании. Вообще с юмором нужно быть аккуратнее — вас могут неправильно понять или не воспринять серьезно».

5 способов не пройти собеседование

Павел Настобурко, руководитель AppLead:

  1. Проситься с первого месяца пребывания в компании работать дома или удаленно;
  2. Не иметь никакого представления, о том, чем занимается компания в которую пригласили на собеседование;
  3. Не уделять внимание тестовому заданию, с помощью которого работодатель проверит уровень знаний программиста-соискателя. Частое заблуждение думать о том, что потом результат тестового задания соискателя используют в дальнейшей работе компании.
  4. Спешить или всячески показывать, что для собеседования выделили только 10 минут;
  5. Быть неспособным сформулировать должность на которую пришел. Вот это действительно очень раздражает.

Топ провальных «кейсов»

Екатерина Артюшина, HR-директор СимбирСофт:

«В нашей практике был кейс несанкционированного собеседования. Кандидат не просто пришел в компанию без предварительного приглашения или резюме, так еще и с мамой! Молодой человек был выпускником ИТ-специальности вуза, с хорошими оценками, но говорила на собеседовании только мама. Когда дошло до технической части, он почему-то не прошел, то ли давление со стороны навредило, то ли он просто не привык общаться самостоятельно».

Юрий Кондратьев, генеральный директор кадрового агентства Lightman Solutions:

«Могу вспомнить несколько случаев провального (для кандидатов) собеседования на технические позиции. Например, была встреча с разработчиком Java, на встречу он пришел с женой, сел в переговорной вместе с ней, когда его вызвали. Само собой, встреча приняла несерьёзный оборот. Провальность собеседования в самом способе проведения. Другой случай, программист 1С пришел, чтобы написать тест. Тест оказался сложным, и вместо ответов на большинство вопросов он тезисно писал рассуждения о жизни и нелегкой судьбе соискателя».

Елена Крачковская, руководитель административного отдела Группы Компаний ХОСТ:

«У нас был кандидат на разработчика Java. Он успешно выполнил тестовое задание, и мы пригласили его на собеседование. Тут-то и выяснилось, что задание за него выполнял дядя, а кандидат просто смотрел на «расшаренный» рабочий стол. На собеседовании он не ответил на самые простые вопросы по заданию и потом долго удивлялся, почему его не взяли на работу — „задание-то он выполнил“».

Тем, кто хочет разобраться в веб-разработке, рекомендуем профессию «Веб-разработчик» от GeekBrains.

Поговорим о том, какие действия и ошибки обеспечат провал на собеседовании. Что написать в резюме, что сказать, как себя вести, чтобы наверняка отпугнуть работодателя?
Если вы еще не программист, но хотите им стать, рекомендуем пройти онлайн-курс по основам программирования. Это бесплатно!

Самые популярные ошибки при составлении резюме

Сергей Дмитриченко, основатель GMS Services, сооснователь AmazingHiring:

«Часто талантливые программисты не любят много писать. Хороший код должен содержать минимально возможное количество строк. При составлении резюме — это не всегда верно. Здорово, если описание опыта содержит несколько предложений о проектах, в которых вы участвовали, зоне ответственности, используемых технологиях и результатах работы. Если компания, в которой вы работаете, не очень известная, лучше добавить одно-два предложения о том, чем она занимается. Если имя на слуху — достаточно названия и ссылки на сайт.

Бывает, что при составлении резюме, разработчик ориентируется на технического специалиста. Например, такое описание опыта разработчика драйверов под операционную систему windows: C/C++, Asm, x86, x64, DDK, WDF, WDM, не всем рекрутерам позволит распознать правильного кандидата. С точки зрения же программиста — этого вполне достаточно, чтобы понять специализацию. Пояснение „заклинаний“ кратким текстом поможет рекрутерам быстрее найти вас и правильно оценить.

Программисты не всегда правильно преподносят свой опыт и ожидания от новой работы. Умение емко и четко рассказать о своем опыте, расставить правильные акценты — важная часть интервью. Отдельная тема — ответ на вопрос „чего вы ждете от новой работы?“, часто его сложно добиться. Важно помнить всем известную истину: собеседование — это двойная продажа (компания продает себя кандидату и наоборот). Если вы согласились на интервью, поищите информацию о компании, будьте вежливы и доброжелательно настроены, проявляйте заинтересованность, будьте пунктуальны.

Онлайн-репутация становится все более важным критерием найма. Высокий рейтинг на Stackoverflow, Kaggle, открытые репозитории на GitHub — информация, которую полезно добавлять в резюме. Она может позволить компаниям быстрее понять ваш профессиональный уровень и, возможно, сразу позвать на техническое интервью, вместо выполнения входного тестового задания».

Галина Денина, руководитель HR-службы Redmadrobot:

«Резюме стоит составлять, как минимум, отталкиваясь от того, в компанию какого профиля человек хочет устроиться — занимающуюся аутсорс-разработкой или продуктовую. Важно правильно расставлять акценты и ни в коем случае не игнорировать сопроводительное письмо, именно в нем можно сакцентировать внимание рекрутера на том, что соискатель считает важным и релевантным. В Redmadrobot самая частая причина отказа кандидатам — слабые технические навыки.

Вовсе не нужно упражняться в остроумии и снабжать резюме искрометными (как вам кажется) шутками. Такие попытки выделить свое резюме могут поднять настроение сотрудникам HR-отдела, но не сделают его резюме более заметным с профессиональной точки зрения. Компаниям нужны профессионалы, а чувство юмора — это soft skill, который вы сможете ненавязчиво продемонстрировать на финальном испытании. Вообще с юмором нужно быть аккуратнее — вас могут неправильно понять или не воспринять серьезно».

5 способов не пройти собеседование

Павел Настобурко, руководитель AppLead:

  1. Проситься с первого месяца пребывания в компании работать дома или удаленно;
  2. Не иметь никакого представления, о том, чем занимается компания в которую пригласили на собеседование;
  3. Не уделять внимание тестовому заданию, с помощью которого работодатель проверит уровень знаний программиста-соискателя. Частое заблуждение думать о том, что потом результат тестового задания соискателя используют в дальнейшей работе компании.
  4. Спешить или всячески показывать, что для собеседования выделили только 10 минут;
  5. Быть неспособным сформулировать должность на которую пришел. Вот это действительно очень раздражает.

Топ провальных «кейсов»

Екатерина Артюшина, HR-директор СимбирСофт:

«В нашей практике был кейс несанкционированного собеседования. Кандидат не просто пришел в компанию без предварительного приглашения или резюме, так еще и с мамой! Молодой человек был выпускником ИТ-специальности вуза, с хорошими оценками, но говорила на собеседовании только мама. Когда дошло до технической части, он почему-то не прошел, то ли давление со стороны навредило, то ли он просто не привык общаться самостоятельно».

Юрий Кондратьев, генеральный директор кадрового агентства Lightman Solutions:

«Могу вспомнить несколько случаев провального (для кандидатов) собеседования на технические позиции. Например, была встреча с разработчиком Java, на встречу он пришел с женой, сел в переговорной вместе с ней, когда его вызвали. Само собой, встреча приняла несерьёзный оборот. Провальность собеседования в самом способе проведения. Другой случай, программист 1С пришел, чтобы написать тест. Тест оказался сложным, и вместо ответов на большинство вопросов он тезисно писал рассуждения о жизни и нелегкой судьбе соискателя».

Елена Крачковская, руководитель административного отдела Группы Компаний ХОСТ:

«У нас был кандидат на разработчика Java. Он успешно выполнил тестовое задание, и мы пригласили его на собеседование. Тут-то и выяснилось, что задание за него выполнял дядя, а кандидат просто смотрел на «расшаренный» рабочий стол. На собеседовании он не ответил на самые простые вопросы по заданию и потом долго удивлялся, почему его не взяли на работу — „задание-то он выполнил“».

Тем, кто хочет разобраться в веб-разработке, рекомендуем профессию «Веб-разработчик» от GeekBrains.

Типичные вопросы на собеседовании javascript разработчика

Для успешного прохождения на должность javascript developera рекомендуем вам почитать эту статью и изучить все важные моменты и подводные камни.

Первое что всегда спрашивают это опыт работы, поэтому если у вас нет опыта работы в front end и js рекомендуем поискать «подработку» вначале у нас на сайте и так же изучить типичные и возможные вопросы на собеседовании которые вам могут задать интервьюеры.

Общие вопросы по front-end

  • Методологии и подходы написания CSS?
  • GruntJS,Gulp, Bower, npm — для чего используются?
  • RequireJS (или подобные) — зачем нужны?
  • Тестирование: какие библиотеки знаете для тестирования, что использовали на практике? (какие подводные камни были и тд)
  • Как логировать JS ошибки с клиента, какие «подводные» камни?
  • Какие фреймворки знаете/использовали на практике (если не использовали, то почему), как они устроены внутри.
  • Паттерны проектирования
  • Другие вопросы из области вёрстки (css, html)

Общие вопросы по javascript

Eсть ли разница между window и document?

Ответ: Да. У JavaScript есть глобальный объект и всё происходит через него. window – тот самый объект, который хранит глобальные переменные, функции, местоположение, историю. Всё находится внутри него, setTimeout, XMLHttpRequest, console и localStorage также являются частью window. Аналогично дело обстоит и с document, который является свойством объекта window и представляет DOM. Все ноды – это часть document, следовательно, вы можете использовать getElementById или addEventListener для document. Но обратите внимание, что этих методов нет в объекте window.

Вызываются ли document.onload и window.onload одновременно?

window.onload вызывается, когда DOM готов и весь контент, включая картинки, стили, фреймы и т.д. загружен. document.onload вызывается когда дерево DOM выстроено, но до момента, как подгружаются картинки, стили и пр.

Как предотвратить нажатие по ссылке?

Использовать preventDefault() внутри обработчика события.

Как остановить дальнейшее распространение события?

Могу ли я удалить удалить обработчик события с элемента?

Да. target.removeEventListener(‘click’, handler)

Как я могу запустить обработчик в фазе захвата, а не в фазе всплытия?

В методах addEventListener и removeEventLister есть третий опциональный параметр. Вы можете установить его в true или false в зависимости от того хотите или нет использовать фазу захвата.

Каким образом можно предотвратить множественный вызов обработчика для одного события?

Если слушатель события прикреплён к одному и тому же типу (click, keydown, и т.д.) элемента, вы можете вызвать event.stopImmediatePropagation() в первом обработчике и другие не будут выполнены.

Самовызывающиеся функции.

Тоже весьма частый вопрос на собеседованиях. Ещё иногда подходят к этому со стороны jQuery: «Почему все плагины обособлены в конструкцию (function() <>)(); ?».

Как поменять контекст функции. Частичное применение функции.

Тут нужно описать разницу между .call , .apply и .bind и некоторых стандартных решений на уровне языка.

Разница между операторами == и ===

Оператор == сравнивает на равенство, а вот === — на идентичность. Плюс оператора === состоит в том, что он не приводит два значения к одному типу. Именно из-за этого он обычно и используется.

Напишите регулярное выражение для проверки строк соответствующих формату даты dd.mm.yyyy. или подобное.

Каков будет результат выполнения следующего кода:

Что вернет выражение +new Date()? Чем отличается от Date.now().

Отличный вопрос. Ответ в том, что +new Date(); создаст экземпляр объекта Date и благодаря + переведет его в числовой формат. Во втором случае вызовется статический метод конструктора, который является более приоритетным, т.к. во-первых он не требует создания экземпляра, а во-вторых является более понятным.

Напишите функцию принимающую строку с именем файла и возвращающую расширение (фрагмент после последней точки)

В чём опасность использования for .. in для объекта или массива?

For..in итерируется по всем полям объекта [b]и его прототипов[/b] (т.е. проходит по всей цепочке прототипов).

В приведённом в вопросе коде проблем как таковых нет, но они могут появиться при использовании библиотек/полифиллов, которые переопределяют или создают новые свойства для прототипов стандартных конструкторов (таких как Array или Object).

Чтобы избежать таких проблем, можно воспользоваться методом

Модифицированный пример, который работает корректно:

Примечание:
Многие инструменты для статического анализа JavaScript кода считают for .. in без фильтрации с hasOwnProperty не безопасным.

Какие языковые конструкции в javascript создают scope? Что произойдет при выполнении следующего куска кода?

В javascript только функции создают новый scope.

Код в вопросе аналогичен следующему:

Что такое hoisting или «поднятие переменных»? Что произойдет при выполнении следующего куска кода?

Интерпретатор JavaScript всегда перемещает («поднимает») объявления функций и переменных в начало области видимости (вверх текущего скрипта или функции). Код в вопросе аналогичен следующему:

В консоль будет напечатано:

Как добавлять элементы на HTML страницу динамически ?

Создание новых элементов осуществляется с помощью document.createElement(tagName);

После создания элемента его нужно присоединить к родительскому элементу с помощью .appendChild(node);

В чем разница между Object.getOwnPropertyNames() и Object.keys()

Object.getOwnPropertyNames() возвращает перечислимые и не перечислимые свойства из объекта или массива.

Object.keys() возвращает перечислимые свойства из объекта или массива.
Пример:

С помощью какой конструкции языка можно управлять потоком выполнения скрипта и отслеживать ошибки?

Это возможно с помощью конструкции try<>. catch<>

Почему вызов a(); происходит успешно, а вызов b(); выдает ошибку?

Функция а() инициализируется на этапе загрузки скрипта, как бы «всплывает вверх» а функция б инициализируется, когда объявляется переменная b

Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных?

Глобальная переменная — переменная, которая доступна (видима) во всем документе, в отличии от локальной (ограничена рамками блока программного кода, внутри которого она определена)

Большинство JavaScript разработчиков избегает использования глобальных переменных. Одна из причин — возможный конфликт имен глобальных и локальных переменных. Так же код использующий глобальные переменные может быть тяжелее сопровождать и тестировать.

Что такое замыкания (closure) в JavaScript?

Простыми словами это внутренняя функция, т.е. функция в функции.
Замыканием (closure) называют потому, что после выполнения родительской или внешней функции, код внутренней все еще «живет» в интерпретаторе, и его можно выполнить. Ошибок не возникнет даже если внутренняя функция (замыкание) будет использовать переменные из внешней функции.
Например, эту особенность можно использовать для создания функций обработчиков событий:

Вопросы, относящиеся к jQuery

Расскажите про $.Deferred.

Как создать утечку памяти с помощью jQuery.

jQuery.extend

Рассказать всё про функцию, возможно попросят написать аналог.

5 вопросов по JavaScript на которые вы должны знать ответ

На собеседованиях часто любят задавать однотипные вопросы, ответы на которые уже давно выучены.

Сегодня же мы рассмотрим те вопросы, про которые вспоминают достаточно редко.

1. Чему равно foo.x ?

Этот вопрос задают в топ 3% компаний (Apple, Google, Facebook).

Главное на что здесь стоит обратить внимание, так это то, что foo на которую ссылается foo.x “устанавливается” перед тем как foo изменится. foo.x ссылается на старое значение foo.

  • Let lref be the result of evaluating LeftHandS >rref be the result of evaluating AssignmentExpression.

Это значит, что в старом foo появиться новое свойство x равное . А в новое foo запишется .

Значение старого foo находиться в bar :

Так как при дальнейшем выводе foo.x наше foo ссылается на его новое значение, в котором отсутствует x , то соответственно foo.x будет не определенно — undefined .

2. Напишите функцию сложения вида add(num1)(num2)..

Примечание: Количество слагаемых не ограничено

В оригинале это задача решается таким образом:

Но потом вам ставят одно условие.

Убрать в конце лишние скобки

Теперь задача усложнилась. А решение кроется в переопределении метода valueOf .

Когда мы вызываем console.log , он ожидает увидеть String, если его там нет, то он попытается сделать из полученного значения String.

В примере выше после выполнения add(2)(3) возвращается function, которую console.log будет превращать в String, в ходе этих действий будет вызван метод valueOf для преобразования function к примитиву, а так мы переопределили данный метод, то он вернёт наше значение sum вместо стандартного.

Подробнее об этом тут.

Данный пример не работает со всеми console.

3. Что выведется в консоль ? Объясните почему.

Что же происходит? Когда у объекта устанавливается новое свойство, то JavaScript неявно сделает stringify значения. В коде выше b и c являются объектами, следовательно они оба конвертируются в «[object Object]» (String). Так как stringify значения равны, то получается, что мы присваиваем новое значение одному и тому же свойству.

Равносильно, что написать:

4. Напишите простую функцию, чтобы узнать равен ли один из входных параметров 3.

Тут делается упор на проверку знаний об arguments , но иногда заходят ещё дальше и просят рассказать каким образом работает Array.prototype.slice.call(arguments).

Как мы знаем, arguments не массив, а обычный объект, поэтому у него нет такого полезного метода как indexOf. Для этого используется Array.prototype.slice.call(arguments), который делает из argument — > array.

Но всё же, как он работает ?

.call() и . apply() позволяют явно установить this в функции. И если передать argument как this, то slice будет работать с ним как с обычным массивом.

А вот интересный эксперимент:

5. Объедините два массива с вложенностью

[1, [1, 2, [3, 4]], [2, 4]] -> [1, 1, 2, 3, 4, 2, 4]

Задачу можно решать различными способами. Обычно хотят узнать знает ли собеседуемый такой метод как reduce.

Идея заключается в том, чтобы обойти все элементы исходного массива и его “под массивов” с целью вернуть найденные значения в новый массив. Это происходит рекурсивно пока мы не дойдём до последнего элемента.

Так же с формированием нового массива нам помогает concat .

Если эта статья оказалась для вас полезной, пожалуйста поставьте ❤️, так остальные люди смогут найти её!

Добавить комментарий