Вопросы на собеседовании для 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 .

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

Разбор и решения

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

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

Главное — тщательная подготовка к вашему собеседованию

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

Главное — готовиться заранее. Проверьте, насколько хорошо вы помните алгоритмы и структуры данных, и подтяните знания в тех областях, которые вам не слишком хорошо знакомы. Есть немало онлайн-платформ, которые помогут подготовиться к прохождению собеседований. Советуем GeeksforGeeks, Pramp, Interviewing.io и CodeSignal.

Стоит научиться проговаривать решение вслух. Желательно рассказывать соискателям о том, что вы делаете, а не просто писать на доске (или же набирать код в компьютере, тоже молча). Таким образом, если в коде вы допустите ошибку, но ход решения будет в общем правильным, можно увеличить свои шансы на успех.

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

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

Шаблонные задачи на JavaScript

Вероятно, какие-то из этих задач уже вам уже знакомы. Вы либо проходили собеседования, где нужно было решать что-то подобное, либо практиковались на них во время изучения JavaScript. Ну а теперь пришло время решить их еще раз, причем с подробным объяснением процесса.

Палиндром

Палиндром — слово, предложение или последовательность символов, которая абсолютно одинаково читается как в привычном направлении, так и в обратном. К примеру, “Anna” — это палиндром, а “table” и “John” — нет.

Постановка

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

Разбираем задание

Основная идея здесь — перевернуть строку в обратном направлении. Если «реверсная» строка полностью идентична исходной, значит, мы получили палиндром и функция должна вернуть значение true. Если же нет — false.

Решение

Вот код, который позволяет решить палиндром.

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

Второй шаг — реверс строки. Это сделать несложно: необходимо преобразовать ее в массив посредством метода .split() (библиотека String). Потом мы переворачиваем массив, используя .reverse() (библиотека Array). Последний этап — преобразование обратного массива в строку при помощи .join() (библиотека Array).

Теперь все, что нужно, — сравнить «обратную» строку с исходной, вернув результат true или false.

FizzBuzz

Одна из самых популярных на собеседованиях задач.

Постановка

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

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

Пример

Результат

Разбираем задание

Главное здесь — способ поиска кратных чисел с использованием JavaScript. Его можно реализовать при помощи оператора модуля или же остатка — %, который позволяет показать остаток при делении двух чисел. Если остаток 0, это означает, что первое число кратно второму.

12 % 5 // 2 -> 12 is not a multiple of 5
12 % 3 // 0 -> 12 is multiple of 3

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

Решение

Оптимальным решением будет следующий код:

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

Анаграмма

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

Постановка

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

Разбираем задание

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

finder → f: 1 friend → f: 1
i: 1 r: 1
n: 1 i: 1
d: 1 e: 1
e: 1 n: 1
r: 1 d: 1

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

Есть и другие условия:

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

Решение

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

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

Поиск гласных

Достаточно простая задача, которая часто попадается на собеседованиях.

Постановка

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

Вопросы на собеседовании для JavaScript-программиста

Идеальное руководство для прохождения интервью JavaScript- разработчика.

Интервью с JavaScript (JS) непросты. Я принимаю это, вы принимаете его, и каждый делает это. Количество возможностей вопросов, которые можно задать в интервью для JavaScript, велико. Как можно пройти интервью JS? Когда начать? Эта статья — попытка проинструктировать всех начинающих разработчиков JavaScript, чтобы углубить их знания JS, зная основные концепции. Это первые шаги, которые нужно предпринять, по крайней мере, для интервью JS. Если я кандидат, я хорошо готовлю эти концепции. Если я интервьюер, я предполагаю, что вы знаете, что бы продолжить дальше.

Если вы не знаете автора,то он является разработчиком полного стека с опытом работы с Python, Go & JavaScript. Недавно он написал книгу- «Building RESTful Web services with Go»!

Это руководство является отправной точкой, но не является толчком для разработчика JS. Это его / ее обязанность готовиться к гораздо более жестким интервью. Им также необходимо иметь в виду, что вопросы собеседования также могут быть связаны с доменом и технологиями, которые они работали (например: React JS, WebPack, Node JS и т. Д.).

Здесь мы представляем основные элементы JS, которые вы должны хорошо разбираться, чтобы назвать себя хорошим разработчиком JavaScript.

Прекрасный разработчик JS может быть отличным разработчиком React, но обратное не гарантируется. К сожалению, JS имеет плохую репутацию для производства бесчисленных сценаристов с отсутствием дисциплины (частично верно). JavaScript позволяет разработчикам делать что-либо, без полного понимания. Это тоже забавно. Немногие великие программисты на JavaScript, такие как Джон Ресиг (создатель, jQuery), Брендан Эйч (создатель, JS), и Ларс Бак (команда Google Chrome) понимали язык от и до. Успешный программист JS всегда читает простой JS-код из библиотек. Многие говорят, что очень сложно найти хорошего разработчика JavaScript.

«Виртуальные машины — странный зверь. Идеального решения нет, вместо этого вы оптимизируете «идеальное место». Там много мастерства. Это долгая игра, вы не можете сгореть »- Ларс Бак, Google

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

console.log(2.0 == “2” == new Boolean(true) == “1”)

9 человек из 10 говорят, что это печатает false . Но он печатает true . Почему? См. здесь.

JavaScript- язык жесткий. Мы не можем сделать многого, если интервьюер слишком умный, чтобы задавать такие вопросы, как выше. Но что мы можем сделать? Глубоко изучите эти одиннадцать основных элементов, чтобы превратить JS-интервью, в благоприятное для вас.

1) Хорошо понимать функции JS

Функции — это сливки JavaScript. Это граждане первого класса. Без глубокого знания функций JS, ваши знания сильно ограничены. Функция JS больше чем, просто функция. В отличие от других языков, функция может быть назначена переменной, переданной как аргумент другой функции и также может быть возвращена из другой. Следовательно, это гражданин первого класса в JS.

Я не собираюсь объяснять, что здесь является функцией, но знаете ли вы, что малые вещи тоже могут вас удивить? Как это!

Этот фрагмент кода выведет 25. True! См. Второй фрагмент кода

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

TypeError: square is not a function

В JavaScript, если вы определяете функцию как переменную, имя переменной будет поднято (hoisted), и вы не сможете получить доступ, пока выполнение JS не встретит её объявления . Вы не удивлены?

Оставим это. Возможно, вы часто видели этот синтаксис где-то в некотором коде.

Почему люди делают такие странные вещи? Это функциональная переменная, которая имеет инкапсулированные переменные и функции, которые не загрязняют глобальную область. Библиотеки от jQuery до Lodash используют эту технику, чтобы предоставить вам переменные типа $ и т. Д.

То, что я здесь представил, — «учиться хорошо». Мы используем много тонких ловушек. Прочитайте хорошо написанную запись Mozilla о функциях. Functions

2) Понимание bind, apply и call

Эти функции вы можете увидеть во всех известных библиотеках. Они позволяют делать что-то названное currying, используя их мы можем скомпоновать функциональность в разные функции. Хороший разработчик JavaScript может рассказать вам о них в любое время дня и ночи.

В принципе, это прототип методов функций для изменения их поведения для достижения чего-то. Согласно Чаду, разработчику JS, использование похоже на это:

Мастер Йода рекомендует:  5 сервисов для проверки возраста домена

Бережный вызов (saving call)

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

Вы отправили библиотеку профессору. Теперь пришло время представить код, который вызывает эту математическую библиотеку.

Представляя образцы второго кода, вы нашли в рекомендациях, что профессор попросил вас использовать постоянный pi с точностью до пяти десятичных знаков. О Боже! Вы только что использовали 3.14, а не 3.14159. Теперь у вас нет возможности отправить библиотеку по истечении крайнего срока. Функция вызова — Call JS спасет вас. Просто вызвать .call() своему коду таким образом:

и функция принимает ваше новое значение pi на лету. Выведет:

Это сделает вашего профессора счастливым! Если вы заметили, функция вызова — Call принимает два аргумента:

  • Context — контекст.
  • Function arguments — аргументы функции.

Контекст — это объект, который заменяет это ключевое слово внутри функции области. Позже аргументы передаются как аргументы функции. Для Ex:

Вызов Call выглядит следующим образом:

Вы увидели, что эти аргументы функции передаются в качестве последующих аргументов после объекта контекста.

Apply точно также, только вместо аргументов передает список:

Если вы знаете call, вы знаете apply и наоборот. Теперь, что такое bind?

Bind придает новое значение данной функции. В случае с Bind функция не запускается мгновенно, как например Call или Apply.

Какая польза от Bind? Это позволяет нам вводить контекст в функцию, которая возвращает новую функцию с обновленным контекстом. Это означает, что эта переменная будет использоваться пользователем. Это очень полезно при работе с событиями JavaScript.

Вы должны знать эти три функции для создания функциональности в JavaScript.

3) Хорошо понимать области видимости JavaScript (И скрытые области также)

Область видимости (scope) JavaScript — это ящик пандоры. Сотни сложных вопросов интервью могут быть сформулированы из этой единой концепции. Существует три вида областей видимости (scope):

  • Global scope — глобальная
  • Local Scope/Function scope — локальная (функциональная).
  • Block scope(Introduced in ES6)- блочная. Представленная в ES6

Глобальная область — это то, что мы обычно делаем:

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

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

Функции и условия рассматриваются как блоки. Вышеприведенный пример должен предупредить 4, поскольку выполняются условные операторы. Но ES6 уничтожает область блоков переменных, и область охвата перешла в глобальную.

Теперь наступает просто магия области видимости (scope). Это может быть достигнуто с помощью закрытий (closures). Закрытие (closures) JavaScript — это функция, которая возвращает другую функцию.

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

Исполнение идет таким образом!

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

Область видимости (scope) JavaScript может доставить вам массу проблем! Стоит полностью понимать это.

4) Понимайте это ключевое слово well (глобальное, функциональное и предметное пространство — global, function and object scopes)

В JavaScript мы всегда составляем код с функциями и объектами. Если вы используете браузер, то в глобальном контексте он ссылается на объект окна (window object). Я имею в виду, что это будет оцениваться как true, если вы сейчас откроете консоль браузера и введите это.

Когда изменяется контекст и область видимости (scope) программных изменений, this в этом конкретном пункте изменяется соответствующим образом. Теперь см. this в локальном контексте:

Теперь у вас возникнет соблазн предсказать этот результат.

Нет, не будет. Потому что здесь this ссылается на глобальный объект. Помните, каков бы ни был родительский охват, он будет унаследован дочерним элементом. Таким образом, здесь будет выведен объект окна (window object). Три метода, которые мы обсуждали, фактически используются для установки this объекта.

Теперь идет последний тип this — this в области объекта. Вот так:

Я просто использовал синтаксис getter, который является функцией, которую можно вызвать как переменную.

Здесь this фактически относится к самому объекту. И this, как мы уже говорили ранее, ведет себя по-разному в разных местах. Это следует очень хорошо знать.

5) Хорошо понимать объекты (Object.freeze, Object.seal)

Многие из нас знают такие объекты.

Это пример объекта, в котором хранятся пары Key- ключи, Value — значения. Объекты JavaScripts имеют особое свойство хранить что-либо как значение. Это означает, что мы можем сохранить список, другой объект, функцию и т. д. В качестве значения. Почему бы и нет?

Вы можете создать объект таким образом:

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

Итак, какие еще мелочи об объектах, которые вы должны знать? Простую итерацию объекта, используя Object.keys.

Object.values возвращает список значений объекта.

Другими важными функциями для объекта являются:

  • Object.prototype(object)
  • Object.freeze(function)
  • Object.seal(function)

Object.prototype предоставляет более важные функции, которые имеют множество приложений. Некоторые из них:

Object.prototype.hasOwnProperty полезен, чтобы узнать, существует ли данное свойство / ключ в объекте.

Object.prototype.instanceof оценивает, является ли данный объект типом определенного прототипа (мы увидим их в следующем разделе, это функции).

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

Здесь мы пытаемся изменить значение свойства physics после замораживания объекта. Но JavaScript не позволит этого сделать. Мы можем определить, заблокирован ли данный объект или нет.

Object.seal немного отличается от freeze замораживания. Он позволяет изменять свойства, но не позволяет добавлять или удалять новые свойства или свойства.

Мы также можем проверить, закрыт ли данный объект, используя этот

Существует множество других важных функций / методов, доступных для функции Global Object. Найдите их здесь. Object

6) Хорошо понимать прототипное наследование — Prototypical Inheritance

В традиционном JavaScript существует концепция скрытого наследования. Это использование технологии прототипирования. Все новые class syntax , которые вы видите в ES5, ES6 — это просто синтаксическое представление для базового прототипироания, лежащего в основе ООП. Создание класса в JavaScript, выполняется с помощью функции.

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

Здесь можно усомниться в правильности. В классе нет свойства звука — sound property. Да! вряд ли определяется sound property. Но таким образом это предназначено для передачи дочерними классами, которые наследуют класс далее.

В JavaScript наследование достигается таким образом.

Я определил еще одну специальную функцию под названием Dog. Здесь, чтобы наследовать класс Animal, нам нужно выполнить функцию вызова call (мы обсуждали ее ранее) с передачей this и других аргументов. Мы можем создать экземпляр German Shepard.

Мы не назначаем имя и тип дочерней функции, мы вызываем супер функцию Animal и устанавливаем соответствующие свойства. Домашнее животное имеет свойства (имя, тип) родителя. Но как насчет методов. Наследуются ли они тоже? Давайте посмотрим!

Как же так? Почему это произошло? Это происходит потому, что мы не сказали JavaScript, чтобы наследовать методы родительского класса. Как это исправить?

Теперь method доступен. Мы можем проверить, что является классом данного объекта в JavaScript, используя функцию object.constructor. Давайте посмотрим, что предсавляет класс нашего питомца — pet.

Это расплывчато. Animal — родительский класс. Но какой именно тип pet ? Это Dog type. Это происходит из-за конструктора Dog class.

Эти четыре вещи, которые вы должны помнить о прототипическом наследовании.

  • Свойства класса связаны c this.
  • Методы класса связаны с прототипом объекта Object.prototype
  • Чтобы наследовать свойства, используйте функцию вызова call, передающую this объекта.
  • Чтобы наследовать методы, используйте Object.create для связывания прототипов родительского и дочернего
  • Всегда устанавливайте конструктор дочерних классов для получения правильного идентификатора его объектов.

В JS функция вызова — call и прототип объекта — Object.prototype обеспечивают наследование

7) Хорошо понимать обратные вызовы (callbacks) и обещания (promises)

Обратные вызовы (Callbacks)- это функции, выполняемые после выполнения операции ввода-вывода. Время, затрачиваемое на операцию ввода-вывода, может блокировать код, который не позволяет выполнять дальнейшее выполнение в Python / Ruby. Но в JavaScript из-за разрешенного асинхронного выполнения мы можем обеспечить обратные вызовы для асинхронных функций. Примером может служить вызов AJAX (XMLHttpRequest) из браузера на сервер, события, генерируемые мышью. клавиатуры и т. д. Пример

Здесь reqListener — это обратный вызов, который будет выполняться, когда запрос GET успешно возвращается.

Обещания (promises) — это аккуратные обертки для обратных вызовов, которые позволяют нам запускать асинхронный код элегантно. Я много обсуждал здесь обещания. Это также важный элемент, который должен быть известен всем в JS. Writing neat asynchronous Node JS code with Promises

8) Хорошо понимать регулярные выражения

У регулярных выражений много приложений. Обработка текста, соблюдение правил ввода данных и т. д. Разработчик JavaScript должен знать, как выполнять базовое Regex и решать проблемы. Regex — универсальная концепция. Мы здесь видим, как мы можем это сделать из JS.

Мы можем создать новое регулярное выражение, используя это

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

Существует несколько специальных классов символов, которые позволяют нам писать сложные регулярные выражения.

В RegEx существует много типов элементов. Некоторые из них:

  • Символы Ex:\ w — буквенно-цифровые, \ d — десятичные, \ D — не десятичные
  • Классы символов Ex: [x-y] в диапазоне от x до y, [^ x] не x
  • Квантификаторы Ex: +. * (Жадные и ленивые)
  • Границы Ex: ^ (начало ввода), $ (конец ввода)

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

Для получения дополнительной информации о регулярном выражении, пройдите по ссылке Quick-Start: Regex Cheat Sheet.

Наряду с exec существуют и другие функции, а именно match, search и, replace доступны для поиска строки в другой с использованием регулярных выражений. Но эти функции должны использоваться в строковых выражениях.

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

9) Хорошо понимать Map, Reduce и Filter

Функциональное программирование — это тема обсуждения в эти дни. Многие языки программирования включают в себя функциональные концепции, такие как lambdas, в их новые версии (пример: Java> 7). В JavaScript поддержка конструкций функционального программирования существует в течение длительного времени. Есть три основные функции, которые нам нужно глубоко изучить. Математические функции принимают некоторый входной (input) и обратный вывод (return output). Чистая функция всегда возвращает тот же вывод output) для данного ввода (input). Функции, которые мы обсуждаем сейчас, также являются чистыми.

Функция map доступна в массиве JavaScript. Используя эту функцию, мы можем получить новый массив, применив функцию преобразования для каждого элемента в массиве. Общий синтаксис для работы map массива JS:

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

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

Другими словами мы хотим выполнить определенные действия с каждым элементом массива.

reduce

Функция reduce урезает данный список до конечного результата. Мы также можем сделать то же самое, итерации массива и сохранение промежуточного результата в переменной. Но здесь это более чистый способ уменьшить массив до значения. Общий синтаксис для операции reduce JS:

accumulator сохраняет промежуточное и конечное значение. CurrentIndex , currentValue — это индекс и значение элемента из массива соответственно. initialAccumulatorValue передает это значение в аргумент аккумулятора.

Одним из практических приложений для reduce может быть сглаживание массива массивов. Сглаживание (Flattening) преобразует внутренние массивы в один массив. Для Ex:

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

filter

Это третий тип концепции функционального программирования. Он близок к map, поскольку он также обрабатывает каждый элемент в массиве и, наконец, возвращает другой массив (не возвращающий значение, как в сокращении). Длина фильтрованного массива может быть меньше или равна исходному массиву. Поскольку условие фильтрации, которое мы передаем, может исключать несколько / нулевых входов в выходном массиве. Общий синтаксис для работы filter JS:

Здесь elem — это элемент данных массива, и true / false следует возвращать из функции, чтобы указать включение / исключение фильтрованного элемента. Общим примером является фильтрация массива слов, который начинается и заканчивается заданными условиями. Предположим, мы должны отфильтровать массив слов, начинающийся с t и заканчивающийся на r.

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

10) Понимать шаблоны обработки ошибок

Это самый малозанятый фрагмент JavaScript для многих разработчиков. Я вижу, что очень немногие разработчики говорят об обработке ошибок. Хороший подход к разработке всегда тщательно переносить JS-код вокруг блоков try / catch.

Николас К. Закас (Nicholas C. Zakas), инженер UI в Yahoo, сказал в 2008 году: «Всегда предполагайте, что ваш код не удастся. Невозможно правильно обработать события! Запишите их на сервер. Брось свои ошибки.»

В JavaScript всякий раз, когда мы кодируем, мы всегда можем потерпеть неудачу. Для Ex:

Здесь мы попадаем в ловушку, говоря, что результаты всегда будут объектом JSON. Иногда сервер может сбой, и вместо результата возвращается null. В этом случае null [«posts»] выдаст ошибку. Правильное обращение может быть таким!

Функция logError предназначена для сообщения об ошибке на сервере. Вторая функция flashInfoMessage— это функция, которая отображает удобное для пользователя сообщение типа «Сервис недоступен в настоящее время» и т. д.

Николас говорит, что каждый раз, когда вы чувствуете, что-то неожиданное произойдет, вы будете ловить ошибки. Различают фатальные и нефатальные ошибки. Вышеприведенная ошибка связана с тем, что сервер backend упал, что является фатальным. Таким образом вы должны сообщить клиенту, что по какой-то причине служба отключена. В некоторых случаях это может быть не смертельным, но лучше уведомлять об этом. Чтобы создать такой код, сначала выведите ошибку, поймайте ее с событием ошибки на уровне объекта window , затем сделайте вызов API для регистрации этого сообщения на сервер.

Этот код в основном выполняет три функции:

  1. Слушайте ошибки на уровне окна (window).
  2. Всякий раз, когда возникает ошибка, делает вызов API (API call).
  3. Записывает ошибку на сервер.

Вы также можете использовать новую функцию Boolean (ES5, ES6), чтобы проверить, действительна ли переменная, а не null (или) не определена, прежде чем продолжить.

Всегда думайте, как обращаться с ошибками. Все может закончиться неудачей!

Другие вещи, чтобы знать (Hoisting, Event Bubbling)

Все вышеперечисленные концепции являются основными для разработчика JavaScript. Есть немного внутренних деталей, чтобы знать, что они могут быть действительно полезными. Вот как работает JavaScript-движок в браузере. Что такое Подъем -Hoisting и Событие Bubbling?

Hoisting

Подъем — это процесс выталкивания объявленных переменных в начало программы во время ее запуска. Для Ex:

Когда вы делаете что-то выше на языке сценариев, таком как Python, он выдает ошибку. Вы должны сначала определить что-то (переменную, функцию), а уже потом использовать это. Несмотря на то, что JS является языком сценариев, у него есть механизм подъема. В этом механизме, во время работы программы, во время работы с программой Java VM делает две вещи:

  1. Сначала сканируйте программу, соберите все объявления переменных и функций и назначьте для нее пространства памяти.
  2. Запустите программу сейчас, заполнив их любыми значения переменных если нет, заполните undefined

В приведенном выше фрагменте кода console.log печатает «undefined». Это потому, что в первом проходе собрана переменная foo. VM ищет любое значение, определенное для переменной foo. Этот подъем может привести ко многим ситуациям кода JavaScript, где код может вызывать ошибки в некоторых местах и использовать неопределенное значения по умолчанию, в другом. Вы должны знать подъем hosting , чтобы очистить ваш код от двусмысленности! Несколько примеров! Hoisting

Event Bubbling

Теперь рассмотрим событие (Event Bubbling)! По словам Аруна П, старшего инженера-программиста:

«Event Bubbling — это два способа распространения событий в API DOM HTML, когда событие происходит в элементе внутри другого элемента, и оба элемента зарегистрировали обработчик для этого события. Режим распространения событий определяет, в каком порядке элементы получают событие ».

При барботировании событие сначала захватывается и обрабатывается самим внутренним элементом, а затем распространяется на внешние элементы. С захватом процесс идет обратным образом. Обычно мы прикрепляем событие к обработчику, используя функцию addEventListener.

Третий аргумент useCapture — это ключ. Значение по умолчанию неверно. Таким образом, это будет пузырящая модель, в которой событие сначала обрабатывается самым внутренним элементом, и оно распространяется наружу, пока не достигнет родительского элемента. Если этот аргумент верен, он захватывает модель.

Для Ex: Bubbling Model

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

handler() => ulHandler() => divHandler()

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

Порядок выполнения обработчиков будет следующим:

divHandler => ulHandler() => handler()

Вы должны понимать, что пузырь событий (event bubbling) (независимо от направления движения к родительскому элементу или к ребенку) должным образом реализует пользовательские интерфейсы (UI), чтобы избежать нежелательного поведения.

Это основные понятия JavaScript. Как я уже упоминал ранее, дополнительная информация о них, ваш опыт работы и знания, подготовка поможет вам пройти интервью с JavaScript. Всегда продолжайте учиться. Следите за последними событиями (ES6). Копайте глубже в различных аспектах JavaScript, таких как двигатель V6, тесты и т. д. Здесь представлено несколько видео ресурсов, которые научат вас многим вещам.

Вопросы на собеседовании для JS программиста

Table of Contents

  1. 2^8
  2. 2^16, битовое представление.
  3. -1, битовое представление.
  4. Скалярное произведение.
  5. Векторное произведение.
  6. Сколько будет 2^32 ?
  7. Чем отличается ++i от i++
  8. Tree супротив list, как структуры данных.
  9. Hash как структура данных.
  10. Производительность, что такое и про что O(N).
  11. N*log(N) в дереве, и почему оно так.

Секция «биты это вам не байты»

  1. -2, битовое представление.
  2. Как реализовать neg.
  3. Как реализовать abs.
  4. Как можно больше способов реализовать x/2
  5. Как можно больше способов реализовать x*3.
  6. Как реализовать fabs.
  7. Как реализовать float->int, «быстрый» float->int если знаем range.
  8. Сравнительные характеристики разных битовых операций (по производительности).

Секция «матемачиха и линейное щастье»

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

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

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

Мастер Йода рекомендует:  Как найти первую работу в IT план действий для начинающих

Общие вопросы по 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

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

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

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

Бывает, что от нас требуют восьмилетний опыт работы с языком 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. Фактические вопросы могут отличаться от собеседования, но понятия и темы, как правило, схожи. Я надеюсь, что вы хорошо провели время, тестируя свои знания. В случае, если вы не смогли ответить на все вопросы, не волнуйтесь: нет ничего, что изучение и опыт не могут исправить.
Если у вас были другие вопросы на собеседовании, не стесняйтесь поделиться ими с нами. Это может помочь многим разработчикам.

Вопросы на собеседовании по javascript

Статья ориентирована на начинающих и junior-разработчиков. Однако наверняка каждый человек, использующий JS, найдёт в этой подборке что-нибудь интересное для себя.

Вопросы

  1. Сколько типов данных включает в себя javascript?
  2. Что такое DOM?
  3. Что такое цикл событий?
  4. Что такое замыкание?
  5. Как работает ключевое слово this?
  6. Каково значение и каковы преимущества включения «строгого использования» в начале исходного файла JavaScript?
  7. Что такое NaN? Каков его тип? Как вы можете надежно проверить, если значение равно NaN?
  8. Что будет выводить код ниже? Поясните свой ответ.

Ответы

  1. JavaScript включает в себя 7 типов данных: Boolean, Null, Undefined, Number, String, Symbol, Object.
  2. DOM — это программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML и XML документов.
  3. Цикл событий — это очередь функций обратного вызова. Когда выполняется асинхронная функция, функция обратного вызова помещается в очередь. Механизм JavaScript не начинает обрабатывать цикл обработки событий, пока не будет выполнен код после выполнения асинхронной функции.
  4. Замыкание — это функция, объявленная внутри другой функции и имеющая доступ к переменным внешней (вмещающей) функции. Замыкание имеет доступ сразу к трем областям видимости:
    1. к своей собственной области видимости (переменные, объявленные внутри замыкания); 2. к области видимости внешней функции (переменные, объявленные внутри внешней функции); 3. к глобальной области видимости.
  5. Ключевое слово this используется Для доступа к текущему объекту из метода.
  6. Короткий и самый важный ответ здесь заключается в том, что use strict — это способ принудительного применения более строгого анализа и обработки ошибок в вашем коде. Ошибки кода, которые в противном случае были бы проигнорированы или не были бы выполнены молча, теперь будут генерировать ошибки или генерировать исключения.
  7. Свойство NaN представляет значение, которое «не является числом». Это специальное значение является результатом операции, которая не может быть выполнена либо потому, что один из операндов был не числовым (например, «abc» / 4), либо потому, что результат операции не числовой.
  8. Образованным ответом на этот вопрос будет просто: «Вы не можете быть уверены. Он может вывести 0.3 и true, а может и нет. Все числа в JavaScript обрабатываются с точностью до плавающей запятой, и поэтому не всегда могут дать ожидаемые результаты ». Приведенный выше пример — классический случай, демонстрирующий эту проблему. Удивительно, но он выведит:

Заключение

Эти вопросы могут и не быть, а могут и быть. Лучше их всех выучить и понять, как все это работает.

Вопросы на собеседовании для JS программиста

Table of Contents

  1. 2^8
  2. 2^16, битовое представление.
  3. -1, битовое представление.
  4. Скалярное произведение.
  5. Векторное произведение.
  6. Сколько будет 2^32 ?
  7. Чем отличается ++i от i++
  8. Tree супротив list, как структуры данных.
  9. Hash как структура данных.
  10. Производительность, что такое и про что O(N).
  11. N*log(N) в дереве, и почему оно так.

Секция «биты это вам не байты»

  1. -2, битовое представление.
  2. Как реализовать neg.
  3. Как реализовать abs.
  4. Как можно больше способов реализовать x/2
  5. Как можно больше способов реализовать x*3.
  6. Как реализовать fabs.
  7. Как реализовать float->int, «быстрый» float->int если знаем range.
  8. Сравнительные характеристики разных битовых операций (по производительности).

Секция «матемачиха и линейное щастье»

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