ru
Feedback

Не попадитесь на канал ботавода! Telemetrio находит и помечает такие каналы 👉 Хотите видеть метку — оформите подписку

Backend

Backend

Открыть в Telegram
3 708
Подписчики
-124 часа
-217 дней
-4330 дней
Привлечение подписчиков
нояб. '26
ноябрь '260
в 0 каналах
октябрь '26
+11
в 0 каналах
Get PRO
сентябрь '26
+19
в 0 каналах
Get PRO
август '26
+11
в 0 каналах
Get PRO
июль '26
+16
в 0 каналах
Get PRO
июнь '26
+18
в 1 каналах
Get PRO
май '26
+15
в 0 каналах
Get PRO
апрель '26
+27
в 0 каналах
Get PRO
март '26
+40
в 0 каналах
Get PRO
февраль '26
+29
в 0 каналах
Get PRO
январь '26
+44
в 0 каналах
Get PRO
декабрь '25
+30
в 0 каналах
Get PRO
ноябрь '25
+55
в 0 каналах
Get PRO
октябрь '25
+35
в 0 каналах
Get PRO
сентябрь '25
+35
в 0 каналах
Get PRO
август '25
+35
в 0 каналах
Get PRO
июль '25
+57
в 1 каналах
Get PRO
июнь '25
+30
в 0 каналах
Get PRO
май '25
+97
в 45 каналах
Get PRO
апрель '25
+83
в 0 каналах
Get PRO
март '25
+78
в 3 каналах
Get PRO
февраль '25
+80
в 0 каналах
Get PRO
январь '25
+139
в 53 каналах
Get PRO
декабрь '24
+77
в 0 каналах
Get PRO
ноябрь '24
+106
в 0 каналах
Get PRO
октябрь '24
+189
в 1 каналах
Get PRO
сентябрь '24
+68
в 25 каналах
Get PRO
август '24
+94
в 35 каналах
Get PRO
июль '24
+4 066
в 0 каналах
Дата
Привлечение подписчиков
Упоминания
Каналы
02 ноября0
01 ноября0
Посты канала
🚨 40 минут Пожизненный PRO по цене года закрывается прямо сейчас. Это последнее напоминание. 👉 https://easyoffer.ru/pro
🚨 40 минут Пожизненный PRO по цене года закрывается прямо сейчас. Это последнее напоминание. 👉 https://easyoffer.ru/pro

2
🎃 3 часа до полуночи... Ровно в 00:00 предложение исчезнет, как призрак на рассвете 👻 Последний шанс забрать PRO навсегда п
🎃 3 часа до полуночи... Ровно в 00:00 предложение исчезнет, как призрак на рассвете 👻 Последний шанс забрать PRO навсегда по цене одного года. Без продлений и без воскрешений. Если откладывал — не дай этой возможности стать твоим ночным кошмаром 🦇 👉 https://easyoffer.ru/pro
96
3
🕯 Страшилка на ночь Год спустя. Финальный этап собеседования. В комнате становится холодно. Интервьюер медленно наклоняется
🕯 Страшилка на ночь Год спустя. Финальный этап собеседования. В комнате становится холодно. Интервьюер медленно наклоняется и шепчет: «Почему вы ушли с прошлого места работы?» Ты открываешь easyoffer, а там… «Ваша подписка истекла» 💀 Чтобы эта история не стала твоей, забери пожизненный PRO по цене одного года. База собесов, эталонные ответы, автоотклики, тренажёры и всё, что появится дальше, остаются с тобой навсегда. ⏳ Осталось 7 часов. В полночь предложение исчезнет. 👉 https://easyoffer.ru/pro
104
4
⏳ Сегодня последний день Платишь один раз и забираешь весь easyoffer навсегда, вместе со всеми будущими фичами проекта. Никак
⏳ Сегодня последний день Платишь один раз и забираешь весь easyoffer навсегда, вместе со всеми будущими фичами проекта. Никаких ежегодных продлений, только ты, твой оффер и мешок конфет 🍭 🎃 Завтра цена вернётся к обычной, и такого угощения уже не будет. 👉 https://easyoffer.ru/pro
106
5
Пожизненный PRO — по цене одного года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ
Пожизненный PRO — по цене одного года. Покупаешь один раз — пользуешься всю жизнь: 👉 https://easyoffer.ru/pro 🚀 PRO-доступ закроет 99% проблем на пути к офферу: 1. 1100+ записей реальных собеседований (включая топы: Сбер, Авито, Яндекс, WB, OZON, МТС). Видите всё изнутри: как спрашивают, как отвечают сильные кандидаты и на каких ошибках проваливаются 80%. 2. База live-coding задач и вопросов с реальных собесов — с уникальной системой вероятности их встречи. Готовитесь не вслепую, а точечно по темам, которые спрашивают чаще всего. 3. Эталонные ответы от Senior-разработчиков. Никакой воды и догадок — только чёткие структурированные решения, за которые дают «зелёный свет» к офферу. 4. Полный доступ ко всем грейдам и профессиям. Junior вы или Senior, тестировщик, разработчик или проджект — вы получаете ВСЕ материалы easyoffer без ограничений. Безлимитно, Все, Навсегда. 5. База 400+ тестовых заданий. Прокачивайте навыки на реальных задачах — тех самых, что дают перед собесом. 6. Автоотклики на hh — пока вы спите, резюме уходит рекрутерам автоматически. Экономия сотен часов ручного кликанья. 7. Аналитика ТОП-требований из вакансий. Парсим рынок и показываем, какие скиллы сейчас в цене. Апгрейдите резюме точечно и проходите ATS-фильтры (они отсеивают до 75% резюме ещё до рекрутера). 8. Генератор резюме и CV под каждую вакансию. Забудьте про «универсальное» резюме — нейросеть адаптирует ваш опыт под конкретную позицию за минуту и повышает шансы на приглашение в разы. 9. Тренажёры подготовки к собеседованию: «Реальное собеседование» — сценарий вопросов из настоящих интервью. «Проработка вопросов» — флеш-карточки по методике интервальных повторений (как Anki) 10. 🔥 Самое важное: все будущие фичи Вы платите один раз, а продукт растёт всю жизнь. Каждое обновление, каждый новый инструмент, каждая фича, которая появится за все годы проекта, автоматически падает вам в подписку без доплат. Вы фиксируете цену года, а получаете продукт, который через пару лет будет стоить в разы дороже ⭐️ Это уникальная акция пока сайт в режиме Beta. Успей ей воспользоваться ⏳ Завтра последний день. 👉 https://easyoffer.ru/pro
100
6
🧿 Осталось 3 дня, чтобы забрать оберег! Пожизненный easyoffer PRO по цене одного года. Надеваешь один раз и защищён всю жизн
🧿 Осталось 3 дня, чтобы забрать оберег! Пожизненный easyoffer PRO по цене одного года. Надеваешь один раз и защищён всю жизнь 🎃 От чего защищает оберег: 1. Вопросы и задачи с реальных собеседований в конкретных компаниях — от сюрпризов на собесе 2. Лучшие ответы и видео-примеры от middle/senior специалистов — от ответов уровня джуна 3. Записи реальных собеседований — от страха неизвестности 4. Обход фильтров ATS с топ-30 ключевых слов в резюме — от автоотказов, пришедших из темноты в 3 часа ночи 5. Автоотклики на hh — от бесконечных часов ручных откликов 6. Тренажёры и симуляторы — от дрожи в голосе перед интервьюером 👻 ⏳ Акция действует только до 31 октября 23:59 по МСК 👉 Забрать оберег со скидкой 70%: https://easyoffer.ru/pro
119
7
🎃 Хеллоуинская акция на easyoffer В честь Хеллоуина до 31 октября можно забрать PRO навсегда. Покупаешь один раз и пользуешь
🎃 Хеллоуинская акция на easyoffer В честь Хеллоуина до 31 октября можно забрать PRO навсегда. Покупаешь один раз и пользуешься всю жизнь 🍬Что внутри мешка с угощениями: – База вопросов и задач из собеседований – Примеры видео-ответов на вопросы – Записи реальных собеседований – Тренажёры «Проработка вопросов» и «Реальное собеседование» – Аналитика требований из вакансий – Автоотклики на вакансии 👉 Забрать PRO со скидкой 70%: https://easyoffer.ru/pro
124
8
🤔 Каким образом можно найти "медленный запрос" и проанализировать его в PostgreSQL? 🚩Методы и инструменты. 🟠Включение журналирования медленных запросов Настройка параметров конфигурации PostgreSQL для журналирования медленных запросов позволяет отслеживать запросы, выполнение которых занимает много времени. 1⃣Откройте файл конфигурации PostgreSQL (postgresql.conf). 2⃣Настройте следующие параметры: # Включить логирование всех запросов log_statement = 'all' # Либо логирование только медленных запросов log_min_duration_statement = 1000 # Логировать запросы, выполнение которых заняло более 1000 мс (1 секунда) 3⃣Перезапустите сервер PostgreSQL для применения изменений: sudo systemctl restart postgresql 🟠Использование инструмента `pg_stat_statements` Расширение pg_stat_statements позволяет собирать статистику по выполненным запросам и предоставляет информацию о частоте, времени выполнения и других характеристиках запросов. 1⃣Включите расширение в postgresql.conf: shared_preload_libraries = 'pg_stat_statements' 2⃣Перезапустите сервер PostgreSQL: sudo systemctl restart postgresql 3⃣Создайте расширение в нужной базе данных: CREATE EXTENSION pg_stat_statements; 4⃣Используйте запрос для получения информации о медленных запросах: SELECT query, calls, total_time, mean_time, stddev_time, rows, min_time, max_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; 🟠Анализ запросов с помощью `EXPLAIN` и `EXPLAIN ANALYZE` Команды EXPLAIN и EXPLAIN ANALYZE позволяют понять, как PostgreSQL планирует и выполняет запросы, предоставляя детальную информацию о плане выполнения. 1⃣Выполните команду EXPLAIN для запроса: EXPLAIN SELECT * FROM my_table WHERE id = 1; 2⃣Выполните команду EXPLAIN ANALYZE для запроса: EXPLAIN ANALYZE SELECT * FROM my_table WHERE id = 1; 3⃣Анализируйте выходные данные, чтобы понять, какие операции занимают больше всего времени (например, полное сканирование таблицы, узкие места при соединении таблиц и т.д.). 🟠Использование системных представлений и утилит pg_stat_activity: Показывает текущую активность базы данных, включая выполняемые запросы и их состояние. SELECT pid, usename, state, query, now() - query_start AS duration FROM pg_stat_activity WHERE state != 'idle' ORDER BY duration DESC; pg_locks: Отображает информацию о текущих блокировках в базе данных. SELECT * FROM pg_locks; 1⃣Индексы: Убедитесь, что для часто используемых условий WHERE и JOIN существуют соответствующие индексы. 2⃣Переписывание запросов: Попробуйте переписать запросы для улучшения их производительности. 3⃣Материализованные представления: Используйте материализованные представления для часто выполняемых сложных запросов. 4⃣Конфигурация сервера: Настройте параметры конфигурации PostgreSQL для оптимизации производительности (например, work_mem, shared_buffers, maintenance_work_mem). Ставь 👍 и забирай 📚 Базу знаний
376
9
🤔 Какие join бывают? В реляционных базах данных, операции объединения (JOIN) позволяют объединить строки из двух или более таблиц на основе связанных между собой столбцов. Существует несколько типов JOIN, каждый из которых имеет свои особенности и применим для разных ситуаций. Рассмотрим основные типы JOIN: 🟠INNER JOIN Объединяет строки из обеих таблиц, если они удовлетворяют условию объединения. Когда необходимо выбрать только те строки, которые имеют соответствующие значения в обеих таблицах. SELECT * FROM таблица1 INNER JOIN таблица2 ON таблица1.ключ = таблица2.ключ; 🟠LEFT JOIN (или LEFT OUTER JOIN) Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если соответствующей строки в правой таблице нет, в результирующем наборе данных для столбцов правой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы и соответствующие данные из другой таблицы, если они существуют. SELECT * FROM таблица1 LEFT JOIN таблица2 ON таблица1.ключ = таблица2.ключ; 🟠RIGHT JOIN (или RIGHT OUTER JOIN) Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если соответствующей строки в левой таблице нет, в результирующем наборе данных для столбцов левой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы (правой) и соответствующие данные из другой таблицы (левой), если они существуют. SELECT * FROM таблица1 RIGHT JOIN таблица2 ON таблица1.ключ = таблица2.ключ; 🟠FULL JOIN (или FULL OUTER JOIN) Возвращает все строки, когда есть совпадения либо в левой, либо в правой таблице. Если строки не соответствуют в одной из таблиц, для этой таблицы будут значения NULL. Когда необходимо выбрать все строки из обеих таблиц, независимо от того, есть ли соответствующие строки в другой таблице. SELECT * FROM таблица1 FULL JOIN таблица2 ON таблица1.ключ = таблица2.ключ; 🟠CROSS JOIN Возвращает декартово произведение двух таблиц, то есть все возможные комбинации строк из обеих таблиц. Когда необходимо создать комбинации всех строк из обеих таблиц. Используется редко и с осторожностью, так как может привести к очень большому количеству строк. SELECT * FROM таблица1 CROSS JOIN таблица2; 🟠SELF JOIN Применяется для объединения таблицы самой с собой. Обычно используется для сравнения строк внутри одной и той же таблицы. Когда необходимо сопоставить строки одной таблицы друг с другом, например, для анализа иерархий или поиска парных записей. SELECT A.* FROM таблица A, таблица B WHERE A.ключ = B.ключ; 🟠NATURAL JOIN Автоматически объединяет таблицы по всем столбцам с одинаковыми именами и типами данных. Когда у таблиц есть столбцы с одинаковыми именами, и нужно объединить их без явного указания условий объединения. SELECT * FROM таблица1 NATURAL JOIN таблица2; Ставь 👍 и забирай 📚 Базу знаний
243
10
🤔 Что такое CGI? Это стандартный протокол для веб-серверов, который позволяет запускать внешние программы (скрипты) для генерации веб-страниц динамически. CGI скрипты могут быть написаны на различных языках программирования, таких как Perl, Python, PHP, C и других. Когда веб-сервер получает запрос на страницу, обрабатываемую CGI, он запускает соответствующий скрипт и передает ему данные запроса. 🚩Как работает 1⃣Запрос клиента: Клиент (например, веб-браузер) отправляет HTTP-запрос на веб-сервер. 2⃣Запуск CGI-скрипта: Веб-сервер определяет, что запрос предназначен для CGI-скрипта, и запускает его как отдельный процесс. 3⃣Передача данных: Веб-сервер передает данные запроса (например, параметры формы) в CGI-скрипт через стандартный ввод (stdin) и переменные окружения. 4⃣Выполнение скрипта: CGI-скрипт выполняет необходимые операции (например, доступ к базе данных) и генерирует HTML-страницу. 5⃣Ответ сервера: CGI-скрипт отправляет сгенерированную HTML-страницу обратно на веб-сервер через стандартный вывод (stdout), а сервер передает этот ответ клиенту. 🚩Плюсы ➕Простота и универсальность CGI прост в реализации и не требует сложной настройки. Поддерживает множество языков программирования, что делает его универсальным решением. ➕Совместимость CGI является стандартом и поддерживается практически всеми веб-серверами. ➕Изоляция процессов Каждый запрос запускает новый процесс, что обеспечивает изоляцию запросов и повышает безопасность. 🚩Минусы ➖Производительность Каждый запрос создает новый процесс, что может быть ресурсоемким и замедлять работу сервера при большом количестве запросов. Создание и завершение процессов занимает время, что увеличивает задержку ответа. ➖Масштабируемость Плохая производительность при высоких нагрузках делает CGI плохо подходящим для масштабируемых веб-приложений. Ограниченная возможность использования пула процессов для повышения эффективности. ➖Ограниченная функциональность Сложнее интегрироваться с современными технологиями и фреймворками. Отсутствие встроенных средств для работы с сессиями, аутентификацией и другими функциями современных веб-приложений. 🚩Современные альтернативы 🟠FastCGI Улучшенная версия CGI, которая повторно использует процессы для обработки нескольких запросов, что повышает производительность. 🟠Server-side scripting Языки и фреймворки, такие как PHP, ASP.NET, Node.js, Django, Ruby on Rails, которые интегрируются непосредственно с веб-серверами и обеспечивают высокую производительность. 🟠Web Server Gateway Interface (WSGI) Стандартный интерфейс для Python-приложений, позволяющий эффективную обработку запросов. 🟠Application Servers Серверы приложений, такие как Apache Tomcat, JBoss, которые предоставляют контейнеры для выполнения веб-приложений и управления ими. Ставь 👍 и забирай 📚 Базу знаний
248
11
🤔 Примеры систем CP, AP и CA? В контексте CAP-теоремы(Consistency, Availability, Partition Tolerance) системы обычно делят на три группы: CP (Consistency + Partition Tolerance), AP (Availability + Partition Tolerance) и CA (Consistency + Availability). 🚩CP-системы (Consistency + Partition Tolerance) Системы, которые обеспечивают согласованность данных и устойчивость к разделению сети, но могут временно отказаться от доступности при возникновении сетевых сбоев. Такие системы при сетевом разделении блокируют часть данных или операций, чтобы сохранить согласованное состояние. 🟠HBase и MongoDB в режиме CP Оба эти хранилища данных поддерживают согласованность при сетевых сбоях, но могут ограничивать доступность данных, блокируя операции до восстановления связи. 🟠Zookeeper Система координации распределённых приложений, обеспечивающая согласованность, но жертвующая доступностью в случае сетевых проблем. Она часто используется для управления конфигурацией и синхронизацией данных. 🚩AP-системы (Availability + Partition Tolerance) Системы, которые фокусируются на доступности и устойчивости к разделению сети, но допускают временную неидеальную согласованность данных (например, данные могут быть не сразу синхронизированы между репликами). 🟠Cassandra Эта система обеспечивает доступность и устойчивость к разделению сети, но может допускать задержки в синхронизации данных между узлами. 🟠DynamoDB (режим AP) Поддерживает доступность и устойчивость к разделению сети, за счёт возможного отклонения в согласованности. DynamoDB был разработан Amazon для обеспечения высокой доступности даже в условиях сбоя сети. 🟠Riak Распределённое хранилище, оптимизированное для доступности и устойчивости к разделениям сети. Оно допускает временные рассогласования данных, которые разрешаются позже. 🚩CA-системы (Consistency + Availability) Системы, обеспечивающие согласованность и доступность данных, но не гарантирующие устойчивости к разделению сети. В реальных распределённых системах подобный подход встречается редко, так как любая сеть может столкнуться с разделением, что нарушит работу. 🟠Реляционные базы данных на одном сервере Например, PostgreSQL или MySQL в традиционной конфигурации, работающей на одном сервере без распределения данных. Они поддерживают согласованность и доступность, так как нет сетевого разделения. 🟠Системы кэширования в локальной сети Такие системы, как Redis, при отсутствии распределённой конфигурации и работе в пределах одного узла, могут обеспечить согласованность и доступность. Ставь 👍 и забирай 📚 Базу знаний
238
12
🤔 Что такое инкапсуляция? Это один из основных принципов объектно-ориентированного программирования (ООП), который подразумевает скрытие внутренней реализации объекта и предоставление доступа к ней только через строго определенные методы или интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта. 🚩Основные аспекты инкапсуляции 🟠Скрытие данных Внутреннее состояние объекта (переменные и данные) скрыто от внешнего мира и доступно только через методы класса. 🟠Методы доступа Класс предоставляет публичные методы для взаимодействия с его внутренним состоянием. Эти методы часто называют геттерами (для получения значений) и сеттерами (для установки значений). 🟠Контроль над данными Инкапсуляция позволяет контролировать как данные изменяются и обеспечивать их корректное состояние. Например, можно добавить проверки или ограничения в сеттеры. Пример инкапсуляции на языке Python class Person: def __init__(self, name, age): self._name = name # Внутреннее состояние self._age = age # Геттер для имени def get_name(self): return self._name # Сеттер для имени def set_name(self, name): if isinstance(name, str) and name: self._name = name # Геттер для возраста def get_age(self): return self._age # Сеттер для возраста def set_age(self, age): if isinstance(age, int) and 0 <= age <= 120: self._age = age # Использование класса person = Person("Alice", 30) print(person.get_name()) # Вывод: Alice print(person.get_age()) # Вывод: 30 person.set_name("Bob") person.set_age(35) print(person.get_name()) # Вывод: Bob print(person.get_age()) # Вывод: 35 # Попытка установить некорректное значение person.set_age(-5) # Значение не изменится из-за проверки в сеттере print(person.get_age()) # Вывод: 35 🚩Плюсы ➕Защита данных Скрытие внутреннего состояния объекта предотвращает его некорректное использование и изменение. ➕Упрощение поддержки Инкапсуляция облегчает модификацию и поддержку кода, поскольку внутренние изменения объекта не влияют на внешний код, взаимодействующий с объектом. ➕Повышение гибкости Возможность изменения внутренней реализации объекта без изменения его интерфейса. ➕Контроль доступа Возможность добавления логики проверки и валидации данных при их установке или изменении. Ставь 👍 и забирай 📚 Базу знаний
193
13
🤔 Что такое Docker Compose? Это инструмент, который позволяет определить и управлять многоконтейнерными Docker приложениями. С помощью Docker Compose можно описать конфигурацию всех сервисов вашего приложения в одном файле и затем легко запустить их вместе с помощью одной команды. 🚩Функции 🟠Определение многоконтейнерного приложения Docker Compose использует YAML-файл (docker-compose.yml) для описания всех контейнеров (сервисов), которые составляют ваше приложение. В этом файле можно указать образы, настройки сети, монтируемые тома и переменные окружения. 🟠Управление зависимостями Позволяет указать зависимости между сервисами, что обеспечивает правильный порядок запуска контейнеров. 🟠Запуск и остановка сервисов С помощью простой команды docker-compose up можно запустить все контейнеры, указанные в docker-compose.yml. Команда docker-compose down останавливает и удаляет все контейнеры, сети и тома, созданные up. 🟠Поддержка масштабирования Можно легко масштабировать сервисы (запускать несколько экземпляров одного контейнера) с помощью команды docker-compose up --scale. 🚩Пример использования docker-compose.yml для веб-приложения, состоящего из веб-сервера и базы данных: version: '3' services: web: image: nginx:latest ports: - "80:80" volumes: - ./html:/usr/share/nginx/html depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example volumes: - db_data:/var/lib/mysql volumes: db_data: 🚩Команды 🟠docker-compose up Создает и запускает все контейнеры, указанные в docker-compose.yml. 🟠docker-compose down Останавливает и удаляет все контейнеры, сети и тома, созданные docker-compose up. 🟠docker-compose ps Показывает статус запущенных контейнеров. 🟠docker-compose logs Выводит логи всех контейнеров. 🟠docker-compose exec [service] [command] Выполняет команду в запущенном контейнере. 🚩Плюсы ➕Упрощение разработки Легко настроить и запустить все необходимые сервисы для разработки. ➕Легкость в использовании Простота в управлении многоконтейнерными приложениями с помощью нескольких команд. ➕Унификация окружения Единый файл конфигурации для разработки, тестирования и производства, что снижает вероятность ошибок из-за различий в конфигурациях. ➕Масштабируемость Легко масштабировать отдельные сервисы приложения. Ставь 👍 и забирай 📚 Базу знаний
174
14
🤔 Чем отличаются LEFT JOIN от INNER JOIN? Это два типа соединений (joins) в языке SQL, которые используются для объединения строк из двух или более таблиц на основе связанных столбцов. Основное различие между ними заключается в том, какие строки включаются в результирующий набор данных. 🚩INNER JOIN Возвращает только те строки, которые имеют совпадающие значения в обеих таблицах, участвующих в соединении. Возвращает строки, где существует совпадение значений в обоих таблицах. Если нет совпадающих значений, строка не будет включена в результирующий набор. SELECT Employees.name, Departments.department_name FROM Employees INNER JOIN Departments ON Employees.department_id = Departments.id; 🚩LEFT JOIN Возвращает все строки из левой таблицы (первой таблицы в запросе) и соответствующие строки из правой таблицы. Если в правой таблице нет совпадающих строк, в результирующем наборе будут NULL значения для столбцов правой таблицы. Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствия, возвращаются NULL значения для правой таблицы. SELECT Employees.name, Departments.department_name FROM Employees LEFT JOIN Departments ON Employees.department_id = Departments.id; 🚩Сравнение 🟠INNER JOIN Возвращает только совпадающие строки. Если нет совпадений, строки не включаются в результат. 🟠LEFT JOIN Возвращает все строки из левой таблицы. Включает совпадающие строки из правой таблицы. Если нет совпадений, строки из правой таблицы будут заполнены NULL значениями. Ставь 👍 и забирай 📚 Базу знаний
197
15
🤔 Как работает браузер? Это программное обеспечение, которое позволяет пользователям просматривать и взаимодействовать с информацией в Интернете. Основные функции браузера включают получение, рендеринг и отображение веб-страниц, а также выполнение веб-приложений. 🚩Этапы работы 🟠Ввод URL и запрос к серверу Пользователь вводит URL (Uniform Resource Locator) в адресную строку браузера. Браузер определяет тип протокола (например, HTTP или HTTPS) и преобразует доменное имя в IP-адрес с помощью DNS (Domain Name System). Затем браузер отправляет HTTP-запрос к веб-серверу по указанному IP-адресу. 🟠Получение ответа от сервера Веб-сервер получает запрос и отправляет HTTP-ответ, который обычно содержит HTML-документ, CSS-стили, JavaScript-код и другие ресурсы, такие как изображения и видео. Ответ передается обратно браузеру. 🟠Анализ и построение DOM Браузер анализирует полученный HTML-документ и строит дерево DOM (Document Object Model), представляющее структуру страницы. Одновременно браузер загружает и обрабатывает связанные ресурсы (CSS, JavaScript, изображения). 🟠Применение CSS и построение CSSOM Браузер анализирует CSS-файлы и строит CSSOM (CSS Object Model), описывающую, как элементы должны отображаться. DOM и CSSOM объединяются для создания render tree, которая содержит видимые элементы страницы с их стилями. 🟠Рендеринг страницы Render tree используется для определения положения и внешнего вида элементов на экране. Браузер выполняет layout (разметку) элементов и отрисовывает их на экране. 🟠Выполнение JavaScript Браузер интерпретирует и выполняет JavaScript-код, который может изменять DOM и CSSOM. JavaScript может также взаимодействовать с сервером через AJAX-запросы для динамического обновления страницы без перезагрузки. 🟠Интерактивность Браузер обрабатывает взаимодействие пользователя с элементами страницы (клики, ввод текста и т.д.). Изменения, вызванные действиями пользователя или выполнением JavaScript, могут обновлять render tree и перерисовывать элементы. Ставь 👍 и забирай 📚 Базу знаний
215
16
🤔 Что такое клиент серверная архитектура? Клиент-серверная архитектура — это модель взаимодействия в сетях, где задачи распределяются между поставщиками ресурсов или услуг, называемыми серверами, и потребителями, называемыми клиентами. Это одна из самых распространенных архитектурных моделей в разработке программного обеспечения и сетевых приложений. 🚩Основные компоненты клиент-серверной архитектуры 🟠Клиент Это программа или устройство, которое инициирует запросы к серверу для доступа к ресурсу или услуге. Отправка запросов к серверу. Получение и отображение данных или выполнения действий на основе ответа от сервера. 🟠Сервер Это программа или устройство, которое обрабатывает запросы от клиентов и предоставляет им необходимые ресурсы или услуги. Обработка запросов от клиентов. Управление доступом к ресурсам (например, базам данных, файлам, услугам). Возврат соответствующих данных или результатов выполнения запросов клиентам. 🚩Принцип работы клиент-серверной архитектуры 🟠Инициация запроса Клиент инициирует запрос к серверу. Это может быть запрос на получение данных, отправка данных для обработки, выполнение определенной задачи и т.д. 🟠Обработка запроса Сервер получает запрос и обрабатывает его. Это может включать выполнение операций над базой данных, запуск скриптов или программ, обработку данных и т.д. 🟠Ответ на запрос Сервер отправляет ответ клиенту. Ответ может содержать запрашиваемые данные, подтверждение успешного выполнения операции или сообщение об ошибке. 🟠Получение ответа Клиент получает ответ от сервера и использует его для выполнения дальнейших действий, таких как отображение данных пользователю, обработка данных и т.д. Ставь 👍 и забирай 📚 Базу знаний
225
17
🤔 Что такое миксины? Это один из способов повторного использования кода в объектно-ориентированном программировании. Они представляют собой классы или функции, которые предоставляют методы для других классов, без необходимости быть основой для этих классов. Миксины позволяют «подмешивать» функциональность в другие классы, обеспечивая гибкость и модульность кода. 🚩Характеристики 🟠Повторное использование кода Миксины позволяют избежать дублирования кода путем инкапсуляции общих методов и свойств, которые могут быть использованы в различных классах. 🟠Множественное наследование В языках, поддерживающих множественное наследование (например, Python), миксины могут быть использованы как базовые классы для других классов, предоставляя дополнительные методы и свойства. Это позволяет создавать классы, комбинируя несколько миксинов для расширения функциональности. 🟠Композиция В языках, где множественное наследование не поддерживается или нежелательно (например, в JavaScript), миксины могут быть применены через композицию, где функциональность миксина добавляется к целевому объекту или классу. 🟠Изоляция поведения Миксины позволяют изолировать и инкапсулировать определенное поведение или функциональность, что упрощает тестирование и поддержку кода. 🚩Примеры использования 🟠Python Миксины часто используются через множественное наследование. class LoggableMixin: def log(self, message): print(f"Log: {message}") class Database(LoggableMixin): def save(self, data): self.log("Saving data") # Код для сохранения данных db = Database() db.save({"key": "value"}) 🟠JavaScript Миксины могут быть применены через композицию. const loggableMixin = { log(message) { console.log(`Log: ${message}`); } }; class Database { save(data) { this.log("Saving data"); // Код для сохранения данных } } Object.assign(Database.prototype, loggableMixin); const db = new Database(); db.save({ key: 'value' }); Ставь 👍 и забирай 📚 Базу знаний
211
18
🤔 Как защитить куки от воровства и от подделки? 🟠Использование HTTPS Передача данных через HTTPS (SSL/TLS) обеспечивает шифрование данных между клиентом и сервером, что предотвращает их перехват и чтение третьими лицами. Настройте ваш веб-сервер для использования HTTPS, получив и установив SSL/TLS сертификат. 🟠Флаг Secure Куки передаются только по HTTPS-соединениям. Добавьте флаг Secure при установке куки. Set-Cookie: sessionId=abc123; Secure 🟠Флаг HttpOnly Куки недоступны через JavaScript, что предотвращает их кражу с помощью XSS (Cross-Site Scripting) атак. Добавьте флаг HttpOnly при установке куки. Set-Cookie: sessionId=abc123; HttpOnly 🟠Флаг SameSite Предотвращает отправку куки на другие сайты, что защищает от CSRF (Cross-Site Request Forgery) атак. Добавьте флаг SameSite при установке куки. Варианты включают Strict, Lax, и None. Set-Cookie: sessionId=abc123; SameSite=Strict 🟠Шифрование содержимого куки Делает данные бесполезными для злоумышленников, даже если они смогут украсть куки. Используйте серверные библиотеки для шифрования и дешифрования данных в куки перед отправкой и после получения. 🟠Подпись куки С помощью HMAC (Hash-based Message Authentication Code) позволяет проверить целостность и подлинность данных в куки. Используйте секретный ключ для генерации HMAC подписи и добавьте её к куки. import hmac import hashlib secret_key = b'secret' cookie_value = b'sessionId=abc123' signature = hmac.new(secret_key, cookie_value, hashlib.sha256).hexdigest() cookie = f'{cookie_value.decode()}; Signature={signature}' 🟠Защита от XSS атак Могут использоваться для кражи куки. Включает в себя валидацию и фильтрацию пользовательских вводов, использование Content Security Policy (CSP) и безопасное кодирование данных. Внедрите валидацию и фильтрацию вводов на стороне сервера, настройте CSP заголовки. Content-Security-Policy: script-src 'self' 🟠Регулярное обновление и истечение срока действия куки Значений куки и установка короткого срока действия уменьшает временное окно для атакующих. Устанавливайте короткий срок действия и обновляйте значение куки при каждой сессии. Set-Cookie: sessionId=abc123; Max-Age=3600 # 1 час Ставь 👍 и забирай 📚 Базу знаний
197
19
🤔 Что такое SOLID? Это акроним, представляющий пять основных принципов объектно-ориентированного программирования и дизайна, которые помогают разработчикам создавать более понятный, гибкий и поддерживаемый код. Эти принципы были предложены Робертом Мартином (известным также как Uncle Bob) и являются основополагающими в области программной инженерии. 🟠Single Responsibility Principle (Принцип единственной ответственности) Этот принцип гласит, что у каждого класса должна быть только одна причина для изменения, то есть класс должен иметь только одну ответственность или задачу. Это помогает уменьшить сложность и повысить читаемость кода, делая его более управляемым и легким для поддержки. Когда класс выполняет лишь одну задачу, его легче тестировать и изменять без влияния на другие части системы. 🟠Open/Closed Principle (Принцип открытости/закрытости) Программные сущности (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации. Это означает, что поведение классов должно быть расширяемым без изменения их исходного кода. Для реализации этого принципа часто используются абстракции и интерфейсы, которые позволяют добавлять новые функции через наследование и полиморфизм, не нарушая существующий код. 🟠Liskov Substitution Principle (Принцип подстановки Барбары Лисков) Объекты подклассов должны быть заменяемы объектами суперклассов без нарушения правильности программы. Это означает, что если у нас есть базовый класс и его подкласс, то мы должны иметь возможность заменить экземпляры базового класса экземплярами подкласса без изменения желаемого поведения программы. Этот принцип поддерживает полиморфизм и гарантирует, что производные классы могут корректно взаимодействовать с остальным кодом. 🟠Interface Segregation Principle (Принцип разделения интерфейсов) Клиенты не должны зависеть от интерфейсов, которые они не используют. Этот принцип направлен на создание узкоспециализированных интерфейсов, которые являются специфичными для отдельных клиентов. Таким образом, классы, реализующие эти интерфейсы, не будут обязаны реализовывать методы, которые им не нужны. Это уменьшает сложность и улучшает управляемость кода, а также способствует гибкости и повторному использованию интерфейсов. 🟠Dependency Inversion Principle (Принцип инверсии зависимостей) Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа модулей должны зависеть от абстракций. Этот принцип направлен на уменьшение зависимости высокоуровневого кода от низкоуровневых деталей, что позволяет легче изменять и тестировать систему. Реализация этого принципа часто включает использование инверсии управления (IoC) и внедрения зависимостей (DI), что способствует созданию более гибких и модульных архитектур. Ставь 👍 и забирай 📚 Базу знаний
193
20
🤔 Что такое XML? XML (Extensible Markup Language) — это расширяемый язык разметки, используемый для представления структурированных данных в формате, который легко читается как человеком, так и машиной. XML разработан для хранения и обмена данными между различными системами и платформами. 🚩Основные характеристики 🟠Расширяемость XML позволяет создавать собственные теги, что делает его гибким для различных применений и доменов. 🟠Читаемость XML-документы легко читаются и понимаются человеком благодаря текстовому формату. 🟠Структурированность XML-документы имеют четкую иерархическую структуру, которая делает их удобными для хранения сложных данных. 🟠Платформенная независимость XML является текстовым форматом, что делает его совместимым с любыми операционными системами и приложениями. 🚩Структура XML-документа 🟠Пролог Опциональная часть, которая может содержать информацию о версии XML и кодировке документа. <?xml version="1.0" encoding="UTF-8"?> 🟠Корневой элемент Каждый XML-документ должен иметь один корневой элемент, который содержит все остальные элементы. <root> <!-- Другие элементы --> </root> 🟠Элементы (теги) Основные строительные блоки XML-документа. Элементы могут содержать текст, другие элементы и атрибуты. <book> <title>XML Basics</title> <author>John Doe</author> <year>2023</year> </book> 🟠Атрибуты Дополнительные данные, связанные с элементами. Атрибуты задаются внутри открывающего тега. <book genre="fiction"> <title>XML Basics</title> <author>John Doe</author> <year>2023</year> </book> Пример XML-документа <?xml version="1.0" encoding="UTF-8"?> <library> <book id="1" genre="fiction"> <title>XML Basics</title> <author>John Doe</author> <year>2023</year> </book> <book id="2" genre="non-fiction"> <title>Learning XML</title> <author>Jane Smith</author> <year>2022</year> </book> </library> 🚩Плюсы и минусы ➕Интероперабельность XML используется для обмена данными между различными системами и приложениями, обеспечивая совместимость. ➕Гибкость Пользователи могут создавать собственные теги и атрибуты, что делает XML пригодным для различных областей применения. ➕Стандартизация XML является стандартом, поддерживаемым многими технологиями и инструментами. ➕Валидация XML-документы могут быть проверены на соответствие определенной структуре с помощью схем XML Schema (XSD) или DTD (Document Type Definition). ➖Объемность XML может быть довольно объемным из-за избыточности тегов, что может привести к увеличению размера данных. ➖Сложность парсинга Обработка и парсинг XML-документов может быть сложным и требовать значительных вычислительных ресурсов по сравнению с другими форматами, такими как JSON. Ставь 👍 и забирай 📚 Базу знаний
194