METANIT.COM
6.24K subscribers
1.79K photos
86 videos
10 files
1.26K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Наиболее применяемые команды Git для повседневного использования #git
🙏13👏4🔥3
5 распространенных стратегий кэширования:

1. 𝐑𝐞𝐚𝐝 𝐓𝐡𝐫𝐨𝐮𝐠𝐡 : Приложение всегда сначала запрашивает кэш. Если данные отсутствуют в кэше, кэш сам извлекает их из базы данных и сохраняет для будущих запросов

2. 𝐂𝐚𝐜𝐡𝐞 𝐀𝐬𝐢𝐝𝐞 ( 𝐋𝐚𝐳𝐲 𝐋𝐨𝐚𝐝𝐢𝐧𝐠): Приложение сначала проверяет кэш. Если данные не найдены в кэше, извлекает данные из БД и сохраняет в кэше для последующих запросов.

3. 𝐖𝐫𝐢𝐭𝐞 𝐓𝐡𝐫𝐨𝐮𝐠𝐡 : Каждая операция записи сначала сохраняется в кэше, а затем немедленно записывается в БД

4. 𝐖𝐫𝐢𝐭𝐞 𝐀𝐫𝐨𝐮𝐧𝐝 : Приложение напрямую пишет в базу данных, минуя кэш. Кэш обновляется только при запросе на чтение.

5. 𝐖𝐫𝐢𝐭𝐞 𝐁𝐚𝐜𝐤 : Данные сначала записываются в кэш, а кэш асинхронно обновляет БД в фоновом режиме

Какую стратегию использовать?
- Если чтения происходят чаще → Read-Through / Cache-Aside
- Если записи должны быть последовательными → Write-Through
- Если надо минимизировать ненужное кэширование → Write-Around
- Если нужна сверхбыстрая запись → Write-Back
👍5🔥1👏1
8 концепций языка Python, которые могут запутать/сбить с толку разработчика #python
👍7🥰1👏1🤮1
Компания Azul опубликовал свой отчет о состоянии Java за 2025 год. Отчет основан на ответах 2039 специалистов Java из компаний всех размеров
Согласно отчету, довольно много респондентов до сих пор используют древние версии Java. Так, Java 8, вышедшая в 2014 году, до сих пор применяется 23%, хотя в прошлом году этот показатель составлял 40%. Наиболее используемой версией является Java 17 LTS (выпущенная в 2021 году), за которой следует Java 21 LTS 2023 года.
Уязвимость Log4Shell в популярной библиотеке журналирования Log4j, обнаруженная в 2021 году, продолжает оставаться проблемой: 49 процентов респондентов заявили, что они по-прежнему сталкиваются с уязвимостями безопасности Log4j.
Spring Boot остается самой популярной средой микросервисов, но не намного. В 2023 году Spring Boot пользовался 61 процентом использования, но в текущем опросе он составил 42%, немного опережая Micronaut с 39%.
https://devclass.com/2025/01/30/state-of-java-report-shows-strong-migration-from-java-8-rise-of-apache-spark/
👍2🔥1👏1
Память, пропускная способность и задержки
👍12🔥2👏2
Теорема CAP базируется на трех понятиях:

Согласованность (Consistency): все клиенты видят одни и те же данные одновременно, независимо от того, к какому узлу они подключаются
Доступность (Availability): любой клиент, запрашивающий данные, получает ответ, даже если некоторые из узлов не работают
Устойчивость к разделению (Partition Tolerance): система продолжает работать, несмотря на разделение связей между узлами

Причем теорема CAP утверждает, что в распределенных системах одновременно могут быть достигнуты только два из этих трех свойств одновременно. Учитывая, что обычно разделение сети неизбежно, часто приходится выбирать между согласованностью и доступностью. Соответствено проектирование системы предполагает балансировку компромиссов.
👍101🔥1
Онлайн-кинотеатр Wink (совместное предприятие «Ростелекома» и НМГ) запустит свой аналог YouTube в 2025 году
Сервис позволит создателям контента монетизировать свои труды. Проект заработает в первом квартале 2025 года.
Для привлечения авторов на новый сервис запущен отдельный лендинг (веб-страница), где блогеры могут оставить заявку и начать переговоры с сервисом, уточнили в Wink: «Он пока не распространяется широко, только по узкому кругу блогеров». Сейчас сервис обсуждает сотрудничество с десятками авторов контента, ожидает подписания контрактов в ближайшее время.
https://www.kommersant.ru/doc/7479310
🤡15🤮32🔥1👏1
Вкратце об основной стратегии масштабирования монолита
😁36🤯3🔥2👏1
This media is not supported in your browser
VIEW IN TELEGRAM
Как сделать подцветку строк в таблице (элементе <table>) с помощью селектора :has() в CSS

td:has(~ td:hover), /* предыдущие сестринские ячейки */
table:has(td:nth-of-type(3):hover) /* стобец */
tr:not(:first-of-type):has(~ tr:hover)
td:nth-of-type(3) {
background: var(--highlighted);
}
🔥27👍7👏2
This media is not supported in your browser
VIEW IN TELEGRAM
Архитектурные паттерны
👍5🔥2🥰1
Российских программистов прекращают нанимать на бессрочный договор. Теперь их просто арендуют на полгода-год или даже меньше
ИТ-специалисты столкнулись в России с новым трендом – компании стали все чаще нанимать их лишь на короткое время, а бессрочный трудовой договор предлагает лишь каждая восьмая компания. Работодатели гораздо охотнее нанимают ИТ-шников на полгода-год.
По итогам 2024 г. примерно каждая восьмая компания (12%) подписывает с ИТ-шником трудовой договор, в котором нет четко указанного срока его действия.
Фирм, принимающих ИТ-работников в штат на полгода-год, оказалось 35%. Год назад их было около 20%.
Российские компании, ищущие в свой штат ИТ-специалиста, в подавляющем своем большинстве даже не смотрят на джунов – работников с базовым или вовсе отсутствующим опытом работы. В 2024 г., как и в 2023 г., таковых насчитывалось лишь около 2%.
Две трети компаний, около 66%, в 2024 г. искали ИТ-специалистов только высокого уровня – лидов, сеньоров или продвинутых мидлов. Годом ранее их было 75%.
В 2024 г. работодатели проявляли гораздо больший интерес к обычным мидлам, нежели в 2023 г. Спрос на специалистов среднего уровня увеличился в 2024 г. до 32% против 23% в 2023 г.
https://www.cnews.ru/news/top/2025-02-06_rossijskih_programmistov
🤡27👍3👏2😁2🔥1
7 Распространенных стратегий очистки кэша

1. 𝐋𝐞𝐚𝐬𝐭 𝐑𝐞𝐜𝐞𝐧𝐭𝐥𝐲 𝐔𝐬𝐞𝐝 ( 𝐋𝐑𝐔 )
- Сначала удаляет элемент, к которому раньше не обращались
- Хорошо работает, когда вероятность повторного использования старых данных мала
- Пример: кэш браузера, кэши в памяти, такие как Redis.

2. 𝐋𝐞𝐚𝐬𝐭 𝐅𝐫𝐞𝐪𝐮𝐞𝐧𝐭𝐥𝐲 𝐔𝐬𝐞𝐝 ( 𝐋𝐅𝐔 )
- Удаляет наименее используемые элементы
- Приоритет сохранения часто используемых элементов в кэше
- Пример: кэши выводов машинного обучения, системы рекомендаций

3. 𝐅𝐢𝐫𝐬𝐭 𝐈𝐧, 𝐅𝐢𝐫𝐬𝐭 𝐎𝐮𝐭 (𝐅𝐈𝐅𝐎)
- Сначала удаляет самый старый сохраненный элемент, независимо от его использования
- Прост в реализации, но может привести к удалению все еще актуальных данных
- Пример: простые системы кэширования на основе очередей.

4. 𝐑𝐚𝐧𝐝𝐨𝐦 𝐑𝐞𝐩𝐥𝐚𝐜𝐞𝐦𝐞𝐧𝐭 (𝐑𝐑)
- Случайным образом удаляет данные, если кэш заполнен
- Низкие накладные расходы, но менее предсказуемая производительность
- Пример: используется в некоторых сетевых маршрутизаторах

5. 𝐌𝐨𝐬𝐭 𝐑𝐞𝐜𝐞𝐧𝐭𝐥𝐲 𝐔𝐬𝐞𝐝 ( 𝐌𝐑𝐔 )
- Противоположность LRU – сначала удаляет последний использованный элемент
- Полезно, когда последние данные быстро устаревают
- Пример: буферы потокового видео, некоторые финансовые приложения

6. 𝐓𝐢𝐦𝐞 𝐭𝐨 𝐋𝐢𝐯𝐞 ( 𝐓𝐓𝐋 )
- Данные удаляются по истечении установленного срока
- Предотвращает устаревание данных, полезно в распределенных системах
- Пример: кэширование DNS, кэширование ответов API

7. 𝐓𝐰𝐨-𝐓𝐢𝐞𝐫𝐞𝐝 𝐂𝐚𝐜𝐡𝐢𝐧𝐠 (Двухуровневый кэш)
- Использует быстрый кэш в памяти (например, Redis) и более медленный постоянный кэш (например, на диске)
- Оптимизирует скорость и хранение за счет балансировки горячих и холодных данных
- Пример: кэширование CDN, гибридные облачные решения для хранения данных
👍7
Кристоф Хелвиг (Christoph Hellwig), мэйнтейнер подсистем DMA, KVM, Slab Allocator и архитектуры PowerPC в ядре Linux, в своё время входивший в управляющий технический комитет организации Linux Foundation, отказался подтверждать пачти, связанные с поддержкой разработки драйверов на языке Rust. Предложенный патчи добавляли обвязки над несколькими функциями подсистемы DMA, позволяющие использовать DMA в драйверах на языке Rust.
Хелвиг предложил напрямую обращаться к исходному Си API DMA в каждом драйвере на языке Rust, чтобы не создавать дополнительных абстракций, от которых вынуждены будут зависеть сопровождающие ядра. Хелвиг также наложил вето на приём связанных с Rust патчей и сравнил патчи на Rust с раковой опухолью.
Суть проблем с сопровождением в том, что Rust-обвязки ставят сопровождающих в зависимость от кода на языке Rust. Соостветственно необходимо синхронизировать все изменения между кодом на Си и на Rust.
Отказ принимать код обвязки над вызовами DMA поставил разработчиков проекта Rust for Linux в тупик, так как без подобных обвязок разработка полноценных драйверов на языке Rust будет затруднена.
https://lore.kernel.org/rust-for-linux/
👍15
This media is not supported in your browser
VIEW IN TELEGRAM
КАк быстро измерить время выполнения функции на языке Python с помощью встроенных средств? Для этого можно использовать встроенную функцию timeit.timeit. Например, измерим время выполнения функции sum:

import timeit

def sum():
result = 0
for i in range(10000):
result +=i
return result

execution_time = timeit.timeit(lambda: sum(), number=100)

print("Время выполнения функции sum:", execution_time)