PHP | Вопросы собесов
Kanalga Telegram’da o‘tish
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv
Ko'proq ko'rsatish2 343
Obunachilar
+124 soatlar
-37 kunlar
-2230 kunlar
Postlar arxiv
🤔 Какой метод распознает палиндромы?
Метод для распознавания палиндрома проверяет, совпадает ли строка с её обратной версией. Для этого можно использовать реверс строки и сравнение, например, через str == str[::-1].
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Кибербезопасность в России в 2025 году. Вебинар 06.02.25
Российский кибербез стремительно меняется. Как именно — разберем на ежегодном вебинаре «Солара», опираясь на аналитику от Центра противодействия кибератакам Solar JSOC.
Обсудим ключевые вызовы 2025 года, рассмотрим практические кейсы, в том числе внутренний пентест Solar JSOС, и поделимся ценными советами по защите от киберугроз.
Не пропустите.
Зарегистрироваться
#реклама 16+
rt-solar.ru
О рекламодателе
🤔 Какие есть минусы у монолитов и микросервисов?
🚩Минусы монолитной архитектуры
🟠Сложность изменений и развертывания:
Любое изменение в коде требует пересборки и развертывания всего приложения, что увеличивает риск и время на внедрение новых функций и исправление ошибок.
🟠Трудности масштабирования:
Масштабировать монолитные приложения сложно, так как зачастую приходится масштабировать все компоненты приложения одновременно, даже если нагрузка возрастает только на одну часть системы.
🟠Зависимости и тестирование:
Из-за тесной взаимосвязанности модулей любое изменение может повлиять на всю систему, что усложняет тестирование и обнаружение ошибок.
🟠Трудности в поддержке и разработке:
По мере роста кода и команды разработчиков становится трудно управлять кодовой базой и разделять ответственность между различными командами.
🚩Минусы микросервисов
➖Ложность управления:
Микросервисная архитектура требует управления множеством отдельных сервисов, что увеличивает сложность настройки, развертывания и мониторинга.
➖Межсервисные взаимодействия:
Сервисы должны общаться друг с другом, часто через сети, что добавляет задержки и увеличивает вероятность сбоев и проблем с синхронизацией данных.
➖Разделение данных:
Управление согласованностью данных между разными сервисами становится сложнее, особенно когда данные распределены по различным хранилищам.
➖Сложность разработки:
Разработка и отладка распределенных систем сложнее из-за необходимости учета межсервисных взаимодействий, а также обеспечения согласованности и целостности данных.
➖Инфраструктурные затраты:
Поддержка множества сервисов требует большей инфраструктуры и ресурсов, включая оркестрацию контейнеров, балансировку нагрузки и управление сервисами.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Чем отличается POST от PUT?
- POST: используется для создания ресурса на сервере. Запросы обычно не идемпотентны, так как каждый запрос может создавать новый ресурс.
- PUT: используется для создания или обновления ресурса с известным идентификатором. Запросы идемпотентны — повторное выполнение запроса приводит к одному и тому же результату.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
🤔 Что есть иммутабельный объект?
Это объект, состояние которого нельзя изменить после его создания. Это означает, что ни одно из свойств объекта не может быть изменено после того, как он был инициализирован. Всякий раз, когда необходимо изменить состояние иммутабельного объекта, вместо изменения текущего объекта создается новый объект с новым состоянием.
🚩Плюсы
➕Безопасность и предсказуемость
Иммутабельные объекты безопасны для использования в многопоточных средах, так как их состояние не может быть изменено после создания, что предотвращает состояние гонки и другие проблемы, связанные с конкурентным доступом.
➕Простота понимания и отладки
Так как состояние иммутабельного объекта не изменяется, код, использующий такие объекты, становится более предсказуемым и легче в отладке.
➕Облегчение управления состоянием
Иммутабельные объекты упрощают управление состоянием в приложениях, так как можно быть уверенным, что состояние объекта не изменится неожиданным образом.
➕Безопасность при передаче данных
Иммутабельные объекты могут безопасно передаваться между различными частями программы или даже между разными системами, так как нет риска, что их состояние будет изменено в процессе передачи.
# Строки являются иммутабельными
s = "hello"
# Любая операция, изменяющая строку, создает новую строку
s = s.upper()
print(s) # Выведет "HELLO"
# Кортежи также являются иммутабельными
t = (1, 2, 3)
# Попытка изменить элемент кортежа вызовет ошибку
# t[0] = 0 # TypeError: 'tuple' object does not support item assignment
Класс String является иммутабельным. Всякий раз, когда выполняется операция, изменяющая строку, создается новый объект строки.
String s = "hello";
s = s.toUpperCase();
System.out.println(s); // Выведет "HELLO"
🚩Для создания своих иммутабельных классов в Java можно сделать следующее
Сделать класс финальным, чтобы предотвратить наследование.
Все поля объявить приватными и финальными.
Не предоставлять методов для изменения состояния (сеттеров).
Обеспечить, чтобы изменяемые объекты, передаваемые в конструктор, были скопированы.
public final class ImmutablePerson {
private final String name;
private final int age;
public ImmutablePerson(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
🚩Для создания иммутабельных объектов необходимо соблюдать несколько правил:
🟠Приватные и финальные поля
Все поля объекта должны быть объявлены как private и final.
🟠Отсутствие сеттеров
Не должны быть предоставлены методы, которые позволяют изменять состояние объекта.
🟠Конструкторы
Конструкторы должны устанавливать все поля объекта, инициализируя их значениями, которые не могут быть изменены после создания объекта.
🟠Защита изменяемых объектов
Если объект содержит изменяемые поля, такие как массивы или коллекции, они должны быть скопированы или защищены от изменения извне.
Ставь 👍 и забирай 📚 Базу знаний🤔 Как работает связанность?
1. Высокая связность:
- Элементы модуля выполняют тесно связанные задачи и фокусируются на одной цели, что делает модуль логически целостным.
2. Низкая связность:
- Элементы модуля слабо связаны друг с другом, что может указывать на наличие несвязанных задач в одном модуле.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое SOLID?
Это акроним, представляющий пять основных принципов ООП и проектирования, предложенных Робертом Мартином. Эти принципы направлены на повышение гибкости, читаемости, и поддерживаемости кода, а также упрощение его тестирования и рефакторинга. Вот они:
🟠S: Принцип единственной ответственности (Single Responsibility Principle)
Каждый класс должен иметь только одну причину для изменения. Этот принцип подчеркивает, что класс должен заниматься только одной задачей или иметь одну область ответственности.
🟠O: Принцип открытости/закрытости (Open/Closed Principle)
Сущности программы должны быть открыты для расширения, но закрыты для модификации. Это означает, что можно добавлять новые функциональности без изменения существующего кода.
🟠L: Принцип подстановки Барбары Лисков (Liskov Substitution Principle)
Объекты в программе можно заменять их наследниками без изменения свойств программы. Это предполагает, что объекты подклассов должны действовать так же, как объекты суперкласса, от которых они произошли.
🟠I: Принцип разделения интерфейса (Interface Segregation Principle)
Клиенты не должны зависеть от интерфейсов, которые они не используют. Этот принцип говорит о том, что лучше иметь много специализированных интерфейсов, чем один универсальный.
🟠D: Принцип инверсии зависимостей (Dependency Inversion Principle)
Модули высокого уровня не должны зависеть от модулей низкого уровня. Обе категории должны зависеть от абстракций. Кроме того, абстракции не должны зависеть от деталей; детали должны зависеть от абстракций. Это способствует ослаблению связности компонентов системы.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое связность?
Это мера того, насколько хорошо элементы внутри одного модуля работают вместе. Высокая связность означает, что элементы модуля сосредоточены на выполнении одной задачи, что повышает модульность и упрощает тестирование.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое динамические переменные?
Это переменные, имена которых определяются во время выполнения программы. Это позволяет создавать, модифицировать или обращаться к переменным динамически, основываясь на входных данных или условиях выполнения программы. Такой подход может быть полезен в сценариях, где структура данных неизвестна на момент написания кода или когда нужно генерировать переменные на лету в зависимости от контекста выполнения.
🚩PHP
Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";
echo $variable; // Выведет "Hello, World!"
Плюсы и минусы
➕Гибкость
позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна.
➕Удобство
упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной.
➖Читаемость кода
использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются.
➖Управление памятью
динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности.
Ставь 👍 и забирай 📚 Базу знаний🤔 В чем недостатки асинхронного шифрования?
1. Медлительность:
- Алгоритмы асимметричного шифрования (RSA, ECC) работают медленнее, чем симметричные из-за сложных математических операций.
2. Больший размер ключей:
- Для обеспечения сопоставимого уровня безопасности ключи асимметричного шифрования значительно больше, что увеличивает нагрузку на хранение и передачу данных.
3. Неэффективность для больших объемов данных:
- Обычно используется для шифрования небольших данных (например, ключей симметричного шифрования), а не целых файлов или сообщений.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое вертикальное и масштабирование в БД?
Это два метода повышения производительности и пропускной способности баз данных.
🚩Вертикальное масштабирование (Vertical Scaling)
Вертикальное масштабирование, также известное как масштабирование "вверх" (scale up), предполагает улучшение производительности базы данных за счет увеличения ресурсов на одном сервере. Это может включать: Добавление большего объема оперативной памяти (RAM), Увеличение мощности процессора (CPU), Увеличение объема хранилища (SSD или HDD), Использование более быстрого сетевого оборудования
🟠Плюсы и минусы
➕Простота реализации
Легко выполнить, поскольку не требует изменения архитектуры приложения.
➕Единая точка управления
Администрирование базы данных проще, так как все данные находятся на одном сервере.
➖Ограничения оборудования
Есть пределы, до которых можно увеличивать ресурсы на одном сервере.
➖Единая точка отказа
Если сервер выходит из строя, вся база данных становится недоступной.
🟠Пример
Допустим, у вас есть сервер с 16 ГБ оперативной памяти и 4-ядерным процессором. Вертикальное масштабирование может включать замену его на сервер с 64 ГБ оперативной памяти и 16-ядерным процессором.
Ставь 👍 и забирай 📚 Базу знаний
🤔 В чем преимущества и недостатки асинхронных вызовов?
Преимущества:
1. Не блокируют выполнение других задач.
2. Улучшают производительность при работе с I/O операциями.
Недостатки:
1. Усложняют отладку и написание кода.
2. Требуют обработки колбэков или использования async/await.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем нужны паттерны проектирования?
Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков.
🚩Зачем они нужны
🟠Повторяемость и стандартность
Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода.
🟠Улучшение коммуникации
Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы.
🟠Повышение качества кода
Паттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода.
🟠Экономия времени и ресурсов
Паттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки.
🚩Как они используются
Паттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач:
🟠Порождающие паттерны
Эти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder.
🟠Структурные паттерны
Эти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator.
🟠Поведенческие паттерны
Эти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.
class Singleton {
private static $instance;
private function __construct() {
// Закрытый конструктор предотвращает создание объекта через new
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function someBusinessLogic() {
// Некоторая бизнес-логика
}
}
// Использование Singleton
$singleton = Singleton::getInstance();
$singleton->someBusinessLogic();
Ставь 👍 и забирай 📚 Базу знаний🤔 Что делают self и static self?
указывает на текущий класс, где вызывается метод или свойство. Используется для доступа к статическим методам и свойствам.
1. static: поддерживает позднее статическое связывание, ссылаясь на класс, из которого был вызван метод.
2. Static полезен в случаях, когда нужно учитывать наследование, а self фиксируется на текущем классе.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое поведение copy on right.?
Это метод оптимизации памяти, используемый для увеличения эффективности. Когда несколько процессов или потоки обращаются к одному и тому же ресурсу (например, области памяти), создаётся одна копия ресурса, которая используется совместно до момента изменения. Если процесс хочет изменить ресурс, создаётся его собственная копия, чтобы сохранить изоляцию изменений. Пример: массив передаётся функции. Пока он не изменяется, память общая. При изменении создаётся отдельная копия массива. Применяется в PHP для управления объектами, массивами и значениями, особенно после версии PHP 5.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Зачем нужны транзакции?
1. Транзакции обеспечивают выполнение операций как одного логического блока, гарантируя их атомарность, целостность, изоляцию и устойчивость (ACID).
2. Они помогают избежать частичного выполнения операций в случае сбоев, например, при записи данных.
3. Используются для обеспечения согласованности в сложных операциях.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
– Помощь с pet-проектом
– Составление roadmap
– Общая консультация
– Проведение код-ревью и mock-собеседования
– Помощь с трудоустройством
Все это и многое другое может Ментор. Он обеспечит вам необходимый boost, ускорит и упростит вход в IT.
🔥 Здесь размещен список менторов, и многие из них предлагают бесплатную первую консультацию
🤔 Что такое нормализация и денормализация?
- Нормализация: процесс структурирования данных в базе данных для минимизации избыточности, разделяя данные на связанные таблицы.
- Денормализация: обратный процесс, объединяющий данные для ускорения чтения, иногда увеличивая избыточность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем преимущество hash индекс и btree индекс?
Hash-индексы и B-Tree-индексы являются двумя типами индексов, используемыми для ускорения операций поиска в базах данных. Оба типа имеют свои преимущества и недостатки в зависимости от конкретных сценариев использования.
🚩Hash-индексы
➕Быстрый доступ по точному совпадению
Hash-индексы обеспечивают очень быстрый доступ к данным при выполнении точных поисков (например,
SELECT * FROM table WHERE column = 'value'). Время поиска практически константное (O(1)), что делает такие запросы очень эффективными.
➕Простота реализации
Hash-индексы просты в реализации и не требуют сложных структур данных для управления.
🚩B-Tree-индексы
➕Поддержка диапазонных запросов
B-Tree-индексы поддерживают операции поиска по диапазону и сортировку (например, BETWEEN, >, <, ORDER BY). Данные в B-Tree отсортированы, что делает такие запросы возможными и эффективными.
➕Сбалансированность
B-Tree автоматически поддерживает балансировку, что обеспечивает стабильную производительность для всех операций (поиск, вставка, удаление).
➕Универсальность
B-Tree-индексы поддерживают широкий спектр операций и типов данных, включая текстовые данные, даты и числа.
🟠Hash-индекс
Подходит для сценариев, где часто выполняются точные запросы равенства, например, поиск пользователя по уникальному идентификатору или email.
CREATE INDEX idx_email_hash ON users USING HASH (email);
SELECT * FROM users WHERE email = 'example@example.com';
🟠B-Tree-индекс
Подходит для сценариев, где часто выполняются диапазонные запросы, сортировка или комбинированные условия.
CREATE INDEX idx_name_btree ON users (name);
SELECT * FROM users WHERE name BETWEEN 'A' AND 'M';
Ставь 👍 и забирай 📚 Базу знаний