🙇♂️Коллекция тестовых заданий для самостоятельного выполнения от разных ИТ-компаний, собранная сообществом вместе с командой Хекслет: маст-хэв при подготовке к собесу.
🔗 GitHub
🔗 GitHub
🥳Сегодня четырнадцатый день рождения релиза Go с открытым исходным кодом: за плечами у команды Go и сообщества два полнофункциональных релиза и другие важные фичи
☑️Выпуски Go 1.20 в феврале и Go 1.21 в августе
☑️Завезли profile-guided optimization и встроенное управление тулчейном
☑️Добавлена поддержка сбора профилей покрытия в бинарных сборках, созданных go build
☑️Совместимость еще больше улучшена за счет расширения соглашений об использовании GODEBUG
☑️Новый пакет структурированного логирования и многие другие изменения стандартной библиотеки
👉 Подробнее в статье Расса Кокса
☑️Выпуски Go 1.20 в феврале и Go 1.21 в августе
☑️Завезли profile-guided optimization и встроенное управление тулчейном
☑️Добавлена поддержка сбора профилей покрытия в бинарных сборках, созданных go build
☑️Совместимость еще больше улучшена за счет расширения соглашений об использовании GODEBUG
☑️Новый пакет структурированного логирования и многие другие изменения стандартной библиотеки
👉 Подробнее в статье Расса Кокса
go.dev
Fourteen Years of Go - The Go Programming Language
Happy Birthday, Go!
Гайд по разработке системы уведомлений в реальном времени с помощью Go + Kafka:
• Что такое Kafka?
• Как настроить рабочее пространство проекта?
• Как создать модели пользователя и уведомлений?
• Как настроить Kafka producer?
• Как настроить Kafka consumer?
• Тестирование проекта
👉 Читать
• Что такое Kafka?
• Как настроить рабочее пространство проекта?
• Как создать модели пользователя и уведомлений?
• Как настроить Kafka producer?
• Как настроить Kafka consumer?
• Тестирование проекта
👉 Читать
🔍Статические SQL-запросы часто оказываются недостаточными при необходимости создания условных запросов, а разработка динамических запросов в Go требует глубоких знаний SQL и тонкостей работы с языком.
🤔Проблемы включают предотвращение SQL-инъекций, использование параметризованных запросов, управление сложностью запросов, оптимизацию производительности и поддержание читаемости кода.
📚В статье рассмотрены стратегии и библиотеки, предназначенные для решения этих проблем, и представлена новая библиотека под названием tqla, которая использует пакет text/template для безопасной генерации динамических условных SQL-запросов.
👉 GitHub
🤔Проблемы включают предотвращение SQL-инъекций, использование параметризованных запросов, управление сложностью запросов, оптимизацию производительности и поддержание читаемости кода.
📚В статье рассмотрены стратегии и библиотеки, предназначенные для решения этих проблем, и представлена новая библиотека под названием tqla, которая использует пакет text/template для безопасной генерации динамических условных SQL-запросов.
t, err := tqla.New(tqla.WithPlaceHolder(tqla.Dollar), tqla.WithFuncMap(exampleFuncs))
if err != nil {
return err
}
insertStmt, insertArgs, err:= t.Compile(`{{ $length := sub ( len . ) 1 }}
INSERT INTO 'todos' ('id', 'title', 'description', 'completed', 'created_at')
VALUES {{ range $i, $v := . }}
( {{$v.Id}}, {{$v.Title}}, {{$v.Description}}, {{ $v.Complete }}, {{ $v.CreatedAt }} ){{if lt $i $length}},{{else}};{{end -}}
{{end}}`, todos)
if err != nil {
return err
}
_, err := db.Exec(insertStmt, insertArgs...)
👉 GitHub
Vaunt | Blog
Golang Dynamic SQL Templating
Learn how to build dynamic SQL queries in Golang leveraging a new open-source library called tqla developed by Vaunt.
🔧NilAway — инструмент статического анализа для обнаружения потенциальных nil-паник в коде на Go, который позволяет ловить их во время компиляции, а не во время выполнения.
🤩Команда Uber постаралась, сделав похожий на nilness инструмент с гораздо более сложными и мощными методами статического анализа для отслеживания потоков nil как внутри пакета, так и между пакетами.
Результат👇
🤩Команда Uber постаралась, сделав похожий на nilness инструмент с гораздо более сложными и мощными методами статического анализа для отслеживания потоков nil как внутри пакета, так и между пакетами.
var p *P
if someCondition {
p = &P{}
}
print(p.f)
Результат👇
go.uber.org/example.go:12:9: error: Potential nil panic detected. Observed nil flow from source to dereference point:
-> go.uber.org/example.go:12:9: unassigned variable p accessed field f
GitHub
GitHub - uber-go/nilaway: Static analysis tool to detect potential nil panics in Go code
Static analysis tool to detect potential nil panics in Go code - uber-go/nilaway
Разработка высокопроизводительного синтаксического анализатора JSON: от теории к практике
Создать синтаксический анализатор JSON непросто, а создать быстрый — еще сложнее. В выступлении на GopherCon Signapore 2023 Дэйв Чейни демонстрирует, как написать высокопроизводительный синтаксический анализатор JSON. Ниже — сценарий выступления, превращенный в статью в блоге.
👉 Читать
Создать синтаксический анализатор JSON непросто, а создать быстрый — еще сложнее. В выступлении на GopherCon Signapore 2023 Дэйв Чейни демонстрирует, как написать высокопроизводительный синтаксический анализатор JSON. Ниже — сценарий выступления, превращенный в статью в блоге.
👉 Читать
dave.cheney.net
Building a high performance JSON parser
📊 Егор Толстой и Анна Симонова опросили 500 Go-разработчиков и узнали много интересного: для каких задач используют Go, насколько часто применяют дженерики, какие инструменты в арсенале. А кроме этого, собрали большой список самых полезных книг, курсов, подкастов и Telegram-каналов.
📌Основные тезисы:
◆ Большинство участников опроса оценивают свой уровень как Middle и Senior.
◆ До Middle Go-разработчик обычно растет 1-2 года, а тимлидом может стать уже через 3.
◆ В основном Golang применяется в продуктовой разработке на проектах большого масштаба.
◆ Большинство пришло в Go из других ЯП. Среди неожиданных профессий: кладовщик, нефтяник, врач и музыкант. 17% Go‑разработчиков начали свою карьеру в IT сразу с Golang. Чаще всего в Golang приходят из Python и PHP.
◆ Для большинства опрошенных Go — основной язык программирования.
◆ Почти половина опрошенных в качестве второго регулярно используемого языка выбирают Python. А треть — JavaScript.
◆ Половина опрошенных переписывала сервисы на Go с других языков. В основном с PHP.
◆ Подавляющее большинство опрошенных используют Go для микросервисов.
◆ Основная IDE для работы — GoLand / IntelliJ IDEA.
◆ Больше половины Go-разработчиков работают с macOS.
◆ Абсолютное большинство готово использовать Go не только для работы, но и для написания пет‑проектов.
◆ Вне зависимости от грейда, Go‑разработчики заинтересованы в прокачке знаний по архитектуре и распределенным системам.
◆ Дженерики ждали все, а в итоге регулярно используют только 10% разработчиков.
◆ Каждый пятый Go-разработчик ждет того часа, когда в языке оптимизируют процесс обработки ошибок.
◆ Лишь треть опрошенных пользуется AI‑инструментами на регулярной основе.
◆ Основные источники знаний для большинства Go-разработчиков — это чтение статей и просмотр YouTube.
◆ Каждый шестой Go-разработчик открывал в этом году книги Роберта Мартина.
◆ Треть разработчиков обучались Go не самостоятельно, а на профильных курсах.
◆ 30% Go-разработчиков живут не в России. Больше половины переехали в последние 1,5 года.
◆ Большинство Go-разработчиков не планируют менять место работы.
◆ Самый частый способ выхода из Go — переход в управление разработкой или смена ЯП.
◆ 40% тех, кто хочет сменить язык программирования, в первую очередь смотрят на Rust.
👉 Читать исследование
#аналитика
📌Основные тезисы:
◆ Большинство участников опроса оценивают свой уровень как Middle и Senior.
◆ До Middle Go-разработчик обычно растет 1-2 года, а тимлидом может стать уже через 3.
◆ В основном Golang применяется в продуктовой разработке на проектах большого масштаба.
◆ Большинство пришло в Go из других ЯП. Среди неожиданных профессий: кладовщик, нефтяник, врач и музыкант. 17% Go‑разработчиков начали свою карьеру в IT сразу с Golang. Чаще всего в Golang приходят из Python и PHP.
◆ Для большинства опрошенных Go — основной язык программирования.
◆ Почти половина опрошенных в качестве второго регулярно используемого языка выбирают Python. А треть — JavaScript.
◆ Половина опрошенных переписывала сервисы на Go с других языков. В основном с PHP.
◆ Подавляющее большинство опрошенных используют Go для микросервисов.
◆ Основная IDE для работы — GoLand / IntelliJ IDEA.
◆ Больше половины Go-разработчиков работают с macOS.
◆ Абсолютное большинство готово использовать Go не только для работы, но и для написания пет‑проектов.
◆ Вне зависимости от грейда, Go‑разработчики заинтересованы в прокачке знаний по архитектуре и распределенным системам.
◆ Дженерики ждали все, а в итоге регулярно используют только 10% разработчиков.
◆ Каждый пятый Go-разработчик ждет того часа, когда в языке оптимизируют процесс обработки ошибок.
◆ Лишь треть опрошенных пользуется AI‑инструментами на регулярной основе.
◆ Основные источники знаний для большинства Go-разработчиков — это чтение статей и просмотр YouTube.
◆ Каждый шестой Go-разработчик открывал в этом году книги Роберта Мартина.
◆ Треть разработчиков обучались Go не самостоятельно, а на профильных курсах.
◆ 30% Go-разработчиков живут не в России. Больше половины переехали в последние 1,5 года.
◆ Большинство Go-разработчиков не планируют менять место работы.
◆ Самый частый способ выхода из Go — переход в управление разработкой или смена ЯП.
◆ 40% тех, кто хочет сменить язык программирования, в первую очередь смотрят на Rust.
👉 Читать исследование
#аналитика
Исследование Go-разработчиков 2023
Исследование Go-разработчиков
2023
2023
DevCrowd вместе с Lamoda Tech провели исследование Go-разработчиков 2023
⚒️Как использовать ресурсы Kubernetes по максимуму для работы с Go-приложениями
Антон Жуков, руководитель группы разработки в Сбермаркете, делится опытом работы с Kubernetes.
Вы узнаете о возможных проблемах и решениях, а также о том, как грамотно использовать ресурсы этой платформы, чтобы выжать максимум из Go-приложений.
В конце описан кейс настройки GOMAXPROCS на примере реального приложения, которая привела к повышению производительности на 20-50%.
👉 Читать
Антон Жуков, руководитель группы разработки в Сбермаркете, делится опытом работы с Kubernetes.
Вы узнаете о возможных проблемах и решениях, а также о том, как грамотно использовать ресурсы этой платформы, чтобы выжать максимум из Go-приложений.
В конце описан кейс настройки GOMAXPROCS на примере реального приложения, которая привела к повышению производительности на 20-50%.
👉 Читать
📌Подборка для Go-разработчика:
📺 Как делать микросервисы единообразными, когда их много, а разрабы все разные? / Олег Козырев, Авито
📺 Разработка, основанная на паранойе / Мясников Алексей, Яндекс
📺 Микросервисы в небольшой команде разработки: зачем вам нужен PaaS? / Алексей Коротин, Sports.ru
📺 Обработка ошибок в Go в 2023 / Виталий Попов, InDrive
#чтопроисходит
📺 Как делать микросервисы единообразными, когда их много, а разрабы все разные? / Олег Козырев, Авито
📺 Разработка, основанная на паранойе / Мясников Алексей, Яндекс
📺 Микросервисы в небольшой команде разработки: зачем вам нужен PaaS? / Алексей Коротин, Sports.ru
📺 Обработка ошибок в Go в 2023 / Виталий Попов, InDrive
#чтопроисходит
🤔 Сложно ли поменять стек разработки?
Выйти на тот же уровень производительности в другом стеке в том же направлении (бэкенд/фронтенд) может занять от нескольких месяцев до полугода. Конечно, у каждого это время различается, но в любом случае оно включает:
✔️Изучение нового языка
✔️Ознакомление с экосистемой языка
✔️Понимание инфраструктуры (сборка, доставка и т. д.)
💬 А вы меняли стек? Сколько времени это заняло?
#холивар
Выйти на тот же уровень производительности в другом стеке в том же направлении (бэкенд/фронтенд) может занять от нескольких месяцев до полугода. Конечно, у каждого это время различается, но в любом случае оно включает:
✔️Изучение нового языка
✔️Ознакомление с экосистемой языка
✔️Понимание инфраструктуры (сборка, доставка и т. д.)
💬 А вы меняли стек? Сколько времени это заняло?
#холивар
This media is not supported in your browser
VIEW IN TELEGRAM
🤩Следующее поколение CLI
Charmbracelet, создатели CLI-пакетов для Go, задумали что-то грандиозное. Они собрали 6 миллионов долларов на создание CLI-инструментов «следующего поколения».
Подробности о планах еще впереди, а сейчас можно ознакомиться с пакетами и инструментами, которые Charmbracelet выпустила на данный момент: от Glow, Glamour и LipGloss до SoftServe, Wish и VHS.
👉 Читать
Charmbracelet, создатели CLI-пакетов для Go, задумали что-то грандиозное. Они собрали 6 миллионов долларов на создание CLI-инструментов «следующего поколения».
Подробности о планах еще впереди, а сейчас можно ознакомиться с пакетами и инструментами, которые Charmbracelet выпустила на данный момент: от Glow, Glamour и LipGloss до SoftServe, Wish и VHS.
👉 Читать
💡Различные способы использования go get
🔸Вы, конечно, знаете, как получить последнюю версию модуля:
Либо для конкретного модуля...
...либо для всех зависимостей главного модуля:
🔸Чтобы обновить все зависимости до последних патч-релизов текущей версии, используйте:
🔸Но это еще не все. Например, вы можете обновить или понизить версию модуля до конкретной версии:
🔸Вы не ограничены использованием семантического номера версии. Вы можете использовать
🔸Например, эта команда обновит модуль до последнего коммита в главной ветке модуля:
🔸Вы даже можете удалить зависимость. Эта операция даже понижает версии модулей:
🔸Команда
🔸Начиная с Go 1.21,
🔸Вы, конечно, знаете, как получить последнюю версию модуля:
Либо для конкретного модуля...
$ go get golang.org/x/net
...либо для всех зависимостей главного модуля:
$ go get -u ./...
🔸Чтобы обновить все зависимости до последних патч-релизов текущей версии, используйте:
$ go get -u=patch ./...
🔸Но это еще не все. Например, вы можете обновить или понизить версию модуля до конкретной версии:
$ go get golang.org/x/text@v0.3.2
🔸Вы не ограничены использованием семантического номера версии. Вы можете использовать
@latest
, чтобы обновиться до последней версии, или @patch
, чтобы обновиться до последнего патч-релиза. Или можете указать конкретную ветку VCS. 🔸Например, эта команда обновит модуль до последнего коммита в главной ветке модуля:
$ go get golang.org/x/text@main
🔸Вы даже можете удалить зависимость. Эта операция даже понижает версии модулей:
$ go get golang.org/x/text@none
🔸Команда
go get
может быть применена даже к инструментарию Go. Эта команда обновляет минимально требуемую версию Go для главного модуля (то есть обновляет директиву go в go.mod
) и даже загружает последнюю или указанную версию инструментария, если это необходимо:$ go get go
$ go get go@v1.21.4
🔸Начиная с Go 1.21,
go mod
также может предложить версию инструментария Go для компиляции модуля, используя директиву toolchain
(в отличие от директивы go
, которая устанавливает минимально требуемую версию Go для модуля). Директива go
остается неизменной. Как и в случае с go get
, вы можете использовать @patch
, чтобы обновиться до последнего патч-релиза текущего инструментария Go.$ go get toolchain
$ go get toolchain@v1.21.4
$ go get toolchain@patch
💡Начиная с Go 1.22, функции Delete/DeleteFunc/Compact/CompactFunc/Replace в пакете стандартной библиотеки slices обнуляют освобожденные элементы, чтобы избежать потенциальной утечки памяти.
👉 Речь про этот proposal.
#новости
👉 Речь про этот proposal.
#новости
🧰cpuid — библиотека, которая предоставляет информацию о ЦП без использования CGO: количество физических и логических ядер, семейство ЦП и другие сведения.
☑️На данный момент поддерживает x86/x64 и Arm64. Не использует никакого CGO.
👉 GitHub
☑️На данный момент поддерживает x86/x64 и Arm64. Не использует никакого CGO.
package main
import (
"fmt"
"strings"
. "github.com/klauspost/cpuid/v2"
)
func main() {
// Print basic CPU information:
fmt.Println("Name:", CPU.BrandName)
fmt.Println("PhysicalCores:", CPU.PhysicalCores)
fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore)
fmt.Println("LogicalCores:", CPU.LogicalCores)
fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID)
fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ","))
fmt.Println("Cacheline bytes:", CPU.CacheLine)
fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes")
fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes")
fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes")
fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes")
fmt.Println("Frequency", CPU.Hz, "hz")
// Test if we have these specific features:
if CPU.Supports(SSE, SSE2) {
fmt.Println("We have Streaming SIMD 2 Extensions")
}
}
👉 GitHub
GitHub
GitHub - klauspost/cpuid: CPU feature identification for Go
CPU feature identification for Go. Contribute to klauspost/cpuid development by creating an account on GitHub.
💪 Уровни в айти-индустрии обычно отличаются опытом, знаниями, навыками, ответственностью и зарплатой. Но в одной компании вас могут оценить как сильного мидла, а в другой — как среднего джуна.
💬 Как вы считаете, какими навыками должны обладать джуны, мидлы и сеньоры?
#холивар
💬 Как вы считаете, какими навыками должны обладать джуны, мидлы и сеньоры?
#холивар
🤯Многие распространенные приложения на основе LLM, такие как RAG (Retrival Augmented Generation), имеют некоторые проблемы с пайплайном данных, и Go действительно хорош в этом.
⚒️Реализация RAG на Go очень проста — смотрите пример в блоге Eli Bendersky или на GitHub.
⚒️Реализация RAG на Go очень проста — смотрите пример в блоге Eli Bendersky или на GitHub.
📌По мотивам поста в сабреддите golang:
🔧 Kubernetes: автоматизация развертывания, масштабирования и управления контейнеризированными приложениями
🔧 Terraform: управление внешними ресурсами
🔧Hugo: генерация статических сайтов
🔧 Syncthing: непрерывная синхронизация файлов
🔧 Prometheus: система мониторинга и оповещения о событиях, хранящая данные в виде временных рядов
🔧 RudderStack: сбор данных о клиентах из различных приложений, веб-сайтов и SaaS-платформ
🔧 frp: быстрый реверс-прокси
🔧 fzf: нечеткий поиск в командной строке
🔧 act: локальный запуск GitHub Actions
🔧 Gogs: self-hosted сервис Git
🔧 gitea: легковесная DevOps-платформа
🔧 Minio: высокопроизводительное хранилище объектов для ИИ
🔧 tidb: облачная распределенная БД, совместимая с MySQL
🔧 Photoprism: работа с изображениями на базе ИИ
🔧 Gitpod: быстрая и безопасная облачная разработка
🔧 faas: упрощение serverless функций
🔧 nsq: платформа распределенного обмена сообщениями
💭Есть чем дополнить? Пишите в комментарии👇
🔧 Kubernetes: автоматизация развертывания, масштабирования и управления контейнеризированными приложениями
🔧 Terraform: управление внешними ресурсами
🔧Hugo: генерация статических сайтов
🔧 Syncthing: непрерывная синхронизация файлов
🔧 Prometheus: система мониторинга и оповещения о событиях, хранящая данные в виде временных рядов
🔧 RudderStack: сбор данных о клиентах из различных приложений, веб-сайтов и SaaS-платформ
🔧 frp: быстрый реверс-прокси
🔧 fzf: нечеткий поиск в командной строке
🔧 act: локальный запуск GitHub Actions
🔧 Gogs: self-hosted сервис Git
🔧 gitea: легковесная DevOps-платформа
🔧 Minio: высокопроизводительное хранилище объектов для ИИ
🔧 tidb: облачная распределенная БД, совместимая с MySQL
🔧 Photoprism: работа с изображениями на базе ИИ
🔧 Gitpod: быстрая и безопасная облачная разработка
🔧 faas: упрощение serverless функций
🔧 nsq: платформа распределенного обмена сообщениями
💭Есть чем дополнить? Пишите в комментарии👇
⚙Три паттерна конкурентного кода: гайд для Go-разработчика
Часто для погружения в ту или иную тему необходима мотивация — например, можно в проекте увидеть странное поведение кода, которое вызывает больше вопросов, чем ответов.
Именно так получилось у автора статьи. Он встретил логику ограничения потоков выполнения, основанную на результате выполнения функции
Это подходит под паттерн с параллельными вычислениями на одном процессоре, но использовалось для ограничения количества одновременных запросов к удаленному серверу.
👉 Читать
Часто для погружения в ту или иную тему необходима мотивация — например, можно в проекте увидеть странное поведение кода, которое вызывает больше вопросов, чем ответов.
Именно так получилось у автора статьи. Он встретил логику ограничения потоков выполнения, основанную на результате выполнения функции
GOMAXPROCS(0)
, которая по умолчанию будет равна runtime.NumCPU
. Это подходит под паттерн с параллельными вычислениями на одном процессоре, но использовалось для ограничения количества одновременных запросов к удаленному серверу.
👉 Читать
⚡️Николай Тузов выпустил гайд (видео 3,45 ч. + туториал на Хабре) по разработке полноценного gRPC-сервиса с современной архитектурой.
📌Что внутри:
• Разработка простого, но полноценного gRPC-сервиса
• Разбор базовых принципов работы авторизации
• Настройка автоматического деплоя в прод
• Интеграция с уже готовым сервисом URL Shortener
• Разработка полноценных функциональных тестов и многое другое
📌Что внутри:
• Разработка простого, но полноценного gRPC-сервиса
• Разбор базовых принципов работы авторизации
• Настройка автоматического деплоя в прод
• Интеграция с уже готовым сервисом URL Shortener
• Разработка полноценных функциональных тестов и многое другое
🎥 Теории кэширования по полочкам: запись урока от Владимира Балуна
📌Что внутри:
01:03 — Что такое кэширование
03:18 — Основные термины кэширования
04:55 — Какие данные кэшировать
06:02 — Кэширование ошибок
07:13 — Как предотвратить cache miss attack
10:34 — Эффективность кэширования
12:56 — Внутреннее кэширование
14:41 — Внешнее кэширование
19:23 — Cache Aside
21:32 — Cache Through
23:16 — Cache Ahead
29:33 — Алгоритмы вытеснения данных из кэша
30:01 — Random алгоритм
30:23 — FIFO алгоритм
30:49 — LIFO алгоритм
31:16 — LRU алгоритм
32:06 — MRU алгоритм
32:29 — LFU алгоритм
37:11 — Алгоритм Белади (OPT)
38:13 — Second Chance алгоритм
39:56 — Clock алгоритм
40:40 — 2Q алгоритм
41:42 — SLRU алгоритм
42:49 — TLRU алгоритм
43:17 — LRU-k алгоритм
47:24 — Инвалидация данных в кэше
47:41 — Инвалидация по TTL
48:35 — Jitter
49:40 — Thundering herd problem
51:13 — Инвалидация по событию
52:41 — Версионирование кэша
56:11 — Тегирование кэша
1:03:37 — Многомерный кэш
📌Что внутри:
01:03 — Что такое кэширование
03:18 — Основные термины кэширования
04:55 — Какие данные кэшировать
06:02 — Кэширование ошибок
07:13 — Как предотвратить cache miss attack
10:34 — Эффективность кэширования
12:56 — Внутреннее кэширование
14:41 — Внешнее кэширование
19:23 — Cache Aside
21:32 — Cache Through
23:16 — Cache Ahead
29:33 — Алгоритмы вытеснения данных из кэша
30:01 — Random алгоритм
30:23 — FIFO алгоритм
30:49 — LIFO алгоритм
31:16 — LRU алгоритм
32:06 — MRU алгоритм
32:29 — LFU алгоритм
37:11 — Алгоритм Белади (OPT)
38:13 — Second Chance алгоритм
39:56 — Clock алгоритм
40:40 — 2Q алгоритм
41:42 — SLRU алгоритм
42:49 — TLRU алгоритм
43:17 — LRU-k алгоритм
47:24 — Инвалидация данных в кэше
47:41 — Инвалидация по TTL
48:35 — Jitter
49:40 — Thundering herd problem
51:13 — Инвалидация по событию
52:41 — Версионирование кэша
56:11 — Тегирование кэша
1:03:37 — Многомерный кэш