DevOps | Вопросы собесов
前往频道在 Telegram
Cайт easyoffer.ru Реклама @easyoffer_adv ВП @easyoffer_vp Тесты t.me/+2P7cpjeyfDVlZjcy Вакансии t.me/+i5KFWEWJ21hhYWEy
显示更多5 496
订阅者
+124 小时
-127 天
-1430 天
帖子存档
🤔 Как сделать так чтобы докер при сборке образа получил динамический атрибут от CI не env а например id проекта?
🟠Podman
Без демона: Не требует отдельного демона, контейнеры работают как процессы.
Совместимость с Docker: Поддерживает Docker CLI.
rootless режим: Запуск без привилегий суперпользователя.
podman run -d --name my-container nginx
🟠CRI-O
Интеграция с Kubernetes: Оптимизирован для Kubernetes.
Легковесность: Минимальные зависимости.
Поддержка OCI: Соответствует стандартам Open Container Initiative.
criSocket: /var/run/crio/crio.sock
🟠containerd
Высокая производительность: Эффективное управление контейнерами.
Интеграция с Kubernetes: Используется напрямую через CRI.
Поддержка OCI: Полная совместимость с OCI.
ctr run -d --name my-container docker.io/library/nginx:latest
🟠LXC/LXD
Полная виртуализация ОС: Изоляция процессов, сети и файловой системы.
Управление контейнерами: Удобные инструменты для управления.
Гибкость: Поддержка различных дистрибутивов Linux.
lxc launch ubuntu:20.04 my-container
🟠Rkt
Без демона: Запуск контейнеров без постоянного демона.
Безопасность: Изолированные окружения и аутентификация.
Интеграция с Kubernetes: Альтернатива Docker в Kubernetes.
rkt run --insecure-options=image docker://nginx
🟠OpenVZ
Виртуализация на уровне ОС: Запуск изолированных виртуальных окружений.
Производительность: Минимальная изоляция для высокой производительности.
Управление ресурсами: Контроль ресурсов для каждого окружения.
vzctl create 101 --ostemplate centos-7
🟠Singularity
Фокус на HPC: Оптимизирован для научных вычислений.
rootless контейнеры: Запуск без прав суперпользователя.
Совместимость: Поддержка Docker контейнеров и OCI форматов.
singularity pull docker://nginx
Ставь 👍 и забирай 📚 Базу знаний📶 С 1 декабря для граждан РФ открыт доступ к платным материалам по программированию
Вот отсортированные базы с тонной материала(книги, курсы, ресурсы и гайды). Выбирай своё направление:
👩💻 Frontend 👩💻 PHP
⚙️ Backend 👩💻 Моб. Dev
📱 GitHub 👩💻 GameDev
🤓 Всё айти 👩💻 DevOps
👩💻 Python 🖥 Data Science
👩💻 Java 🐞 Тестирование
👩💻 C# 🤔 Хакинг & ИБ
👩💻 С/С++ 📱 Маркетинг
🖥 SQL 🖥 Дизайн
👩💻 Golang 👣 Rust
Скачивать ничего не нужно — все выложили в Telegram с доступом по ссылке
🤔 Как посмотреть размер папки на диске?
Команда du -sh <путь к папке> показывает размер папки в человеко-читаемом формате.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Цены на все Серверы онлайн! Удобный конфигуратор!
Серверы STSS Flagman✅
Огромный выбор решений 👍
Консультации лучших экспертов 👌
Непревзойденный сервис ❤️
Получить предложение
#реклама
stss.ru
О рекламодателе
🤔 Какие ещё есть системы контейнеризации помимо докера?
🟠Podman
Без демона: Не требует отдельного демона, контейнеры работают как процессы.
Совместимость с Docker: Поддерживает Docker CLI.
rootless режим: Запуск без привилегий суперпользователя.
podman run -d --name my-container nginx
🟠CRI-O
Интеграция с Kubernetes: Оптимизирован для Kubernetes.
Легковесность: Минимальные зависимости.
Поддержка OCI: Соответствует стандартам Open Container Initiative.
criSocket: /var/run/crio/crio.sock
🟠containerd
Высокая производительность: Эффективное управление контейнерами.
Интеграция с Kubernetes: Используется напрямую через CRI.
Поддержка OCI: Полная совместимость с OCI.
ctr run -d --name my-container docker.io/library/nginx:latest
🟠LXC/LXD
Полная виртуализация ОС: Изоляция процессов, сети и файловой системы.
Управление контейнерами: Удобные инструменты для управления.
Гибкость: Поддержка различных дистрибутивов Linux.
lxc launch ubuntu:20.04 my-container
🟠Rkt
Без демона: Запуск контейнеров без постоянного демона.
Безопасность: Изолированные окружения и аутентификация.
Интеграция с Kubernetes: Альтернатива Docker в Kubernetes.
rkt run --insecure-options=image docker://nginx
🟠OpenVZ
Виртуализация на уровне ОС: Запуск изолированных виртуальных окружений.
Производительность: Минимальная изоляция для высокой производительности.
Управление ресурсами: Контроль ресурсов для каждого окружения.
vzctl create 101 --ostemplate centos-7
🟠Singularity
Фокус на HPC: Оптимизирован для научных вычислений.
rootless контейнеры: Запуск без прав суперпользователя.
Совместимость: Поддержка Docker контейнеров и OCI форматов.
singularity pull docker://nginx
Ставь 👍 и забирай 📚 Базу знаний🤔 Какие протоколы знаешь?
Протоколы: TCP (надежная передача данных), UDP (быстрая и ненадёжная), HTTP/HTTPS (веб-протоколы), FTP (передача файлов), SMTP/IMAP/POP3 (почтовые протоколы), WebSocket (двусторонняя связь) и DNS (разрешение имён).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Быстрая миграция в Yandex Cloud за наш счёт
Чувствуете, что текущая инфраструктура ограничивает рост вашего бизнеса? Пора переходить в облако!
Специалисты Yandex Cloud помогут сделать процесс миграции максимально простым. Всё, что потребуется от вас, — выделить специалиста с доступом к инфраструктуре. Остальное мы берём на себя!
И самое приятное: подайте заявку до 31 декабря, и мы покроем расходы на услуги нашей команды и тестовую инфраструктуру.
✨ Мигрируйте в Yandex Cloud легко и без рисков!
⚡Заполните заявку прямо сейчас
Подать заявку
#реклама
yandex.cloud
О рекламодателе
🤔 Каким образом вы шифруете переменные в CI?
Шифрование переменных в CI/CD пайплайнах является критически важной задачей для обеспечения безопасности секретных данных, таких как API-ключи, пароли и другие конфиденциальные данные.
🚩Основные подходы и инструменты
Предоставляют встроенные механизмы для безопасного хранения и использования секретов.
🟠GitHub Actions
Добавление секретов в репозиторий: Перейдите в настройки репозитория (Settings) -> Secrets and variables -> Actions -> New repository secret. Добавьте новый секрет, указав имя и значение.
Использование секретов в workflow
name: CI Pipeline
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Use secret
run: echo ${{ secrets.MY_SECRET }}
🟠GitLab CI
Добавление переменных в GitLab: Перейдите в настройки проекта (Settings) -> CI/CD -> Variables -> Expand -> Add variable. Добавьте новую переменную, указав имя и значение, и отметьте ее как Protected и Masked.
Использование переменных в .gitlab-ci.yml
stages:
- build
build:
stage: build
script:
- echo $MY_SECRET
🟠Jenkins
Добавление секретов в Jenkins: Перейдите в настройки Jenkins -> Manage Jenkins -> Manage Credentials -> (global) -> Add Credentials. Добавьте новый секрет, указав Scope, ID и значение.
Использование секретов в Jenkins pipeline
pipeline {
agent any
environment {
MY_SECRET = credentials('my-secret-id')
}
stages {
stage('Build') {
steps {
sh 'echo $MY_SECRET'
}
}
}
}
🚩Использование сторонних инструментов для управления секретами
🟠HashiCorp Vault
Установка и настройка Vault: Запустите Vault сервер и инициализируйте его. Создайте секрет и настройте политики доступа.
Пример использования Vault в CI/CD:
Создайте и инициализируйте секрет
vault kv put secret/myapp MY_SECRET=my_secret_value
Включите аутентификацию и предоставьте доступ CI/CD системе
vault auth enable approle
vault write auth/approle/role/my-role token_policies=my-policy
Использование секрета в GitHub Actions
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Vault
run: |
curl -o vault.zip https://releases.hashicorp.com/vault/1.8.2/vault_1.8.2_linux_amd64.zip
unzip vault.zip
sudo mv vault /usr/local/bin/
vault login ${{ secrets.VAULT_TOKEN }}
vault kv get -field=MY_SECRET secret/myapp
🚩Шифрование и расшифрование переменных вручную
🟠Использование GPG
Зашифруйте файл с переменными
gpg --symmetric --cipher-algo AES256 secrets.env
Расшифруйте файл в CI/CD процессе
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Decrypt secrets
run: |
gpg --batch --passphrase ${{ secrets.GPG_PASSPHRASE }} -o secrets.env -d secrets.env.gpg
source secrets.env
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое volume и persistent volume и какие есть типы этих вольюмов?
Volume — это механизм для хранения данных контейнера вне его файловой системы, чтобы данные сохранялись между перезапусками. Persistent Volume (PV) в Kubernetes представляет собой хранилище, которое существует независимо от подов. Типы volumes включают emptyDir, hostPath, NFS, CIFS, AWS EBS, Azure Disk и PersistentVolumeClaim.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
+9
Помощь в трудоустройстве в IT-сфере!
В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно!
Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита.
Для этого нужно:
- Перейти по ссылке
- Заполнить анкету и ответить на вопросы (занимает менее 3 минут)
- На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
🤔 Что такое роуты в кубере и зачем они используются?
В Kubernetes "роуты" (routes) обычно ассоциируются с концепцией маршрутизации сетевого трафика к нужным сервисам и подам в кластере.
🚩Основные компоненты маршрутизации в Kubernetes
🟠Service
Абстракция, определяющая логический набор подов и политику доступа к ним. Обеспечивает стабильную точку доступа (IP-адрес и порт) к динамически изменяющемуся набору подов.
ClusterIP: Доступ только внутри кластера.
NodePort: Открывает статический порт на каждом узле для внешнего доступа.
LoadBalancer: Создает внешний балансировщик нагрузки (используется в облачных провайдерах).
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
type: ClusterIP
🟠Ingress
API-объект, который управляет внешним доступом к сервисам в кластере, обычно HTTP/HTTPS.
Предоставляет возможность настройки правил маршрутизации, SSL/TLS терминальной точки, виртуальных хостов и балансировки нагрузки. Специальный компонент, который реализует правила Ingress.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
🟠Network Policies
Объект, определяющий правила контроля трафика для подов. Ограничивает и контролирует входящий и исходящий сетевой трафик между подами и сервисами, обеспечивая безопасность сети.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: example-network-policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: frontend
egress:
- to:
- podSelector:
matchLabels:
role: backend
🚩Как работают роуты
🟠Service
Маршрутизирует запросы на уровне кластера, обеспечивая доступ к группе подов через один IP-адрес.
🟠Ingress
Обеспечивает маршрутизацию HTTP/HTTPS запросов от внешних клиентов к нужным сервисам в кластере, используя правила маршрутизации.
🟠Network Policies
Контролируют сетевой трафик между подами, ограничивая или разрешая доступ по заданным правилам.
🚩Зачем используются роуты
🟠Упрощение доступа
Services и Ingress предоставляют стабильные точки доступа к подам, упрощая взаимодействие между компонентами приложения и внешними клиентами.
🟠Безопасность
Network Policies обеспечивают контроль сетевого трафика, что помогает защитить приложение от несанкционированного доступа и атак.
🟠Балансировка нагрузки
Services типа LoadBalancer и Ingress могут распределять входящий трафик между подами, обеспечивая равномерную нагрузку и улучшая производительность.
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое Kata Containers?
Kata Containers — это лёгкие виртуальные машины, сочетающие преимущества контейнеров (быстрое развертывание, низкая нагрузка) и виртуализации (изолированность и безопасность). Они используют гипервизоры для запуска каждого контейнера в изолированной среде, обеспечивая более высокий уровень безопасности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Школьник + бесплатные курсы по ИТ = новые возможности
Хотите прокачать мышление, научиться решать задачи по математике и информатике и познакомиться с ИТ? Бесплатные курсы для школьников в этом помогут. Занятия включают теорию и практические задачи, а само обучение не будет отнимать много времени - нужно 2-3 часа в неделю. После успешного прохождения одного из курсов вам выдадут сертификат - им можно пополнить портфолио.
Чтобы начать учиться, выберите подходящую программу и оставьте заявку на сайте Т-Образования.
Подать заявку
#реклама 16+
education.tbank.ru
О рекламодателе
🤔 Какими механизмами организовывается доступ к кастомным ресурсам?
Доступ к кастомным ресурсам организуется с помощью механизмов аутентификации (проверка идентификации пользователя), авторизации (определение прав доступа), контроля доступа через URL (например, через фильтры или маршрутизацию), использования сессий и токенов (например, JWT), а также с помощью ACL (списки контроля доступа) или ролей пользователей для ограничения прав.
🟠RBAC (Role-Based Access Control)
Настройка ролей и привилегий для управления доступом к кастомным ресурсам.
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: myresource-role
rules:
- apiGroups: ["example.com"]
resources: ["myresources"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
🟠Admission Controllers
Использование валидирующих вебхуков для валидации и контроля запросов к кастомным ресурсам.
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: myresource-webhook
webhooks:
- name: myresource.example.com
clientConfig:
service:
name: myresource-webhook-service
namespace: default
path: "/validate"
rules:
- operations: ["CREATE", "UPDATE"]
apiGroups: ["example.com"]
apiVersions: ["v1"]
resources: ["myresources"]
🟠CRD Validation
Определение схемы в CRD для автоматической проверки данных.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
field1:
type: string
field2:
type: integer
minimum: 0
names:
plural: myresources
singular: myresource
kind: MyResource
🟠Кастомные контроллеры и операторы
Автоматизация управления
Написание контроллеров для управления состоянием кастомных ресурсов.
🟠CLI и API
Интерактивное управление
Использование команд kubectl и API для взаимодействия с кастомными ресурсами.
kubectl apply -f my-custom-resource.yaml
kubectl get myresources
kubectl describe myresource my-custom-resource
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое мультистейдж в докере?
Мультистейдж — это подход в Dockerfile, позволяющий использовать несколько этапов сборки. Он помогает минимизировать размер образа, сохраняя только необходимые файлы на финальном этапе. Это упрощает управление сложными процессами сборки и делает их более эффективными.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Больше AI-сценариев и кое-что совсем неожиданное!
📱Битрикс24 Коллабы – инструмент, который встормошит ваши рабочие чатики! Пространство для совместной работы с внешними командами. Это как если телегу набить задачами, планировщиком встреч, добавить AI и обезопасить от лишних глаз.
Кроме того:
- Работайте над идеями и стратегиями в Досках
- Максимально загружайте ресурсы с Онлайн-записью
- С AI анализируйте скрипты и звонки менеджеров
- Создайте сайт с AI по короткому запросу
- Объединяйтесь на видеозвонках до 1000 человек
Новинки постепенно будут появляться внутри сервиса. Потестить многие, включая Битрикс24 Коллабы, можно уже сейчас и бесплатно.
Узнать больше
#реклама 16+
gravitation.bitrix24.ru
О рекламодателе
🤔 Что такое custom resourse definition?
Это механизм в Kubernetes, позволяющий пользователям определять свои собственные ресурсы (Custom Resources) и управлять ими так же, как и встроенными ресурсами Kubernetes (например, Pod, Service, Deployment). CRD расширяет API Kubernetes, предоставляя возможность создать пользовательские объекты с уникальными схемами и поведением.
🚩Аспекты
🟠Расширяемость API
CRD позволяет разработчикам расширять стандартный API Kubernetes, добавляя новые типы ресурсов, специфичные для их приложений или доменов.
🟠Определение схемы
Пользователи могут определить схему (структуру) своих пользовательских ресурсов с помощью YAML или JSON. Это включает описание полей, типов данных, обязательных полей и других ограничений.
🟠Использование контроллеров
Для управления состоянием пользовательских ресурсов можно разработать кастомные контроллеры (Custom Controllers), которые будут следить за изменениями в этих ресурсах и выполнять соответствующие действия.
🚩Пример использования
🟠Определение CRD
Создаем YAML-файл для определения CRD, который будет описывать пользовательский ресурс типа
MyResource:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: myresources.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
field1:
type: string
field2:
type: integer
scope: Namespaced
names:
plural: myresources
singular: myresource
kind: MyResource
shortNames:
- myr
🟠Применение CRD
Примените файл CRD, чтобы создать новый тип ресурса в Kubernetes:
kubectl apply -f myresource-crd.yaml
🟠Создание пользовательского ресурса
После создания CRD можно создавать объекты пользовательского ресурса:
apiVersion: example.com/v1
kind: MyResource
metadata:
name: my-custom-resource
spec:
field1: "value1"
field2: 42
Примените файл с пользовательским ресурсом:
kubectl apply -f my-custom-resource.yaml
🚩Контроллер для пользовательского ресурса
Чтобы управлять состоянием пользовательских ресурсов, необходимо создать контроллер. Контроллеры обычно пишутся на Go с использованием фреймворка kubebuilder или operator-sdk.
Установка Kubebuilder. Заполнение логики контроллера в сгенерированных файлах и деплой оператора в кластер.
curl -L -o kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/vX.Y.Z/kubebuilder_linux_amd64
chmod +x kubebuilder
mv kubebuilder /usr/local/bin/
Создание нового проекта оператора:
kubebuilder init --domain example.com --repo github.com/your-repo/my-operator
kubebuilder create api --group example --version v1 --kind MyResource
Ставь 👍 и забирай 📚 Базу знаний🤔 Как делается деплой на гитлабе?
Деплой на GitLab осуществляется через .gitlab-ci.yml, где описываются этапы сборки, тестирования и развертывания. Используются Runner’ы для выполнения заданий, а переменные хранят конфиденциальные данные. Интеграция с хранилищами или облаками автоматизирует процесс развертывания.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Обучение на Frontend-разработчика. С нуля за 9 месяцев.
На курсе вы получите все навыки, необходимые для старта в профессии Frontend-разработчика.
Персональный наставник middle/senior уровня.
14 проектов, лайвкодинг, хакатоны, репетиции техсобеседования.
Освоите JavaScript, React, TypeScript
Официальный диплом и сертификат школы.
Поддержка наставника по JS в течение 3-х месяцев после диплома.
Гарантия трудоустройства. Если вы не устроитесь, вернём деньги. Это закреплено в договоре п. 6.14
С 9 по 30 ноября 2024 г. скидка 40% на все программы Result School
Узнать больше
#реклама 16+
result.school
О рекламодателе
🤔 Какая самая популярная хранилка memory для Java?
Самым популярным in-memory (в памяти) хранилищем данных для Java является Hazelcast. Это распределенное in-memory хранилище данных, которое обеспечивает высокую доступность, масштабируемость и производительность. Hazelcast часто используется в Java-приложениях для кэширования, управления сеансами, распределенных вычислений и многого другого.
🚩Плюсы
➕Простота интеграции
Hazelcast легко интегрируется с Java-приложениями. Библиотека Hazelcast доступна через Maven и Gradle, что делает процесс подключения простым и удобным.
➕Высокая производительность
Так как данные хранятся в памяти, доступ к ним происходит очень быстро, что значительно улучшает производительность приложений.
➕Масштабируемость
Hazelcast поддерживает горизонтальное масштабирование, что позволяет добавлять новые узлы в кластер без значительных изменений в конфигурации приложения. Это обеспечивает гибкость и возможность обрабатывать увеличивающиеся нагрузки.
➕Распределенные структуры данных
Hazelcast предоставляет различные структуры данных, такие как карты (maps), множества (sets), очереди (queues), списки (lists) и другие, которые можно использовать в распределенном режиме.
➕Функции высокой доступности
Hazelcast поддерживает репликацию данных между узлами кластера, что обеспечивает высокую доступность и отказоустойчивость системы.
➕Поддержка вычислений
В Hazelcast можно выполнять распределенные вычисления с использованием MapReduce, входящих задач и прочих механизмов.
🚩Пример использования
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>4.2.5</version>
</dependency>
🚩Пример кода
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.map.IMap;
public class HazelcastExample {
public static void main(String[] args) {
// Создаем экземпляр Hazelcast
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
// Получаем ссылку на распределенную карту
IMap<Integer, String> map = hazelcastInstance.getMap("my-distributed-map");
// Добавляем данные в карту
map.put(1, "value1");
map.put(2, "value2");
// Получаем данные из карты
String value1 = map.get(1);
String value2 = map.get(2);
// Выводим значения
System.out.println("Value for key 1: " + value1);
System.out.println("Value for key 2: " + value2);
// Закрываем экземпляр Hazelcast
hazelcastInstance.shutdown();
}
}
🚩Альтернативы
🟠Apache Ignite
Это распределенная in-memory платформа, которая предоставляет как in-memory хранилище, так и возможности для распределенных вычислений и обработки данных в реальном времени.
🟠Ehcache
Простое и мощное кэширование в памяти, часто используемое для ускорения доступа к часто запрашиваемым данным. Поддерживает интеграцию с Hibernate.
🟠Redis
В то время как Redis чаще используется как отдельный сервер для in-memory данных, он также может использоваться в Java-приложениях через клиентские библиотеки, такие как Jedis и Lettuce.
Ставь 👍 и забирай 📚 Базу знаний
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
