API (Application Programming Interface) бывают нескольких типов, каждый из которых имеет свои особенности и применение.
😎 REST API — основан на архитектурном стиле REST. Использует HTTP методы (GET, POST, PUT, DELETE) и работает с ресурсами, идентифицируемыми URI.
😎 SOAP API — протокол, использующий XML для обмена сообщениями. Обеспечивает высокий уровень безопасности и надежности, но более сложен в реализации.
😎 GraphQL API — позволяет клиентам запрашивать только необходимые данные. Гибкий и эффективный, особенно для сложных запросов.
😎 gRPC API — использует HTTP/2 и Protocol Buffers. Поддерживает двунаправленную потоковую передачу и высокую производительность.
Каждый тип API имеет свои преимущества и ограничения, подходящие для различных задач и архитектурных решений.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С++ собеседования
Каждый тип API имеет свои преимущества и ограничения, подходящие для различных задач и архитектурных решений.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
std::thread::detach
используется для отделения потока от объекта std::thread
, позволяя потоку продолжать выполнение независимо. После вызова detach
, объект std::thread
больше не связан с потоком и не может быть использован для управления им. Это полезно, когда поток должен работать в фоновом режиме, но важно помнить, что необходимо обеспечить завершение потока до завершения программы, иначе поведение будет неопределённым.
#include <iostream>
#include <thread>
void backgroundTask() {
// Фоновая задача
std::cout << "Фоновая задача выполняется\n";
}
int main() {
std::thread t(backgroundTask);
t.detach(); // Отделяем поток
// Поток продолжает выполнение независимо
std::cout << "Главный поток завершён\n";
return 0;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
lvalue
(left value) — это выражение, которое ссылается на область памяти и имеет адрес, позволяя присваивание. rvalue
(right value) — это временное значение, не имеющее адреса, используемое в выражениях.
int x = 10; // x — это lvalue, 10 — это rvalue
int y = x + 5; // x + 5 — это rvalue, результат временный
int &ref = x; // ref — это lvalue-ссылка на x
lvalue
может стоять слева от оператора присваивания, а rvalue
— только справа.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
class Car {
public:
std::string model;
int year;
// Конструктор класса
Car(std::string m, int y) : model(m), year(y) {}
};
Car myCar("Toyota", 2020); // Создание объекта myCar с использованием конструктора
myCar
теперь имеет доступ к членам класса Car
, таким как model
и year
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
В C++
😎 std::list — это двусвязный список. Он позволяет эффективно вставлять и удалять элементы в любом месте, но не поддерживает произвольный доступ к элементам. Это делает его идеальным для сценариев, где часто требуется вставка или удаление.
😎 std::deque — это двусторонняя очередь. Она поддерживает произвольный доступ, а также быструю вставку и удаление элементов с обоих концов. Это делает
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С++ собеседования
list
и deque
— это контейнеры из STL, но они имеют разные характеристики и применения.deque
более универсальным, чем list
, но с немного большей сложностью для операций вставки и удаления в середине.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
set
и multiset
— это контейнеры из библиотеки стандартных шаблонов (STL), которые хранят элементы в отсортированном порядке. #include <set>
#include <iostream>
int main() {
std::set<int> s = {1, 2, 3};
s.insert(2); // Дубликат не добавится
for (int x : s) {
std::cout << x << " "; // Вывод: 1 2 3
}
}
#include <set>
#include <iostream>
int main() {
std::multiset<int> ms = {1, 2, 3};
ms.insert(2); // Дубликат добавится
for (int x : ms) {
std::cout << x << " "; // Вывод: 1 2 2 3
}
}
Основное отличие в том, что
set
не допускает дубликатов, а multiset
— допускает.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#include <iostream>
#include <map>
int main() {
std::map<int, std::string> m;
m[1] = "one"; // Вставка пары ключ-значение
m[2] = "two";
for (const auto& pair : m) {
std::cout << pair.first << ": " << pair.second << std::endl; // Вывод ключа и значения
}
}
map
автоматически сортирует элементы по ключам.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
тах.
delete освобождает память, выделенную для одного объекта:int* ptr = new int(5);
delete ptr; // Освобождает память для одного int
delete[] освобождает память, выделенную для массива объектов:
int* arr = new int[5];
delete[] arr; // Освобождает память для массива int
[]
для одиночного объекта может вызвать ошибки.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#include <iostream>
union Data {
int intValue;
float floatValue;
char charValue;
};
int main() {
Data data;
data.intValue = 10; // Устанавливаем значение int
std::cout << "Int: " << data.intValue << std::endl;
data.floatValue = 3.14f; // Перезаписываем значение float
std::cout << "Float: " << data.floatValue << std::endl;
return 0;
}
Union полезен для экономии памяти, но требует осторожности, так как изменение одного члена может затронуть другие.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
#include <type_traits>
template<typename T>
void check() {
// Проверка, является ли тип целочисленным
if (std::is_integral<T>::value) {
// Логика для целочисленных типов
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM