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

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
📌 Что такое MVVM?

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

MVVM (Model-View-ViewModel) — это архитектурный шаблон, который разделяет приложение на три части: Model (данные и логика), View (интерфейс) и ViewModel (связь между Model и View).

🤔 Пример

Model
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}


ViewModel
public class UserViewModel : INotifyPropertyChanged
{
private ObservableCollection<User> _users;
public ObservableCollection<User> Users
{
get { return _users; }
set
{
_users = value;
OnPropertyChanged(nameof(Users));
}
}

public UserViewModel()
{
Users = new ObservableCollection<User>
{
new User { Name = "John Doe", Age = 30 },
new User { Name = "Jane Doe", Age = 25 }
};
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}


View (XAML)
<Window x:Class="MVVMExample.MainWindow"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox ItemsSource="{Binding Users}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>


Код за View (Code-behind)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new UserViewModel();
}
}


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

MVVM разделяет приложение на Model (данные), View (интерфейс) и ViewModel (связь). Это улучшает тестируемость и поддержку кода.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой ORM используется для работы с базами данных в Elixir?
Anonymous Quiz
31%
Ecto
20%
ActiveRecord
36%
Hibernate
13%
Sequelize
Применение WebSocket для создания интерактивных приложений

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

Что такое WebSocket?


WebSocket — это протокол связи, который поддерживает постоянное соединение между клиентом и сервером. В отличие от HTTP, где сервер может ответить только на запрос клиента, WebSocket позволяет обеим сторонам обмениваться данными в режиме реального времени, без необходимости повторного установления соединения.

Почему WebSocket?


WebSocket идеально подходит для приложений, где важна мгновенная доставка данных и низкая задержка, например:

Чаты и мессенджеры: Мгновенная отправка и получение сообщений.
Онлайн игры: Синхронизация игровых данных между клиентами.
Торговые платформы: Обновление котировок и графиков в реальном времени.
Совместная работа: Синхронизация изменений в документах и проектах.

Как использовать WebSocket?


Установление соединения:

Соединение WebSocket начинается с HTTP-запроса, который затем "обновляется" до WebSocket протокола.

Пример на JavaScript:
const socket = new WebSocket('ws://example.com/socket');

socket.onopen = function(event) {
console.log('Connected to WebSocket server');
};

socket.onmessage = function(event) {
console.log('Message from server: ', event.data);
};

socket.onclose = function(event) {
console.log('Disconnected from WebSocket server');
};


Отправка и получение данных:

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

Пример отправки данных:
socket.send('Hello, Server!');


Пример получения данных:
socket.onmessage = function(event) {
console.log('Received: ' + event.data);
};


Закрытие соединения:

Соединение WebSocket может быть закрыто как клиентом, так и сервером.

Пример закрытия соединения:
socket.close();


В следующем посте разберем Пример создания реального приложения 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 В чем суть принципа REST?

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

Суть принципа REST (Representational State Transfer) заключается в том, чтобы предоставить простой, масштабируемый и гибкий способ взаимодействия между клиентом и сервером через веб. Основные принципы REST включают:

1️⃣ Клиент-серверная архитектура: Клиент и сервер разделены, что позволяет независимое развитие и масштабирование обеих сторон. Клиент делает запросы, а сервер обрабатывает их и возвращает ответы.

2️⃣ Бесподсессионное взаимодействие (stateless): Каждый запрос от клиента к серверу должен содержать всю необходимую информацию для его обработки. Сервер не сохраняет состояние между запросами.

3️⃣ Кешируемость: Ответы на запросы могут быть помечены как кешируемые или не кешируемые. Это позволяет клиентам сохранять копии ответов и уменьшать количество запросов к серверу.

4️⃣ Единый интерфейс (Uniform Interface): Определяет единые методы взаимодействия с ресурсами:

GET: Получение ресурса.

POST: Создание нового ресурса.

PUT: Обновление ресурса.

DELETE: Удаление ресурса.

5️⃣ Многоуровневая система: Архитектура может быть построена из нескольких слоев, что повышает гибкость и возможность кэширования.

6️⃣ Представление ресурсов (Representations): Ресурсы могут представляться в различных форматах (например, JSON, XML). Клиент и сервер договариваются о формате через заголовки HTTP.

🤔 Пример

GET /users: Получить список пользователей.

POST /users: Создать нового пользователя.

PUT /users/1: Обновить данные пользователя с ID 1.

DELETE /users/1: Удалить пользователя с ID 1.

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

Суть принципа REST — это создание масштабируемых и гибких веб-сервисов через HTTP, используя простые и стандартные методы взаимодействия (GET, POST, PUT, DELETE) и обеспечивая независимость клиента и сервера, кешируемость и унифицированный интерфейс.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1
🤔 Какой пакет в Java используется для работы с протоколом HTTP?
Anonymous Quiz
58%
HttpClient
6%
OkHttp
5%
Retrofit
31%
все перечисленные
Пример создания реального приложения с WebSocket


Представим, что мы разрабатываем приложение для чата. Используя WebSocket, можно реализовать мгновенный обмен сообщениями между пользователями.

Серверная часть на Node.js:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', socket => {
console.log('New client connected');

socket.on('message', message => {
console.log('Received: ' + message);
// Отправка сообщения всем подключенным клиентам
server.clients.forEach(client => {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});

socket.on('close', () => {
console.log('Client disconnected');
});
});

console.log('WebSocket server is running on ws://localhost:8080');


Клиентская часть на HTML/JavaScript:

<input id="message" type="text" placeholder="Enter message">
<button onclick="sendMessage()">Send</button>
<div id="chat"></div>

<script>
const socket = new WebSocket('ws://localhost:8080');

socket.onmessage = function(event) {
const chat = document.getElementById('chat');
chat.innerHTML += `<p>${event.data}</p>`;
};

function sendMessage() {
const input = document.getElementById('message');
socket.send(input.value);
input.value = '';
}
</script>


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


Низкая задержка: Постоянное соединение позволяет передавать данные с минимальной задержкой.

Экономия ресурсов: Отсутствие необходимости повторного установления соединения снижает нагрузку на сервер и клиент.

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

Заключение


WebSocket — это мощный инструмент для создания интерактивных приложений с мгновенной обратной связью. Он позволяет улучшить пользовательский опыт, обеспечивая быстрый и эффективный обмен данными в режиме реального времени. Независимо от того, разрабатываете ли вы чат, торговую платформу или онлайн игру, WebSocket может стать ключевым элементом для достижения максимальной отзывчивости и интерактивности вашего приложения.
📌 Какие есть паттерны в объектном проектировании?

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

🤔 Основные паттерны в объектно-ориентированном проектировании:

1️⃣ Порождающие паттерны:

Singleton: Обеспечивает создание единственного экземпляра класса.

Factory Method: Создает объекты через вызов метод, без указания конкретного класса.

Abstract Factory: Создает семейства связанных объектов без указания их конкретных классов.

Builder: Шаг за шагом создает сложный объект.

Prototype: Создает объекты через клонирование существующих экземпляров.

2️⃣ Структурные паттерны:

Adapter: Преобразует интерфейс класса в другой интерфейс, ожидаемый клиентами.

Bridge: Разделяет абстракцию и реализацию, позволяя изменять их независимо.

Composite: Организует объекты в древовидные структуры для представления иерархий.

Decorator: Динамически добавляет новые обязанности объектам.

Facade: Предоставляет унифицированный интерфейс к набору интерфейсов подсистемы.

Flyweight: Поддерживает большое количество мелких объектов, разделяя их состояние.

Proxy: Представляет суррогатный объект, который контролирует доступ к другому объекту.

3️⃣ Поведенческие паттерны:

Chain of Responsibility: Передает запрос по цепочке обработчиков.

Command: Инкапсулирует запрос как объект.

Interpreter: Определяет грамматику для языка и интерпретатор для предложений этого языка.

Iterator: Предоставляет способ последовательного доступа ко всем элементам коллекции.

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

Memento: Сохраняет и восстанавливает внутреннее состояние объекта.

Observer: Оповещает зависимые объекты о изменениях состояния.

State: Позволяет объекту изменять свое поведение при изменении внутреннего состояния.

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

Template Method: Определяет скелет алгоритма в методе, оставляя реализацию шагов подклассам.

Visitor: Позволяет добавлять новые операции к объектам, не изменяя их классы.

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

Основные паттерны в объектно-ориентированном проектировании включают:

Порождающие: 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
👍3
🤔 Какой пакет в Python используется для создания RESTful API?
Anonymous Quiz
0%
Flask-RESTful
21%
Django REST framework
14%
FastAPI
65%
все перечисленные
Создание и управление микросервисами с использованием Docker и Kubernetes: Практическое руководство

Микросервисная архитектура становится все более популярной благодаря своей гибкости и масштабируемости. Использование Docker для контейнеризации и Kubernetes для оркестрации — это два ключевых компонента, которые делают управление микросервисами эффективным и удобным. В этом посте мы рассмотрим, как создать микросервисы, контейнеризировать их с помощью Docker и управлять ими через Kubernetes.

Шаг 1: Разработка микросервиса


Предположим, мы разрабатываем простую систему интернет-магазина с двумя микросервисами: catalog-service для управления продуктами и order-service для обработки заказов.

Пример кода для catalog-service на Node.js:

// catalog-service/index.js
const express = require('express');
const app = express();
const products = [{ id: 1, name: 'Product 1' }, { id: 2, name: 'Product 2' }];

app.get('/products', (req, res) => {
res.json(products);
});

app.listen(3000, () => {
console.log('Catalog Service listening on port 3000');
});


Пример кода для order-service:


// order-service/index.js
const express = require('express');
const app = express();
app.use(express.json());

let orders = [];

app.post('/orders', (req, res) => {
const order = req.body;
orders.push(order);
res.status(201).send(order);
});

app.listen(3001, () => {
console.log('Order Service listening on port 3001');
});


Шаг 2: Контейнеризация с использованием Docker


Теперь мы контейнеризируем оба микросервиса с помощью Docker.

Dockerfile для catalog-service:

# catalog-service/Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]


Dockerfile для order-service:

# order-service/Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["node", "index.js"]


Сборка Docker-образов:

# В каталоге catalog-service
docker build -t catalog-service .

# В каталоге order-service
docker build -t order-service .


В следующем посте разберем Оркестрация с использованием Kubernetes и Управление и масштабирование 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Какие существуют типы баз данных?

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

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

🤔 Реляционные базы данных (RDBMS)

Описание: Организуют данные в таблицы с заранее определенными схемами. Используют SQL для управления данными.

Примеры: MySQL, PostgreSQL, Oracle, Microsoft SQL Server.

🤔 Документные базы данных (Document-Oriented)

Описание: Хранят данные в виде документов (обычно в формате JSON или BSON), что позволяет хранить сложные и гибкие структуры данных.

Примеры: MongoDB, CouchDB.

🤔 Колонковые базы данных (Columnar)

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

Примеры: Apache Cassandra, HBase.

🤔 Ключ-значение базы данных (Key-Value)

Описание: Хранят данные в виде пар "ключ-значение", что позволяет быстрое извлечение данных по ключу.

Примеры: Redis, Riak, Amazon DynamoDB.

🤔 Графовые базы данных (Graph)

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

Примеры: Neo4j, ArangoDB, Amazon Neptune.

🤔 Базы данных временных рядов (Time Series)

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

Примеры: InfluxDB, TimescaleDB.

🤔 Базы данных на основе объектов (Object-Oriented)

Описание: Хранят данные в виде объектов, как в объектно-ориентированном программировании, что позволяет хранить более сложные структуры данных.

Примеры: db4o, ObjectDB.

🤔 Многомодельные базы данных (Multi-Model)

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

Примеры: ArangoDB, OrientDB.

🤔 Базы данных, ориентированные на массивы (Array)

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

Примеры: SciDB, Rasdaman.

🤔 Распределенные базы данных (Distributed)

Описание: Распределяют данные по нескольким узлам или серверам, обеспечивая масштабируемость и отказоустойчивость.

Примеры: Google Spanner, CockroachDB.

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

Основные типы баз данных включают:

Реляционные (RDBMS): MySQL, PostgreSQL

Документные: MongoDB, CouchDB

Колонковые: Apache Cassandra, HBase

Ключ-значение: Redis, Riak

Графовые: Neo4j, ArangoDB

Временные ряды: InfluxDB, TimescaleDB

Объектные: db4o, ObjectDB

Многомодельные: ArangoDB, OrientDB

Ориентированные на массивы: SciDB, Rasdaman

Распределенные: Google Spanner, CockroachDB

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в Node.js используется для работы с файловой системой?
Anonymous Quiz
48%
fs
16%
file-system
30%
node-fs
5%
file
Шаг 3: Оркестрация с использованием Kubernetes


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

Deployment и Service для catalog-service:

# catalog-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: catalog-service
spec:
replicas: 2
selector:
matchLabels:
app: catalog-service
template:
metadata:
labels:
app: catalog-service
spec:
containers:
- name: catalog-service
image: catalog-service
ports:
- containerPort: 3000
---
# catalog-service-service.yaml
apiVersion: v1
kind: Service
metadata:
name: catalog-service
spec:
selector:
app: catalog-service
ports:
- protocol: TCP
port: 80
targetPort: 3000
type: LoadBalancer


Deployment и Service для order-service:

# order-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: order-service
spec:
replicas: 2
selector:
matchLabels:
app: order-service
template:
metadata:
labels:
app: order-service
spec:
containers:
- name: order-service
image: order-service
ports:
- containerPort: 3001
---
# order-service-service.yaml
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
selector:
app: order-service
ports:
- protocol: TCP
port: 80
targetPort: 3001
type: LoadBalancer


Применение конфигураций Kubernetes:

kubectl apply -f catalog-service-deployment.yaml
kubectl apply -f catalog-service-service.yaml

kubectl apply -f order-service-deployment.yaml
kubectl apply -f order-service-service.yaml


Шаг 4: Управление и масштабирование


Kubernetes позволяет легко управлять и масштабировать микросервисы. Например, для масштабирования catalog-service до 4 реплик достаточно выполнить команду:

kubectl scale deployment catalog-service --replicas=4


Вы также можете следить за состоянием микросервисов с помощью команд:

kubectl get deployments
kubectl get services
kubectl get pods


Заключение


Использование Docker и Kubernetes для создания и управления микросервисами предоставляет множество преимуществ, включая гибкость, масштабируемость и надежность. Docker упрощает контейнеризацию приложений, а Kubernetes обеспечивает мощные инструменты для их оркестрации, управления и масштабирования. Этот подход позволяет легко развертывать и управлять сложными системами, состоящими из множества микросервисов, обеспечивая высокую доступность и устойчивость ваших приложений.
📌 Что такое Agile?

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

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

🤔 Основные принципы Agile

1️⃣ Индивидуумы и взаимодействия важнее процессов и инструментов:

Акцент на командную работу и эффективное общение.

2️⃣ Работающее программное обеспечение важнее исчерпывающей документации:

Быстрая поставка работающих продуктов с минимально необходимой документацией.

3️⃣ Сотрудничество с заказчиком важнее согласования условий контракта:

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

4️⃣ Готовность к изменениям важнее следования первоначальному плану:

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

🤔 Основные методологии Agile

1️⃣ Scrum:

Итеративный процесс с фиксированными временными промежутками, называемыми спринтами.

Роли: Product Owner, Scrum Master, Команда разработки.

Артефакты: Product Backlog, Sprint Backlog, Инкремент.

Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива.

2️⃣ Kanban:

Визуализация процесса работы с помощью доски Kanban.

Ограничение незавершенной работы (Work In Progress, WIP).

Постоянное улучшение и адаптация.

3️⃣ Extreme Programming (XP):

Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование.

4️⃣ Lean:

Сокращение избыточности и увеличение ценности для клиента.

Принципы: Устранение потерь, Увеличение потока, Улучшение качества.

🤔 Преимущества Agile

1️⃣ Быстрая адаптация к изменениям:

Возможность быстро реагировать на изменения требований или условий рынка.

2️⃣ Улучшенное качество продукта:

Постоянное тестирование и интеграция.

3️⃣ Повышенная вовлеченность команды:

Активное участие всех членов команды в процессе разработки.

4️⃣ Удовлетворенность клиентов:

Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки.

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

Agile — это гибкий подход к разработке программного обеспечения, который акцентирует внимание на сотрудничестве, быстрой адаптации к изменениям и регулярной поставке работающего продукта. Основные методологии Agile включают Scrum, Kanban и Extreme Programming.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какой фреймворк используется для создания веб-приложений на Rust?
Anonymous Quiz
26%
Rocket
12%
Actix
16%
Iron
46%
все перечисленные
📌 Что такое join'ы?

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

JOIN'ы (объединения) — это операции в языке SQL, которые позволяют объединять строки из двух или более таблиц на основе логических связей между ними. Существует несколько типов JOIN'ов, каждый из которых используется для разных сценариев объединения данных.

🤔 Основные типы JOIN'ов:

1️⃣ INNER JOIN:

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

Пример:
     SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;


2️⃣ LEFT JOIN (LEFT OUTER JOIN):

Описание: Возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, то в столбцах правой таблицы будут NULL.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;


3️⃣ RIGHT JOIN (RIGHT OUTER JOIN):

Описание: Возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, то в столбцах левой таблицы будут NULL.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;


4️⃣ FULL JOIN (FULL OUTER JOIN):

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

Пример:
     SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;


5️⃣ CROSS JOIN:

Описание: Возвращает декартово произведение строк из двух таблиц. Каждая строка из первой таблицы соединяется со всеми строками из второй таблицы.

Пример:
     SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;


6️⃣ SELF JOIN:

Описание: Использует JOIN для объединения таблицы с самой собой. Это полезно, когда нужно сравнить строки внутри одной таблицы.

Пример:
     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'ов включают:

INNER JOIN: Только совпадающие строки.

LEFT JOIN: Все строки из левой таблицы и совпадающие из правой.

RIGHT JOIN: Все строки из правой таблицы и совпадающие из левой.

FULL JOIN: Все строки из обеих таблиц, с заполнением NULL при отсутствии совпадений.

CROSS JOIN: Декартово произведение строк.

SELF JOIN: Объединение таблицы с самой собой.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Что такое ORM?

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

ORM (Object-Relational Mapping) — это технология, которая позволяет разработчикам взаимодействовать с реляционными базами данных, используя объектно-ориентированные парадигмы программирования. ORM автоматизирует преобразование данных между несовместимыми типами систем, таких как объекты в программном коде и таблицы в базе данных.

🤔 Основные особенности ORM

1️⃣ Абстракция базы данных:

ORM позволяет разработчикам работать с базой данных через объекты, не написав SQL-код напрямую. Это упрощает разработку и делает код более читабельным и поддерживаемым.

2️⃣ Маппинг классов и таблиц:

Классы в приложении сопоставляются с таблицами в базе данных, а свойства классов — со столбцами таблиц. Это позволяет автоматически преобразовывать данные при сохранении и извлечении объектов.

3️⃣ Автоматическое управление связями:

ORM поддерживает управление отношениями между объектами, такими как "один-к-одному", "один-ко-многим" и "многие-ко-многим".

4️⃣ Кэширование и оптимизация запросов:

ORM может кешировать запросы и результаты для улучшения производительности.

🤔 Преимущества ORM

1️⃣ Скорость разработки:

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

2️⃣ Поддерживаемость:

Код на ORM более понятен и легко поддерживается, поскольку использует объектно-ориентированные принципы.

3️⃣ Безопасность:

ORM помогает избежать SQL-инъекций, так как запросы строятся с помощью методов и свойств классов.

4️⃣ Портативность:

Приложение, написанное с использованием ORM, легче адаптируется к различным реляционным базам данных, поскольку маппинг обеспечивает абстракцию от конкретных SQL-диалектов.

🤔 Популярные библиотеки и фреймворки ORM

Hibernate: Java

Entity Framework: .NET

Django ORM: Python

SQLAlchemy: Python

ActiveRecord: Ruby on Rails

🤔 Пример

Рассмотрим пример с использованием 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
🤔 Какой пакет используется для работы с базой данных Cassandra в Java?
Anonymous Quiz
15%
DataStax Java Driver
14%
Hector
15%
Kundera
56%
All of the above
📌 Что такое инкапсуляция?

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

Инкапсуляция — это один из основных принципов объектно-ориентированного программирования (ООП), который подразумевает скрытие внутренней реализации объекта и предоставление доступа к ней только через строго определенные методы или интерфейсы. Это помогает защитить данные от некорректного использования и обеспечивает контроль над изменением состояния объекта.

🤔 Основные аспекты инкапсуляции

1️⃣ Скрытие данных:

Внутреннее состояние объекта (переменные и данные) скрыто от внешнего мира и доступно только через методы класса.

2️⃣ Методы доступа:

Класс предоставляет публичные методы для взаимодействия с его внутренним состоянием. Эти методы часто называют геттерами (для получения значений) и сеттерами (для установки значений).

3️⃣ Контроль над данными:

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

🤔 Пример

Рассмотрим пример инкапсуляции на языке 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


🤔 Преимущества инкапсуляции

1️⃣ Защита данных: Скрытие внутреннего состояния объекта предотвращает его некорректное использование и изменение.

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

3️⃣ Повышение гибкости: Возможность изменения внутренней реализации объекта без изменения его интерфейса.

4️⃣ Контроль доступа: Возможность добавления логики проверки и валидации данных при их установке или изменении.

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

Инкапсуляция — это принцип ООП, который скрывает внутреннюю реализацию объекта и предоставляет доступ к данным только через определенные методы, защищая и контролируя состояние объекта.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в Go используется для работы с JSON?
Anonymous Quiz
38%
encoding/json
7%
json-iterator
21%
go-simplejson
34%
All of the above
🤯1
📌 Что такое итератор?

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

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

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

1️⃣ Итерабельные объекты (Iterable):

Объекты, которые поддерживают протокол итерации, называются итерабельными. Примеры включают списки, кортежи, множества и словари.

2️⃣ Протокол итерации:

В Python, чтобы объект был итерабельным, он должен реализовать метод __iter__(), который возвращает итератор.

3️⃣ Итератор:

Итератор — это объект, который реализует методы __iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.

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

Рассмотрим пример создания итератора для простого списка:

Пример с использованием встроенного итератора
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


🤔 Преимущества итераторов

1️⃣ Унифицированный интерфейс:

Итераторы предоставляют единый интерфейс для прохода по элементам коллекции, независимо от их типа.

2️⃣ Ленивая загрузка:

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

3️⃣ Инкапсуляция логики прохода:

Итераторы инкапсулируют логику обхода элементов, упрощая код и делая его более читаемым.

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

Итератор — это объект, который позволяет поочередно проходить через элементы коллекции, предоставляя стандартный интерфейс для доступа к элементам. Итераторы реализуют методы __iter__() и __next__(), что позволяет использовать их в циклах для последовательного доступа к элементам.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM