Skip to content

Instantly share code, notes, and snippets.

@valentininua
Forked from GubaEvgeniy/junior-php.md
Created February 20, 2025 12:05
Show Gist options
  • Select an option

  • Save valentininua/16c3445793ad926469043406ad9decfc to your computer and use it in GitHub Desktop.

Select an option

Save valentininua/16c3445793ad926469043406ad9decfc to your computer and use it in GitHub Desktop.

Наверх

Потенциальные вопросы на собеседовании New

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

Раскрыть: Ссылки в PHP — это механизм, который позволяет двум переменным указывать на одну и ту же область памяти. Это означает, что если одна переменная изменяет значение, то и другая переменная, ссылающаяся на ту же область памяти, будет иметь это новое значение.

Основные операции с использованием ссылок: a. Присваивание по ссылке b. Передача аргументов по ссылке

Ссылки не меняют значение, они только создают несколько имен для одной и той же области памяти.

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

Назовите простые типы данных, поддерживаемые в РНР

Раскрыть: простые
  1. Integer (Целое число)
  2. Float (Число с плавающей точкой)
  3. String (Строка)
  4. Boolean (Логический тип)
  5. Null

ложные

  1. Array (Массив) — это упорядоченная коллекция данных, которая может содержать элементы разных типов. Массивы в PHP являются ассоциативными, то есть их элементы могут индексироваться как числовыми индексами, так и строками.
  2. Object — это экземпляр класса. Классы в PHP определяют структуру объектов, а объекты могут содержать данные (свойства) и методы (функции), которые можно вызывать.
  3. Callable — это тип данных, который представляет собой функцию или метод, которые можно вызвать. Это может быть строка с именем функции, массив с классом и методом, а также анонимные функции (замыкания).
  4. Iterable - Начиная с PHP 7.1, iterable — это объединённый тип, который может быть либо массивом, либо объектом, реализующим интерфейс Traversable. Его можно использовать для создания объектов, которые можно перебирать с помощью цикла foreach.
  5. Resource - это специальный тип данных, который представляет собой ссылку на внешние ресурсы, такие как файловые дескрипторы, соединения с базой данных, результаты запросов и т.д. Ресурсы создаются и управляются функциями PHP, и они не могут быть напрямую модифицированы в коде.
  6. Mixed (Смешанный тип) - В PHP 8.0 появился тип mixed, который указывает, что переменная может содержать значение любого типа. Этот тип используется для явного указания, что функция может принимать несколько типов данных.
  7. Void (Отсутствие значения) - используется для обозначения функций, которые не возвращают значение. Начиная с PHP 7.1, можно явно указать, что функция ничего не возвращает, указав тип возврата void.
  8. Union types (Объединённые типы) - В PHP 8.0 были введены объединённые типы, которые позволяют указать несколько типов данных для одной переменной или возвращаемого значения.

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

Раскрыть: 1. Инкремент увеличивает значение переменной на единицу, а декремент уменьшает на единицу. 2. В префиксной форме (++$a или --$a) значение переменной изменяется сразу, и новое значение используется в выражении. 3. В постфиксной форме ($a++ или $a--) сначала используется текущее значение переменной, а затем оно изменяется.

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

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

Преимущества рекурсии

  1. Позволяет решать сложные задачи, разбивая их на более простые подзадачи.
  2. Упрощает код для решения задач, которые имеют естественную рекурсивную структуру (например, вычисление факториала, числа Фибоначчи, обход деревьев и графов).

Недостатки рекурсии

1.	Производительность: Рекурсия может быть менее эффективной по сравнению с итерационными решениями, так как каждый рекурсивный вызов добавляет новую запись в стек вызовов, что может потреблять много памяти.
2.	Риск переполнения стека: Если рекурсивная функция не имеет базового случая или вызывает себя слишком много раз, это может привести к переполнению стека (Stack Overflow).

Рекурсию следует использовать, когда:

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

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

Раскрыть: 1. Абстракция

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

•	Пример абстракции: Представьте себе класс Car. Для пользователя важно знать, как завести машину (метод startEngine), но не нужно знать, как работает двигатель внутри.
  1. Наследование

Наследование позволяет одному классу (дочернему) наследовать свойства и методы другого класса (родительского). Это позволяет повторно использовать код и упрощает его расширение. Дочерний класс может как наследовать, так и изменять поведение родительского класса.

•	Пример: Класс ElectricCar наследует класс Car, добавляя свои специфические методы
  1. Полиморфизм

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

•	Пример: Допустим, есть классы Car и Bike, которые оба реализуют метод drive(). Независимо от того, что за объект (автомобиль или велосипед), программа может вызвать метод drive(), и каждый объект выполнит его по-своему.
  1. Инкапсуляция

Инкапсуляция — это принцип, который предполагает сокрытие внутреннего состояния объекта и предоставление доступа к нему только через определённые методы (геттеры и сеттеры). Это позволяет защитить данные от некорректного использования и манипуляции.

•	Пример: Доступ к переменным класса осуществляется через методы, которые контролируют получение и установку значений.

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

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

Плюсы динамической и нестрогой типизации:

1.	Простота в использовании:
•	PHP автоматически определяет и конвертирует типы данных, что облегчает работу с кодом, особенно для новичков и простых проектов.
2.	Гибкость:
•	Переменные могут изменять тип в зависимости от контекста, что позволяет писать код быстрее без необходимости заботиться о строгих типах данных.
3.	Удобство при разработке небольших приложений:
•	Динамическая типизация сокращает количество кода, что может быть удобно в небольших проектах или при быстром прототипировании.
4.	Автоматическая конвертация типов:
•	PHP автоматически преобразует типы данных при выполнении операций, таких как арифметика и сравнения, что позволяет избежать множества ошибок, связанных с несовместимостью типов.

Минусы динамической и нестрогой типизации:

1.	Потенциальные ошибки на этапе выполнения:
•	Из-за нестрогой типизации ошибки могут возникать только на этапе выполнения программы, что затрудняет их нахождение и исправление (особенно в больших проектах).
2.	Трудности с поддержкой больших проектов:
•	В крупных проектах динамическая типизация может привести к запутанному коду, где не всегда ясно, какие типы данных используются, что усложняет поддержку и тестирование.
3.	Неявные ошибки при конвертации типов:
•	PHP может некорректно преобразовать данные, если типы неожиданно изменятся. Например, сложение строки и числа может привести к непредсказуемым результатам, если разработчик не учел это.
4.	Ограниченные возможности автодополнения и анализа кода:
•	Динамическая типизация снижает возможности автодополнения и анализа кода в IDE, так как типы переменных могут изменяться в процессе выполнения программы.

Плюсы строгой типизации:

1.	Повышение надежности кода:
•	Строгая типизация позволяет заранее выявлять ошибки, связанные с неверными типами данных, что снижает количество багов на этапе выполнения.
2.	Лучшая читаемость и предсказуемость:
•	Четкое указание типов данных делает код более понятным, и другие разработчики смогут быстрее понять, какие типы данных используются в программе.
3.	Улучшенная поддержка и рефакторинг:
•	Строгая типизация облегчает рефакторинг и поддержку кода, так как типы данных всегда известны, и разработчик может быть уверен, что типы аргументов и возвращаемых значений остаются неизменными.
4.	Повышение производительности:
•	Хотя PHP все еще интерпретируемый язык, строгая типизация и четкие типы данных позволяют PHP выполнять код более эффективно.

Минусы строгой типизации:

1.	Более строгие требования к коду:
•	Строгая типизация требует от разработчика более тщательно контролировать типы данных, что может увеличить количество кода и замедлить разработку.
2.	Необходимость явного преобразования типов:
•	Иногда нужно явно преобразовывать типы данных, что может создавать дополнительные сложности и увеличивать код.
3.	Меньшая гибкость:
•	Строгая типизация снижает гибкость кода, так как каждый аргумент должен точно соответствовать объявленному типу.

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

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

b. require

•	require также подключает файл, но если файл не найден или возникла ошибка при подключении, выполнение скрипта будет немедленно прекращено и возникнет фатальная ошибка (E_COMPILE_ERROR).
•	Используйте require, когда файл обязателен для работы программы, например, при подключении конфигурации или библиотек.

ВОПРОС

Раскрыть:

ВОПРОС

Раскрыть:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment