Full stack dev
61 subscribers
356 photos
50 videos
4 files
99 links
"Full Stack Dev & Computer Science" – Канал для разработчиков, которые хотят
расширить свои знания в Full Stack и углубиться в основы и новейшие тренды Computer Science.
Здесь вы найдете материалы по frontend и backend разработке, работе с базами данных,
Download Telegram
📕 Алгоритм BFS (Breadth-First Search)

💡BFSпоиск в ширину — это алгоритм обхода графа, который сначала посещает всех соседей вершины, затем соседей этих соседей, и так далее.

⚙️ Как работает BFS
1. Берём любую стартовую вершину.
2. Добавляем её в очередь.
3. Пока очередь не пуста:
- достаём вершину из очереди,
- посещаем всех её соседей,
- непосещённых соседей добавляем в очередь.

Релизация на python:
from collections import deque

def bfs(graph, start):
visited = set()
queue = deque([start])
order = [] # порядок обхода

while queue:
vertex = queue.popleft()

if vertex not in visited:
visited.add(vertex)
order.append(vertex)

for neighbor in graph[vertex]:
if neighbor not in visited:
queue.append(neighbor)

return order

graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': ['F'],
'F': []
}

print(bfs(graph, 'A'))

#algorithm #python
🔹 DFS (Depth-First Search) — поиск в глубину в графе

💡Идея:

Исследуем граф «вглубь», пока не достигнем конца пути, затем возвращаемся.

Нужно хранить посещённые вершины (visited).

🔧Применение:

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

⚙️Рекурсивноя реализвация:
graph = {
'A': ['B','C'], 'B': ['D','E'], 'C': ['F'],
'D': [], 'E': ['F'], 'F': []
}

def dfs(graph, start, visited=None):
if visited is None: visited = set()
visited.add(start)
print(start, end=' ')
for neighbor in graph[start]:
if neighbor not in visited:
dfs(graph, neighbor, visited)
dfs(graph, 'A')


⚙️Итеративно через стек:
def dfs_iter(graph, start):
visited, stack = set(), [start]
while stack:
v = stack.pop()
if v not in visited:
print(v, end=' ')
visited.add(v)
stack.extend(reversed(graph[v]))
dfs_iter(graph, 'A')


Вывод:
A B D E F C


#algorithm #python
🌐 Nginx быстрый, лёгкий, мощный

Nginx (engine-x)один из самых популярных веб-серверов в мире.
Создан для высокой нагрузки, он легко обслуживает тысячи одновременных соединений и почти не расходует ресурсы.


🔥 Почему Nginx так любят?

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

🧊 Идеален для статики — картинки, файлы, сайты загружаются молниеносно.

🔁 Reverse Proxy — пропускает запросы к backend'ам (Node.js, Python, Go и т.д.).

⚙️ Load Balancer — распределяет нагрузку по нескольким серверам.

🔐 Удобная работа с HTTPS — легко поднимает TLS.

🧱 Гибкая конфигурация — всё через простой nginx.conf.

📌 Где используется?

как фронт сервер для приложений

как API-gateway

в Docker/Kubernetes

на высоконагруженных сайтах, CDN, стримингах

📚Docs: https://nginx.org/en/docs/index.html
🌐GitHub: https://github.com/nginx/nginx

#web
Dokployдеплой без боли и лишней магии

⚙️Dokployэто современная платформа для деплоя приложений, которая делает управление серверами и контейнерами простым, понятным и приятным.

🔧 Что умеет Dokploy?
Деплой приложений через Docker
Удобная Web-панель для управления проектами
Поддержка GitHub / GitLab — деплой по push
Автоматический SSL (Let’s Encrypt)
Простая настройка доменных имен
Управление переменными окружения
Мониторинг и логи в одном месте

🎯 Кому подойдёт?

✔️ Backend и Fullstack-разработчикам
✔️ Стартапам

🌐 Официальный сайт: https://dokploy.com

#web #devops
👍1
gRPC и Go (Golang)

📚Если REST уже стал привычным инструментом, самое время познакомиться с gRPCбыстрым и строгим способом общения сервисов между собой

Что такое gRPC?

gRPCэто RPC-фреймворк от Google, который:

* использует HTTP/2
* передаёт данные через Protocol Buffers
* отлично подходит для микросервисов
* быстрее и компактнее REST + JSON

⚙️Базовый флоу работы с gRPC в Go:
1️⃣Описываем контракт в .proto
2️⃣ Генерируем код:
protoc --go_out=. --go-grpc_out=. service.proto

3️⃣ Реализуем server (структура + методы)
4️⃣ Поднимаем gRPC-сервер
5️⃣ Пишем client и вызываем методы как обычные функции
Пример RPC-метода:
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}

Когда стоит выбирать gRPC?
✔️ микросервисы
✔️ высокая нагрузка
✔️ строгие контракты между сервисами
✔️ внутренняя коммуникация

#web #backend #go
🤔1
Fabricлучший старт для моддинга Minecraft

Если хочешь создавать собственные моды для Minecraft или развивать уже существующие — обрати внимание на Fabric. Это лёгкий, быстрый и гибкий инструмент, который стал стандартом для моддеров, которым важны производительность и актуальность.

Почему Fabric?

⚡️ Лёгкий и быстрый — минимальная нагрузка, работает даже на слабых устройствах.

🧩 Модульность — чёткая структура, которую легко понимать и расширять.

🚀 Быстро обновляется — новые версии игры поддерживаются почти сразу после выхода.

🛠 Fabric API — удобная библиотека с готовыми инструментами для разработки.

🤝 Большое комьюнити — множество примеров, гайдов и открытого кода.

Docs: https://docs.fabricmc.net/

#gamedev
🤔1
Ч.2 Какие посты вы ждёте больше ?
Anonymous Poll
63%
Backend
25%
Frontend
38%
ComputerSince
Двусвязный список (Doubly Linked List)

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

✔️значение
✔️ссылку на следующий узел (next)
✔️ссылку на предыдущий узел (prev)

1️⃣Узел списка:
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None


2️⃣Двусвязный список:
class DoublyLinkedList:
def __init__(self):
self.head = None


3️⃣Вставка в начало — O(1)
    def add_front(self, data):
new_node = Node(data)
if self.head:
self.head.prev = new_node
new_node.next = self.head
self.head = new_node


4️⃣Обход списка — O(n)
    def print_list(self):
current = self.head
while current:
print(current.data, end=" <-> ")
current = current.next
print("None")


#ComputerScience #algorithms
🔥1
🗄 S3-хранилище — просто и практично

📚S3 (Simple Storage Service) это объектное хранилище.
Вместо папок и файлов — бакеты и объекты.


Используется для:
✔️загрузки файлов (аватарки, документы, видео)
✔️бэкапов
✔️логов
✔️статики для сайтов
✔️микросервисов (через API)


💡Базовые понятия
✔️Bucketконтейнер (как корневая папка)
✔️Objectфайл + метаданные
✔️Keyпуть к объекту (images/avatar.png)
✔️S3 APIHTTP API для работы с файлами

🐳 Локальный запуск S3 хранилища через Docker (MinIO):
# docker-compose.yml
version: "3.9"

services:
minio:
image: minio/minio
container_name: minio
command: server /data --console-address ":9001"
ports:
- "9000:9000" # S3 API
- "9001:9001" # Web UI
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123
volumes:
- minio-data:/data

volumes:
minio-data:

▶️ После запуска:

* S3 endpoint: http://localhost:9000

* UI: http://localhost:9001

* Логин: admin / admin123

Продолжение 👇
1
Full stack dev
🗄 S3-хранилище — просто и практично 📚S3 (Simple Storage Service) — это объектное хранилище. Вместо папок и файлов — бакеты и объекты. Используется для: ✔️загрузки файлов (аватарки, документы, видео) ✔️бэкапов ✔️логов ✔️статики для сайтов ✔️микросервисов…
После запуска S3, можно подключится к ниму, через любой язык программирования.

Пример кода (Python — самый короткий и читаемый)


pip install boto3


import boto3

s3 = boto3.client(
"s3",
endpoint_url="http://localhost:9000",
aws_access_key_id="admin",
aws_secret_access_key="admin123",
region_name="us-east-1",
)

bucket = "files"

# создать бакет
s3.create_bucket(Bucket=bucket)

# загрузить файл
s3.put_object(
Bucket=bucket,
Key="hello.txt",
Body=b"Hello S3!"
)

# скачать файл
obj = s3.get_object(Bucket=bucket, Key="hello.txt")
print(obj["Body"].read().decode())


💡 Где это реально применяют

Backend → загружает файлы → отдает ссылку

Frontend → загружает напрямую в S3 (presigned URL)

Kubernetes → хранение артефактов

#backend #devOps
🤔1
Только devOps могли его видеть

#memes
🔥1
👍3
Работа языко программирования №1

Многие из вас, сейчас читающих данный пост, умеют писать код на разных языках. Но немногие понимают и знают работу этих языков, то, как они реализованы, и то, что происходит, когда вы запускаете свой код. Данный пост открывает арку постов, связанных с этой темой; все последующие посты — 3–4 шт.