fa
Feedback

فریب کلاهبرداران را نخورید! تل‌متریو این کانال‌ها را شناسایی و برچسب‌گذاری می‌کند 👉 برای مشاهده برچسب، اشتراک تهیه کنید

Merion Academy

Merion Academy

رفتن به کانال در Telegram

Самое важное про IT на доступном языке. Сотрудничество: @olegpohl Служба поддержки: https://t.me/merion_academy_bot

نمایش بیشتر
8 991
مشترکین
+224 ساعت
-157 روز
-630 روز

در حال بارگذاری داده‌ها

جذب مشترکین
اکتبر '26
اکتبر '26
+104
در 0 کانال‌ها
سپتامبر '26
+191
در 0 کانال‌ها
Get PRO
اوت '26
+197
در 0 کانال‌ها
Get PRO
ژوئیه '26
+147
در 0 کانال‌ها
Get PRO
ژوئن '26
+267
در 0 کانال‌ها
Get PRO
مه '26
+265
در 0 کانال‌ها
Get PRO
آوریل '26
+274
در 0 کانال‌ها
Get PRO
مارس '26
+184
در 0 کانال‌ها
Get PRO
فوریه '26
+255
در 0 کانال‌ها
Get PRO
ژانویه '26
+206
در 0 کانال‌ها
Get PRO
دسامبر '25
+238
در 0 کانال‌ها
Get PRO
نوامبر '25
+482
در 5 کانال‌ها
Get PRO
اکتبر '25
+252
در 0 کانال‌ها
Get PRO
سپتامبر '25
+173
در 0 کانال‌ها
Get PRO
اوت '25
+217
در 0 کانال‌ها
Get PRO
ژوئیه '25
+242
در 0 کانال‌ها
Get PRO
ژوئن '25
+246
در 0 کانال‌ها
Get PRO
مه '25
+222
در 0 کانال‌ها
Get PRO
آوریل '25
+248
در 1 کانال‌ها
Get PRO
مارس '25
+250
در 1 کانال‌ها
Get PRO
فوریه '25
+237
در 0 کانال‌ها
Get PRO
ژانویه '25
+271
در 0 کانال‌ها
Get PRO
دسامبر '24
+159
در 0 کانال‌ها
Get PRO
نوامبر '24
+310
در 0 کانال‌ها
Get PRO
اکتبر '24
+270
در 0 کانال‌ها
Get PRO
سپتامبر '24
+407
در 0 کانال‌ها
Get PRO
اوت '24
+335
در 0 کانال‌ها
Get PRO
ژوئیه '24
+346
در 0 کانال‌ها
Get PRO
ژوئن '24
+270
در 0 کانال‌ها
Get PRO
مه '24
+255
در 0 کانال‌ها
Get PRO
آوریل '24
+337
در 0 کانال‌ها
Get PRO
مارس '24
+240
در 0 کانال‌ها
Get PRO
فوریه '24
+346
در 3 کانال‌ها
Get PRO
ژانویه '24
+819
در 22 کانال‌ها
Get PRO
دسامبر '23
+180
در 0 کانال‌ها
Get PRO
نوامبر '23
+313
در 0 کانال‌ها
Get PRO
اکتبر '23
+238
در 0 کانال‌ها
Get PRO
سپتامبر '23
+391
در 0 کانال‌ها
Get PRO
اوت '23
+499
در 0 کانال‌ها
Get PRO
ژوئیه '23
+196
در 0 کانال‌ها
Get PRO
ژوئن '23
+133
در 0 کانال‌ها
Get PRO
مه '23
+65
در 0 کانال‌ها
Get PRO
آوریل '23
+40
در 0 کانال‌ها
Get PRO
مارس '23
+51
در 0 کانال‌ها
Get PRO
فوریه '23
+118
در 0 کانال‌ها
Get PRO
ژانویه '23
+37
در 0 کانال‌ها
Get PRO
دسامبر '22
+37
در 0 کانال‌ها
Get PRO
نوامبر '22
+45
در 0 کانال‌ها
Get PRO
اکتبر '22
+55
در 0 کانال‌ها
Get PRO
سپتامبر '22
+56
در 0 کانال‌ها
Get PRO
اوت '22
+51
در 0 کانال‌ها
Get PRO
ژوئیه '22
+70
در 0 کانال‌ها
Get PRO
ژوئن '22
+67
در 0 کانال‌ها
Get PRO
مه '22
+46
در 0 کانال‌ها
Get PRO
آوریل '22
+46
در 0 کانال‌ها
Get PRO
مارس '22
+61
در 0 کانال‌ها
Get PRO
فوریه '22
+28
در 0 کانال‌ها
Get PRO
ژانویه '22
+32
در 0 کانال‌ها
Get PRO
دسامبر '21
+34
در 0 کانال‌ها
Get PRO
نوامبر '21
+43
در 0 کانال‌ها
Get PRO
اکتبر '21
+38
در 0 کانال‌ها
Get PRO
سپتامبر '21
+40
در 0 کانال‌ها
Get PRO
اوت '21
+45
در 0 کانال‌ها
Get PRO
ژوئیه '21
+39
در 0 کانال‌ها
Get PRO
ژوئن '21
+25
در 0 کانال‌ها
Get PRO
مه '21
+1 079
در 0 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
26 اکتبر+7
25 اکتبر+4
24 اکتبر+2
23 اکتبر+1
22 اکتبر+3
21 اکتبر+2
20 اکتبر+4
19 اکتبر+4
18 اکتبر+5
17 اکتبر+4
16 اکتبر+4
15 اکتبر+3
14 اکتبر+2
13 اکتبر+5
12 اکتبر+3
11 اکتبر+2
10 اکتبر0
09 اکتبر+8
08 اکتبر+11
07 اکتبر+2
06 اکتبر+5
05 اکتبر+4
04 اکتبر+5
03 اکتبر+10
02 اکتبر+1
01 اکتبر+3
پست‌های کانال
Пятничная загадка: после релиза часть пользователей видит старую версию сайта Фронтенд обновили. На компьютере разработчика всё новое, но часть пользователей продолжает видеть старый интерфейс. Факты: - новый файл уже есть на сервере; - проблема возникает не у всех; - после очистки кэша страница обновляется; - API отдаёт свежие данные. Где искать причину? 👀 - в запросе к базе данных 🔥 - в браузерном или CDN-кэше 🤔 - в правах пользователя на сервере Ставь реакцию. Разбор в следующий понедельник.

2
Задачка с собеседования: контейнер работает локально, но падает в CI 🐸 На ноутбуке всё запускается. В CI pipeline контейнер
Задачка с собеседования: контейнер работает локально, но падает в CI 🐸 На ноутбуке всё запускается. В CI pipeline контейнер завершается сразу после старта. Проверять нужно не только код приложения. Сравни переменные окружения, версию образа, права на файлы, сетевые настройки и команду запуска. На курсе «DevOps-инженер с нуля» эти темы разбираются на практике: Linux, Docker, Docker Compose, CI/CD, Kubernetes, Terraform, Ansible и мониторинг. Сейчас идёт набор на поток. Есть тариф с ментором, ИИ-ассистент для вопросов по материалам и бандл Linux + DevOps. Начать можно с бесплатной части курса, чтобы оценить программу и формат обучения. ➡️ Программа, набор на поток и бесплатная часть
1 190
3
Контейнер сразу завершается после запуска: что проверить 🐸 Команда docker ps показывает пусто, хотя минуту назад контейнер з
Контейнер сразу завершается после запуска: что проверить 🐸 Команда docker ps показывает пусто, хотя минуту назад контейнер запускался. Проверь по шагам: docker ps -a Покажет остановленные контейнеры и их статус. docker logs <container_id> Покажет, почему завершился основной процесс. docker inspect <container_id> Поможет проверить команду запуска, переменные окружения и код выхода. Контейнер живёт, пока живёт его основной процесс. Если команда внутри завершилась, контейнер тоже остановится.
1 269
4
Логи не нужно читать целиком: начни с пяти строк вокруг ошибки 🐸 Когда сервис упал, найди сначала время и ключевое слово, потом уже контекст. grep -n "ERROR" app.log | tail -n 5 Посмотреть последние ошибки проще, чем листать весь файл. tail -n 100 app.log Посмотреть последние 100 строк и понять, что происходило перед ошибкой. journalctl -u nginx --since "10 minutes ago" Если сервис работает через systemd, сразу ограничь поиск нужным временем. Логи дают ответ только тогда, когда в них есть время, уровень ошибки и контекст запроса.
1 422
5
Разгадка: почему зелёные метрики не означают, что всё работает Правильный ответ: 🔥 смотреть нужно не только на средние показ
Разгадка: почему зелёные метрики не означают, что всё работает Правильный ответ: 🔥 смотреть нужно не только на средние показатели, а на ошибки и p99 конкретного сценария. Если 99% оплат проходят быстро, среднее время ответа останется красивым. Но один процент пользователей может получать таймаут или ошибку на шаге оплаты. Порядок проверки: 1. найти endpoint, который отвечает за оплату; 2. сравнить долю ошибок до и после релиза; 3. посмотреть p95 и p99 отдельно для этого endpoint; 4. открыть трассировки неуспешных запросов; 5. проверить, не падает ли один из внешних сервисов. Мониторинг должен показывать не только состояние серверов, но и то, могут ли пользователи выполнить важное действие.
1 625
6
🤔
🤔
2 028
7
Пятничная загадка: все метрики зелёные, но пользователи не могут оплатить заказ После небольшого релиза: - CPU и память в норме; - среднее время ответа не изменилось; - ошибок в логах почти нет; - пользователи пишут, что оплата иногда не проходит; - проблема возникает примерно у 1% заказов. Что проверишь первым? 👀 - график среднего времени ответа 🔥 - p99 и ошибки по endpoint оплаты 🤔 - загрузку CPU на сервере базы данных Ставь реакцию. Разбор в следующий понедельник.
1 982
8
Задачка с собеседования: сервис работает, но после релиза стал медленным 🐸 CPU не загружен, память в норме, ошибок в логах п
Задачка с собеседования: сервис работает, но после релиза стал медленным 🐸 CPU не загружен, память в норме, ошибок в логах почти нет. Пользователи говорят, что страницы открываются дольше обычного. С чего начнёшь проверку? Сначала сравни метрики до и после релиза, затем посмотри p95 и p99, ошибки по конкретным endpoint и трассировку медленного запроса. Среднее время ответа здесь может выглядеть нормально. Такие ситуации разбирают на курсе «DevOps-инженер с нуля». В программе есть Linux, Docker, Kubernetes, CI/CD, мониторинг, Terraform и Ansible. На странице также доступен комплект Linux + DevOps для тех, кто хочет начать с базы. Можно начать с бесплатной части курса и посмотреть, как устроено обучение. ➡️ Программа и бесплатная часть
2 021
9
Среднее время ответа 200 мс, а пользователи всё равно ждут 8 секунд 🐸 Среднее значение может скрыть самые медленные запросы.
Среднее время ответа 200 мс, а пользователи всё равно ждут 8 секунд 🐸 Среднее значение может скрыть самые медленные запросы. Представь 1000 запросов: - 970 уложились в 200 мс - 20 заняли около секунды - 10 выполнялись 8-10 секунд Среднее будет выглядеть неплохо, но каждый сотый пользователь получит очень медленную страницу. Поэтому смотрят на перцентили: p50 показывает типичный запрос. p95 показывает границу для самых медленных 5%. p99 показывает границу для самых медленных 1%. Если среднее зелёное, а p99 растёт, проблема уже есть. Просто среднее её прячет.
1 874
10
Кто поменял эту строку и зачем нужен `git blame` 🐸 Нашёл подозрительный фрагмент кода, но не знаешь, откуда он взялся? git blame -L 42,55 src/app.js Команда покажет, какой коммит и какой автор изменили строки с 42 по 55. Дальше открой сам коммит: git show <commit_hash> Так можно увидеть не только автора, но и соседние изменения, сообщение коммита и первоначальную задачу. git blame не отвечает на вопрос «кто виноват» автоматически. Он помогает быстро найти контекст, когда строка стала проблемной.
1 839
11
Три команды, когда сервер внезапно начал тормозить 🐸 Не открывай сразу десять вкладок. Начни с трёх быстрых проверок. uptime
Три команды, когда сервер внезапно начал тормозить 🐸 Не открывай сразу десять вкладок. Начни с трёх быстрых проверок. uptime - Показывает нагрузку и помогает понять, сервер тормозит давно или проблема появилась только что. free -h - Проверяет оперативную память и swap. Если свободной памяти почти нет, процессы могут начать ждать диск. df -h - Показывает заполненность файловых систем. Когда заканчивается место, начинают странно вести себя логи, базы и сервисы. После этого уже смотри конкретный процесс и логи, иначе легко чинить не причину, а первый симптом. Какую команду запускаешь первой?
1 895
12
Разгадка: почему SQL-отчёт показал 4000 ₽ вместо 1000 ₽ Правильный ответ: 🔥 два JOIN создали четыре строки для одного заказа. У заказа №42 было: - 2 строки в order_items - 2 строки в payments После соединения таблиц база получила 2 × 2 = 4 строки. В каждой из них осталось o.total = 1000, поэтому SUM(o.total) сложил одну и ту же сумму четыре раза. orders не содержит дублей. Дубли появились в результате соединения таблиц. SUM(DISTINCT o.total) здесь не является надёжным исправлением. Если два разных заказа стоят одинаково, один из них потеряется в подсчёте. Если нужна выручка по заказам, не присоединяй таблицы «один ко многим» до подсчёта суммы: SELECT o.id, o.total AS revenue FROM orders o; А если нужны товары и платежи, сначала собери их отдельно по order_id, а потом присоедини к заказу.
1 886
13
Пятничная загадка: SQL-отчёт умножил выручку В таблице orders у заказа №42 сумма 1000 ₽. У него две строки в order_items и два события в payments. Аналитик собирает отчёт: SELECT o.id, SUM(o.total) AS revenue FROM orders o JOIN order_items i ON i.order_id = o.id JOIN payments p ON p.order_id = o.id GROUP BY o.id; Для заказа №42 отчёт показывает 4000 ₽. В таблице orders одна строка, сумма там правильная. Ни одна таблица не содержит дублей по своему первичному ключу. Почему получилось именно 4000 ₽? 👀 - SUM складывает значение total дважды: один раз до JOIN и ещё раз после 🔥- два JOIN создали четыре строки: 2 товара × 2 платежа 🤔- база округлила сумму из-за разных типов данных в таблицах Ставь реакцию. Разбор и правильный запрос — в следующий понедельник.
2 313
14
بدون متن...
2 555
15
Найти пользователей с шестью и более заказами — куда поставить условие? 🐸 SELECT user_id, COUNT(*) AS orders_count FROM orde
Найти пользователей с шестью и более заказами — куда поставить условие? 🐸 SELECT user_id, COUNT(*) AS orders_count FROM orders GROUP BY user_id HAVING COUNT(*) >= 6; WHERE фильтрует строки до группировки. HAVING фильтрует группы после неё. Поэтому условие на COUNT(*) находится в HAVING. Если нужны только оплаченные заказы, добавь условие раньше: SELECT user_id, COUNT(*) AS paid_orders FROM orders WHERE status = 'paid' GROUP BY user_id HAVING COUNT(*) >= 6; Строчка WHERE status = 'paid' убирает неоплаченные заказы до подсчёта. А HAVING оставляет пользователей, у которых оплаченных заказов шесть или больше. Лайфхак для проверки: сначала запусти тот же запрос без HAVING и посмотри на суммы по нескольким знакомым user_id.
2 539
16
Если запрос из Node.js зависает слишком долго, то ставим дедлайн Если проект использует встроенный fetch, укажи таймаут через AbortSignal.timeout: const res = await fetch(url, { signal: AbortSignal.timeout(5000) }); Через 5 секунд сигнал отменит запрос. Ошибку всё равно нужно обработать: таймаут — ожидаемый сценарий при работе с сетью, а не повод ронять весь обработчик. try { const res = await fetch(url, { signal: AbortSignal.timeout(5000) }); if (!res.ok) throw new Error('HTTP ' + res.status); } catch (err) { console.error('Запрос не выполнен:', err); } Важно: таймаут ограничивает ожидание на стороне клиента; он не обещает, что сервер прекратит уже начатую работу. Есть ли таймауты у внешних API, от которых зависит ваш сервис?
2 147
17
Разгадка пятничного кейса 🐸 Одна из вероятных причин – в зависимости useEffect попал объект или функция, которые создаются з
Разгадка пятничного кейса 🐸 Одна из вероятных причин – в зависимости useEffect попал объект или функция, которые создаются заново на каждом рендере. Эффект делает запрос → ответ меняет state → новый рендер создаёт новую зависимость → эффект снова делает запрос. Проверка: сравнить значения зависимостей между рендерами и временно заменить составную зависимость на стабильный примитив, например status или page. Если цикл исчез, источник найден. В реальном проекте возможны и другие причины; одних 150 запросов для точного диагноза мало. А теперь короткая ловушка Python: def add(x, items=[]): items.append(x) return items Что вернут подряд add(1) и add(2)? Список по умолчанию создаётся один раз при определении функции: ответы будут [1] и [1, 2]. Безопасный шаблон: def add(x, items=None): if items is None: items = [] items.append(x) return items И в React, и в Python - всё решает момент создания значения.
2 025
18
React отправляет запрос дважды? Сначала проверь причину 🐸 В разработке StrictMode может дополнительно запускать setup и cleanup эффекта. Это помогает заметить эффекты, которые нельзя безопасно повторить. В production такое дополнительное выполнение из-за StrictMode не происходит. Но если запрос повторяется при каждом рендере, посмотри на зависимости: const filters = { status: 'open' }; useEffect(() => { load(filters); }, [filters]); Объект filters создаётся заново при каждом рендере. Для React это новая зависимость. Вынеси постоянное значение за пределы компонента или используй примитивные зависимости: useEffect(() => { load(status); }, [status]); И ещё: эффекту с запросом полезна отмена через AbortController, чтобы старый ответ не перезаписал свежий. Сохрани пост на случай, когда в Network вдруг появятся одинаковые запросы. В пятницу вернёмся к этой теме уже в формате расследования.
2 061
19
Пятничная загадка: кто размножил запросы? После небольшой правки React-страница стала открываться 8 секунд. Backend отвечает за 50 мс, база — за 20 мс, ошибок нет. В DevTools - около 150 одинаковых запросов к /api/items. Факты расследования: • проблема воспроизводится и в production-сборке; • запрос запускается внутри useEffect; • массив зависимостей эффекта заполнен; • после каждого ответа компонент обновляет состояние; • если убрать обновление состояния, шквал запросов прекращается. Почему запрос запускается снова и снова? 👀 - виноват StrictMode: он дублирует запросы и в production 🔥 - в зависимостях эффекта есть объект или функция, которые создаются заново при каждом рендере 🤔 - браузер автоматически повторяет запрос, пока не получит ответ из кэша Разгадка - в понедельник.
2 264
20
Задачка с собеса: почему список в React «путает» состояние строк? 🐸 Есть список задач. У каждой строки – поле ввода. Ты сорт
Задачка с собеса: почему список в React «путает» состояние строк? 🐸 Есть список задач. У каждой строки – поле ввода. Ты сортируешь список, и текст из первой строки внезапно оказывается у другой задачи. Данные в API правильные. Где ошибка? Частая причина – key={index}. После сортировки индекс остался на позиции, а задача на этой позиции уже другая. React переиспользовал компонент и его локальное состояние. Исправление: key={task.id} – стабильный идентификатор самой задачи. Он должен быть уникален среди соседних элементов и не меняться при сортировке. На собеседовании за этим обычно спрашивают дальше: где хранить состояние, когда нужен useEffect, как обрабатывать формы и запросы к API. Эти темы разбираются на курсе «Frontend-разработка на React»: компоненты, JSX, состояние, события и работа с API. ➡️ Программа курса и бесплатная часть по ссылке
2 252