Ошибка не использовать эти структуры данных
Вставка
- Опубліковано 2 чер 2024
- Попробовать PVS-Studio бесплатно:
pvs-studio.com/pvs_ssv
UA-cam канал: / pvsstudio_channel
Доступ к плюшкам:
/ @seniorsoftwarevlogger
Телеграм: t.me/seniorsoftwarevlogger
Инстаграм: / seniorsoftwarevlogger
0:00 Структуры данных, которые нужно знать
0:20 Статический анализ кода от PVS Studio
02:12 Деревья, Tries, Ternary trees
03:03 Двусвязный список
04:09 Кольцевой буфер. Circular Buffer
05:29 Вероятностные структуры данных
05:55 Фильтр Блума
07:44 HyperLogLog
Senior Software Vlogger - канал о жизни людей в айти и интересных фактах. Написание кода, интервью с программистами, переезд на ПМЖ в другие страны, лайфхаки профессии.
#программирование #ityoutubersru
То что не вошло в видео и другие полезные ссылки t.me/seniorsoftwarevlogger/831
О, знаю откуда этот пончик на майке.
Нужные структуры данных:
Списки
Массивы
Очередь
Приоритетная очередь (куча/heap)
Хэш-таблица (не путать с хэшмапой из джавы)
Деревья: хотя бы бинарное и btree
Графы - опционально
Хорошо бы знать сложность операций поиска/добавления/удаления из этих структур
Не все из них понадобится рука и использовать, а уж тем более реализовывать. Но это понадобится чтобы понимать как работают технологии. Те же индексы в базе данных, структуры в Kafka или Redis
В старину был где-то юмористический список того, что делает вас настоящим программистом. Среди таких вещей, как умение на память набрать двоичный код операционной системы тумблерами на передней панели ЭВМ, значилось также, что настоящий программист считает единственно полезной структурой данных одномерный массив. 🙂
Я вот тут пол-ролика просмотрел, и подумал: "Этот человек скорее всего бэкендщик на Java", ибо специфичность изложения и терминология выдает специализацию. Программирование не имеет ничего общего с Интернетом. Программирование - это научить дрон "летать и не падать" ). А отвтеил потому, что лайк поставил.
Интересно, спасибо
Отличный ролик, нужно больше подобного контента по структурам и алгоритмам с примерами)
Давай такой же формат про алгоритмы ;)
Классное видео, надеюсь будут еще выпуски с углубленным погружением в некоторые их структур данных. И как насчет такого же видео об Алгоритмах? Спасибо!
Посмотрел до конца, лайк поставил)
Огонь! Нужно развить тему! Больше таких видео и в идеале чуть более подробно!
Я про фильтр Блума узнал когда читал как работают базы данных на LSM-tree.
Братан хорош!!! Давай вперед!! Контент в кайф. Можно еще? Вообще красавчик! Можно вот этого почаще.
Ахаха 🤣
Авераге экстримкоде энжойнер
экстримкод, разлогинься )
самое понятное обьяснение фильтра блума, сколько раз читал описание относительно биткоина и только сейчас понял!
... для программного инженера знание алгоритмов их вариантов и разновидностей обязательно, а для простого кодера, возможно и не обязательно ... всё зависит от того, какое место вы занимаете в процессе создания программного продукта.
О, это сразу подписка
Спасибо за пример реализации двухсвязанного списка))
Какие-то умные слова и даже их значения я знаю и как оказывается применяю, о каких-то впервые слышу.
Что-то полезное есть, спасибо!)
Отличный формат для тех кто не знает с чего начать гуглить
Вторая часть будет?)
Получилось интересно и познавательно
Спасибо за видео!
Я бы так сказал, знание ряда популярных структур и алгоритмов, это страховка от траты времени на изобретение велосипеда програмистом. Тем более что для чего-то популярного может быть и аппаратная поддержка (могу ошибаться)
Красавчик, аж пойти корки получить по предмету захотелось
Спустя 20 секунд лайк поставил)
Вообще не знаю асд, нас этому не учили. Спасибо за видео!
на "пересечении" графов и деревьев, есть ориентированные ациклические графы (DAG), удобны для работы с классифицкаторами
ExtremeCode пересмотрел что ли?)
Они просто раньше меня выпустили. Может теперь получится дрифтануть под их видео.
Возбудитель любопытства!
Приблизительно на 1:00 понял, что в ролике главное))
А можно расширить и углубит?
А так де узнать про взаимосвязь структур данных и протоколов передачи данных или способов поиска?
У нас в проекте circullar buffer юзается для генерации uncompressible данных для перф нагрузки хранилищ
Дякую!)
Смешно слышать "алгоритмы и структуры данных полезны", потому что программирование это как раз ДАННЫЕ и АЛГОРИТМЫ. Это даже не основы, это два столпа, сама суть программирования, на котором стоит кодинг любого уровня вплоть до устройства микропроцессора. Всё в программировании это данные и все действия при работе с ними - это алгоритмы. Все программисты работают с данными, используя алгоритмы. А знать их нужно для того, чтобы не изобретать велосипед, а использовать уже проверенные, продуманные и отлаженные механизмы. Чтобы повышать свою компетенцию и мастерство.
Все так
Хороший формат, анонсировать алгоритмы, а те кому интересно смогут уже сами найти детали!
скорее наоборот - абсолютно бесполезный формат... кинул пальцы ничего не показав и не рассказав, названия аылетают через 5 минут после просмотра видео... так что просто понты и реклама, и ничего больше... цель просто заманить на какие нить платные уроки, не более
@@vitgo а посмотреть в описание к видео и найти там названия для поиска сил не хватило?
*Привет Дим,спасибо за полезный контент!*
*Дим,сними пожалуйста еще одно видео про продуктивное рабочее место,так как наверняка за это время что-то изменилось)*
*Сделай краткий обзор+совет с лайфхаками)*
Вообще правильно начинать любое описание с назначения. Очень интересно смотреть историю развития чего-либо - это лучше всего позволяет понимать зачем создавалась та или иная технология. Соответственно лучше понять где её лучше применять в своей практики и в чем её недостатки. И да, мне кажется, что нередко программисты считают, что все пользователи имеют самые последние образцы техники в самой топовой комплектации. :)
Да Вы что! Если начать сразу с сути структуры данных, то магия пропадет ;)
Ускорение статистики по специальному типу в сравнении с обычным тупо обусловлено тем, что в нем данные лежат в очень удобном виде для данной операции, т.е. предварительно подготовлены.
Ничего не понятно)) но очень интересно)) Не вижу схемы данных и картинки для визуального понимания что имеется ввиду, как будто статью из википедии озвучивают) Но зато есть список структур данных по которым можно смотреть информацию и изучать) поэтому спасибо за ролик!)
Алгоритмы знать обязательно, если хочешь проходить собесы)
Отлично, упоминание без применения в примерах, "-Вот представьте как скачут шарообразные кони в вакууме"
К каждому алгоритму был пример. Слушал фоном?
@@SeniorSoftwareVlogger Я имел ввиду пример кода питон, js , хотя бы псевдокод, а так это ну совсем сфрические кони в вакууме.
@@froststorm77 А еще примеры на Delphi, C, отдельно C++, и на кондовом Паскале эпохи Вирта. В том и фишка, что примеры на ЯП для элементарных структур данных и нафиг не нужны - они пишутся на раз-два самостоятельно. Главное - идея.
@@lolphdundgren4328 бляааааа , собственно чего я ожидал от людей, разума и помощи , хер там плавал, говна на палке получи, это суровый мир и все срут на тебя и раздувая собственное эго. Я даже за то что бы сценарий "не смотри вверх" осуществился. Нах ебаное ИТ с их его перераздутыми эгоманьяками....
У Котопса недавно был выпуск про структуры данных. Того и гляди, неплохое образование на ютабчике получу! :-)
Чувак, ты перепутал циклический буфер с циклическим списком, все примеры на циклический буфер можно считать хорошими примерами для циклического списка, а вот для циклического буфера примеры: обработка и кодирование видео и звука, когда лучше потерять немного данных, чем добавить задержку в стриминг или выжрать всю память, еще задачи сбора и отправка данных с датчиков и встроенных систем, у них памяти совсем мало и часто перетирают циклически поверх, ну и всякий финтех и биржи, где данные торгов устаревают и можно циклически переписывать их, в общем, ты уловил смысл, юзвейсов много. Странно услышать про тернарные деревья среди нужных структур, без упоминания о бинарных, а ведь именно они, а не иерархические структуры, и уж тем более не редкие тернарные, используются повсеместно и ускоряют и задачи поиска с разбиением пополам, организацию кучи (heap), сортировок, индексирование и т.д.
А на вот эти вероятностные структуры данных есть адекватные кейсы?
Интересная мысль а ты уверен что прав?
@@allll1100 Если Тимур неправ, то что-то в этом мире сломалось
Ух ты, а ты умный по ходу. Сколько зарабатываешь?
Подскажите, есть ли в стандартной библиотеке C++ циклический список или циклический буфер?
Спасибо) Ещё бы практический урок с примерами, было бы идеально
на 7:50 - множество по определению содержит только уникальные значения. Тут надо разобраться с терминами
Хорошее видео. Не хватает примеров кода.
Наконец хоть немного образовательный контент!
Ты все это время верил в меня?
@@SeniorSoftwareVlogger То IT-бороду тестниш интервью тепер видимо пришло время Соера с его полуобразовательными видео ...
Почему-то прочитав заголовок видео сразу понял что будет речь про Фильтр Блума и HyperLogLog.
Какой монитор на столе?
А последний выпуск куда делся? Посмотреть не успелось даже
ua-cam.com/video/gZtHN1x8fT8/v-deo.html
Спасибо) Классный выпуск. Я новичок в программировании и благодаря этому ролику решил познакомиться с самыми полезными структурами данных
Структуры данных и алгоритмы - это база, это надо знать
Это не база, это так...
👍
Надо читать Кнута, Дейкстру, Хоора, Вирта
Странно не сказать про бд и их индексирование при рассказе о фильтре Блума
Не понял ремарку про "настоящих" программистов на 4:19. Что имеется в виду под настоящими программистами?
Табличка "сарказм"
Программные инженеры, работающие на более низких уровнях, создающие саму возможность для говнокодинга этажом выше.
а можно поподробнее про структуры и чмо структуры пожалуйста?
То, что есть алгоритмы я понимаю, примеры тоже услышал.
Но вот как все это применяется...
Ничего не понял.
Вот я новичок, для общего развития делал игру преферанс.
Разыгрывающий ходит с козырного туза.
Вистующему боту надо свои 10 карт рассортировать по мастям и старшинству, определиться, есть ли козыри, сходить самым мелким козырем, если есть, если нет, сбросить самую ненужную карту.
Так какой алгоритм использовать для бота, чтобы он нашел самую ненужную карту?
Какую библиотеку юзать, если я делаю это на node js?
Я конечно сделал по своему разумению, но никаких мыслей насчет использования алгоритмов у меня не возникло чего то.
HyperLogLog нужна при создании своей БД
с тех пор как я фигачил на ассемблере в текстовом редакторе и дебажил турбодебагером прошло прям дофига времени :) я уже сильно давно не кожу, но думаю что это надо знать чтобы писать проги, а не говнопроги. сейчас вообще похоже никто особо не заморачивается в некрупных проектах - сляпали, работает и гуд. раньше за каждый байт боролись, а теперь шутка про 32 гига и хром уже не шутка блин :( вообще первые проги на асме я писал сначала на бумажке, потом переводил в хекс при помощи таблиц и долбил в редакторе в файл (когда не было компилятора), вот там был гемор :) короче, кодеры, учите алгоритмы и данные чтобы не было вам стыдно за ваши проги. бабки за проект получить это одно, а чтобы ночами еще не икалось...
В мобильном приложении обычно количество элементов небольшое, из-за этого нет особого повода изучать алгоритмы, а жаль
Настолько полезные структуры данных, что их почти никто не знает...
Это лишь показывает качество современного образования... и самообразования программистов.
@@lolphdundgren4328 Вот то ли дело были программисты во времена Пушкина и Достоевского... Все структуры и алгоритмы знали наизусть.
Погоди, а где стек и очередь?
4:04 - АХАХАХАХАХА. НЕТ!!! 😐
Ну undo это паттерн команда больше как по мне
"Настоящие программисты"
🌚 сарказм
@@SeniorSoftwareVlogger воображаемые программисты))
@@SeniorSoftwareVlogger Напомнило: "Заходит как то в бар Хауди Хо, Гоша Дударь и настоящий программист ... "
эммм... как-то на подкорке уже, что кеш = weak reference...
В каком месте блум фильтр может реально пригодиться, с учетом того что он не дает 100% результат, но дает скорость.
Я же рассказал пример
обработка запросов в гугле?
А где же кучи?
Кольцевой буфер на связанном списке это так себе решение в плане экономии памяти.
Вообще нормальный кольцевой буфер это простой массив.
Почему?
@@FyUajYpUlM39 потому что у списка оверхед в виде указателей и список подразумевает аллокацию памяти под каждый элемент (опять оверхед), в то время как идея кольцевого буфера - иметь заранее определенный объем памяти и просто перезаписывать старые данные. Ну и двигаться по списку гораздо менее эффективно чем по массиву, т.е.е массив еще и быстрее будет. Циклический связный список может и годится для каких то высокоуровневых целей типа Undo/Redo, но как кольцевой буфер для записи поточных данных малопригоден.
Самое полезное видео за мой шестимесячный опыт обучения программированию
2:08 - у меня ничего в углу не появилось(
ua-cam.com/video/9_g1T5SmUFM/v-deo.html
@@SeniorSoftwareVlogger спасибо, а что все таки за подсказки, почему на не появляются? Сижу с обычного ПК, с хрома
Я один просто люблю алгоритмы. Мне надо было быть разрабом драйверов а не iOS
0:14 Пока не существует универсальной теории алгоритмов, знать их всем на свете абсолютно не обязательно. На текущий момент в программировании имеется раздел типовой алгоритмизации, где собрана коллекция популярных часто встречающихся классов программистских и математических задач типа сортировка, поиск, задача коммивояжёра и всякое такое. В программистских книжках по алгоритмам нет универсальной теории, которая даёт общий подход к любому прикладному алгоритму.
ну просто в javascript оно и нафиг не нужон, алгоритм этот ваш ))
а вот, к примеру, в c++ без алгоритмов вообще никуда, если хочешь нормально оптимизировать требовательный софт.
Нужно знать где какие алгоритмы или структуры данных применять.
Нужон нужон
может быть, когда-нибудь, мы вернемся в тот мир, где сеньоры были не просто мидлами с подвешенным языком, а реально что-то знали о мире айти.. спасибо за еще один маленький шаг в эту сторону
а так до сих пор и есть, просто в компаниях, которые могут себе это позволить.
Я тоже такую лампу купил после того как ее теклид рекламировал... ахахахаха
Мне прислали для обзора на другом канале
У меня было 5000 вкладок в хроме и недавно у меня сгорел жёсткий, что в биосе его нет. Сначала он оч медленно стал работать, а потом 3.14зда. Кто знает где в Москве могут оживить напишите плиз и Диме - Дима, не открывай вкладки в хроме!
32 мало
128 самое то
Слишком поверхностно
Что бы ты хотел увидеть помимо того, что теперь можешь загуглить за 5 минут?
Не гуд писать логи во время креша. Особенно весь файл целиком как в видео говориться - это вообще плохо и попахивает хранением сейвов игры в каком-то json, потому что юнити базы данных не поддерживает.
Как бы в мобилках обычно логи пишутся в базу данных, а мобилки считай что калькулятор, Особенно если это андроид там точно калькуляторы у всех. Но если в базу писать для большого приложения становиться затратно, то лучше всего на JNI подключить либу на Си, которая будет писать логи в файл БЕЗ кеширования файла! Ну и там можно банально по достижению конца файла перезаписывать его в 0 позиции для 10мб файлов это быстрая операция. Если 100мб лог то тогда можно писать по кругу, но придется писать замудренный алгоритм чтения такого лог файла, возможно даже на стороне бекенда будет алгоритм декодирования.
Но точно сохранять 100мб при каждом креше или сейве это звучит бред, особенно в json сохранять еще более бред. И получается при каждом onDestroy() нужно логи тоже сохранять. Так ни когда не стоит делать! Пишите лог сразу на диск с отключенным кешированием, если не получается кеш выключить, делайте flush() при каждой записи. Приложение может упасть и лог не записаться это стандартно для андроида, kill приложения сама АндроидОС может делать, когда приложение свернуто и onDestroy в этом случае не выполниться
Ну и вообще для юнити/мобилок есть крешлайтикт от гугла. Там можно и аналитику и креши и логи отлавливать. В iOS есть собственная система сбора крешей и полно аналогов крешлайтикса, если он не устраивает по каким-то причинам
Писать логи без кеширования тоже не гуд - можно устооить износ флешки и тормоза в программе. Есть промежуточный вариант - писать без буферизации в самой программе (write () вместо fwrite ()). Тогда буферизует сама ОС, и если падает программа, а не весь комп, то сохранится то же, что при flash () после каждой записи.
@@user-uvk Когда падает приложение андроид/иос/винда, все незакрытые файлы теряются. Проверено жизненным опытом. 20 лет опыта в IT. fclose() НЕ выполняется если процесс дропнуть командой kiil pid. Именно так он и дропается в ОС андроид такой же командой. У вас опыта по ходу нет и вы думаете что гарантированно всегда вызовется fcloce(). Но это не так.
@@serhiis_ Вы невнимательно читали. Да, fclose не выполнится, и буфера RTL не скинутся, как Вы и написали. Но я предлагал использовать open/write в противовес fopen/fwrite, у функций без f нет буферов в пользовательской программе, все буфера в ОС, и они в большинстве ОС не теряются при убиении процесса. Вот если грохнется ОС, тогда ой. И коль пошла такая пьянка, 35 лет опыта в IT.
@@user-uvk Проверьте в андроиде. Я не уверен что ваш способ на java будет работать. Какой именно класс java в андроиде надо использовать?
@@serhiis_ С java и андроидом не работал. На голом С пример простой:
#include
#ifdef unix
#include
#else
#include
#endif
#include
#include
#include
int main(int argc, char **argv)
{
int f1=open("tst_open",O_CREAT|O_TRUNC|O_WRONLY,0777);
FILE *f2=fopen("tst_fopen","w");
write(f1,"kuku/write
",11);
fwrite("kuku/fwrite
",12,1,f2);
printf(">>>>");
getchar();
}
под Linux и Windows при отстреле процесса один файл остаётся пустой, а в другом всё на месте. По Ctrl-C под Linux то же самое, а под Windows оба файла непустые.
точка нэт
1. Что за странные чуваки говорили тебе, что "знание алгоритмов" просто делает программистов лучше? Я вот на собесах спрашиваю, зачем нужно понимание структур, алгоритмов и сложности. И при подобном бреде речери об уровне "синьер" даже не идет
2. Применений деревьям/грфам и разного рода спискам очень много и на фронте. Пример с undo/redo выглядит как минимум странно и неуместно.
Ну и в целом, все же от задачи зависит. Вот ты делаешь фронт или даже бэк для очередного интернет магазина. Крайне маловероятно, что тебе понадобится что-то сложнее списка. Ну возможно дерево как явление и будет присутствовать (каталог товаров), но какие алгоритмы реально могут пригодиться?
Другая ситуация: вот ты зачем то делаешь ui для инжинера, который отвечает за сборку, например, мебели. Сам процесс сборки, очевидно, граф, его узлы - запчасти и/или "полуфабрикаты". Тебе нужно валидировать дерево, считать метрики, и "помогать", давая подсказки или подсвечевая неоптимальные "пути" на графе. Очевидно, ты, столкнувшись с очередной проблемой, мгновенно готовое идеальное решение не родишь. Тебе надо будет подумать, погуглиить, найти 100500 готовых алгоритмов для подобных задач, изучить их, и адатировать что-то для твоей конкретной проблемы...
С другой стороны, чтобы что-то найти, нужен базис, нужно знать, что искать. Вот об этом интересно поговорить. А эта ересь, про то как важно знать условный алгоритм Дейксты или тот же фильтр Блума...не интересно и на самом деле бесполезно
Знание алогритмов даёт развитие мозгу и кругозор. Конечно, то и другое можно получить и другими способами. Но для программистов этот эффективнее.
Дерево - это не граф без циклов. Это односвязный (!) граф без циклов. Подумай почему.
Вы не прав. Дерево это я. Сверху по пояс.
не понимаю, почему не вставлять больше примеров, слушать говорящую голову тяжело
Алгоритмы надо изучать т.к. их спрашивают на каждом собеседовании 😀
Такая себе мотивация. Это как покупать самую дорогую машину, потому что друзья могут спросить, "почём брал?". Если не умеешь применять алгоритмы в реальных задачах, то грош цена таким знаниям. Ну пройдешь ты собес, а дальше чего? Вдруг там тех лиды не идиоты, задачи сложные, и знание алгоритмов реально нужно. Ты тупо заучил что-то для собеседования, а как применять на практике, в реальной задаче не знаешь... Потратишь зря свое и чужое время.
С другой стороны, если тех лиды идиоты и спрашивают про алгоритмы просто потому, что не знают, о чем ещё спосить, то опять же, зачем туда вообще идти, тратить своё и чужое время?
@@a1ex_sk согласен, если уж и изучать их, то потому, что тебе самому это чем то полезно/интересно. Тем более хорошо поразмыслив можно без проблем найти нормальную мотивацию для их изучения
Да уж.. я смотрю вы в сарказм вообще не могЕте
@@squid869 считайте проф.деформацией :) Последние 7 лет регулярно собеседую людей (разного уровня, для разных проектов). Поверьте, для вас это шутка. Для очень многих - норма, заучить что-то просто для собеседования, или вообще начать рассказывать, что паттерны и принципы - бессмысленная потеря времени, алгоритмы в реальных задачах нафиг не нужны, и вообще я тут пару статей про RX прочитал, поэтому платите мне синьерский топ рынка
Автор, надо иногда отвлекаться от программирования, например поизучать как работает браузер, как выделить больше памяти виртуальной машине жаваскрипта и тогда вкладочки зашуршат при гораздо меньшем объеме оперативки. Торможение "32 гига и 5 вкладок" звучит по-Ламерски.
Вы автора не поняли. Имелось в виду, что для одних и тех же действий новые программы требуют больше ресурсов, чем старые. И если тенденция сохранится, то через годы на 5 вкладок может не хватить 32 Гб...
@@user-uvk я то прекрасно понял, это очевидно, но пример мягко выражаясь неудачный, показывающий что автор плохо понимает работу браузера. Вкладки кстати достаточно одной, если это фб и что-то долго листать. Через годы будут свои вкладки и свое понимание у производителей браузеров сколько памяти актуально выделять в настоящий момент.
а что ещё надо чтоб браузер нормально работал, личного сисадмина?
@@dmitriykonopinskiy3793 разберись, тыж программист
Кто-то посмотрел новый ролик «экстремальных клоунов» )))
Что за ковёр !?
груп бай, такой больше не купить mykeyboard.eu/catalogue/kanagawa-deskmat-zen-mint_3629/
@@SeniorSoftwareVlogger блин, спасибо
Мне как-то сложно представить, что это за миллионы таких программистов, которые не в курсе хотя бы половины из перечисленных структур данных. Деревья и поиск по ним в ширь, глубь и типа А* - это вообще фундаментальные вещи.
Бывают только труструктуры и чмоструктуры, все остальное от лукавого
Задолбали эти якобы ненавязчивые рекламные вставки
Читай книги, Юрий 👍
Ролик ни о чём. Смысл упоминать каждую отдельную структуру данных, описывая её одним предложением?
Чтобы начинающий в море возможностей выбрал самые полезные или развивающие мозг.
@@user-uvk я про то, что слишком короткие комментарии.
@@trommo в среднем по минуте на структуру. Это чисто чтобы зритель понял, полезет он в инет искать эту структуру или ему она пофиг.
Очень странно что программист может не знать алгоритмы и структуры данных. Не стал бы работать с такими "программистами".
Братуха эти коды. для меня просто птичий язык. Ты вообще о чем, аж мази закипели.
Уаще пакайфу жы есть. Аллах-гей
Идиот, начал с рекламы. Ну и сам её смотри. Развелось этих манагеров. Лучше бы учились программировать.
Значит, лучше прервать мысль рекламой? 🤦♂️
ты хоть сам то понимаешь что тебя никто не понимает?
Ну я понял. Значит, я "никто не"?
@@user-uvk с вероятностью 50/50 это может быть так. но суть моего предыдущего сообщения в том, что те кто шарят нового ничего не узнали, а те кто не шарит тоже нового ничего не узнали, так как кучу новых терминов без явной связи понять должным образом не возможно, вероятно вы как и я шарите в структуры, но те кто не шарит после просмотра и не начали шарить.
Видео вроде бы познавательное, но для кого?