Ответы пользователя по тегу Java
  • Как узнать размер докер контейнера а так же сколько места он может занимать максимум?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. https://github.com/docker-java/docker-java/blob/b2...
    2. Это странный вопрос: нет понятия соединения между приложением и докером - есть только между узлами (машинами в сети). Докер в данном контексте особо не влияет на скорость
    Ответ написан
    6 комментариев
  • Как правильно возвращать значение из геттера?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Полностью зависит от контекста. Здесь нет правильного ответа.
    Можно выделить 2 случая:
    1. Код полностью твой
    2. Код будут использовать другие пользователи

    Если случай 1, то делай как хочешь. Здесь ты главный и знаешь что менять можно, а что нет
    Если случай 2, то тут уже зависит:
    - Если возвращаешь объект, который может (и должен) быть изменен - делай изменяемым
    - Если это слепок состояния - то можно подумать над неизменяемым состоянием
    - Можно прописать это (то что нельзя изменять объект) в документации к методу геттера

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

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Для C# это можно сделать 2 путями (без учета ручного создания):
    - Source Generators
    - Генерация IL кода (динамическая сборка)

    Лично я за 1 вариант, т.к. он будет быстрее в рантайме (все уже скомпилировано).
    Ответ написан
    2 комментария
  • Почему C# не кроссплатформенный?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    С# работает на виртуальной архитектуре

    Правильнее говорить: имеет собственный байт код. Приложения .NET не запускаются в виртуальной машине! Они компилируются JIT'ом и просто могут взаимодействовать с платформой, но нет никакой ВМ (например, песочница как в JVM отсутствует - ты видишь обычный процесс.
    Почему так?

    Потому что C# (и .NET Framework в частности) был ориентирован для работы под Windows и там очень много специфичных для нее деталей есть (взять ту же концепцию COM объектов).
    Java изначально поддерживала другую стратегию + была поддержка Linux (на котором сидели энтузиасты), что в итоге вылилось в то, что эти самые энтузиасты полюбили Java и начали писать на ней везде (а для этого надо было иметь реализацию JVM под нужную платформу)
    Сейчас ситуация меняется: .NET есть под MacOS, Linux и Windows. Это не полная кроссплатформенность, но философия другая: мы будем поддерживать несколько платформ, но делать это качественно. Сейчас упор делается в Linux и веб в частности.
    Дополнительно:
    - Спецификация открытая и ничто не мешает реализовать под свои платформы. Взять тот же .net nanoFramework, mono, unity
    - Mono вышел в 2004 году, а значит еще с тех пор .NET был кроссплатформенным
    Ответ написан
    2 комментария
  • Почему в semaphore методы acquaire() и tryAcquire() захватывают блокировку по разному?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    А что тут не понятно?
    1. Все потоки быстро запустились, вызвали tryAcquire и, т.к. он не блокирующий, тут же вызывается Thread.Sleep() на всех потоках - поэтому в первом случае в конце видны Thread-x-released (все потоки закончили работу). Время выполнения всего приложения -
    2. Все потоки постепенно захватывают семафор, т.е. ждут пока предыдущий его освободит и только потом засыпают. Уже тут время выполнения - 1с * (кол-во потоков / 2)

    P.S. Не забывай вызывать Thread.join после запуска!
    Ответ написан
    Комментировать
  • Как запустить группу асинхронных задач так, чтобы при ошибке выполнения одной другие продолжили выполнение?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Обернуть каждую в другую таску, которая проглатывает все исключения.
    try {
    // Работа
    } catch (Exception) {
    // Пусто
    }
    Ответ написан
    Комментировать
  • С чего начать разработку своего приложения?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1. Представь, что заходишь на свой сайт:
    - Что ты видишь?
    - На какие кнопки нажимаешь, чтобы что-то сделать?
    и т.д.
    Это интерфейс.
    2. Ты нажал на кнопку на сайте:
    - Куда идет запрос?
    - Какой обработчик/контроллер/эндпоинт?
    Это общая архитектура приложения
    3. Запрос пришел:
    - Какой контроллер должен обработать?
    - Какие интерфейсы исполняют эту бизнес логику (можно выделить несколько интерфейсов для разных юз. кейсов)?
    - Какой ответ должен получить клиент?
    Это уже уровень кода

    На уровне кода работаешь с модельками. Тут предлагаю TDD:
    - Определи методы/интерфейсы на разные юз. кейсы
    - Напиши тесты на каждый юз. кейс
    - Напиши реализацию
    - Вставь готовый код в контроллер

    В общих чертах, можно таким путем идти
    Ответ написан
    1 комментарий
  • Правильно ли я реализую абстрактный класс?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    На мой взгляд
    базовый функционал
    надо заменить на
    общий функционал
    и
    определенная часть функционала
    на
    конкретная реализация функционала
    , т.к. здесь скорее всего пример Шаблонного метода.
    В общем случае, догадка верна - абстрактный класс может использоваться в качестве базовой реализации на основании которой создаются другие классы
    Ответ написан
    Комментировать