🤔 Для чего нужен ELT?
ELT (Extract, Load, Transform) – это процесс обработки данных, используемый в аналитике:
- Extract (Извлечение) – загрузка данных из источников (БД, API).
- Load (Загрузка) – сохранение данных в хранилище (например, в Data Warehouse).
- Transform (Преобразование) – очистка, фильтрация, агрегация данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
ELT (Extract, Load, Transform) – это процесс обработки данных, используемый в аналитике:
- Extract (Извлечение) – загрузка данных из источников (БД, API).
- Load (Загрузка) – сохранение данных в хранилище (например, в Data Warehouse).
- Transform (Преобразование) – очистка, фильтрация, агрегация данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как работает зацепление?
Зацепление (coupling) — это степень зависимости одного модуля от другого. В PHP (и вообще в разработке) мы стремимся уменьшить зацепление, чтобы код был гибким, удобным для тестирования и сопровождения.
🚩Виды зацепления
🟠Слабое зацепление (Loose Coupling) – Хорошо
- Модули мало зависят друг от друга.
- Можно заменять части системы без изменений в других частях.
- Используется интерфейсы, DI (Dependency Injection), события.
🟠Жёсткое зацепление (Tight Coupling) – Плохо
- Модули сильно связаны, нельзя поменять один без изменения другого.
- Код трудно тестировать и расширять.
- Используется жёсткая привязка классов внутри других классов.
Ставь 👍 и забирай 📚 Базу знаний
Зацепление (coupling) — это степень зависимости одного модуля от другого. В PHP (и вообще в разработке) мы стремимся уменьшить зацепление, чтобы код был гибким, удобным для тестирования и сопровождения.
🚩Виды зацепления
🟠Слабое зацепление (Loose Coupling) – Хорошо
- Модули мало зависят друг от друга.
- Можно заменять части системы без изменений в других частях.
- Используется интерфейсы, DI (Dependency Injection), события.
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
echo "Запись в файл: $message\n";
}
}
class DatabaseLogger implements Logger {
public function log($message) {
echo "Запись в базу: $message\n";
}
}
class User {
private $logger;
public function __construct(Logger $logger) {
$this->logger = $logger;
}
public function register($name) {
echo "Регистрация пользователя: $name\n";
$this->logger->log("Пользователь $name зарегистрирован.");
}
}
// Можно легко менять логгер без изменения класса User
$user = new User(new FileLogger());
$user->register("Иван");
$user = new User(new DatabaseLogger());
$user->register("Петр");🟠Жёсткое зацепление (Tight Coupling) – Плохо
- Модули сильно связаны, нельзя поменять один без изменения другого.
- Код трудно тестировать и расширять.
- Используется жёсткая привязка классов внутри других классов.
class FileLogger {
public function log($message) {
echo "Запись в файл: $message\n";
}
}
class User {
private $logger;
public function __construct() {
$this->logger = new FileLogger(); // Жесткая зависимость!
}
public function register($name) {
echo "Регистрация пользователя: $name\n";
$this->logger->log("Пользователь $name зарегистрирован.");
}
}
// User всегда использует FileLogger, его нельзя легко заменить
$user = new User();
$user->register("Иван");Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое абстрагирование?
Это принцип объектно-ориентированного программирования, позволяющий выделять только важные характеристики объекта и скрывать детали его реализации.
1. Оно фокусируется на том, что объект делает, а не на том, как он это делает.
2. Реализуется через абстрактные классы, интерфейсы или методы.
3. Помогает упрощать сложные системы, скрывая ненужные детали и обеспечивая высокую модульность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Оно фокусируется на том, что объект делает, а не на том, как он это делает.
2. Реализуется через абстрактные классы, интерфейсы или методы.
3. Помогает упрощать сложные системы, скрывая ненужные детали и обеспечивая высокую модульность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем принцип работы HashTable?
Хеш-таблица – это структура данных, которая хранит пары "ключ → значение" и использует хеш-функцию для быстрого поиска, добавления и удаления данных.
🚩Основная идея
Ключ обрабатывается хеш-функцией → превращается в числовой индекс.
По индексу данные хранятся в массиве.
Быстрое обращение к данным по ключу:
🚩Как это работает?
🟠Хеширование ключа
Представим, что у нас есть ключ
Применяем хеш-функцию к
Это хеш – длинное число, но нам нужно индексировать данные, поэтому мы берем его остаток от деления на размер массива (
🟠Поиск элемента
Когда мы ищем
Применяет ту же хеш-функцию, получает индекс
Ищет значение в ячейке
Таким образом, поиск данных по ключу происходит мгновенно –
Коллизия – это когда разные ключи дают один и тот же индекс.
Пример:
Решения:
Метод цепочек – внутри каждой ячейки храним список значений (например, массив или связанный список).
Открытая адресация – если ячейка занята, ищем следующую свободную.
🚩Хеш-таблица в PHP
В PHP массивы (
Ставь 👍 и забирай 📚 Базу знаний
Хеш-таблица – это структура данных, которая хранит пары "ключ → значение" и использует хеш-функцию для быстрого поиска, добавления и удаления данных.
🚩Основная идея
Ключ обрабатывается хеш-функцией → превращается в числовой индекс.
По индексу данные хранятся в массиве.
Быстрое обращение к данным по ключу:
O(1) в среднем. 🚩Как это работает?
🟠Хеширование ключа
Представим, что у нас есть ключ
"apple", и мы храним для него значение 100. Применяем хеш-функцию к
"apple" $hash = hash('md5', 'apple');
echo $hash; // 1f3870be274f6c49b3e31a0c6728957fЭто хеш – длинное число, но нам нужно индексировать данные, поэтому мы берем его остаток от деления на размер массива (
mod): $index = hexdec(substr($hash, 0, 8)) % 10;
echo $index; // Например, 3
🟠Поиск элемента
Когда мы ищем
apple, алгоритм: Применяет ту же хеш-функцию, получает индекс
3 Ищет значение в ячейке
3 Таким образом, поиск данных по ключу происходит мгновенно –
O(1). Коллизия – это когда разные ключи дают один и тот же индекс.
Пример:
"apple" и "banana" могут попасть в одну ячейку! Решения:
Метод цепочек – внутри каждой ячейки храним список значений (например, массив или связанный список).
Открытая адресация – если ячейка занята, ищем следующую свободную.
🚩Хеш-таблица в PHP
В PHP массивы (
array) работают как хеш-таблицы! $hashTable = [];
$hashTable['apple'] = 100;
$hashTable['banana'] = 200;
echo $hashTable['apple']; // 100
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Слово "global" для чего используется?
Слово global позволяет получить доступ к переменной, определённой за пределами текущей функции. Используется, чтобы модифицировать глобальные переменные внутри функций.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Слово global позволяет получить доступ к переменной, определённой за пределами текущей функции. Используется, чтобы модифицировать глобальные переменные внутри функций.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какие бывают области видимости?
Область видимости (или видимость) определяет, где в коде можно получить доступ к переменным, функциям и другим объектам. В PHP есть несколько видов областей видимости, которые контролируют доступность этих элементов в разных частях программы.
🚩Основные области видимости
🟠Локальная область видимости
Переменные, объявленные внутри функции, имеют локальную область видимости и доступны только внутри этой функции.
🟠Глобальная область видимости
Переменные, объявленные вне функций и классов, имеют глобальную область видимости и доступны везде в скрипте, кроме внутренних областей видимости (например, внутри функций), если не использовать ключевое слово
🟠Область видимости функций и методов
Переменные, объявленные внутри функции или метода класса, имеют свою локальную область видимости и не видны за её пределами.
🟠Область видимости классов
Публичная (public)
Публичные свойства и методы доступны отовсюду: как внутри класса, так и вне его.
🟠Защищённая (protected)
Защищённые свойства и методы доступны только внутри класса и его наследников.
🟠Приватная (private)
Приватные свойства и методы доступны только внутри класса, в котором они объявлены, и недоступны в наследниках.
🟠Локальная область видимости
Переменные доступны только внутри функции или метода, где они объявлены.
🟠Глобальная область видимости
Переменные доступны везде в скрипте, кроме внутренних областей видимости, если не используется
🟠Публичная область видимости
Свойства и методы доступны отовсюду.
🟠Защищённая область видимости
Свойства и методы доступны только внутри класса и его наследников.
🟠Приватная область видимости
Свойства и методы доступны только внутри класса, в котором они объявлены.
Ставь 👍 и забирай 📚 Базу знаний
Область видимости (или видимость) определяет, где в коде можно получить доступ к переменным, функциям и другим объектам. В PHP есть несколько видов областей видимости, которые контролируют доступность этих элементов в разных частях программы.
🚩Основные области видимости
🟠Локальная область видимости
Переменные, объявленные внутри функции, имеют локальную область видимости и доступны только внутри этой функции.
<?php
function test() {
$localVar = "I'm local";
echo $localVar; // Выведет "I'm local"
}
test();
echo $localVar; // Ошибка: переменная не найдена
?>
🟠Глобальная область видимости
Переменные, объявленные вне функций и классов, имеют глобальную область видимости и доступны везде в скрипте, кроме внутренних областей видимости (например, внутри функций), если не использовать ключевое слово
global.<?php
$globalVar = "I'm global";
function test() {
global $globalVar;
echo $globalVar; // Выведет "I'm global"
}
test();
?>
🟠Область видимости функций и методов
Переменные, объявленные внутри функции или метода класса, имеют свою локальную область видимости и не видны за её пределами.
<?php
class Test {
public function method() {
$localVar = "I'm local in method";
echo $localVar; // Выведет "I'm local in method"
}
}
$test = new Test();
$test->method();
echo $localVar; // Ошибка: переменная не найдена
?>
🟠Область видимости классов
Публичная (public)
Публичные свойства и методы доступны отовсюду: как внутри класса, так и вне его.
<?php
class Test {
public $publicVar = "I'm public";
public function publicMethod() {
echo $this->publicVar;
}
}
$test = new Test();
echo $test->publicVar; // Доступно и выведет "I'm public"
$test->publicMethod(); // Доступно и выведет "I'm public"
?>
🟠Защищённая (protected)
Защищённые свойства и методы доступны только внутри класса и его наследников.
<?php
class Base {
protected $protectedVar = "I'm protected";
protected function protectedMethod() {
echo $this->protectedVar;
}
}
class Derived extends Base {
public function accessProtected() {
echo $this->protectedVar; // Доступно
$this->protectedMethod(); // Доступно
}
}
$derived = new Derived();
$derived->accessProtected(); // Выведет "I'm protected"
// echo $derived->protectedVar; // Ошибка: доступ запрещен
// $derived->protectedMethod(); // Ошибка: доступ запрещен
?>
🟠Приватная (private)
Приватные свойства и методы доступны только внутри класса, в котором они объявлены, и недоступны в наследниках.
<?php
class Test {
private $privateVar = "I'm private";
private function privateMethod() {
echo $this->privateVar;
}
public function accessPrivate() {
$this->privateMethod(); // Доступно
}
}
$test = new Test();
$test->accessPrivate(); // Выведет "I'm private"
// echo $test->privateVar; // Ошибка: доступ запрещен
// $test->privateMethod(); // Ошибка: доступ запрещен
?>
🟠Локальная область видимости
Переменные доступны только внутри функции или метода, где они объявлены.
🟠Глобальная область видимости
Переменные доступны везде в скрипте, кроме внутренних областей видимости, если не используется
global.🟠Публичная область видимости
Свойства и методы доступны отовсюду.
🟠Защищённая область видимости
Свойства и методы доступны только внутри класса и его наследников.
🟠Приватная область видимости
Свойства и методы доступны только внутри класса, в котором они объявлены.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое middleware?
Middleware в PHP — это компонент, который обрабатывает HTTP-запросы и ответы на пути между сервером и конечной точкой. Каждый middleware может модифицировать запрос, ответ или остановить выполнение цепочки, отправив ответ напрямую. Они используются для выполнения задач, таких как аутентификация, логирование, обработка ошибок и кэширование. Middleware широко применяется в современных фреймворках, таких как Laravel, для разделения логики обработки запросов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как сделать так, чтобы приложение разворачивалось быстрее в Docker`е?
При развёртывании приложения в Docker важно минимизировать время сборки и оптимизировать слои контейнера.
🟠Использовать `.dockerignore`
Не копировать лишние файлы в контейнер (например,
🟠Оптимизировать `Dockerfile` (Меньше слоёв, кэширование)
Плохо (лишние слои, без кэширования)
Хорошо (разделение слоёв, кэширование)
🟠Использовать `multi-stage builds` (если контейнер весит много)
Позволяет уменьшить размер конечного образа, убрав ненужные файлы и инструменты.
🟠Использовать `docker build --cache-from`
Позволяет использовать кеш из предыдущих сборок.
🟠Оптимизировать `docker-compose` (если используется)
Перенести volume для
🟠Использовать `Alpine Linux` (если важен размер образа)
Alpine – лёгкая версия Linux (~5 MB), подходит для PHP, Nginx, Node.js.
Ставь 👍 и забирай 📚 Базу знаний
При развёртывании приложения в Docker важно минимизировать время сборки и оптимизировать слои контейнера.
🟠Использовать `.dockerignore`
Не копировать лишние файлы в контейнер (например,
node_modules, .git, vendor, .env). .git
node_modules
vendor
.env
*.log
🟠Оптимизировать `Dockerfile` (Меньше слоёв, кэширование)
Плохо (лишние слои, без кэширования)
FROM php:8.2-cli
WORKDIR /app
COPY . . # Копирует ВСЕ файлы (долго и некэшируемо)
RUN composer install
RUN npm install
RUN npm run build
Хорошо (разделение слоёв, кэширование)
FROM php:8.2-cli
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --prefer-dist # Используем кэширование слоёв
COPY package.json package-lock.json ./
RUN npm install --only=production && npm cache clean --force
COPY . . # Копируем код ПОСЛЕ установки зависимостей (чтобы кэширование работало)
RUN npm run build
🟠Использовать `multi-stage builds` (если контейнер весит много)
Позволяет уменьшить размер конечного образа, убрав ненужные файлы и инструменты.
# 1-й этап: сборка зависимостей (Node.js)
FROM node:18 as frontend
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
# 2-й этап: финальный образ
FROM php:8.2-cli
WORKDIR /app
COPY --from=frontend /app/dist /app/public # Берём только готовые файлы
COPY . .
CMD ["php", "artisan", "serve", "--host=0.0.0.0"]
🟠Использовать `docker build --cache-from`
Позволяет использовать кеш из предыдущих сборок.
docker build --cache-from=myapp:latest -t myapp .
🟠Оптимизировать `docker-compose` (если используется)
Перенести volume для
vendor и node_modules на хост, чтобы не скачивать их в контейнере. services:
app:
build: .
volumes:
- .:/app
- /app/vendor # Чтобы composer install не запускался каждый раз
- /app/node_modules # Чтобы npm install не замедлял перезапуск
🟠Использовать `Alpine Linux` (если важен размер образа)
Alpine – лёгкая версия Linux (~5 MB), подходит для PHP, Nginx, Node.js.
FROM php:8.2-fpm-alpine
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие могут быть проблемы от JOIN'а?
Объединение таблиц через JOIN может вызвать:
- Снижение производительности – если таблицы большие и нет индексов, выполнение запроса может быть долгим.
- Дублирование данных – неправильное соединение может привести к множеству дублирующихся строк.
- Рост потребления памяти – большие JOIN'ы могут потреблять много оперативной памяти и временных файлов.
- Блокировки и конкуренция – если JOIN выполняется на обновляемых данных, могут возникать блокировки записей.
- Сложность оптимизации – сложные JOIN'ы труднее индексировать и оптимизировать.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Объединение таблиц через JOIN может вызвать:
- Снижение производительности – если таблицы большие и нет индексов, выполнение запроса может быть долгим.
- Дублирование данных – неправильное соединение может привести к множеству дублирующихся строк.
- Рост потребления памяти – большие JOIN'ы могут потреблять много оперативной памяти и временных файлов.
- Блокировки и конкуренция – если JOIN выполняется на обновляемых данных, могут возникать блокировки записей.
- Сложность оптимизации – сложные JOIN'ы труднее индексировать и оптимизировать.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое замыкание?
Это функция вместе с окружением, в котором она была создана. Замыкание позволяет функции "запомнить" переменные из внешнего контекста, даже после того, как этот контекст завершил свое выполнение. Это делает замыкания мощным инструментом для создания функций, которые могут работать с данными, доступными во время их создания.
🚩Основные особенности замыканий
🟠Доступ к внешним переменным
Функция может использовать переменные из внешнего контекста, в котором она была создана.
🟠Сохранение состояния
Замыкания могут сохранять состояние между вызовами.
🟠Инкапсуляция
Замыкания могут использоваться для создания частных данных и методов.
🚩Примеры замыканий в различных языках программирования
🟠JavaScript
В JavaScript замыкания используются очень часто. Рассмотрим простой пример:
🟠Python
В Python замыкания также поддерживаются:
🟠PHP
В PHP замыкания реализуются через анонимные функции и использование
🚩Применение замыканий
🟠Создание фабричных функций
Замыкания могут использоваться для создания фабричных функций, которые генерируют другие функции с определенным поведением.
🟠Инкапсуляция
Замыкания позволяют скрывать переменные и методы внутри функции, предоставляя интерфейс для взаимодействия с ними.
🟠Обработка событий
В языках, таких как JavaScript, замыкания часто используются в обработчиках событий для доступа к контексту, в котором был назначен обработчик.
🟠Мемоизация
Замыкания могут использоваться для создания функций, которые запоминают результаты предыдущих вычислений и используют их для ускорения последующих вызовов.
Ставь 👍 и забирай 📚 Базу знаний
Это функция вместе с окружением, в котором она была создана. Замыкание позволяет функции "запомнить" переменные из внешнего контекста, даже после того, как этот контекст завершил свое выполнение. Это делает замыкания мощным инструментом для создания функций, которые могут работать с данными, доступными во время их создания.
🚩Основные особенности замыканий
🟠Доступ к внешним переменным
Функция может использовать переменные из внешнего контекста, в котором она была создана.
🟠Сохранение состояния
Замыкания могут сохранять состояние между вызовами.
🟠Инкапсуляция
Замыкания могут использоваться для создания частных данных и методов.
🚩Примеры замыканий в различных языках программирования
🟠JavaScript
В JavaScript замыкания используются очень часто. Рассмотрим простой пример:
function createCounter() {
let count = 0; // внешняя переменная
return function() { // внутренная функция
count++;
return count;
}
}
const counter = createCounter(); // создаем замыкание
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3🟠Python
В Python замыкания также поддерживаются:
def create_counter():
count = 0
def increment():
nonlocal count
count += 1
return count
return increment
counter = create_counter()
print(counter()) # 1
print(counter()) # 2
print(counter()) # 3
🟠PHP
В PHP замыкания реализуются через анонимные функции и использование
use:function createCounter() {
$count = 0;
return function() use (&$count) {
$count++;
return $count;
};
}
$counter = createCounter();
echo $counter(); // 1
echo $counter(); // 2
echo $counter(); // 3🚩Применение замыканий
🟠Создание фабричных функций
Замыкания могут использоваться для создания фабричных функций, которые генерируют другие функции с определенным поведением.
🟠Инкапсуляция
Замыкания позволяют скрывать переменные и методы внутри функции, предоставляя интерфейс для взаимодействия с ними.
🟠Обработка событий
В языках, таких как JavaScript, замыкания часто используются в обработчиках событий для доступа к контексту, в котором был назначен обработчик.
🟠Мемоизация
Замыкания могут использоваться для создания функций, которые запоминают результаты предыдущих вычислений и используют их для ускорения последующих вызовов.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Сколькими способами можно создать ветку в Git?
Создать ветку в Git можно:
1. Командой git branch <имя> – создаст новую ветку.
2. git checkout -b <имя> – создаст и сразу переключится.
3. git switch -c <имя> – альтернатива checkout.
4. В графических интерфейсах (GitKraken, SourceTree) – создание через UI.
5. В удаленном репозитории (GitHub, GitLab) – через web-интерфейс
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Создать ветку в Git можно:
1. Командой git branch <имя> – создаст новую ветку.
2. git checkout -b <имя> – создаст и сразу переключится.
3. git switch -c <имя> – альтернатива checkout.
4. В графических интерфейсах (GitKraken, SourceTree) – создание через UI.
5. В удаленном репозитории (GitHub, GitLab) – через web-интерфейс
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Как посчитать функцию если внутри неё много различных действий?
Сложность функции можно оценить с помощью Big O (O-нотация) – это способ понять, как увеличивается время работы функции при росте входных данных.
🚩Определение сложности по Big O
Константные операции (
Циклы (
Вложенные циклы (
Рекурсия учитывается как глубина рекурсии.
🚩Примеры расчёта сложности
Простая функция (O(1)) – не зависит от входных данных
Линейная сложность O(N) (цикл)
Квадратичная сложность O(N²) (вложенные циклы)
Логарифмическая сложность O(log N) (деление пополам, бинарный поиск)
Факториальная сложность O(N!) (перебор всех вариантов)
🚩Как считать сложность функции с разными действиями?
Если в функции разные действия, считаем их отдельно и берём наибольшую сложность.
Ставь 👍 и забирай 📚 Базу знаний
Сложность функции можно оценить с помощью Big O (O-нотация) – это способ понять, как увеличивается время работы функции при росте входных данных.
🚩Определение сложности по Big O
Константные операции (
+, -, *, /, if, return) считаются за O(1). Циклы (
for, while) увеличивают сложность** (например, for на N итераций → O(N)). Вложенные циклы (
for внутри for) дают O(N²). Рекурсия учитывается как глубина рекурсии.
🚩Примеры расчёта сложности
Простая функция (O(1)) – не зависит от входных данных
function addNumbers($a, $b) {
return $a + $b;
}Линейная сложность O(N) (цикл)
function printNumbers($n) {
for ($i = 0; $i < $n; $i++) {
echo $i;
}
}Квадратичная сложность O(N²) (вложенные циклы)
function printPairs($n) {
for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n; $j++) {
echo "($i, $j) ";
}
}
}Логарифмическая сложность O(log N) (деление пополам, бинарный поиск)
function binarySearch($arr, $target) {
$left = 0;
$right = count($arr) - 1;
while ($left <= $right) {
$mid = floor(($left + $right) / 2);
if ($arr[$mid] == $target) {
return $mid;
} elseif ($arr[$mid] < $target) {
$left = $mid + 1;
} else {
$right = $mid - 1;
}
}
return -1;
}Факториальная сложность O(N!) (перебор всех вариантов)
function factorial($n) {
if ($n == 1) return 1;
return $n * factorial($n - 1);
}🚩Как считать сложность функции с разными действиями?
Если в функции разные действия, считаем их отдельно и берём наибольшую сложность.
function complexFunction($n) {
// O(1)
$sum = 0;
// O(N)
for ($i = 0; $i < $n; $i++) {
$sum += $i;
}
// O(N²)
for ($i = 0; $i < $n; $i++) {
for ($j = 0; $j < $n; $j++) {
echo "Hello";
}
}
return $sum;
}Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое логирование?
Это запись событий, ошибок и действий приложения в журнал для диагностики и анализа.
1. Логи помогают отслеживать выполнение кода, анализировать сбои и выявлять узкие места.
2. Используются различные уровни логов: INFO, DEBUG, ERROR.
3. Это важный инструмент для отладки, мониторинга и аудита системы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Логи помогают отслеживать выполнение кода, анализировать сбои и выявлять узкие места.
2. Используются различные уровни логов: INFO, DEBUG, ERROR.
3. Это важный инструмент для отладки, мониторинга и аудита системы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое strict mode?
Strict mode (Строгий режим) в PHP — это режим, который заставляет PHP строго проверять типы аргументов в функциях.
По умолчанию PHP автоматически преобразует типы (например,
🚩Как включить strict mode?
Строгий режим включается в начале PHP-файла с помощью:
🚩Пример работы strict mode
Без строгого режима (PHP сам меняет типы)
Со strict mode (жёсткая проверка типов)
🚩Зачем нужен strict mode?
Позволяет избежать ошибок, связанных с автоматическим преобразованием типов.
Делает код более предсказуемым и надёжным.
Используется в крупных проектах, где важна строгая типизация.
Ставь 👍 и забирай 📚 Базу знаний
Strict mode (Строгий режим) в PHP — это режим, который заставляет PHP строго проверять типы аргументов в функциях.
По умолчанию PHP автоматически преобразует типы (например,
"10" превращается в 10), но в строгом режиме такая конвертация запрещена — если тип не совпадает, будет ошибка. 🚩Как включить strict mode?
Строгий режим включается в начале PHP-файла с помощью:
declare(strict_types=1);
🚩Пример работы strict mode
Без строгого режима (PHP сам меняет типы)
function sum(int $a, int $b) {
return $a + $b;
}
echo sum("5", 10); // 15 (PHP сам превратит "5" в 5)Со strict mode (жёсткая проверка типов)
declare(strict_types=1);
function sum(int $a, int $b) {
return $a + $b;
}
echo sum("5", 10); // ❌ ФАТАЛЬНАЯ ОШИБКА!
🚩Зачем нужен strict mode?
Позволяет избежать ошибок, связанных с автоматическим преобразованием типов.
Делает код более предсказуемым и надёжным.
Используется в крупных проектах, где важна строгая типизация.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое полнотекстовый индекс?
Это структура данных, оптимизирующая поиск текстовой информации в базе данных.
1. Используется для эффективного поиска по словам или фразам в текстовых полях.
2. Применяется в MySQL, PostgreSQL, ElasticSearch и других системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Используется для эффективного поиска по словам или фразам в текстовых полях.
2. Применяется в MySQL, PostgreSQL, ElasticSearch и других системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 В чем ставится всегда цель теста?
Цель тестирования всегда заключается в том, чтобы выявить ошибки, дефекты и недостатки в программном обеспечении до того, как оно будет выпущено или внедрено. Тестирование помогает убедиться, что программа работает правильно, соответствует требованиям и ожиданиям пользователей, а также обеспечивает высокое качество и надежность продукта.
🚩Основные цели
🟠Выявление ошибок и дефектов
Найти и исправить ошибки, которые могли возникнуть в ходе разработки. Это помогает предотвратить сбои в работе программы.
🟠Подтверждение соответствия требованиям
Убедиться, что программное обеспечение соответствует заданным требованиям и спецификациям. Это включает проверку функциональности, производительности, безопасности и других аспектов.
🟠Повышение качества продукта
Тестирование помогает улучшить общее качество программного обеспечения, делая его более стабильным, надежным и удобным в использовании.
🟠Обеспечение пользовательского опыта
Убедиться, что конечные пользователи получат продукт, который удовлетворяет их потребности и ожидания, обеспечивая тем самым положительный пользовательский опыт.
🚩Типы
🟠Функциональное тестирование
Проверка того, что каждый компонент системы работает в соответствии с требованиями.
🟠Нефункциональное тестирование
Проверка аспектов, не связанных напрямую с функциональностью, таких как производительность, безопасность, удобство использования и т.д.
🟠Юнит-тестирование
Тестирование отдельных компонентов или модулей кода.
🟠Интеграционное тестирование
Проверка взаимодействия между различными модулями или компонентами системы.
🟠Системное тестирование
Полная проверка всей системы в целом.
🟠Приемочное тестирование
Проверка системы на соответствие бизнес-требованиям и готовность к использованию конечными пользователями.
Ставь 👍 и забирай 📚 Базу знаний
Цель тестирования всегда заключается в том, чтобы выявить ошибки, дефекты и недостатки в программном обеспечении до того, как оно будет выпущено или внедрено. Тестирование помогает убедиться, что программа работает правильно, соответствует требованиям и ожиданиям пользователей, а также обеспечивает высокое качество и надежность продукта.
🚩Основные цели
🟠Выявление ошибок и дефектов
Найти и исправить ошибки, которые могли возникнуть в ходе разработки. Это помогает предотвратить сбои в работе программы.
🟠Подтверждение соответствия требованиям
Убедиться, что программное обеспечение соответствует заданным требованиям и спецификациям. Это включает проверку функциональности, производительности, безопасности и других аспектов.
🟠Повышение качества продукта
Тестирование помогает улучшить общее качество программного обеспечения, делая его более стабильным, надежным и удобным в использовании.
🟠Обеспечение пользовательского опыта
Убедиться, что конечные пользователи получат продукт, который удовлетворяет их потребности и ожидания, обеспечивая тем самым положительный пользовательский опыт.
🚩Типы
🟠Функциональное тестирование
Проверка того, что каждый компонент системы работает в соответствии с требованиями.
🟠Нефункциональное тестирование
Проверка аспектов, не связанных напрямую с функциональностью, таких как производительность, безопасность, удобство использования и т.д.
🟠Юнит-тестирование
Тестирование отдельных компонентов или модулей кода.
🟠Интеграционное тестирование
Проверка взаимодействия между различными модулями или компонентами системы.
🟠Системное тестирование
Полная проверка всей системы в целом.
🟠Приемочное тестирование
Проверка системы на соответствие бизнес-требованиям и готовность к использованию конечными пользователями.
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase {
public function testAdd() {
$calc = new Calculator();
$this->assertEquals(4, $calc->add(2, 2));
$this->assertEquals(0, $calc->add(-1, 1));
}
}
class Calculator {
public function add($a, $b) {
return $a + $b;
}
}
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Реализация Fibonacci с рекурсией или без?
1. С рекурсией: проще написать, но требует больше памяти из-за вложенных вызовов.
2. Без рекурсии: итеративный метод или использование динамического программирования, эффективнее с точки зрения производительности.
3. Выбор зависит от задачи: рекурсия подходит для демонстрации, итерация — для практических целей.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Без рекурсии: итеративный метод или использование динамического программирования, эффективнее с точки зрения производительности.
3. Выбор зависит от задачи: рекурсия подходит для демонстрации, итерация — для практических целей.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое декремент?
декремент — это операция, используемые для увеличения или уменьшения значения переменной на единицу соответственно.
🚩Декремент
Оператор уменьшает значение переменной на единицу. Он представлен двумя минусами (
🟠Префиксный декремент (`--x`)
Сначала уменьшает значение переменной на единицу, затем возвращает новое значение.
🟠Постфиксный декремент (`x--`)
Возвращает текущее значение переменной, а затем уменьшает его на единицу.
Ставь 👍 и забирай 📚 Базу знаний
декремент — это операция, используемые для увеличения или уменьшения значения переменной на единицу соответственно.
🚩Декремент
Оператор уменьшает значение переменной на единицу. Он представлен двумя минусами (
--). Так же, как и инкремент, декремент бывает двух видов:🟠Префиксный декремент (`--x`)
Сначала уменьшает значение переменной на единицу, затем возвращает новое значение.
🟠Постфиксный декремент (`x--`)
Возвращает текущее значение переменной, а затем уменьшает его на единицу.
<?php
$x = 10;
$y = 10;
// Пример префиксного инкремента
echo ++$x; // Выводит 11, x теперь равен 11
// Пример постфиксного инкремента
echo $y++; // Выводит 10, y теперь равен 11
echo $y; // Выводит 11
// Пример префиксного декремента
echo --$x; // Выводит 10, x теперь равен 10
// Пример постфиксного декремента
echo $y--; // Выводит 11, y теперь равен 10
echo $y; // Выводит 10
?>
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое Cookies?
Это небольшие файлы, которые хранят данные на стороне клиента (в браузере). Они используются для:
1. Идентификации пользователя и управления сессиями.
2. Сохранения предпочтений пользователя.
3. Отслеживания активности пользователя на сайте.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Идентификации пользователя и управления сессиями.
2. Сохранения предпочтений пользователя.
3. Отслеживания активности пользователя на сайте.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое нормализация, денормализация?
Это два подхода к проектированию структуры баз данных. Они используются для оптимизации хранения данных и повышения производительности запросов.
🚩Нормализация
Это процесс структурирования базы данных для уменьшения избыточности данных и устранения аномалий при обновлении, вставке или удалении данных.
🚩Цели нормализации
🟠Устранение дублирования данных
Это помогает экономить место и поддерживать согласованность данных.
🟠Повышение целостности данных
Например, если данные изменяются в одном месте, то изменения не нужно делать в других местах.
🚩Этапы нормализации
1⃣Первая нормальная форма (1NF)
Удаление повторяющихся групп и дублирующихся данных.
2⃣Вторая нормальная форма (2NF)
Устранение частичной зависимости данных от составного ключа.
3⃣Третья нормальная форма (3NF)
Устранение транзитивной зависимости (когда данные зависят не от первичного ключа напрямую, а через другие поля).
4⃣Далее
BCNF (нормальная форма Бойса-Кодда) и другие более сложные формы.
🚩Денормализация
Это процесс намеренного добавления избыточности данных для повышения производительности запросов.
🚩Цели денормализации
🟠Ускорение чтения данных
Объединение таблиц или добавление дублированных данных уменьшает количество соединений (
Ставь 👍 и забирай 📚 Базу знаний
Это два подхода к проектированию структуры баз данных. Они используются для оптимизации хранения данных и повышения производительности запросов.
🚩Нормализация
Это процесс структурирования базы данных для уменьшения избыточности данных и устранения аномалий при обновлении, вставке или удалении данных.
🚩Цели нормализации
🟠Устранение дублирования данных
Это помогает экономить место и поддерживать согласованность данных.
🟠Повышение целостности данных
Например, если данные изменяются в одном месте, то изменения не нужно делать в других местах.
🚩Этапы нормализации
1⃣Первая нормальная форма (1NF)
Удаление повторяющихся групп и дублирующихся данных.
2⃣Вторая нормальная форма (2NF)
Устранение частичной зависимости данных от составного ключа.
3⃣Третья нормальная форма (3NF)
Устранение транзитивной зависимости (когда данные зависят не от первичного ключа напрямую, а через другие поля).
4⃣Далее
BCNF (нормальная форма Бойса-Кодда) и другие более сложные формы.
🚩Денормализация
Это процесс намеренного добавления избыточности данных для повышения производительности запросов.
🚩Цели денормализации
🟠Ускорение чтения данных
Объединение таблиц или добавление дублированных данных уменьшает количество соединений (
JOIN) между таблицами.SELECT o.OrderID, c.CustomerName, p.ProductName, p.ProductPrice
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
JOIN Products p ON o.ProductID = p.ProductID;
Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие структуры данных в программировании существуют?
Основные структуры:
- Линейные: массивы, списки, очереди, стеки.
- Нелинейные: деревья, графы.
- Ассоциативные: хеш-таблицы, словари.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Линейные: массивы, списки, очереди, стеки.
- Нелинейные: деревья, графы.
- Ассоциативные: хеш-таблицы, словари.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний