METANIT.COM – Telegram
METANIT.COM
6K subscribers
1.71K photos
81 videos
9 files
1.09K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
Вкратце об основной стратегии масштабирования монолита
😁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)
Зарплатные предложения для IT-специалистов выросли на 16% за год
Средний уровень предлагаемых зарплат для IT-специалистов в России вырос в 2024 году по сравнению с предыдущим годом на 16%, до 88,6 тыс. рублей. Об этом свидетельствуют результаты исследования платформы онлайн-рекрутинга hh.ru.
По данным платформы, самые высокие зарплаты предлагали следующим специалистам: DevOps-инженер - 247,9 тыс. рублей в среднем, руководитель группы разработки - 237,5 тыс. рублей, дата-сайентист - 234,7 тыс. рублей, системный аналитик - 178,3 тыс. рублей, директор по информационным технологиям (CIO) - 165,1 тыс. рублей.
https://tass.ru/ekonomika/23081179
😁6👎1
Шпаргалка по ключевым аспектам кэширования
🤨3🔥1🥰1👏1
Шпаргалка по регулярным выражениям
🔥101👏1
.NET 10, который должен выйти в ноябре 2025, обещает значительные улучшения в JIT-компиляторе, сокращая накладные расходы на абстракцию и повышая производительность. Улучшенное распределение стека, лучшая обработка массивов и оптимизированное встраивание — вот лишь несколько основных моментов
https://github.com/dotnet/runtime/issues/108913
🔥29
Принципы построения отказоустойчивых систем
8
Уровень безработицы в американском IT-секторе с декабря 2024 года вырос с 3,9 до 5,7%, сообщает WSJ. В абсолютных цифрах это означает, что на данный момент в активном поиске нового рабочего места находится 152 000 специалистов различных профилей, хотя еще два месяца назад эта цифра составляла 98 000.
При этом уровень безработицы в IT впервые за долгое время превышает общенациональный показатель, который на текущий момент равен 4%.
Одной из основных причин роста безработицы в секторе называют повышение уровня автоматизации в IT-компаниях и как следствие — сокращение штата.
Среди причин - отголоски сокращений раздутых на фоне ковида штатов. Также происходят активные сокращения удаленных сотрудников по причине частичного или полного возврата команд в физические офисы и те специалисты, которые несколько лет назад поверили в новую реальность рынка труда IT и выехали из региона физической локации компании, на текущий момент оказались в откровенно уязвимом положении.
Другой ключевой причиной роста безработицы в секторе называют повышение уровня автоматизации в IT-компаниях и как следствие — сокращение штата. Основная цель руководителей компаний и подразделений — сокращение расходов, а замена части сотрудников и передача их функций современным нейросетям — наиболее очевидный путь. Наибольший удар, как не удивительно, получили вакансии не офис-менеджеров или других управленцев, которые обычно попадают под сокращение в первую очередь, едва работодатель начинает задумываться об оптимизации и сокращении расходов, а вакансии разработчиков ПО.
https://www.wsj.com/articles/it-unemployment-rises-to-5-7-as-ai-hits-tech-jobs-7726bb1b
😢72🤔2🤬2👌1
Об индексах базы данных

Индекс — это пара ключ-значение, где ключ используется для поиска данных вместо соответствующих индексированных столбцов, а значение — это указатель на соответствующие строки в таблице. Большинству баз данных требуется та или иная форма индексации для производительности. Чтобы максимально эффективно использовать БД, следует использовать тип индекса, соответствующий данной задаче.

1) B-дерево (b-tree index) — одна из наиболее часто используемых структур индексации, в которой ключи иерархически сортируются. При поиске данных дерево просматривается до листового узла, который содержит соответствующий ключ и указатель на соответствующие строки в таблице. B-дерево чаще всего используется из-за его эффективности в хранении и поиске по упорядоченным данным. Их сбалансированная структура означает, что ко всем ключам можно получить доступ за одинаковое количество шагов, что обеспечивает постоянную производительность.

2) Хэш-индексы (hash index) лучше всего использовать при поиске точных совпадений. Ключевым компонентом хэш-индекса является хэш-функция. При поиске определенного значения искомое значение передается в хэш-функцию, которая возвращает хэш-значение. Это хэш-значение сообщает БД, где в хэш-таблице находятся ключ и указатели.

3) Индексы битовой карты (bitmap index) используется для столбцов с несколькими уникальными значениями. Каждая битовая карта представляет уникальное значение. Битовая карта указывает на наличие или отсутствие значения в наборе данных с помощью 1 и 0. Для существующих значений позиция 1 в битовой карте показывает местоположение строки в таблице. Индексы битовой карты очень эффективны при обработке сложных запросов, где используется несколько столбцов.

При индексировании таблицы рекомендуется тщательно выбирать столбцы для индексации на основе наиболее часто используемых столбцов в предложениях WHERE.
Составной индекс может использоваться, когда несколько столбцов часто используются вместе в предложении WHERE. С составным индексом комбинация двух или более столбцов используется для создания конкатенированного ключа. Затем ключи сохраняются на основе стратегии индекса, например, опций, упомянутых выше.
👍16🔥1👏1
4 способа обновления данных в веб-приложении на стороне клиента в реалньом режиме времени: коротки и долгий опрос, SSE и веб-сокеты
👍8🔥2👏1
Механизмы аутентификации

[1.] 𝐀𝐏𝐈 𝐊𝐞𝐲
◾️ Простые уникальные идентификаторы, присваиваемые каждому клиенту или услуге.
◾️ Отправляется как заголовок или параметр запроса с каждым запросом.
◾️ Лучше всего подходит для внутренних служб, менее конфиденциальных API или для предоставления доступа к определенным функциям.
◾️ Простота внедрения и управления.
◾️ Не так безопасно, как методы на основе токенов. Подвержены утечке и краже

[2.] 𝐁𝐚𝐬𝐢𝐜 𝐀𝐮𝐭𝐡𝐞𝐧𝐭𝐢𝐜𝐚𝐭𝐢𝐨𝐧
◾️ Имя пользователя и пароль отправляются в заголовке Authorization в виде строки в кодировке base64.
◾️ Простота в реализации, но для обеспечения безопасности требуется HTTPS.
◾️ Подходит для простых сценариев с низкими требованиями к безопасности.
◾️ Широко распространена и проста для понимания
◾️ Уязвимв к атакам типа «человек посередине», если не используется HTTPS.
◾️ Пароли отправляются открытым текстом (даже в закодированном виде).

[3.] 𝐉𝐒𝐎𝐍 𝐖𝐞𝐛 𝐓𝐨𝐤𝐞𝐧𝐬 ( 𝐉𝐖𝐓 )
◾️ Автономные токены, которые в виде JSON содержат информацию о пользователе и его атрибуты
◾️ Выдается сервером аутентификации после успешного входа в систему, затем отправляется клиентом в заголовке Authorization
◾️ Широко используется для аутентификации без сохранения состояния в микросервисах, едином входе (SSO) и авторизации
◾️ Не хранит состояние, безопасный, компактный и может содержать дополнительные атрибуты
◾️ Требуется надлежащее управление ключами для подписи и проверки

[4.] 𝐎𝐀𝐮𝐭𝐡 2.0
◾️ Система, позволяющая сторонним приложениям получать ограниченный доступ к ресурсам от имени владельца ресурса (пользователя) без предоставления учетных данных
◾️ Использует различные типы верификации (код авторизации, учетные данные клиента и т. д.) для получения токенов доступа и токенов обновления
◾️ Широко используется для авторизации пользователей и делегированного доступа к API
◾️ Предоставляет стандартизированный способ безопасного доступа к ресурсам без предоставления учетных данных.
◾️ Может быть сложным в реализации и требует тщательного рассмотрения уязвимостей безопасности

[5.] 𝐎𝐩𝐞𝐧𝐈𝐃 𝐂𝐨𝐧𝐧𝐞𝐜𝐭 (𝐎𝐈𝐃𝐂)
◾️ Уровень идентификации поверх OAuth 2.0, который обеспечивает аутентификацию пользователя и предоставляет информацию о профиле
◾️ Использует идентификационный токен вместе с токеном доступа для предоставления идентификационной информации пользователя
◾️ Используется для аутентификации совместно с OAuth 2.0 для авторизации
◾️ Упрощает аутентификацию, стандартизируя способ получения информации о пользователе
◾️ Требуется интеграция с поставщиком OIDC (например, Google, Okta)

[6.] 𝐌𝐮𝐭𝐮𝐚𝐥 𝐓𝐋𝐒 (𝐦𝐓𝐋𝐒)
◾️ Клиент и сервер аутентифицируют друг друга с помощью сертификатов X.509
◾️ Для выдачи и управления сертификатами требуется центр сертификации (CA)
◾️ Лучше всего подходит для защиты связи между внутренними службами или высокочувствительными API
◾️ Надежная защита благодаря взаимной аутентификации и шифрованию.
◾️ Более сложен в настройке и управлении по сравнению с другими механизмами.
🔥11👍51👏1
This media is not supported in your browser
VIEW IN TELEGRAM
уровни сетевой модели OSI и соответствующие им кибератаки
🔥10💊52
Шпаргалка по операторам в языке Python #python
🥱11👍3
Основные принципы объектно-ориентированного программирования
👍11❤‍🔥2👏1
Вышла новоая версия языка Go - Go 1.24.
https://go.dev/doc/go1.24
Основные изменения в новой версии:

Go 1.24 теперь полностью поддерживает псевдонимы обобщённых типов (generic type alias) — псевдоним типа может быть параметризирован, как и впервые определяемый тип (при определении псевдонима типа теперь допускается указание параметров типа);

Оптимизация среды выполнения снизила нагрузку на процессор на 2–3%. Оптимизации включают новую реализаций операций со словарями на основе хэш‑таблиц Swiss Table, более эффективное распределение памяти для небольших объектов и новую реализацию внутреннего мьютекса во время выполнения

Команда go теперь предоставляет механизм отслеживания зависимостей инструментов для модуля. Определение утилит в файле go.mod производится через директиву tool, для добавления которой в текущий модуль предложена команда go get ‑tool (например, go get ‑tool golang.org/x/tools/cmd/stringer). Для запуска утилиты, указанной в директиве tool, добавлена команда «go tool имя_утилиты».

В команды go build и go install добавлена опция ‑json для вывода в формате JSON

Добавлена переменная окружения GOAUTH для задания параметров аутентификации, необходимых для извлечения модулей, доступ к которым ограничен.

В команде go vet реализован новый анализатор тестов (test analyzer), выявляющий типовые ошибки при включении тестов, fuzzing‑инструментов, утилит проверки производительности и примеров приложений;

В стандартную библиотеку добавлены реализации криптоалгоритмов из стандарта FIPS 140–3. Помимо FIPS 140, несколько пакетов, которые ранее были в модуле x/crypto, теперь доступны в стандартной библиотеке.

В пакет testing добавлен метод B.Loop для выполнения тестов производительности. Применение for b.Loop() {... } вместо обычных циклов позволяет исключить выполнение компилятором полной оптимизации тела цикла и вынести из цикла стадии настройки и очистки теста

Добавлен тип os.Root, позволяющий изолировать операции с файловой системой заданным каталогом.

В среду выполнения добавлен новый механизм финализации runtime.AddCleanup, более гибкий и эффективный, чем runtime.SetFinalizer.

Добавлен пакет weak c реализацией слабых указателей, которые не владеют объектом, не увеличивают счётчик ссылок и не препятствуют освобождению объекта

Добавлены пакеты crypto/mlkem с реализацией криптоалгортимов ML‑KEM-768 и ML‑KEM-1024 (Kyber), стойких для подбора на квантовом компьютере; crypto/hkdf c реализацией функции формирования ключа на базе HMAC (RFC 5869); crypto/pbkdf2 c реализацией функции формирования ключа на базе пароля (PBKDF2, RFC 8018); crypto/sha3 c реализацией хэшей SHA-3;

Добавлен экспериментальный пакет testing/synctest с функциями для тестирования многопоточности;

Улучшена поддержка WebAssembly. Добавлена возможность сборки Go‑приложений в форме библиотеки или обработчика WASI (WebAssembly System Interface). Реализована директива go:wasmexport для экспорта функций для использования в WebAssembly;

В утилиту objdump добавлена поддержка дизассемблирования для архитектур LoongArch (GOARCH=loong64), RISC‑V (GOARCH=riscv64) и S390X (GOARCH=s390x).
7🔥2👍1🥰1