Динамическое программирование было сложной задачей, пока я не изучил эти 20 паттернов
1. Fibonacci Sequence
2. Kadane's Algorithm
3. 0/1 Knapsack
4. Unbounded Knapsack
5. Longest Common Subsequence (LCS)
6. Longest Increasing Subsequence (LIS)
7. Palindromic Subsequence
8. Edit Distance
9. Subset Sum
10. String Partition
11. Catalan Numbers
12. Matrix Chain Multiplication
13. Count Distinct Ways
14. DP on Grids
15. DP on Trees
16. DP on Graphs
17. Digit DP
18. Bitmasking DP
19. Probability DP
20. State Machine DP
https://blog.algomaster.io/p/20-patterns-to-master-dynamic-programming
1. Fibonacci Sequence
2. Kadane's Algorithm
3. 0/1 Knapsack
4. Unbounded Knapsack
5. Longest Common Subsequence (LCS)
6. Longest Increasing Subsequence (LIS)
7. Palindromic Subsequence
8. Edit Distance
9. Subset Sum
10. String Partition
11. Catalan Numbers
12. Matrix Chain Multiplication
13. Count Distinct Ways
14. DP on Grids
15. DP on Trees
16. DP on Graphs
17. Digit DP
18. Bitmasking DP
19. Probability DP
20. State Machine DP
https://blog.algomaster.io/p/20-patterns-to-master-dynamic-programming
This media is not supported in your browser
VIEW IN TELEGRAM
SQL
С помощью всего нескольких базовых команд можно решить 80% повседневных задач, связанных с данными.
Сосредоточьтесь на понимании
С помощью всего нескольких базовых команд можно решить 80% повседневных задач, связанных с данными.
Сосредоточьтесь на понимании
JOIN, SELECT, UPDATE, DELETE и некоторых других фундаментальных команд.e-maxx_algo.pdf
5.9 MB
Вас приветствует книга, собранная по материалам сайта
В этой книге Вы найдёте описание, реализации и доказательства множества алгоритмов, от известных всем до
тех, которые являются уделом лучших олимпиадников и специалистов по Computer Science. В конце приведены ссылки на тематическую литературу, которую можно скачать с моего сайта, а также немного информации обо мне.
Представлено 145 алгоритмов. Ко всем алгоритмам даны краткие описания и программы на C++.
Алгебра
Графы
Геометрия
Строки
Структуры данных
Алгоритмы на последовательностях
Динамика
Линейная алгебра
Численные методы
Комбинаторика
Теория игр
Расписания
Разное
e-maxx.ru/algo В этой книге Вы найдёте описание, реализации и доказательства множества алгоритмов, от известных всем до
тех, которые являются уделом лучших олимпиадников и специалистов по Computer Science. В конце приведены ссылки на тематическую литературу, которую можно скачать с моего сайта, а также немного информации обо мне.
Представлено 145 алгоритмов. Ко всем алгоритмам даны краткие описания и программы на C++.
Алгебра
Графы
Геометрия
Строки
Структуры данных
Алгоритмы на последовательностях
Динамика
Линейная алгебра
Численные методы
Комбинаторика
Теория игр
Расписания
Разное
🤫 Псс, хочешь знать секреты московской недвижимости?
🔥 Инсайды от экспертов, о которых не пишут в газетах - только в канале "Квадратные инсайды"!
💰 Будь на шаг впереди:
* Узнай, где ждать роста цен
* Получи эксклюзивные предложения
* Не упусти выгодную сделку
👉 Подписывайся и получай преимущество: @kvadrat_insides
🔥 Инсайды от экспертов, о которых не пишут в газетах - только в канале "Квадратные инсайды"!
💰 Будь на шаг впереди:
* Узнай, где ждать роста цен
* Получи эксклюзивные предложения
* Не упусти выгодную сделку
👉 Подписывайся и получай преимущество: @kvadrat_insides
@glyanka_ru 👀 — твой карманный гид по миру умопомрачителных интерьеров. Зависть соседей обеспечена! Подписывайся!
Нас часто просят разрабатывать системы с высокой доступностью, масштабируемостью и пропускной способностью. Что это именно означает?
Выше приведена шпаргалка по проектированию систем с распространенными решениями.
1. Высокая доступность
Это означает необходимость обеспечения высокого уровня времени работы. Обычно мы описываем целевой уровень дизайна как «3 девятки» или «4 девятки». «4 девятки» (99,99% времени работы) означает, что сервис может быть недоступен только 8,64 секунды в день.
Для достижения высокой доступности необходимо спроектировать систему с избыточностью. Существуют несколько способов сделать это:
- Горячий-горячий: два экземпляра получают один и тот же ввод и отправляют вывод в downstream-сервис. Если одна из сторон недоступна, другая сторона может сразу же взять на себя ее функции. Поскольку обе стороны отправляют вывод в downstream, downstream-система должна выполнять дедупликацию.
- Горячий-теплый: два экземпляра получают один и тот же ввод, но только горячая сторона отправляет выв...
Выше приведена шпаргалка по проектированию систем с распространенными решениями.
1. Высокая доступность
Это означает необходимость обеспечения высокого уровня времени работы. Обычно мы описываем целевой уровень дизайна как «3 девятки» или «4 девятки». «4 девятки» (99,99% времени работы) означает, что сервис может быть недоступен только 8,64 секунды в день.
Для достижения высокой доступности необходимо спроектировать систему с избыточностью. Существуют несколько способов сделать это:
- Горячий-горячий: два экземпляра получают один и тот же ввод и отправляют вывод в downstream-сервис. Если одна из сторон недоступна, другая сторона может сразу же взять на себя ее функции. Поскольку обе стороны отправляют вывод в downstream, downstream-система должна выполнять дедупликацию.
- Горячий-теплый: два экземпляра получают один и тот же ввод, но только горячая сторона отправляет выв...
Настраиваем iptables с нуля
Защита сетевых соединений сейчас просто необходима буквально на каждом устройстве, подключенном к Интернет. Тем более, на сервере. Расскажем и покажем конфигурирование штатного сетевого экрана Linux через интерфейс Iptables.
IPTables: NAT и Port forwarding
Продолжаем разговор про основополагающий инструмент управления трафиком, IPTables. Углубимся в реализацию таких технологий, как NAT и port forwarding.
Защита сетевых соединений сейчас просто необходима буквально на каждом устройстве, подключенном к Интернет. Тем более, на сервере. Расскажем и покажем конфигурирование штатного сетевого экрана Linux через интерфейс Iptables.
IPTables: NAT и Port forwarding
Продолжаем разговор про основополагающий инструмент управления трафиком, IPTables. Углубимся в реализацию таких технологий, как NAT и port forwarding.
This media is not supported in your browser
VIEW IN TELEGRAM
Как выполняются SQL-запросы👨💻
Порядок выполнения SQL запроса определяет последовательность выполнения различных частей запроса SQL. Этот порядок важен, потому что он определяет, как данные фильтруются, группируются и упорядочиваются.
Вот упрощенное объяснение порядка выполнения SQL:
• 𝐅𝐑𝐎𝐌/𝐉𝐎𝐈𝐍: Оператор FROM указывает таблицы, из которых будут извлечены данные. Клауза JOIN может использоваться для объединения данных из нескольких таблиц.
• 𝐖𝐇𝐄𝐑𝐄: Оператор WHERE используется для фильтрации данных на основе определенных условий.
• 𝐆𝐑𝐎𝐔𝐏 𝐁𝐘: Оператор GROUP BY используется для группировки данных по одной или нескольким колонкам.
• 𝐇𝐀𝐕𝐈𝐍𝐆: Оператор HAVING используется для фильтрации сгруппированных данных на основе определенных условий.
• 𝐒𝐄𝐋𝐄𝐂𝐓: Оператор SELECT указывает столбцы, которые будут возвращены в наборе результатов.
• 𝐃𝐈𝐒𝐓𝐈𝐍𝐂𝐓: Ключевое слово DISTINCT может использоваться для обеспечения возврата только уникальных строк в наборе результатов.
• 𝐎𝐑𝐃𝐄𝐑 𝐁𝐘: Оператор ORDER BY используется для сортиро...
Порядок выполнения SQL запроса определяет последовательность выполнения различных частей запроса SQL. Этот порядок важен, потому что он определяет, как данные фильтруются, группируются и упорядочиваются.
Вот упрощенное объяснение порядка выполнения SQL:
• 𝐅𝐑𝐎𝐌/𝐉𝐎𝐈𝐍: Оператор FROM указывает таблицы, из которых будут извлечены данные. Клауза JOIN может использоваться для объединения данных из нескольких таблиц.
• 𝐖𝐇𝐄𝐑𝐄: Оператор WHERE используется для фильтрации данных на основе определенных условий.
• 𝐆𝐑𝐎𝐔𝐏 𝐁𝐘: Оператор GROUP BY используется для группировки данных по одной или нескольким колонкам.
• 𝐇𝐀𝐕𝐈𝐍𝐆: Оператор HAVING используется для фильтрации сгруппированных данных на основе определенных условий.
• 𝐒𝐄𝐋𝐄𝐂𝐓: Оператор SELECT указывает столбцы, которые будут возвращены в наборе результатов.
• 𝐃𝐈𝐒𝐓𝐈𝐍𝐂𝐓: Ключевое слово DISTINCT может использоваться для обеспечения возврата только уникальных строк в наборе результатов.
• 𝐎𝐑𝐃𝐄𝐑 𝐁𝐘: Оператор ORDER BY используется для сортиро...
Проблема омографов в ударениях и как я ее решал
Это история о том, почему в опенсурсе нет TTS с нормальными ударениями, и как я пытался это исправить.
Обзор проблемы
Одной из немаловажных задач в синтезе речи является подготовка текста, а именно расстановка ударений в словах. Если по ударениям в обычных словах все более менее понятно (можно решать с помощью словарей), то с некоторыми "особенными" словами все немного сложнее. Эти особенные слова - омографы (за́мок/замо́к, ду́хи/духи́), а также ё-омографы (не́бо/нё́бо, все/всё́, пе́ред/перё́д, бе́рег/берё́г). Буква Ё часто используется в речи, но всё реже в текстах, потому найти качественные данные становится непростой задачей.
Ранее на хабре уже была статья с обзором этой темы, были озвучены ключевые проблемы, но готовых решений представлено не было, поэтому я решил поделиться своим.
С этого и начинается история длиною в 2 месяца о том, как я пытался решать данную задачу.
https://habr.com/ru/articles/767560/
Это история о том, почему в опенсурсе нет TTS с нормальными ударениями, и как я пытался это исправить.
Обзор проблемы
Одной из немаловажных задач в синтезе речи является подготовка текста, а именно расстановка ударений в словах. Если по ударениям в обычных словах все более менее понятно (можно решать с помощью словарей), то с некоторыми "особенными" словами все немного сложнее. Эти особенные слова - омографы (за́мок/замо́к, ду́хи/духи́), а также ё-омографы (не́бо/нё́бо, все/всё́, пе́ред/перё́д, бе́рег/берё́г). Буква Ё часто используется в речи, но всё реже в текстах, потому найти качественные данные становится непростой задачей.
Ранее на хабре уже была статья с обзором этой темы, были озвучены ключевые проблемы, но готовых решений представлено не было, поэтому я решил поделиться своим.
С этого и начинается история длиною в 2 месяца о том, как я пытался решать данную задачу.
https://habr.com/ru/articles/767560/
Ему не место на помойке: хакаем 15-летний электронный переводчик и пишем под него приложения
Дисклеймер: Статья очень подробная и во всех красках "простым языком" описывает процесс хакинга и программирования под такой необычный девайс. Так что даже если вас не интересуют электронные переводчики и минипк, статья может оказаться для вас занимательной!
Я всегда любил находить новые применения стареньким девайсам, даже если обход защиты и разработка для них чего-то полезного занимала у меня некоторое время. И если с прошлыми моими статьями, где я привносил новую жизнь смартфонам на Android 2.3, а затем и на Android 1.5, всё понятно - девайсы получили возможность не только быть звонилками, но и вполне полноценными смартфонами, то в случае таких необычных девайсов, как электронные переводчики - всё гораздо интереснее, ведь по сути, это дешёвые альтернативы таким легендарным устройствам, как HP Jornada! Недавно я купил переводчик Ectaco за 1.500 рублей на Windows CE, обошел встроенную оболочку, написал программ...
Дисклеймер: Статья очень подробная и во всех красках "простым языком" описывает процесс хакинга и программирования под такой необычный девайс. Так что даже если вас не интересуют электронные переводчики и минипк, статья может оказаться для вас занимательной!
Я всегда любил находить новые применения стареньким девайсам, даже если обход защиты и разработка для них чего-то полезного занимала у меня некоторое время. И если с прошлыми моими статьями, где я привносил новую жизнь смартфонам на Android 2.3, а затем и на Android 1.5, всё понятно - девайсы получили возможность не только быть звонилками, но и вполне полноценными смартфонами, то в случае таких необычных девайсов, как электронные переводчики - всё гораздо интереснее, ведь по сути, это дешёвые альтернативы таким легендарным устройствам, как HP Jornada! Недавно я купил переводчик Ectaco за 1.500 рублей на Windows CE, обошел встроенную оболочку, написал программ...
Media is too big
VIEW IN TELEGRAM
Реальное Собеседование на Junior Backend разработчика
0:00 - Какие вопросы задавали
1:58 - Как работает Интернет
4:10 - Как браузер формирует запрос
5:05 - Как передать файл
5:55 - Как безопасно передать банковскую транзакцию
7:14 - Что возвращает сервер
9:46 - Вопрос про авторизацию со звездочкой*
11:06 - Зачем нужна пара access и refresh токены
12:55 - JWT или сессии — что лучше?
14:11 - Проектирование авторизации (практический пример)
16:20 - Как улучшить Dockerfile
19:50 - Какую зарплату мне предложили
источник
0:00 - Какие вопросы задавали
1:58 - Как работает Интернет
4:10 - Как браузер формирует запрос
5:05 - Как передать файл
5:55 - Как безопасно передать банковскую транзакцию
7:14 - Что возвращает сервер
9:46 - Вопрос про авторизацию со звездочкой*
11:06 - Зачем нужна пара access и refresh токены
12:55 - JWT или сессии — что лучше?
14:11 - Проектирование авторизации (практический пример)
16:20 - Как улучшить Dockerfile
19:50 - Какую зарплату мне предложили
источник
Логирование, трассировка и метрики — это три столпа наблюдаемости системы.
На диаграмме выше представлены их определения и типичные архитектуры.
🔹 Логирование
Логирование записывает дискретные события в системе. Например, можно зафиксировать входящий запрос или обращение к базе данных как события. Логирование имеет наибольший объем данных. Стек ELK (Elastic-Logstash-Kibana) часто используется для построения платформы анализа логов. Обычно мы определяем стандартизированный формат логирования для различных команд, чтобы можно было использовать ключевые слова при поиске среди большого количества логов.
🔹 Трассировка
Трассировка обычно ориентирована на запросы. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных, что может быть визуализировано в системах трассировки. Это полезно при попытках выявить узкие места в системе. Мы используем OpenTelemetry для демонстрации типичной архитектуры, объединяющей три столпа в единую структуру.
🔹 Метри...
На диаграмме выше представлены их определения и типичные архитектуры.
🔹 Логирование
Логирование записывает дискретные события в системе. Например, можно зафиксировать входящий запрос или обращение к базе данных как события. Логирование имеет наибольший объем данных. Стек ELK (Elastic-Logstash-Kibana) часто используется для построения платформы анализа логов. Обычно мы определяем стандартизированный формат логирования для различных команд, чтобы можно было использовать ключевые слова при поиске среди большого количества логов.
🔹 Трассировка
Трассировка обычно ориентирована на запросы. Например, пользовательский запрос проходит через API-шлюз, балансировщик нагрузки, сервис A, сервис B и базу данных, что может быть визуализировано в системах трассировки. Это полезно при попытках выявить узкие места в системе. Мы используем OpenTelemetry для демонстрации типичной архитектуры, объединяющей три столпа в единую структуру.
🔹 Метри...
Зачем в iPhone чип, который убивает FaceID
Начнём с начала: как система FaceID выглядит, и как она работает:
Аппаратно эта система состоит из пары камер - ИК и RGB, и двух видов ИК-излучателей - обычной подсветки, и специализированного прожектора точек.
Снимаем с iPhone X шкурку, убираем всё лишнее, и видим блок фронтальных камер в голом виде. ИК подсветка существует отдельно, но все остальные компоненты у нас в руках — они надёжно закреплены в этой металлической рамке.
Тут мы видим ИК камеру и прожектор ИК точек. Именно на этой инфракрасной парочке держится работа систем TrueDepth и FaceID. И главный герой сегодняшнего
https://habr.com/ru/articles/841708/
Начнём с начала: как система FaceID выглядит, и как она работает:
Аппаратно эта система состоит из пары камер - ИК и RGB, и двух видов ИК-излучателей - обычной подсветки, и специализированного прожектора точек.
Снимаем с iPhone X шкурку, убираем всё лишнее, и видим блок фронтальных камер в голом виде. ИК подсветка существует отдельно, но все остальные компоненты у нас в руках — они надёжно закреплены в этой металлической рамке.
Тут мы видим ИК камеру и прожектор ИК точек. Именно на этой инфракрасной парочке держится работа систем TrueDepth и FaceID. И главный герой сегодняшнего
https://habr.com/ru/articles/841708/
Кривые Безье
Кривые Безье были постоянной темой в моей карьере фронтенд-инженера. Я широко использовал их в своей работе - в анимации и SVG-путях иллюстраций и иконок. Однако только недавно я заинтересовался пониманием логики, лежащей в основе их поведения. Эта статья раскрыла для меня тайны, связанные с использованием команд кривых путей, и дала мне более глубокое понимание веб-анимации. В этой статье я поделюсь своими интересными открытиями в области кривых Безье.
В CSS-анимации функции смягчения задают скорость изменения свойства с течением времени. Существует 3 типа функций смягчения - линейная, ступенчатая и кубическая кривая Безье.
https://blog.richardekwonye.com/bezier-curves
Кривые Безье были постоянной темой в моей карьере фронтенд-инженера. Я широко использовал их в своей работе - в анимации и SVG-путях иллюстраций и иконок. Однако только недавно я заинтересовался пониманием логики, лежащей в основе их поведения. Эта статья раскрыла для меня тайны, связанные с использованием команд кривых путей, и дала мне более глубокое понимание веб-анимации. В этой статье я поделюсь своими интересными открытиями в области кривых Безье.
В CSS-анимации функции смягчения задают скорость изменения свойства с течением времени. Существует 3 типа функций смягчения - линейная, ступенчатая и кубическая кривая Безье.
https://blog.richardekwonye.com/bezier-curves
Как компании доставляют код в продакшн?
Ниже описан типичный процесс доставки программного обеспечения. В разных компаниях используются разнообразные инструменты и среды, поэтому это один из вариантов рабочего процесса, который демонстрирует некоторые общие практики. Подробности могут отличаться в зависимости от организации. Учитывая это, общие шаги выглядят следующим образом:
Шаг 1: Владелец продукта создает требования и пользовательские истории.
Шаг 2: Команда разработчиков определяет приоритеты для историй и организует спринты.
Шаг 3: Разработчики коммитят код в систему контроля версий.
Шаг 4: Сервер автоматизации собирает код и запускает тесты. Проводятся проверки покрытия кода и качества.
Шаг 5: Если сборка успешна, артефакты сохраняются в репозитории артефактов. Сборка затем разворачивается в среде разработчиков.
Шаг 6: Функции тестируются независимо в нескольких изолированных средах.
Шаг 7: Команда QA тестирует функции в средах для контроля качества. Проводятся различные виды тестирования.
...
Ниже описан типичный процесс доставки программного обеспечения. В разных компаниях используются разнообразные инструменты и среды, поэтому это один из вариантов рабочего процесса, который демонстрирует некоторые общие практики. Подробности могут отличаться в зависимости от организации. Учитывая это, общие шаги выглядят следующим образом:
Шаг 1: Владелец продукта создает требования и пользовательские истории.
Шаг 2: Команда разработчиков определяет приоритеты для историй и организует спринты.
Шаг 3: Разработчики коммитят код в систему контроля версий.
Шаг 4: Сервер автоматизации собирает код и запускает тесты. Проводятся проверки покрытия кода и качества.
Шаг 5: Если сборка успешна, артефакты сохраняются в репозитории артефактов. Сборка затем разворачивается в среде разработчиков.
Шаг 6: Функции тестируются независимо в нескольких изолированных средах.
Шаг 7: Команда QA тестирует функции в средах для контроля качества. Проводятся различные виды тестирования.
...
Как поделить не деля или оптимизация деления компиляторам(и)
Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следующий snippet:
https://habr.com/ru/articles/833470/
Если вы никогда не пробовали смотреть как код на C++ разворачивается компилятором в код Assembly – вас ждёт много сюрпризов, причём, не нужно смотреть какой-то замудренный исходный код полный templates или других сложных конструкций: рассмотрите следующий snippet:
uint8_t div10(uint8_t x)
{
return x/10;
}
https://habr.com/ru/articles/833470/
Микросервисы для тех, кто прикидывается разработчиком. Часть 1
«Скажите, какие основные преимущества микросервисов и почему?». Вероятно, это самый популярный вопрос последних 6–10 лет на любом собеседовании для бэкенд разработчика. Каким‑то чудом он даже обогнал: «Назовите три принципа ООП» и «Чем отличается класс от объекта?»
https://habr.com/ru/articles/833544/
«Скажите, какие основные преимущества микросервисов и почему?». Вероятно, это самый популярный вопрос последних 6–10 лет на любом собеседовании для бэкенд разработчика. Каким‑то чудом он даже обогнал: «Назовите три принципа ООП» и «Чем отличается класс от объекта?»
https://habr.com/ru/articles/833544/
Media is too big
VIEW IN TELEGRAM
Пытаюсь пройти System Design интервью / Такое спрашивают в MAANG? / Mock собеседование
❗️ВАЖНО! Данное собеседование является тестовым (mock) и несет в себе образовательную цель.
00:00 - НАЧАЛО
01:30 - условие задачи
02:26 - начинаю решать
47:40 - понял, что упустил из вида
53:40 - рисую диаграмму
01:25:11 - ФИДБЕК Марка
источник
❗️ВАЖНО! Данное собеседование является тестовым (mock) и несет в себе образовательную цель.
00:00 - НАЧАЛО
01:30 - условие задачи
02:26 - начинаю решать
47:40 - понял, что упустил из вида
53:40 - рисую диаграмму
01:25:11 - ФИДБЕК Марка
источник