Pythoner
رفتن به کانال در Telegram
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику. Сотрудничество - @flattys Цены - @serpent_media Канал на бирже: https://telega.in/c/pythonercode
نمایش بیشتر6 797
مشترکین
-724 ساعت
-117 روز
-4130 روز
آرشیو پست ها
6 798
Школьник + бесплатные курсы по ИТ = новые возможности
Хотите прокачать мышление, научиться решать задачи по математике и информатике и познакомиться с ИТ? Бесплатные курсы для школьников в этом помогут. Занятия включают теорию и практические задачи, а само обучение не будет отнимать много времени - нужно 2-3 часа в неделю. После успешного прохождения одного из курсов вам выдадут сертификат - им можно пополнить портфолио.
Чтобы начать учиться, выберите подходящую программу и оставьте заявку на сайте Т-Образования.
Подать заявку
#реклама 16+
education.tbank.ru
О рекламодателе
6 798
✈️ В Python asyncpg — это высокопроизводительная библиотека для асинхронного доступа к базам данных PostgreSQL. Она построена на базе asyncio и предоставляет низкоуровневый интерфейс для взаимодействия с PostgreSQL, обеспечивая высокую скорость и эффективность.
➡️ Применение asyncpg особенно актуально в высоконагруженных веб-приложениях и сервисах, где требуется максимальная производительность при работе с базой данных. asyncpg позволяет выполнять запросы к базе данных асинхронно, не блокируя основной поток приложения, что повышает общую отзывчивость и пропускную способность. Библиотека также поддерживает продвинутые возможности PostgreSQL, такие как JSON, hstore и уведомления.
➡️ Вот пример использования asyncpg для выполнения запросов к базе данных:
import asyncio
import asyncpg
async def run():
conn = await asyncpg.connect(user="user", password="password", database="database", host="127.0.0.1") # Подставьте свои учетные данные
try:
# Выполнение запроса на создание таблицы (если она не существует)
await conn.execute('''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name TEXT
)
''')
# Выполнение запроса на вставку данных
await conn.execute("INSERT INTO users (name) VALUES ($1)", "Alice")
# Выполнение запроса на выборку данных
result = await conn.fetch("SELECT * FROM users")
print(result) # Вывод: [<Record id=1 name='Alice'>]
# Выполнение параметризованного запроса на выборку данных
user_name = "Alice"
user = await conn.fetchrow("SELECT * FROM users WHERE name = $1", user_name)
print(user) # Вывод: <Record id=1 name='Alice'>
# Транзакции
async with conn.transaction():
await conn.execute("UPDATE users SET name = $1 WHERE id = $2", "Bob", 1)
# Обработка ошибок
try:
await conn.execute("SELECT * FROM non_existent_table") # Несуществующая таблица
except asyncpg.exceptions.UndefinedTableError as e:
print(f"Ошибка: {e}")
finally:
await conn.close()
if __name__ == "__main__":
asyncio.run(run())
⬆️ В этом примере демонстрируется подключение к базе данных PostgreSQL, выполнение различных SQL-запросов (создание таблицы, вставка, выборка данных), использование параметризованных запросов, обработка транзакций и пример обработки исключения UndefinedTableError. Для запуска примера необходимо установить asyncpg (pip install asyncpg) и иметь работающий сервер PostgreSQL с указанными учетными данными. Не забудьте заменить user, password, database, и host на ваши реальные данные. Помните, что asyncpg работает асинхронно, поэтому необходимо использовать asyncio.run() для запуска кода.
🐍 Pythoner6 798
Крупнейший университет искусственного интеллекта
Учим использовать ChatGPT в профессиональных целях, создавать нейро-сотрудников и зарабатывать на искусственном интеллекте.
✨ 8 000+ студентов со всего мира
✨ 600+ AI-проектов, созданных студентами
✨ Сборная Университета — победители крупнейших AI-хакатонов России
✨ Стажировки в крупнейших компаниях России (РЖД, Ростелеком, РУДН, Совкомбанк, Самолет и другие)
✨ Трудоустраиваем выпускников в крупнейшие компании (Яндекс, ВТБ, Сбербанк, Роскосмос и другие)
Будем рады видеть тебя в наших рядах!
Узнать больше
#реклама 16+
neural-university.ru
О рекламодателе
6 798
✈️ В Python trafilatura — это мощная библиотека для извлечения основного текста из веб-страниц. Она эффективно обрабатывает HTML, XML и другие форматы, удаляя ненужные элементы, такие как навигация, реклама и боковые панели, оставляя только основной контент статьи или публикации.
➡️ Применение trafilatura широко распространено в веб-скрапинге, анализе текста, создании датасетов для машинного обучения и других задачах, где требуется чистый текст из веб-источников. Библиотека предоставляет гибкие настройки для обработки различных типов веб-страниц и поддерживает извлечение метаданных, таких как заголовок, автор и дата публикации.
➡️ Вот пример использования trafilatura для извлечения текста из веб-страницы:
from trafilatura import extract
downloaded_html = """
<!DOCTYPE html>
<html lang="en">
<head>
<title>Example Page</title>
</head>
<body>
<h1>This is a heading</h1>
<p>This is some text in a paragraph.</p>
<aside>This is some text in a sidebar.</aside>
<p>This is more text in another paragraph.</p>
<footer>This is a footer.</footer>
</body>
</html>
"""
extracted_text = extract(downloaded_html)
print(extracted_text)
# Вывод:
# This is a heading
# This is some text in a paragraph.
# This is more text in another paragraph.
from trafilatura import fetch_url
url = "https://www.example.com" # Замените на реальный URL
try:
extracted_text = fetch_url(url)
if extracted_text:
print(extracted_text)
else:
print("Не удалось извлечь текст с URL")
except Exception as e:
print(f"Произошла ошибка: {e}")
from trafilatura import bare_extraction
extracted_text_with_metadata = bare_extraction(downloaded_html, include_comments=False, include_tables=True, deduplicate=True)
print(extracted_text_with_metadata)
# Пример вывода (может варьироваться в зависимости от контента страницы):
# {'title': 'Example Page', 'text': 'This is a heading\nThis is some text in a paragraph.\nThis is more text in another paragraph.', 'author': None, 'url': None, 'hostname': None, 'description': None, 'date': None}
⬆️ В этом примере демонстрируется использование функций extract и fetch_url из библиотеки trafilatura. Функция extract извлекает текст из предоставленного HTML-кода, а fetch_url загружает и обрабатывает веб-страницу по указанному URL. Также приведен пример использования bare_extraction для получения текста вместе с метаданными. Обратите внимание, что для работы с fetch_url требуется активное интернет-соединение и корректный URL. Пример с bare_extraction показывает, как получить дополнительные данные, такие как заголовок страницы.
🐍 Pythoner6 798
✈️ В Python абстрактные классы (ABC) — это классы, которые предназначены для того, чтобы быть базовыми для других классов, и не предполагают создания собственных экземпляров. Абстрактные классы позволяют определить общий интерфейс для группы подклассов, обеспечивая, что все они реализуют определенные методы.
➡️ Применение абстрактных классов способствует созданию более структурированного и поддерживаемого кода, повышает его читаемость и позволяет применять полиморфизм более эффективно. Они особенно полезны при разработке библиотек и фреймворков, где необходимо обеспечить определенный набор функциональности в классах-наследниках. Использование ABC помогает предотвратить ошибки, связанные с отсутствием реализации обязательных методов в подклассах, которые могли бы проявиться только во время выполнения.
➡️ Вот пример абстрактного класса и его использования:
from abc import ABC, abstractmethod
class Animal(ABC): # Animal - абстрактный базовый класс
@abstractmethod
def make_sound(self):
pass
@abstractmethod
def move(self):
pass
class Dog(Animal):
def make_sound(self):
return "Woof!"
def move(self):
return "Runs"
class Cat(Animal):
def make_sound(self):
return "Meow!"
def move(self):
return "Walks"
dog = Dog()
print(dog.make_sound()) # Вывод: Woof!
print(dog.move()) # Вывод: Runs
cat = Cat()
print(cat.make_sound()) # Вывод: Meow!
print(cat.move()) # Вывод: Walks
try:
animal = Animal() # Попытка создать экземпляр абстрактного класса
except TypeError as e:
print(e) # Вывод: Can't instantiate abstract class Animal with abstract methods make_sound, move
animals = [Dog(), Cat()]
for animal in animals:
print(animal.make_sound()) # Полиморфизм: вызов метода make_sound для разных животных
class Fish(Animal):
def make_sound(self):
return "Blub!"
# Забыли реализовать метод move
try:
fish = Fish() # Попытка создать экземпляр класса с нереализованным абстрактным методом
except TypeError as e:
print(e) # Вывод: Can't instantiate abstract class Fish with abstract methods move
⬆️ В этом примере создается абстрактный класс Animal с абстрактными методами make_sound и move. Классы Dog и Cat наследуют от Animal и реализуют эти методы. Попытка создать экземпляр самого абстрактного класса Animal приводит к ошибке TypeError. Демонстрируется полиморфизм: один и тот же код animal.make_sound() работает с объектами разных классов, производных от Animal, и выдает специфичный для каждого класса результат. Также показан пример ошибки, возникающей при попытке создания экземпляра класса Fish, который не реализует все абстрактные методы базового класса.
🐍 Pythoner6 798
Хочешь узнать все самые интересные фишки в DevOps?
Подписывайся на Telegram-канал DevOps Bootcamp от учебного центра Слёрм и забирай подарок!
Для тех, кто собирается в DevOps ы разработали свой Roadmap на основе опыта спикеров Слёрма. Он сделан с учётом российских реалий, разбит на уровни, фокусирует внимание на том, что в первую очередь понвдобится для старта и роста в профессии, и содержит ссылки на дополнительные источники.
Подписаться
#реклама 16+
slurm.io
О рекламодателе
6 798
✈️ В Python
httpx — это современная HTTP-клиентская библиотека, которая предоставляет полный набор функций для работы с HTTP/1.1 и HTTP/2. httpx позволяют разработчикам легко и эффективно взаимодействовать с веб-серверами, отправляя запросы и получая ответы.
➡️ Применение httpx.
httpx широко используется в различных сценариях, включая:
- Веб-скрейпинг: Извлечение данных с веб-страниц.
- API-интеграции: Взаимодействие с RESTful API.
- Тестирование: Автоматизация тестирования веб-сервисов.
- Микросервисы: Обмен данными между микросервисами.
➡️ Вот пример использования httpx:
import httpx
# Отправка GET-запроса
response = httpx.get("https://api.github.com")
# Проверка статуса ответа
if response.status_code == 200:
print("Успешный запрос!")
print("Содержимое ответа:", response.text)
else:
print("Ошибка:", response.status_code)
# Отправка POST-запроса
data = {"key1": "value1", "key2": "value2"}
response = httpx.post("https://httpbin.org/post", data=data)
# Проверка статуса ответа
if response.status_code == 200:
print("Успешный POST-запрос!")
print("Содержимое ответа:", response.json())
else:
print("Ошибка:", response.status_code)
⬆️ В этом примере создается HTTP-клиент с использованием httpx, который отправляет GET и POST запросы на указанные URL.
🐍 Pythoner6 798
Что такое реальный ворк-лайф баланс для разработчика?
На целую неделю ребята из канала Merk/daily передают бразды правления их каналом Flutter-разработчику Александру, чтобы вместе выяснить как разработчикам не выгорать на сложных проектах. Никакой воды и скучных нравоучениях о том, как «правильно» жить 👌
Александр расскажет, как выглядит его ворк-лайф баланс на самом деле, и как создать свой собственный, идеально подходящий именно вам.
А еще:
- Реальные истории из жизни IT-специалистов в международной компании.
- Как Саша пришел в IT и выбрал свой стек
- Кринжовые истории с собеседований
- История о том, как мы сначала отказали Саше, а потом передумали ⚡
Подписывайтесь на канал, чтобы не пропустить!
Подписаться
#реклама
О рекламодателе
6 798
✈️ В Python "plotly" — это библиотека для создания интерактивных графиков и визуализаций данных. "plotly" позволяет строить разнообразные типы графиков, включая линейные, точечные, гистограммы, круговые диаграммы, 3D-графики и многое другое. Они могут быть легко встроены в веб-приложения, отчеты и презентации, предоставляя пользователям возможность взаимодействовать с данными, масштабировать, панорамировать и выделять интересующие области.
➡️ Применение "plotly" широко распространено в области анализа данных, научных исследований, бизнес-аналитики и визуализации данных в веб-приложениях. Библиотека предоставляет удобный интерфейс для создания высококачественных, интерактивных графиков, которые помогают лучше понимать данные и извлекать из них ценную информацию. "Plotly" поддерживает различные фреймворки, такие как "Dash" и "Flask", что делает его мощным инструментом для создания динамических веб-приложений с интерактивными визуализациями. Кроме того, "plotly" можно использовать для создания автономных HTML-файлов с графиками, которые можно легко распространять и публиковать.
➡️ Вот пример использования "plotly" для построения интерактивного линейного графика:
import plotly.graph_objects as go
# Создаем данные для графика
x = [1, 2, 3, 4, 5]
y1 = [10, 11, 12, 13, 14]
y2 = [8, 9, 10, 11, 12]
# Создаем объект Figure
fig = go.Figure()
# Добавляем первый линейный график
fig.add_trace(go.Scatter(x=x, y=y1, mode="lines+markers", name="Линия 1"))
# Добавляем второй линейный график
fig.add_trace(go.Scatter(x=x, y=y2, mode="lines+markers", name="Линия 2"))
# Настраиваем заголовок и подписи осей
fig.update_layout(title="Интерактивный линейный график",
xaxis_title="X",
yaxis_title="Y")
# Отображаем график
fig.show()
# Сохраняем график в HTML-файл
# fig.write_html("my_plotly_chart.html")
⬆️ В этом примере создается интерактивный линейный график с двумя линиями, отображающими зависимость "Y" от "X". Пользователь может взаимодействовать с графиком, масштабируя, панорамируя и просматривая значения данных при наведении курсора на точки. Кроме того, в примере показано, как сохранить график в HTML-файл для последующего использования и публикации.
🐍 Pythoner6 798
Чувак с Реддита слил гайды по программированию, по которым обучают прогеров Microsoft и Apple.
Внутри больше 83 ГБ учебных материалов для джунов, мидлов и даже сеньоров. Отличная альтернатива платным курсам и обучениям:
Гайды по JavaScript
Гайды по Java
Гайды по C#
Гайды по PHP
Гайды по C++
Гайды по TypeScript
Гайды по Go
Гайды по Swift
Гайды по Kotlin
Гайды по Ruby
Гайды по Rust
Гайды по Scal
Гайды по Perl
Гайды по R
Полный список...
Аналогов этому ресурсу больше нет, не благодарите.
6 798
Бесплатное IT-образование в 2024
Отобрали для вас полезные телеграм-каналы, которые помогут освоить IT-направления
Выбирайте нужное и подписывайтесь:
— Frontend:
t.me/+qWPopdiaxVMzZDgy
— Backend:
t.me/+X-zQb-NgzGNhMzRi
— GitHub:
t.me/+3BVAmDixuO9lYTFi
— Книги айти:
t.me/+IG2NAVECUXs4MGYy
— Python:
t.me/+vBSA5zgB_gA0OWRi
— Java:
t.me/+3BRKfZ09ewg0NDJi
— C#:
t.me/+O3pnFY4bpF5hNTEy
— С/С++:
t.me/+PGxPXpZZczQxODcy
— Базы Данных & SQL:
t.me/+530qWWydM8ExZjk6
— Golang:
t.me/+FvTd7F-O-NNmNGMy
— PHP:
t.me/+jBvbaet0vpplNDQy
— Моб. разработка:
t.me/+Ikx5H4MrPihlOWZi
— Разработка игр:
t.me/+Z34knEvL8P9lZTAy
— DevOps:
t.me/+3wSgqmP5NOBhZGUy
— Data Science:
t.me/+-CuoNNa6P7VjOTRi
— ИБ:
t.me/+4jo8N5jtGDs1NTli
— Тестирование:
t.me/+MvFXlXbmmPFkM2Ey
— Маркетинг:
t.me/+lgiFPJTYp8M0ZjRi
— Дизайн:
t.me/+gmflvDFPc_c1YmIy
Получить предложение
#реклама 16+
О рекламодателе
6 798
✈️ Модуль
rich в Python предоставляет мощные возможности для улучшения визуального оформления терминальных приложений. С помощью rich можно создавать цветные тексты, таблицы, деревья, прогресс-бары и даже подсвечивать код.
➡️ Вот несколько практических примеров применения rich:
1. Цветной текст и стили
from rich import print
# Выводим текст с цветами и стилями
print("[bold red]Ошибка:[/] Неверный ввод!")
print("[green]Успех:[/] Данные сохранены.")
print("Это [italic cyan]пример[/italic cyan] текста с [underline magenta]разными[/underline magenta] стилями.")
⬆️ Этот пример показывает, как легко добавлять стили и цвета в текст. Используются такие стили, как жирный, курсив и подчёркнутый.
2. Форматирование JSON
from rich.console import Console
from rich.json import JSON
console = Console()
# Пример JSON-данных
data = '{"name": "Python3", "type": "Programming Language", "year": 2008}'
# Форматированный вывод JSON
console.print(JSON(data))
⬆️ Удобно для визуализации JSON-данных с автоматической подсветкой синтаксиса.
3. Создание таблиц
from rich.table import Table
from rich.console import Console
console = Console()
table = Table(title="Сравнение языков программирования")
table.add_column("Язык", style="bold", justify="left")
table.add_column("Скорость", justify="right")
table.add_column("Простота", justify="right")
table.add_row("Python", "Средняя", "Высокая")
table.add_row("Rust", "Высокая", "Средняя")
table.add_row("C++", "Высокая", "Низкая")
console.print(table)
⬆️ Таблицы помогают организовать данные, делая их читабельными и визуально привлекательными.
4. Прогресс-бар
from time import sleep
from rich.progress import Progress
with Progress() as progress:
task = progress.add_task("[cyan]Обработка данных...", total=100)
for i in range(100):
sleep(0.05)
progress.update(task, advance=1)
⬆️ Прогресс-бары полезны для отображения выполнения долгих операций.
5. Дерево файлов
from rich.tree import Tree
from rich.console import Console
console = Console()
tree = Tree("Проект")
src = tree.add("src")
src.add("main.py")
src.add("utils.py")
tree.add("README.md")
tree.add("requirements.txt")
console.print(tree)
⬆️ Этот пример создаёт визуализацию структуры проекта в виде дерева.
6. Подсветка синтаксиса
from rich.console import Console
from rich.syntax import Syntax
console = Console()
code = '''
def greet(name: str) -> str:
return f"Hello, {name}!"
'''
# Подсвечиваем код
syntax = Syntax(code, "python", theme="monokai", line_numbers=True)
console.print(syntax)
⬆️ Подсветка синтаксиса помогает отображать исходный код красиво и читаемо.
7. Журналирование
from rich.logging import RichHandler
import logging
logging.basicConfig(
level=logging.INFO,
format="%(message)s",
handlers=[RichHandler()]
)
log = logging.getLogger("rich")
log.info("Это [bold green]информация[/bold green].")
log.warning("Это [bold yellow]предупреждение[/bold yellow].")
log.error("Это [bold red]ошибка[/bold red].")
⬆️ Логирование с rich выглядит намного приятнее, чем стандартный вывод.
🐍 Pythoner6 798
Получи грант на обучение в Центральном университете
Прояви себя, получи грант до 2,8 млн на обучение ИТ и бизнесу в вузе.
Для школьников 10-х и 11-х классов, СПО.
Подать заявку
#реклама
apply.centraluniversity.ru
О рекламодателе
6 798
✈️В Python деструкторы — это специальные методы, которые вызываются, когда объект собирается с мусором (т.е., когда он больше не нужен и память, занимаемая объектом, освобождается). Деструкторы позволяют выполнить некоторые завершающие действия перед уничтожением объекта, например, освободить ресурсы или завершить соединения.
➡️Применение деструкторов ограничено в связи с наличием сборщика мусора. Их стоит использовать только когда нужно правильно освободить внешние ресурсы, например файлы.
➡️Вот пример класса с деструктором:
class MyClass:
def __init__(self, name):
self.name = name
print(f"Объект {self.name} создан.")
def __del__(self):
print(f"Объект {self.name} уничтожен.")
# Создаем объект класса
obj = MyClass("TestObject")
# Удаляем объект
del obj
# Если вы хотите избежать автоматического освобождения памяти,
# можете использовать осмысленное завершение программы, например:
import time
time.sleep(1) # daем немного времени, чтобы увидеть сообщение деструктора
⬆️В этом примере создается объект MyClass, после чего его деструктор будет вызван при удалении объекта с помощью команды del obj. Таким образом, в консоль будет выведено сообщение о создании объекта, а затем сообщение о его уничтожении.
🐍Pythoner6 798
Миграция в облако? Это легко!
Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресурсы! Эксперты Yandex Cloud помогут перейти в облако быстро, легко и безопасно.
✅ Мы полностью сопровождаем процесс.
✅ От вас — только инженер с доступом к инфраструктуре.
✅ Архитектура под ваши задачи, миграция и поддержка на каждом шагу — всё включено.
⚡Переходите в Yandex Cloud и забудьте о старом железе. А если успеете подать заявку до 31 декабря, мы покроем расходы на инженеров и тестовую инфраструктуру.
Подать заявку
#реклама 16+
yandex.cloud
О рекламодателе
Реклама на Яндексе
6 798
✈️Метод tell() используется для получения текущей позиции (смещения) при работе с файлами и файлоподобными объектами.
➡️Это позволяет:
—Узнать размер файла, сравнив позицию после чтения с начальной.
—Вернуться к определенной позиции с помощью
seek().
—Отслеживать прогресс обработки больших файлов.
—Получить позицию в строковых буферах и потоках байтов.
➡️Вот пример, который демонстрирует использование tell():
# Открываем файл для записи
with open('example.txt', 'w') as f:
f.write('Hello, World!')
# Получаем текущую позицию курсора
position = f.tell()
print(f'Current position after writing: {position}') # Вывод: 13, т.к. длина строки "Hello, World!" = 13
# Открываем файл для чтения
with open('example.txt', 'r') as f:
content = f.read(5) # Читаем первые 5 символов
position = f.tell()
print(f'Content read: {content}') # Вывод: Hello
print(f'Current position after reading: {position}') # Вывод: 5
⬆️В этом примере:
1. Мы открываем файл example.txt для записи и записываем в него строку "Hello, World!".
2. Используем tell(), чтобы получить позицию курсора после записи, что будет равно 13 (длина строки).
3. Затем открываем файл для чтения и читаем первые 5 символов.
4. Снова используем tell(), чтобы получить новую позицию курсора, которая будет равна 5 после чтения.
🐍Pythoner6 798
🔥Хотите повысить производительность работы с большими данными?
🦾 Ваша база знаний начинается с Cassandra!
Присоединяйтесь к открытому уроку «Интеграция Cassandra с приложениями».
Дата: 18 декабря в 20:00 мск
Cassandra — одна из самых востребованных NoSQL-баз для высоконагруженных систем. На уроке вы узнаете, как интегрировать её с приложениями и BI-инструментами, работать с данными и создавать простое приложение для Cassandra.
Вы сможете освоить технику загрузки больших объемов данных, изучите, как приложения могут эффективно взаимодействовать с базами на Cassandra, и получите важные навыки в аналитике!
🔗 Ссылка на регистрацию: https://otus.pw/UAZ7w/
#реклама
О рекламодателе
6 798
✈️rename() — это функция из модуля os, которая позволяет переименовывать файлы и директории. Синтаксис функции:
os.rename(old_name, new_name)
➡️Пример использования:
import os
# Переименуем файл 'старый_файл.txt' в 'новый_файл.txt'
old_name = 'старый_файл.txt'
new_name = 'новый_файл.txt'
# Проверяем, существует ли старый файл
if os.path.exists(old_name):
os.rename(old_name, new_name)
print(f'Файл переименован в {new_name}')
else:
print(f'Файл {old_name} не найден')
⬆️Обратите внимание:
—Если файл с new_name уже существует, функция вызовет ошибку.
—Убедитесь, что у вас есть необходимые права для выполнения этой операции.
🐍Pythoner6 798
Repost from Карьера в МегаФоне
Cвежие ИТ-вакансии — идеальный способ начать неделю:
Москва:
🟢Инженер технической поддержки L2
🟢Аналитик по разработке цифровых решений ПЛК
Санкт-Петербург:
🟢Data Scientist (middle)
🟢DBA Postgresql
Краснодар:
🟢Старший инженер Unix-систем
🟢DBA Postgresql
Больше вакансий на job.megafon.ru
6 798
В канале «Карьера в МегаФоне» регулярно публикуются IT-вакансии — от аналитиков до инженеров. Рекомендуем следить за обновлениями 💚
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
