• Как разместить N файлов по папкам?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Это задача об упаковке. Она сложная. И ближе даже не к задаче о рюкзаке, а к задаче о мульти-рюкзаке. Для больших размеров файлов и N решения, кроме переборного, нет.

    Если N маленькое, то есть быстрые алгоритмы вроде Динамического Программирования. Но там и перебор будет не то, чтобы сильно медленнее.

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

    Например, кладите файлы в текущую папку, пока они туда помещаются. Потом создавайте следующую папку. Заполняйте ее, пока размер папки + размер следующего файла <= 2Mb.

    Можно всякие эвристики сюда навешивать: например, отсортиовали файлы по размеру. Жадно пихаем самые большие файлы, пока помещается. Потом жадно пихаем самые маленькие. Потом начинаем новую папку.
    Ответ написан
    Комментировать
  • Как разместить N файлов по папкам?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Сортируешь все файлы по размеру
    2. Берешь самый большой файл и помещаешь в первую папку
    3. Дальше каждый файл по убыванию размера:
    1. Находишь папку с наименьшим оставшимся размером, который позволяет добавить туда файл
    2. Если таких нет - создаешь новую папку и кладешь туда
    Ответ написан
    7 комментариев
  • Какой вариант эндпоинта для получения книг по категории верный?

    nykakdelishki
    @nykakdelishki
    Системный аналитик
    бывает "наиболее правильный"

    1 Вариант
    Этот вариант удачен если вам важно выводит информацию о книжной(!) категории с определенным id

    Например /books/categories/1
    {
       id: 1,
       name: "Роман",
       description: "Такая категория для мечтателей любви",
       _links: {
          self: {
             href: "https://localhost:8080/books/categories/1"
          }
       },.
       etc
    }


    2 Вариант
    Напомню query параметры в RESTful используются только как фильтрация запроса.
    И если цель именно фильтровать все книги по категории => Лучший вариант

    Предположу, что нужен именно он.

    3 Вариант
    Возможен при условии если у книжных(!) категории еще какие нибудь книжки, манга, манхва и тд. Если у вас так берите этот вариант

    4 Вариант
    Этот вариант лучшие если у вас есть общие категории, например "Фантастика". А фантастика может быть книги, кино, сериалы и тд.

    П.С. Для соответствия RESTful важен не только путь но и то какой у тебя ответ
    П.С.2 Надеюсь мной не воспользовались через "закон Каннингема"
    Ответ написан
    Комментировать
  • Какой вариант эндпоинта для получения книг по категории верный?

    @Everything_is_bad
    не бывает "наиболее правильного"
    1, 2, 4 подходят, 2й хорош тем что можно задать несколько category и еще добавить других параметров
    в 3 очевидный переизбыток books
    Ответ написан
    Комментировать
  • Как это решать?

    Vindicar
    @Vindicar
    RTFM!
    1. Подумать.
    2. Написать код.

    А если серьёзно, задача сводится к разложению числа на заданные слагаемые. Это гуглится.
    Один из способов (необязательно самый быстрый) - рекурсивное разложение. Упрощенно, перебираешь все Ai меньшие N. Выкидываешь это Ai из рассматриваемого набора, и затем рекурсивно пытаешься составить число (N - Ai) из всех Aj, меньших или равных Ai (так как большие слагаемые ты уже рассмотрел).
    Углубляясь в рекурсию, рано или поздно ты наткнёшься на одну из двух ситуаций:
    а) среди Aj есть число, равное искомому. Решение найдено, осталось размотать рекурсию обратно и собрать в кучку использованные Ai.
    б) нет ни одного Aj, меньшего или равного искомому числу. Решения нет.
    В твоём случае будет ещё случай в) Сумма всех Ai меньше N. Решения нет, заплатить не удастся. Это можно проверить вообще сразу.

    Реализовать будет проще, если отсортируешь Ai в порядке убывания. Тогда вместо удаления Ai из списка слагаемых достаточно будет выбрать индекс i, с которого будешь начинать рассмотрение слагаемых - все элементы до i-го либо слишком велики, либо уже были рассмотрены и не пригодились.
    Ответ написан
    3 комментария
  • Стоит ли углубленно изучать многопоточность, асинхронное и паралельное программирование?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут есть два смысла. Первое - это "проскочить" на собеседовании. Если ты будешь его проходить
    на дот-нетчика то полюбому что-нибудь спросят. Может попросят написать какую-то задачу с двумя
    потоками где состояние потоков как-то разделяется или события от одного идут к другому.

    Из канонических задач на конкуренцию я припоминаю "спящий парикмахер" или официант. Не помню смысл - погугли сам. И задача об "обедающих философах" которая просто моделирует дедлок. И в этой
    же задаче дается разьяснение как дедлок убрать.

    Из параллелизма есть задача параллельного умножения двух больших матриц. Очень популярная
    и многократно обсужденная почти во всех It-ресурсах.

    И второй смысл - это просто знать способы распараллеливания медленно работающих задач.

    Современные фреймворки - тяготеют к тому чтобы разработчик не встречался с задачей конкуренции.
    Яркий пример - акторные фреймворки (Akka, Storm). А в задачах биг-даты - практически все
    сводятся к map-reduce и если ты хорошо сделал partitioning для своих таблиц или файлов то тебе вообще
    ничего делать не надо. Фреймворк сам позаботится. Добавляй только ему ресурсы (процессоры или ноды).

    И любые задачи массовой обработки файлов и сетевых событий - автоматом поднимают проблему мультиптоточки.

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

    Тоесть если будешь решать практические задачи - бери настоящие а не высосанные из пальца.
    Ответ написан
    Комментировать
  • Какую архитектуру использовать в ASP.NET Web API?

    vabka
    @vabka Куратор тега ASP.NET
    Токсичный шарпист
    В реальных проектах используют разные варианты исходя из личного опыта и настроения каждого члена команды на момент старта проекта.

    Может быть и супер сложный clean architecture + DDD + CQRS.
    Может быть Vertical Slice.
    А может быть и предельно простая архитектура даже без разделения на проекты (крайне недооценённый вариант на самом деле)

    У всего есть свои плюсы и минусы.
    Ответ написан
    Комментировать
  • Как именовать интеграционные тесты?

    Ommonick
    @Ommonick
    qa+dev (scala, golang, ts/js, api, grpc)
    Вынес комментарии в отдельный ответ.
    "например сценарий выдачи книг читателю на абонемент. "

    Делите тесты на 3 группы
    Позитивные: где успешно выдается книга / несколько книг на разные сроки
    Негативные: все перечисленные ваши + отказы бд, сервисов, пустой ответ и т.д.
    Валидация: где запросы на выдачу составлены неправильно, не переданы аргументы и т.д.
    в таких случаях не должно быть изменений в базе.

    Пример нейминга
    rentBook_negative_cases:
    -rentedByOtherCustomer
    -cannotRentAgeStrictedBook (также в позитивные идет кейс когда можем выдать эту книгу)
    -bookRentOverlimit
    Ответ написан
    Комментировать
  • Следует ли использовать геттеры и сеттеры внутри самого класса?

    @AndromedaStar
    .Net - monkey
    Правильный будет второй вариант, так как геттеры и сеттеры это интерфейс вашего класса для взаимодействия с внешним миром. А внутри методы должны работать с внутренним состоянием класса.
    Ответ написан
    1 комментарий
  • Следует ли использовать геттеры и сеттеры внутри самого класса?

    BorLaze
    @BorLaze
    Java developer
    Нет, нет и еще раз нет.

    Ну, представьте класс, работающий со временем. Геттер возвращает строку типа "01:23:45", сеттер оперирует с тем же юзер-френдли форматом. А внутри вы храните время в миллисекундах. Что, всякий раз конвертировать будете?

    Геттеры/сеттеры - это интерфейс для работы с объектами класса СНАРУЖИ. Что под капотом - это дело реализации, и операции ВНУТРИ класса должны идти с теми данными и в той форме, что определена архитектурой. А не тем, какая форма нужна потребителю класса.

    Ну, самый простой житейский пример - есть двигатель, и есть какой-то регулятор оборотов при нем. Этот регулятор должен обращаться напрямую к карбюратору или должен специальным рычагом давить на педаль газа?
    Ответ написан
    Комментировать
  • Гадание по коду на собеседовании. Как проверяют кандидатов?

    angrySCV
    @angrySCV
    machine learning, programming, startuping
    я бы показал БогоСорт https://ru.wikipedia.org/wiki/Bogosort - очень интересный алгоритм.
    Ответ написан
    Комментировать
  • Функции по "Чистому коду" - нужно ли это?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Это какой-то карго-культ получается. Корткие фнукции понятны - поэтому все функции должны быть короткими. Нет, они, а вернее, весь код должны быть понятными.

    Если несколько тривиальных строчек кода понятнее трех однострочных функций, то не надо их переписывать, только потому что введен этот принцип.
    Ответ написан
    Комментировать
  • Обязанности паттерна Repository, как лучше организовать код?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Если используется entityframework, то я бы сделал сервис который получает в конструкторе dbcontext и дополнительно ничего не городил. Потому что DbContext это уже UnitOfWork с репозиториями внутри.
    Ответ написан
    1 комментарий
  • Какой курс по архитекторству лучше пройти?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Я программист Java (Enterprise) недавно получил новую должность архитектора.

    Это как сказать > сделали фитнес инструктором, вопрос: подскажите как накачаться.
    Ответ написан
    23 комментария
  • Как разбираться в огромных исходниках?

    php666
    @php666
    PHP-макака
    Никак.
    Если речь про коммерческие проекты, где сменилось 10 поколений разрабов, то всё делается методом тыка, с осторожностью. Если проект не подразумевает модульности или ООП, то это жопа.

    Копаться в таких кучах кода - самая омерзительная часть профессии. Опыта никакого, практической пользы никакой. Программист выступает в роли эдакого дворника, копаясь в говнеце.
    Ответ написан
    4 комментария
  • Насколько сложен Vue в отличии от Reacta?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    Насколько он сложен вообще?

    Как по мне, для новичка Vue легче, в том случае если вы на должном уровне знаете JS.

    Много ли отличии?

    Нет
    https://ru.vuejs.org/v2/guide/comparison.html

    Нашел место для стажировки, но там пишут на Vue

    Если разработчик JS не слоупок, то для него не должно быть разницы на чем писать - Angular, React, Vue и тому подобные решения. Как правило под капотом крутится плюс минус одни и те же идеи, решающие одни и те же проблемы.
    Ответ написан
    Комментировать
  • Как лушче спроектировать максимально точную модель промышленного предприятия?

    Stalker_RED
    @Stalker_RED
    Какой паттерн проектирования ... возможно, абстрактная фабрика будет уместна
    да, конечно. Абстрактная фабрика более уместна, чем какая-то конкретная фабрика, типа парфюмерной фабрики, или птицефабрики.
    Ответ написан
    2 комментария
  • Что НЕ стоит начинать изучать в ближайшем будущем?

    @cython
    ActionScript и Flash в целом
    Ответ написан
    Комментировать
  • Чем отличаются Конкурентность, Многопоточность, Асинхронность и Параллелилизм?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    С терминами из этой области очень много путаницы. Например, в Java очень часто многопоточное выполнение называют асинхронным, хотя это не во всех контекстах верно. Проще всего разбираться на аналогиях. Процитирую самого себя:
    • Один человек ставит кастрюлю на плиту, ждёт пока она закипит, закидывает пельмени, ждёт пока сварятся, снимает, ставит вторую, ждёт пока закипит... - последовательное однопоточное выполнение.
    • Один человек ставит две кастрюли на плиту, как только одна из них закипела, забрасывает пельмени и т.д. - асинхронное выполнение.
    • Два человека ставят две кастрюли на одну плиту... - многопоточное конкурентное выполнение.
    • Два человека ставят две кастрюли на две плиты... - многопоточное параллельное выполнение.

    И для всех случаев, кроме первого, есть общий термин - многозадачность.
    Ответ написан
    1 комментарий
  • Как произходит механизм работы виртуальных методов я языках программирования и чем отличается от обычных методов?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Если простыми словами - то обычные методы лежат в памяти по заранее известному месту, и компилятор генерирует инструкцию "вызвать код по адресу XXX".
    Вызываемый код всегда один и тот же.

    с виртуальными - это зависит от класса, поэтому компилятор генерирует такие инструкции:
    "посмотреть что там за класс у obj, сходить в таблицу методов этого класса, найти там адрес для функции ToString, и вызвать код по этому адресу"

    для одного класса адрес будет XXX, и вызовется один код, для другого класса будет YYY и вызовется другой код.
    Ответ написан
    2 комментария