JOIN'ы (объединения) — это операции в языке SQL, которые позволяют объединять строки из двух или более таблиц на основе логических связей между ними. Существует несколько типов JOIN'ов, каждый из которых используется для разных сценариев объединения данных.
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;
SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;
SELECT e1.name AS Employee1, e2.name AS Employee2
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;
JOIN'ы в SQL — это операции для объединения строк из двух или более таблиц на основе логических связей. Основные типы JOIN'ов включают:
Please open Telegram to view this post
VIEW IN TELEGRAM
ORM (Object-Relational Mapping) — это технология, которая позволяет разработчикам взаимодействовать с реляционными базами данных, используя объектно-ориентированные парадигмы программирования. ORM автоматизирует преобразование данных между несовместимыми типами систем, таких как объекты в программном коде и таблицы в базе данных.
Рассмотрим пример с использованием Django ORM на Python:
Модель
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
birth_date = models.DateField()
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
Создание записи
author = Author(name='J.K. Rowling', birth_date='1965-07-31')
author.save()
book = Book(title='Harry Potter and the Philosopher\'s Stone', author=author)
book.save()
Извлечение данных
books = Book.objects.filter(author__name='J.K. Rowling')
for book in books:
print(book.title)
ORM (Object-Relational Mapping) — это технология для взаимодействия с реляционными базами данных через объектно-ориентированные парадигмы программирования. ORM автоматизирует преобразование данных между объектами и таблицами, улучшая разработку, поддерживаемость и безопасность кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Anonymous Quiz
15%
DataStax Java Driver
14%
Hector
15%
Kundera
56%
All of the above
Инкапсуляция — это один из основных принципов объектно-ориентированного программирования (ООП), который подразумевает скрытие внутренней реализации объекта и предоставление доступа к ней только через строго определенные методы или интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта.
Рассмотрим пример инкапсуляции на языке 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
Инкапсуляция — это принцип ООП, который скрывает внутреннюю реализацию объекта и предоставляет доступ к данным только через определенные методы, защищая и контролируя состояние объекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
38%
encoding/json
7%
json-iterator
21%
go-simplejson
34%
All of the above
🤯1
Итератор — это объект, который позволяет поочередно проходить через элементы коллекции (например, списка или множества) без необходимости знать внутреннее представление этой коллекции. Итераторы предоставляют стандартный интерфейс для доступа к элементам, что делает их важной частью объектно-ориентированного программирования и функционального программирования.
__iter__(), который возвращает итератор.__iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.Рассмотрим пример создания итератора для простого списка:
Пример с использованием встроенного итератора
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers) # Получение итератора из списка
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
print(next(iterator)) # Вывод: 4
print(next(iterator)) # Вывод: 5
# print(next(iterator)) # Вызывается StopIteration
Пример создания собственного итератора
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
# Использование собственного итератора
my_iter = MyIterator(1, 5)
for num in my_iter:
print(num) # Вывод: 1 2 3 4
Итератор — это объект, который позволяет поочередно проходить через элементы коллекции, предоставляя стандартный интерфейс для доступа к элементам. Итераторы реализуют методы
__iter__() и __next__(), что позволяет использовать их в циклах для последовательного доступа к элементам.Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
68%
sqlite3
13%
sqlite
14%
pysqlite
4%
sqlite-python
👍1
Идемпотентность — это свойство операции, при котором повторное выполнение этой операции приводит к тому же результату, что и однократное выполнение. Это понятие часто используется в контексте HTTP методов, API запросов и транзакций в системах с распределенной архитектурой.
Пример 1: HTTP методы
GET /user/123
Повторный запрос возвращает информацию о пользователе с ID 123 и не изменяет его состояние.
PUT /user/123
{
"name": "John Doe",
"age": 30
}
Повторный запрос обновляет данные пользователя с ID 123, но состояние пользователя остается тем же, если данные запроса не изменяются.
Пример 2: База данных
UPDATE users SET name = 'John Doe' WHERE id = 123;
Повторный запрос обновит имя пользователя с ID 123 на 'John Doe', не изменяя его состояние при повторном выполнении.
INSERT INTO users (name, age) VALUES ('John Doe', 30);Повторный запрос создаст нового пользователя с теми же данными, что изменит состояние базы данных.
Идемпотентность — это свойство операции, при котором повторное выполнение приводит к тому же результату, что и однократное выполнение. Примеры идемпотентных операций включают HTTP методы GET, PUT и DELETE. Идемпотентность повышает надежность системы и упрощает обработку ошибок.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Anonymous Quiz
8%
Retrofit
6%
Jersey
41%
RestTemplate
46%
All of the above
Ответ на сервере, особенно в контексте HTTP, состоит из нескольких ключевых компонентов. Эти компоненты обеспечивают клиенту информацию о результате запроса, статусе обработки, а также предоставляют сами данные, если это необходимо. Основные части ответа включают:
Стартовая линия содержит информацию о статусе ответа и состоит из следующих частей:
Пример:
HTTP/1.1 200 OK
Заголовки предоставляют метаданные о ответе. Они состоят из пар "ключ-значение" и могут включать:
Пример:
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
Тело ответа содержит данные, которые сервер отправляет клиенту. Формат и содержание тела зависят от типа ответа и могут включать:
Пример (JSON):
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}HTTP/1.1 200 OK
Date: Tue, 27 Jul 2024 12:28:53 GMT
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}
Ответ на сервере состоит из стартовой линии (статус запроса), заголовков (метаданные) и тела ответа (данные). Например, в HTTP ответ включает код состояния, заголовки, такие как Content-Type и Content-Length, и само содержимое ответа (например, JSON).
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
19%
py2neo
7%
networkx
33%
igraph
41%
graphtools
HTTP (HyperText Transfer Protocol) методы представляют собой набор стандартных операций, которые используются для взаимодействия между клиентом и сервером в сети. Каждый метод определяет конкретное действие, которое должен выполнить сервер. Вот основные HTTP методы и их предназначение:
Метод GET используется для получения данных с сервера. Он запрашивает представление ресурса, не изменяя его состояния. GET запросы часто используются для запросов веб-страниц и получения данных из API.
Метод POST используется для отправки данных на сервер с целью создания или обновления ресурса. Это может включать отправку формы на веб-сайте или загрузку файла. POST запросы обычно содержат данные в теле запроса.
Метод PUT используется для обновления существующего ресурса или создания нового ресурса на сервере. Если ресурс уже существует, он будет обновлен, если нет — будет создан.
Метод DELETE используется для удаления ресурса с сервера. Запросы DELETE могут быть небезопасными, так как они изменяют состояние сервера, удаляя данные.
Метод PATCH используется для частичного обновления ресурса. В отличие от PUT, который заменяет весь ресурс, PATCH изменяет только указанные части ресурса.
Метод HEAD аналогичен GET, но без тела ответа. Используется для получения метаданных о ресурсе, таких как заголовки, без загрузки самого ресурса.
Метод OPTIONS используется для запроса информации о поддерживаемых методах на сервере или на конкретном ресурсе. Это может быть полезно для определения доступных операций перед отправкой основного запроса.
Метод CONNECT используется для установления туннеля к серверу через прокси. Обычно используется для HTTPS через прокси.
Метод TRACE выполняет тестовый запрос по маршруту до ресурса. Он возвращает запрос, полученный сервером, что может помочь в диагностике сетевых проблем или выявлении изменений в маршруте запроса.
Основные HTTP методы включают GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT и TRACE. Они используются для различных операций с ресурсами на сервере, таких как получение данных, отправка данных, обновление, удаление и диагностика сетевых маршрутов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
6%
Sidekiq
22%
Resque
16%
Delayed::Job
56%
All of the above
MVC (Model-View-Controller) и MVP (Model-View-Presenter) – это архитектурные шаблоны, используемые в разработке программного обеспечения для разделения логики приложения на отдельные компоненты. Хотя обе архитектуры помогают улучшить структуру и поддерживаемость кода, между ними существуют важные различия.
Компоненты:
Как работает:
Преимущества:
Недостатки:
Компоненты:
Как работает:
Преимущества:
Недостатки:
MVC и MVP – это архитектурные шаблоны, используемые для разделения логики приложения. В MVC View взаимодействует напрямую с Model, а в MVP View взаимодействует только с Presenter. В MVC Controller управляет отображением View, а в MVP Presenter управляет всей логикой взаимодействия между Model и View.
Please open Telegram to view this post
VIEW IN TELEGRAM
Anonymous Quiz
28%
cassandra-driver
58%
pycassa
8%
cqlengine
7%
pylibmc
Cherry-pick — это команда в системе управления версиями Git, которая позволяет выбрать один или несколько конкретных коммитов из одной ветки и применить их в другую ветку. Это полезно, когда нужно перенести отдельные изменения без необходимости слияния целых веток.
Основной синтаксис
git cherry-pick <commit_hash>
Пример использования
git checkout target-branch
git cherry-pick a1b2c3d4
git add <resolved_files>
git cherry-pick --continue
Предположим, у вас есть коммит с хешем
a1b2c3d4 в ветке feature-branch, который вы хотите перенести в main-branch.git checkout main-branch
git cherry-pick a1b2c3d4
Если коммит успешно применен, изменения из коммита
a1b2c3d4 будут добавлены в main-branch.develop в release).Cherry-pick в Git — это команда, позволяющая выбрать один или несколько коммитов из одной ветки и применить их в другую ветку. Она используется для избирательного переноса изменений без полного слияния веток.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Anonymous Quiz
37%
jedis
8%
lettuce
16%
redisson
39%
All of the above
В Git команды
rebase и merge используются для объединения изменений из разных веток, но делают это по-разному. Основное различие между ними заключается в том, как они сохраняют историю коммитов и как они влияют на структуру репозитория.git merge <branch>Пример
git checkout main
git merge feature-branch
Результат: Создается новый коммит слияния, который объединяет изменения из
feature-branch в main.git rebase <branch>Пример
git checkout feature-branch
git rebase main
Результат: Коммиты из
feature-branch переносятся на вершину main, создавая линейную историю.Merge
Преимущества:
Недостатки:
Rebase
Преимущества:
Недостатки:
Merge
Rebase
Merge объединяет две ветки, создавая новый коммит слияния, сохраняя всю историю коммитов и структуру ветвления. Rebase переносит коммиты текущей ветки на вершину целевой ветки, создавая линейную историю коммитов, что делает историю чище, но изменяет исходные коммиты.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Anonymous Quiz
3%
Проверка интеграции системы
4%
Тестирование пользовательского интерфейса
93%
Тестирование отдельных модулей кода
0%
Проверка безопасности
Принцип "открытости/закрытости" (Open/Closed Principle, OCP) — это один из пяти принципов SOLID, разработанных для создания устойчивого и легко поддерживаемого кода в объектно-ориентированном программировании. Принцип был предложен Бертраном Мейером в 1988 году и заключается в следующем:
Классы должны быть открыты для расширения, но закрыты для модификации.
Рассмотрим пример на языке программирования Java.
Без соблюдения принципа OCP
public class Shape {
public void drawCircle() {
// рисуем круг
}
public void drawSquare() {
// рисуем квадрат
}
}
public class GraphicEditor {
private Shape shape;
public GraphicEditor(Shape shape) {
this.shape = shape;
}
public void draw(String shapeType) {
if (shapeType.equals("circle")) {
shape.drawCircle();
} else if (shapeType.equals("square")) {
shape.drawSquare();
}
}
}Если нужно добавить новый тип фигуры, например, треугольник, придется изменить класс
Shape и метод draw в классе GraphicEditor, что нарушает принцип OCP.С соблюдением принципа OCP
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
// рисуем круг
}
}
public class Square implements Shape {
@Override
public void draw() {
// рисуем квадрат
}
}
public class GraphicEditor {
private Shape shape;
public GraphicEditor(Shape shape) {
this.shape = shape;
}
public void draw() {
shape.draw();
}
}Теперь, если нужно добавить новый тип фигуры, просто создается новый класс, реализующий интерфейс
Shape, и класс GraphicEditor не требует изменений.Принцип "открытости/закрытости" (Open/Closed Principle) означает, что классы должны быть открыты для расширения, но закрыты для модификации. Это позволяет добавлять новые функции без изменения существующего кода, что повышает гибкость, снижает количество ошибок и упрощает тестирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Anonymous Quiz
13%
Списки
4%
Словари
4%
Множества
79%
Все вышеперечисленные