title

title


1) фронт

  • Что такое DOCTYPE и зачем он нужен?

DOCTYPE — это определение типа документа (Document Type Definition (DTD)), правила, в соответствии с которыми осуществляется проверка конкретного документа (веб-страницы) XML или (X)HTML. Благодаря этой записи браузер определяет, какая в данном документе используется версия DTD. А нужен он для того, чтобы браузеры правильно отображали разметку документа. Если не указан DOCTYPE, то браузер будет добавлять «отсебятину», причём каждый браузер будет добавлять свою «отсебятину». В результате ни о какой кроссбраузерности не может и речи идти.

  • Назовите две наиболее важные для JavaScript-разработчика парадигмы программирования?

JavaScript – мультипарадигмальный язык, поддерживающий императивное/процедурное программирования наряду с ООП и функциональным программированием. JS поддерживает ООП с прототипным наследованием.

Желательно упомянуть:

1. Прототипное наследование (также: прототипы, объектные ссылки)2. Функциональное программирование (также: замыкания, функции первого класса, лямбды)

  • В чем заключается разница между классовым и прототипным наследованием?

Классовое наследование: экземпляры наследуются от классов, создаются подклассовые отношения (иерархическая систематизация классов). Экземпляры реализуются через конструктор функции, через дескриптор new. Экземпляр класса может не содержать дескриптор class начиная с ES6.

Прототипное наследование: экземпляры наследуются напрямую от других объектов, реализуются через фабрики или Object.create() и экземпляры могут быть составлены из множества различных объектов для упрощения выборочного наследования. Прототипное наследование более простое и гибкое, нежели классовое.

Хорошо упомянуть:

1. Классы: тесные связи, иерархия2. Прототипы: конкатенативное наследование, делегирование, функциональное наследование, композиция

  • Каковы плюсы и минусы функционального и объектно-ориентированного программирования?

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

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

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

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

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

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

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

Хорошо упомянуть:

1. Проблемы общих состояний, нежелательного поведения
2. Возможности ФП по радикальному упрощению кода программ
3. Разность в сложности изучения
4. Побочные эффекты и их влияние на надежность программ
5. Сложность изменения и общая хрупкость базы ОО кода в сравнении с таковой в функциональном стиле

  • Что такое двусторонняя связь данных и однонаправленный поток данных и в чем разница между ними?

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

Однонаправленный поток данных означает, что только модель – источник истины. Изменения в интерфейсе запускают сообщения, которые сигнализируют пользователю о намерении модели (или «store» в терминах React). Смысл в том, что данные всегда идут в одном направлении, что облегчает понимание.

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

Хорошо упомянуть:

1. React – новый канонический пример однонаправленного потока данных, так что упоминание Реакта будет хорошей идеей. Cycle.js — еще одна популярная реализация однонаправленного потока данных.

2. Angular – популярный фреймворк, использующий двустороннюю привязку.

  • Каковы плюсы и минусы монолитной архитектуры и микросервисов?

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

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

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

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

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

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

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

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

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

Хорошо упомянуть:

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

php

  • Сколько типов данных в РНР?

PHP поддерживает 8 базовых типов данных.

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

— boolean. Логический тип данных, переменные данного типа могут принимать значения true или false.

— integer. Целочисленный тип данных, переменные могут принимать целые значения (…-2, -1, 0, 1, 2…) в диапазоне от -2^31 до +2^31. Если значение превышает данный порог — оно автоматически переводится в тип float.

— float. Числовой тип данных с плавающей точкой, может содержать как целые, так и дробные величины.

— string. Строковый тип данных. Содержит нефиксированное количество различных символов. PHP не накладывает никаких ограничений на длину строки, поэтому можно смело работать даже с ОЧЕНЬ большими строками.

2 комплексных (составных) типа:

— array. Массив, содержит упорядоченный список элементов.

— object. Объект, содержит некий объект (экземпляр класса).

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

— resource. Ссылка на абстрактный элемент, т.н. внешний ресурс. Примеры внешних ресурсов — ссылка на файл и ссылка на результат выполнения запроса.

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

  • Что такое static функция и чем она отличается от «обычной» (не static)?

Static принадлежит классу, а не экземпляру класса. И вызывается у класса, а не у объекта, т.е. напрямую. Объявление свойств и методов класса статическими позволяет обращаться к ним без создания экземпляра класса. Атрибут класса, объявленный статическим, не может быть доступен посредством экземпляра класса (но статический метод может быть вызван). Так как статические методы вызываются без создания экземпляра класса, то псевдопеременная $this недоступна внутри метода, объявленного статическим. Доступ к статическим свойствам класса не может быть получен через оператор ->.

  • Что такое шаблоны (паттерны) проектирования?

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

  • Какие магические методы знаешь? Что это вообще такое?

Это методы, зарезервированные в php, которые начинаются с двойного подчеркивания “__”.

Список всех магических методов:

__construct
__destruct
__call
__callStatic
__get
__set
__isset
__unset
__sleep
__wakeup
__toString
__set_state
__clone

__construct и __destruct — самые популярные методы, которые реализуют базовые понятия объектно-ориентированного программирования: конструктор и деструктор;

__call, __callStatic, __get и __set – методы, связанные с перегрузкой обращений как к свойствам, так

и к методам. Методы __get() и __set() вызываются при установке и получении значения свойства,

а методы __call() и __callStatic — при вызове метода. Стоит заметить, что эти магические функции

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

не существуют;

__isset — метод, срабатывающий при вызове функций empty() или isset() на несуществующем

или недоступном свойстве класса;

__unset — срабатывает при вызове функции unset() на несуществующем или недоступном свойстве класса;

__sleep и __wakeup – методы, которые вызываются только из функций serialize и unserialize со-ответственно. Метод __sleep будет вызван сразу при применении к объекту функции serialize, а

метод __wakeup – при применении unserialize. В настоящий момент методы применяются для сохранения текущего состояния системы с последующим восстановлением данного состояния

(например, коннект к базе);

__toString – метод, с помощью которого можно обращаться к классу как к строке (например, с

помощью print или echo);

__set_state – метод, который вызывается для классов, экспортирующих значения свойств функ-

цией var_export();

__clone – вызывается при клонировании объекта (введен для использования из-за того, что объ-

екты в php5 и выше передаются по ссылке);

__invoke – вызывается при попытке использовать объект в качестве функции.

  • Что такое SQL-инъекция?

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

Report Page