Чер 232024
 

Основные операции с использованием ссылок в PHP

Ссылки в PHP позволяют нескольким переменным указывать на одно и то же значение. Вот основные операции, которые можно выполнять с использованием ссылок:

  • 1. Присваивание по ссылке:
$a = 5;
$b = &$a;  // $b ссылается на $a
  • 2. Передача параметров по ссылке в функции:
function addFive(&$num) {
    $num += 5;
}

$value = 10;
addFive($value);
echo $value;  // Выводит 15
  • 3. Возврат значения по ссылке из функции:
function &getValue() {
    static $value = 100;
    return $value;
}

$myValue = &getValue();
$myValue = 200;
echo getValue();  // Выводит 200
  • 4. Использование ссылок для элементов массивов:
$arr = [1, 2, 3];
$ref = &$arr[1];
$ref = 20;
echo $arr[1];  // Выводит 20

Основные операции с переменными типа Object в PHP

Объекты в PHP всегда передаются по ссылке. Основные операции с объектами включают:

  • 1. Создание объекта:
class MyClass {
    public $value = 10;
}

$obj1 = new MyClass();
  • 2. Присваивание объекта другой переменной:
$obj2 = $obj1;
  • 3. Изменение свойств объекта:
$obj2->value = 20;
echo $obj1->value;  // Выводит 20
  • 4. Передача объекта в функции:
function modifyObject($obj) {
    $obj->value = 30;
}

modifyObject($obj1);
echo $obj1->value;  // Выводит 30
  • 5. Сравнение объектов:
$obj1 = new MyClass();
$obj2 = new MyClass();
$obj3 = $obj1;

var_dump($obj1 == $obj2);  // true, если свойства и значения одинаковы
var_dump($obj1 === $obj2); // false, разные объекты
var_dump($obj1 === $obj3); // true, тот же объект

Основные операции с переменными типа Array в PHP

Массивы в PHP передаются по значению, но можно передавать их по ссылке. Основные операции с массивами включают:

  • 1. Создание массива:
$array = [1, 2, 3];

 

  • 2. Присваивание массива другой переменной:
$array2 = $array;

 

  • 3. Изменение элементов массива:
$array2[0] = 10;
echo $array[0];  // Выводит 1

 

  • 4. Передача массива в функции по значению:
function modifyArray($arr) {
    $arr[0] = 20;
}

modifyArray($array);
echo $array[0];  // Выводит 1

 

  • 5. Передача массива в функции по ссылке:
function modifyArrayByReference(&$arr) {
    $arr[0] = 20;
}

modifyArrayByReference($array);
echo $array[0];  // Выводит 20

 

  • 6. Слияние массивов:
$array1 = [1, 2, 3];
$array2 = [4, 5, 6];
$merged = array_merge($array1, $array2);
или
$merged = $array1 + $array2;

 

  • 7. Поиск в массиве:
$array = [1, 2, 3, 4, 5];
$key = array_search(3, $array);

 

  • 8. Удаление элемента из массива:
unset($array[1]);  // Удаляет второй элемент

Эти операции покрывают основные аспекты работы с ссылками, объектами и массивами в PHP, позволяя эффективно использовать их в различных сценариях.

Чер 232024
 

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

 

Создание ссылки

Для создания ссылки в PHP используется символ &. Например:

$a = 5;
$b = &$a; // $b ссылается на $a

$b = 10;
echo $a; // Выводит 10, так как $a и $b ссылаются на одно и то же содержимое

Применение ссылок

Ссылки могут быть полезны в различных сценариях:

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

function addFive(&$num) {
    $num += 5;
}

$original = 10;
addFive($original);
echo $original;  // Выводит 15

2) Возврат ссылки из функции: Функция может возвращать ссылку, что позволяет напрямую изменять значение переменной, полученной из функции.

function &getValue() {
    static $value = 100;
    return $value;
}

$myValue = &getValue();
$myValue = 200;

echo getValue();  // Выводит 200

Как передаются переменные типа Object

 

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

 

class MyClass {
    public $value = 10;
}

$obj1 = new MyClass();
$obj2 = $obj1;

$obj2->value = 20;
echo $obj1->value;  // Выводит 20, так как $obj1 и $obj2 ссылаются на один и тот же объект

Как передаются переменные типа Array

Массивы в PHP передаются по значению. Это означает, что при присваивании массива другой переменной или передаче его функции создается копия массива. Изменения, внесенные в копию, не повлияют на оригинальный массив. Однако, начиная с PHP 5.4, если массив не модифицируется, копия не создается сразу, а используется оптимизация копирования при записи (copy-on-write).

Пример передачи массивов

$array1 = [1, 2, 3];
$array2 = $array1;

$array2[0] = 10;
echo $array1[0];  // Выводит 1, так как $array2 является копией $array1

Пример передачи массивов по ссылке

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

$array1 = [1, 2, 3];
$array2 = &$array1;

$array2[0] = 10;
echo $array1[0];  // Выводит 10, так как $array2 ссылается на $array1

Важно помнить

– Ссылки в PHP не являются указателями, как в языках C/C++. Они просто позволяют двум переменным указывать на одно и то же значение.

– Ссылки не могут быть использованы с неинициализированными переменными.

– Ссылки не работают с переменными, содержащими объекты (начиная с PHP 5, объекты всегда передаются по ссылке).

Итоги

  • Ссылки позволяют двум переменным указывать на одно и то же значение, изменения одной переменной отражаются на другой.
  • Объекты в PHP передаются по ссылке по умолчанию, независимо от того, присваиваются ли они другой переменной или передаются в функцию.
  • Массивы передаются по значению, что означает создание копии, но с оптимизацией копирования при записи в PHP 5.4 и выше.

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

Бер 202024
 

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

Мониторинг:

Alerta — эта масштабируемая и гибкая система мониторинга обеспечивает непрерывное контролирование вашей инфраструктуры.

Adagios — позволяет легко настраивать и контролировать систему мониторинга Nagios через удобный веб-интерфейс.

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

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

Cabot — предоставляет полный контроль над мониторингом и оповещениями прямо на вашем собственном сервере.

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

check_mk — расширения для Nagios, которые значительно упрощают и улучшают процесс мониторинга.

Dash — веб-дашборд, который предоставляет наглядную информацию о состоянии ваших систем Linux.

Flapjack — система мониторинга, которая помогает эффективно управлять оповещениями и предотвращать сбои.

Icinga — современная альтернатива Nagios с расширенными возможностями и улучшенной производительностью.

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

Monit — обеспечивает управление и мониторинг Unix-систем, облегчая процесс обслуживания.

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

Naemon — современный сетевой инструмент, основанный на Nagios, который обеспечивает высокую производительность и расширенный набор функций.

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

Observium — система мониторинга для различного оборудования с широким функционалом и гибкими возможностями настройки.

OMD — комплексная система для сетевого мониторинга, которая объединяет в себе лучшие практики и инструменты.

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

Riemann — гибкий инструмент для мониторинга распределенных систем, который обеспечивает непрерывное отслеживание всех аспектов вашей инфраструктуры.

Sensu — открытый фреймворк на Ruby, который обеспечивает гибкие возможности для мониторинга и управления системами.

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

Serverstats — простой инструмент для создания графиков, который помогает визуализировать и анализировать статистические данные.

Seyren — дэшборд с оповещениями для Graphite, который предоставляет вам всю необходимую информацию о состоянии вашей инфраструктуры.

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

Thruk — веб-интерфейс, который облегчает управление системами мониторинга и предоставляет удобный доступ ко всей необходимой информации. • Uchiwa — интуитивно понятный дэшборд для Sensu, который обеспечивает наглядный и удобный мониторинг вашей инфраструктуры.

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

Сбор показателей:

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

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

Smashing — фреймворк на Ruby, который позволяет создавать красивые и информативные дэшборды, помогая вам представлять данные в наиболее понятном и удобном формате.

Diamond — демон на Python, который обеспечивает непрерывный сбор статистики с высокой степенью надежности и эффективности.

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

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

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

Grafana — популярное ПО для анализа временных рядов, которое предоставляет вам широкие возможности для визуализации и анализа данных.

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

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

KairosDB — мощная БД для хранения временных рядов, которая является форком OpenTSDB 1.x и обеспечивает высокую производительность и надежность.

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

OpenTSDB — распределенная и масштабируемая БД для хранения временных рядов с открытым исходным кодом, которая обеспечивает надежное хранение и быстрый доступ к данным.

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

Prometheus — мощная система мониторинга сервисов и БД временных рядов, которая обеспечивает высокую надежность и эффективность.

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

Statsd — демон на Node.js, который обеспечивает непрерывный сбор статистики и позволяет вам быстро анализировать и мониторить вашу инфраструктуру.

Работа с логами:

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

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

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

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

Heka — система для работы с логами от Mozilla, которая обеспечивает быстрое и эффективное анализ и хранение логов.

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

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

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

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

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

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

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

 Posted by at 12:10
Жов 252023
 

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

Установка Python

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

shell
python3 --version

Если Python уже установлен, эта команда отобразит версию интерпретатора.

Однако, версия Python может быть не самой последней. Если вам нужно установить последнюю доступную версию Python, выполните следующие команды:

shell
sudo apt-get update
sudo apt-get install python3

Если вам нужно установить конкретную версию Python, вы можете указать подверсию. Например, чтобы установить Python 3.10:

shell
sudo apt-get install python3.10

Для Python 3.11:

shell
sudo apt-get install python3.11

Запуск Python интерпретатора

После успешной установки Python вы можете начать создавать программы. Давайте создадим нашу первую программу. Откроем терминал и запустим интерпретатор Python следующей командой:

shell
python3

Вы окажетесь в интерактивном режиме Python. Теперь вы можете ввести следующую команду:

python
print("Привет, мир!")

Интерпретатор Python выведет строку “Привет, мир!”.

Создание файла программы

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

Откроем файл hello.py в текстовом редакторе и добавим следующий код:

python
name = input("Введите ваше имя: ")
print("Привет, " + name + "!")

Созданный скрипт ожидает ввода вашего имени и затем приветствует вас по имени.

Теперь вернемся в терминал и перейдем в папку, где находится файл hello.py, с помощью команды cd. Затем выполним программу с помощью следующей команды:

shell
python3 hello.py

Программа запросит ваше имя и затем приветствует вас по имени. Поздравляем, вы только что создали и запустили свою первую программу на Python в среде Linux!

Лют 042023
 

Предлагаем список вопросов, шпаргалка, которые задают разработчикам на технических собеседованиях с PHP7 или PHP8. Конечно, он не является исчерпывающим: cформирован специалистами, проводящими интервью в разных компаниях.

Junior Общее вопросы:

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

2. Каковы основные операции с использованием ссылок?

3. Назовите простые типы данных, поддерживаемые в РНР? Назовите все типы данных поддерживаемые в PHP!

4. Что такое инкремент и декремент, в чем разница между префиксным и постфиксным инкрементом и декрементом?

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

6. В чем разница между операторами =, == и ===?

7. Какие знаете принципы ООП?

8. Какая система типов используется в PHP? Опишите плюсы и минусы.

9. Чем отличаются ключевые слова: include и require, mysql_connect и mysql_pconnect?

10. Что такое интерфейсы? Используете ли их? Если да – расскажите об этом.

11. Что такое отвлеченный класс и чем он отличается от интерфейса?

12. Может ли абстрактный класс содержать частный метод?

13. Какие модификаторы видимости есть в РНР?

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

15. Что такое генераторы и как их использовать?

16. Что делает оператор yield?

17. Что такое traits? Альтернативное решение? Приведите пример.

18. Опишите поведение при использовании traits с одинаковыми именами полей и/или методов?

19. Будут ли доступны частные методы trait в классе?

20. Можно ли компоновать traits в trait?

21. Расскажите об обработке ошибок и исключениях (try catch, finaly и throw).

22. Что такое type hinting, как работает, зачем нужен?

23. Что такое namespace и зачем они?

24. Сравнение значений переменных в РНР и подводных камнях? Приведение типов. Что изменилось в PHP 8 в этом контексте?

25. Как работает session в РНР, где хранится, как инициализируется?

26. Суперглобальные массивы. Какие знаете? Как использовали?

27. Сравните include vs required, include_once vs required_once.

28. Что означает сложность алгоритма?

29. Что такое замыкание в PHP? Приведите пример.

30. Какая разница между замыканием в PHP и JavaScript?

31. Что такое позднее связывание? Расскажите о поведении и применении static.

32. Как переопределить хранение сессий?

33. Расскажите о SPL-библиотеке (Reflection, autoload, структуре данных).

34. Расскажите о принципах SOLID.

35. Расскажите о шаблонах GRASP.

36. Расскажите о Dependency Injection: что такое DI-контейнеры? Какие варианты реализаций?

37. Что вам известно о MVC?

38. Что вам известно о шаблонах GoF?

39. Что вам известно о шаблонах, применяемых в ORM?

40. Напишите/расскажите на PHP пример реализации паттерна Singleton.

41. Что такое Docker? Каков принцип его работы?

42. Что такое LAMP/NAMP?

43. Расскажите о regexp.

44. Расскажите о SSH-протоколе.

45. Что такое PDO?

46. Что нового появилось в PHP 8?

47. Что такое PHP PEAR?

48. Какие версии PHP все еще поддерживаются?

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

50. Чем отличаются операторы BREAK и CONTINUE?

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

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

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

54. Какой среде разработки предпочитаете и почему?

Git

55. Какой командой добавить изменения?

56. Какой командой зафиксировать изменения?

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

Базы данных

58. Что такое транзакция?

59. Что такое нормализация?

60. Что такое денормализация? Зачем она нужна?

61. Какие типы связей в базе данных?

62. Что означает утверждение о том, что СУБД поддерживает контроль ссылочной целостности связей?

63. Если используемая вами СУБД не поддерживает каскадные удаления для поддержания ссылочной целостности связей, что можно сделать для достижения аналогичного результата?

64. Что такое первичный и внешний ключи?

65. Какие отличия между первичным и уникальным ключами?

66. Какие типы JOIN, и в чем отличия?

67. Что такое курсоры в базах данных?

68. Что такое агрегатные функции SQL? Приведите несколько примеров.

69. Что такое миграции?

70. Расскажите о связях друг к другу, друг ко многим, много ко многим.

71. Назовите и объясните три любых агрегирующих метода.

72. Зачем используют оператор группировки GROUP BY?

73. В чем разница между WHERE и HAVING? Приведите примеры.

74. В чем разница между операторами DISTINCT и GROUP BY?

75. Для чего нужны операторы UNION, INTERSECT, EXCEPT?

76. Опишите разность типов данных DATETIME и TIMESTAMP.

77. Какие вы знаете движители таблиц и чем они отличаются?

78. Какие способы оптимизации производительности баз данных знаете?

79. Что такое партиционирование, репликация и шардинг?

80. Чем отличаются SQL от NoSQL базы данных?

81. Какие бывают NoSQL базы данных?

82. Какие типы данных есть в MySQL?

83. Разница между LEFT JOIN, RIGHT JOIN, INNER JOIN?

84. Разница между JOIN и UNION?

85. Что такое индексы? Как они влияют на время выполнения SELECT, INSERT?

86. Что такое сохраненные процедуры, функции и триггеры в MySQL? Зачем они? Приведите примеры использования.

87. Как организовать сохранение вложенных категорий в MySQL?

Laravel

88. Какие связи и как они реализуются в Laravel?

89. Что такое полиморфные связи, как они работают?

90. Что такое middleware? К чему это? На каком этапе выполняется?

Composer

91. Что такое Composer?

92. Чем отличается require от require-dev?

Практические задачи

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

94. Есть матрица 3×3. Посчитайте диагонали, только четные/нечетные числа в диагоналях.

95. Ваше приложение выдает 500 ошибку. Опишите последовательность поиска проблемы.

96. Напишите функцию, которая определяет, является ли слово палиндромом.

97. Какой результат выдаст такой код:

If (-1) print "True" else print "False"

98. Какой результат выдаст такой код:

$a = 3; $b = 2;
echo (int) $a / (int) $b;
99. Какой результат выдаст такой код:
var_dump (array_merge ([2 => 'a'], [3 => 'b']));

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

101. Чему будет равно $x после выполнения выражения $x = 1 + «1%» + «$1»?

102. Есть массив Integer, напишите возможные способы, как увеличить каждый элемент на единицу (+1).

103. Схематически воплотить структуру (классы) для задачки: – Создать API для размещения постов в Facebook и Google. – URL для размещения постов Google www.google.com/new-post?text= – URL для размещения постов Google facebook.com/add-post?message=

104. Имеются таблицы 2×3 и 3×2. Select * from a, b. Какова размерность результата?

Order
id user_id money
User
id email
К таблице есть запросы:
- все пользователи из конкретного города;
- все удаленные пользователи;
- все удаленные пользователи из конкретного города.
Какие индексы для таблицы лучше всего поставить?
User
city_id deleted (bool)

105. Напишите запрос для увеличения значения column1 на +1 для id = 2

id column1
1 1
2 2

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

107. Чему равны выражения:

print (!! "false")
print (!! true)
print ((int) '125g7')
print ((int) 'x52')

108. Каков результат выполнения функции? Как исправить результат?

in_array (1, [0, '0', true])

109. Напишите класс с реализацией всех возможных способов строгой типизации данных с учетом возможностей PHP 7.4.

Laravel:

110. Напишите метод для связи «многие». В методе добавьте условие для значения, сохраненного в поле промежуточной таблицы. К примеру, есть студенты и курсы, на которые они записались. Запись студента на курс должна быть подтверждена. Подтверждение хранится в промежуточной таблице как is_approve. Для модели студентов должен быть метод approvedCourses.

111. Напишите запрос с использованием модели Query Builder, который будет отвечать запросу:

Select * from `users` where ( 'age'> 21 and ( 'has_education' == 1 or 'work_experience'> 2))

112. Напишите artisan команду для создания модели и миграции для нее.

113. Напишите artisan-команду для очищения кэша фреймворка.

MiddleОбщее

1. Как передаются переменные (по значению или по ссылке)?

2. Какие процессы происходят, когда пользователь вводит URL в браузере?

3. Что такое вариативная функция или splat-оператор?

4. Что такое OWASP?

5. Какие типы уязвимостей знаете? Как от них защищаться?

6. Что такое идемпотентные методы? Какие HTTP-методы идемпотентны для REST?

7.Что такое stateless?

8. SOAP vs REST. В чем разница?

9. Какие методы авторизации используют для построения API?

10. Что может содержать интерфейс?

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

12. Что такое Mock? Где используются и зачем?

13. Что такое PSR?

14. Опишите реализацию одного из шаблонов проектирования.

15. Что такое Redis?

16. Как хранятся данные в Redis/Memcached?

17. Расскажите о целесообразности применения Redis/Memcached для кэширования. Какие плюсы и минусы?

18. Назовите отличия между nginx и Apache.

19. Что такое Opcash? Как он работает?

20. Что такое JIT? Как он работает?

21. Зачем нужно ключевое слово final?

22. Что нового в РНР 7/8?

23. Что такое SOLID, DRY, KISS, YAGNI?

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

25. Что такое простая фабрика?

26. Что такое Service Layer и где его следует использовать?

27. Как устроен Singleton и почему его считают антипатерном?

28. Что такое идемпотентность?

29. Опишите жизненный цикл HTTP-запроса?

30. Что такое куча и стек?

31. Что такое рефлексия?

32. Что такое хэш-функция и где она используется?

33. Как используются очереди в РНР?

34. Как в общих чертах работает OPcache?

35. Что такое GRASP?

36. Что такое TDD?

37. Чем отличаются модульные тесты от интеграционных?

38. Что такое Трейти? Как использовать на практике?

39. Как разрешить конфликты при использовании trait?

40. Как работает автозагрузка классов?

41. В чем разница между стеком и очередью?

42. Расскажите о Unit Tests (required), Functional Tests (optional). Моки и стаб в PHP.

43. Представим ситуацию, в которой нам нужно вызвать частный метод, как это сделать?

44. Опишите разницу между PHP-FPM и PHP на сокете.

45. Как бы вы реализовали загрузку больших отчетов с большим количеством данных (файлы от 1 гигабайта до N гигабайтов).

46. Как бы вы импортировали 50-гигабайтный файл xml в базу данных?

47. Почему после PHP 5 идет сразу 7, куда делось 6?

48. Есть ли разница между self и this в PHP?

49. Что такое PuTTY?

50. У нас есть важный PHP-файл, его нужно запускать каждые 20 секунд, как бы вы это сделали?

51. Как расшифровать 644 в правах на файл в Linux?

52. Что такое Opcode? Git 53.

В чем разница между merge и rebase?

54. Какой командой можно произвести ресет изменений, не потеряв их?

55. Что такое stash и для чего он нужен? Базы данных

56. Какая разница между MyISAM и InnoDB? В каких вариантах и что лучше использовать?

57. Как найти и оптимизировать «трудные» запросы?

58. Какие типы индексов?

59. Как сохранять координаты точки на карте в БД?

60. Какие типы индексов бывают у RDBMS?

61. Какое свойство полей БД следует учитывать при выборе типа индекса?

62. Когда следует использовать индексы, какие преимущества и недостатки?

63. Что такое ACID?

64. Что такое план выполнения запроса и как его узнать?

65. В чем разница между типами данных CHAR и VARCHAR в SQL?

66. Какое предназначение транзакций? Расскажите о принципе работы.

67. Назовите 3–4 нормальных формы реляционных БД.

68. Какое предназначение репликации? Какие типы связей и в чем разница между ними?

69. Что такое индексация? Какие типы индексов? Каков смысл их использовать?

70. Что такое полнотекстовый поиск в MySQL? Как он реализуется?

71. Что такое cursor в MySQL-процедурах?

72. Расскажите о RabbitMQ или Gearman.

73. Что знаете о Solr/ElasticSearch?

74. Что такое дедлоки MySQL?

75. Влияет ли порядок JOIN на план выполнения MySQL-запроса? Laravel

76. Как и какие формируются запросы при использовании метода with()?

77. Чем отличаются методы with() и load()? Практические задачи

78. Вам нужно спарсить продукты и их цены из интернет-магазина. С помощью чего это будете делать и какие основные нюансы нужно учесть?

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

80. Какой результат выдаст такой код:

class Test
{
public $ value;
}
 
$a = new Test;
$a->value = 1;
 
$b = $ a;
$b->value = 2;
 
echo $a->value;

81. Какие модификаторы доступа допустимы в реализации метода getName:

abstract class Cls
{
protected abstract function getName ();
}
 
class Child extends Cls
{
(Public, protected, private) function getName () {}
}

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

83. Есть матрица с числами 3×3. Как найти числа, не имеющие четных/нечетных соседей?

84. Есть мануал на API от Европейского центрального банка с курсом валют. Нужно найти минимумы-максимумы за 5 лет, а затем то же, но с разбивкой по месяцам.

85. Сохраните свою библиотеку в БД. Следует сохранить названия книг и имена авторов. Предложите структуру таблиц. Выведите отчет «книга – количество соавторов».

86. Реализуйте примитивный роутинг, который обеспечивает работу Рауса по шаблону “/{class_name}/{method_name}/”

87. Напишите архитектуру, основанную на базовой абстракции. Дочерние классы расширяются при помощи интерфейсов. Реализацию одинаковых методов выполните, используя трейты (реализовывать в абстракции).

88. Напишите запрос, в результате выполнения которого выведется значение «id» и «val», если значение столбца column> 5 => val = val1 или val2.

id column val1 val2
1 1 ‘a’ ‘d’
2 6 ‘b’ ‘e’
3 2 ‘c’ ‘f’

89. Laravel: напишите расписание, которое будет выполняться каждую пятницу каждый час в 15 минут.

90. Напишите кастомную artisan-команду, которая в консоль будет выводить текущее время.

Senior Общее

1. Как вы понимаете REST?

2. Что такое Copy-on-write?

3. Что такое позднее статическое связывание?

4. Что такое CQRS?

5. Что такое cohesion и coupling?

6. Как можно получить значение частного свойства класса в рантайме?

7. Как можно получить значение частного свойства класса в рантайме без использования рефлексии?

8. Следует ли использовать в методах значение по умолчанию null. Если нет, то почему?

9. Стоит ли возвращать null из методов. Если нет, почему и как писать код в таких случаях?

10. Следует ли передавать null как параметр методов. Если нет, то почему и как писать код?

11. Как вы понимаете Special Case/Null Object и где его следует применять?

12. Какой подход следует применять при тестировании кода, имеющего внешние зависимости (например, обращение к API Google)?

13. Что такое DDD?

14. Что такое микросервисная архитектура?

15. Какие способы коммуникации между микросервисами?

16. Расскажите о ReactPHP или Swoole.

17. Что такое фильтр Блума?

18. Что такое gap locks в MySQL?

19. Зачем нужно кэширование? Какую проблему оно решает?

20. Какие виды кэшхранилищ знаете и применяли? Чем они отличаются?

21. Чем характеризуется эффективность кэширования?

22. Приведите самый сложный пример кэширования из практики.

23. Что такое sensitive данные? Как хранятся в базе? Как отображаются в логах?

24. Кратко расскажите об истории PHP. Что появлялось в каждой версии? Куда развивается PHP на ваш взгляд? Что нового в последней версии?

25. Как в PHP очистить память?

26. Что такое антипаттерны? Приведите несколько примеров.

27. Как произвести рефакторинг большого legacy-проекта. Как это аргументировать/продать PM’у, заказчику?

28. Чем отличается Dependency Injection от Service Locator?

29. Расскажите об истоках памяти в PHP. Приведите примеры. Как боролись?

30. Как работает Garbage Collector? Когда есть смысл вызвать?

31. По какому принципу будете выбирать архитектуру своей будущей программы?

32. С какими видами архитектуры приложений сталкивались?

33. Структуры данных. Какие знаете, какие использовали на практике?

34. С какими еще видами API сталкивались? Какие были проблемы? Как решали?

35. Как вы понимаете Exception flow в контексте PHP.

36. Расскажите об автоматических анализаторах кода PHP (Roundcube и т.п.).

37. Расскажите о Performance & профилировании PHP-кода (Xdebug, XHprof и т.д.).

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

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

40. Как вы организуете тестирование кода? Когда покрытие тестами нерационально? Были ли у вас такие проекты? Git

41. Как изменить только сообщение последнего комита?

42. git rebase -i HEAD~3 что делает эта команда и какие могут возникнуть проблемы при ее применении?

43. Зачем команда git bundle?

44. Какой командой можно влить комит в текущую ветвь?

45. Как выполнить склеивание комитов? Базы данных

46. Какие структуры данных поддерживает Redis?

47. Что подразумевается под понятием «триггер» в SQL?

48. Какая разница между реляционными и нереляционными СУБД?

49. Какие NoSQL СУБД знаете?

50. Что такое ACID Compliance?

51. Что такое Views? Какие преимущества и недостатки?

52. Что такое уровни изоляции транзакций?

53. Что такое concurrent query?

54. Что такое кластерные индексы?

55. Как построить социальную сеть, которая выдержит нагрузку в 100 тысяч посетителей в онлайне. И сможет предлагать пользователям, например из Нью-Йорка, в друзья людей, живущих в этом городе. Данных много, работать система быстро. Как все хранить? По какому принципу строить запросы?