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
🤔 Какой пакет используется для работы с базой данных SQLite в Python?
Anonymous Quiz
68%
sqlite3
13%
sqlite
14%
pysqlite
4%
sqlite-python
👍1
📌 Что такое идемпотентность?

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

Идемпотентность — это свойство операции, при котором повторное выполнение этой операции приводит к тому же результату, что и однократное выполнение. Это понятие часто используется в контексте HTTP методов, API запросов и транзакций в системах с распределенной архитектурой.

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

1️⃣ Идемпотентные операции:

GET: Получение ресурса. Повторный запрос не изменяет состояние ресурса.

PUT: Обновление или создание ресурса. Повторный запрос с одинаковыми данными приводит к одному и тому же состоянию ресурса.

DELETE: Удаление ресурса. Повторный запрос удаляет ресурс, если он существует, или не изменяет состояние, если ресурс уже удален.

2️⃣ Неидемпотентные операции:

POST: Создание нового ресурса. Повторный запрос приводит к созданию нового ресурса с новым идентификатором, что изменяет состояние системы.

🤔 Примеры идемпотентности

Пример 1: HTTP методы

GET запрос:
  GET /user/123

Повторный запрос возвращает информацию о пользователе с ID 123 и не изменяет его состояние.

PUT запрос:
  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);

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

🤔 Зачем нужна идемпотентность

1️⃣ Повышение надежности:

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

2️⃣ Упрощение обработки ошибок:

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

3️⃣ Удобство разработки:

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

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

Идемпотентность — это свойство операции, при котором повторное выполнение приводит к тому же результату, что и однократное выполнение. Примеры идемпотентных операций включают HTTP методы GET, PUT и DELETE. Идемпотентность повышает надежность системы и упрощает обработку ошибок.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какой пакет используется для работы с REST API в Java?
Anonymous Quiz
8%
Retrofit
6%
Jersey
41%
RestTemplate
46%
All of the above
📌 Из чего состоит ответ на сервере?

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

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

1️⃣ Стартовая линия (Status Line)

Стартовая линия содержит информацию о статусе ответа и состоит из следующих частей:

Версия протокола HTTP: Например, HTTP/1.1.

Код состояния (Status Code): Числовой код, который указывает результат обработки запроса. Примеры включают 200 (OK), 404 (Not Found), 500 (Internal Server Error).

Причинная фраза (Reason Phrase): Человеко-читаемое описание статуса. Например, OK, Not Found, Internal Server Error.

Пример:
HTTP/1.1 200 OK


2️⃣ Заголовки (Headers)

Заголовки предоставляют метаданные о ответе. Они состоят из пар "ключ-значение" и могут включать:

Date: Дата и время отправки ответа.

Content-Type: Тип содержимого ответа (например, text/html, application/json).

Content-Length: Размер тела ответа в байтах.

Server: Информация о сервере, отправившем ответ.

Set-Cookie: Установка cookies.

Пример:
Content-Type: application/json
Content-Length: 85
Server: Apache/2.4.1 (Unix)
Set-Cookie: sessionId=abc123; Path=/; HttpOnly


3️⃣ Тело ответа (Body)

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

HTML-страницы

JSON-объекты

XML-данные

Файлы (например, изображения, документы)

Пример (JSON):
{
"id": 123,
"name": "John Doe",
"email": "[email protected]"
}


🤔 Пример полного HTTP-ответа
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
🤔 Какой пакет используется для работы с графовыми базами данных в Python?
Anonymous Quiz
19%
py2neo
7%
networkx
33%
igraph
41%
graphtools
📌 Какие http методы могут быть?

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

HTTP (HyperText Transfer Protocol) методы представляют собой набор стандартных операций, которые используются для взаимодействия между клиентом и сервером в сети. Каждый метод определяет конкретное действие, которое должен выполнить сервер. Вот основные HTTP методы и их предназначение:

🤔 GET

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

🤔 POST

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

🤔 PUT

Метод PUT используется для обновления существующего ресурса или создания нового ресурса на сервере. Если ресурс уже существует, он будет обновлен, если нет — будет создан.

🤔 DELETE

Метод DELETE используется для удаления ресурса с сервера. Запросы DELETE могут быть небезопасными, так как они изменяют состояние сервера, удаляя данные.

🤔 PATCH

Метод PATCH используется для частичного обновления ресурса. В отличие от PUT, который заменяет весь ресурс, PATCH изменяет только указанные части ресурса.

🤔 HEAD

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

🤔 OPTIONS

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

🤔 CONNECT

Метод CONNECT используется для установления туннеля к серверу через прокси. Обычно используется для HTTPS через прокси.

🤔 TRACE

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

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

Основные HTTP методы включают GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, CONNECT и TRACE. Они используются для различных операций с ресурсами на сервере, таких как получение данных, отправка данных, обновление, удаление и диагностика сетевых маршрутов.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой пакет в Ruby используется для работы с очередями сообщений?
Anonymous Quiz
6%
Sidekiq
22%
Resque
16%
Delayed::Job
56%
All of the above
📌 Расскажи об отличиях MVC от MVP?

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

MVC (Model-View-Controller) и MVP (Model-View-Presenter) – это архитектурные шаблоны, используемые в разработке программного обеспечения для разделения логики приложения на отдельные компоненты. Хотя обе архитектуры помогают улучшить структуру и поддерживаемость кода, между ними существуют важные различия.

🤔 MVC (Model-View-Controller)

Компоненты:

1️⃣ Model (Модель): Отвечает за управление данными и бизнес-логикой приложения. Она не знает о существовании View и Controller.

2️⃣ View (Представление): Отображает данные, полученные от Model, и отправляет пользовательский ввод в Controller.

3️⃣ Controller (Контроллер): Получает ввод от View, обновляет Model и выбирает, какое View должно быть обновлено.

Как работает:

View отправляет пользовательский ввод в Controller.

Controller обрабатывает ввод, обновляет Model.

Model обновляет данные и уведомляет View об изменениях.

View обновляется и отображает актуальные данные.

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

Четкое разделение обязанностей.

Простота в тестировании отдельных компонентов.

Недостатки:

Controller может стать перегруженным.

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

🤔 MVP (Model-View-Presenter)

Компоненты:

1️⃣ Model (Модель): Отвечает за управление данными и бизнес-логикой приложения.

2️⃣ View (Представление): Отображает данные и передает пользовательский ввод Presenter'у.

3️⃣ Presenter (Презентер): Получает ввод от View, обновляет Model и передает данные обратно в View для отображения.

Как работает:

View передает пользовательский ввод Presenter'у.

Presenter обрабатывает ввод, обновляет Model.

Model обновляет данные.

Presenter получает обновленные данные из Model и обновляет View.

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

Легкость в тестировании, особенно View и Presenter.

Presenter более тонко контролирует View, что упрощает управление пользовательским интерфейсом.

Недостатки:

Presenter может стать перегруженным логикой.

Увеличение сложности кода из-за множества взаимодействий между компонентами.

🤔 Основные отличия:

1️⃣ Взаимодействие View и других компонентов:

В MVC View взаимодействует напрямую с Model.

В MVP View взаимодействует только с Presenter, а Presenter уже работает с Model.

2️⃣ Уведомления об изменениях:

В MVC Model уведомляет View об изменениях напрямую.

В MVP Model уведомляет Presenter, а Presenter обновляет View.

3️⃣ Роль Controller и Presenter:

В MVC Controller отвечает за определение, какое View отображать.

В MVP Presenter отвечает за всю логику взаимодействия между Model и View, а также за обновление View.

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

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
🤔 Какой пакет используется для работы с базой данных Cassandra в Python?
Anonymous Quiz
28%
cassandra-driver
58%
pycassa
8%
cqlengine
7%
pylibmc
📌 Что такое cherrypick?

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

Cherry-pick — это команда в системе управления версиями Git, которая позволяет выбрать один или несколько конкретных коммитов из одной ветки и применить их в другую ветку. Это полезно, когда нужно перенести отдельные изменения без необходимости слияния целых веток.

🤔 Основные аспекты cherry-pick

1️⃣ Избирательное применение коммитов:

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

2️⃣ Избежание полного слияния:

В отличие от обычного слияния (merge), cherry-pick переносит только выбранные коммиты, а не всю историю изменений.

🤔 Как использовать cherry-pick

Основной синтаксис
git cherry-pick <commit_hash>


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

1️⃣ Переход на целевую ветку:

Переключитесь на ветку, в которую нужно перенести изменения.
   git checkout target-branch


2️⃣ Применение коммита:

Используйте команду cherry-pick, чтобы применить нужный коммит.
   git cherry-pick a1b2c3d4 


3️⃣ Решение конфликтов (если они возникли):

Если во время cherry-pick возникают конфликты, Git предложит их решить.

Разрешите конфликты, затем завершите процесс:
   git add <resolved_files>
git cherry-pick --continue


🤔 Пример

Предположим, у вас есть коммит с хешем a1b2c3d4 в ветке feature-branch, который вы хотите перенести в main-branch.
git checkout main-branch
git cherry-pick a1b2c3d4


Если коммит успешно применен, изменения из коммита a1b2c3d4 будут добавлены в main-branch.

🤔 Когда использовать cherry-pick

1️⃣ Перенос исправлений:

Когда нужно быстро перенести исправление из одной ветки в другую (например, багфикс из develop в release).

2️⃣ Избирательное применение новых функций:

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

🤔 Ограничения и риски

1️⃣ Конфликты:

Перенос коммитов может вызвать конфликты, особенно если изменяемые файлы были модифицированы в целевой ветке.

2️⃣ Историческая чистота:

Частое использование cherry-pick может запутать историю изменений, так как один и тот же коммит будет существовать в нескольких ветках с разными хешами.

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

Cherry-pick в Git — это команда, позволяющая выбрать один или несколько коммитов из одной ветки и применить их в другую ветку. Она используется для избирательного переноса изменений без полного слияния веток.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какой пакет в Java используется для работы с Redis?
Anonymous Quiz
37%
jedis
8%
lettuce
16%
redisson
39%
All of the above
📌 Чем отличается rebase от merge?

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

В Git команды rebase и merge используются для объединения изменений из разных веток, но делают это по-разному. Основное различие между ними заключается в том, как они сохраняют историю коммитов и как они влияют на структуру репозитория.

🤔 Основные отличия

1️⃣ Merge (Слияние):

Описание: Объединяет две ветки, создавая новый коммит слияния (merge commit), который имеет две родительских ветки.

История: Сохраняет всю историю коммитов обеих веток без изменений. История ветвления и слияния сохраняется.

Конфликты: Если есть конфликты, Git предложит их разрешить перед созданием коммита слияния.

Команда: git merge <branch>

Пример
   git checkout main
git merge feature-branch

Результат: Создается новый коммит слияния, который объединяет изменения из feature-branch в main.

2️⃣ Rebase (Перебазирование):

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

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

Конфликты: Если есть конфликты, Git предложит их разрешить по мере переноса каждого коммита.

Команда: 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
📌 Что означает принцип open closed?

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

Принцип "открытости/закрытости" (Open/Closed Principle, OCP) — это один из пяти принципов SOLID, разработанных для создания устойчивого и легко поддерживаемого кода в объектно-ориентированном программировании. Принцип был предложен Бертраном Мейером в 1988 году и заключается в следующем:

🤔 Суть принципа

Классы должны быть открыты для расширения, но закрыты для модификации.

🤔 Что это означает:

1️⃣ Открыты для расширения:

Поведение класса можно расширить, добавив новый код.

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

2️⃣ Закрыты для модификации:

Существующий код класса не должен изменяться.

Это помогает избежать ошибок, которые могут возникнуть при изменении уже протестированного и проверенного кода.

🤔 Пример

Рассмотрим пример на языке программирования 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 не требует изменений.

🤔 Преимущества принципа OCP

1️⃣ Повышение гибкости:

Система становится более гибкой и расширяемой, так как новые функциональности добавляются без изменения существующего кода.

2️⃣ Уменьшение количества ошибок:

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

3️⃣ Упрощение тестирования:

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

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

Принцип "открытости/закрытости" (Open/Closed Principle) означает, что классы должны быть открыты для расширения, но закрыты для модификации. Это позволяет добавлять новые функции без изменения существующего кода, что повышает гибкость, снижает количество ошибок и упрощает тестирование.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 С какими объектами можно писать однострочники (comprehensions)?
Anonymous Quiz
13%
Списки
4%
Словари
4%
Множества
79%
Все вышеперечисленные
📌 Какие принципы программирования бывают?

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

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

🤔 Принципы SOLID

1️⃣ Single Responsibility Principle (SRP):

Каждый класс должен иметь одну единственную ответственность.

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

2️⃣ Open/Closed Principle (OCP):

Классы должны быть открыты для расширения, но закрыты для модификации.

Пример: Добавление нового типа фигуры без изменения существующего кода классов фигур.

3️⃣ Liskov Substitution Principle (LSP):

Объекты базового класса должны быть заменяемыми объектами подклассов без изменения правильности программы.

Пример: Если класс Bird имеет метод fly, то подкласс Penguin не должен его нарушать.

4️⃣ Interface Segregation Principle (ISP):

Клиенты не должны быть вынуждены зависеть от интерфейсов, которые они не используют.

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

5️⃣ Dependency Inversion Principle (DIP):

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

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

🤔 Другие важные принципы

1️⃣ DRY (Don't Repeat Yourself):

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

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

2️⃣ KISS (Keep It Simple, Stupid):

- Держите код простым и избегайте сложных решений, когда более простое решение будет работать.

- Пример: Не используйте сложные алгоритмы там, где достаточно простого цикла.

3️⃣ YAGNI (You Ain't Gonna Need It):

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

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

4️⃣ Separation of Concerns:

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

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

5️⃣ Law of Demeter (LoD):

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

Пример: Использование методов класса без вызова методов через несколько объектов.

6️⃣ Fail Fast:

Ошибки должны быть выявлены как можно раньше.

Пример: Проверка входных данных на валидность в начале функции.

7️⃣ Composition over Inheritance:

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

Пример: Использование объектов других классов для расширения функциональности вместо создания подклассов.

🤔 Принципы в Agile

1️⃣ Customer Collaboration over Contract Negotiation:

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

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

2️⃣ Responding to Change over Following a Plan:

Готовность к изменениям важнее следования плану.

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

🤔 Принципы в DevOps

1️⃣ Infrastructure as Code:

Управление инфраструктурой с помощью кода и автоматизации.

Пример: Использование Terraform или Ansible для развертывания серверов.

2️⃣ Continuous Integration/Continuous Deployment (CI/CD):

Автоматизация сборки, тестирования и развертывания приложений.

Пример: Использование Jenkins или GitHub Actions для автоматизации процессов разработки.

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

Принципы программирования включают SOLID (SRP, OCP, LSP, ISP, DIP), а также DRY, KISS, YAGNI, Separation of Concerns, Law of Demeter, Fail Fast и Composition over Inheritance. Эти принципы помогают создавать более гибкий, поддерживаемый и качественный код.

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

🔒 База собесов | 🔒 База тестовых
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 На основе какой структуры данных реализованы словари в Python?
Anonymous Quiz
11%
Списки
87%
Хеш-таблицы
1%
Деревья
1%
Очереди
📌 Что такое чистый код?

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

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

🤔 Основные характеристики чистого кода

1️⃣ Читаемость:

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

2️⃣ Простота:

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

3️⃣ Последовательность:

Следование единому стилю кодирования и соглашениям по наименованию. Это упрощает чтение и понимание кода.

4️⃣ Минимум избыточности:

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

5️⃣ Модульность:

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

6️⃣ Тестируемость:

Код должен быть легким для тестирования. Хорошо написанный код обычно легко покрыть юнит-тестами.

🤔 Принципы чистого кода

1️⃣ Именование:

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

Пример:
     int age; // Понятно, что переменная хранит возраст


2️⃣ Функции:

Функции должны быть короткими и выполнять одну задачу.

Пример:
     void calculateAndPrintTotal() {
int total = calculateTotal();
printTotal(total);
}


3️⃣ Комментарии:

Комментарии должны объяснять, почему был написан определенный код, а не что он делает. Хорошо написанный код должен быть самодокументируемым.

Пример:
     // Calculate the total price including tax
int totalPrice = calculateTotalPrice();


4️⃣ Форматирование:

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

Пример:
     if (isValid) {
process();
} else {
handleError();
}


5️⃣ Обработка ошибок:

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

Пример:
     try {
processFile(file);
} catch (IOException e) {
logError(e);
}


6️⃣ Магические числа и строки:

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

Пример:
     static final int MAX_USERS = 100;


🤔 Книги и ресурсы

"Чистый код" (Clean Code) Роберта Мартина (Robert C. Martin)

"Совершенный код" (Code Complete) Стива Макконнелла (Steve McConnell)

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

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

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

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

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

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

🤔 Основные компоненты клиент-серверной архитектуры

1️⃣ Клиент:

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

Функции:

Отправка запросов к серверу.

Получение и отображение данных или выполнения действий на основе ответа от сервера.

2️⃣ Сервер:

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

Функции:

Обработка запросов от клиентов.

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

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

🤔 Принцип работы клиент-серверной архитектуры

1️⃣ Инициация запроса:

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

2️⃣ Обработка запроса:

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

3️⃣ Ответ на запрос:

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

4️⃣ Получение ответа:

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

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

1️⃣ Централизованное управление:

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

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

Серверы могут обслуживать множество клиентов одновременно, а также могут быть легко масштабированы для обработки большего числа запросов путем добавления дополнительных ресурсов (например, увеличение мощности сервера, добавление новых серверов).

3️⃣ Разделение обязанностей:

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

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

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

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

1️⃣ Веб-приложения:

Клиент: Веб-браузер (например, Chrome, Firefox)

Сервер: Веб-сервер (например, Apache, Nginx), обрабатывающий HTTP-запросы и взаимодействующий с базой данных

2️⃣ Электронная почта:

Клиент: Почтовый клиент (например, Microsoft Outlook, Gmail)

Сервер: Почтовый сервер (например, Microsoft Exchange, Postfix)

3️⃣ Базы данных:

Клиент: Приложение, отправляющее SQL-запросы (например, SQL-клиенты, веб-приложения)

Сервер: Сервер баз данных (например, MySQL, PostgreSQL)

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

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

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

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