interface Target {
void request();
}
class Adaptee {
void specificRequest() {
// Логика, которая должна быть адаптирована
}
}
class Adapter implements Target {
private Adaptee adaptee;
Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
В примере
Adapter
реализует интерфейс Target
и использует объект Adaptee
, чтобы адаптировать его метод specificRequest
под метод request
. Это позволяет клиенту работать с Adaptee
через интерфейс Target
, не изменяя его исходный код.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
go func() {
fmt.Println("Выполняется в горутине")
}()
Горутины создаются с помощью ключевого слова
go
. Они работают поверх потоков ОС, но потребляют меньше ресурсов. Планировщик Go автоматически распределяет их по доступным ядрам процессора.
func main() {
go task("A")
go task("B")
time.Sleep(time.Second) // Ожидание завершения горутин
}
Для синхронизации горутин используются каналы (chan) или примитивы из пакета
sync
. Горутины завершаются при завершении функции или при выходе из программы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
git branch
.
git branch new-feature
Эта команда создает ветку с именем
new-feature
, но не переключает на нее. Для создания и переключения одновременно используется команда git checkout -b
.
git checkout -b new-feature
После создания ветки можно начать работу с ней. Чтобы отправить новую ветку в удаленный репозиторий, используется команда
git push
.
git push -u origin new-feature
Флаг
-u
связывает локальную ветку с удаленной, чтобы в дальнейшем можно было использовать git push
без указания имени ветки.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#include <vector>
#include <algorithm>
std::vector<int> numbers = {3, 1, 4, 1, 5};
std::sort(numbers.begin(), numbers.end()); // Сортировка вектора
STL обеспечивает высокую производительность и гибкость, так как все компоненты являются шаблонными и работают с любыми типами данных. Это одна из ключевых частей стандартной библиотеки C++.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
CREATE
, ALTER
, DROP
.
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));
DML (Data Manipulation Language) предназначен для работы с данными внутри таблиц: вставка, обновление, удаление и выборка. Основные команды:
INSERT
, UPDATE
, DELETE
, SELECT
.
INSERT INTO users (id, name) VALUES (1, 'Alice');
DDL работает со структурой, а DML — с содержимым таблиц.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
class Person {
public string Name;
public int Age;
// Конструктор с параметрами
public Person(string name, int age) {
Name = name;
Age = age;
}
}
В этом примере конструктор принимает два параметра и присваивает их значения полям объекта. Если конструктор не определён, компилятор создаёт конструктор по умолчанию без параметров.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
fopen()
с режимом "r"
. Она возвращает указатель на файл, который можно использовать для дальнейшего чтения.
$file = fopen("example.txt", "r");
if ($file) {
while (($line = fgets($file)) !== false) {
echo $line;
}
fclose($file);
} else {
echo "Не удалось открыть файл.";
}
Функция
fgets()
читает файл построчно. После завершения работы с файлом его необходимо закрыть с помощью fclose()
. Если файл не существует или недоступен, fopen()
вернёт false
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
{}
или функции set()
. Особенность множества заключается в том, что оно содержит только уникальные элементы и не поддерживает порядок.
my_set = {1, 2, 3, 4} # Создание множества
Если передать список или строку в
set()
, будут удалены дубликаты:
unique_elements = set([1, 2, 2, 3]) # {1, 2, 3}
Множества поддерживают операции объединения, пересечения и разности.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Ключевое слово
Функции, вызванные с
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ Backend собеседования
defer
в Go используется для отложенного выполнения функции до завершения текущей функции. Это полезно для освобождения ресурсов, таких как закрытие файлов или разблокировка мьютексов.
func readFile(filename string) {
file, err := os.Open(filename)
if err != nil {
log.Fatal(err)
}
defer file.Close() // Закрытие файла будет выполнено перед выходом из функции
// Работа с файлом
}
Функции, вызванные с
defer
, выполняются в порядке LIFO (последний добавленный — первый выполненный). Это гарантирует, что ресурсы освобождаются в правильном порядке.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
new
, за которым следует вызов конструктора класса. Конструктор инициализирует объект и выделяет память под него.
ClassName obj = new ClassName();
Если у класса есть параметризованный конструктор, можно передать аргументы:
ClassName obj = new ClassName(arg1, arg2);
После создания объект можно использовать для вызова методов или доступа к полям. Если конструктор по умолчанию отсутствует, его необходимо явно определить в классе.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
git log
. Она отображает список коммитов в обратном хронологическом порядке, включая хэш, автора, дату и сообщение коммита.
git log
Для более компактного вывода можно добавить флаг
--oneline
, который покажет только хэш и сообщение коммита.
git log --oneline
Чтобы ограничить количество отображаемых коммитов, используется флаг
-n
, например, -n 5
покажет последние 5 коммитов.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
class MyClass {
public:
MyClass() {
// Конструктор по умолчанию
}
};
MyClass obj; // Создание объекта
Если конструктор принимает параметры, объект создается так:
MyClass obj(arg1, arg2); // Передача аргументов в конструктор
Также объект можно создать динамически с помощью оператора
new
, что возвращает указатель на объект.
MyClass* obj = new MyClass(); // Динамическое создание объекта
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
CREATE INDEX idx_name ON users (name);
В примере создается индекс для столбца
name
в таблице users
. Это ускоряет поиск по имени, но может замедлить операции вставки и обновления, так как индексы требуют дополнительных ресурсов для поддержания актуальности.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
int number = 42;
double pi = 3.14;
bool isTrue = true;
string text = "Hello";
Эти типы являются частью системы типов .NET и поддерживают операции, специфичные для их категории. Пользовательские типы, такие как классы и структуры, создаются разработчиками для решения конкретных задач.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Route::get('/user', [UserController::class, 'index']);
Пример маршрута, который связывает URL с методом контроллера. Laravel также предоставляет инструменты для аутентификации, кеширования и обработки очередей, что ускоряет разработку.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
{}
, что делает код более читаемым и удобным.
name = "Alice"
age = 30
message = f"My name is {name} and I am {age} years old."
В примере переменные
name
и age
подставляются непосредственно в строку. F-строки поддерживают любые выражения, включая вызовы функций и арифметические операции.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
**kwargs
позволяет передавать в функцию произвольное количество именованных аргументов в виде словаря. Это полезно, когда количество или имена аргументов заранее неизвестны.
def example_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
Внутри функции
kwargs
становится словарем, где ключи — это имена аргументов, а значения — соответствующие им данные. Это часто используется для гибкости и расширяемости функций.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
ch := make(chan int) // Создание канала для передачи целых чисел
Каналы могут быть буферизированными или небуферизированными. Небуферизированные каналы блокируют отправку и получение до тех пор, пока другая сторона не будет готова. Буферизированные каналы позволяют отправлять данные без блокировки, пока буфер не заполнится.
ch <- 42 // Отправка значения в канал
value := <-ch // Получение значения из канала
Каналы часто используются для организации взаимодействия между горутинами и управления их жизненным циклом.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
HashSet
и TreeSet
— это реализации интерфейса Set
, но они отличаются по внутренней организации и характеристикам.HashSet
хранит элементы в хэш-таблице, что обеспечивает вставку, удаление и поиск за время O(1) в среднем случае. Элементы не упорядочены.
Set<String> hashSet = new HashSet<>();
hashSet.add("apple");
hashSet.add("banana");
TreeSet
использует красно-черное дерево для хранения элементов, что гарантирует их сортировку в натуральном порядке или по компаратору. Операции вставки, удаления и поиска выполняются за O(log n).
Set<String> treeSet = new TreeSet<>();
treeSet.add("apple");
treeSet.add("banana");
Выбор между
HashSet
и TreeSet
зависит от необходимости сортировки и требуемой производительности.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4