Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 14.08.22 11:23
Оценка: 9 (1) -2 :)
Тут: https://www.youtube.com/watch?v=8XIMleu0YWI

Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео
Отредактировано 14.08.2022 11:25 Shmj . Предыдущая версия . Еще …
Отредактировано 14.08.2022 11:23 Shmj . Предыдущая версия .
Re: Тестовое задание Senior .Net - критикуйте
От: Sharowarsheg  
Дата: 14.08.22 11:47
Оценка: +1 :)))
Здравствуйте, Shmj, Вы писали:

S>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео


Вот и покритиковали, да на том можно и закончить.
Re: Тестовое задание Senior .Net - критикуйте
От: mDmitriy Россия  
Дата: 14.08.22 13:22
Оценка: 9 (1) :))) :)
Здравствуйте, Shmj, Вы писали:
S>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинка ми, теперь код в видео
имеется ввиду что Senior .Net может программно этот код из видео выдрать, откомпилировать, улучшить и загнать в другое видео
Re: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 14.08.22 16:08
Оценка: 4 (1) +3 -1
Здравствуйте, Shmj, Вы писали:

S>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео


Зачем ты находишь такие видео и приносишь сюда?
Молодёжь для ещё большей молодёжи что-то типа лекции устроила с демонстрацией своей работы над задачей.
В универе на лекциях часто текст в виде аудио просто воспроизводили, ещё и на слух это аудио приходилось в тетрадки в виде текста записывать.
Молодёжи с их видео далеко до стариков.

Задача неинтересная, скучная, чисто на академические знания и умение их воплощать в жизнь.
Думать над решением там нечего (алгоритм внешней сортировки разве что загуглить, если забыл), все вопросы к реализации.
На перемотке за пару минут глянул.
Человек в критичной задаче активно использует LINQ-запросы, в том числе и OrderBy.
При сравнении элемента из int и string начинает со строки.
Для заполнения результата, информацию о файлах сливает в List, оттуда постоянно берёт первый элемент, удаляет его, ещё и через Remove, а не RemoveAt.
Как по мне, так уровень джуна. Как решение дома без контроля времени от синьёра — это всё выглядит стыдно.
Re[2]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 15.08.22 12:05
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Как по мне, так уровень джуна. Как решение дома без контроля времени от синьёра — это всё выглядит стыдно.


Похоже что сейчас это называется сеньор... Джуны в современном понимании описаны тут: https://habr.com/ru/post/682434/

Т.е. молодежь ориентировано на то, чтобы себя продать подороже. При этом высвободившееся время вкладывать в развлечения, физ. активность, путешествия, секс и пр.
Re[2]: Тестовое задание Senior .Net - критикуйте
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.08.22 13:30
Оценка: 41 (2) +1 -1
Здравствуйте, karbofos42, Вы писали:

K>Задача неинтересная, скучная, чисто на академические знания и умение их воплощать в жизнь.

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

Какой смысл давать тестовые задания, которые максимально далеки от практических — для меня до сих пор загадка. Видимо подростковые психологические травмы с уроков информатики приносят на работу.


K>Думать над решением там нечего (алгоритм внешней сортировки разве что загуглить, если забыл), все вопросы к реализации.

А вот это зря, лучше лишний раз подумать, чем кидаться писать.
Есть у меня подозрение, что:
  1. прочитать файл
  2. построить индекс ключ -> позиция в файле памяти
  3. отсортировать индекс стандартным алгоритмом
  4. записать новый файл по отсортированному индексу
Будет в разы быстрее, чем сортировка слиянием.

При размерах файла до 200гб индекс по ключу гарантированно влезет в память.



K>На перемотке за пару минут глянул.

Аналогично. У меня бы такой код не прошел ревью.

Вообще похоже как раз на код студента, который еще не разобрался в языке, библиотеке и оптимизации программ, но уже сделал лабу по merge sort. Это уровень хорошего джуна.
Отредактировано 15.08.2022 13:45 gandjustas . Предыдущая версия .
Re[3]: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 15.08.22 14:26
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Какой смысл давать тестовые задания, которые максимально далеки от практических — для меня до сих пор загадка. Видимо подростковые психологические травмы с уроков информатики приносят на работу.


Ну, сложно практическую задачу выдумать, чтобы там адекватный объём был, а не проект, который подготавливать месяц, а соискателю вникать на неделю.
Тем более, что в шарпе чаще рутина, нежели какие-то выдумывания хитрых алгоритмов и т.п.
Если бы мне сказали подготовить задачи для онлайн теста кандидатов перед собеседованием, то накидал бы небольших задачек именно академических (если в работе часто работа с графами или матрицами, то естественно это нужно добавить в задачки).
Задача из этой темы выглядит тут вполне даже адекватно.
Быстренько пробежался глазами, посмотрел, что человек не вычитывает весь файл в память, а через потоки работает, потоки освобождает как надо,...
Если выбрал List для хранения, потом постоянно удаляет первый элемент, да ещё через Remove, то кандидата отсеял или на собеседовании этот момент проговорил (знает ли человек нюансы и может сам там сразу поправится и скажет как улучшить эту часть).
Всё же я тестовые задачи рассматриваю как быструю проверку на знание базовых вещей, а не как умение делать практические задачи "под ключ".
Для этого уже испытательный срок есть, а на собеседовании всё равно никак не выяснишь.

G>А вот это зря, лучше лишний раз подумать, чем кидаться писать.


В реальных задачах на производстве так, а в тестовых академических задачах не вижу смысла усиленно что-то выдумывать.
Либо не оценят, либо перемудришь и сам запутаешься.
Если работодатель на тестовой задаче хочет прямо самый оптимальный вариант и чтобы соискатель неделю в профилировщике сидел, то я лучше сразу к другому пойду работать и на этого время тратить не буду.
Re[3]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 15.08.22 17:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>построить индекс ключ -> позиция в файле памяти


А что в качестве ключа? Там же сортировать нужно целую строку, а не только число.
Отредактировано 16.08.2022 8:24 Shmj . Предыдущая версия .
Re[3]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 15.08.22 18:53
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я вот пытаюсь вспомнить когда мне на практике доводилось нечто похожее писать, и чето мне кажется, что никогда.


Ну а мне вот разок приходилось решать очень похожуу задачу.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 16.08.22 08:26
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

G>>Я вот пытаюсь вспомнить когда мне на практике доводилось нечто похожее писать, и чето мне кажется, что никогда.

НС>Ну а мне вот разок приходилось решать очень похожуу задачу.

Есть же готовые СУБД. К примеру, подобная задача — это проиндексировать 300 Гб блокчейна — легко решается внесением данных в простенькую таблицу с индексом с помощью BULK INSERT. Зачем писать самому то что 100 раз писано-переписано?

Чтобы на сервере было мало места и нельзя было установить легковесную СУБД — на практике с таким не встречался. Наверное у железячников, которые пишут под микроконтроллеры — такая задача возникнуть может.
Отредактировано 16.08.2022 8:31 Shmj . Предыдущая версия . Еще …
Отредактировано 16.08.2022 8:30 Shmj . Предыдущая версия .
Отредактировано 16.08.2022 8:27 Shmj . Предыдущая версия .
Re[4]: Тестовое задание Senior .Net - критикуйте
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.08.22 08:44
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, gandjustas, Вы писали:


G>>Я вот пытаюсь вспомнить когда мне на практике доводилось нечто похожее писать, и чето мне кажется, что никогда.


НС>Ну а мне вот разок приходилось решать очень похожуу задачу.


Какую?
Почему СУБД не подошла?
Re[5]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 16.08.22 08:47
Оценка: +1
Здравствуйте, Shmj, Вы писали:

G>>>Я вот пытаюсь вспомнить когда мне на практике доводилось нечто похожее писать, и чето мне кажется, что никогда.

НС>>Ну а мне вот разок приходилось решать очень похожуу задачу.
S>Есть же готовые СУБД.

При чем тут готовые СУБД? Была задача обработки и сравнения очень больших объемов бинарных данных. Ради разового сравнения, к примеру, нескольких сотен гигабайт грузить оба образца в СУБД — это прям
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 16.08.22 08:48
Оценка:
Здравствуйте, gandjustas, Вы писали:

НС>>Ну а мне вот разок приходилось решать очень похожуу задачу.

G>Какую?
G>Почему СУБД не подошла?

Re[5]: Тестовое задание Senior .Net &mdash; критикуйте
Автор: Ночной Смотрящий
Дата: 16.08.22
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 16.08.22 09:06
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>При чем тут готовые СУБД? Была задача обработки и сравнения очень больших объемов бинарных данных. Ради разового сравнения, к примеру, нескольких сотен гигабайт грузить оба образца в СУБД — это прям


Есть же специализированные легковесные СУБД для таких вещей — как LevelDB и Berkeley DB.

Видимо вы просто об этом не знали.
Re[7]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 16.08.22 09:30
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Видимо вы просто об этом не знали.




Нет, видомо потому что ты не в курсе, что подобный алгоритм будет решать задачу в несколько раз, если не на порядок, быстрее, и требовать на много порядков меньше памяти.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 16.08.22 11:46
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Есть же специализированные легковесные СУБД для таких вещей — как LevelDB и Berkeley DB.


Вместо того, чтобы напрямую без посредников быстро обработать данные и преобразовать в нужный вид, их придётся сначала долго загонять в БД, потом загружать из неё и результат преобразовывать в нужный вид.
Закономерно такой вариант будет работать дольше, чем самописный велосипед (если уж конечно совсем не наговнокодить).
Re[8]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 16.08.22 13:09
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Нет, видомо потому что ты не в курсе, что подобный алгоритм будет решать задачу в несколько раз, если не на порядок, быстрее, и требовать на много порядков меньше памяти.


Тот что в предложенном задании? Давайте описание задачи.
Re[9]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 16.08.22 13:14
Оценка:
Здравствуйте, Shmj, Вы писали:

НС>>Нет, видомо потому что ты не в курсе, что подобный алгоритм будет решать задачу в несколько раз, если не на порядок, быстрее, и требовать на много порядков меньше памяти.

S>Тот что в предложенном задании?

В моем случае было не точь в точь то же самое, но похоже. Указанное задание для проверки способности решать подобные задачи — более чем. Ровно как и то, что отсутствие такого бэкграунда приведет к решениям типа затаскиваия целой БД и пожирирания гигабайтов памяти тоже вполне понятно.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[10]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 16.08.22 14:57
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>В моем случае было не точь в точь то же самое, но похоже. Указанное задание для проверки способности решать подобные задачи — более чем. Ровно как и то, что отсутствие такого бэкграунда приведет к решениям типа затаскиваия целой БД и пожирирания гигабайтов памяти тоже вполне понятно.


Т.е. задача — отсортировать около 200 Гб. бинарных данных и размер одной записи около 100 Кб? Такая задача?

Почему ты думаешь что Berkeley DB сожрет гигабайты памяти?
Re[6]: Тестовое задание Senior .Net - критикуйте
От: syrompe  
Дата: 16.08.22 17:36
Оценка:
НС>При чем тут готовые СУБД? Была задача обработки и сравнения очень больших объемов бинарных данных. Ради разового сравнения, к примеру, нескольких сотен гигабайт грузить оба образца в СУБД — это прям

Ну вообще надо мерять что быстрее.
Там основной затык это IO с диском на этапе слияния. Параллельно читается из десятков/тысяч файлов и еще пишется в один. СУБД сильно оптимизированы для работы с диском и вполне могут уделать эту "наивную" реализацию.

"легковесные" скорее всего сольют.

Можно конечно самому эти "оптимизации" реализовать, но это уже не формат "тестового задания".
Re[11]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 16.08.22 18:37
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Т.е. задача — отсортировать около 200 Гб. бинарных данных и размер одной записи около 100 Кб? Такая задача?


Нет. Задача была сделать дифф в таком объеме.

S>Почему ты думаешь что Berkeley DB сожрет гигабайты памяти?


А ты попробуй.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 16.08.22 18:37
Оценка:
Здравствуйте, syrompe, Вы писали:

S>Ну вообще надо мерять что быстрее.


В данном конкретном случае и без измерения все понятно.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 17.08.22 00:18
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Тут: https://www.youtube.com/watch?v=8XIMleu0YWI


S>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 17.08.22 04:15
Оценка:
Здравствуйте, vaa, Вы писали:

S>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.

Сначала дай мне этот код. Вроде там ошибка в рассчетах — но мне нужно запустить код — а как скомпилить видео — не знаю.
Re[12]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 17.08.22 04:16
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Т.е. задача — отсортировать около 200 Гб. бинарных данных и размер одной записи около 100 Кб? Такая задача?

НС>Нет. Задача была сделать дифф в таком объеме.

Давай конкретнее.

S>>Почему ты думаешь что Berkeley DB сожрет гигабайты памяти?

НС>А ты попробуй.

Пробовал — памяти много не жрет — там применен B-tree.
Re[3]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 17.08.22 05:58
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


S>>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.

S>Сначала дай мне этот код. Вроде там ошибка в рассчетах — но мне нужно запустить код — а как скомпилить видео — не знаю.


Дожили. А как люди во времена перфокарт код писали? Видео достаточно, иначе бы ютуб не превратился в обучалку кодингу.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[3]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 17.08.22 06:09
Оценка: 80 (1)
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


S>>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.

S>Сначала дай мне этот код. Вроде там ошибка в рассчетах — но мне нужно запустить код — а как скомпилить видео — не знаю.


ОК! Понеслась!
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[13]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 17.08.22 07:52
Оценка:
Здравствуйте, Shmj, Вы писали:

S>>>Т.е. задача — отсортировать около 200 Гб. бинарных данных и размер одной записи около 100 Кб? Такая задача?

НС>>Нет. Задача была сделать дифф в таком объеме.
S>Давай конкретнее.

Зачем?

S>>>Почему ты думаешь что Berkeley DB сожрет гигабайты памяти?

НС>>А ты попробуй.
S>Пробовал

Каким образом?

S> — памяти много не жрет — там применен B-tree.


Сколько сожрет памяти полный дифф двух кусков по 100Гб? А то "много не жрет" — понятие растяжимое.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 17.08.22 14:12
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>ОК! Понеслась!


Во-первых, сразу ошибка —

var fileName = new Generator().Generate(2_000);
await new Sorter().Sort(fileName, 500);


Должно получаться 4 файла а получается 3. Какой тут сеньор, скажите? Причина — неумение писать понятный код.

Вот это:



— содержит баг. Сначала читается строка и потом проверяется конец файла — по этому эта последняя строка не будет учтена. Исправить очень просто и наглядно вот так, пишу как для дебилов — а то вы все умные, пока практики не коснется:

  Скрытый текст


Ниже еще один баг:



— это нужно для случаев, если i != 0 как раз.

Скорее всего быстрее будет задействовать b-tree c неким буффером в памяти.
Отредактировано 17.08.2022 18:14 Shmj . Предыдущая версия . Еще …
Отредактировано 17.08.2022 17:52 Shmj . Предыдущая версия .
Отредактировано 17.08.2022 15:13 Shmj . Предыдущая версия .
Отредактировано 17.08.2022 14:56 Shmj . Предыдущая версия .
Отредактировано 17.08.2022 14:29 Shmj . Предыдущая версия .
Отредактировано 17.08.2022 14:26 Shmj . Предыдущая версия .
Отредактировано 17.08.2022 14:25 Shmj . Предыдущая версия .
Re[5]: Тестовое задание Senior .Net - критикуйте
От: RushDevion Россия  
Дата: 17.08.22 15:29
Оценка:
S>Скорее всего быстрее будет задействовать b-tree c неким буффером в памяти.

Так у тебя же не ревью просили, а "встречный код, который лучше, быстрее, красивее".

Я лично с интересом посмотрю твою реализацию на b-tree.
Отредактировано 17.08.2022 15:38 RushDevion . Предыдущая версия .
Re[6]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 17.08.22 15:41
Оценка: +2
Здравствуйте, RushDevion, Вы писали:

RD>Я лично с интересом посмотрю твою реализацию на b-tree.


Сначала дайте рабочий код — этот не работает. А то им написать просто рабочую версию лень а мне пиши...

Это не ревью а просто показал что код не работает в принципе.
Отредактировано 17.08.2022 15:42 Shmj . Предыдущая версия .
Re[2]: Тестовое задание Senior .Net - критикуйте
От: IT Россия linq2db.com
Дата: 17.08.22 19:42
Оценка: +2
Здравствуйте, karbofos42, Вы писали:

K>Человек в критичной задаче активно использует LINQ-запросы, в том числе и OrderBy.


Ты удивишься, но на массивах и листах линковский OrderBy может оказаться значительно быстрее, чем ты себе можешь представить.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 17.08.22 22:02
Оценка: -1
Здравствуйте, IT, Вы писали:

IT>Ты удивишься, но на массивах и листах линковский OrderBy может оказаться значительно быстрее, чем ты себе можешь представить.


Может я что-то не так делал, но много раз приходилось что-то оптимизировать, профилятор в итоге показывал прожорливыми LINQ-запросы и OrderBy в том числе.
Даже банальное переписывание в лоб на for, Array.Sort и т.п. давали существенный выигрыш.
В большинстве повседневных задач меня LINQ в целом и OrderBy в частности вполне устраивают, но там и не заметна разница между 10 мс и 300мс.
В подобную задачу я бы не стал LINQ брать. Профит сомнителен (сложных конструкций нет и нет страха навертеть нечитаемый код без LINQ), а просадка в производительности всё же будет.
Re[4]: Тестовое задание Senior .Net - критикуйте
От: zx zpectrum  
Дата: 17.08.22 22:35
Оценка: :)
K>Ну, сложно практическую задачу выдумать, чтобы там адекватный объём был, а не проект, который подготавливать месяц, а соискателю вникать на неделю.
На этот случай существует сугубо прагматический вариант тестового задания, который, по какой-то неведомой причине, встречается на практике довольно редко. Намеренно хреновый проект, нашпигованный сбоями, неоптимальностями, антипаттернами, и прочими злодеяниями. Чем больше кандидат поправит за отведённое время — тем лучше. Встречалось такое в конторе, продуктами которой пользуются сотни миллионов. Не зажравшийся бигтех, а твёрдые хорошисты, всё как я люблю)) На пяток лет сработались, пока не надоело однообразие

А один раз было ещё интереснее. Собеседовался у швейцарского PhD, замутившего свой бизнесок. Никаких гномиков, никакой сортировочной дерганины, никакого карго-культизма имени гугеля. Он выдал мне проект, на этот раз ровный и работающий, со словами: не буду мучить тебя бессмысленным сотрясением воздуха, просто добавь туда, какую придумаешь и сможешь реализовать за разумное время, новую функциональность или улучшение существующей.
Re[5]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 18.08.22 01:52
Оценка: +1
Здравствуйте, Shmj, Вы писали:


S>Скорее всего быстрее будет задействовать b-tree c неким буффером в памяти.


все это конечно замечательно, но все же хотелось бы прикоснуться к прекрасному.
Явите миру плиз ЭТАЛОН и ИДЕАЛ.
Так чтобы последнему джуну было понятно.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: Оффтопик
От: DiPaolo Россия  
Дата: 18.08.22 02:24
Оценка: 7 (3)
S>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

Кстати, МакОСь умеет в последних версиях копировать текст с картинок. Можно сделать скриншот и выделить кусок кода прямо с него.



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

using System. I0;
using System.Ling;
-namespace Stream.Profiling
•class• Line•: • IComparable<Line›
-{
references
•public-Line(string-line)
•int • pos'=-line.IndexOf(".");
• Number•=• int.Parse(line.Substring(0, pos));
- Word•=-line.Substring (pos+•2);
•public-int-Number-(•get;-set;•}
• public string word (•get; set; )
O references
•public- int-CompareTo(Line-other)
{
...int-result-=-Word.CompareTo(other.Word);
- if - (result !=-0)
*return result;
• •)
Патриот здравого смысла
Re[5]: Тестовое задание Senior .Net - критикуйте
От: DiPaolo Россия  
Дата: 18.08.22 02:49
Оценка:
S>- содержит баг. Сначала читается строка и потом проверяется конец файла — по этому эта последняя строка не будет учтена. Исправить очень просто и наглядно вот так, пишу как для дебилов — а то вы все умные, пока практики не коснется:

S>
  Скрытый текст
S>Image: 1661019239


но и у вас ошибка: в случае, если на входе будет пустой файл, цикл выполнится один раз, и переменная i уже будет 1 после цикла. Что приведет к ошибкам ниже.
Патриот здравого смысла
Re[6]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 18.08.22 02:54
Оценка:
Здравствуйте, DiPaolo, Вы писали:

S>>- содержит баг. Сначала читается строка и потом проверяется конец файла — по этому эта последняя строка не будет учтена. Исправить очень просто и наглядно вот так, пишу как для дебилов — а то вы все умные, пока практики не коснется:


S>>
  Скрытый текст
S>>Image: 1661019239


DP>но и у вас ошибка: в случае, если на входе будет пустой файл, цикл выполнится один раз, и переменная i уже будет 1 после цикла. Что приведет к ошибкам ниже.




Потому что нужно использовать библиотечную функцию, а не изобретать велосипед
https://docs.microsoft.com/en-us/dotnet/api/system.io.file.readlines?view=net-6.0
— прочитать
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.chunk?view=net-6.0
— разбить
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 18.08.2022 3:07 Разраб . Предыдущая версия .
Re[6]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 18.08.22 06:02
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>все это конечно замечательно, но все же хотелось бы прикоснуться к прекрасному.

vaa>Явите миру плиз ЭТАЛОН и ИДЕАЛ.
vaa>Так чтобы последнему джуну было понятно.

Пока времени нет вылизывать, но вот просто для сравнения с пакетом LevelDB.Standard:

 static async Task SimpleStupidVersion()
        {
            var sw = Stopwatch.StartNew();

            var options = new Options
            {
                CreateIfMissing = true,
                Cache = new Cache(10000),
            };

            using var db = new DB(options, @"D:\_TEMP\Test\t1.db");

            using var reader = new StreamReader(@"D:\_TEMP\Test\L1000000.txt");

            while (!reader.EndOfStream)
            {
                var line = await reader.ReadLineAsync();
                db.Put(line, "");
            }

            using var writer = new StreamWriter(@"D:\_TEMP\Test\" + "result2.txt");

            foreach (var rec in db)
            {
                var line = Encoding.UTF8.GetString(rec.Key);
                writer.WriteLine(line);
            }

            Console.WriteLine($"Execution took: {sw.Elapsed}");
        }


Работает в 1.5 раз быстрее на 1 млн. записей. Что обозначает — направление мы выбрали правильное.

Да, здесь есть минусы — LevelDB не поддерживает две записи с одинаковыми ключами, по этому теряет дубликат, но это решаемо.

Так же здесь нет оптимизаций — есть еще место — вносить не по одной строке а пакетом. Ну и сортировка здесь тупая — просто сортируем строки.

Все равно видно что направление верное — ничего изобретать не нужно. Просто тупо кладешь в табличку и достаешь уже сортированные значения.

Что еще раз доказывает — современное программирование — это не про алгоритмы. Это про знание библиотек, стандаротов, языка и пр. Т.е. своего рода приведение из одного стандарта в другой.
Отредактировано 18.08.2022 6:08 Shmj . Предыдущая версия . Еще …
Отредактировано 18.08.2022 6:02 Shmj . Предыдущая версия .
Re[6]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 18.08.22 16:37
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>все это конечно замечательно, но все же хотелось бы прикоснуться к прекрасному.

vaa>Явите миру плиз ЭТАЛОН и ИДЕАЛ.
vaa>Так чтобы последнему джуну было понятно.

Ну так что
Автор: Shmj
Дата: 18.08.22
?

Понимаете теперь в чем суть современного программирования? Остались еще сомнения?
Re[7]: Тестовое задание Senior .Net - критикуйте
От: RushDevion Россия  
Дата: 18.08.22 17:54
Оценка:
S>Ну так что
Автор: Shmj
Дата: 18.08.22
?

S>Понимаете теперь в чем суть современного программирования? Остались еще сомнения?

Коллеги, я разочарован.

Наивно полагал, что придет умный человек и покажет реализацию B-Tree на C#, которая порвет всех в клочья, отсортировав 1Гб за 10 наносекунд.
А тут просто загнали все в embeded-базу, да вдобавок на требование по сортировке забили.
Re[7]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 19.08.22 01:50
Оценка: 18 (1)
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>все это конечно замечательно, но все же хотелось бы прикоснуться к прекрасному.

vaa>>Явите миру плиз ЭТАЛОН и ИДЕАЛ.
vaa>>Так чтобы последнему джуну было понятно.

S>Пока времени нет вылизывать, но вот просто для сравнения с пакетом LevelDB.Standard:


S>Работает в 1.5 раз быстрее на 1 млн. записей. Что обозначает — направление мы выбрали правильное.


А так в 4 раза
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[7]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 19.08.22 01:51
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>все это конечно замечательно, но все же хотелось бы прикоснуться к прекрасному.

vaa>>Явите миру плиз ЭТАЛОН и ИДЕАЛ.
vaa>>Так чтобы последнему джуну было понятно.

S>Ну так что
Автор: Shmj
Дата: 18.08.22
?


S>Понимаете теперь в чем суть современного программирования? Остались еще сомнения?


Неплохо размялись. Продолжаем вести наблюдение!
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Оффтопик
От: Sharowarsheg  
Дата: 19.08.22 02:06
Оценка: +1
Здравствуйте, DiPaolo, Вы писали:



DP>Конкретно в этом примере у чувака стоит отображение скрытых символов, потому получилось так себе. Но в любом случае, неплохое начало, если надо получить исходный код из видео


Это политически не очень хорошо. То есть, конечно, OCR это интересно, но недоумка, который сделал код в видео и не выложил текста, надо в лучшем случае наказывать, а в худшем игнорировать; и уж точно не применять OCR, чтобы потакать его контрмозгам.

В следующий раз кто-нть морзянкой код напищит.
Отредактировано 19.08.2022 2:10 Sharowarsheg . Предыдущая версия .
Re[8]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 05:59
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Наивно полагал, что придет умный человек и покажет реализацию B-Tree на C#, которая порвет всех в клочья, отсортировав 1Гб за 10 наносекунд.


Зачем? B-Tree уже сто раз писан-переписан. Писать его имеет право только элита — которая получает 500 тыс. долларов в год. Если ты за 30-ник работаешь — не мни о себе и не трать время — твое дело просто уметь использовать то, что пишет элита. Максимум — перевести с языка C на свой модный язык то что написала элита.

RD>А тут просто загнали все в embeded-базу, да вдобавок на требование по сортировке забили.


Именно — именно так и нужно делать без вариантов. Для требования по сортировке — там есть кастомный компаратор — нужно реализовать. Будет точно не медленнее. А главное что это 10 срок кода простого и ясного супротив 200 строк кода.
Re[8]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 06:05
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>А так в 4 раза


Давайте на правоверном C# а не на экзотике.
Re[9]: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 19.08.22 07:15
Оценка: +1 :)
Здравствуйте, Shmj, Вы писали:

S>Давайте на правоверном C# а не на экзотике.


То ли дело LevelDB — это C# и не экзотика (последний релиз пакета LevelDB.Standard вышел 18.07.2019 и в github последние коммиты были 3 года назад)
Re[10]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 07:45
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>То ли дело LevelDB — это C# и не экзотика (последний релиз пакета LevelDB.Standard вышел 18.07.2019 и в github последние коммиты были 3 года назад)


За деньги найду другую библиотеку, которая имеет поддержку лучше. Есть вариант задействовать Oracle Berkeley DB.

Суть вот в чем — задача сводится к подбору библиотеки, а не к самостоятельному велосипедостроению.
Re[11]: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 19.08.22 08:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>За деньги найду другую библиотеку, которая имеет поддержку лучше. Есть вариант задействовать Oracle Berkeley DB.


Если уж такая привязка к C#, то и библиотека должна быть на нём написана, чтобы можно было доработать напильником.
Иначе не вижу разницы. Код на F# так же делаешь библиотекой и пользуешься из C#, ровно как этой LevelDB или ещё чем.

S>Суть вот в чем — задача сводится к подбору библиотеки, а не к самостоятельному велосипедостроению.


Думаешь прокатит принести потенциальному работодателю ту поделку с выбранной библиотекой, которую 3 года как не поддерживают и где нужно ещё как-то допилить сортировку и т.п.?
Re[12]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 08:35
Оценка:
Здравствуйте, karbofos42, Вы писали:

S>>Суть вот в чем — задача сводится к подбору библиотеки, а не к самостоятельному велосипедостроению.


K>Думаешь прокатит принести потенциальному работодателю ту поделку с выбранной библиотекой, которую 3 года как не поддерживают и где нужно ещё как-то допилить сортировку и т.п.?


Сортировку там допиливать не нужно — компарер написать:



Мне просто лень бесплатно это делать — принцип и так ясен.

Библиотека написана 3 года назад и отлично работает — исходники открыты. Только дурак пишет все с нуля и потом баги ловит.

Нормальный работодатель должен понимать, что желающий все писать с нуля — быстро сольет бюджет и не решит проблемы бизнеса. А тот, кто задействует как можно больше готовых блоков, а не пишет все с нуля — быстрее решит реальные проблемы.
Отредактировано 19.08.2022 8:50 Shmj . Предыдущая версия .
Re[13]: Тестовое задание Senior .Net - критикуйте
От: karbofos42 Россия  
Дата: 19.08.22 09:08
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Библиотека написана 3 года назад и отлично работает — исходники открыты.


Исходники самой LevelDB на С++. Кто в них разбираться будет? Ты тут F# забраковал, т.к. он не C#.

S>Только дурак пишет все с нуля и потом баги ловит.


только дурак тащит в проект зависимости когда попало и от чего попало.

S>Нормальный работодатель должен понимать, что желающий все писать с нуля — быстро сольет бюджет и не решит проблемы бизнеса. А тот, кто задействует как можно больше готовых блоков, а не пишет все с нуля — быстрее решит реальные проблемы.


А потом: https://www.securitylab.ru/news/530636.php
Либо работодатель будет тратиться уже на юристов: https://www.kommersant.ru/doc/4233349
У нормального работодателя всегда есть анализ всех вариантов и выбирается наиболее оптимальный в существующих условиях.
Нет проблемы ни велосипедить, ни взять готовое, нужно понимать только к чему это всё может привести.
Re[14]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 09:12
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Исходники самой LevelDB на С++. Кто в них разбираться будет? Ты тут F# забраковал, т.к. он не C#.


C++ более распространен. Экзотика не нужна — некогда тратить на нее время.

S>>Только дурак пишет все с нуля и потом баги ловит.

K>только дурак тащит в проект зависимости когда попало и от чего попало.

Популярные библиотеки — ОК.

K>У нормального работодателя всегда есть анализ всех вариантов и выбирается наиболее оптимальный в существующих условиях.

K>Нет проблемы ни велосипедить, ни взять готовое, нужно понимать только к чему это всё может привести.

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

Велосипедить можно если ты осиил Кнута и работаешь на зарплате 500 тыс. долларов в год.
Re[9]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 19.08.22 09:50
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>А так в 4 раза


S>Давайте на правоверном C# а не на экзотике.


Декомпилишь ILSpy в сишарп. Бесплатно.
На F# код просто короче получается.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 19.08.22 10:23
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Давайте на правоверном C# а не на экзотике.


Там нет ничего, что бы помешало переписать чисто механически на шарпе.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[7]: Тестовое задание Senior .Net - критикуйте
От: Ночной Смотрящий Россия  
Дата: 19.08.22 10:23
Оценка: :)
Здравствуйте, Shmj, Вы писали:

S>Понимаете теперь в чем суть современного программирования? Остались еще сомнения?


Никаких. Никаких сомнений в сути того программирования, которым ты занимаешься.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 10:51
Оценка: :)))
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Понимаете теперь в чем суть современного программирования? Остались еще сомнения?

НС>Никаких. Никаких сомнений в сути того программирования, которым ты занимаешься.

Ну если вы элита с зарплатой 500 тыс. долларов в год — то да, к вам это не относится. Таких на форуме не много.

Я не элита, Кнута не осилил — извините.
Re[10]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 11:02
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Там нет ничего, что бы помешало переписать чисто механически на шарпе.


Пишите — посмотрим.
Re[10]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 11:03
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Декомпилишь ILSpy в сишарп. Бесплатно.

vaa>На F# код просто короче получается.

Делайте — посмотрим.
Re[11]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 19.08.22 11:18
Оценка: :)
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>Декомпилишь ILSpy в сишарп. Бесплатно.

vaa>>На F# код просто короче получается.

S>Делайте — посмотрим.

Зачем? это имеет право только элита — которая получает 500 тыс. долларов в год.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[9]: Тестовое задание Senior .Net - критикуйте
От: DiPaolo Россия  
Дата: 19.08.22 11:34
Оценка: :))
S>Зачем? B-Tree уже сто раз писан-переписан. Писать его имеет право только элита — которая получает 500 тыс. долларов в год. Если ты за 30-ник работаешь — не мни о себе и не трать время — твое дело просто уметь использовать то, что пишет элита. Максимум — перевести с языка C на свой модный язык то что написала элита.

Патриот здравого смысла
Re[4]: Тестовое задание Senior .Net - критикуйте
От: Буравчик Россия  
Дата: 19.08.22 16:17
Оценка: 45 (3)
Здравствуйте, vaa, Вы писали:

S>>>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>>>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.

Я не критиковал, но решил сделать задание. Можно и этот код покритиковать

На питоне не сложно делается с использованием итераторов (в C# — генераторы).
Также хорошо, что есть библиотечная функция для слияния итераторов. Но и ее написать несложно на основе heap (структуры)

Собственно, вся логика в четырех строчках:
input_lines = input_file.read_lines()
chunks_files = _save_chunks(input_lines, temp_dir=temp_dir)
sorted_lines = _merge_chunks(chunks_files)
output_file.write_lines(sorted_lines)


  Код сортировки
import heapq
import os
import tempfile
from typing import Iterator, List, Callable
import more_itertools

TLine = bytes


def compare_key(line):
    i = line.index(b'.')
    number = int(line[:i])
    string = line[i + 2:]
    return string, number


class File:
    """Представляет файл со строками"""

    def __init__(self, filename: str) -> None:
        self.filename = filename

    def write_lines(self, lines: Iterator[TLine]) -> None:
        with open(self.filename, 'wb') as f:
            for line in lines:
                f.write(line)
                f.write(b'\n')

    def read_lines(self) -> Iterator[TLine]:
        with open(self.filename, 'rb') as f:
            for line in f:
                yield line.rstrip(b'\n')


class Sorter:
    """Сервис, реализующий внешнюю сортировку файла"""

    def __init__(self, chunk_size: int = 10_000, compare_key_func: Callable = None) -> None:
        # количество строк, одновременно загружаемых в память для сортировки
        self.chunk_size = chunk_size
        # строки в файле сортируются по значению, возвращенному этой функцией
        self.compare_key_func = compare_key_func or (lambda line: line)

    def sort_file(self, input_file: File, output_file: File) -> None:
        """Сортирует строки исходного файла и записывает в выходной файл"""

        with tempfile.TemporaryDirectory() as temp_dir:
            input_lines = input_file.read_lines()
            chunks_files = self._save_chunks(input_lines, temp_dir=temp_dir)
            sorted_lines = self._merge_chunks(chunks_files)
            output_file.write_lines(sorted_lines)

    def _save_chunks(self, lines: Iterator[TLine], temp_dir: str) -> Iterator[File]:
        """Разбивает поток строк на отсортированные чанки"""

        chunks = more_itertools.ichunked(lines, self.chunk_size)
        for chunk_index, chunk_lines in enumerate(chunks):
            sorted_lines = sorted(chunk_lines, key=self.compare_key_func)
            filename = os.path.join(temp_dir, f'{chunk_index}.txt')
            chunk_file = File(filename)
            chunk_file.write_lines(sorted_lines)
            yield chunk_file

    def _merge_chunks(self, files: List[File]) -> Iterator[TLine]:
        """Объединяет отсортированные файлы-чанки в поток отсортированных строк"""

        iterators = [file.read_lines() for file in files]
        return heapq.merge(*iterators, key=self.compare_key_func)


Sorter().sort_file(input_file=File(...), output_file=File(...))


  Код генерации
class LineGenerator:
    """Сервис для генерации строк в соответствии с заданием"""

    # диапазон числа, стоящего в начале строки
    NUMBER_RANGE = (0, 10_000)
    # диапазон длины текстовой части строки
    LINE_LENGTH_RANGE = (20, 200)
    # допустимые символы в текстовой части строки
    LETTERS = 'abcdefghijklmnopqrstuvwxyz'
    # количество предопределенных вариантов текстовой части строки
    # нам нужны предопределенные варианты, чтобы обеспечить повторение некоторых строк в файле (по условию)
    DISTINCT_STRING_COUNT = 1000

    def generate_line(self) -> TLine:
        number = random.randint(*self.NUMBER_RANGE)
        string = random.choice(self._strings)
        return f'{number}. {string}'.encode()

    def generate_many_lines(self, count) -> Iterator[TLine]:
        return (self.generate_line() for _ in range(count))

    @cached_property
    def _strings(self) -> List[str]:
        strings = []
        for _ in range(self.DISTINCT_STRING_COUNT):
            string_len = random.randint(*self.LINE_LENGTH_RANGE)
            string = ''.join(random.choice(self.LETTERS) for _ in range(string_len))
            strings.append(string)
        return strings


lines = LineGenerator().generate_many_lines(100_000_000)
File(...).write_lines(lines)
Best regards, Буравчик
Отредактировано 19.08.2022 16:28 Буравчик . Предыдущая версия . Еще …
Отредактировано 19.08.2022 16:19 Буравчик . Предыдущая версия .
Re[5]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 19.08.22 16:53
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>Собственно, вся логика в четырех строчках:


Тут нужно сравнивать не н 1 млн. записей — а строить график — чтобы было понятно как изменяется скорость с увеличением числа записей. На маленьком объеме может выигрывать алгоритм А, на большом объеме — алгоритм Б.
Re[5]: Тестовое задание Senior .Net - критикуйте
От: cures Россия cures.narod.ru
Дата: 19.08.22 17:42
Оценка:
Здравствуйте, zx zpectrum, Вы писали:

ZZ>Намеренно хреновый проект, нашпигованный сбоями, неоптимальностями, антипаттернами, и прочими злодеяниями. Чем больше кандидат поправит за отведённое время — тем лучше.


ZZ>просто добавь туда, какую придумаешь и сможешь реализовать за разумное время, новую функциональность или улучшение существующей.


Ага, злодеяния им поправь, функциональность добавь. Десяток-другой таких "кандидатов" — и уже никаким программистам платить ничего не надо.
Re[11]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 19.08.22 23:55
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>Декомпилишь ILSpy в сишарп. Бесплатно.

vaa>>На F# код просто короче получается.

S>Делайте — посмотрим.


Уболтал, языкастый!

Посмотри, может ошибки какие?
PS F# ровно с такой же скоростью отработал. а код чище
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 20.08.22 00:00
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>Здравствуйте, vaa, Вы писали:


S>>>>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>>>>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.

Б>Я не критиковал, но решил сделать задание. Можно и этот код покритиковать

я на реплику S среагировал.
вообще в тексте ТЗ в примере в строках присутствуют и большие и маленькие и пробелы, + почему-то в оригинале
генерятся 10_000 строк которые потом комбинируются, а не заветные 2 млн. опять расхождение с тз,
вообщем, сложный случай.
по факту сделал вывод, что знание ООП, а оно в оригинале неплохо прокачано,
может сыграть злую шутку.
и второй без ООП можно прекрасно жить и писать все на функциях.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[12]: Тестовое задание Senior .Net - критикуйте
От: Shmj Ниоткуда  
Дата: 20.08.22 09:42
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>Посмотри, может ошибки какие?

vaa>PS F# ровно с такой же скоростью отработал. а код чище

Так вы же сортируете весь входной файл в памяти:



Это допустимо пока размер файла не превышает выделенную оперативную память для вашей проги. Для .Net Core емнип нельзя более 2 GB на объект.
Отредактировано 20.08.2022 9:44 Shmj . Предыдущая версия .
Re[4]: Тестовое задание Senior .Net - критикуйте
От: _FRED_ Черногория
Дата: 21.08.22 11:13
Оценка:
Здравствуйте, vaa, Вы писали:

S>>>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>>>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.
S>>Сначала дай мне этот код. Вроде там ошибка в рассчетах — но мне нужно запустить код — а как скомпилить видео — не знаю.

vaa>ОК! Понеслась!


Я своё решение в алгоритмы закинул, Как правильно сортировать содержимое больших файлов?, жду критику и сравнение
Help will always be given at Hogwarts to those who ask for it.
Re[4]: Тестовое задание Senior .Net - критикуйте
От: _FRED_ Черногория
Дата: 21.08.22 11:52
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>ОК! Понеслась!


Я что-то не понял: поссылке выше ваше решение или решение автора видео или это вы и есть на видео?
Help will always be given at Hogwarts to those who ask for it.
Re[5]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 22.08.22 01:15
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, vaa, Вы писали:


vaa>>ОК! Понеслась!


_FR>Я что-то не понял: поссылке выше ваше решение или решение автора видео или это вы и есть на видео?


Я такой фигней не страдаю, так извратиться при чтении текстового файла мог только очень странный месье.
я конечно ку-ку но не до такой степени. напротив, часто ловлю себя что не хватает объектов к коде))
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[5]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 22.08.22 01:37
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, vaa, Вы писали:


S>>>>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео

vaa>>>>Критикуешь — предлагай. Ждемс встречный код, лучше, красивее, быстрее.
S>>>Сначала дай мне этот код. Вроде там ошибка в рассчетах — но мне нужно запустить код — а как скомпилить видео — не знаю.

vaa>>ОК! Понеслась!


_FR>Я своё решение в алгоритмы закинул, Как правильно сортировать содержимое больших файлов?, жду критику и сравнение


Красивый код. Я однако не претендую на звание Ылиты, цитируя ТС.
просто удивило, что при здравом подходе(использовать что-то готовое), не знать что ReadLines читает файл построчно это довольно странно.
И уж если бить из пушки, то я бы спарк попробовал, где давно читал, что вот как раз на таких задачках но уделывает по скорости наколенночные решения.

ПС неприятно удивилен, что дотнет у меня (ждал больше часа), стандартным OrderBy не осилил 2.5 ГБ файл.
ПСС изначально был задан тон обсуждения, что всем плевать на суть задачи, главное, что код был в графике
у меня ресурсы нейронные сильно ограничены чтобы кидаться решать каждую задачу с форума.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[13]: Тестовое задание Senior .Net - критикуйте
От: vaa  
Дата: 22.08.22 03:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, vaa, Вы писали:


vaa>>Посмотри, может ошибки какие?

vaa>>PS F# ровно с такой же скоростью отработал. а код чище

S>Так вы же сортируете весь входной файл в памяти:


S>Image: 1661247691


S>Это допустимо пока размер файла не превышает выделенную оперативную память для вашей проги. Для .Net Core емнип нельзя более 2 GB на объект.


Это допустимо при любом размере файла. ReadLines читает файл построчно(размер строки ~ 100 английский символов).
Однако, да скорость после 1Гб исходного файла падает до нуля примерно
Стырил код слияния с сабжа:
Чанки
Теперь давайте замерим ваш код сортировки через базку.
только честно: замеряем время с временем создания таблицы, ключ обязательно составной (строка+номер). желательно как у меня все строки случайные без повторов).
Моя конфа:

Процессор Intel(R) Core(TM) i3-6100U CPU @ 2.30GHz 2.30 GHz
Оперативная память 8,00 ГБ (доступно: 7,90 ГБ)
Тип системы 64-разрядная операционная система, процессор x64

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: Тестовое задание Senior .Net - критикуйте
От: _FRED_ Черногория
Дата: 22.08.22 06:12
Оценка: +1
Здравствуйте, vaa, Вы писали:

vaa>просто удивило, что при здравом подходе(использовать что-то готовое), не знать что ReadLines читает файл построчно это довольно странно.


Так это и не важно, ведь
  • линковский OrderBy
  • внутри
  • всё вычитанное
  • загоняет в единый буфер (памяти)
  • который сортируется и
  • перебирается, "лениво" возвращая по одному элементу из памяти, а не из файла
  • Help will always be given at Hogwarts to those who ask for it.
    Re[7]: Тестовое задание Senior .Net - критикуйте
    От: vaa  
    Дата: 22.08.22 06:16
    Оценка:
    Здравствуйте, _FRED_, Вы писали:

    _FR>Здравствуйте, vaa, Вы писали:


    vaa>>просто удивило, что при здравом подходе(использовать что-то готовое), не знать что ReadLines читает файл построчно это довольно странно.


    _FR>Так это и не важно, ведь

    _FR>
  • линковский OrderBy
    _FR>
  • внутри
    _FR>
  • всё вычитанное
    _FR>
  • загоняет в единый буфер (памяти)
    _FR>
  • который сортируется и
    _FR>
  • перебирается, "лениво" возвращая по одному элементу из памяти, а не из файла

    ну, по крайней мере, ограничений на 2Гб нет, а следовательно имеем полное право вычитывать столько сколько сможем прожевать.
  • ☭ ✊ В мире нет ничего, кроме движущейся материи.
    Re[8]: Тестовое задание Senior .Net - критикуйте
    От: _FRED_ Черногория
    Дата: 22.08.22 06:33
    Оценка:
    Здравствуйте, vaa, Вы писали:

    vaa> ну, по крайней мере, ограничений на 2Гб нет, а следовательно имеем полное право вычитывать столько сколько сможем прожевать.


    Мне кажется, что это противоречит условию задачи.
    Help will always be given at Hogwarts to those who ask for it.
    Re[9]: Тестовое задание Senior .Net - критикуйте
    От: vaa  
    Дата: 22.08.22 06:37
    Оценка:
    Здравствуйте, _FRED_, Вы писали:

    _FR>Здравствуйте, vaa, Вы писали:


    vaa>> ну, по крайней мере, ограничений на 2Гб нет, а следовательно имеем полное право вычитывать столько сколько сможем прожевать.


    _FR>Мне кажется, что это противоречит условию задачи.


    я предпочитаю решать задачи поэтапно, время когда пытался сразу все предусмотреть прошло.
    Не стоит оно затраченных усилий. Однако по просьбе Shmj добавил таки чанки.
    ☭ ✊ В мире нет ничего, кроме движущейся материи.
    Re[14]: Тестовое задание Senior .Net - критикуйте
    От: Shmj Ниоткуда  
    Дата: 22.08.22 07:18
    Оценка:
    Здравствуйте, vaa, Вы писали:

    vaa>Это допустимо при любом размере файла. ReadLines читает файл построчно(размер строки ~ 100 английский символов).


    Но какой объект возвращает, массив строк?

    Попробуй создать массив такой:

    var b1 = new byte[2L * 1024 * 1024 * 1024 — 57];

    Ок.

    А теперь такой:

    var b2 = new byte[2L * 1024 * 1024 * 1024 — 56];

    Облом?

    vaa>Однако, да скорость после 1Гб исходного файла падает до нуля примерно

    vaa>Стырил код слияния с сабжа:
    vaa>Чанки
    vaa>Теперь давайте замерим ваш код сортировки через базку.
    vaa>только честно: замеряем время с временем создания таблицы, ключ обязательно составной (строка+номер). желательно как у меня все строки случайные без повторов).

    Я уже замерял — +- одинаково. Главное что вы потратите пол дня на написание а я 15 минут.

    Berkeley DB и Leve DB специально созданы для гигабайтов данных — так хранят блокчейн Bitcoin-а того же — 400 Гб. Гарантированно работает. Там нет таблиц, время на их создание не тратится.

    Ваше решение на больших данных скорее всего будет работать медленнее. Проверять времени нет — даже те же 600 Мб. сортируются около 2 десятков секунд. А нужно хотя бы 60 Гб. проиндексировать — это уже займет около часа. Да и не хочется ресурсы SSD расходовать на пустяки.
    Отредактировано 22.08.2022 7:38 Shmj . Предыдущая версия .
    Re[15]: Тестовое задание Senior .Net - критикуйте
    От: vaa  
    Дата: 22.08.22 09:58
    Оценка:
    Здравствуйте, Shmj, Вы писали:


    S>Я уже замерял — +- одинаково. Главное что вы потратите пол дня на написание а я 15 минут.

    Ну, вот, как можно без кода рассуждать предметно
    ☭ ✊ В мире нет ничего, кроме движущейся материи.
    Re[16]: Тестовое задание Senior .Net - критикуйте
    От: Shmj Ниоткуда  
    Дата: 22.08.22 12:08
    Оценка: -1
    Здравствуйте, vaa, Вы писали:

    S>>Я уже замерял — +- одинаково. Главное что вы потратите пол дня на написание а я 15 минут.

    vaa>Ну, вот, как можно без кода рассуждать предметно

    Если я напишу — то вы будете на своем компе проводить измерения? Мне не хочется тратить SSD-диск.

    Файл давайте 100 Гб. Интерес представляет только сортировка.
    Отредактировано 22.08.2022 12:25 Shmj . Предыдущая версия . Еще …
    Отредактировано 22.08.2022 12:24 Shmj . Предыдущая версия .
    Re[17]: Тестовое задание Senior .Net - критикуйте
    От: vaa  
    Дата: 23.08.22 01:14
    Оценка:
    Здравствуйте, Shmj, Вы писали:

    S>Здравствуйте, vaa, Вы писали:


    S>>>Я уже замерял — +- одинаково. Главное что вы потратите пол дня на написание а я 15 минут.

    vaa>>Ну, вот, как можно без кода рассуждать предметно

    S>Если я напишу — то вы будете на своем компе проводить измерения? Мне не хочется тратить SSD-диск.

    что за детский сад?
    S>Файл давайте 100 Гб. Интерес представляет только сортировка.
    2.5 отсортируй, мне достаточно будет.
    ☭ ✊ В мире нет ничего, кроме движущейся материи.
    Re[18]: Тестовое задание Senior .Net - критикуйте
    От: Shmj Ниоткуда  
    Дата: 23.08.22 06:03
    Оценка: -2
    Здравствуйте, vaa, Вы писали:

    S>>Если я напишу — то вы будете на своем компе проводить измерения? Мне не хочется тратить SSD-диск.

    vaa>что за детский сад?

    Если тебе не детский сад — нет проблемы тратить SSD на глупости — то почему не хочешь сам?

    S>>Файл давайте 100 Гб. Интерес представляет только сортировка.

    vaa>2.5 отсортируй, мне достаточно будет.

    2.5 просто в памяти. Чтобы это работало, добавьте директиву gcAllowVeryLargeObjects:

    https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcallowverylargeobjects-element?redirectedfrom=MSDN

    Интерес представляет реализация, когда данные намного больше размеров ОЗУ.

    В вашем глупом алгоритме мерджинга самое простое ускорение — это не писать сразу на диск по одной строчке а сбрасывать на диск уже когда поднакопится достаточно много данных.
    Re[2]: Оффтопик
    От: bobby23  
    Дата: 25.08.22 08:36
    Оценка:
    Здравствуйте, DiPaolo, Вы писали:

    S>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео


    DP>Кстати, МакОСь умеет в последних версиях копировать текст с картинок. Можно сделать скриншот и выделить кусок кода прямо с него.


    DP>Image: macos_copy_text.png


    https://www.addictivetips.com/ubuntu-linux-tips/copy-text-from-pictures-on-linux-with-textsnatcher/
    Re[2]: Оффтопик
    От: BlackEric http://black-eric.lj.ru
    Дата: 26.08.22 17:46
    Оценка: +1
    Здравствуйте, DiPaolo, Вы писали:

    S>>Ну хотя бы исходный код выложил куда — ну как это можно смотреть? Вот молодежь... Сначала текст картинками, теперь код в видео


    DP>Кстати, МакОСь умеет в последних версиях копировать текст с картинок. Можно сделать скриншот и выделить кусок кода прямо с него.


    FineReader такое умел много лет назад.
    https://github.com/BlackEric001
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.