Духота

Тестовая часть:

PHP

1.     Какую конструкцию нужно использовать в методе класса для вызова статического метода этого класса и его наследников?

  • parent::foo();
  • self::foo(); — вероятно потому что self это сам класс имеется ввиду
  • static::foo();
  • Все, кроме первого

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

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

interface — Интерфейсы объектов позволяют создавать код, который указывает, какие методы должен реализовать класс, без необходимости определять, как именно они должны быть реализованы. Интерфейсы разделяют пространство имён с классами и трейтами, поэтому они не могут называться одинаково.

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

Замыкания (closures) — Класс, используемый для создания анонимных функций. Анонимные функции выдают объекты этого типа. Класс получил методы, позволяющие контролировать анонимную функцию после её создания. Кроме методов, описанных здесь, этот класс также имеет метод __invoke. Данный метод необходим только для совместимости с другими классами, в которых реализован магический вызов, так как этот метод не используется при вызове функции.

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

  • Функция должна принимать объект в качестве аргумента и изменять его
  • Функция должна принимать объект в качестве аргумента-ссылки и изменять его
  • Функция должна принимать объект в качестве аргумента, изменять его, а затем возвращать (return) его изменённую версию
  • Объект не может быть изменен снаружи, он должен предоставлять методы для своего изменения

4.     Когда сравнение двух объектов оператором «==» возвращает true?

  • Если объекты имеют одинаковые атрибуты и их значения (нестрогое сравнение)
  • Только если сравниваются ссылки на один и тот же объект
  • Только если один объект был клонирован из другого (оператор clone), либо сравниваются ссылки на один и тот же объект
  • Никогда, сравнивать можно только сериализованные объекты (строки)

5.     Результат выполнения кода. [1 => ‘a’] + [2 => ‘b’] + [2 => ‘c’]

  • [0 => ‘a’, 1 => ‘b’, 2 => ‘c’]
  • [1 => ‘a’, 2 => ‘b’]
  • [0 => null, 1 => ‘a’, 2 => ‘c’]
  • Uncaught Error: Unsupported operand types

6.     Результат выполнения кода. array_merge([1 => ‘a’], [2 => ‘b’], [2 => ‘c’]);

  • [0 => ‘a’, 1 => ‘b’, 2 => ‘c’]
  • [1 => ‘a’, 2 => ‘b’]
  • [1 => ‘a’, 2 => ‘c’]
  • [‘1’ => ‘a’, ‘2’ => ‘c’]

7.     Если товара нет в наличии, торговая площадка в своём API указывает стоимость товара как null. Выберите наиболее краткий подходящий вариант записи проверки подобного случая (варианты отсортированы по длине конструкций).

  • if (!$price) {}
  • if ($price == 0) {}
  • if ($price == null) {}
  • if ($price === null) {}

8.     Как получить список методов класса?

  • get_defined_functions(MyClass::class);
  • (new MyClass())->__methods__;
  • $it = new ClassIterator(MyClass::class);
    foreach ($it as $entry) { if ($entry->isMethod()) { … } }
  • (new ReflectionClass(MyClass::class))->getMethods();

9.     Как устроена строка?

  • Массив символов
  • Массив байт
  • Объект с final свойством
  • Префиксное дерево

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

  • По ссылке
  • По значению
  • Зависит от типа данных
  • По ссылке до изменения

11.  Какого магического метода не существует?

  • debugInfo
  • clone
  • get_state
  • set_state

12.  Что такое MVC?

  • Модель фреймворка
  • Модель структуры данных
  • Архитектура приложения

13.  К какому из компонентов MVC относится роутер в парадигме MVC?

  • Контроллеру
  • Представлению
  • Ни к одному из приведенных

14.  Какой версии PHP не существует?

  • 4.1
  • 2
  • 1
  • 6

Unix

21.  Команда CD нужна для:

  • Перехода к указанному каталогу
  • Просмотру содержимого каталога
  • Просмотру содержимого файла

22.  Что делает команда chmod +x <filename>?

  • Добавляет возможность записи
  • Защищает файл от удаления
  • Добавляет возможность выполнить файл

Git

23.  В чем разница между Git Pull и Git Fetch?

  • Pull — скачивает изменения Fetch — отправляет изменения
  • Fetch — скачивает изменения Pull — скачивает и мержит изменения
  • Ничем

24.  Чем отличается Git Merge от Git Rebase?

  • Merge — вливание указанной ветки в текущую Rebase — наоборот
  • Merge — слияние двух веток Rebase — переход на другую ветку
  • Merge — слияние двух веток Rebase — создание новой ветки из существующей

HTTP и другие протоколы

25.  Как сервер понимает, где кончаются заголовки запроса и начинается тело?

  • Заголовок от тела отделяется пустой строкой
  • Заголовок от тела отделяется нулевым байтом
  • Тело помечается специальным заголовком Body
  • Телом считается первая строка, которая не подходит под регулярное выражение ^[a-zA-Z\-]{1,}\:\s+.*$

26.  Какой HTTP-метод используется в preflight-запросе?

  • CONNECT
  • OPTIONS
  • GET
  • PATCH

27.  В чем смысл флага httpOnly при установке Cookie?

  • Флаг запрещает доступ к cookie средствами JavaScript
  • Флаг требует передачи cookie только по протоколу http
  • Флаг запрещает сохранять cookie на жестком диске, требуя передачу только в момент запроса
  • Устаревший флаг, использовался только для HTTP 1.1

28.  Как определяется источник для CORS?

  • домен:порт
  • протокол://домен
  • протокол://домен:порт
  • домен

Разное

29.  Что такое миграция в контексте базы данных?

  • Перенос данных из одной базы данных в другую
  • Атомарное отменяемое изменение структуры базы данных
  • Изменение данных в таблице в рамках транзакции
  • Перемещение данных из одной таблицы в другую

 

Понимание основных архитектурных паттернов и принципов ООП, MVC, SOLID, DRY, KISS, Clean Code.

виды архитектуры при построении веб приложений — монолит и микросервисы

типы данных в пхп (примитивные строки и не примитивные обьекты)

что такое интерфейсы ()

инкремент и декремент

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

модификации видимости (паблик протектед прайват)

абстрактный класс в отличии от интерфейса и что он сам такое

traits что это, но лучше не надо их конечно

where and having в чем разница

репликация баз

эластиксерч

брокеры очередей

js var и let

var видно более глобально, а let только внутри того что исполняется сейчас, например только внутри какого то конкретного if

var перемещается как бы вверх кода, имея ввиду область видимости, let же чисто по коду появляется, хотя и внутри конкретного if тоже будет вверху

var можно объявить где то еще раз и она просто переопределяется, let объявляют только один раз

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

let и const являются частью стандарта ECMAScript 6, который поддерживается не всеми браузерами.

Более углубленные знания по PHP: Функции: — Когда и как аргументы передаются по ссылке, а когда по значению. — Анонимные функции и все что с ними связано Исключения: — Виды исключений (Exception, Error, Throwable), в каких случаях что отлавливать через catch Базы данных: — Все что касается уровней изоляции транзакций. Cупер важная вещь при разработке распределенных систем, чтобы не создавать data race. Нужно обязательно подтянуть фундаментальные знания по программированию: — Принципы SOLID, советую к прочтению 3 главу книги Роберта Мартина — «Чистая архитектура». Позволит сразу понимать взглянув на код, чистый он или нет, на сколько его будет удобно поддерживать другим разработчикам и тестировать. Отпадут многие вопросы и раздумья над тем как бы мне организовать свой код. — Паттерны проектирования, советую к прочтению книжку банды 4-х (Гамма, Хелм, Джонсон, Влиссилес) — «Паттерны объектно ориентированного программирования». Когда на опыт в разработке будет накладываться теория, часто будет приходить понимание «О, так я уже видел такой подход в коде, но не знал что это так называется». Ну и это позволит в похожих ситуациях сразу выбирать проверенный подход, а не изобретать его каждый раз самому. — Полезно будет почитать документацию к фреймворкам Laravel и Symphony, еще лучше посмотреть на гитхабе код каких-нибудь проектов на их основе. Сравнить их подход к структуре и организации кода. Посмотреть исходный код: как в них организованы различные абстаркции, объект Request / Response, роутинг, модели для БД. — Почитать что-нибудь про базовые структуры данных которые встречаются в программировании: деревья, хэш-таблицы, списки, стек, очередь и т.д. — Почитать любые статьи про REST API, какие этот подход накладывает ограничения на организацию API. — Почитать про способы общения сервисов в распределенной системе (синхронный/асинхронный). Сюда же для общего ознакомления почитать пару статей по брокерам сообщений, для чего они используются. — Дополнительно можно частично почитать какую-нибудь простую книгу по алгоритмам, например: А. Бхаргава — «Грокаем алгоритмы», просто чтобы иметь представление об уровне сложности алгоритмов.