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

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Не сказано главного: какого размера map ? т е сколько объектов ? десятки, сотни, десятки тысяч ?
    Второе, что не сказано - с какой частотой надо принудительно обновлять, и с какой частотой валятся события на обновление. Одно дело раз в 20мс другое дело раз в минуту. Либо же надо поддерживать эту структуру сортированной при любом обновлении ?
    Wataru вам предлагает вполне ризонно список использовать. Если у вас ключ - это время, то вам мап не нужен вообще. Возьмите очередь (Deque) и пихайте только что обновленный объект в конец.
    Для принудительного обновления: берете первые 4 из очереди и раздаете в потоки.
    Для обновления по событию: придется сначала найти объект в очереди. Для этого пройтись по ней итератором. Это позволяет, например, ConcurrentLinkedDeque Итератор там потокобезопасен, но не итерирует вставки, которые были после взятия итератора. Т е может быть такой момент, что пока вы итерируете, придет ещё одно событие и всунет вам новый объект который в итератор не попадет. Либо ваш поток обновит порядок, а итератор этого не увидит, поэтому приходящее событие нужно будет ручками синхронизировать с выдачей элементов на принудительное обновление. И что-то лучшее боюсь тут сложно придумать. Дайте больше информации о масштабах задачи. Если объектов много, то возможно вместо простой очереди использовать какой-нибудь TreeMap или ещё что-то такое, где есть доступ по индексу.
    Ответ написан
  • Как инвертировать строки в массиве, имплементировав интерфейс Function?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    В смысле, а чего тут непонятного ? У вас есть метод который на вход принимает String[] input, а выдать должен массив String[] но с инвертированными строками. Т е ровно тоже самое, что вы написали бы, если бы было так:
    public String[] reverseString(String[] input) {
    ...
    }
    Ответ написан
    Комментировать
  • Не могу подключится к MSSQL через jdbc. Как исправить?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Откуда вы взяли этот useSSL=false ? Вот дока от микрософт по их jdbc драйверу https://docs.microsoft.com/ru-ru/sql/connect/jdbc/... Там никаких useSSL нет. За то есть encryption и trustServerCertificate Там даны различные варианты с описанием. Попробуйте их.
    Ответ написан
  • Правильно ли я понял принцип инверсии зависимостей?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Посмотрите видео Александра Бындю по этой ссылке: https://blog.byndyu.ru/2013/06/blog-post_27.html (Это C# но в целом на Java очень похоже, поэтому должно восприниматься нормально) Он очень хорошо разворачивает там пример. После просмотра этого видео на код начинаешь смотреть по новому.
    Ответ написан
    Комментировать
  • Как реализовать асихронность в telegram боте?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Я не знаком с интерфейсом телеграмма, но думаю что вам нужно создавать поток всякий раз, когда бот получает обращение от нового пользователя. И уже этот поток должен ему отвечать. По окончанию ответа поток должен сам завершаться. В это же время главный поток может продолжать принимать новые обращения.
    Это наиболее простая схема асинхронной обработки, но в ней имеются недостатки. Если одновременно обращаются много пользователей, для каждого будет создан поток. Это может привести к серьёзной деградации производительности ОС или даже исчерпанию ресурсов. Эту проблему можно решить разными способами. Например, так как указал Dmitry Roo - через так называемые Future или асинхронные задачи. Но можно также использовать пул потоков и очереди. На мой взгляд решение с очередями будет более контролируемым, но и более трудоёмким и требующим опыта. Для первого шага можно использовать простую схему с созданием нового потока для каждого нового пользователя.
    Ответ написан
    Комментировать
  • Почему я не могу инициализировать переменную экземпляра после ее объявления?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    Вы пытаетесь не переменную инициализировать, а поле класса. Его можно инициализировать либо внутри метода, либо при объявлении. Но у вас инициализация лежит внутри определения класса. А так нельзя.
    Ответ написан
    Комментировать
  • В каком виде лучше хранить Entity заказ - количество закзаанного?

    @Arlekcangp
    Разработчик, Лид, Архитектор ПО
    В вопросе подробностей маловато. Какая база предполагается будет реально хранить этот entity ? Если это классическая реляционка, то на мой взгляд лучше хранить как List или Set. Потенциально Map мог бы дать возможность получать доступ к элементу заказа по его номеру (или какому то ключу) за O(1) время (т е за константное время) Это давало бы выигрыш в случае очень больших заказов с большим количеством элементов. Но поскольку реально значение хранит база, то, если необходимо выполнить поиск одного элемента, не подтягивая весь список в память, это можно сделать выборкой по индексу. (например id заказа + id элемента или же просто "сквозной" id элемента) Если же заказы не будут превышать 10-50 элементов, то и вообще нет смысла заморачиваться и надо выбирать наиболее простой способ, т е List. Уже в самом коде можно организовать доступ к этому полю как угодно. Из-за малого размера списка проблем с производительностью быть не должно.
    Ответ написан
    2 комментария