Как стать автором
Обновить
-4
0.5

Пользователь

Отправить сообщение

Почему важно оптимизировать формат данных

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров8.6K
image

Если вам нужно повысить скорость вашей программы, то первым делом логично будет вспомнить курс по структурам данных и оптимизировать алгоритмическую сложность.

Алгоритмы — важнейшая часть программы: замена «горячего» алгоритма O(n) менее сложным, например, O(log n), обеспечивает практически произвольное увеличение производительности. Однако существенно влияет на производительность и структурированность данных: программы выполняются на физических машинах с физическими свойствами, например, разными задержками чтения/записи данных в кэши, на диски или в ОЗУ. После оптимизации алгоритмов стоит изучить эти свойства, чтобы достичь наибольшей производительности. Оптимизированный формат данных учитывает используемые алгоритмы и паттерны доступа при выборе того, как сохранять структуру данных на физическом носителе. Благодаря этому можно увеличить скорость алгоритмов в несколько раз. В этом посте мы покажем пример, в котором нам удалось достичь четырёхкратного повышения скорости чтения простым изменением формата данных в соответствии с паттерном доступа.

Сравнение хранилищ данных AoS и SoA


Современное оборудование, и, в частности CPU, спроектировано так, чтобы обрабатывать данные определённым образом. Расположение данных в памяти влияет на то, насколько эффективно программа сможет использовать кэш CPU, как часто она сталкивается с промахами кэша и насколько оптимально она сможет задействовать векторные команды (SIMD). Даже при использовании оптимальных алгоритмов выбор неподходящего формата данных может приводить к частым перезагрузкам кэша, простаивающим конвейерам и чрезвычайно большому объёму передач содержимого памяти; всё это снижает производительность.
Читать дальше →
Всего голосов 31: ↑31 и ↓0+44
Комментарии2

Удивительная недоказанная математическая гипотеза об одиноком бегуне

Время на прочтение5 мин
Количество просмотров58K

Математики — удивительные люди. Они обожают неразрешимые проблемы и недоказуемые гипотезы. Их хлебом не корми, дай только придумать какую-нибудь заковыристую задачу и дать ей какое-нибудь удивительное название. И ладно бы, если эти задачи были просто абстрактными упражнениям для ума. Но ведь как-то так получается, что многие из них имеют принципиальное значение для развития науки. Как заклинившая гайка — пока не открутишь, дальше не попадёшь.

Вот и гипотеза об одиноком бегуне оказалась одной из таких задач...

Читать далее
Всего голосов 86: ↑77 и ↓9+89
Комментарии91

Кто придумал школы

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров1.8K

Школы были очень давно, но кто создал школы такие, какие мы их знаем. С классами и каникулами, школьным спортом и наглядными пособиями. Привлечением юных талантов и бесплатным образованием. Всё это придумали в шестнадцатом веке. А как и кто, читайте в статье.

Читать далее
Всего голосов 15: ↑13 и ↓2+19
Комментарии37

Транзакции в БД на Go с использованием многослойной архитектуры

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров5.8K

Когда я присоединяюсь к новой компании, меня часто посещает синдром самозванца. После всех этих собеседований кажется, что парни знают, что делают и я смиренно настравиаюсь учиться у лучших.

Однажды, я столкнулся с инцидентом на проде и обратился за помощью к самому опытному инженеру. Он пришел на помощь и с легкостью изменил значение в БД с помощью... ручного обновления. 🤯 Проблема заключалась в том, что набор SQL-обновлений не был выполнен внутри транзакции.

Работа в новой компании — это всегда увлекательно. Я осознал, что даже если какой-то аспект кажется простым, например, SQL-транзакции, его легко упустить из виду.

SQL кажется чем-то, что мы все хорошо знаем, и мало чем может удивить. (Ему уже 50 лет!) Возможно, пришло время пересмотреть подходы, так как мы уже прошли фазу хайпа по поводу NoSQL, и снова возвращаемся к “используйте просто Postgres”, а иногда и к “SQLite тут за глаза”.

Я хочу сосредоточиться на том, как правильно применять транзакции в коде, а не на их технической сложности. Когда ваш проект становится больше, вы начинаете разделять логику и код базы данных с помощью слоев. Однако это не всегда так просто, как кажется. Вы можете запутаться и столкнуться с неочевидными ошибками.

Основной принцип многослойной архитектуры заключается в разделении критически важных частей кода (логики) от деталей реализации (например, SQL-запросов). Одним из способов достижения такого разделения является паттерн «Репозиторий». Однако, наиболее сложным аспектом такой архитектуры является обработка транзакций.

Читать далее
Всего голосов 14: ↑13 и ↓1+15
Комментарии9

Реализация Bloom-фильтров в Golang

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.1K

Компактные структуры данных – это эффективные решения для обработки больших объемов данных с минимальным использованием памяти. Они позволяют выполнять такие задачи, как фильтрация, поиск и хранение, с меньшими затратами ресурсов, что особенно полезно в Golang, т. к. частенько на нем реализуют именно высоконагруженные системы с ограниченной памятью.

В этой статье мы рассмотрим популярную структуру данных: Bloom-фильтры, они помогут минимизировать использование памяти и ускорить выполнение задач.

Читать далее
Всего голосов 12: ↑11 и ↓1+17
Комментарии3

Транзакции PostgreSQL, Требования ACID, примеры. Подготовка к собеседованию, изучение

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров13K

Приветствую тебя читатель, я решил написать про ACID и Транзакции PostgreSQL своим языком, с понятными примерами, эта статья ориентирована на людей готовящихся к собеседованию, кто захотел узнать нюансы транзакций в PostgreSQL или про ACID, а также для людей которые знают теорию, но сами ещё ни разу не писали транзакции. Я не ставил перед собой цели рассмотреть и объяснить работу транзакций на очень глубоком уровне. Была цель привести понятные примеры, дать макет работы с транзакциями, а также пощупать основные возможные проблемы при работе с транзакциями в PostgreSQL.

Читать далее
Всего голосов 8: ↑6 и ↓2+6
Комментарии9

Разный подход к CI/CD: опыт Amazon и Google

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров5.3K


Несколько лет я был техническим лидером инфраструктуры для интеграционного тестирования на уровне компании в Amazon и в Google. Могу сказать, что подходы этих двух компаний к CI/CD значительно различаются.

В Amazon я проработал 11 лет (с 2009 по 2020 год). Я работал главным инженером в команде Developer Tools, которая управляла всей инфраструктурой и инструментами для CI/CD по всей компании. Мы обслуживали программное обеспечение, которое десятки тысяч сотрудников Amazon каждый день использовали для написания, проверки, сборки, тестирования и развёртывания кода.

В 2020 году я всё-таки решился на большие изменения и присоединился к Google, где провёл 4 года в качестве технического руководителя инфраструктуры для интеграционного тестирования — критически важной части инструментария CI/CD Google. Несмотря на схожесть сферы деятельности, технологические стеки различались кардинально.

Получив опыт работы в Google, другой компании с иным взглядом на процессы, я вернулся в Amazon. Без сомнений, взглянуть на вещи под другим углом было интересно и полезно.
Читать дальше →
Всего голосов 16: ↑14 и ↓2+17
Комментарии3

Чистый код: Принцип разделения интерфейса (ISP)

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров5.8K

Принцип разделения интерфейсов предполагает, что вы не должны заставлять клиента реализовывать интерфейс, содержащий методы, которые ему не нужны. Вместо этого вам следует разбить более крупные интерфейсы на более мелкие, ориентированные на конкретные случаи использования.

Этот принцип пожалуй самый простой для понимания, но важный при реализации. С разделением интерфейсов мы встречаемся постоянно, правительство любой страны имеет интерфейсы, которые называются министерствами, компании - интерфейсы в виде отделов, материнская плата - интерфейсы для подключения памяти, процессоров и другой периферии. Тоже самое логично делать и в программировании.

В чем суть принципа разделения интерфейсов. Если перефразировать простыми словами, не нужно делать два дела сразу. Сознание человека так и построено, вспомните детскую задачку, когда просят одновременной дотянуться пальцем до кончика носа и гладить живот по часовой стрелке.

Прежде чем создавать свой пример, давайте рассмотрим пару участков кода из интернета. Из кода удалены приватные части классов, а так же конструкторы и параметры методов. Исключительно для экономии места.

Первый пример, выдержка из огромного класса интерфейса API, весь класс содержит около 30 методов и не представляет интереса, но показанный участок, иллюстрирует проблемы которые возникли у автора кода при модификации.

Читать далее
Всего голосов 7: ↑3 и ↓4+2
Комментарии2

Гайд по психопатам с научным подходом

Время на прочтение6 мин
Количество просмотров11K

В общем, Хабр это сообщество считай что научное, а потому нужно избавляться от стереотипного восприятия многих вещей. С этой целью я составил для вас первый полноценный гайд по психопатам и прочим интересным (нет) и опасным (да) личностям.

Читать далее
Всего голосов 43: ↑32 и ↓11+34
Комментарии37

Микросервисы. Исследование кухни

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров7.4K

Исследования никогда не утоляют мой голод к изучению, поэтому в этот раз, они подтолкнули меня к написанию статьи. Тут постарался ответить на возможные насущные вопросы о микросервисной архитектуре.

Читать далее
Всего голосов 15: ↑12 и ↓3+11
Комментарии9

Unix на работе. Часть вторая, программная

Уровень сложностиПростой
Время на прочтение12 мин
Количество просмотров14K

В этой части раскрываю тему программного обеспечения «которого нет» в операционных системах, которые «не нужны». Рассказываю что есть, чего нет, где брать и что со всем этим делать.

Из первых рук и на основе многолетней практики.

Читать далее
Всего голосов 34: ↑30 и ↓4+38
Комментарии96

ЧГК-GPT, или насколько хорош новый ChatGPT o1-preview в спортивном «Что? Где? Когда?»

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров57K

12 сентября 2024 года OpenAI представила новую модель OpenAI o1-preview - первую модель, которая по утверждению создателей умеет "рассуждать".

Я решил посмотреть, насколько хорошо она умеет отвечать на вопросы из игры "Что? Где? Когда?"

Читать далее
Всего голосов 92: ↑89 и ↓3+114
Комментарии380

Цифровая трансформация в логистике. Часть 1. Как за копейки контролировать расход топлива на 200 автомобилях

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.7K

На крупных предприятиях, где большой объем перевозок осуществляется с помощью автомобильного транспорта, значимая часть затрат приходится на топливо. Учитывая, что количество автомобилей одновременно находящихся на линии может достигать нескольких сотен, управлять этим процессом становится очень непросто.

Читать далее
Всего голосов 7: ↑4 и ↓3+5
Комментарии15

Чем для меня как для работодателя отличаются зуммеры и миллениалы

Время на прочтение3 мин
Количество просмотров84K

В определенный момент у нас в компании стало больше зумеров. Это молодые ребята, с которыми все немного по-другому. Сегодня хочу поделиться своим опытом работы с представителями разных поколений, а именно Y и Z. 

Читать далее
Всего голосов 40: ↑21 и ↓19+6
Комментарии88

Разбираемся, что такое S3 и делаем простое объектное хранилище на Go

Время на прочтение11 мин
Количество просмотров17K

Привет, Хабр! С вами снова Матвей Мочалов из cdnnow!, и в этом посте мы не будем разбираться с FFmpeg - в этот раз наша рубрика «Эээээксперименты!» будет затрагивать объектные хранилища. Разберёмся, чем S3 отличается от S3, а также почему не всё то S3, что называется S3. А заодно эксперимента ради сделаем своё собственное простенькое объектное хранилище на любимом языке всех DevOps и SRE-инженеров – Go.

Читать далее
Всего голосов 27: ↑24 и ↓3+24
Комментарии6

Плавающая запятая, что правит миром

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров6.2K

Нет числа мемам и шуткам про то, как в программировании 0,2 + 0,2 равно не 0,4, а 0,40000009... Все привыкли к подобным ограничениям, проистекающим из стандарта IEEE754. Но как мы к нему пришли, что из себя представляют FPU-модули для работы с плавающей запятой, как ARM-процессоры до недавнего времени обходились без них? Да и откуда вообще в математике возникла концепция плавающей запятой? Попробуем разобраться во всём этом, а заодно попробуем на практике в коде.

Читать далее
Всего голосов 20: ↑16 и ↓4+19
Комментарии24

Вирт, Кормен и диалекты Basic: что изучить про алгоритмы и структуры данных разработчикам на С++

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.9K

Попросили инженеров YADRO поделиться избранными материалами про алгоритмы и структуры данных для «плюсовиков». Вспомнили и «классику» вроде книги Никлауса Вирта, и более современные источники, а также рассказали, почему стоит посвятить им время.

Статьи, лекции и курсы из подборки помогут опытным специалистам «вспомнить все» перед собеседованием или погрузиться в тему алгоритмов, если вы пока в ней не сильны. 

Читать далее
Всего голосов 12: ↑12 и ↓0+16
Комментарии5

Представлена языковая модель Mistral Large 2 размером 123B. Как запускать. Локальный Сopilot. Открытый конкурент GPT-4o

Время на прочтение5 мин
Количество просмотров16K

MistralAI, вслед за LLaMA 3.1 405B, представила свою флагманскую модель с открытыми весами Mistral Large 2 (Mistral-Large-Instruct-2407). Mistral всегда отличалась очень качественными открытыми моделями, и, судя по всему, эта будет не исключением.

Веса открыты, размер контекста составляет 128k, размер модели 123B, модель была обучена на 80 языках программирования и десятках естественных языков, включая русский. Модель хорошо себя показывает как в рассуждениях, так и в математике и программировании.

Читать далее
Всего голосов 22: ↑22 и ↓0+28
Комментарии12

Разрушители легенд: почему популярные IT онлайн-школы не работают, а джуны остаются без трудоустройства

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров69K

Несколько лет назад, во время пандемии, на рынке труда был огромный спрос на айтишников. Сеньоров было сложно найти, а мидлов и джунов расхватывали мгновенно. Практически все, кто окончил какие-то курсы и умел программировать на начальном уровне — будь то веб, бэкенд или мобильные приложения — имели практически 100% вероятность найти работу за 2-3 месяца. Но сейчас все изменилось.

Читать далее
Всего голосов 50: ↑41 и ↓9+39
Комментарии316

Конверсия 1 собеседование на 500 откликов на западном рынке. Как так вышло и чем грозит?

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров52K

Привет, меня зовут Артур, и это моя вторая публикация на Хабре. Я долго не решался опубликовать эту статью, переписывал её несколько раз и всё-таки в приятный пятничный вечер решил вынести эту тему на всеобщее обсуждение. Мне кажется, тема очень важной и актуальной. Несмотря на то, что она почти полностью посвящена ситуации с наймом на западном рынке, я уверен, что полезна и для нас, кто работает на местном рынке.

Обсудить я хочу тот кошмар с наймом, который происходит сейчас на западном рынке, так как это, кажется, иногда вырывается наружу, но о нём серьёзно в русскоязычном комьюнити не говорят. Но те, кто пытался или подаётся сейчас на западные вакансии, я думаю, прекрасно понимают, о чём будет эта статья. Я сам не Я сам не верил, пока не попробовал, желание разобраться, почему так произошло, взяло верх.

Читать далее
Всего голосов 137: ↑90 и ↓47+64
Комментарии352
1

Информация

В рейтинге
1 923-й
Зарегистрирован
Активность

Специализация

Backend Developer