Backend
3.95K subscribers
35 photos
708 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Краткий ответ:
Паттерны проектирования — это шаблоны решений типичных задач разработки ПО. Они делятся на три категории: порождающие (Singleton, Factory Method, Abstract Factory, Builder, Prototype), структурные (Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy) и поведенческие (Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor).

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
OWASP Top 10 — список самых критических уязвимостей веб-приложений. Этот список обновляется регулярно, чтобы отражать текущие угрозы и уязвимости.

OWASP Top 10: Основные уязвимости веб-приложений

1. Внедрение (Injection)


Уязвимость, при которой злоумышленник может вставить вредоносный код в запросы к базе данных, LDAP, SQL и т.д.

SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'password';


Рекомендации: Использование подготовленных выражений (prepared statements) и параметризированных запросов.

2. Недостаточная аутентификация и управление сеансами (Broken Authentication and Session Management)


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

Рекомендации: Использование безопасных механизмов аутентификации и управления сеансами, таких как многофакторная аутентификация (MFA).

3. Межсайтовый скриптинг (Cross-Site Scripting, XSS)


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

<script>alert('XSS');</script>


Рекомендации: Очистка (sanitization) и экранирование (escaping) пользовательского ввода.

4. Незащищенные прямые ссылки на объекты (Insecure Direct Object References, IDOR)


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

https://example.com/user?id=123


Рекомендации: Проверка прав доступа на серверной стороне.

5. Недостаточная безопасность конфигурации (Security Misconfiguration)


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

Доступ к административной панели с использованием стандартных учетных данных.

Рекомендации: Регулярные проверки и тестирование конфигурации безопасности.

6. Уязвимости компонентов с известными уязвимостями (Vulnerable Components)


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

Использование устаревшей версии библиотеки с известной уязвимостью.

Рекомендации: Регулярное обновление компонентов и использование инструментов для проверки уязвимостей.

7. Межсайтовая подделка запросов (Cross-Site Request Forgery, CSRF)

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

<img src="https://example.com/transfer?amount=1000&to=attacker_account" />


Рекомендации: Использование CSRF-токенов для защиты форм и запросов.

8. Небезопасная десериализация (Insecure Deserialization)


Уязвимость, при которой злоумышленник может изменить или вставить вредоносные объекты в процессе десериализации.

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

Рекомендации: Использование безопасных методов десериализации и проверка данных перед десериализацией.

9. Недостаточный контроль доступа (Insufficient Logging and Monitoring)


Недостаток логирования и мониторинга, что затрудняет обнаружение и реагирование на атаки.

Отсутствие логирования попыток входа в систему.

Рекомендации: Внедрение эффективных стратегий логирования и мониторинга.

10. Недостатки безопасности при использовании API (Server-Side Request Forgery, SSRF)


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

https://example.com/fetch?url=https://malicious.com


Рекомендации: Ограничение доступа к внутренним системам и проверка входящих URL.

Заключение


OWASP Top 10 предоставляет критически важные знания для защиты веб-приложений от самых распространенных уязвимостей. Понимание этих уязвимостей и внедрение соответствующих мер безопасности помогают разработчикам создавать более защищенные приложения. Регулярное обучение и использование ресурсов OWASP станут неотъемлемой частью вашей стратегии обеспечения безопасности.
Forwarded from Идущий к IT
10$ за техническое собеседование на английском языке:

1. Отправьте запись технического собеседования на английском языке файлом на этот аккаунт
2. Добавьте ссылку на вакансию или пришлите название компании и должность
3. Напишите номер кошелка USDT (Tether) на который отправить 10$

🛡 Важно:

– Запись будет использована только для сбора данных о вопросах
– Вы останетесь анонимны
– Запись нигде не будет опубликована

🤝 Условия:

– Внятный звук, различимая речь
– Допустимые профессии:
• Любые программисты
• DevOps
• Тестировщики
• Дата сайнтисты
• Бизнес/Системные аналитики
• Прожекты/Продукты
• UX/UI и продукт дизайнеры
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Что такое ACID?

💬 Спрашивают в 44% собеседований

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

1️⃣ Atomicity (Атомарность):
Атомарность гарантирует, что каждая транзакция выполняется полностью или не выполняется вовсе. Если любая часть транзакции завершается с ошибкой, то все изменения, внесенные в ходе этой транзакции, отменяются. Это свойство обеспечивает целостность данных, предотвращая частичные обновления.
Пример: Если транзакция состоит из двух операций (перевод денег с одного счета на другой), то обе операции должны быть выполнены успешно или ни одна из них не должна быть выполнена.

2️⃣Consistency (Согласованность):
Согласованность обеспечивает, что транзакция переводит базу данных из одного согласованного состояния в другое согласованное состояние. Это означает, что все правила и ограничения, заданные в базе данных (такие как целостность ссылок, уникальность и т.д.), должны быть соблюдены до и после выполнения транзакции.
Пример: В базе данных учетных записей баланс счета не может быть отрицательным. Транзакция должна гарантировать, что это правило не будет нарушено.

3️⃣Isolation (Изолированность):
Изолированность гарантирует, что результаты выполнения транзакции невидимы для других транзакций, пока она не будет завершена. Это свойство предотвращает проблемы, связанные с параллельным выполнением транзакций, такие как "грязные" чтения, неповторяемые чтения и фантомные чтения.
Пример: Если одна транзакция читает данные, то она не увидит изменения, сделанные другой параллельно выполняющейся транзакцией, до тех пор, пока вторая транзакция не будет завершена.

4️⃣ Durability (Долговечность):
Долговечность гарантирует, что после завершения транзакции ее результаты будут сохранены и останутся в базе данных даже в случае сбоя системы или потери питания. Это достигается путем записи изменений на диск и использования механизмов резервного копирования.
Пример: После успешного выполнения транзакции, фиксирующей покупку товаров, информация о покупке останется в базе данных, даже если система сразу после этого выйдет из строя.

🤔 Краткий ответ:
ACID — это набор свойств транзакций в СУБД, включающий атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation) и долговечность (Durability). Эти свойства обеспечивают надежность и целостность данных при выполнении транзакций.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
Преимущества и недостатки микросервисов по сравнению с монолитами

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

Что такое монолитная архитектура?

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

Пример:

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

Преимущества монолитной архитектуры


Простота разработки и тестирования:

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

Упрощенное развертывание:

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

Производительность:

Внутренние вызовы между модулями быстрее, так как они выполняются в рамках одного процесса.

Недостатки монолитной архитектуры


Масштабируемость:

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

Гибкость разработки:

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

Надежность:

Ошибка в одном модуле может привести к падению всего приложения.

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

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

Пример:

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

Преимущества микросервисной архитектуры


Масштабируемость:

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

Гибкость разработки:

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

Надежность:

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

Недостатки микросервисной архитектуры


Сложность управления:

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

Повышенные накладные расходы:

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

Тестирование:

Тестирование микросервисов требует более сложной инфраструктуры для имитации сетевых взаимодействий и зависимостей.

Заключение

Монолитная и микросервисная архитектуры имеют свои плюсы и минусы. Монолитные приложения проще разрабатывать и развертывать, но они ограничены в масштабируемости и гибкости. Микросервисы предлагают большую масштабируемость и гибкость, но требуют более сложного управления и дополнительных ресурсов. Выбор архитектуры зависит от конкретных потребностей проекта, размера команды, требований к масштабируемости и гибкости. Понимание этих аспектов поможет сделать правильный выбор для вашего приложения.
👍1
📌 Что такое JSON?

💬 Спрашивают в 38% собеседований

JSON (JavaScript Object Notation) — это легкий формат обмена данными, который легко читается и пишется человеком, а также легко парсится и генерируется компьютером. Он используется для представления структурированных данных в текстовом формате и основан на подмножестве языка программирования JavaScript, но независим от него. JSON часто используется для передачи данных между сервером и веб-приложением в формате, который легко обрабатывается.

🤔 Основные характеристики JSON:

1️⃣. Простота:

JSON имеет простой и понятный синтаксис, состоящий из двух основных структур: коллекций пар "ключ-значение" (объектов) и упорядоченных списков значений (массивов). Это делает его легким для понимания и работы как для людей, так и для машин.

2️⃣ Легковесность:

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

3️⃣ Язык-независимость:

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

4️⃣Читаемость человеком:

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

🤔 Структура JSON:

Объекты:

Представляют собой коллекции пар "ключ-значение", заключенные в фигурные скобки {}. Ключи являются строками, а значения могут быть любыми допустимыми типами данных JSON (строки, числа, массивы, объекты, логические значения, null).
  {
"name": "John",
"age": 30,
"isStudent": false,
"address": {
"street": "123 Main St",
"city": "Anytown"
},
"courses": ["Math", "Science", "History"]
}


Массивы:

Представляют собой упорядоченные списки значений, заключенные в квадратные скобки []. Значения могут быть любого типа данных JSON.
  ["apple", "banana", "cherry"]


Примитивные типы данных:

Включают строки, числа, логические значения (true или false), и null.
  {
"stringExample": "Hello, World!",
"numberExample": 42,
"booleanExample": true,
"nullExample": null
}


🤔 Использование JSON:

1️⃣Передача данных между клиентом и сервером:

JSON широко используется в веб-разработке для обмена данными между клиентскими приложениями и сервером через HTTP-запросы, обычно с использованием методов GET или POST.

2️⃣ Конфигурационные файлы:

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

3️⃣ Хранение данных:

В некоторых базах данных, таких как MongoDB, JSON используется как формат для хранения документов.

🤔 Краткий ответ:

JSON (JavaScript Object Notation) — это легкий текстовый формат обмена данными, который легко читается и пишется человеком и обрабатывается компьютером. Он используется для представления структурированных данных и часто применяется для передачи данных между клиентом и сервером в веб-приложениях.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Пример развертывания микросервисов

Для иллюстрации процесса развертывания микросервисов мы рассмотрим использование Docker и Kubernetes, двух наиболее популярных инструментов для этой задачи.

Шаг 1: Подготовка микросервисов


Каждый микросервис упаковывается в Docker-образ. Допустим, у нас есть три микросервиса: user-service, order-service и inventory-service.

Dockerfile для user-service:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]


Соберите Docker-образ:
docker build -t user-service:latest .


Повторите эти шаги для других микросервисов.

Шаг 2: Запуск микросервисов с Docker Compose


Docker Compose позволяет запускать многоконтейнерные приложения с помощью одного файла.

docker-compose.yml:
version: '3'
services:
user-service:
image: user-service:latest
ports:
- "3001:3000"
order-service:
image: order-service:latest
ports:
- "3002:3000"
inventory-service:
image: inventory-service:latest
ports:
- "3003:3000"


Запустите все микросервисы:
docker-compose up


Шаг 3: Развертывание микросервисов с Kubernetes


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

Deployment файл для user-service:
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
spec:
replicas: 3
selector:
matchLabels:
app: user-service
template:
metadata:
labels:
app: user-service
spec:
containers:
- name: user-service
image: user-service:latest
ports:
- containerPort: 3000


Service файл для user-service:
apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
selector:
app: user-service
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer


Примените конфигурации:
kubectl apply -f user-service-deployment.yaml
kubectl apply -f user-service-service.yaml


Повторите эти шаги для других микросервисов.

В следующем посте разберем Инструменты для управления микросервисами и примеры их использования. 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструменты для управления микросервисами

Kubernetes


Функции: Автоматическое масштабирование, самовосстановление, управляемые развертывания.
Преимущества: Обширная экосистема, поддержка облачных провайдеров.

Istio


Функции: Сетевое управление, балансировка нагрузки, безопасность, мониторинг.
Преимущества: Улучшенная управляемость микросервисов, видимость трафика и трассировка запросов.

Prometheus и Grafana


Функции: Сбор метрик, мониторинг, построение графиков.
Преимущества: Гибкость настройки, поддержка Kubernetes.

Jaeger


Функции: Трассировка распределенных систем.
Преимущества: Обнаружение узких мест и проблем в производительности микросервисов.

ELK Stack (Elasticsearch, Logstash, Kibana)


Функции: Логирование, анализ логов, визуализация.
Преимущества: Мощные возможности поиска и визуализации логов.

Пример использования инструментов

Для мониторинга и логирования используем Prometheus и Grafana:

Prometheus Config:


global:
scrape_interval: 15s

scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https


Grafana Config:


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

Заключение


Развертывание и управление микросервисами может быть сложным, но с использованием Docker и Kubernetes этот процесс становится более управляемым. Инструменты, такие как Istio, Prometheus, Grafana, Jaeger и ELK Stack, обеспечивают необходимую инфраструктуру для мониторинга, логирования и управления микросервисами, что делает их эксплуатацию более эффективной и безопасной. Понимание этих технологий и их правильное применение позволяет создавать масштабируемые и надежные микросервисные приложения.
👍21
📌 В чем разница get от post?

💬 Спрашивают в 30 % собеседований

Методы GET и POST являются двумя наиболее часто используемыми HTTP-методами для передачи данных между клиентом и сервером. Они выполняют разные задачи и имеют свои особенности и случаи применения.

🤔 GET

1️⃣ Цель использования: Метод GET используется для получения данных с сервера. Это наиболее часто используемый метод для запросов, которые не изменяют состояние сервера.

2️⃣ Передача данных: Данные передаются через URL в строке запроса (query string). Это делает данные видимыми и ограничивает их размер.

3️⃣ Кэширование: Запросы GET могут кэшироваться браузерами, серверами и прокси-серверами. Это позволяет ускорить повторные запросы и снизить нагрузку на сервер.

4️⃣ Идемпотентность: GET-запросы являются идемпотентными, что означает, что повторное выполнение одного и того же GET-запроса приведет к одному и тому же результату, не изменяя состояние ресурса.

5️⃣ Безопасность: GET-запросы считаются безопасными, так как они не изменяют данные на сервере.

🤔 POST

1️⃣ Цель использования: Метод POST используется для отправки данных на сервер, чтобы создать или изменить ресурсы. Это подходящий метод для операций, которые изменяют состояние сервера.

2️⃣ Передача данных: Данные передаются в теле запроса. Это позволяет отправлять большие объемы данных и сохранять конфиденциальность данных, поскольку они не видны в URL.

3️⃣ Кэширование: Запросы POST не кэшируются браузерами и прокси-серверами по умолчанию. Это обеспечивает, что данные будут отправлены на сервер каждый раз при выполнении запроса.

4️⃣ Идемпотентность: POST-запросы не являются идемпотентными. Каждый новый POST-запрос может привести к созданию новых ресурсов или изменению существующих, что делает их выполнение неоднозначным при повторении.

5️⃣ Безопасность: POST-запросы более безопасны в плане передачи данных, так как информация передается в теле запроса и не видна в URL.

🤔 Примеры использования

GET: Получение информации о пользователе, загрузка страницы или получение данных с API.

POST: Отправка формы с данными регистрации, добавление нового товара в базу данных, обновление информации о пользователе.

🤔 Краткий ответ

GET используется для получения данных с сервера и передает параметры через URL, тогда как POST используется для отправки данных на сервер и передает параметры в теле запроса. GET-запросы кэшируются и являются идемпотентными, а POST-запросы не кэшируются и не являются идемпотентными.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Введение в концепцию CI/CD

В современном мире разработки программного обеспечения концепция CI/CD (Continuous Integration / Continuous Delivery) становится неотъемлемой частью успешного проекта. CI/CD позволяет автоматизировать сборку, тестирование и развертывание приложений, что значительно ускоряет и упрощает процесс разработки. В этом посте мы рассмотрим основные принципы CI/CD, их преимущества и примеры использования.

Что такое CI/CD?


Continuous Integration (CI) — это практика частой интеграции изменений кода в основную ветку репозитория. Цель CI — обнаружение и устранение проблем на ранних стадиях путем автоматического запуска сборки и тестов при каждом коммите.

Continuous Delivery (CD) — это практика автоматического развертывания каждой успешной сборки на тестовые или производственные среды. CD позволяет быстро и безопасно выпускать новые версии программного обеспечения.

Преимущества CI/CD


Быстрая доставка изменений:

Автоматизация процессов интеграции и развертывания сокращает время от написания кода до его попадания в продакшн.

Раннее обнаружение ошибок:

Автоматические тесты и проверки позволяют выявлять ошибки на ранних этапах, что упрощает их устранение.

Повышение качества кода:

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

Улучшение сотрудничества:

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

Основные компоненты CI/CD


Репозиторий кода (например, Git):

Основное хранилище кода, в котором разработчики хранят и обновляют свои изменения.

Система сборки (например, Jenkins, Travis CI):

Инструмент для автоматизации процессов сборки и тестирования.

Средства тестирования (например, JUnit, Selenium):

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

Средства развертывания (например, Kubernetes, Docker):

Платформы для автоматического развертывания и управления приложениями.

Пример CI/CD процесса


Рассмотрим простой пример использования CI/CD с помощью Jenkins и Docker.

Шаг 1: Настройка репозитория


Создайте репозиторий на GitHub или GitLab и добавьте туда ваш проект.

Шаг 2: Настройка Jenkins


Установите Jenkins на сервере или используйте облачное решение.
Создайте новый проект (Pipeline) в Jenkins и настройте его для вашего репозитория.

Пример Jenkinsfile:
pipeline {
agent any

stages {
stage('Checkout') {
steps {
git 'https://github.com/your-repo/project.git'
}
}
stage('Build') {
steps {
sh 'docker build -t project:latest .'
}
}
stage('Test') {
steps {
sh 'docker run project:latest ./run-tests.sh'
}
}
stage('Deploy') {
steps {
sh 'docker run -d -p 80:80 project:latest'
}
}
}
}


Шаг 3: Настройка автоматического развертывания


Используйте Docker для контейнеризации вашего приложения и Kubernetes для его развертывания.

Пример Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]


Пример развертывания в Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: project-deployment
spec:
replicas: 3
selector:
matchLabels:
app: project
template:
metadata:
labels:
app: project
spec:
containers:
- name: project
image: project:latest
ports:
- containerPort: 3000


Заключение

CI/CD — это мощная концепция, которая позволяет автоматизировать процессы интеграции, тестирования и развертывания приложений. Она способствует быстрому и безопасному выпуску новых версий, улучшению качества кода и повышению эффективности разработки. Использование инструментов, таких как Jenkins, Docker и Kubernetes, позволяет легко внедрить CI/CD в ваш проект, обеспечивая стабильность и масштабируемость вашего приложения.
👍1
📌 Как работают индексы?

💬 Спрашивают в 30 % собеседований

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

🤔 Основные принципы работы индексов

1️⃣ Структура данных: Индексы организованы в специализированные структуры данных, такие как B-деревья, B+-деревья или хеш-таблицы. Эти структуры оптимизированы для быстрого поиска, вставки и удаления данных.

2️⃣ Создание индексов: Когда создается индекс на один или несколько столбцов таблицы, база данных строит структуру данных, которая хранит значения этих столбцов в отсортированном виде, вместе с указателями на соответствующие строки таблицы. Это позволяет базе данных быстро находить нужные строки по значению индекса.

3️⃣ Поиск по индексу: При выполнении запроса, который включает условия поиска по индексируемым столбцам, база данных может использовать индекс для быстрого нахождения строк. Вместо полного сканирования таблицы, база данных проходит по дереву индекса и быстро находит нужные строки.

4️⃣ Поддержание индексов: Когда данные в таблице обновляются (добавляются новые строки, изменяются или удаляются существующие), индексы также должны обновляться. Это может привести к дополнительным затратам на время вставки и обновления данных, так как требуется поддерживать актуальность структуры индекса.

5️⃣ Выбор индексов: Правильный выбор индексов важен для оптимальной производительности. Индексы следует создавать на столбцах, которые часто используются в условиях поиска, соединениях и сортировках. Избыточные индексы могут увеличивать объем хранения и снижать производительность операций вставки и обновления.

🤔 Виды индексов

1️⃣ Первичный ключ (Primary Key): Это уникальный индекс, который не допускает дубликатов и обычно используется для идентификации строк в таблице.

2️⃣ Уникальный индекс (Unique Index): Обеспечивает уникальность значений в индексируемом столбце, но допускает одно или несколько NULL значений.

3️⃣ Обычный индекс (Non-Unique Index): Используется для ускорения поиска и может содержать дублирующиеся значения.

4️⃣ Составной индекс (Composite Index): Индекс, созданный на нескольких столбцах. Полезен, когда запросы часто включают условия на несколько столбцов одновременно.

5️⃣ Кластерный индекс (Clustered Index): Определяет физический порядок хранения строк в таблице. У таблицы может быть только один кластерный индекс, так как строки могут быть отсортированы только одним способом.

🤔 Примеры использования индексов

Поиск и выборка данных: Запросы типа SELECT * FROM users WHERE age > 30 значительно ускоряются, если столбец age индексирован.

Сортировка данных: Запросы типа SELECT * FROM users ORDER BY name будут быстрее, если столбец name индексирован.

Соединение таблиц: Запросы, которые соединяют несколько таблиц по индексируемым столбцам, выполняются быстрее, так как индексы облегчают поиск соответствующих строк.

🤔 Краткий ответ

Индексы работают путем создания специализированных структур данных, которые позволяют базе данных быстро находить строки по значениям индексируемых столбцов. Это ускоряет операции поиска и выборки данных, но требует дополнительных затрат на обновление индексов при изменении данных в таблице.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
⚙️ Инструменты для CI/CD: Jenkins, GitLab CI, CircleCI, и др.

Jenkins


Jenkins — один из самых популярных и универсальных инструментов для автоматизации CI/CD. Он является open-source проектом и поддерживает большое количество плагинов для интеграции с различными инструментами и сервисами.

✔️ Преимущества:

Гибкость и расширяемость: Большое количество плагинов позволяет настроить Jenkins под любые нужды.
Поддержка различных языков и платформ: Можно использовать для проектов на любом языке программирования и для любой платформы.
Активное сообщество: Большое сообщество пользователей и разработчиков постоянно обновляет и улучшает Jenkins.

Пример использования Jenkinsfile:
pipeline {
agent any

stages {
stage('Checkout') {
steps {
git 'https://github.com/your-repo/project.git'
}
}
stage('Build') {
steps {
sh 'make build'
}
}
stage('Test') {
steps {
sh 'make test'
}
}
stage('Deploy') {
steps {
sh 'make deploy'
}
}
}
}


GitLab CI


GitLab CI — встроенная система CI/CD в GitLab, которая предоставляет мощные инструменты для автоматизации процессов сборки, тестирования и развертывания. GitLab CI интегрируется непосредственно с репозиториями GitLab и позволяет использовать YAML файлы для описания пайплайнов.

✔️ Преимущества:

Интеграция с GitLab: Прямая интеграция с репозиториями GitLab упрощает настройку и управление пайплайнами.
Масштабируемость: Легко масштабировать за счет использования Runner'ов.
Полный DevOps цикл: GitLab CI покрывает весь процесс от разработки до развертывания и мониторинга.

Пример .gitlab-ci.yml:
stages:
- build
- test
- deploy

build:
stage: build
script:
- make build

test:
stage: test
script:
- make test

deploy:
stage: deploy
script:
- make deploy


CircleCI


CircleCI — облачный сервис CI/CD, который поддерживает быструю и надежную интеграцию и доставку кода. CircleCI обеспечивает автоматическое тестирование и развертывание приложений с использованием конфигурационных файлов.

✔️ Преимущества:

Облачное решение: Не требуется настройка и поддержка собственной инфраструктуры.
Гибкость конфигурации: Поддержка различных языков и платформ.
Интеграция с GitHub и Bitbucket: Легко интегрируется с популярными системами контроля версий.

Пример .circleci/config.yml:
version: 2.1

jobs:
build:
docker:
- image: circleci/node:14
steps:
- checkout
- run: npm install
- run: npm test

workflows:
version: 2
build_and_test:
jobs:
- build


Другие инструменты


Travis CI:
Облачный сервис CI/CD, который легко интегрируется с GitHub.
Простой YAML синтаксис для конфигурации пайплайнов.

Bamboo:
Решение от Atlassian для CI/CD.
Глубокая интеграция с другими продуктами Atlassian, такими как Jira и Bitbucket.

Azure DevOps:
Набор инструментов от Microsoft для разработки, тестирования и развертывания.
Поддержка множества языков и платформ, интеграция с облачными сервисами Azure.

Заключение


Выбор инструмента для CI/CD зависит от множества факторов, включая потребности проекта, используемые технологии и предпочитаемую экосистему. Jenkins предлагает большую гибкость и расширяемость, GitLab CI удобен для интеграции с репозиториями GitLab, а CircleCI и Travis CI обеспечивают удобство облачных решений. Независимо от выбранного инструмента, внедрение CI/CD в процесс разработки способствует ускорению доставки кода, повышению качества и стабильности приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет используется для работы с базами данных Oracle в Python?
Anonymous Quiz
8%
cx_Oracle
35%
oracledb
38%
pyoracle
19%
python-oracle
📌 Что такое индексы?

💬 Спрашивают в 31 % собеседований

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

🤔 Зачем нужны индексы:

1️⃣ Ускорение поиска данных: Основная функция индексов - это сокращение времени, необходимого для поиска записей в таблице. Без индексов база данных должна бы была проверять каждую запись, чтобы найти нужные данные.

2️⃣ Улучшение производительности запросов: Индексы могут значительно повысить производительность запросов SELECT, особенно тех, которые часто выполняются.

3️⃣ Сортировка данных: Индексы могут использоваться для ускорения операций сортировки, так как данные в индексе могут быть отсортированы.

4️⃣ Уникальность: Индексы также используются для обеспечения уникальности значений в столбцах. Например, уникальный индекс гарантирует, что в столбце не будет повторяющихся значений.

🤔 Как используются индексы:

Создание индексов: Индексы создаются с помощью SQL-запросов, таких как CREATE INDEX. Можно создавать индексы на один столбец или на несколько столбцов (составные индексы).

Типы индексов: Существует несколько типов индексов, включая B-дерево, хеш-индексы, битмап-индексы и другие. Каждый тип имеет свои особенности и применяется в зависимости от конкретных задач.

Использование индексов в запросах: При выполнении запросов база данных автоматически использует индексы для оптимизации поиска данных. Это не требует дополнительных действий со стороны пользователя.

Обслуживание индексов: Важно понимать, что индексы требуют дополнительного пространства на диске и могут замедлять операции вставки, обновления и удаления данных, так как индексы нужно поддерживать в актуальном состоянии. Поэтому следует тщательно продумывать, какие индексы необходимы.

🤔 Примеры применения индексов:

1️⃣ Индекс на первичном ключе: Обычно создается автоматически при создании таблицы. Он обеспечивает уникальность и быстрый доступ к записям.

2️⃣ Индексы на внешних ключах: Помогают ускорить операции соединения (JOIN) между таблицами.

3️⃣ Индексы на столбцах с частыми запросами: Например, если часто выполняются запросы поиска по столбцу "email", имеет смысл создать индекс на этом столбце.

🤔 Краткий ответ:

Индексы в базе данных - это специальные структуры, которые улучшают скорость поиска данных. Они создаются на одном или нескольких столбцах таблицы и используются для ускорения выполнения запросов, обеспечения уникальности данных и улучшения производительности системы в целом.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
➡️ Примеры автоматизации развертывания и тестирования

Пример 1: Использование Docker и Docker Compose


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

Dockerfile:
# Используем базовый образ Node.js
FROM node:14

# Создаем рабочую директорию
WORKDIR /app

# Копируем package.json и устанавливаем зависимости
COPY package*.json ./
RUN npm install

# Копируем остальные файлы
COPY . .

# Открываем порт приложения
EXPOSE 3000

# Команда для запуска приложения
CMD ["node", "server.js"]


docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
environment:
- NODE_ENV=development
db:
image: mongo
ports:
- "27017:27017"


Для развертывания используйте команду:
docker-compose up -d


Пример 2: Использование Kubernetes


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

Deployment файл:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp:latest
ports:
- containerPort: 3000


Service файл:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer


Применение конфигураций:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml


➡️ Автоматизация тестирования

Пример 1: Unit-тесты с использованием Jest


Jest — это фреймворк для тестирования JavaScript.

Пример теста:
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;

// sum.test.js
const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});


Добавьте скрипт для запуска тестов в package.json:
"scripts": {
"test": "jest"
}


Запустите тесты командой:
npm test


Пример 2: Интеграционные тесты с использованием Selenium


Selenium — это инструмент для автоматизированного тестирования веб-приложений.

Пример теста на Python:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

# Указываем путь к веб-драйверу
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# Открываем страницу
driver.get("https://www.example.com")

# Находим элемент и выполняем действие
elem = driver.find_element_by_name("q")
elem.send_keys("Selenium")
elem.send_keys(Keys.RETURN)

# Проверяем результат
assert "No results found." not in driver.page_source

# Закрываем браузер
driver.quit()


➡️ Интеграция с CI/CD

Автоматизацию развертывания и тестирования можно легко интегрировать в CI/CD пайплайн с использованием инструментов, таких как Jenkins, GitLab CI или CircleCI.

Пример пайплайна Jenkins:
pipeline {
agent any

stages {
stage('Checkout') {
steps {
git 'https://github.com/your-repo/project.git'
}
}
stage('Build') {
steps {
sh 'docker build -t myapp:latest .'
}
}
stage('Test') {
steps {
sh 'npm test'
}
}
stage('Deploy to Dev') {
steps {
sh 'kubectl apply -f deployment.yaml'
}
}
stage('Deploy to Prod') {
steps {
input message: 'Deploy to production?', ok: 'Deploy'
sh 'kubectl apply -f deployment.yaml --namespace=prod'
}
}
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в PHP используется для работы с базами данных PostgreSQL?
Anonymous Quiz
35%
pgsql
30%
pdo_pgsql
17%
postgresql
17%
All of the above
📌 Что такое нормализация баз данных?

💬 Спрашивают в 31 % собеседований

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

🤔 Зачем нужна нормализация:

1️⃣ Устранение избыточности данных: Нормализация позволяет минимизировать дублирование данных, что экономит пространство и упрощает управление базой данных.

2️⃣ Обеспечение целостности данных: Нормализация помогает поддерживать целостность данных, обеспечивая правильное и единообразное хранение данных.

3️⃣ Упрощение структуры базы данных: Разделение данных на логические таблицы делает структуру базы данных более понятной и удобной для использования.

4️⃣ Избежание аномалий данных: Нормализация предотвращает возникновение аномалий при обновлении, вставке и удалении данных.

🤔 Основные формы нормализации:

1️⃣ Первая нормальная форма (1NF):

Удаление повторяющихся групп в таблице.

Каждый столбец должен содержать только атомарные (неделимые) значения.

Все записи в таблице должны быть уникальными.

2️⃣ Вторая нормальная форма (2NF):

Таблица должна быть в 1NF.

Удаление частичной функциональной зависимости: каждый неключевой атрибут должен быть полностью зависим от первичного ключа.

3️⃣ Третья нормальная форма (3NF):

Таблица должна быть в 2NF.

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

4️⃣ Бойс-Кодд нормальная форма (BCNF):

Усиление 3NF: каждая детерминанта должна быть кандидатом на ключ, что означает, что в любой нетривиальной функциональной зависимости X -> Y, X должно быть суперключом.

5️⃣ Четвертая нормальная форма (4NF):

Таблица должна быть в BCNF.

Устранение многозначных зависимостей: таблица не должна содержать многозначных зависимостей, когда один атрибут зависит от нескольких значений другого атрибута.

6️⃣ Пятая нормальная форма (5NF):

Таблица должна быть в 4NF.

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

🤔 Примеры применения нормализации:

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

Вторая нормальная форма: Если у вас есть таблица заказов с колонками "номер заказа", "название товара" и "цена товара", вы можете создать отдельные таблицы для заказов и товаров, чтобы цена товара зависела только от товара, а не от комбинации заказа и товара.

Третья нормальная форма: Если у вас есть таблица сотрудников с колонками "идентификатор сотрудника", "название отдела" и "имя начальника отдела", вы можете создать отдельные таблицы для сотрудников и отделов, чтобы имя начальника отдела зависело только от отдела, а не от сотрудника.

🤔 Краткий ответ:

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

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет используется для работы с NoSQL базами данных в Java?
Anonymous Quiz
24%
MongoDB Java Driver
6%
Cassandra Java Driver
4%
Couchbase Java SDK
66%
All of the above